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.
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:
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
Već sam izradio kod, napravimo ga ponovno Datoteka->Novo.
Dobivamo sljedeće:
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:
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:
Sada morate generirati kod Datoteka->Generiraj
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:
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.
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
Već postoje neki uređaji u bazi podataka, kreirajmo sada naš Uredi->Stvori poslužitelj
Sada se pokušajmo povezati s njim:
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:
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);
}
}