Танго басқару элементтері

Танго басқару элементтері

Не болды ТАНГО?

Бұл әртүрлі аппараттық және бағдарламалық құралдарды басқаруға арналған жүйе.
TANGO қазіргі уақытта 4 платформаны қолдайды: Linux, Windows NT, Solaris және HP-UX.
Мұнда біз Linux-пен жұмыс істеуді сипаттаймыз (Ubuntu 18.04)

Ол не үшін?

Түрлі жабдықтармен және бағдарламалық қамтамасыз етумен жұмысты жеңілдетеді.

  • Дерекқорда деректерді қалай сақтау керектігі туралы ойлаудың қажеті жоқ, ол сіз үшін жасалған.
  • Датчиктерді сұрау механизмін сипаттау ғана қажет.
  • Барлық кодты бір стандартқа азайтады.

Оны қайдан алуға болады?

Мен оны бастапқы кодтан іске қоса алмадым; жұмыс істеу үшін TangoBox 9.3 дайын кескінін пайдаландым.
Нұсқаулар бумалардан орнату жолын сипаттайды.

Ол неден тұрады?

  • ДЖИВЕ — TANGO дерекқорын қарау және өңдеу үшін пайдаланылады.
  • POGO — 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

Енді іске қосайық пого, және біздің тақтамен жұмыс істеу үшін скелет кодын жасаңыз.

pogo

Танго басқару элементтері

Мен кодты жасадым, оны қайтадан жасайық Файл->Жаңа.

Танго басқару элементтері

Біз келесіні аламыз:

Танго басқару элементтері

Біздің құрылғымыз (болашақта құрылғы деп біз бағдарламалық құрал бөлігін айтамыз) бос және екі басқару пәрмені бар: мемлекет & мәртебе.

Ол қажетті атрибуттармен толтырылуы керек:

Құрылғы қасиеті — біз оны инициализациялау үшін құрылғыға тасымалдайтын әдепкі мәндер; GPS тақтасы үшін жүйедегі тақтаның атын тасымалдау керек com="/dev/ttyUSB0" және com портының жылдамдығы baudrade = 9600

Командалар — құрылғымызды басқаруға арналған командалар; оларға аргументтер мен қайтарылатын мән берілуі мүмкін.

  • МЕМЛЕКЕТТІК - ағымдағы күйді қайтарады, бастап мемлекеттер
  • STATUS - ағымдағы күйді қайтарады, бұл жолдың толықтаушысы МЕМЛЕКЕТТІК
  • GPSArray - қайтарады жаһандық позициялау жүйесі пішіндегі жол DevVarCharArray

Әрі қарай, оған оқуға/жазуға болатын құрылғы атрибуттарын орнатыңыз.
Скалярлық атрибуттар — қарапайым атрибуттар (char, string, long, т.б.)
Спектр атрибуттары - бір өлшемді массивтер
Кескін атрибуттары - екі өлшемді массивтер

мемлекеттер — құрылғымыз орналасқан мемлекет.

  • АШЫҚ — құрылғы ашық.
  • ЖАБЫҚ - құрылғы жабық.
  • СӘТТІЛІК - қате.
  • ON — құрылғыдан деректерді алу.
  • OFF — құрылғыдан деректер жоқ.

Төлсипат қосу мысалы gps_string:

Танго басқару элементтері

Дауыс беру кезеңі уақыты мс, gps_string мәні қаншалықты жиі жаңартылады. Жаңарту уақыты көрсетілмесе, төлсипат тек сұрау бойынша жаңартылады.

Болған оқиға:

Танго басқару элементтері

Енді кодты жасау керек Файл->Жасау

Танго басқару элементтері

Әдепкі бойынша, Makefile жасалмайды; оны жасау үшін бірінші рет құсбелгіні қою керек. Бұл оған енгізілген өзгерістер жаңа буын кезінде жойылмауы үшін жасалады. Оны бір рет жасап, оны жобаңызға конфигурациялағаннан кейін (тіркеу компиляция кілттері, қосымша файлдар), сіз бұл туралы ұмыта аласыз.

Енді бағдарламалауға көшейік. пого біз үшін келесіні жасады:

Танго басқару элементтері

Бізді 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_массив, бірақ маңызды емес. Мұнда ең бастысы, бұл пікірлер:

/*----- 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

Нәтижені жолдың және таңбалар массивінің атрибуттарын алып, пәрменді қайтару ретінде алдық.

сілтемелер

Мен мақаланы өзім үшін жаздым, өйткені біраз уақыттан кейін мен қалай және не істеу керектігін ұмыта бастаймын.

Назарларыңызға рахмет.

Ақпарат көзі: www.habr.com

пікір қалдыру