Tango-kontroles

Tango-kontroles

Wat is TANGO?

Dit is 'n stelsel vir die bestuur van verskeie hardeware en sagteware.
TANGO ondersteun tans 4 platforms: Linux, Windows NT, Solaris en HP-UX.
Hier sal ons werk met Linux beskryf (Ubuntu 18.04)

Waarvoor is dit?

Vereenvoudig werk met verskeie toerusting en sagteware.

  • Jy hoef nie te dink oor hoe om data in die databasis te stoor nie, dit is reeds vir jou gedoen.
  • Dit is slegs nodig om die meganisme vir stemsensors te beskryf.
  • Verminder al jou kode tot een standaard.

Waar om te kry?

Ek kon dit nie vanaf die bronkode begin nie, ek het 'n klaargemaakte beeld van TangoBox 9.3 gebruik om te werk.
Die instruksies beskryf hoe om vanaf pakkette te installeer.

Waaruit bestaan ​​dit?

  • jive — gebruik om die TANGO-databasis te bekyk en te redigeer.
  • POGO - kodegenerator vir TANGO-toestelbedieners.
  • Astor — programbestuurder vir die TANGO-stelsel.

Ons sal slegs in die eerste twee komponente belangstel.

Ondersteunde programmeertale

  • C
  • C + +
  • Java
  • JavaScript
  • Python
  • Matlab
  • LabVIEW

Ek het daarmee gewerk in python & c++. Hier sal C++ as voorbeeld gebruik word.

Kom ons gaan nou oor na 'n beskrywing van hoe om die toestel aan TANGO te koppel en hoe om daarmee te werk. Die fooi sal as voorbeeld geneem word GPS neo-6m-0-001:

Tango-kontroles

Soos u in die prentjie kan sien, koppel ons die bord aan die rekenaar via UART CP2102. Wanneer dit aan 'n rekenaar gekoppel is, verskyn die toestel /dev/ttyUSB[0-N], gewoonlik /dev/ttyUSB0.

POGO

Nou kom ons hardloop pogo, en genereer skeletkode om met ons bord te werk.

pogo

Tango-kontroles

Ek het reeds die kode geskep, kom ons skep dit weer Lêer-> Nuut.

Tango-kontroles

Ons kry die volgende:

Tango-kontroles

Ons toestel (in die toekoms, met toestel bedoel ons die sagteware-deel) is leeg en het twee beheeropdragte: staat & Status.

Dit moet gevul word met die nodige eienskappe:

Toestel eiendom - verstekwaardes wat ons na die toestel oordra om dit vir die GPS-bord te inisialiseer, u moet die naam van die bord in die stelsel oordra com="/dev/ttyUSB0" en com-poortspoed baudrade=9600

Instruksies - opdragte om ons toestel te beheer, hulle kan argumente en 'n terugkeerwaarde gegee word.

  • STATE - gee die huidige toestand terug, vanaf State
  • STATUS - gee die huidige status terug, dit is die string se aanvulling tot STATE
  • GPSArray - opbrengste GPS string in die vorm DevVarCharArray

Stel dan die toestelkenmerke in wat daarheen gelees/geskryf kan word.
Skalêre eienskappe - eenvoudige eienskappe (char, string, long, ens.)
Spektrum eienskappe - eendimensionele skikkings
Beeldeienskappe - tweedimensionele skikkings

State — die toestand waarin ons toestel geleë is.

  • OOP — die toestel is oop.
  • SLUIT - die toestel is gesluit.
  • FOUT - fout.
  • ON - ontvang data vanaf die toestel.
  • AF - geen data vanaf die toestel nie.

Voorbeeld van die byvoeging van 'n kenmerk gps_string:

Tango-kontroles

Stemmingsperiode tyd in ms, hoe gereeld die gps_string-waarde opgedateer sal word. As die opdateringstyd nie gespesifiseer is nie, sal die kenmerk slegs op versoek opgedateer word.

Het gebeur:

Tango-kontroles

Nou moet jy die kode genereer Lêer-> Genereer

Tango-kontroles

By verstek word die Makefile nie gegenereer die eerste keer dat jy die blokkie moet merk om dit te skep nie. Dit word gedoen sodat die veranderinge wat daaraan gemaak word nie tydens 'n nuwe generasie uitgevee word nie. Nadat u dit een keer geskep het en dit vir u projek gekonfigureer het (registreer samestellingsleutels, bykomende lêers), kan u daarvan vergeet.

Kom ons gaan nou oor na programmering. pogo met het die volgende vir ons gegenereer:

Tango-kontroles

Ons sal belangstel in NEO6M.cpp & NEO6M.h. Kom ons neem 'n voorbeeld van 'n klaskonstruktor:

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 daar en wat is hier belangrik? Die init_device() funksie ken geheue toe vir ons eienskappe: gps_string & gps_skikking, maar dit is nie belangrik nie. Die belangrikste ding hier, dit is die opmerkings:

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

Alles wat binne hierdie kommentaarblok is, sal nie ingesluit word in pogo tydens daaropvolgende kodeherwinnings nie beweeg weg!. Alles wat nie in blokke is nie, sal wees! Dit is die plekke waar ons kan programmeer en ons eie wysigings kan maak.

Nou wat is die hooffunksies wat die klas bevat? 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);

Wanneer ons die eienskapwaarde wil lees gps_string, sal die funksies in die volgende volgorde genoem word: altyd_uitvoer_haak, read_attr_hardware и lees_gps_string. Read_gps_string sal gps_string met die waarde vul.

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
}

Samestelling

Gaan na die brongids en:

make

Die program sal saamgestel word in die ~/DeviceServers-lêergids.

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

jive

jive

Tango-kontroles

Daar is reeds 'n paar toestelle in die databasis, kom ons skep nou ons s'n Redigeer-> Skep bediener

Tango-kontroles

Kom ons probeer nou om daaraan te koppel:

Tango-kontroles

Niks sal werk nie, eers moet ons ons program laat loop:

sudo ./NEO6M neo6m -v2

Ek kan slegs met regte aan die com-poort koppel wortel-A. v - logvlak.

Nou kan ons verbind:

Tango-kontroles

kliënt

In grafika is dit beslis goed om na prente te kyk, maar jy het iets nuttiger nodig. Kom ons skryf 'n kliënt wat aan ons toestel sal koppel en lesings daaruit sal neem.

#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 om saam te stel:

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

Gevolg:

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

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

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

Ons het die resultaat gekry as 'n opdragterugkeer, wat die eienskappe van 'n string en 'n verskeidenheid karakters neem.

verwysings

Ek het die artikel vir myself geskryf, want na 'n rukkie begin ek vergeet hoe en wat om te doen.

Dankie vir jou aandag.

Bron: will.com

Voeg 'n opmerking