See on süsteem erineva riist- ja tarkvara haldamiseks.
TANGO toetab praegu 4 platvormi: Linux, Windows NT, Solaris ja HP-UX.
Siin kirjeldame tööd Linuxiga (Ubuntu 18.04)
Mida on vaja?
Lihtsustab tööd erinevate seadmete ja tarkvaraga.
Te ei pea mõtlema, kuidas andmeid andmebaasi salvestada, see on teie eest juba tehtud.
On vaja ainult kirjeldada küsitlusandurite mehhanismi.
Ma ei saanud seda lähtekoodist käivitada; kasutasin töötamiseks TangoBox 9.3 valmiskujutist.
Juhendis kirjeldatakse, kuidas pakettidest installida.
Millest see koosneb?
JIVE — kasutatakse TANGO andmebaasi vaatamiseks ja redigeerimiseks.
POGO — koodigeneraator TANGO seadmeserverite jaoks.
Astor — süsteemi TANGO programmijuht.
Meid huvitavad ainult kaks esimest komponenti.
Toetatud programmeerimiskeeled
C
C + +
Java
JavaScript
Python
matlab
LabVIEW
Töötasin sellega pythonis ja c++-s. Siin kasutatakse näitena C++.
Liigume nüüd edasi seadme TANGO-ga ühendamise ja sellega töötamise kirjelduse juurde. Tasu võetakse eeskujuks GPS neo-6m-0-001:
Nagu pildil näha, ühendame plaadi arvutiga UART CP2102 kaudu. Kui seade on arvutiga ühendatud, kuvatakse seade /dev/ttyUSB[0-N], tavaliselt /dev/ttyUSB0.
POGO
Nüüd käivitame pogoja looge meie tahvliga töötamiseks skeletikood.
pogo
Olen koodi juba loonud, loome uuesti Fail-> Uus.
Saame järgmise:
Meie seade (edaspidi mõtleme seadme all tarkvaraosa) on tühi ja sellel on kaks juhtkäsku: riik & olek.
See peab olema täidetud vajalike atribuutidega:
Seadme atribuut — vaikeväärtused, mille me selle lähtestamiseks seadmesse üle kanname; GPS-plaadi jaoks peate süsteemis üle kandma plaadi nime com="/dev/ttyUSB0" ja side kiirus baudrade = 9600
Käsud — käsud meie seadme juhtimiseks; neile saab anda argumendid ja tagastatava väärtuse.
RIIK - tagastab praeguse oleku, alates Ühendriigid
STATUS - tagastab praeguse oleku, see on stringi täiendus RIIK
GPSArray - naaseb GPS string vormis DevVarCharArray
Järgmisena määrake seadme atribuudid, mida saab sellest lugeda/kirjutada. Skalaarsed atribuudid — lihtsad atribuudid (char, string, long jne) Spektri atribuudid - ühemõõtmelised massiivid Pildi atribuudid - kahemõõtmelised massiivid
Ühendriigid — olek, milles meie seade asub.
AVATUD — seade on avatud.
CLOSE — seade on suletud.
EBAÕNNESTUS - viga.
ON — seadmest andmete vastuvõtmine.
OFF — seadmest pole andmeid.
Näide atribuudi lisamisest gps_string:
Valimisperiood aeg ms, kui sageli väärtust gps_string värskendatakse. Kui värskendamise aega pole määratud, värskendatakse atribuuti ainult nõudmisel.
Juhtus:
Nüüd peate koodi genereerima Fail-> Genereeri
Vaikimisi Makefile'i ei genereerita; esimest korda peate selle loomiseks märkima. Seda tehakse selleks, et selles tehtud muudatusi uue põlvkonna ajal ei kustutataks. Olles selle ühe korra loonud ja oma projekti jaoks konfigureerinud (registreerige kompileerimisvõtmed, lisafailid), võite selle unustada.
Liigume nüüd programmeerimise juurde. pogo with genereeris meie jaoks järgmise:
Oleme huvitatud NEO6M.cpp ja NEO6M.h. Võtame näite klassikonstruktorist:
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
}
Mis seal on ja mis on siin oluline? Funktsioon init_device() eraldab meie atribuutidele mälu: gps_string & gps_massiiv, kuid see pole oluline. Siin on kõige tähtsam, need on kommentaarid:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Kõike, mis on selles kommentaariplokis, ei kaasata järgnevate koodide regenereerimise käigus pogosse ära kolima!. Kõik, mis pole plokkides, saab olema! Need on kohad, kus saame programmeerida ja ise toimetada.
Millised on peamised funktsioonid, mida klass sisaldab? NEO6M:
Kui tahame lugeda atribuudi väärtust gps_string, kutsutakse funktsioone järgmises järjekorras: alati_teostatud_konks, read_attr_hardware и loe_gps_string. Read_gps_string täidab väärtusega gps_string.
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
}
Koostamine
Minge lähtekausta ja:
make
Programm kompileeritakse kausta ~/DeviceServers.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
JIVE
jive
Andmebaasis on juba mõned seadmed, loome nüüd oma Redigeerimine->Loo server
Proovime nüüd sellega ühenduse luua:
Miski ei tööta, kõigepealt peame käivitama oma programmi:
sudo ./NEO6M neo6m -v2
Saan ühenduse luua ainult õigustega juur-A. v — metsaraie tase.
Nüüd saame ühendada:
Klient
Graafikas on piltide vaatamine kindlasti hea, kuid vaja on midagi kasulikumat. Kirjutame kliendi, mis loob ühenduse meie seadmega ja võtab sellelt näidud.
#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);
}
}