Tango Controls

Tango Controls

Mis see on TANGO?

See on sĂŒsteem erineva varustuse ja tarkvara haldamiseks.
TANGO toetab hetkel 4 platvormi: Linux, Windows NT, Solaris ja HP-UX.
Siin kirjeldatakse, kuidas töötada Linuxiga (Ubuntu 18.04)

Milleks seda vajatakse?

Lihtsustab erineva varustuse ja tarkvara tööd.

  • Te ei pea muretsema, kuidas andmeid andmebaasis hoida, see on juba teie eest tehtud.
  • Peate lihtsalt kirjeldama andurite kĂŒsimismekanismi.
  • Kondenseerib kogu teie koodi ĂŒhte standardisse.

Kust saada?

Mulle ei Ônnestunud allikatest seda kÀivitada, töös kasutasin valmis TangoBox 9.3 pilti.
Juhendis on kirjas, kuidas installida pakettidena.

Mis see on?

  • JIVE — kasutatakse TANGO andmebaasi vaatamiseks ja redigeerimiseks.
  • POGO — TANGO seadme serverite koodigeneraator.
  • Astor — tarkvarahaldur TANGO sĂŒsteemile.

Kaupa huvitavad ainult esimesed kaks komponenti.

Toetatud programmeerimiskeeled

  • C
  • C++
  • Java
  • JavaScript
  • Python
  • Matlab
  • LabVIEW

Töötasin sellel pythoniga & c++. NÀiteks kasutatakse c++.

NĂŒĂŒd liigume edasi, kuidas ĂŒhendad seadet TANGOGA ja kuidas sellega töötada. NĂ€iteks tuuakse vĂ€lja plaat GPS neo-6m-0-001:

Tango Controls

Nagu pildilt nĂ€ha, ĂŒhendame plaadi arvutiga lĂ€bi UART CP2102. Arvutiga ĂŒhendamisel ilmub seade /dev/ttyUSB[0-N], tavaliselt /dev/ttyUSB0.

POGO

NĂŒĂŒd kĂ€ivitame pogo, ja genereerime raamistiku koodi meie plaadi jaoks.

pogo

Tango Controls

Mul oli juba kood loodud, loome selle uuesti File->New.

Tango Controls

Saame jÀrgmise:

Tango Controls

Meie seade (edaspidi mĂ”istetakse seadmena tarkvarakomponenti) on tĂŒhi ja sellel on kaks juhtimiscommandit: State & Oleku.

See tuleks tÀita vajalike atribuutidega:

Device Property — vaikimisi vÀÀrtused, mis edastatakse seadmele selle initsialiseerimiseks, GPS plaadi puhul tuleb edastada plaadi nimi sĂŒsteemis com="/dev/ttyUSB0" ja COM-pordi kiirus baudrate=9600

Commands — meie seadme juhtimiscommandid, millele saab mÀÀrata argumendid ja tagastatava vÀÀrtuse.

  • STATE — tagastab hetkeoleku, States
  • STATUS — tagastab hetke staatuse, see on stringiline tĂ€iendamine STATE
  • GPSArray — tagastab gps stringina DevVarCharArray

SeejÀrel mÀÀratakse seadme atribuudid, mida saab lugeda/kirjutada sinna.
Scalar Attributes — lihtsad atribuudid (char, string, long jne)
Spectrum Attributes — ĂŒhemÔÔtmelised massiivid
Image Attributes — kahemÔÔtmelised massiivid

States — olek, milles meie seade asub.

  • OPEN — seade on avatud.
  • CLOSE — seade on suletud.
  • FAILT — viga.
  • KAS — vĂ”tame andmed seadmest.
  • VÄLJAS — seadmetest andmeid ei ole.

NĂ€ide atribuudi lisamisest gps_string:

Tango Controls

Uuendamisperiood aeg ms, kui sageli uuendatakse gps_string vÀÀrtust. Kui uuendamise aega ei mÀÀra, siis attribuuti uuendatakse ainult pÀringu korral.

