Mga Kontrol sa Tango

Mga Kontrol sa Tango

Unsa TANGO?

Kini usa ka sistema sa pagdumala sa lainlaing hardware ug software.
Ang TANGO karon nagsuporta sa 4 nga mga plataporma: Linux, Windows NT, Solaris ug HP-UX.
Dinhi among ihulagway ang pagtrabaho kauban ang Linux (Ubuntu 18.04)

Para sa unsa kini?

Gipasayon ​​ang pagtrabaho sa lainlaing kagamitan ug software.

  • Dili nimo kinahanglan nga maghunahuna kung giunsa ang pagtipig sa datos sa database, nahimo na kini alang kanimo.
  • Gikinahanglan lamang nga ihulagway ang mekanismo sa mga sensor sa botohan.
  • Gipakunhod ang tanan nimong code sa usa ka sumbanan.

Asa kini makuha?

Dili nako kini malansad gikan sa source code; Gigamit nako ang usa ka andam nga hinimo nga imahe sa TangoBox 9.3 aron magtrabaho.
Ang mga panudlo naghulagway kung giunsa ang pag-install gikan sa mga pakete.

Unsa ang naglangkob niini?

  • jive β€” gigamit sa pagtan-aw ug pag-edit sa TANGO database.
  • POGO β€” code generator para sa TANGO device servers.
  • Astor β€” program manager para sa TANGO system.

Kita interesado lamang sa unang duha ka mga sangkap.

Gisuportahan nga mga pinulongan sa programming

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • matlab
  • LabVview

Nagtrabaho ko niini sa python & c++. Dinhi ang C++ gamiton isip pananglitan.

Karon magpadayon kita sa usa ka paghulagway kung giunsa ang pagkonektar sa aparato sa TANGO ug kung giunsa kini pagtrabaho. Ang bayranan pagakuhaon ingong pananglitan GPS neo-6m-0-001:

Mga Kontrol sa Tango

Sama sa imong makita sa litrato, among gikonektar ang board sa PC pinaagi sa UART CP2102. Kung konektado sa usa ka PC, makita ang aparato /dev/ttyUSB[0-N], kasagaran /dev/ttyUSB0.

POGO

Karon atong ilunsad pogo, ug paghimo og skeleton code alang sa pagtrabaho uban sa among board.

pogo

Mga Kontrol sa Tango

Gibuhat na nako ang code, buhata na usab File-> Bag-o.

Mga Kontrol sa Tango

Atong makuha ang mosunod:

Mga Kontrol sa Tango

Ang among device (sa umaabot, pinaagi sa device among ipasabot ang software nga bahin) walay sulod ug adunay duha ka control commands: State & Kahimtang.

Kini kinahanglan nga puno sa gikinahanglan nga mga hiyas:

Property sa Device - mga default nga kantidad nga among gibalhin sa aparato aron masugdan kini; alang sa GPS board, kinahanglan nimo nga ibalhin ang ngalan sa board sa sistema com="/dev/ttyUSB0" ug com port speed baudrade=9600

Mga sugo β€” mga mando aron makontrol ang among aparato; mahimo silang hatagan mga argumento ug usa ka pagbalik nga kantidad.

  • ESTADO - mibalik sa kasamtangan nga kahimtang, gikan sa Mga Estado
  • STATUS - nagbalik sa kasamtangan nga kahimtang, kini ang komplemento sa string ESTADO
  • GPSArray - mibalik gps string sa porma DevVarCharArray

Sunod, itakda ang mga hiyas sa device nga mahimong basahon/isulat ngadto/gikan niini.
Mga Kinaiya sa Scalar - yano nga mga kinaiya (char, string, taas, ug uban pa)
Mga Hiyas sa Spectrum - usa ka dimensyon nga mga array
Mga Hulagway sa Hulagway - duha-ka-dimensional nga mga han-ay

