Tanqo Nəzarətləri

Tanqo Nəzarətləri

Nədir TANGO?

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.
  • Bütün kodlarınızı bir standarta endirir.

Harada olursunuz?

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:

Tanqo Nəzarətləri

Şə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

Tanqo Nəzarətləri

Mən artıq kodu yaratdım, onu yenidən yaradaq Fayl -> Yeni.

Tanqo Nəzarətləri

Aşağıdakıları alırıq:

Tanqo Nəzarətləri

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:

Tanqo Nəzarətləri

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:

Tanqo Nəzarətləri

İndi kodu yaratmalısınız Fayl-> Yarat

Tanqo Nəzarətləri

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ı:

Tanqo Nəzarətləri

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.

İndi sinfin əsas funksiyaları hansılardır? 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);

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

Tanqo Nəzarətləri

Verilənlər bazasında artıq bəzi cihazlar var, indi bizimkini yaradaq Redaktə et->Server yarat

Tanqo Nəzarətləri

İndi ona qoşulmağa çalışaq:

Tanqo Nəzarətləri

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:

Tanqo Nəzarətləri

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);
    }
}

Necə tərtib etmək olar:

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++

Nəticə:

tango-cs@tangobox:~/workspace/c$ ./a.out 
$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

Nəticəni bir sətir və simvollar massivinin atributlarını götürərək əmrin qaytarılması kimi aldıq.

References

Məqaləni özüm üçün yazdım, çünki bir müddət sonra necə və nə edəcəyimi unutmağa başlayıram.

Diqqətinizə görə təşəkkür edirik.

Mənbə: www.habr.com

Добавить комментарий