Tango Controls

Tango Controls

Ինչ է TANGO- ը?

Սա տարբեր ապարատային և ծրագրային ապահովման կառավարման համակարգ է:
TANGO-ն ներկայումս աջակցում է 4 հարթակ՝ Linux, Windows NT, Solaris և HP-UX:
Այստեղ մենք նկարագրելու ենք Linux-ի հետ աշխատանքը (Ubuntu 18.04)

Ինչի համար է դա?

Պարզեցնում է աշխատանքը տարբեր սարքավորումների և ծրագրերի հետ:

  • Պետք չէ մտածել, թե ինչպես պահել տվյալները տվյալների բազայում, դա արդեն արված է ձեզ համար:
  • Միայն անհրաժեշտ է նկարագրել սոցհարցման սենսորների մեխանիզմը:
  • Ձեր ամբողջ կոդը նվազեցնում է մեկ ստանդարտի:

Որտեղ ստանալ:

Ես չկարողացա գործարկել այն սկզբնական կոդից, ես օգտագործել եմ TangoBox 9.3-ի պատրաստի պատկերը աշխատելու համար:
Հրահանգները նկարագրում են, թե ինչպես տեղադրել փաթեթներից:

Ինչից է այն բաղկացած:

  • ՋԻՎ — օգտագործվում է TANGO տվյալների բազան դիտելու և խմբագրելու համար:
  • ՊՈԳՈ — կոդերի գեներատոր TANGO սարքի սերվերների համար:
  • Աստոր — ծրագրի ղեկավար TANGO համակարգի համար:

Մեզ կհետաքրքրեն միայն առաջին երկու բաղադրիչները։

Աջակցվող ծրագրավորման լեզուներ

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • Մատլաբ
  • LabVIEW- ը

Ես դրա հետ աշխատել եմ python & c++-ում։ Այստեղ C++-ը կօգտագործվի որպես օրինակ։

Այժմ եկեք անցնենք նկարագրությանը, թե ինչպես միացնել սարքը TANGO-ին և ինչպես աշխատել դրա հետ: Վճարը կվերցվի որպես օրինակ GPS neo-6m-0-001:

Tango Controls

Ինչպես տեսնում եք նկարում, մենք UART CP2102-ի միջոցով միացնում ենք տախտակը համակարգչին: Երբ միացված է համակարգչին, սարքը հայտնվում է /dev/ttyUSB[0-N], սովորաբար /dev/ttyUSB0:

ՊՈԳՈ

Հիմա եկեք գործարկենք Pogo, և ստեղծեք կմախքի կոդ մեր տախտակի հետ աշխատելու համար:

pogo

Tango Controls

Ես արդեն ստեղծել եմ կոդը, եկեք նորից ստեղծենք Ֆայլ->Նոր.

Tango Controls

Մենք ստանում ենք հետևյալը.

Tango Controls

Մեր սարքը (ապագայում սարք ասելով նկատի կունենանք ծրագրային մասը) դատարկ է և ունի երկու կառավարման հրաման. պետական & Ստատուս.

Այն պետք է լրացվի անհրաժեշտ հատկանիշներով.

Սարքի հատկություն — լռելյայն արժեքներ, որոնք մենք փոխանցում ենք սարքին՝ այն սկզբնավորելու համար; GPS տախտակի համար դուք պետք է փոխանցեք տախտակի անունը համակարգում com = "/dev/ttyUSB0" և կապի արագությունը baudrade=9600

Հրամաններ — հրամաններ՝ կառավարելու մեր սարքը, նրանց կարող են տրվել արգումենտներ և վերադարձի արժեք:

  • ՊԵՏՈՒԹՅՈՒՆ - վերադարձնում է ընթացիկ վիճակը, սկսած States
  • STATUS- ը - վերադարձնում է ընթացիկ կարգավիճակը, սա տողի լրացումն է ՊԵՏՈՒԹՅՈՒՆ
  • GPSArray - վերադառնում է GPS լարը ձեւով DevVarCharArray

Հաջորդը, սահմանեք սարքի ատրիբուտները, որոնք կարող են կարդալ/գրվել դրան/նրանից:
Scalar հատկանիշներ - պարզ հատկանիշներ (նիշ, լար, երկար և այլն)
Սպեկտրի հատկանիշներ - միաչափ զանգվածներ
Պատկերի հատկանիշներ - երկչափ զանգվածներ

States — վիճակը, որում գտնվում է մեր սարքը:

  • ԲԱՑ - սարքը բաց է:
  • ՓԱԿԵԼ - սարքը փակ է:
  • ՉԱՓՈԽՎԵԼ - սխալ.
  • ON — ստանալ տվյալներ սարքից:
  • OFF — սարքից տվյալներ չկան:

Հատկանիշ ավելացնելու օրինակ gps_string:

Tango Controls

Քվեարկության շրջան ժամանակը ms-ով, որքան հաճախ է թարմացվելու gps_string արժեքը: Եթե ​​թարմացման ժամանակը նշված չէ, հատկանիշը կթարմացվի միայն խնդրանքով:

Տեղի է ունեցել:

Tango Controls

Այժմ դուք պետք է գեներացնեք կոդը Ֆայլ -> Ստեղծել

Tango Controls

Լռելյայնորեն, Makefile-ը չի ստեղծվում, այն ստեղծելու համար առաջին անգամ անհրաժեշտ է նշել վանդակը: Դա արվում է, որպեսզի նոր սերնդի ժամանակ դրանում կատարված փոփոխությունները չջնջվեն։ Մեկ անգամ ստեղծելով այն և կարգավորելով այն ձեր նախագծի համար (գրանցել կոմպիլյացիայի բանալիներ, լրացուցիչ ֆայլեր), կարող եք մոռանալ դրա մասին:

Հիմա անցնենք ծրագրավորմանը։ pogo-ն մեզ համար ստեղծել է հետևյալը.

Tango Controls

Մեզ կհետաքրքրի 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

Այն ամենը, ինչ կա այս մեկնաբանությունների բլոկի ներսում, չի ներառվի pogo-ում կոդերի հետագա վերականգնման ժամանակ հեռացիր!. Այն ամենը, ինչ բլոկների մեջ չէ, կլինի: Սրանք այն վայրերն են, որտեղ մենք կարող ենք ծրագրավորել և կատարել մեր սեփական խմբագրումները:

Հիմա որո՞նք են դասի հիմնական գործառույթները: 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, գործառույթները կկանչվեն հետևյալ հաջորդականությամբ. always_executed_hook, 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

Tango Controls

Տվյալների բազայում արդեն կան որոշ սարքեր, եկեք հիմա ստեղծենք մերը Խմբագրել->Ստեղծել սերվեր

Tango Controls

Հիմա եկեք փորձենք միանալ դրան.

Tango Controls

Ոչինչ չի աշխատի, նախ մենք պետք է գործարկենք մեր ծրագիրը.

sudo ./NEO6M neo6m -v2

Ես կարող եմ միանալ միայն com-պորտին իրավունքներով արմատ-Ա. v - անտառահատումների մակարդակ:

Այժմ մենք կարող ենք միացնել.

Tango Controls

Հաճախորդը

Գրաֆիկայում նկարները դիտելը, իհարկե, լավ է, բայց ձեզ ավելի օգտակար բան է պետք: Եկեք գրենք հաճախորդ, որը կմիանա մեր սարքին և ընթերցումներ կվերցնի դրանից:

#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

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