Mga Estado β€” ang estado diin nahimutang ang among aparato.

  • ABLI - ang aparato bukas.
  • SUOD NGA - ang aparato sirado.
  • PAKYAS - sayop.
  • ON - makadawat data gikan sa device.
  • OFF - walay data gikan sa device.

Pananglitan sa pagdugang sa usa ka hiyas gps_string:

Mga Kontrol sa Tango

Panahon sa pagboto oras sa ms, unsa kasubsob ang gps_string nga kantidad ma-update. Kung ang oras sa pag-update wala gitakda, ang hiyas ma-update lamang kung gihangyo.

Nahitabo:

Mga Kontrol sa Tango

Karon kinahanglan nimo nga makamugna ang code File-> Paghimo

Mga Kontrol sa Tango

Sa kasagaran, ang Makefile wala mamugna; sa unang higayon nga kinahanglan nimong susihon ang kahon aron mahimo kini. Gihimo kini aron ang mga pagbag-o nga gihimo niini dili mapapas sa panahon sa usa ka bag-ong henerasyon. Ang paghimo niini kausa ug gi-configure kini alang sa imong proyekto (pagrehistro sa mga yawe sa pagtipon, dugang nga mga file), mahimo nimong kalimtan kini.

Karon magpadayon kita sa pagprograma. pogo nga nakamugna sa mosunod alang kanamo:

Mga Kontrol sa Tango

Kita mahimong interesado sa NEO6M.cpp & NEO6M.h. Atong kuhaon ang usa ka pananglitan sa usa ka tigtukod sa klase:

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
}

Unsa ang naa ug unsa ang hinungdanon dinhi? Ang init_device() function naggahin ug memorya alang sa atong mga hiyas: gps_string & gps_array, apan dili kini importante. Ang labing importante nga butang dinhi, mao kini ang mga komento:

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

Ang tanan nga naa sa sulod niini nga bloke sa komentaryo dili iapil sa pogo sa mga sunod nga pagbag-o sa code palayo!. Ang tanan nga wala sa mga bloke mahimong! Kini ang mga lugar diin mahimo namon nga magprograma ug maghimo sa among kaugalingon nga mga pag-edit.

Karon unsa ang mga nag-unang gimbuhaton sa klase? 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);

Kung gusto namong basahon ang attribute value gps_string, ang mga gimbuhaton tawgon sa mosunod nga han-ay: always_executed_hook, read_attr_hardware ΠΈ read_gps_string. Ang Read_gps_string mopuno sa gps_string sa kantidad.

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
}

Panagsama

Adto sa source folder ug:

make

Ang programa i-compile sa ~/DeviceServers folder.

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

jive

jive

Mga Kontrol sa Tango

Naa nay pipila ka mga gamit sa database, buhata na nato ang atoa I-edit-> Paghimo og Server

Mga Kontrol sa Tango

Karon atong sulayan ang pagkonektar niini:

Mga Kontrol sa Tango

Walay bisan unsa nga molihok, una kinahanglan naton nga modagan ang among programa:

sudo ./NEO6M neo6m -v2

Makakonekta ra ko sa com port nga adunay mga katungod gamut-A. v - lebel sa pag-log.

Karon kita makakonektar:

Mga Kontrol sa Tango

Kustomer

Siyempre, ang pagtan-aw sa mga hulagway maayo sa mga graphic, apan kinahanglan nimo ang usa ka butang nga mas mapuslanon. Magsulat kita og kliyente nga magkonektar sa atong device ug mokuha og mga pagbasa gikan niini.

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

Unsaon pag-compile:

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

Resulta:

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

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

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

Nakuha namo ang resulta isip command return, nga nagkuha sa mga attribute sa usa ka string ug usa ka array sa mga karakter.

mga pakisayran

Gisulat nako ang artikulo alang sa akong kaugalingon, tungod kay pagkahuman sa usa ka panahon nagsugod ako sa pagkalimot kung giunsa ug unsa ang buhaton.

Salamat sa imong pagtagad.

Source: www.habr.com

Idugang sa usa ka comment