Tango-ohjaimet

Tango-ohjaimet

Mikä on TANGO?

Se on järjestelmä erilaisten laitteistojen ja ohjelmistojen hallintaan.
TANGO tukee tällä hetkellä neljää alustaa: Linux, Windows NT, Solaris ja HP-UX.
Tässä kuvataan työskentely Linuxin kanssa (Ubuntu 18.04)

Mitä varten se on?

Helpottaa työskentelyä erilaisten laitteiden ja ohjelmistojen kanssa.

  • Sinun ei tarvitse miettiä tietojen tallentamista tietokantaan, se on jo tehty puolestasi.
  • On vain tarpeen kuvata kyselytunnistimien mekanismi.
  • Vähentää koko koodisi yhdeksi standardiksi.

Mistä saada sen?

En pystynyt käynnistämään sitä lähdekoodista; käytin TangoBox 9.3:n valmiita kuvia toimimaan.
Ohjeissa kerrotaan, kuinka paketeista asennetaan.

Mistä se koostuu?

  • Jive — käytetään TANGO-tietokannan katseluun ja muokkaamiseen.
  • POGO — koodigeneraattori TANGO-laitepalvelimille.
  • astor — TANGO-järjestelmän ohjelmapäällikkö.

Olemme kiinnostuneita vain kahdesta ensimmäisestä komponentista.

Tuetut ohjelmointikielet

  • C
  • C + +
  • Jaava
  • JavaScript
  • Python
  • matlab
  • LabVIEW

Työskentelin sen kanssa pythonilla ja c++:lla. Tässä käytetään C++:aa esimerkkinä.

Siirrytään nyt kuvaukseen siitä, kuinka laite liitetään TANGO:hon ja miten sitä käytetään. Maksu otetaan esimerkkinä GPS neo-6m-0-001:

Tango-ohjaimet

Kuten kuvasta näkyy, liitämme kortin PC:hen UART CP2102:n kautta. Kun laite on liitetty tietokoneeseen, näyttöön tulee laite /dev/ttyUSB[0-N], yleensä /dev/ttyUSB0.

POGO

Nyt käynnistetään Pogo, ja luoda runkokoodin laudallamme työskentelemistä varten.

pogo

Tango-ohjaimet

Olen jo luonut koodin, luodaan se uudelleen Tiedosto-> Uusi.

Tango-ohjaimet

Saamme seuraavat:

Tango-ohjaimet

Laitteemme (tulevaisuudessa laitteella tarkoitamme ohjelmisto-osaa) on tyhjä ja siinä on kaksi ohjauskomentoa: Osavaltio & Tila.

Se on täytettävä tarvittavilla määritteillä:

Laitteen ominaisuus - oletusarvot, jotka siirrämme laitteeseen alustaaksesi sen; GPS-kortille sinun on siirrettävä kortin nimi järjestelmässä com="/dev/ttyUSB0" ja tietoliikenneportin nopeus baudrade=9600

komennot — komennot, joilla ohjataan laitettamme; niille voidaan antaa argumentteja ja palautusarvo.

  • OSAVALTIO - palauttaa nykyisen tilan, alkaen Valtiot
  • STATUS - palauttaa nykyisen tilan, tämä on merkkijonon täydennys OSAVALTIO
  • GPSArray - palautuu GPS merkkijono muodossa DevVarCharArray

Aseta seuraavaksi laitteen attribuutit, jotka voidaan lukea/kirjoittaa siihen/sitä.
Skalaariattribuutit - yksinkertaiset attribuutit (merkki, merkkijono, pitkä jne.)
Spektrin attribuutit - yksiulotteiset taulukot
Kuvan attribuutit - kaksiulotteiset taulukot

Valtiot — tila, jossa laitteemme sijaitsee.

  • OPEN — laite on auki.
  • SULJE - laite on kiinni.
  • Epäonnistunut -virhe.
  • ON — vastaanottaa tietoja laitteesta.
  • POIS — ei tietoja laitteesta.

Esimerkki attribuutin lisäämisestä gps_string:

Tango-ohjaimet

Äänestysaika aika ms, kuinka usein gps_string-arvo päivitetään. Jos päivitysaikaa ei ole määritetty, attribuutti päivitetään vain pyynnöstä.

Kävi ilmi:

Tango-ohjaimet

Nyt sinun on luotava koodi Tiedosto-> Luo

Tango-ohjaimet

Oletusarvoisesti Makefileä ei luoda; ensimmäistä kertaa sinun on valittava valintaruutu luodaksesi sen. Tämä tehdään niin, että siihen tehdyt muutokset eivät poistu uuden sukupolven aikana. Kun olet luonut sen kerran ja määrittänyt sen projektillesi (rekisteröi käännösavaimet, lisätiedostot), voit unohtaa sen.

Siirrytään nyt ohjelmointiin. pogo with loi meille seuraavan:

Tango-ohjaimet

Olemme kiinnostuneita NEO6M.cpp & NEO6M.h:sta. Otetaan esimerkki luokan rakentajasta:

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
}

Mitä siellä on ja mikä on tärkeää? Init_device()-funktio varaa muistia määritteillemme: gps_string & gps_array, mutta se ei ole tärkeää. Tärkeintä tässä, nämä ovat kommentit:

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

Kaikkea, mikä on tämän kommenttilohkon sisällä, ei sisällytetä pogoon myöhempien koodin uudelleenmuotoilujen aikana muuttaa pois!. Kaikki, mikä ei ole lohkoissa, tulee olemaan! Nämä ovat paikkoja, joissa voimme ohjelmoida ja tehdä omia muokkauksiamme.

Mitkä ovat luokan pääfunktiot? 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);

Kun haluamme lukea attribuutin arvon gps_string, funktioita kutsutaan seuraavassa järjestyksessä: aina_suoritettu_koukku, read_attr_hardware и read_gps_string. Read_gps_string täyttää gps_string arvolla.

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
}

Kokoelma

Siirry lähdekansioon ja:

make

Ohjelma käännetään ~/DeviceServers-kansioon.

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

Jive

jive

Tango-ohjaimet

Tietokannassa on jo joitain laitteita, luodaan nyt omamme Muokkaa-> Luo palvelin

Tango-ohjaimet

Yritetään nyt muodostaa yhteys siihen:

Tango-ohjaimet

Mikään ei toimi, ensin meidän on suoritettava ohjelmamme:

sudo ./NEO6M neo6m -v2

Voin muodostaa yhteyden com-porttiin vain oikeuksilla juuris. v - kirjaustaso.

Nyt voimme yhdistää:

Tango-ohjaimet

asiakas

Grafiikassa kuvien katsominen on varmasti hyvä asia, mutta tarvitset jotain hyödyllisempää. Kirjoitetaan asiakas, joka muodostaa yhteyden laitteeseen ja ottaa siitä lukemat.

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

Kuinka koota:

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

Saimme tuloksen komentopalautena, ottamalla merkkijonon ja merkkijonon attribuutit.

viittaukset

Kirjoitin artikkelin itselleni, koska ajan kuluttua aloin unohtaa, miten ja mitä tehdä.

Kiitos huomiota.

Lähde: will.com

Lisää kommentti