Kontrolli Tango

Kontrolli Tango

X'inhu Tango?

Hija sistema għall-ġestjoni ta 'hardware u software varji.
TANGO bħalissa jappoġġja 4 pjattaformi: Linux, Windows NT, Solaris u HP-UX.
Hawnhekk ser niddeskrivu l-ħidma mal-Linux (Ubuntu 18.04)

Għal xiex?

Jissimplifika x-xogħol b'diversi tagħmir u softwer.

  • M'għandekx bżonn taħseb dwar kif taħżen id-data fid-database, diġà sar għalik.
  • Huwa meħtieġ biss li jiġi deskritt il-mekkaniżmu għas-sensuri tal-votazzjoni.
  • Inaqqas il-kodiċi kollu tiegħek għal standard wieħed.

Fejn tista 'tikseb?

Ma stajtx inniedi mill-kodiċi tas-sors użajt immaġni lesta ta 'TangoBox 9.3 biex naħdem.
L-istruzzjonijiet jiddeskrivu kif tinstalla minn pakketti.

Fiex tikkonsisti?

  • jive — użata biex tara u teditja d-database TANGO.
  • POGO — ġeneratur tal-kodiċi għal servers tat-tagħmir TANGO.
  • Astor — maniġer tal-programm għas-sistema TANGO.

Se nkunu interessati biss fl-ewwel żewġ komponenti.

Lingwi ta' programmar appoġġjati

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • matlab
  • LabVIEW

Ħdimt magħha f'python & c++. Hawnhekk C++ se jintuża bħala eżempju.

Issa ejja ngħaddu għal deskrizzjoni ta 'kif tikkonnettja l-apparat ma' TANGO u kif taħdem miegħu. Il-ħlas se jittieħed bħala eżempju GPS neo-6m-0-001:

Kontrolli Tango

Kif tistgħu taraw fl-istampa, aħna nqabbdu l-bord mal-PC permezz ta 'UART CP2102. Meta konness ma 'PC, l-apparat jidher /dev/ttyUSB[0-N], normalment /dev/ttyUSB0.

POGO

Issa ejja tniedi pogo, u tiġġenera kodiċi tal-iskeletru biex taħdem mal-bord tagħna.

pogo

Kontrolli Tango

Diġà ħloqt il-kodiċi, ejja noħolqu mill-ġdid Fajl-> Ġdid.

Kontrolli Tango

Nirċievu dan li ġej:

Kontrolli Tango

It-tagħmir tagħna (fil-futur, b'apparat se nfissru l-parti tas-softwer) huwa vojt u għandu żewġ kmandi ta' kontroll: Istat & Status.

Għandu jimtela bl-attributi meħtieġa:

Proprjetà tal-Apparat — valuri default li nittrasferixxu lill-apparat biex inizjalizzah għall-bord tal-GPS, għandek bżonn tittrasferixxi l-isem tal-bord fis-sistema; com="/dev/ttyUSB0" u l-veloċità tal-port com baudrade=9600

Kmandijiet — kmandi biex jikkontrollaw it-tagħmir tagħna jistgħu jingħataw argumenti u valur ta 'ritorn.

  • STAT - jirritorna l-istat attwali, minn Istati
  • STATUS - jirritorna l-istatus attwali, dan huwa l-kompliment tas-sekwenza għal STAT
  • GPSArray - prospetti GPS spag fil-forma DevVarCharArray

Sussegwentement, issettja l-attributi tal-apparat li jistgħu jinqraw/jinkitbu minnha/minnha.
Attributi Scalari — attributi sempliċi (char, string, twil, eċċ.)
Attributi tal-Ispettru - arrays unidimensjonali
Attributi tal-Immaġni - arrays bidimensjonali

Istati — l-istat li fih jinsab it-tagħmir tagħna.

  • OPEN — l-apparat ikun miftuħ.
  • Agħlaq - l-apparat huwa magħluq.
  • FAIL - żball.
  • ON — tirċievi data mill-apparat.
  • OFF — l-ebda data mill-apparat.

Eżempju ta 'żieda ta' attribut gps_string:

Kontrolli Tango

Perjodu tal-votazzjoni ħin f'ms, kemm-il darba l-valur gps_string se jiġi aġġornat. Jekk il-ħin tal-aġġornament ma jkunx speċifikat, l-attribut jiġi aġġornat biss fuq talba.

Ġara:

Kontrolli Tango

Issa għandek bżonn tiġġenera l-kodiċi Fajl-> Iġġenera

Kontrolli Tango

B'mod awtomatiku, il-Makefile ma jiġix iġġenerat l-ewwel darba li għandek bżonn tiċċekkja l-kaxxa biex toħloqha; Dan isir sabiex il-bidliet li sarulu ma jitħassrux waqt ġenerazzjoni ġdida. Wara li ħoloqha darba u kkonfiguratha għall-proġett tiegħek (ċwievet ta 'kumpilazzjoni tar-reġistru, fajls addizzjonali), tista' tinsa dwarha.

