Tango valdikliai

Tango valdikliai

TANGO?

Tai įvairios techninės ir programinės įrangos valdymo sistema.
Šiuo metu TANGO palaiko 4 platformas: Linux, Windows NT, Solaris ir HP-UX.
Čia apibūdinsime darbą su Linux (Ubuntu 18.04)

Kam tai?

Supaprastina darbą su įvairia įranga ir programine įranga.

  • Jums nereikia galvoti, kaip saugoti duomenis duomenų bazėje, tai jau padaryta už jus.
  • Reikia tik aprašyti apklausos jutiklių mechanizmą.
  • Sumažina visą kodą iki vieno standarto.

Kur tai gauti?

Negalėjau jo paleisti iš šaltinio kodo, kad veiktų paruoštas TangoBox 9.3 vaizdas.
Instrukcijose aprašoma, kaip įdiegti iš paketų.

Iš ko jis susideda?

  • jive - naudojamas peržiūrėti ir redaguoti TANGO duomenų bazę.
  • POGO — kodų generatorius TANGO įrenginių serveriams.
  • Astoras — TANGO sistemos programos vadovas.

Mus domina tik pirmieji du komponentai.

Palaikomos programavimo kalbos

  • C
  • C + +
  • Java
  • JavaScript
  • Pitonas
  • Matlabas
  • „LabVIEW“

Dirbau su juo python ir c++. Čia kaip pavyzdys bus naudojamas C++.

Dabar pereikime prie aprašymo, kaip prijungti įrenginį prie TANGO ir kaip su juo dirbti. Mokestis bus laikomas pavyzdžiu GPS neo-6m-0-001:

Tango valdikliai

Kaip matote paveikslėlyje, plokštę prijungiame prie kompiuterio per UART CP2102. Prijungus prie kompiuterio, pasirodo įrenginys /dev/ttyUSB[0-N], paprastai /dev/ttyUSB0.

POGO

Dabar paleiskite Pogo, ir generuoti skeleto kodą darbui su mūsų lenta.

pogo

Tango valdikliai

Kodą jau sukūriau, sukurkime dar kartą Failas-> Naujas.

Tango valdikliai

Gauname šiuos dalykus:

Tango valdikliai

Mūsų įrenginys (ateityje prietaisu turėsime omenyje programinės įrangos dalį) yra tuščias ir turi dvi valdymo komandas: Valstybės & statusas.

Jis turi būti užpildytas būtinais atributais:

Įrenginio ypatybė - numatytosios reikšmės, kurias perkeliame į įrenginį, kad ją inicijuotų GPS plokštė, sistemoje turite perkelti plokštės pavadinimą com="/dev/ttyUSB0" ir ryšio greitis baudrade = 9600

komandos - komandos valdyti mūsų įrenginį, joms gali būti pateikti argumentai ir grąžinama reikšmė.

  • VALSTYBĖ - grąžina esamą būseną, iš narės
  • STATUSAS - grąžina esamą būseną, tai yra eilutės papildymas VALSTYBĖ
  • GPSArray - grįžta GPS eilutę formoje DevVarCharArray

Tada nustatykite įrenginio atributus, kuriuos galima nuskaityti / įrašyti į jį / iš jo.
Skaliariniai atributai - paprasti atributai (char, string, long ir kt.)
Spektro atributai - vienmačiai masyvai
Vaizdo atributai - dvimačiai masyvai

narės — būsena, kurioje yra mūsų įrenginys.

  • ATVIROS — prietaisas atidarytas.
  • CLOSE — prietaisas uždarytas.
  • NEGĖDAMAS - klaida.
  • ON — gauti duomenis iš įrenginio.
  • išjungtas — nėra duomenų iš įrenginio.

Atributo pridėjimo pavyzdys gps_string:

Tango valdikliai

Balsavimo laikotarpis laikas ms, kaip dažnai gps_string reikšmė bus atnaujinama. Jei atnaujinimo laikas nenurodytas, atributas atnaujinamas tik paprašius.

Įvyko:

Tango valdikliai

Dabar reikia sugeneruoti kodą Failas-> Generuoti

Tango valdikliai

Pagal numatytuosius nustatymus Makefile nėra generuojamas pirmą kartą, kai reikia pažymėti langelį, kad jį sukurtumėte. Tai daroma tam, kad jame atlikti pakeitimai nebūtų ištrinti naujos kartos metu. Sukūrę jį vieną kartą ir sukonfigūravę savo projektui (registruokite kompiliavimo raktus, papildomus failus), galite apie tai pamiršti.

Dabar pereikime prie programavimo. pogo su mums sugeneravo:

Tango valdikliai

Mus sudomins NEO6M.cpp ir NEO6M.h. Paimkime klasės konstruktoriaus pavyzdį:

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
}

Kas čia yra ir kas čia svarbu? Funkcija init_device() skiria atmintį mūsų atributams: gps_string & gps_masyvas, bet tai nėra svarbu. Čia svarbiausia, štai komentarai:

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

Viskas, kas yra šiame komentarų bloke, nebus įtraukta į „pogo“ vėlesnio kodo regeneravimo metu pasitrauk!. Viskas, ko nėra blokuose, bus! Tai yra vietos, kur galime programuoti ir atlikti savo redagavimus.

Kokios yra pagrindinės klasės funkcijos? 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);

Kai norime perskaityti atributo reikšmę gps_string, funkcijos bus iškviestos tokia tvarka: visada_vykdomas_kabliukas, read_attr_hardware и read_gps_string. Read_gps_string užpildys gps_string reikšme.

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
}

Kompiliacija

Eikite į šaltinio aplanką ir:

make

Programa bus sukompiliuota į ~/DeviceServers aplanką.

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

jive

jive

Tango valdikliai

Kai kurie įrenginiai jau yra duomenų bazėje, dabar sukurkime savo Redaguoti->Sukurti serverį

Tango valdikliai

Dabar pabandykime prie jo prisijungti:

Tango valdikliai

Niekas neveiks, pirmiausia turime paleisti savo programą:

sudo ./NEO6M neo6m -v2

Prie com prievado galiu prisijungti tik turėdamas teises šaknis-A. v - registravimo lygis.

Dabar galime prisijungti:

Tango valdikliai

Klientas

Žinoma, žiūrėti į paveikslėlius yra gerai grafikoje, bet reikia kažko naudingesnio. Parašykime klientą, kuris prisijungs prie mūsų įrenginio ir paims iš jo rodmenis.

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

Kaip kompiliuoti:

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

Rezultatas:

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

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

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

Rezultatą gavome kaip komandos grąžinimą, paimdami eilutės ir simbolių masyvo atributus.

Nuorodos

Straipsnį parašiau sau, nes po kurio laiko pradedu pamiršti, kaip ir ką daryti.

Ačiu už dėmesį.

Šaltinis: www.habr.com

Добавить комментарий