Tango Controls

Tango Controls

chii TANGO?

Iyo sisitimu yekutarisa akasiyana hardware uye software.
TANGO parizvino inotsigira mapuratifomu mana: Linux, Windows NT, Solaris uye HP-UX.
Pano tichatsanangura kushanda neLinux (Ubuntu 18.04)

Ndechei?

Inorerutsa basa neyakasiyana midziyo uye software.

  • Iwe haufanire kufunga nezvekuchengeta data mudhatabhesi, zvakatoitirwa iwe.
  • Zvinongodiwa chete kutsanangura michina yekuvhota sensors.
  • Inoderedza kodhi yako yese kune imwe chiyero.

Kupi kwekuwana

Ini handina kukwanisa kuivhura kubva kune kodhi kodhi; Ndakashandisa yakagadzirira-yakagadzirwa mufananidzo weTangoBox 9.3 kushanda.
Mirayiridzo inotsanangura nzira yekuisa kubva pamapakeji.

Inosanganisira chii?

  • JIVE - inoshandiswa kuona nekugadzirisa dhatabhesi reTANGO.
  • POGO - kodhi jenareta yeTANGO mudziyo maseva.
  • Astor - maneja wechirongwa cheTANGO system.

Tichafarira chete zvikamu zviviri zvekutanga.

Mitauro yekuronga inotsigirwa

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

Ndakashanda nayo mu python & c ++. Pano C ++ ichashandiswa semuenzaniso.

Zvino ngatienderere mberi kune tsananguro yekuti ungabatanidza sei mudziyo kuTANGO uye kuti ungashanda sei nawo. Mari yacho ichatorwa semuenzaniso GPS neo-6m-0-001:

Tango Controls

Sezvauri kuona pamufananidzo, tinobatanidza bhodhi kuPC kuburikidza neUART CP2102. Kana yakabatana nePC, mudziyo unooneka /dev/ttyUSB[0-N], kazhinji /dev/ttyUSB0.

POGO

Zvino ngatitangei pogo, uye gadzira skeleton kodhi yekushanda nebhodhi redu.

pogo

Tango Controls

Ini ndakatogadzira iyo kodhi, ngatiigadzire zvakare Faira-> Nyowani.

Tango Controls

Tinowana zvinotevera:

Tango Controls

Chishandiso chedu (mune ramangwana, nemudziyo isu tichareva chikamu chesoftware) haina chinhu uye ine mirairo miviri yekudzora: mamiriro & chinzvimbo.

Inofanirwa kuzadzwa nehunhu hunodiwa:

Mudziyo Property - default tsika dzatinoendesa kune mudziyo kuti utange; yeGPS bhodhi, unofanirwa kuendesa zita rebhodhi muhurongwa. com="/dev/ttyUSB0" uye com port kumhanya baudrade=9600

Mirairo - mirairo yekudzora mudziyo wedu; vanogona kupihwa nharo uye kukosha kwekudzoka.

  • STATE - inodzorera mamiriro azvino, kubva States
  • STATUS - inodzosera chimiro chazvino, ichi ndicho chinozadzisa tambo kune STATE
  • GPSArray - anodzoka VanaChiremba vezvirwere zvese tambo muchimiro DevVarCharArray

Tevere, isa hunhu hwechishandiso hunogona kuverengwa/kunyorwa ku/kubva kwairi.
Scalar Attributes - hunhu huri nyore (char, tambo, kureba, nezvimwewo)
Spectrum Attributes - one-dimensional arrays
Image Attributes - maviri-dimensional arrays

States - iyo nzvimbo iyo mudziyo wedu uri.

  • VHURA - mudziyo wakavhurika.
  • PEDYO - mudziyo wakavharwa.
  • FAILT - kukanganisa.
  • ON - gamuchira data kubva kumudziyo.
  • Off - hapana data kubva kumudziyo.

Muenzaniso wekuwedzera hunhu gps_string:

Tango Controls

Nguva yekuvhota nguva mu ms, kangani iyo gps_string kukosha ichagadziridzwa. Kana iyo nguva yekuvandudza isina kutaurwa, hunhu hunovandudzwa chete pakukumbira.

Zvakaitika:

Tango Controls

Iye zvino unofanirwa kugadzira kodhi Faira-> Gadzira

Tango Controls

Nekusagadzikana, iyo Makefile haina kugadzirwa; kekutanga iwe unofanirwa kutarisa bhokisi kuti ugadzire. Izvi zvinoitirwa kuti shanduko dzakaitwa kwairi dzirege kudzimwa panguva yechizvarwa chitsva. Mushure mekuigadzira kamwe chete uye nekuigadzirira purojekiti yako (kunyoresa makiyi ekubatanidza, mamwe mafaera), unogona kukanganwa nezvazvo.

Zvino ngatienderere mberi kune programming. pogo neyakagadzira zvinotevera kwatiri:

Tango Controls

Tichafarira NEO6M.cpp & NEO6M.h. Ngatitorei muenzaniso wemugadziri wekirasi:

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
}

Chii chiripo uye chii chakakosha pano? Iyo init_device () basa rinogovera ndangariro kune hunhu hwedu: gps_string & gps_array, asi hazvina kukosha. Chinhu chakakosha apa, aya ndiwo mazwi:

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

Zvese zviri mukati meiyi block block hazvizoverengerwe mupogo panguva inotevera kodhi yekuvandudza suduruka!. Zvese zvisiri mumabhuroko zvichave! Idzi ndidzo nzvimbo dzatinogona kuronga uye kugadzira edu pachedu.

Zvino ndeapi mabasa makuru ane kirasi? 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);

Patinoda kuverenga kukosha kwehunhu gps_string, mabasa achadaidzwa nenzira inotevera: nguva dzose_yakaitwa_hoko, read_atr_hardware ΠΈ read_gps_string. Read_gps_string ichazadza gps_string nehuwandu.

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
}

Kuumbwa

Enda kune iyo source folda uye:

make

Iyo purogiramu ichaunganidzwa mu ~/DeviceServers folda.

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

JIVE

jive

Tango Controls

Patova nemimwe michina mudhatabhesi, ngatitangei zvedu Rongedza-> Gadzira Server

Tango Controls

Zvino ngatiedzei kubatana nayo:

Tango Controls

Hapana chichashanda, chekutanga tinoda kumhanyisa chirongwa chedu:

sudo ./NEO6M neo6m -v2

Ndinokwanisa chete kubatanidza kune com port ine kodzero mudzi-A. v - danho rekutema miti.

Iye zvino tinogona kubatanidza:

Tango Controls

Mutengi

Mumifananidzo, kutarisa mifananidzo kwakanaka, asi iwe unoda chimwe chinhu chinobatsira. Ngatinyorei mutengi anozobatana nemudziyo wedu uye kutora kuverenga kubva kwairi.

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

Nzira yekuunganidza:

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

Mhinduro:

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

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

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

Isu takawana mhedzisiro sekudzoka kwekuraira, tichitora hunhu hwetambo uye ruzhinji rwemavara.

nezvakanyorwa

Ndakanyora chinyorwa chacho, nokuti mushure mechinguva ndinotanga kukanganwa kuti sei uye zvekuita.

Ndinokutendai uchicherechedze.

Source: www.habr.com

Voeg