Ito ay isang sistema para sa pamamahala ng iba't ibang hardware at software.
Kasalukuyang sinusuportahan ng TANGO ang 4 na platform: Linux, Windows NT, Solaris at HP-UX.
Dito ay ilalarawan namin ang pagtatrabaho sa Linux (Ubuntu 18.04)
Para saan ito?
Pinapasimple ang trabaho sa iba't ibang kagamitan at software.
Hindi mo na kailangang isipin kung paano mag-imbak ng data sa database, tapos na ito para sa iyo.
Kinakailangan lamang na ilarawan ang mekanismo para sa mga sensor ng botohan.
Binabawasan ang lahat ng iyong code sa isang pamantayan.
Hindi ko ito mailunsad mula sa source code; Gumamit ako ng isang handa na larawan ng TangoBox 9.3 upang gumana.
Inilalarawan ng mga tagubilin kung paano mag-install mula sa mga pakete.
Ano ang binubuo nito?
jive β ginagamit upang tingnan at i-edit ang database ng TANGO.
POGO β generator ng code para sa mga server ng TANGO device.
Astor β program manager para sa TANGO system.
Magiging interesado lamang kami sa unang dalawang bahagi.
Mga sinusuportahang programming language
C
C + +
Java
JavaScript
Sawa
matlab
LabVIEW
Nagtatrabaho ako dito sa python & c++. Dito gagamitin ang C++ bilang isang halimbawa.
Ngayon ay lumipat tayo sa isang paglalarawan kung paano ikonekta ang aparato sa TANGO at kung paano ito gagana. Ang bayad ay kukunin bilang isang halimbawa GPS neo-6m-0-001:
Tulad ng makikita mo sa larawan, ikinonekta namin ang board sa PC sa pamamagitan ng UART CP2102. Kapag nakakonekta sa isang PC, lalabas ang device /dev/ttyUSB[0-N], kadalasan /dev/ttyUSB0.
POGO
Ngayon ilunsad natin pogo, at bumuo ng skeleton code para sa pagtatrabaho sa aming board.
pogo
Nagawa ko na ang code, gawin natin itong muli File->Bago.
Nakukuha namin ang sumusunod:
Ang aming device (sa hinaharap, ayon sa device, ang ibig sabihin ay bahagi ng software) ay walang laman at may dalawang control command: estado & katayuan.
Dapat itong punan ng mga kinakailangang katangian:
Ari-arian ng Device β mga default na halaga na inilipat namin sa device upang masimulan ito; para sa GPS board, kailangan mong ilipat ang pangalan ng board sa system com="/dev/ttyUSB0" at bilis ng com port baudrade=9600
Command β mga utos upang kontrolin ang aming device; maaari silang bigyan ng mga argumento at isang return value.
STATE - ibinabalik ang kasalukuyang estado, mula sa States
STATUS - ibinabalik ang kasalukuyang katayuan, ito ang pandagdag ng string STATE
GPSArray - nagbabalik gps string sa anyo DevVarCharArray
Susunod, itakda ang mga katangian ng device na maaaring basahin/isulat sa/mula rito. Mga Katangian ng Scalar β mga simpleng katangian (char, string, long, atbp.) Mga Katangian ng Spectrum - mga one-dimensional na array Mga Katangian ng Larawan - dalawang-dimensional na array
States β ang estado kung saan matatagpuan ang aming device.
OPEN β nakabukas ang device.
CLOSE - ang aparato ay sarado.
NABIGO - pagkakamali.
ON β tumanggap ng data mula sa device.
PATAY β walang data mula sa device.
Halimbawa ng pagdaragdag ng isang katangian gps_string:
Panahon ng botohan oras sa ms, gaano kadalas maa-update ang halaga ng gps_string. Kung ang oras ng pag-update ay hindi tinukoy, ang katangian ay maa-update lamang kapag hiniling.
Nangyari:
Ngayon ay kailangan mong bumuo ng code File->Bumuo
Bilang default, ang Makefile ay hindi nabuo; sa unang pagkakataon na kailangan mong lagyan ng tsek ang kahon upang gawin ito. Ginagawa ito upang ang mga pagbabagong ginawa dito ay hindi matanggal sa panahon ng bagong henerasyon. Ang pagkakaroon ng isang beses na nilikha at na-configure ito para sa iyong proyekto (magrehistro ng mga compilation key, karagdagang mga file), maaari mong kalimutan ang tungkol dito.
Ngayon ay lumipat tayo sa programming. pogo na may nabuong sumusunod para sa amin:
Magiging interesado kami sa NEO6M.cpp & NEO6M.h. Kumuha tayo ng isang halimbawa ng isang tagabuo ng 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
}
Ano ang mayroon at kung ano ang mahalaga dito? Ang init_device() function ay naglalaan ng memorya para sa aming mga katangian: gps_string & gps_array, ngunit hindi ito mahalaga. Ang pinakamahalagang bagay dito, ito ang mga komento:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Ang lahat ng nasa loob ng comment block na ito ay hindi isasama sa pogo sa mga susunod na pagbabagong-buhay ng code lumayo ka!. Lahat ng wala sa mga bloke ay magiging! Ito ang mga lugar kung saan maaari tayong magprograma at gumawa ng sarili nating mga pag-edit.
Ngayon ano ang mga pangunahing pag-andar na nilalaman ng klase? NEO6M:
Kapag gusto nating basahin ang attribute value gps_string, ang mga function ay tatawagin sa sumusunod na pagkakasunud-sunod: always_executed_hook, read_attr_hardware ΠΈ read_gps_string. Ang Read_gps_string ay pupunuin ang gps_string ng halaga.
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
}
Kompilasyon
Pumunta sa source folder at:
make
Ang programa ay isasama sa folder na ~/DeviceServers.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
jive
jive
Mayroon nang ilang device sa database, gawin natin ngayon ang atin I-edit->Gumawa ng Server
Ngayon subukan nating kumonekta dito:
Walang gagana, kailangan muna nating patakbuhin ang ating programa:
sudo ./NEO6M neo6m -v2
Maaari lang akong kumonekta sa com port na may mga karapatan ugat-A. v - antas ng pag-log.
Ngayon ay maaari na tayong kumonekta:
Customer
Sa mga graphics, ang pagtingin sa mga larawan ay tiyak na mabuti, ngunit kailangan mo ng isang bagay na mas kapaki-pakinabang. Sumulat tayo ng isang kliyente na kumokonekta sa aming device at kukuha ng mga pagbabasa mula dito.
#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);
}
}