Bu, müxtəlif aparat və proqram təminatını idarə etmək üçün bir sistemdir.
TANGO hazırda 4 platformanı dəstəkləyir: Linux, Windows NT, Solaris və HP-UX.
Burada Linux ilə işləməyi təsvir edəcəyik (Ubuntu 18.04)
Bu nə üçündür?
Müxtəlif avadanlıq və proqram təminatı ilə işi asanlaşdırır.
Verilənlərin verilənlər bazasında necə saxlanacağını düşünməyə ehtiyac yoxdur, bu, artıq sizin üçün hazırdır.
Yalnız səsvermə sensorlarının mexanizmini təsvir etmək lazımdır.
Mən onu mənbə kodundan işə sala bilmədim; işləmək üçün TangoBox 9.3-ün hazır görüntüsündən istifadə etdim.
Təlimatlar paketlərdən necə qurulacağını təsvir edir.
Nədən ibarətdir?
CƏVLƏYİN — TANGO verilənlər bazasına baxmaq və redaktə etmək üçün istifadə olunur.
POGO — TANGO cihaz serverləri üçün kod generatoru.
Astor — TANGO sistemi üçün proqram meneceri.
Bizi yalnız ilk iki komponent maraqlandıracaq.
Dəstəklənən proqramlaşdırma dilləri
C
C + +
Java
JavaScript
Python
matlab
LabVIEW
Mən onunla python və c++-da işləmişəm. Burada C++ nümunə kimi istifadə olunacaq.
İndi cihazı TANGO-ya necə bağlamaq və onunla necə işləmək təsvirinə keçək. Ödəniş nümunə kimi götürüləcək GPS neo-6m-0-001:
Şəkildə gördüyünüz kimi platanı PC-yə UART CP2102 vasitəsilə qoşuruq. Kompüterə qoşulduqda cihaz görünür /dev/ttyUSB[0-N], adətən /dev/ttyUSB0.
POGO
İndi başlayaq poqo, və lövhəmizlə işləmək üçün skelet kodu yaradın.
pogo
Mən artıq kodu yaratdım, onu yenidən yaradaq Fayl -> Yeni.
Aşağıdakıları alırıq:
Cihazımız (gələcəkdə cihaz dedikdə proqram hissəsini nəzərdə tutacağıq) boşdur və iki idarəetmə əmrinə malikdir: dövlət & Status.
Lazımi atributlarla doldurulmalıdır:
Cihaz Mülkiyyəti — onu işə salmaq üçün cihaza köçürdüyümüz standart dəyərlər; GPS lövhəsi üçün lövhənin adını sistemə köçürməlisiniz com="/dev/ttyUSB0" və com port sürəti baudrade = 9600
Əmrləri — cihazımızı idarə etmək üçün əmrlər; onlara arqumentlər və qaytarılan dəyər verilə bilər.
DEVLET - cari vəziyyəti qaytarır, -dən Ştatları
STATUS - cari statusu qaytarır, bu sətirin tamamlayıcısıdır DEVLET
GPSArray - qayıdır GPS şəklində sim DevVarCharArray
Sonra, ona oxuna/yazıla bilən cihazın atributlarını təyin edin. Skalyar Atributlar — sadə atributlar (char, string, long və s.) Spektr Atributları - birölçülü massivlər Şəkil Atributları - ikiölçülü massivlər
Ştatları — cihazımızın yerləşdiyi dövlət.
OPEN — cihaz açıqdır.
Yaxın — cihaz bağlıdır.
UĞUR - səhv.
ON — cihazdan məlumat almaq.
OFF — cihazdan məlumat yoxdur.
Bir atribut əlavə etmək nümunəsi gps_string:
Səsvermə dövrü ms ilə vaxt, gps_string dəyərinin nə qədər tez-tez yenilənəcəyi. Yeniləmə vaxtı göstərilməyibsə, atribut yalnız sorğu əsasında yenilənəcək.
Baş verdi:
İndi kodu yaratmalısınız Fayl-> Yarat
Varsayılan olaraq, Makefile yaradılmır; onu yaratmaq üçün ilk dəfə qutunu işarələməlisiniz. Bu, ona edilən dəyişikliklərin yeni nəsil zamanı silinməməsi üçün edilir. Onu bir dəfə yaratdıqdan və layihəniz üçün konfiqurasiya etdikdən sonra (qeydiyyat tərtibi açarları, əlavə fayllar) bu barədə unuda bilərsiniz.
İndi proqramlaşdırmaya keçək. pogo ilə bizim üçün aşağıdakıları yaratdı:
Biz NEO6M.cpp & NEO6M.h ilə maraqlanacağıq. Bir sinif konstruktoruna bir nümunə götürək:
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
}
Burada nə var və nə vacibdir? init_device() funksiyası atributlarımız üçün yaddaş ayırır: gps_string & gps_massivi, amma vacib deyil. Burada ən vacib şey, bu şərhlər:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Bu şərh blokunun daxilində olan hər şey sonrakı kodun bərpası zamanı poqoya daxil edilməyəcək uzaqlaş!. Bloklarda olmayan hər şey olacaq! Bunlar proqramlaşdıra və öz redaktələrimizi edə biləcəyimiz yerlərdir.
Atribut dəyərini oxumaq istədiyimiz zaman gps_string, funksiyalar aşağıdakı ardıcıllıqla çağırılacaq: həmişə_icra olunan_çəngəl, read_attr_hardware и read_gps_string. Read_gps_string gps_string dəyəri ilə dolduracaq.
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
}
Tərtib
Mənbə qovluğuna gedin və:
make
Proqram ~/DeviceServers qovluğuna yığılacaq.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
CƏVLƏYİN
jive
Verilənlər bazasında artıq bəzi cihazlar var, indi bizimkini yaradaq Redaktə et->Server yarat
İndi ona qoşulmağa çalışaq:
Heç bir şey işləməyəcək, əvvəlcə proqramımızı işlətməliyik:
sudo ./NEO6M neo6m -v2
Mən yalnız hüquqlarla com portuna qoşula bilirəm kök-Ə. v - giriş səviyyəsi.
İndi qoşula bilərik:
Müştəri
Qrafikada şəkillərə baxmaq əlbəttə ki, yaxşıdır, lakin sizə daha faydalı bir şey lazımdır. Cihazımıza qoşulacaq və ondan oxunuşlar götürəcək bir müştəri yazaq.
#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);
}
}