Tango kontrole

Tango kontrole

što TANGO?

To je sustav za upravljanje različitim hardverom i softverom.
TANGO trenutno podržava 4 platforme: Linux, Windows NT, Solaris i HP-UX.
Ovdje ćemo opisati rad s Linuxom (Ubuntu 18.04)

Dlâ čego nužno?

Pojednostavljuje rad s različitom opremom i softverom.

  • Ne morate razmišljati o tome kako pohraniti podatke u bazu podataka, to je već učinjeno za vas.
  • Potrebno je samo opisati mehanizam za prozivanje senzora.
  • Svodi sav vaš kôd na jedan standard.

Gdje to dobiti?

Nisam ga mogao pokrenuti iz izvornog koda; za rad sam koristio gotovu sliku TangoBoxa 9.3.
Upute opisuju kako instalirati iz paketa.

Od čega se sastoji?

  • JIVE — koristi se za pregled i uređivanje TANGO baze podataka.
  • POGO — generator koda za poslužitelje uređaja TANGO.
  • Astor — voditelj programa za sustav TANGO.

Zanimat će nas samo prve dvije komponente.

Podržani programski jezici

  • C
  • C + +
  • Java
  • JavaScript
  • Piton
  • matlab
  • LabVIEW

Radio sam s njim u python & c++. Ovdje će se kao primjer koristiti C++.

Sada prijeđimo na opis kako spojiti uređaj na TANGO i kako raditi s njim. Naknada će se uzeti kao primjer GPS neo-6m-0-001:

Tango kontrole

Kao što vidite na slici, ploču spajamo na PC preko UART CP2102. Kada je spojen na računalo, uređaj se pojavljuje /dev/ttyUSB[0-N], obično /dev/ttyUSB0.

POGO

Sada pokrenimo Pogo, i generirajte okvirni kod za rad s našom pločom.

pogo

Tango kontrole

Već sam izradio kod, napravimo ga ponovno Datoteka->Novo.

Tango kontrole

Dobivamo sljedeće:

Tango kontrole

Naš uređaj (ubuduće ćemo pod uređajem misliti na softverski dio) je prazan i ima dvije kontrolne naredbe: država & status.

Mora biti ispunjen potrebnim atributima:

Svojstvo uređaja — zadane vrijednosti koje prenosimo na uređaj za inicijalizaciju; za GPS ploču potrebno je prenijeti naziv ploče u sustavu com="/dev/ttyUSB0" i brzinu com porta baudrade=9600

Naredbe — naredbe za upravljanje našim uređajem; mogu im se dati argumenti i povratna vrijednost.

  • DRŽAVA - vraća trenutno stanje, od Države
  • STATUS - vraća trenutni status, ovo je komplement niza DRŽAVA
  • GPSArray - vraća GPS niz u obrascu DevVarCharArray

Zatim postavite atribute uređaja koji se mogu čitati/pisati na/s njega.
Skalarni atributi — jednostavni atributi (char, string, long, itd.)
Atributi spektra - jednodimenzionalni nizovi
Atributi slike - dvodimenzionalni nizovi

Države — stanje u kojem se nalazi naš uređaj.

  • OTVORENO — uređaj je otvoren.
  • ZATVORITE - uređaj je zatvoren.
  • GREŠKA - pogreška.
  • ON — primati podatke s uređaja.
  • OFF — nema podataka s uređaja.

Primjer dodavanja atributa gps_string:

Tango kontrole

Izborno razdoblje vrijeme u ms, koliko često će se vrijednost gps_string ažurirati. Ako vrijeme ažuriranja nije navedeno, atribut će se ažurirati samo na zahtjev.

Dogodilo se:

Tango kontrole

Sada morate generirati kod Datoteka->Generiraj

Tango kontrole

Prema zadanim postavkama, Makefile se ne generira; prvi put morate potvrditi okvir da biste ga stvorili. To je učinjeno kako se promjene u njemu ne bi izbrisale tijekom nove generacije. Nakon što ste ga jednom izradili i konfigurirali za svoj projekt (ključevi kompilacije registra, dodatne datoteke), možete zaboraviti na njega.

Sada prijeđimo na programiranje. pogo with generirao je sljedeće za nas:

Tango kontrole

Zanimat će nas NEO6M.cpp & NEO6M.h. Uzmimo primjer konstruktora klase:

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
}

Što je tu i što je važno? Funkcija init_device() dodjeljuje memoriju za naše atribute: gps_string & gps_niz, ali nije važno. Najvažnija stvar ovdje, ovo su komentari:

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

Sve što se nalazi unutar ovog bloka komentara neće biti uključeno u pogo tijekom naknadnih regeneracija koda Odmakni se!. Sve što nije u blokovima bit će! Ovo su mjesta gdje možemo programirati i sami uređivati.

Koje su glavne funkcije koje klasa sadrži? 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);

Kada želimo očitati vrijednost atributa gps_string, funkcije će biti pozvane sljedećim redoslijedom: uvijek_izvršena_kvaka, read_attr_hardware и pročitaj_gps_string. Read_gps_string ispunit će gps_string vrijednošću.

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
}

Kompilacija

Idite u izvornu mapu i:

make

Program će se kompajlirati u mapu ~/DeviceServers.

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

JIVE

jive

Tango kontrole

Već postoje neki uređaji u bazi podataka, kreirajmo sada naš Uredi->Stvori poslužitelj

Tango kontrole

Sada se pokušajmo povezati s njim:

Tango kontrole

Ništa neće raditi, prvo moramo pokrenuti naš program:

sudo ./NEO6M neo6m -v2

Mogu se spojiti samo na com port s pravima korijena. v — razina zapisivanja.

Sada se možemo povezati:

Tango kontrole

kupac

U grafici je gledanje slika svakako dobro, ali treba vam nešto korisnije. Napišimo klijenta koji će se spojiti na naš uređaj i uzimati očitanja s njega.

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

Kako sastaviti:

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

Rezultat:

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

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

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

Dobili smo rezultat kao naredbu return, uzimajući atribute niza i niza znakova.

reference

Napisao sam članak za sebe, jer nakon nekog vremena počinjem zaboravljati kako i što učiniti.

Hvala na pozornosti.

Izvor: www.habr.com

Dodajte komentar