Tango Kontrolak

Tango Kontrolak

Zer da TANGO?

Hainbat hardware eta software kudeatzeko sistema bat da.
Gaur egun TANGOk 4 plataforma onartzen ditu: Linux, Windows NT, Solaris eta HP-UX.
Hemen Linux-ekin lan egitea deskribatuko dugu (Ubuntu 18.04)

Zertarako da?

Hainbat ekipamendu eta softwarerekin lana errazten du.

  • Ez duzu datu-basean datuak nola gorde pentsatu behar, dagoeneko eginda dago.
  • Inkesta-sentsoreen mekanismoa deskribatzea baino ez da beharrezkoa.
  • Zure kode guztia estandar batera murrizten du.

Non lortu?

Ezin izan nuen iturburu-kodetik abiatu; TangoBox 9.3-ren prest egindako irudi bat erabili nuen lan egiteko.
Argibideek paketeetatik nola instalatu deskribatzen dute.

Zertan datza?

  • jive β€” TANGO datu-basea ikusteko eta editatzeko erabiltzen da.
  • POGO β€” TANGO gailu zerbitzarietarako kode-sorgailua.
  • Astor β€” TANGO sistemako programa-kudeatzailea.

Lehenengo bi osagaiak bakarrik interesatuko zaizkigu.

Onartutako programazio-lengoaiak

  • C
  • C ++
  • Java
  • Ikusteko Javascript-a
  • Python
  • matlab
  • LabVIEW

Python eta c++-n lan egin nuen. Hemen C++ erabiliko da adibide gisa.

Orain pasa gaitezen gailua TANGOra nola konektatu eta harekin lan egin nola konektatu den azaltzen duen deskribapen batera. Kuota hartuko da adibide gisa GPS neo-6m-0-001:

Tango Kontrolak

Irudian ikus dezakezun bezala, plaka ordenagailura konektatzen dugu UART CP2102 bidez. PC batera konektatuta dagoenean, gailua agertzen da /dev/ttyUSB[0-N], normalean /dev/ttyUSB0.

POGO

Orain abiarazi dezagun pogo, eta sortu eskeleto-kodea gure taularekin lan egiteko.

pogo

Tango Kontrolak

Dagoeneko sortu dut kodea, sor dezagun berriro Fitxategia->Berria.

Tango Kontrolak

Honako hauek lortzen ditugu:

Tango Kontrolak

Gure gailua (etorkizunean, gailuaren arabera, softwarearen zatia esan nahi dugu) hutsik dago eta bi kontrol komando ditu: Estatuko & Status.

Beharrezko atributuekin bete behar da:

Gailuaren propietatea - hasieratzeko gailura transferitzen ditugun balio lehenetsiak; GPS plakarako, plakaren izena sisteman transferitu behar duzu com="/dev/ttyUSB0" eta com portuaren abiadura baudrade=9600

Komandoak β€” gure gailua kontrolatzeko komandoak; argumentuak eta itzulera balio bat eman diezaiekete.

  • ESTATU - uneko egoera itzultzen du, from States
  • STATUS - uneko egoera itzultzen du, hau da katearen osagarria ESTATU
  • GPSArray - itzultzen gps katea forman DevVarCharArray

Ondoren, ezarri gailuaren atributuak bertatik irakurri/idatzi daitezkeen.
Atributu eskalarrak - Atributu sinpleak (char, string, long, etab.)
Espektro-atributuak - Dimentsio bakarreko matrizeak
Irudiaren Atributuak - bi dimentsioko arrayak

States β€” gure gailua zein egoeratan dagoen.

  • OPEN β€” Gailua irekita dago.
  • ITXI - gailua itxita dago.
  • HUTS - akatsa.
  • ON β€” jaso datuak gailutik.
  • OFF β€” gailuko daturik ez.

Atributu bat gehitzearen adibidea gps_katea:

Tango Kontrolak

Bozketa epea denbora ms-tan, gps_string balioa zenbat aldiz eguneratuko den. Eguneratze-ordua zehazten ez bada, atributua eskatuta soilik eguneratuko da.

Gertatua:

Tango Kontrolak

Orain kodea sortu behar duzu Fitxategia->Sortu

Tango Kontrolak

Lehenespenez, Makefile ez da sortzen; lehen aldiz, laukia markatu behar duzu sortzeko. Hau egiten da belaunaldi berri batean egindako aldaketak ezabatu ez daitezen. Behin sortu eta zure proiekturako konfiguratu ondoren (erregistratu konpilazio gakoak, fitxategi osagarriak), ahaztu egin dezakezu.

Orain programaziora pasa gaitezen. pogo-k honako hau sortu digu:

Tango Kontrolak

NEO6M.cpp eta NEO6M.h interesatuko zaizkigu. Har dezagun klase-eraikitzaile baten adibide bat:

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
}

Zer dago eta zer da garrantzitsua hemen? init_device() funtzioak memoria esleitzen du gure atributuetarako: gps_katea & gps_array, baina ez da garrantzitsua. Hemen garrantzitsuena, hauek dira iruzkinak:

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

Iruzkin bloke honen barruan dagoen guztia ez da pogoan sartuko ondorengo kode birsorkuntzan alde egin!. Blokeetan ez dagoen guztia izango da! Hauek dira gure edizioak programatu eta egin ditzakegun tokiak.

Orain zein dira klaseak dituen funtzio nagusiak? 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);

Atributuaren balioa irakurri nahi dugunean gps_katea, funtzioak hurrenkera honetan deituko dira: beti_exekutatu_hook, read_attr_hardware ΠΈ irakurri_gps_katea. Read_gps_string balioarekin gps_string beteko du.

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
}

konpilazio

Joan iturriko karpetara eta:

make

Programa ~/DeviceServers karpetan konpilatuko da.

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

jive

jive

Tango Kontrolak

Dagoeneko gailu batzuk daude datu-basean, sortu dezagun orain gurea Editatu->Sortu zerbitzaria

Tango Kontrolak

Orain saia gaitezen harekin konektatzen:

Tango Kontrolak

Ezer ez da funtzionatuko, lehenik gure programa exekutatu behar dugu:

sudo ./NEO6M neo6m -v2

Eskubideekin soilik konektatu naiteke com portura root-A. v β€” Erregistro maila.

Orain konektatu gaitezke:

Tango Kontrolak

bezero

Grafikoetan, argazkiei begiratzea ona da, zalantzarik gabe, baina zerbait erabilgarriagoa behar duzu. Idatzi dezagun gure gailura konektatuko den bezero bat eta har dezagun irakurketak.

#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);
    }
}

Nola konpilatu:

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++

Emaitza:

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

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

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

Emaitza komando-itzulera gisa lortu dugu, kate baten atributuak eta karaktere-matrize bat hartuz.

Erreferentziak

Artikulua niretzat idatzi nuen, pixka bat igaro ondoren nola eta zer egin ahazten hasten naizelako.

Eskerrik asko zure arretagatik.

Iturria: www.habr.com

Gehitu iruzkin berria