Kontrollet e tangos

Kontrollet e tangos

Çfarë është TANGO?

Është një sistem për menaxhimin e pajisjeve dhe softuerëve të ndryshëm.
TANGO aktualisht mbështet 4 platforma: Linux, Windows NT, Solaris dhe HP-UX.
Këtu do të përshkruajmë punën me Linux (Ubuntu 18.04)

Për çfarë është?

Thjeshtëson punën me pajisje dhe softuer të ndryshëm.

  • Ju nuk keni nevojë të mendoni se si të ruani të dhënat në bazën e të dhënave, tashmë është bërë për ju.
  • Është e nevojshme vetëm të përshkruhet mekanizmi për sensorët e votimit.
  • Redukton të gjithë kodin tuaj në një standard.

Ku të merrni

Nuk mund ta nisja nga kodi burimor; përdora një imazh të gatshëm të TangoBox 9.3 për të punuar.
Udhëzimet përshkruajnë se si të instaloni nga paketat.

Nga çfarë përbëhet?

  • JIVE — përdoret për të parë dhe modifikuar bazën e të dhënave TANGO.
  • Pogo — gjenerues i kodit për serverët e pajisjes TANGO.
  • Astor — menaxher programi për sistemin TANGO.

Ne do të jemi të interesuar vetëm për dy komponentët e parë.

Gjuhët e programimit të mbështetura

  • C
  • C + +
  • Java
  • JavaScript
  • Piton
  • MATLAB
  • PAMJE Laboratori

Kam punuar me të në python & c++. Këtu C++ do të përdoret si shembull.

Tani le të kalojmë në një përshkrim se si ta lidhni pajisjen me TANGO dhe si të punoni me të. Tarifa do të merret si shembull GPS neo-6m-0-001:

Kontrollet e tangos

Siç mund ta shihni në foto, ne e lidhim tabelën me PC-në përmes UART CP2102. Kur lidhet me një PC, pajisja shfaqet /dev/ttyUSB[0-N], zakonisht /dev/ttyUSB0.

Pogo

Tani le të nisim pogo, dhe gjeneroni kodin e skeletit për të punuar me bordin tonë.

pogo

Kontrollet e tangos

Tashmë kam krijuar kodin, le ta krijojmë përsëri Skedar->E re.

Kontrollet e tangos

Ne marrim sa vijon:

Kontrollet e tangos

Pajisja jonë (në të ardhmen, me pajisje do të nënkuptojmë pjesën e softuerit) është bosh dhe ka dy komanda kontrolli: shtet & Statusi.

Duhet të plotësohet me atributet e nevojshme:

Vetia e pajisjes — vlerat e paracaktuara që transferojmë në pajisje për ta inicializuar; për tabelën GPS, duhet të transferoni emrin e tabelës në sistem com="/dev/ttyUSB0" dhe shpejtësia e portit kom baudrade=9600

Komandat — komandat për të kontrolluar pajisjen tonë; atyre mund t'u jepen argumente dhe një vlerë kthyese.

  • STATE - kthen gjendjen aktuale, nga Shtetet
  • STATUSI - kthen statusin aktual, ky është plotësimi i vargut STATE
  • GPSArray - kthehet GPS varg në formë DevVarCharArray

Më pas, vendosni atributet e pajisjes që mund të lexohen/shkruhen në/nga ajo.
Atributet skalar - atribute të thjeshta (char, varg, i gjatë, etj.)
Atributet e spektrit - vargje njëdimensionale
Atributet e imazhit - vargje dydimensionale

Shtetet — gjendja në të cilën ndodhet pajisja jonë.

  • HAPUR - pajisja është e hapur.
  • CLOSE - pajisja është e mbyllur.
  • Dështoi - gabim.
  • ON — merrni të dhëna nga pajisja.
  • OFF — nuk ka të dhëna nga pajisja.

Shembull i shtimit të një atributi gps_string:

Kontrollet e tangos

periudha e votimit koha në ms, sa shpesh do të përditësohet vlera gps_string. Nëse koha e përditësimit nuk është e specifikuar, atributi do të përditësohet vetëm sipas kërkesës.

Ndodhi:

Kontrollet e tangos

Tani ju duhet të gjeneroni kodin Skedar-> Gjeneroni

Kontrollet e tangos

Si parazgjedhje, Makefile nuk krijohet; hera e parë që duhet të kontrolloni kutinë për ta krijuar atë. Kjo bëhet në mënyrë që ndryshimet e bëra në të të mos fshihen gjatë një gjenerate të re. Pasi ta keni krijuar një herë dhe ta konfiguroni atë për projektin tuaj (regjistroni çelësat e përpilimit, skedarët shtesë), mund ta harroni atë.

Tani le të kalojmë te programimi. pogo me gjeneroi sa vijon për ne:

Kontrollet e tangos

Ne do të jemi të interesuar për NEO6M.cpp & NEO6M.h. Le të marrim një shembull të një konstruktori të klasës:

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
}

Çfarë ka dhe çfarë është e rëndësishme këtu? Funksioni init_device() shpërndan memorie për atributet tona: gps_string & gps_array, por nuk është e rëndësishme. Gjëja më e rëndësishme këtu, këto janë komentet:

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

Çdo gjë që është brenda këtij blloku komentesh nuk do të përfshihet në pogo gjatë rigjenerimeve të mëvonshme të kodit Largohu!. Gjithçka që nuk është në blloqe do të jetë! Këto janë vendet ku ne mund të programojmë dhe të bëjmë modifikimet tona.

Tani cilat janë funksionet kryesore që përmban klasa? 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);

Kur duam të lexojmë vlerën e atributit gps_string, funksionet do të thirren në rendin e mëposhtëm: gjithmonë_e ekzekutuar_grep, read_attr_hardware и read_gps_string. Read_gps_string do të mbushë gps_string me vlerën.

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
}

Përpilimi

Shkoni te dosja burimore dhe:

make

Programi do të kompilohet në dosjen ~/DeviceServers.

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

JIVE

jive

Kontrollet e tangos

Tashmë ka disa pajisje në bazën e të dhënave, le të krijojmë tani tonën Edit-> Krijo server

Kontrollet e tangos

Tani le të përpiqemi të lidhemi me të:

Kontrollet e tangos

Asgjë nuk do të funksionojë, së pari duhet të ekzekutojmë programin tonë:

sudo ./NEO6M neo6m -v2

Unë mund të lidhem vetëm me portin com me të drejta rrënjë-a. v - niveli i prerjeve.

Tani mund të lidhemi:

Kontrollet e tangos

klient

Në grafikë, shikimi i fotografive është sigurisht i mirë, por ju duhet diçka më e dobishme. Le të shkruajmë një klient që do të lidhet me pajisjen tonë dhe do të marrë lexime prej saj.

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

Si të përpiloni:

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

Rezultati:

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

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

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

Ne e morëm rezultatin si një kthim komande, duke marrë atributet e një vargu dhe një sërë karakteresh.

Referencat

E shkrova artikullin për veten time, sepse pas një kohe filloj të harroj si dhe çfarë të bëj.

Faleminderit për vëmendjen tuaj.

Burimi: www.habr.com

Shto një koment