Tango boshqaruvlari

Tango boshqaruvlari

nima TANGO?

Bu turli xil apparat va dasturiy ta'minotni boshqarish tizimi.
TANGO hozirda 4 ta platformani qo'llab-quvvatlaydi: Linux, Windows NT, Solaris va HP-UX.
Bu erda biz Linux bilan ishlashni tasvirlaymiz (Ubuntu 18.04)

Chego kerakmi?

Turli uskunalar va dasturiy ta'minot bilan ishlashni soddalashtiradi.

  • Ma'lumotlar bazasida ma'lumotlarni qanday saqlash haqida o'ylashingiz shart emas, bu siz uchun allaqachon qilingan.
  • Sensorlarni so'rash mexanizmini ta'riflash kifoya.
  • Barcha kodingizni bitta standartga qisqartiradi.

Uni qaerdan olish mumkin?

Men uni manba kodidan ishga tushira olmadim; ishlash uchun TangoBox 9.3 ning tayyor tasviridan foydalandim.
Ko'rsatmalar paketlardan qanday o'rnatishni tasvirlaydi.

U nimadan iborat?

  • JIVE — TANGO ma'lumotlar bazasini ko'rish va tahrirlash uchun ishlatiladi.
  • POGO — TANGO qurilma serverlari uchun kod generatori.
  • Astor — TANGO tizimi uchun dastur menejeri.

Bizni faqat dastlabki ikkita komponent qiziqtiradi.

Qo'llab-quvvatlanadigan dasturlash tillari

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • matlab
  • Laboratoriya

Men u bilan python va c++ da ishladim. Bu erda C++ dan misol sifatida foydalaniladi.

Keling, qurilmani TANGO ga qanday ulash va u bilan ishlashning tavsifiga o'tamiz. To'lov misol sifatida olinadi GPS neo-6m-0-001:

Tango boshqaruvlari

Rasmda ko'rib turganingizdek, biz platani UART CP2102 orqali shaxsiy kompyuterga ulaymiz. Kompyuterga ulanganda qurilma paydo bo'ladi /dev/ttyUSB[0-N], odatda /dev/ttyUSB0.

POGO

Endi ishga tushamiz pogo, va kengashimiz bilan ishlash uchun skelet kodini yarating.

pogo

Tango boshqaruvlari

Men allaqachon kodni yaratdim, uni yana yarataylik Fayl -> Yangi.

Tango boshqaruvlari

Biz quyidagilarni olamiz:

Tango boshqaruvlari

