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.
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:
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
Kód som už vytvoril, poďme ho vytvoriť znova Súbor->Nový.
Získame nasledovné:
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:
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:
Teraz musíte vygenerovať kód Súbor->Generovať
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é:
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:
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
V databáze už sú nejaké zariadenia, poďme teraz vytvoriť naše Upraviť->Vytvoriť server
Teraz sa skúsme k nemu pripojiť:
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ť:
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);
}
}