
чӣ ?
Ин як системаи идоракунии таҷҳизот ва нармафзори гуногун аст.
TANGO ҳоло 4 платформаро дастгирӣ мекунад: Linux, Windows NT, Solaris ва HP-UX.
Ин бахш Linux-ро фаро мегирад (Ubuntu 18.04)
Он барои чӣ?
Корро бо тачхизот ва программахои гуногун осон мекунад.
- Ба шумо лозим нест, ки дар бораи чӣ гуна нигоҳ доштани маълумот дар базаи маълумот фикр кунед, он аллакай барои шумо анҷом дода шудааст.
- Фақат механизми сенсорҳои овоздиҳиро тавсиф кардан лозим аст.
- Ҳамаи рамзи шуморо дар як стандарт муттаҳид мекунад.
Куҷост, ки онро гирад?
Ман онро аз коди ибтидоӣ иҷро карда натавонистам, бинобар ин ман тасвири тайёри TangoBox 9.3-ро барои кор истифода бурдам.
Дастурҳо чӣ гуна аз бастаҳо насб карданро тавсиф мекунанд.
Он аз чӣ иборат аст?
- ҶАЙВ — барои дидан ва таҳрир кардани базаи TANGO истифода мешавад.
- ПОГО — генератори код барои серверҳои дастгоҳи TANGO.
- Астор — мудири нармафзор барои системаи ТАНГО.
Мо танҳо ба ду ҷузъи аввал таваҷҷӯҳ хоҳем кард.
Забонҳои барномасозии дастгирӣ
- C
- C ++
- Java
- JavaScript
- Python
- Матлаб
- Лаборатория
Ман бо он дар Python ва C ++ кор кардам. Дар ин ҷо, C++ ҳамчун намуна истифода мешавад.
Акнун биёед ба тавсифи тарзи пайваст кардани дастгоҳ ба TANGO ва чӣ гуна идора кардани он мегузарем. Мо тахтаро ҳамчун мисол истифода мебарем. GPS neo-6m-0-001:

Тавре ки шумо дар расм мебинед, мо тахтаро ба компютер тавассути UART CP2102 пайваст мекунем. Ҳангоми ба компютер пайваст шудан, дастгоҳ пайдо мешавад /dev/ttyUSB[0-N], одатан /dev/ttyUSB0.
ПОГО
Акнун биёед оғоз кунем пого, ва мо рамзи скелетро барои кор бо тахтаи худ тавлид мекунем.
pogo
Ман аллакай кодро сохта будам, биёед онро дубора эҷод кунем Файл-> Нав.

Мо инҳоро ба даст меорем:

Дастгоҳи мо (минбаъд истилоҳи "дастгоҳ" ба қисми нармафзор ишора хоҳад кард) холӣ аст ва дорои ду фармони идоракунӣ мебошад: давлат & Статуси.
Он бояд бо атрибутҳои зарурӣ пур карда шавад:
Амволи дастгоҳ — арзишҳои пешфарз, ки мо ба дастгоҳ барои оғози он интиқол медиҳем; барои тахтаи GPS, шумо бояд номи тахтаро дар система интиқол диҳед com="/dev/ttyUSB0" ва суръати порти COM boudrade = 9600
Фармонҳо — фармонҳо барои идоракунии дастгоҳи мо, ба онҳо аргументҳо ва арзиши бозгашт додан мумкин аст.
- Давлат - ҳолати кунуниро бармегардонад, аз Иёлоти
- STATUS - ҳолати кунуниро бармегардонад, ин сатри пурракунанда аст Давлат
- GPSArray — бармегардад Низоми муайянкунии ҷаҳонии ҷои ист сатр дар шакл DevVarCharArray
Баъдан, атрибутҳои дастгоҳ, ки метавонанд ба он/аз он хондан/навиштан мумкин аст, муайян карда мешаванд.
Хусусиятҳои скалярӣ — атрибутҳои оддӣ (чар, сатр, дароз ва ғайра)
Хусусиятҳои спектр - массивҳои якченака
Хусусиятҳои тасвир — массивхои ду-ченака
Иёлоти — долате, ки аппарати мо дар он чо вокеъ аст.
- КУШОДА — дастгох кушода аст.
- НАЗДИК — дастгох баста аст.
- НОТУ - хато.
- ON — мо аз аппарат маълумот мегирем.
- OFF - ягон маълумот аз дастгоҳ.
Намунаи илова кардани атрибут gps_string:

Давраи интихобот Вақт бо миллисекундҳо (мс) барои чанд вақт навсозии арзиши 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Ҳама чиз дар дохили ин блоки шарҳ ба барқарорсозии минбаъдаи код дар пого дохил карда намешавад. баромадан!Ҳар он чизе, ки дар блок нест, хоҳад буд! Ин ҷойҳоест, ки мо метавонем таҳрирҳои худамонро барномарезӣ кунем.
Акнун функсияҳои асосии синф кадомҳоянд? NEO6M:
void always_executed_hook();
void read_attr_hardware(vector<long> &attr_list);
void read_gps_string(Tango::Attribute &attr);
void read_gps_array(Tango::Attribute &attr);Вақте ки мо мехоҳем арзиши атрибутро хонем gps_string, функсияҳо бо тартиби зерин даъват карда мешаванд: ҳамеша_иҷрошуда, 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);
}
}Чӣ тавр тартиб додан:
g++ gps.cpp -I/usr/local/include/tango -I/usr/local/include -I/usr/local/include -std=c++0x -Dlinux -L/usr/local/lib -ltango -lomniDynamic4 -lCOS4 -lomniORB4 -lomnithread -llog4tango -lzmq -ldl -lpthread -lstdc++Натиҷа:
tango-cs@tangobox:~/workspace/c$ ./a.out
$GPRMC,,V,,,,,,,,,,N*53
$GPRMC,,V,,,,,,,,,,N*53
$GPRMC,,V,,,,,,,,,,N*53Мо натиҷаро ҳамчун бозгашти фармон гирифта, атрибутҳои сатр ва массиви аломатҳоро гирифтем.
мурожиат
Ман ин мақоларо барои худ навиштам, зеро пас аз муддате ман чӣ гуна ва чӣ кор карданро фаромӯш мекунам.
Ташаккур ба диққататон.
Манбаъ: will.com
