Ovládanie tanga

Ovládanie tanga

Čo je TANGO?

Je to systém na správu rôzneho hardvéru a softvéru.
TANGO v súčasnosti podporuje 4 platformy: Linux, Windows NT, Solaris a HP-UX.
Tu popíšeme prácu s Linuxom (Ubuntu 18.04)

Či nie?

Zjednodušuje prácu s rôznymi zariadeniami a softvérom.

  • Nemusíte premýšľať o tom, ako uložiť údaje do databázy, je to už hotové za vás.
  • Je len potrebné opísať mechanizmus pre polling senzory.
  • Redukuje celý váš kód na jeden štandard.

Kde sa dostať?

Nepodarilo sa mi to spustiť zo zdrojového kódu, na prácu som použil hotový obrázok TangoBoxu 9.3.
Pokyny popisujú, ako nainštalovať z balíkov.

Z čoho pozostáva?

  • jive — slúži na prezeranie a úpravu databázy TANGO.
  • POGO — generátor kódu pre servery zariadení TANGO.
  • Astor — programový manažér pre systém TANGO.

Nás budú zaujímať len prvé dva komponenty.

Podporované programovacie jazyky

  • C
  • C + +
  • Jáva
  • JavaScript
  • Pytón
  • MATLAB
  • LabVIEW

Pracoval som s tým v pythone a c++. Tu sa ako príklad použije C++.

Teraz prejdime k popisu, ako pripojiť zariadenie k TANGO a ako s ním pracovať. Poplatok bude uvedený ako príklad GPS neo-6m-0-001:

Ovládanie tanga

Ako vidíte na obrázku, dosku pripájame k PC cez UART CP2102. Po pripojení k počítaču sa zobrazí zariadenie /dev/ttyUSB[0-N], zvyčajne /dev/ttyUSB0.

POGO

Teraz poďme spustiť pogoa vygenerujte kód kostry pre prácu s našou doskou.

pogo

Ovládanie tanga

Kód som už vytvoril, poďme ho vytvoriť znova Súbor->Nový.

Ovládanie tanga

Získame nasledovné:

Ovládanie tanga

Naše zariadenie (v budúcnosti budeme zariadením chápať softvérovú časť) je prázdne a má dva ovládacie príkazy: stáť & postavenie.

Musí byť vyplnený potrebnými atribútmi:

Vlastnosť zariadenia — predvolené hodnoty, ktoré prenášame do zariadenia na jeho inicializáciu; pre tabuľu GPS je potrebné preniesť názov dosky v systéme com="/dev/ttyUSB0" a rýchlosť com portu baudrade=9600

Príkazy — príkazy na ovládanie nášho zariadenia; môžu im byť zadané argumenty a návratová hodnota.

  • STATE - vráti aktuálny stav, od States
  • POSTAVENIE - vráti aktuálny stav, toto je doplnok reťazca STATE
  • GPSArray - návraty gps reťazec vo formulári DevVarCharArray

Ďalej nastavte atribúty zariadenia, ktoré je možné čítať/zapisovať do/z neho.
Skalárne atribúty — jednoduché atribúty (char, string, long, atď.)
Atribúty spektra - jednorozmerné polia
Atribúty obrázka - dvojrozmerné polia

States — stav, v ktorom sa naše zariadenie nachádza.

  • OTVORENÝ — zariadenie je otvorené.
  • ZAVRIEŤ - zariadenie je zatvorené.
  • ZLYHAŤ - chyba.
  • ON — prijímať dáta zo zariadenia.
  • OFF — žiadne údaje zo zariadenia.

Príklad pridania atribútu gps_string:

Ovládanie tanga

Volebné obdobie čas v ms, ako často sa bude hodnota gps_string aktualizovať. Ak nie je určený čas aktualizácie, atribút sa aktualizuje iba na požiadanie.

Stalo:

Ovládanie tanga

Teraz musíte vygenerovať kód Súbor->Generovať

Ovládanie tanga

V predvolenom nastavení sa Makefile negeneruje; prvýkrát ho musíte začiarknuť, aby ste ho vytvorili. Deje sa tak tak, aby sa v ňom vykonané zmeny nevymazali pri novej generácii. Keď ho raz vytvoríte a nakonfigurujete pre svoj projekt (zaregistrujte kompilačné kľúče, ďalšie súbory), môžete na to zabudnúť.

Teraz prejdime k programovaniu. pogo with nám vygeneroval nasledovné:

Ovládanie tanga

Nás budú zaujímať NEO6M.cpp & NEO6M.h. Zoberme si príklad konštruktora triedy:

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
}

Čo tam je a čo je tu dôležité? Funkcia init_device() alokuje pamäť pre naše atribúty: gps_string & gps_array, ale to nie je dôležité. Najdôležitejšia vec tu, toto sú komentáre:

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

Všetko, čo je v tomto bloku komentárov, nebude zahrnuté do pogo počas nasledujúcich regenerácií kódu odsťahovať sa!. Všetko, čo nie je v blokoch, bude! Toto sú miesta, kde môžeme programovať a robiť vlastné úpravy.

Aké sú hlavné funkcie, ktoré trieda obsahuje? 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);

Keď chceme prečítať hodnotu atribútu gps_string, funkcie sa budú volať v nasledujúcom poradí: always_executed_hook, read_attr_hardware и read_gps_string. Read_gps_string vyplní gps_string hodnotou.

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
}

zostavenie

Prejdite do zdrojového priečinka a:

make

Program bude skompilovaný do priečinka ~/DeviceServers.

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

jive

jive

Ovládanie tanga

V databáze už sú nejaké zariadenia, poďme teraz vytvoriť naše Upraviť->Vytvoriť server

Ovládanie tanga

Teraz sa skúsme k nemu pripojiť:

Ovládanie tanga

Nič nebude fungovať, najprv musíme spustiť náš program:

sudo ./NEO6M neo6m -v2

Na com port sa môžem pripojiť len s právami koreň-A. v — úroveň ťažby dreva.

Teraz sa môžeme pripojiť:

Ovládanie tanga

zákazník

V grafike je prezeranie obrázkov určite dobré, ale potrebujete niečo užitočnejšie. Napíšme klienta, ktorý sa pripojí k nášmu zariadeniu a bude z neho brať údaje.

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

Ako zostaviť:

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

Výsledok:

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

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

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

Výsledok sme dostali ako návrat príkazu, pričom sme prevzali atribúty reťazca a poľa znakov.

referencie

Článok som napísal pre seba, pretože po chvíli začnem zabúdať, ako a čo mám robiť.

Ďakujem vám za pozornosť.

Zdroj: hab.com

Pridať komentár