Tango vadīklas

Tango vadīklas

Kas ir TANGO?

Tā ir dažādas aparatūras un programmatūras pārvaldības sistēma.
TANGO поГГерживает 4 платформы на Ганный момент: Linux, Windows NT, Solaris Šø HP-UX.
Š—Š“ŠµŃŃŒ Š±ŃƒŠ“ŠµŃ‚ описана работа с 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

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster