Je sistem za upravljanje različne strojne in programske opreme.
TANGO trenutno podpira 4 platforme: Linux, Windows NT, Solaris in HP-UX.
Tukaj bomo opisali delo z Linuxom (Ubuntu 18.04)
Čemu služi?
Poenostavlja delo z različno opremo in programsko opremo.
Ni vam treba razmišljati o tem, kako shraniti podatke v zbirko podatkov, to je že narejeno namesto vas.
Treba je le opisati mehanizem za anketiranje senzorjev.
Nisem ga mogel zagnati iz izvorne kode; za delo sem uporabil že pripravljeno sliko TangoBox 9.3.
Navodila opisujejo namestitev iz paketov.
Kaj je sestavljeno?
V ŽIVO — uporablja se za ogled in urejanje baze podatkov TANGO.
POGO — generator kode za strežnike naprav TANGO.
Astor — programski vodja sistema TANGO.
Zanimali nas bodo le prvi dve komponenti.
Podprti programski jeziki
C
C + +
Java
JavaScript
Python
matlab
LabVIEW
Delal sem z njim v python & c++. Tu bo kot primer uporabljen C++.
Zdaj pa preidimo na opis, kako napravo povezati s TANGO in kako delati z njo. Pristojbina bo vzeta kot primer GPS neo-6m-0-001:
Kot lahko vidite na sliki, ploščo povežemo z osebnim računalnikom preko UART CP2102. Ko je naprava povezana z osebnim računalnikom, se prikaže naprava /dev/ttyUSB[0-N], običajno /dev/ttyUSB0.
POGO
Zdaj pa zaženimo pogoin ustvarite okvirno kodo za delo z našo ploščo.
pogo
Kodo sem že ustvaril, ustvarimo jo znova Datoteka->Novo.
Dobimo naslednje:
Naša naprava (z napravo bomo v prihodnje razumeli programski del) je prazna in ima dva krmilna ukaza: Država & Status.
Izpolnjen mora biti s potrebnimi atributi:
Lastnost naprave — privzete vrednosti, ki jih prenesemo v napravo za inicializacijo; za GPS ploščo morate prenesti ime plošče v sistem com="/dev/ttyUSB0" in hitrost com porta baudrate=9600
ukazi — ukazi za nadzor naše naprave; lahko jim damo argumente in vrnjeno vrednost.
DRŽAVA - vrne trenutno stanje, od Države
STANJE - vrne trenutno stanje, to je dopolnilo niza DRŽAVA
GPSArray - vrača gps niz v obliki DevVarCharArray
Nato nastavite atribute naprave, ki jih je mogoče brati/pisati v/iz nje. Skalarni atributi — enostavni atributi (char, string, long itd.) Atributi spektra - enodimenzionalni nizi Atributi slike - dvodimenzionalni nizi
Države — stanje, v katerem se nahaja naša naprava.
ODPRTO — naprava je odprta.
ZAPRI - naprava je zaprta.
NAPAKA - napaka.
ON — prejemanje podatkov iz naprave.
OFF — ni podatkov iz naprave.
Primer dodajanja atributa gps_string:
Volilno obdobje čas v ms, kako pogosto bo vrednost gps_string posodobljena. Če čas posodobitve ni določen, bo atribut posodobljen samo na zahtevo.
Zgodilo se je:
Zdaj morate ustvariti kodo Datoteka->Ustvari
Privzeto se datoteka Makefile ne ustvari; prvič morate potrditi polje, da jo ustvarite. To se naredi tako, da se spremembe, ki so bile narejene v njej, med novo generacijo ne izbrišejo. Ko ste ga enkrat ustvarili in konfigurirali za svoj projekt (ključi prevajanja registra, dodatne datoteke), lahko pozabite nanj.
Zdaj pa preidimo na programiranje. pogo with je za nas ustvaril naslednje:
Zanimala nas bosta NEO6M.cpp & NEO6M.h. Vzemimo primer konstruktorja razreda:
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
}
Kaj je tam in kaj je tukaj pomembno? Funkcija init_device() dodeli pomnilnik našim atributom: gps_string & gps_matrika, vendar ni pomembno. Tu je najpomembnejša stvar, to so komentarji:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Vse, kar je znotraj tega bloka komentarjev, ne bo vključeno v pogo med nadaljnjimi regeneracijami kode premakni se!. Vse kar ni v blokih bo! To so mesta, kjer lahko programiramo in sami urejamo.
Katere so glavne funkcije, ki jih vsebuje razred? NEO6M:
Ko želimo prebrati vrednost atributa gps_string, bodo funkcije poklicane v naslednjem vrstnem redu: vedno_izvedena_kljuka, read_attr_hardware и read_gps_string. Read_gps_string bo napolnil gps_string z vrednostjo.
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
}
Sestavljanje
Pojdite v izvorno mapo in:
make
Program bo preveden v mapo ~/DeviceServers.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
V ŽIVO
jive
V zbirki podatkov je že nekaj naprav, ustvarimo svojo Uredi->Ustvari strežnik
Zdaj pa se poskusimo povezati z njim:
Nič ne bo delovalo, najprej moramo zagnati naš program:
sudo ./NEO6M neo6m -v2
Na vrata com se lahko povežem samo s pravicami koren-A. v — raven beleženja.
Zdaj lahko povežemo:
Stranka
Seveda je gledanje slik dobro v grafiki, vendar potrebujete nekaj bolj uporabnega. Napišimo odjemalca, ki se bo povezal z našo napravo in z nje jemal odčitke.
#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);
}
}