Tango vadīklas

Tango vadīklas

Kas ir TANGO?

Tā ir dažādas aparatūras un programmatūras pārvaldības sistēma.
Pašlaik TANGO atbalsta 4 platformas: Linux, Windows NT, Solaris un HP-UX.
Šeit mēs aprakstīsim darbu ar Linux (Ubuntu 18.04)

Kam tas paredzēts?

Vienkāršo darbu ar dažādām iekārtām un programmatūru.

  • Jums nav jādomā, kā uzglabāt datus datu bāzē, tas jau ir izdarīts jūsu vietā.
  • Ir tikai jāapraksta aptaujas sensoru mehānisms.
  • Samazina visu jūsu kodu līdz vienam standartam.

Kur to iegūt?

Es nevarēju to palaist no pirmkoda; lai strādātu, es izmantoju gatavu TangoBox 9.3 attēlu.
Instrukcijās ir aprakstīts, kā instalēt no pakotnēm.

No kā tas sastāv?

  • DŽĪVS — izmanto, lai skatītu un rediģētu TANGO datubāzi.
  • POGO — kodu ģenerators TANGO ierīču serveriem.
  • Astor — programmas TANGO sistēmas vadītājs.

Mūs interesēs tikai pirmie divi komponenti.

Atbalstītās programmēšanas valodas

  • C
  • C + +
  • Java
  • JavaScript
  • Pitons
  • Matlab
  • LabVIEW

Es strādāju ar to python un c++. Šeit kā piemērs tiks izmantots C++.

Tagad pāriesim pie apraksta, kā savienot ierīci ar TANGO un kā ar to strādāt. Maksa tiks ņemta par piemēru GPS neo-6m-0-001:

Tango vadīklas

Kā redzat attēlā, mēs savienojam plati ar datoru, izmantojot UART CP2102. Kad ierīce ir pievienota datoram, tiek parādīta ierīce /dev/ttyUSB[0-N], parasti /dev/ttyUSB0.

POGO

Tagad sāksim pogo, un ģenerēt skeleta kodu darbam ar mūsu dēli.

pogo

Tango vadīklas

Es jau izveidoju kodu, izveidosim to vēlreiz Fails-> Jauns.

Tango vadīklas

Mēs iegūstam sekojošo:

Tango vadīklas

Mūsu ierīce (turpmāk ar ierīci mēs domāsim programmatūras daļu) ir tukša, un tai ir divas vadības komandas: Valsts & Status.

Tam jābūt aizpildītam ar nepieciešamajiem atribūtiem:

Ierīces īpašums — noklusējuma vērtības, kuras mēs pārsūtām uz ierīci, lai to inicializētu; GPS platei ir jāpārsūta plates nosaukums sistēmā com="/dev/ttyUSB0" un komunikāciju porta ātrumu baudrade=9600

komandas — komandas, lai kontrolētu mūsu ierīci; tām var tikt doti argumenti un atgriešanas vērtība.

  • VALSTS - atgriež pašreizējo stāvokli, no Valstis
  • STATUS - atgriež pašreizējo statusu, tas ir virknes papildinājums VALSTS
  • GPSArray - atgriežas GPS virkne formā DevVarCharArray

Pēc tam iestatiet ierīces atribūtus, kurus var nolasīt/rakstīt uz/no tās.
Skalārie atribūti — vienkārši atribūti (char, string, long uc)
Spektra atribūti - viendimensijas masīvi
Attēla atribūti - divdimensiju masīvi

Valstis — stāvoklis, kurā atrodas mūsu ierīce.

  • OPEN — ierīce ir atvērta.
  • AIZVĒRT - ierīce ir aizvērta.
  • KĻŪDA - kļūda.
  • ON — saņemt datus no ierīces.
  • OFF — nav datu no ierīces.

Atribūta pievienošanas piemērs gps_string:

Tango vadīklas

Balsošanas periods laiks ms, cik bieži gps_string vērtība tiks atjaunināta. Ja atjaunināšanas laiks nav norādīts, atribūts tiks atjaunināts tikai pēc pieprasījuma.

Notika:

Tango vadīklas

Tagad jums ir jāģenerē kods Fails-> Ģenerēt

Tango vadīklas

Pēc noklusējuma Makefile netiek ģenerēts; pirmo reizi ir jāatzīmē izvēles rūtiņa, lai to izveidotu. Tas tiek darīts, lai tajā veiktās izmaiņas netiktu dzēstas jaunas paaudzes laikā. Vienreiz izveidojot to un konfigurējot savam projektam (reģistrējiet kompilācijas atslēgas, papildu failus), varat par to aizmirst.

Tagad pāriesim pie programmēšanas. pogo with mums ģenerēja šādu informāciju:

Tango vadīklas

Mūs interesēs NEO6M.cpp un NEO6M.h. Ņemsim klases konstruktora piemēru:

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 tur ir un kas šeit ir svarīgs? Funkcija init_device() piešķir atmiņu mūsu atribūtiem: gps_string & gps_masīvs, bet tas nav svarīgi. Vissvarīgākais šeit, šie ir komentāri:

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

Viss, kas atrodas šajā komentāru blokā, turpmākās koda atjaunošanas laikā netiks iekļauts pogo virzies prom!. Viss, kas nav blokos, būs! Šīs ir vietas, kur mēs varam programmēt un veikt savus labojumus.

Kādas ir galvenās klases funkcijas? 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);

Kad mēs vēlamies nolasīt atribūta vērtību gps_string, funkcijas tiks izsauktas šādā secībā: vienmēr_izpildīts_āķis, read_attr_hardware и lasīt_gps_string. Read_gps_string aizpildīs gps_string ar vērtību.

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
}

Kompilācija

Dodieties uz avota mapi un:

make

Programma tiks apkopota mapē ~/DeviceServers.

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

DŽĪVS

jive

Tango vadīklas

Dažas ierīces jau ir datu bāzē, tagad izveidosim mūsu Rediģēt->Izveidot serveri

Tango vadīklas

Tagad mēģināsim izveidot savienojumu ar to:

Tango vadīklas

Nekas nedarbosies, vispirms mums jāpalaiž mūsu programma:

sudo ./NEO6M neo6m -v2

Pieslēgties com portam varu tikai ar tiesībām sakne-A. v — mežizstrādes līmenis.

Tagad mēs varam izveidot savienojumu:

Tango vadīklas

Klients

Grafikā attēlu skatīšanās noteikti ir laba, bet jums ir nepieciešams kaut kas noderīgāks. Uzrakstīsim klientu, kas izveidos savienojumu ar mūsu ierīci un ņems no tās rādījumus.

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

Kā sastādīt:

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

Rezultāts:

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

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

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

Mēs saņēmām rezultātu kā komandas atgriešanos, ņemot vērā virknes un rakstzīmju masīva atribūtus.

atsauces

Rakstu rakstīju sev, jo pēc kāda laika sāku aizmirst, kā un ko darīt.

Paldies par uzmanību.

Avots: www.habr.com

Pievieno komentāru