Tai įvairios techninės ir programinės įrangos valdymo sistema.
Šiuo metu TANGO palaiko 4 platformas: Linux, Windows NT, Solaris ir HP-UX.
Čia apibūdinsime darbą su Linux (Ubuntu 18.04)
Kam tai?
Supaprastina darbą su įvairia įranga ir programine įranga.
Jums nereikia galvoti, kaip saugoti duomenis duomenų bazėje, tai jau padaryta už jus.
Reikia tik aprašyti apklausos jutiklių mechanizmą.
Dirbau su juo python ir c++. Čia kaip pavyzdys bus naudojamas C++.
Dabar pereikime prie aprašymo, kaip prijungti įrenginį prie TANGO ir kaip su juo dirbti. Mokestis bus laikomas pavyzdžiu GPS neo-6m-0-001:
Kaip matote paveikslėlyje, plokštę prijungiame prie kompiuterio per UART CP2102. Prijungus prie kompiuterio, pasirodo įrenginys /dev/ttyUSB[0-N], paprastai /dev/ttyUSB0.
POGO
Dabar paleiskite Pogo, ir generuoti skeleto kodą darbui su mūsų lenta.
pogo
Kodą jau sukūriau, sukurkime dar kartą Failas-> Naujas.
Gauname šiuos dalykus:
Mūsų įrenginys (ateityje prietaisu turėsime omenyje programinės įrangos dalį) yra tuščias ir turi dvi valdymo komandas: Valstybės & statusas.
Jis turi būti užpildytas būtinais atributais:
Įrenginio ypatybė - numatytosios reikšmės, kurias perkeliame į įrenginį, kad ją inicijuotų GPS plokštė, sistemoje turite perkelti plokštės pavadinimą com="/dev/ttyUSB0" ir ryšio greitis baudrade = 9600
komandos - komandos valdyti mūsų įrenginį, joms gali būti pateikti argumentai ir grąžinama reikšmė.
VALSTYBĖ - grąžina esamą būseną, iš narės
STATUSAS - grąžina esamą būseną, tai yra eilutės papildymas VALSTYBĖ
GPSArray - grįžta GPS eilutę formoje DevVarCharArray
Tada nustatykite įrenginio atributus, kuriuos galima nuskaityti / įrašyti į jį / iš jo. Skaliariniai atributai - paprasti atributai (char, string, long ir kt.) Spektro atributai - vienmačiai masyvai Vaizdo atributai - dvimačiai masyvai
narės — būsena, kurioje yra mūsų įrenginys.
ATVIROS — prietaisas atidarytas.
CLOSE — prietaisas uždarytas.
NEGĖDAMAS - klaida.
ON — gauti duomenis iš įrenginio.
išjungtas — nėra duomenų iš įrenginio.
Atributo pridėjimo pavyzdys gps_string:
Balsavimo laikotarpis laikas ms, kaip dažnai gps_string reikšmė bus atnaujinama. Jei atnaujinimo laikas nenurodytas, atributas atnaujinamas tik paprašius.
Įvyko:
Dabar reikia sugeneruoti kodą Failas-> Generuoti
Pagal numatytuosius nustatymus Makefile nėra generuojamas pirmą kartą, kai reikia pažymėti langelį, kad jį sukurtumėte. Tai daroma tam, kad jame atlikti pakeitimai nebūtų ištrinti naujos kartos metu. Sukūrę jį vieną kartą ir sukonfigūravę savo projektui (registruokite kompiliavimo raktus, papildomus failus), galite apie tai pamiršti.
Dabar pereikime prie programavimo. pogo su mums sugeneravo:
Mus sudomins NEO6M.cpp ir NEO6M.h. Paimkime klasės konstruktoriaus pavyzdį:
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
}
Kas čia yra ir kas čia svarbu? Funkcija init_device() skiria atmintį mūsų atributams: gps_string & gps_masyvas, bet tai nėra svarbu. Čia svarbiausia, štai komentarai:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Viskas, kas yra šiame komentarų bloke, nebus įtraukta į „pogo“ vėlesnio kodo regeneravimo metu pasitrauk!. Viskas, ko nėra blokuose, bus! Tai yra vietos, kur galime programuoti ir atlikti savo redagavimus.
Kai norime perskaityti atributo reikšmę gps_string, funkcijos bus iškviestos tokia tvarka: visada_vykdomas_kabliukas, read_attr_hardware и read_gps_string. Read_gps_string užpildys gps_string reikšme.
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
}
Kompiliacija
Eikite į šaltinio aplanką ir:
make
Programa bus sukompiliuota į ~/DeviceServers aplanką.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
jive
jive
Kai kurie įrenginiai jau yra duomenų bazėje, dabar sukurkime savo Redaguoti->Sukurti serverį
Dabar pabandykime prie jo prisijungti:
Niekas neveiks, pirmiausia turime paleisti savo programą:
sudo ./NEO6M neo6m -v2
Prie com prievado galiu prisijungti tik turėdamas teises šaknis-A. v - registravimo lygis.
Dabar galime prisijungti:
Klientas
Žinoma, žiūrėti į paveikslėlius yra gerai grafikoje, bet reikia kažko naudingesnio. Parašykime klientą, kuris prisijungs prie mūsų įrenginio ir paims iš jo rodmenis.
#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);
}
}