Սա տարբեր ապարատային և ծրագրային ապահովման կառավարման համակարգ է:
TANGO-ն ներկայումս աջակցում է 4 հարթակ՝ Linux, Windows NT, Solaris և HP-UX:
Այստեղ մենք նկարագրելու ենք Linux-ի հետ աշխատանքը (Ubuntu 18.04)
Ինչի համար է դա?
Պարզեցնում է աշխատանքը տարբեր սարքավորումների և ծրագրերի հետ:
Պետք չէ մտածել, թե ինչպես պահել տվյալները տվյալների բազայում, դա արդեն արված է ձեզ համար:
Միայն անհրաժեշտ է նկարագրել սոցհարցման սենսորների մեխանիզմը:
Ես չկարողացա գործարկել այն սկզբնական կոդից, ես օգտագործել եմ TangoBox 9.3-ի պատրաստի պատկերը աշխատելու համար:
Հրահանգները նկարագրում են, թե ինչպես տեղադրել փաթեթներից:
Ինչից է այն բաղկացած:
ՋԻՎ — օգտագործվում է TANGO տվյալների բազան դիտելու և խմբագրելու համար:
ՊՈԳՈ — կոդերի գեներատոր TANGO սարքի սերվերների համար:
Աստոր — ծրագրի ղեկավար TANGO համակարգի համար:
Մեզ կհետաքրքրեն միայն առաջին երկու բաղադրիչները։
Աջակցվող ծրագրավորման լեզուներ
C
C ++
Java
JavaScript
Python
Մատլաբ
LabVIEW- ը
Ես դրա հետ աշխատել եմ python & c++-ում։ Այստեղ C++-ը կօգտագործվի որպես օրինակ։
Այժմ եկեք անցնենք նկարագրությանը, թե ինչպես միացնել սարքը TANGO-ին և ինչպես աշխատել դրա հետ: Վճարը կվերցվի որպես օրինակ GPS neo-6m-0-001:
Ինչպես տեսնում եք նկարում, մենք UART CP2102-ի միջոցով միացնում ենք տախտակը համակարգչին: Երբ միացված է համակարգչին, սարքը հայտնվում է /dev/ttyUSB[0-N], սովորաբար /dev/ttyUSB0:
ՊՈԳՈ
Հիմա եկեք գործարկենք Pogo, և ստեղծեք կմախքի կոդ մեր տախտակի հետ աշխատելու համար:
pogo
Ես արդեն ստեղծել եմ կոդը, եկեք նորից ստեղծենք Ֆայլ->Նոր.
Մենք ստանում ենք հետևյալը.
Մեր սարքը (ապագայում սարք ասելով նկատի կունենանք ծրագրային մասը) դատարկ է և ունի երկու կառավարման հրաման. պետական & Ստատուս.
Այն պետք է լրացվի անհրաժեշտ հատկանիշներով.
Սարքի հատկություն — լռելյայն արժեքներ, որոնք մենք փոխանցում ենք սարքին՝ այն սկզբնավորելու համար; GPS տախտակի համար դուք պետք է փոխանցեք տախտակի անունը համակարգում com = "/dev/ttyUSB0" և կապի արագությունը baudrade=9600
Հրամաններ — հրամաններ՝ կառավարելու մեր սարքը, նրանց կարող են տրվել արգումենտներ և վերադարձի արժեք:
ՊԵՏՈՒԹՅՈՒՆ - վերադարձնում է ընթացիկ վիճակը, սկսած States
STATUS- ը - վերադարձնում է ընթացիկ կարգավիճակը, սա տողի լրացումն է ՊԵՏՈՒԹՅՈՒՆ
GPSArray - վերադառնում է GPS լարը ձեւով DevVarCharArray
Հաջորդը, սահմանեք սարքի ատրիբուտները, որոնք կարող են կարդալ/գրվել դրան/նրանից: Scalar հատկանիշներ - պարզ հատկանիշներ (նիշ, լար, երկար և այլն) Սպեկտրի հատկանիշներ - միաչափ զանգվածներ Պատկերի հատկանիշներ - երկչափ զանգվածներ
States — վիճակը, որում գտնվում է մեր սարքը:
ԲԱՑ - սարքը բաց է:
ՓԱԿԵԼ - սարքը փակ է:
ՉԱՓՈԽՎԵԼ - սխալ.
ON — ստանալ տվյալներ սարքից:
OFF — սարքից տվյալներ չկան:
Հատկանիշ ավելացնելու օրինակ gps_string:
Քվեարկության շրջան ժամանակը ms-ով, որքան հաճախ է թարմացվելու gps_string արժեքը: Եթե թարմացման ժամանակը նշված չէ, հատկանիշը կթարմացվի միայն խնդրանքով:
Տեղի է ունեցել:
Այժմ դուք պետք է գեներացնեք կոդը Ֆայլ -> Ստեղծել
Լռելյայնորեն, Makefile-ը չի ստեղծվում, այն ստեղծելու համար առաջին անգամ անհրաժեշտ է նշել վանդակը: Դա արվում է, որպեսզի նոր սերնդի ժամանակ դրանում կատարված փոփոխությունները չջնջվեն։ Մեկ անգամ ստեղծելով այն և կարգավորելով այն ձեր նախագծի համար (գրանցել կոմպիլյացիայի բանալիներ, լրացուցիչ ֆայլեր), կարող եք մոռանալ դրա մասին:
Հիմա անցնենք ծրագրավորմանը։ pogo-ն մեզ համար ստեղծել է հետևյալը.
Մեզ կհետաքրքրի NEO6M.cpp & NEO6M.h: Բերենք դասի կոնստրուկտորի օրինակ.
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
}
Ի՞նչ կա այստեղ և ի՞նչն է կարևոր: Init_device() ֆունկցիան հիշողություն է հատկացնում մեր հատկանիշներին. gps_string & gps_array, բայց դա կարևոր չէ։ Այստեղ ամենակարեւորը, սրանք են մեկնաբանությունները.
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Այն ամենը, ինչ կա այս մեկնաբանությունների բլոկի ներսում, չի ներառվի pogo-ում կոդերի հետագա վերականգնման ժամանակ հեռացիր!. Այն ամենը, ինչ բլոկների մեջ չէ, կլինի: Սրանք այն վայրերն են, որտեղ մենք կարող ենք ծրագրավորել և կատարել մեր սեփական խմբագրումները:
Հիմա որո՞նք են դասի հիմնական գործառույթները: NEO6M:
Երբ մենք ուզում ենք կարդալ հատկանիշի արժեքը gps_string, գործառույթները կկանչվեն հետևյալ հաջորդականությամբ. always_executed_hook, read_attr_hardware и read_gps_string. Read_gps_string-ը կլրացնի 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
}
Կազմում
Գնացեք աղբյուրի թղթապանակ և.
make
Ծրագիրը կկազմվի ~/DeviceServers թղթապանակում:
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
ՋԻՎ
jive
Տվյալների բազայում արդեն կան որոշ սարքեր, եկեք հիմա ստեղծենք մերը Խմբագրել->Ստեղծել սերվեր
Հիմա եկեք փորձենք միանալ դրան.
Ոչինչ չի աշխատի, նախ մենք պետք է գործարկենք մեր ծրագիրը.
sudo ./NEO6M neo6m -v2
Ես կարող եմ միանալ միայն com-պորտին իրավունքներով արմատ-Ա. v - անտառահատումների մակարդակ:
Այժմ մենք կարող ենք միացնել.
Հաճախորդը
Գրաֆիկայում նկարները դիտելը, իհարկե, լավ է, բայց ձեզ ավելի օգտակար բան է պետք: Եկեք գրենք հաճախորդ, որը կմիանա մեր սարքին և ընթերցումներ կվերցնի դրանից:
#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);
}
}