Issa ejja ngħaddu għall-ipprogrammar. pogo ma ġġenera dan li ġej għalina:

Kontrolli Tango

Aħna se nkunu interessati f'NEO6M.cpp & NEO6M.h. Ejja nieħdu eżempju ta' kostruttur tal-klassi:

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
}

X'hemm u x'inhu importanti hawn? Il-funzjoni init_device() talloka memorja għall-attributi tagħna: gps_string & gps_array, iżda mhuwiex importanti. L-iktar ħaġa importanti hawn, dawn huma l-kummenti:

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

Dak kollu li jkun ġewwa dan il-blokk tal-kummenti mhux se jiġi inkluż f'pogo waqt riġenerazzjonijiet ta' kodiċi sussegwenti tbiegħed!. Dak kollu li mhuwiex fi blokki se jkun! Dawn huma l-postijiet fejn nistgħu nipprogrammaw u nagħmlu l-editjar tagħna stess.

Issa x'inhuma l-funzjonijiet ewlenin li fiha l-klassi? 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);

Meta rridu naqraw il-valur tal-attribut gps_string, il-funzjonijiet se jissejħu fl-ordni li ġejja: always_executed_hook, read_attr_hardware и read_gps_string. Read_gps_string se jimla gps_string bil-valur.

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
}

Kumpilazzjoni

Mur fil-folder tas-sors u:

make

Il-programm se jiġi kkompilat fil-folder ~/DeviceServers.

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

jive

jive

Kontrolli Tango

Diġà hemm xi apparati fid-database, ejja issa noħolqu tagħna Edit-> Oħloq Server

Kontrolli Tango

Issa ejja nippruvaw nikkonnettjaw magħha:

Kontrolli Tango

Xejn se jaħdem, l-ewwel irridu nħaddmu l-programm tagħna:

sudo ./NEO6M neo6m -v2

Nista' biss nikkonnettja mal-port com bi drittijiet għeruq-A. v — livell ta' qtugħ.

Issa nistgħu nikkonnettjaw:

Kontrolli Tango

Klijent

Naturalment, li tħares lejn l-istampi hija tajba fil-grafika, imma għandek bżonn xi ħaġa aktar utli. Ejja niktbu klijent li se jgħaqqad mat-tagħmir tagħna u jieħu qari minnu.

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

Kif tiġbor:

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

Riżultat:

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

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

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

Sirna r-riżultat bħala ritorn tal-kmand, billi nieħdu l-attributi ta 'sekwenza u firxa ta' karattri.

referenzi

Ktibt l-artiklu għalija nnifsi, għax wara ftit nibda ninsa kif u x'għandek tagħmel.

Grazzi għall-attenzjoni tiegħek.

Sors: www.habr.com

Żid kumment