Tango idari

Tango idari

ohun Tanbaba?

O ti wa ni a eto fun ìṣàkóso orisirisi hardware ati software.
TANGO lọwọlọwọ ṣe atilẹyin awọn iru ẹrọ 4: Lainos, Windows NT, Solaris ati HP-UX.
Nibi a yoo ṣe apejuwe ṣiṣẹ pẹlu Linux (Ubuntu 18.04)

Kini o jẹ fun?

Simplifies iṣẹ pẹlu orisirisi itanna ati software.

  • O ko nilo lati ronu bi o ṣe le fipamọ data sinu ibi ipamọ data, o ti ṣe tẹlẹ fun ọ.
  • O jẹ pataki nikan lati ṣe apejuwe ẹrọ fun awọn sensọ idibo.
  • Din gbogbo koodu rẹ si ọkan boṣewa.

Nibo ni lati gba?

Emi ko le ṣe ifilọlẹ lati koodu orisun; Mo lo aworan ti a ti ṣetan ti TangoBox 9.3 lati ṣiṣẹ.
Awọn itọnisọna ṣe apejuwe bi o ṣe le fi sori ẹrọ lati awọn idii.

Kí ni ó ní nínú?

  • GBIGBE - ti a lo lati wo ati ṣatunkọ aaye data TANGO.
  • POGO - olupilẹṣẹ koodu fun awọn olupin ẹrọ TANGO.
  • Irawọ - oluṣakoso eto fun eto TANGO.

A yoo nifẹ nikan ni awọn paati meji akọkọ.

Awọn ede siseto atilẹyin

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • matlab
  • LabVIEW

Mo ṣiṣẹ pẹlu rẹ ni Python & c ++. Nibi C++ yoo ṣee lo bi apẹẹrẹ.

Bayi jẹ ki a lọ si apejuwe bi o ṣe le so ẹrọ pọ mọ TANGO ati bii o ṣe le ṣiṣẹ pẹlu rẹ. Owo naa yoo gba bi apẹẹrẹ GPS neo-6m-0-001:

Tango idari

Bi o ti le ri ninu aworan, a so awọn ọkọ si awọn PC nipasẹ UART CP2102. Nigbati o ba sopọ si PC, ẹrọ naa yoo han /dev/ttyUSB[0-N], nigbagbogbo /dev/ttyUSB0.

POGO

Bayi jẹ ki a lọlẹ pogo, ati ṣẹda koodu egungun fun ṣiṣẹ pẹlu igbimọ wa.

pogo

Tango idari

Mo ti ṣẹda koodu tẹlẹ, jẹ ki a ṣẹda lẹẹkansi Faili-> Tuntun.

Tango idari

A gba awọn wọnyi:

Tango idari

Ẹrọ wa (ni ọjọ iwaju, nipasẹ ẹrọ a yoo tumọ si apakan sọfitiwia) ṣofo ati pe o ni awọn aṣẹ iṣakoso meji: State & Ipo.

O gbọdọ kun pẹlu awọn abuda pataki:

Ohun-ini Ẹrọ - awọn iye aiyipada ti a gbe lọ si ẹrọ lati ṣe ipilẹṣẹ rẹ; fun igbimọ GPS, o nilo lati gbe orukọ igbimọ naa sinu eto naa. com = "/dev/ttyUSB0" ati com ibudo iyara baudrade=9600

Awọn aṣẹ - Awọn aṣẹ lati ṣakoso ẹrọ wa; wọn le fun ni awọn ariyanjiyan ati iye ipadabọ.

  • Ipinle - pada awọn ti isiyi ipinle, lati States
  • Ẹrọ - pada ipo lọwọlọwọ, eyi ni ibamu okun si Ipinle
  • GPSArray - pada GPS okun ni fọọmu DevVarCharArray

Nigbamii, ṣeto awọn abuda ẹrọ ti o le ka / kọ si / lati inu rẹ.
Awọn eroja Scalar - awọn eroja ti o rọrun (char, okun, gun, bbl)
Awọn eroja julọ.Oniranran - ọkan-onisẹpo orun
Awọn eroja Aworan - meji-onisẹpo orun

States - ipinle ti ẹrọ wa wa.

  • Ṣi - ẹrọ naa ṣii.
  • CLOSE - ẹrọ ti wa ni pipade.
  • KUNA - aṣiṣe.
  • ON - gba data lati ẹrọ.
  • PA - ko si data lati ẹrọ.

Apẹẹrẹ ti fifi ẹya ara ẹrọ kun gps_okun:

Tango idari

Akoko idibo akoko ni ms, melo ni iye gps_string yoo ni imudojuiwọn. Ti akoko imudojuiwọn ko ba ni pato, abuda naa yoo ni imudojuiwọn nikan nigbati o ba beere.

O ṣẹlẹ:

Tango idari

Bayi o nilo lati ṣẹda koodu naa Faili-> Ṣe ipilẹṣẹ

Tango idari

Nipa aiyipada, Makefile ko ṣe ipilẹṣẹ; ni igba akọkọ ti o nilo lati ṣayẹwo apoti lati ṣẹda rẹ. Eyi ni a ṣe ki awọn iyipada ti a ṣe si rẹ ko ni paarẹ lakoko iran tuntun. Lehin ti o ṣẹda lẹẹkan ati tunto fun iṣẹ akanṣe rẹ (awọn bọtini akojọpọ iforukọsilẹ, awọn faili afikun), o le gbagbe nipa rẹ.