Saime:

Tango Controls

NĂŒĂŒd tuleb genereerida kood Fail->Genereeri

Tango Controls

Vaikimisi Makefile ei genereerita, esmakordselt tuleb mÀrkida linnuke, et see luua. See on tehtud selleks, et sinna tehtud muudatused ei kaoks uue genereerimise korral. Luues selle kord ja seadistades oma projekti jaoks (kompileerimisvÔtmed, lisafailid) saab selle unustada.

NĂŒĂŒd liigume otse programmeerimise juurde. pogo genereeris meile jĂ€rgmist:

Tango Controls

Meid huvitavad NEO6M.cpp & NEO6M.h. Vaatame nÀitena klassi konstruktorit:

NEO6M::NEO6M(Tango::DeviceClass *cl, string &s)
 : TANGO_BASE_CLASS(cl, s.c_str())
{
    \/\*----- KAITSTUD REGIOON ID(NEO6M::constructor_1) AKTIIVNE ALGUS -----*\/ 
    init_device();

    \/\*----- KAITSTUD REGIOON LÕPP -----*\/    \/\/  NEO6M::constructor_1
}

Mida siin on ja mis on peamine? Funktsioonis init_device() toimub meie atribuutide jaoks mÀlu eraldamine: gps_string & gps_array, aga see ei ole oluline. Siin on kÔige olulisem, need on kommentaarid:

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

KĂ”ik, mis on selles kommentaaride plokis, ei kustutata jĂ€rgmiste koodigeneratsioonide ajal pogo-s. kustutatakse! KĂ”ik, mis ei ole blokis, kustutatakse! Need on kohad, kus me saame programmeerida ja oma muudatusi teha.NĂŒĂŒd, millised peamised funktsioonid sisaldab klass

NEO6M void always_executed_hook(); void read_attr_hardware(vector &attr_list); void read_gps_string(Tango::Attribute &attr); void read_gps_array(Tango::Attribute &attr);:

Kui me soovime lugeda atribuudi vÀÀrtust

, kutsutakse funktsioonid jĂ€rgmises jĂ€rjekorras: gps_stringalways_executed_hook read_attr_hardware, read_gps_string ja . read_gps_string-s tĂ€idetakse gps_string vÀÀrtusega.void NEO6M::read_gps_string(Tango::Attribute &attr) { DEBUG_STREAM << "NEO6M::read_gps_string(Tango::Attribute &attr) sisenemine... " <attr_gps_string_read = Tango::string_dup(this->gps.c_str());attr.set_value(attr_gps_string_read);\/\*----- KAITSTUD REGIOON LÕPP -----*\/ \/\/ NEO6M::read_gps_string }

Siseneme lÀhtekoodi kausta ja:

Kompileerimine

Programm kompileeritakse kausta ~/DeviceServers.

tee

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

jive

JIVE

Andmebaasis on juba mĂ”ned seadmed, loome nĂŒĂŒd oma.

Tango Controls

Redigeeri->Loo Server NĂŒĂŒd proovime sellele ĂŒhenduda:

Tango Controls

Midagi ei Ônnestu, esmalt tuleb kÀivitada meie programm:

Tango Controls

sudo ./NEO6M neo6m -v2

COM-porti ĂŒhendamiseks pean olema Ă”igustega

-a. root-а. v — logimise tase.

NĂŒĂŒd saame ĂŒhenduda:

Tango Controls

Kliendi

Graafikus pilte vaadata on muidugi tore, aga vajame midagi kasulikumat. Kirjutame kliendi, mis ĂŒhendub meie seadmega ja toob sellelt andmed.

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

Kuidas compida:

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

Tulemus:

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

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

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

Saime tulemuse kÀsu tagastusena, atribuudi stringi ja mÀrkide massi saamisel.

Viidatud lingid

Kirjutasin artikli endale, sest mÔne aja pÀrast hakkan unustama, kuidas ja mida teha.

AitÀh tÀhelepanu eest.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster