Танго башкаруулары

Танго башкаруулары

Эмне болду ТАНГО?

Бул ар кандай аппараттык жана программалык камсыздоону башкаруу системасы.
TANGO учурда 4 платформаны колдойт: Linux, Windows NT, Solaris жана HP-UX.
Бул жерде биз Linux менен иштөөнү сүрөттөп беребиз (Ubuntu 18.04)

Бул эмне үчүн?

Ар кандай жабдуулар жана программалык камсыздоо менен иштөөнү жеңилдетет.

  • Маалыматтар базасында маалыматтарды кантип сактоо керектиги жөнүндө ойлонуунун кажети жок, ал сиз үчүн мурунтан эле жасалган.
  • Бул сенсорлорду добуш берүү механизмин сүрөттөп берүү үчүн гана зарыл.
  • Бардык кодуңузду бир стандартка азайтат.

Кайдан алсам болот?

Мен аны баштапкы коддон ишке киргизе алган жокмун, мен иштөө үчүн TangoBox 9.3 дун даяр сүрөтүн колдондум.
Нускамалар пакеттерден кантип орнотууну сүрөттөйт.

ал турат, эмне кылат?

  • jive — TANGO маалымат базасын көрүү жана оңдоо үчүн колдонулат.
  • POGO — TANGO түзмөгүнүн серверлери үчүн код генератору.
  • Astor — TANGO системасынын программалык менеджери.

Бизди биринчи эки компонент гана кызыктырат.

Колдоого алынган программалоо тилдери

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • MATLAB
  • LabVIEW

Мен аны менен 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

буйруктары — биздин аппаратты башкаруу үчүн буйруктар, аларга аргументтер жана кайтаруу мааниси берилиши мүмкүн;

  • МАМЛЕКЕТТИК - учурдагы абалын кайтарат, тартып States
  • АБАЛЫ - учурдагы абалды кайтарат, бул саптын толуктоосу МАМЛЕКЕТТИК
  • GPSArray - кайтып келет GPS формадагы сап DevVarCharArray

Андан кийин, ага/окууга/жазууга мүмкүн болгон аспаптын атрибуттарын коюңуз.
Скалярдык атрибуттар — жөнөкөй атрибуттар (чар, сап, узун ж.б.)
Спектрдин атрибуттары - бир өлчөмдүү массивдер
Сүрөттүн атрибуттары - эки өлчөмдүү массивдер

States — биздин аппаратыбыз жайгашкан мамлекет.

  • OPEN — аппарат ачык.
  • ЖАБУУ - аппарат жабык.
  • FAILT - ката.
  • 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_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
}

Compilation

Булак папкасына өтүңүз жана:

make

Программа ~/DeviceServers папкасына түзүлөт.

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

jive

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

Биз саптын атрибуттарын жана символдордун массивдерин алып, буйрук кайтаруу катары натыйжа алдык.

шилтемелер

Мен макаланы өзүм үчүн жаздым, анткени бир аз убакыт өткөндөн кийин кантип жана эмне кылууну унутуп калам.

Конул бурганын учун рахмат.

Source: www.habr.com

Комментарий кошуу