Bayi jẹ ki a lọ si siseto. pogo pẹlu ipilẹṣẹ atẹle fun wa:

Tango idari

A yoo nifẹ si NEO6M.cpp & NEO6M.h. Jẹ ki a mu apẹẹrẹ ti oluko kilasi kan:

NEO6M::NEO6M(Tango::DeviceClass *cl, string &s)
 : TANGO_BASE_CLASS(cl, s.c_str())
{
    /*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    init_device();

    /*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1
}

Kini o wa ati kini o ṣe pataki nibi? Iṣẹ init_device () ṣe ipin iranti fun awọn abuda wa: gps_okun & gps_array, ṣugbọn kii ṣe pataki. Ohun pataki julọ nibi, wọnyi ni awọn comments:

/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    .......
/*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1

Ohun gbogbo ti o wa ninu bulọọki asọye yii kii yoo wa ninu pogo lakoko awọn isọdọtun koodu atẹle gbe kuro!. Ohun gbogbo ti ko si ni awọn bulọọki yoo jẹ! Iwọnyi ni awọn aaye nibiti a ti le ṣe eto ati ṣe awọn atunṣe tiwa.

Bayi kini awọn iṣẹ akọkọ ti kilasi naa ni? NEO6M:

void always_executed_hook();
void read_attr_hardware(vector<long> &attr_list);
void read_gps_string(Tango::Attribute &attr);
void read_gps_array(Tango::Attribute &attr);

Nigba ti a ba fẹ ka iye ikalara gps_okun, awọn iṣẹ ni a yoo pe ni aṣẹ atẹle: nigbagbogbo_executed_hook, read_attr_hardware и kika_gps_okun. Read_gps_string yoo kun gps_string pẹlu iye naa.

void NEO6M::read_gps_string(Tango::Attribute &attr)
{
    DEBUG_STREAM << "NEO6M::read_gps_string(Tango::Attribute &attr) entering... " << endl;
    /*----- PROTECTED REGION ID(NEO6M::read_gps_string) ENABLED START -----*/
    //  Set the attribute value

        *this->attr_gps_string_read = Tango::string_dup(this->gps.c_str());

    attr.set_value(attr_gps_string_read);

    /*----- PROTECTED REGION END -----*/    //  NEO6M::read_gps_string
}

Iṣakojọpọ

Lọ si folda orisun ati:

make

Eto naa yoo ṣe akojọpọ sinu folda ~/DeviceServers.

tango-cs@tangobox:~/DeviceServers$ ls
NEO6M

GBIGBE

jive

Tango idari

Awọn ẹrọ kan wa tẹlẹ ninu ibi ipamọ data, jẹ ki a ṣẹda tiwa Ṣatunkọ->Ṣẹda olupin

Tango idari

Bayi jẹ ki a gbiyanju lati sopọ si rẹ:

Tango idari

Ko si ohun ti yoo ṣiṣẹ, akọkọ a nilo lati ṣiṣe eto wa:

sudo ./NEO6M neo6m -v2

Mo le sopọ si ibudo com nikan pẹlu awọn ẹtọ root-A. v - gedu ipele.

Bayi a le sopọ:

Tango idari

Onibara

Ni awọn eya aworan, wiwo awọn aworan jẹ esan dara, ṣugbọn o nilo nkan ti o wulo diẹ sii. Jẹ ki a kọ alabara kan ti yoo sopọ si ẹrọ wa ki o gba awọn kika lati ọdọ rẹ.

#include <tango.h>
using namespace Tango;

int main(int argc, char **argv) {
    try {

        //
        // create a connection to a TANGO device
        //

        DeviceProxy *device = new DeviceProxy("NEO6M/neo6m/1");

        //
        // Ping the device
        //

        device->ping();

        //
        // Execute a command on the device and extract the reply as a string
        //

        vector<Tango::DevUChar> gps_array;

        DeviceData cmd_reply;
        cmd_reply = device->command_inout("GPSArray");
        cmd_reply >> gps_array;

        for (int i = 0; i < gps_array.size(); i++) {            
            printf("%c", gps_array[i]);
        }
        puts("");

        //
        // Read a device attribute (string data type)
        //

        string spr;
        DeviceAttribute att_reply;
        att_reply = device->read_attribute("gps_string");
        att_reply >> spr;
        cout << spr << endl;

        vector<Tango::DevUChar> spr2;
        DeviceAttribute att_reply2;
        att_reply2 = device->read_attribute("gps_array");
        att_reply2.extract_read(spr2);

        for (int i = 0; i < spr2.size(); i++) {
            printf("%c", spr2[i]);
        }

        puts("");

    } catch (DevFailed &e) {
        Except::print_exception(e);
        exit(-1);
    }
}

Bii o ṣe le ṣajọ:

g++ gps.cpp -I/usr/local/include/tango -I/usr/local/include -I/usr/local/include -std=c++0x -Dlinux -L/usr/local/lib -ltango -lomniDynamic4 -lCOS4 -lomniORB4 -lomnithread -llog4tango -lzmq -ldl -lpthread -lstdc++

Esi:

tango-cs@tangobox:~/workspace/c$ ./a.out 
$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

A ni abajade bi ipadabọ aṣẹ, mu awọn abuda ti okun kan ati ọpọlọpọ awọn ohun kikọ.

jo

Mo kọ nkan naa fun ara mi, nitori lẹhin igba diẹ Mo bẹrẹ lati gbagbe bii ati kini lati ṣe.

O ṣeun fun akiyesi rẹ.

orisun: www.habr.com

Fi ọrọìwòye kun