Bizning qurilmamiz (kelajakda qurilma deganda biz dasturiy ta'minot qismini nazarda tutamiz) bo'sh va ikkita boshqaruv buyrug'iga ega: Davlat & holat.

U kerakli atributlar bilan to'ldirilishi kerak:

Qurilma xususiyati - biz uni ishga tushirish uchun qurilmaga o'tkazadigan standart qiymatlar; GPS platasi uchun siz tizimdagi plata nomini o'tkazishingiz kerak com="/dev/ttyUSB0" va com port tezligi bodrade = 9600

Buyruqlar — qurilmamizni boshqarish buyruqlari; ularga argumentlar va qaytarish qiymati berilishi mumkin.

  • STATE - joriy holatni qaytaradi, dan Shtatlar
  • STATUS - joriy holatni qaytaradi, bu satrning to'ldiruvchisidir STATE
  • GPSArray - qaytadi GPS shakldagi qator DevVarCharArray

Keyinchalik, unga o'qilishi/yozilishi mumkin bo'lgan qurilma atributlarini o'rnating.
Skalyar atributlar — oddiy atributlar (char, string, long va boshqalar)
Spektr atributlari - bir o'lchovli massivlar
Tasvir atributlari - ikki o'lchovli massivlar

Shtatlar — qurilmamiz joylashgan davlat.

  • OPEN — qurilma ochiq.
  • CLOSE - qurilma yopiq.
  • MUQADAT - xato.
  • ON — qurilmadan maʼlumotlarni qabul qilish.
  • OFF — qurilmadan maʼlumot yoʻq.

Atribut qo'shishga misol gps_string:

Tango boshqaruvlari

Saylov davri vaqt ms, gps_string qiymati qanchalik tez-tez yangilanadi. Yangilash vaqti ko'rsatilmagan bo'lsa, atribut faqat so'rov bo'yicha yangilanadi.

Bo'lib o'tdi:

Tango boshqaruvlari

Endi siz kodni yaratishingiz kerak Fayl->Yaratish

Tango boshqaruvlari

Odatiy bo'lib, Makefile yaratilmaydi; uni yaratish uchun birinchi marta katakchani belgilashingiz kerak. Bu yangi avlod davrida unga kiritilgan o'zgarishlar o'chirilmasligi uchun amalga oshiriladi. Uni bir marta yaratib, uni loyihangiz uchun sozlaganingizdan so'ng (ro'yxatdan o'tish kompilyatsiya kalitlari, qo'shimcha fayllar), siz bu haqda unutishingiz mumkin.

Endi dasturlashga o'tamiz. pogo bilan biz uchun quyidagilarni yaratdi:

Tango boshqaruvlari

Biz NEO6M.cpp & NEO6M.h bilan qiziqamiz. Keling, sinf konstruktoriga misol keltiraylik:

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
}

Bu erda nima bor va bu erda nima muhim? init_device() funksiyasi atributlarimiz uchun xotira ajratadi: gps_string & gps_massivi, lekin bu muhim emas. Bu erda eng muhimi, bu sharhlar:

/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    .......
/*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1

Ushbu sharh blokidagi hamma narsa keyingi kodni qayta tiklash paytida pogoga kiritilmaydi uzoqlashish!. Bloklarda bo'lmagan hamma narsa bo'ladi! Bular biz dasturlashimiz va o'z tahrirlarimizni amalga oshirishimiz mumkin bo'lgan joylar.

Endi sinfda qanday asosiy funktsiyalar mavjud? 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);

Biz atribut qiymatini o'qimoqchi bo'lganimizda gps_string, funksiyalar quyidagi tartibda chaqiriladi: har doim_bajariladigan_kanca, read_attr_apparat и read_gps_string. Read_gps_string gps_string qiymatini to'ldiradi.

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
}

Jamlama

Manba jildiga o'ting va:

make

Dastur ~/DeviceServers jildiga kompilyatsiya qilinadi.

tango-cs@tangobox:~/DeviceServers$ ls
NEO6M

JIVE

jive

Tango boshqaruvlari

Ma'lumotlar bazasida allaqachon ba'zi qurilmalar mavjud, endi o'zimiznikini yarataylik Tahrirlash-> Server yaratish

Tango boshqaruvlari

Endi unga ulanishga harakat qilaylik:

Tango boshqaruvlari

Hech narsa ishlamaydi, avval dasturimizni ishga tushirishimiz kerak:

sudo ./NEO6M neo6m -v2

Men faqat huquqlar bilan com portiga ulanishim mumkin ildiz-A. v - ro'yxatga olish darajasi.

Endi biz ulanishimiz mumkin:

Tango boshqaruvlari

Xaridor

Grafikada rasmlarga qarash albatta yaxshi, lekin sizga foydaliroq narsa kerak. Keling, qurilmamizga ulanadigan va undan o'qishni oladigan mijoz yozaylik.

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

Qanday kompilyatsiya qilish kerak:

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

natija:

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

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

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

Biz natijani buyruqni qaytarish sifatida oldik, satr va belgilar qatorining atributlarini oldik.

Manbalar

Men maqolani o'zim uchun yozdim, chunki bir muncha vaqt o'tgach, men qanday qilib va ​​nima qilishni unutishni boshlayman.

E'tiboringiz uchun rahmat.

Manba: www.habr.com

a Izoh qo'shish