Tango kontrôles

Tango kontrôles

wat TANGO?

It is in systeem foar it behearen fan ferskate hardware en software.
TANGO stipet op it stuit 4 platfoarms: Linux, Windows NT, Solaris en HP-UX.
Hjir sille wy wurkje mei Linux (Ubuntu 18.04) beskriuwe.

Wêr is it foar?

Simplifies wurk mei ferskate apparatuer en software.

  • Jo hoege net te tinken oer hoe't jo gegevens yn 'e databank opslaan, it is al foar jo dien.
  • It is allinnich nedich om te beskriuwen it meganisme foar polling sensors.
  • Fermindert al jo koade ta ien standert.

Wêr't jo krije kinne?

Ik koe it net starte fanút de boarnekoade Ik brûkte in klearmakke ôfbylding fan TangoBox 9.3 om te wurkjen.
De ynstruksjes beskriuwe hoe te ynstallearjen fan pakketten.

Wêr bestiet it út?

  • JIVE - brûkt om de TANGO-database te besjen en te bewurkjen.
  • POGO - koadegenerator foar TANGO-apparaatservers.
  • Astor - programma manager foar it TANGO systeem.

Wy sille allinich ynteressearre wêze yn 'e earste twa komponinten.

Stipe programmeartalen

  • C
  • C ++
  • Java
  • JavaSkript
  • Python
  • matlab
  • LabVIEW

Ik wurke mei it yn python & c ++. Hjir sil C ++ brûkt wurde as foarbyld.

No litte wy gean nei in beskriuwing fan hoe't jo it apparaat ferbine mei TANGO en hoe't jo dermei wurkje. De fergoeding sil as foarbyld wurde nommen GPS neo-6m-0-001:

Tango kontrôles

Sa't jo op 'e foto sjen kinne, ferbine wy ​​it bestjoer mei de PC fia UART CP2102. As ferbûn mei in PC, ferskynt it apparaat /dev/ttyUSB[0-N], meastal /dev/ttyUSB0.

POGO

No litte wy begjinne pogo, en generearje skelet koade foar wurkjen mei ús bestjoer.

pogo

Tango kontrôles

Ik haw al makke de koade, lit ús meitsje it nochris Triem-> Nij.

Tango kontrôles

Wy krije it folgjende:

Tango kontrôles

Us apparaat (yn 'e takomst, troch apparaat sille wy it softwarediel betsjutte) is leech en hat twa kontrôlekommando's: Steat & Status.

It moat wurde fol mei de nedige attributen:

Apparaat Eigenskip - standertwearden dy't wy oerdrage nei it apparaat om it te initialisearjen foar it GPS-boerd, jo moatte de namme fan it boerd yn it systeem oerdrage com="/dev/ttyUSB0" en com haven snelheid baudrade=9600

Kommando's - kommando's om ús apparaat te kontrolearjen, se kinne arguminten en in weromkommende wearde krije.

  • STEAT - jout de aktuele steat werom, fan Steaten
  • STATUS - jout de aktuele status werom, dit is de oanfolling fan 'e tekenrige STEAT
  • GPSArray - werom gps string yn 'e foarm DevVarCharArray

Stel dan de apparaatattributen yn dy't kinne wurde lêzen / skreaun nei / fan it.
Skalêre eigenskippen - ienfâldige attributen (char, string, long, ensfh.)
Spektrum Attributen - iendiminsjonale arrays
Image Attributen - twadiminsjonale arrays

Steaten - de steat wêryn ús apparaat leit.

  • IEPEN - it apparaat is iepen.
  • SLUTE - it apparaat is sluten.
  • FAILT - flater.
  • ON - ûntfange gegevens fan it apparaat.
  • ÚT - gjin gegevens fan it apparaat.

Foarbyld fan tafoegjen fan in attribút gps_string:

Tango kontrôles

Polling perioade tiid yn ms, hoe faak de gps_string wearde wurdt bywurke. As de fernijingstiid net oantsjutte is, sil it attribút allinich op oanfraach bywurke wurde.

Gebe:

Tango kontrôles

No moatte jo de koade generearje Triem-> Generearje

Tango kontrôles

Standert wurdt de Makefile net generearre de earste kear dat jo it fakje moatte kontrolearje om it te meitsjen. Dit wurdt dien sadat de feroarings dy't makke binne net wiske wurde yn in nije generaasje. Nei't jo it ien kear hawwe makke en it foar jo projekt konfigureare (registrearje kompilaasjekaaien, ekstra bestannen), kinne jo it ferjitte.

No litte wy oergean nei programmearring. pogo mei generearre it folgjende foar ús:

Tango kontrôles

Wy sille wêze ynteressearre yn NEO6M.cpp & NEO6M.h. Litte wy in foarbyld nimme fan in klassekonstruktor:

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
}

Wat is der en wat is hjir wichtich? De funksje init_device () allocates ûnthâld foar ús attributen: gps_string & gps_array, mar it is net wichtich. It wichtichste ding hjir, dit binne de opmerkingen:

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

Alles wat yn dit kommentaarblok is sil net opnommen wurde yn pogo by folgjende koaderegeneraasjes Gean oan 'e kant!. Alles dat net yn blokken is sil wêze! Dit binne de plakken dêr't wy kinne programmearje en meitsje ús eigen bewurkings.

No wat binne de haadfunksjes dy't de klasse befettet? 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);

As wy wolle lêze de attribút wearde gps_string, de funksjes wurde neamd yn de folgjende folchoarder: altyd_útfierd_hook, read_attr_hardware и read_gps_string. Read_gps_string sil gps_string folje mei de wearde.

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
}

Kompilaasje

Gean nei de boarne map en:

make

It programma sil wurde kompilearre yn de map ~/DeviceServers.

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

JIVE

jive

Tango kontrôles

D'r binne al wat apparaten yn 'e databank, lit ús no ús meitsje Bewurkje-> Server oanmeitsje

Tango kontrôles

Litte wy no besykje te ferbinen mei it:

Tango kontrôles

Neat sil wurkje, earst moatte wy ús programma útfiere:

sudo ./NEO6M neo6m -v2

Ik kin allinnich ferbine mei de com haven mei rjochten woartel-IN. v - logging nivo.

No kinne wy ​​ferbine:

Tango kontrôles

Klant

Yn grafiken is it besjen fan foto's grif goed, mar jo hawwe wat nuttichs nedich. Litte wy in klant skriuwe dy't ferbining sil meitsje mei ús apparaat en der lêzings fan nimme.

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

Hoe kompilearje:

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

Resultaat:

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

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

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

Wy krigen it resultaat as in kommando werom, nimme de attributen fan in tekenrige en in array fan karakters.

referinsjes

Ik skreau it artikel foar mysels, om't ik nei in skoft begon te ferjitten hoe en wat te dwaan.

Tige tank foar jo oandacht.

Boarne: www.habr.com

Add a comment