Tangóstýringar

Tangóstýringar

hvað TANGO?

Það er kerfi til að stjórna ýmsum vélbúnaði og hugbúnaði.
TANGO styður nú 4 palla: Linux, Windows NT, Solaris og HP-UX.
Hér munum við lýsa því að vinna með Linux (Ubuntu 18.04)

Til hvers er það?

Einfaldar vinnu með ýmsum búnaði og hugbúnaði.

  • Þú þarft ekki að hugsa um hvernig á að geyma gögn í gagnagrunninum, það er nú þegar gert fyrir þig.
  • Það er aðeins nauðsynlegt að lýsa vélbúnaði fyrir mælingarskynjara.
  • Dregur úr öllum kóðanum þínum í einn staðal.

Hvar á að fá það?

Ég gat ekki ræst það frá frumkóðann; ég notaði tilbúna mynd af TangoBox 9.3 til að vinna.
Leiðbeiningarnar lýsa því hvernig á að setja upp úr pakka.

Í hverju felst það?

  • JIVE — notað til að skoða og breyta TANGO gagnagrunninum.
  • POGO — kóðarafall fyrir TANGO tækjaþjóna.
  • Astor — dagskrárstjóri TANGO kerfisins.

Við munum aðeins hafa áhuga á fyrstu tveimur hlutunum.

Stuðningur við forritunarmál

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

Ég vann með það í python & c++. Hér verður C++ notað sem dæmi.

Nú skulum við fara að lýsingu á því hvernig á að tengja tækið við TANGO og hvernig á að vinna með það. Gjaldið verður tekið sem dæmi GPS neo-6m-0-001:

Tangóstýringar

Eins og þú sérð á myndinni tengjum við borðið við tölvuna í gegnum UART CP2102. Þegar það er tengt við tölvu birtist tækið /dev/ttyUSB[0-N], venjulega /dev/ttyUSB0.

POGO

Nú skulum við ræsa Pogo, og búa til beinagrind kóða til að vinna með stjórninni okkar.

pogo

Tangóstýringar

Ég bjó nú þegar til kóðann, við skulum búa hann til aftur Skrá->Nýtt.

Tangóstýringar

Við fáum eftirfarandi:

Tangóstýringar

Tækið okkar (í framtíðinni, með tæki munum við meina hugbúnaðarhlutann) er tómt og hefur tvær stjórnskipanir: State & Staða.

Það verður að vera fyllt með nauðsynlegum eiginleikum:

Eign tækis - sjálfgefin gildi sem við flytjum yfir í tækið til að frumstilla það; fyrir GPS borðið þarftu að flytja nafn borðsins í kerfinu com="/dev/ttyUSB0" og com port hraði baudrade=9600

Skipanir — skipanir til að stjórna tækinu okkar; hægt er að gefa þeim rök og skilagildi.

  • STATE - skilar núverandi ástandi, frá States
  • STATUS - skilar núverandi stöðu, þetta er viðbót strengsins við STATE
  • GPSArray - skilar GPS streng í formi DevVarCharArray

Næst skaltu stilla eiginleika tækisins sem hægt er að lesa/skrifa til/frá því.
Scalar eiginleikar - einfaldir eiginleikar (bleikja, strengur, langur osfrv.)
Litrófseiginleikar - einvíddar fylki
Myndareiginleikar - tvívíð fylki

States — ástandið sem tækið okkar er í.

  • OPEN — tækið er opið.
  • LOKA - tækið er lokað.
  • MIKIÐ - villa.
  • ON — taka á móti gögnum úr tækinu.
  • OFF — engin gögn úr tækinu.

Dæmi um að bæta við eigind gps_strengur:

Tangóstýringar

Kjörtímabil tími í ms, hversu oft gps_string gildið verður uppfært. Ef uppfærslutíminn er ekki tilgreindur verður eigindin aðeins uppfærð sé þess óskað.

Það reyndist:

Tangóstýringar

Nú þarftu að búa til kóðann Skrá->Búa til

Tangóstýringar

Sjálfgefið er að Makefile er ekki búið til; í fyrsta skipti sem þú þarft að haka í reitinn til að búa hana til. Þetta er gert til að breytingarnar sem gerðar eru á henni verði ekki eytt á nýrri kynslóð. Eftir að hafa búið það til einu sinni og stillt það fyrir verkefnið þitt (skrá safnlykla, viðbótarskrár), geturðu gleymt því.

Nú skulum við halda áfram að forritun. pogo með bjó til eftirfarandi fyrir okkur:

Tangóstýringar

Við munum hafa áhuga á NEO6M.cpp & NEO6M.h. Við skulum taka dæmi um bekkjasmið:

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
}

Hvað er þarna og hvað er mikilvægt hér? Init_device() aðgerðin úthlutar minni fyrir eiginleika okkar: gps_strengur & gps_fylki, en það er ekki mikilvægt. Það mikilvægasta hér, þetta eru athugasemdirnar:

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

Allt sem er inni í þessum athugasemdareit verður ekki innifalið í pogo við síðari kóða endurnýjun flytja í burtu!. Allt sem er ekki í blokkum verður! Þetta eru staðirnir þar sem við getum forritað og gert okkar eigin breytingar.

Nú hver eru helstu aðgerðir sem bekkurinn inniheldur? 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);

Þegar við viljum lesa eigindargildið gps_strengur, föllin verða kölluð í eftirfarandi röð: alltaf_framkvæmd_krók, read_attr_hardware и lesa_gps_streng. Read_gps_string mun fylla gps_string með gildinu.

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
}

Samantekt

Farðu í upprunamöppuna og:

make

Forritið verður sett saman í ~/DeviceServers möppuna.

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

JIVE

jive

Tangóstýringar

Það eru nú þegar nokkur tæki í gagnagrunninum, við skulum nú búa til okkar Breyta-> Búa til netþjón

Tangóstýringar

Nú skulum við reyna að tengjast því:

Tangóstýringar

Ekkert mun virka, fyrst þurfum við að keyra forritið okkar:

sudo ./NEO6M neo6m -v2

Ég get aðeins tengst com tenginu með réttindum rót-A. v - skráningarstig.

Nú getum við tengt:

Tangóstýringar

Viðskiptavinur

Í grafík er vissulega gott að skoða myndir, en þú þarft eitthvað gagnlegra. Við skulum skrifa viðskiptavin sem mun tengjast tækinu okkar og taka lestur úr því.

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

Hvernig á að setja saman:

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

Niðurstaða:

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

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

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

Við fengum niðurstöðuna sem skipun til baka, þar sem við tókum eiginleika strengs og fjölda stafa.

tilvísanir

Ég skrifaði greinina fyrir sjálfan mig, því eftir smá stund byrja ég að gleyma hvernig og hvað ég á að gera.

Þakka þér fyrir athygli þína.

Heimild: www.habr.com

Bæta við athugasemd