Mga Kontrol ng Tango

Mga Kontrol ng Tango

Ano ang Tanggo?

Ito ay isang sistema para sa pamamahala ng iba't ibang hardware at software.
Kasalukuyang sinusuportahan ng TANGO ang 4 na platform: Linux, Windows NT, Solaris at HP-UX.
Dito ay ilalarawan namin ang pagtatrabaho sa Linux (Ubuntu 18.04)

Para saan ito?

Pinapasimple ang trabaho sa iba't ibang kagamitan at software.

  • Hindi mo na kailangang isipin kung paano mag-imbak ng data sa database, tapos na ito para sa iyo.
  • Kinakailangan lamang na ilarawan ang mekanismo para sa mga sensor ng botohan.
  • Binabawasan ang lahat ng iyong code sa isang pamantayan.

Saan makakakuha

Hindi ko ito mailunsad mula sa source code; Gumamit ako ng isang handa na larawan ng TangoBox 9.3 upang gumana.
Inilalarawan ng mga tagubilin kung paano mag-install mula sa mga pakete.

Ano ang binubuo nito?

  • jive β€” ginagamit upang tingnan at i-edit ang database ng TANGO.
  • POGO β€” generator ng code para sa mga server ng TANGO device.
  • Astor β€” program manager para sa TANGO system.

Magiging interesado lamang kami sa unang dalawang bahagi.

Mga sinusuportahang programming language

  • C
  • C + +
  • Java
  • JavaScript
  • Sawa
  • matlab
  • LabVIEW

Nagtatrabaho ako dito sa python & c++. Dito gagamitin ang C++ bilang isang halimbawa.

Ngayon ay lumipat tayo sa isang paglalarawan kung paano ikonekta ang aparato sa TANGO at kung paano ito gagana. Ang bayad ay kukunin bilang isang halimbawa GPS neo-6m-0-001:

Mga Kontrol ng Tango

Tulad ng makikita mo sa larawan, ikinonekta namin ang board sa PC sa pamamagitan ng UART CP2102. Kapag nakakonekta sa isang PC, lalabas ang device /dev/ttyUSB[0-N], kadalasan /dev/ttyUSB0.

POGO

Ngayon ilunsad natin pogo, at bumuo ng skeleton code para sa pagtatrabaho sa aming board.

pogo

Mga Kontrol ng Tango

Nagawa ko na ang code, gawin natin itong muli File->Bago.

Mga Kontrol ng Tango

Nakukuha namin ang sumusunod:

Mga Kontrol ng Tango

Ang aming device (sa hinaharap, ayon sa device, ang ibig sabihin ay bahagi ng software) ay walang laman at may dalawang control command: estado & katayuan.

Dapat itong punan ng mga kinakailangang katangian:

Ari-arian ng Device β€” mga default na halaga na inilipat namin sa device upang masimulan ito; para sa GPS board, kailangan mong ilipat ang pangalan ng board sa system com="/dev/ttyUSB0" at bilis ng com port baudrade=9600

Command β€” mga utos upang kontrolin ang aming device; maaari silang bigyan ng mga argumento at isang return value.

  • STATE - ibinabalik ang kasalukuyang estado, mula sa States
  • STATUS - ibinabalik ang kasalukuyang katayuan, ito ang pandagdag ng string STATE
  • GPSArray - nagbabalik gps string sa anyo DevVarCharArray

Susunod, itakda ang mga katangian ng device na maaaring basahin/isulat sa/mula rito.
Mga Katangian ng Scalar β€” mga simpleng katangian (char, string, long, atbp.)
Mga Katangian ng Spectrum - mga one-dimensional na array
Mga Katangian ng Larawan - dalawang-dimensional na array

States β€” ang estado kung saan matatagpuan ang aming device.

  • OPEN β€” nakabukas ang device.
  • CLOSE - ang aparato ay sarado.
  • NABIGO - pagkakamali.
  • ON β€” tumanggap ng data mula sa device.
  • PATAY β€” walang data mula sa device.

Halimbawa ng pagdaragdag ng isang katangian gps_string:

Mga Kontrol ng Tango

Panahon ng botohan oras sa ms, gaano kadalas maa-update ang halaga ng gps_string. Kung ang oras ng pag-update ay hindi tinukoy, ang katangian ay maa-update lamang kapag hiniling.

Nangyari:

Mga Kontrol ng Tango

Ngayon ay kailangan mong bumuo ng code File->Bumuo

Mga Kontrol ng Tango

Bilang default, ang Makefile ay hindi nabuo; sa unang pagkakataon na kailangan mong lagyan ng tsek ang kahon upang gawin ito. Ginagawa ito upang ang mga pagbabagong ginawa dito ay hindi matanggal sa panahon ng bagong henerasyon. Ang pagkakaroon ng isang beses na nilikha at na-configure ito para sa iyong proyekto (magrehistro ng mga compilation key, karagdagang mga file), maaari mong kalimutan ang tungkol dito.

Ngayon ay lumipat tayo sa programming. pogo na may nabuong sumusunod para sa amin:

Mga Kontrol ng Tango

Magiging interesado kami sa NEO6M.cpp & NEO6M.h. Kumuha tayo ng isang halimbawa ng isang tagabuo ng 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
}

Ano ang mayroon at kung ano ang mahalaga dito? Ang init_device() function ay naglalaan ng memorya para sa aming mga katangian: gps_string & gps_array, ngunit hindi ito mahalaga. Ang pinakamahalagang bagay dito, ito ang mga komento:

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

Ang lahat ng nasa loob ng comment block na ito ay hindi isasama sa pogo sa mga susunod na pagbabagong-buhay ng code lumayo ka!. Lahat ng wala sa mga bloke ay magiging! Ito ang mga lugar kung saan maaari tayong magprograma at gumawa ng sarili nating mga pag-edit.

Ngayon ano ang mga pangunahing pag-andar na nilalaman ng 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);

Kapag gusto nating basahin ang attribute value gps_string, ang mga function ay tatawagin sa sumusunod na pagkakasunud-sunod: always_executed_hook, read_attr_hardware ΠΈ read_gps_string. Ang Read_gps_string ay pupunuin ang gps_string ng halaga.

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
}

Kompilasyon

Pumunta sa source folder at:

make

Ang programa ay isasama sa folder na ~/DeviceServers.

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

jive

jive

Mga Kontrol ng Tango

Mayroon nang ilang device sa database, gawin natin ngayon ang atin I-edit->Gumawa ng Server

Mga Kontrol ng Tango

Ngayon subukan nating kumonekta dito:

Mga Kontrol ng Tango

Walang gagana, kailangan muna nating patakbuhin ang ating programa:

sudo ./NEO6M neo6m -v2

Maaari lang akong kumonekta sa com port na may mga karapatan ugat-A. v - antas ng pag-log.

Ngayon ay maaari na tayong kumonekta:

Mga Kontrol ng Tango

Customer

Sa mga graphics, ang pagtingin sa mga larawan ay tiyak na mabuti, ngunit kailangan mo ng isang bagay na mas kapaki-pakinabang. Sumulat tayo ng isang kliyente na kumokonekta sa aming device at kukuha ng mga pagbabasa mula dito.

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

Paano mag-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 namin ang resulta bilang isang command return, pagkuha ng mga katangian ng isang string at isang hanay ng mga character.

sanggunian

Isinulat ko ang artikulo para sa aking sarili, dahil pagkaraan ng ilang sandali ay sinimulan kong makalimutan kung paano at kung ano ang gagawin.

Salamat sa iyo para sa iyong pansin.

Pinagmulan: www.habr.com

Magdagdag ng komento