Tango Controls

Tango Controls

Kodi TANGO?

Ndi dongosolo loyang'anira ma hardware ndi mapulogalamu osiyanasiyana.
TANGO pakadali pano imathandizira nsanja zinayi: Linux, Windows NT, Solaris ndi HP-UX.
Apa tifotokoza kugwira ntchito ndi Linux (Ubuntu 18.04)

Ndi cha chiyani?

Imathandizira ntchito ndi zida ndi mapulogalamu osiyanasiyana.

  • Simuyenera kuganiza za momwe mungasungire deta mu database, zakuchitirani kale.
  • Ndikofunikira kufotokoza njira ya masensa ovotera.
  • Imachepetsa ma code anu onse kukhala muyezo umodzi.

Kupita kuti?

Sindinathe kuyiyambitsa kuchokera ku gwero; Ndinagwiritsa ntchito chithunzi chokonzekera cha TangoBox 9.3 kuti ndigwire ntchito.
Malangizowa akufotokoza momwe mungayikitsire kuchokera pamaphukusi.

Zimakhala ndi chiyani?

  • Jive - amagwiritsidwa ntchito powona ndikusintha nkhokwe ya TANGO.
  • POGO - jenereta wamakhodi a ma seva a chipangizo cha TANGO.
  • Katswiri - woyang'anira pulogalamu ya TANGO.

Tidzakhala ndi chidwi ndi zigawo ziwiri zoyambirira zokha.

Zilankhulo zothandizira

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

Ndidagwira nawo ntchito mu python & c ++. Apa C ++ idzagwiritsidwa ntchito ngati chitsanzo.

Tsopano tiyeni tipitirire ku kufotokozera momwe mungalumikizire chipangizochi ku TANGO ndi momwe mungachigwiritsire ntchito. Ndalamazo zidzatengedwa monga chitsanzo GPS neo-6m-0-001:

Tango Controls

Monga mukuwonera pachithunzichi, timalumikiza bolodi ku PC kudzera pa UART CP2102. Mukalumikizidwa ndi PC, chipangizocho chimawonekera /dev/ttyUSB[0-N], kawirikawiri /dev/ttyUSB0.

POGO

Tsopano tiyeni tiyambitse pogo, ndikupanga ma skeleton code kuti mugwire ntchito ndi gulu lathu.

pogo

Tango Controls

Ndinapanga kale code, tiyeni tiyipangenso Fayilo-> Chatsopano.

Tango Controls

Timapeza zotsatirazi:

Tango Controls

Chipangizo chathu (m'tsogolomu, ndi chipangizo tidzatanthauza gawo la pulogalamu) chilibe kanthu ndipo chili ndi malamulo awiri olamulira: State & kachirombo.

Iyenera kudzazidwa ndi zofunikira:

Katundu wa Chipangizo - zokhazikika zomwe timasamutsa ku chipangizo kuti tiyambitse; pa bolodi la GPS, muyenera kusamutsa dzina la bolodi mu dongosolo com="/dev/ttyUSB0" ndi liwiro la com port baudrade=9600

Malamulo - amalamula kuti aziwongolera chipangizo chathu; amatha kupatsidwa zifukwa ndi mtengo wobwezera.

  • STATE - imabweretsanso zomwe zikuchitika, kuchokera States
  • STATUS - imabweretsanso zomwe zilipo, izi ndizomwe zikugwirizana ndi chingwe STATE
  • GPSArray - kubwerera GPS chingwe mu mawonekedwe DevVarCharArray

Kenako, ikani mawonekedwe a chipangizo omwe angawerengedwe/kulembedwa ku/kuchokera.
Makhalidwe a Scalar - zikhalidwe zosavuta (char, chingwe, kutalika, etc.)
Maonekedwe a Spectrum - magulu amtundu umodzi
Mawonekedwe azithunzi - magulu awiri azithunzi

States - momwe chipangizo chathu chilili.

  • TSEGULANI - chipangizocho ndi chotseguka.
  • PAFUPI - chipangizocho chatsekedwa.
  • KULEPHERA - cholakwika.
  • ON - kulandira deta kuchokera ku chipangizo.
  • PA - palibe deta kuchokera ku chipangizo.

Chitsanzo chowonjezera chikhalidwe gps_chingwe:

Tango Controls

Nthawi yovotera nthawi mu ms, kuchuluka kwa gps_string kudzasinthidwa kangati. Ngati nthawi yosinthira sinatchulidwe, mawonekedwewo adzasinthidwa pokhapokha atafunsidwa.

Zachitika:

Tango Controls

Tsopano muyenera kupanga code Fayilo-> Pangani

Tango Controls

Mwachikhazikitso, Makefile sanapangidwe; nthawi yoyamba muyenera kuyang'ana bokosi kuti mupange. Izi zimachitidwa kuti zosintha zomwe zasinthidwa zisachotsedwe m'badwo watsopano. Mutapanga kamodzi ndikukonza pulojekiti yanu (makiyi olembetsa, mafayilo owonjezera), mutha kuyiwala za izi.

Tsopano tiyeni tipitirire ku mapulogalamu. pogo ndi adapanga zotsatirazi kwa ife:

Tango Controls

Tidzakhala ndi chidwi ndi NEO6M.cpp & NEO6M.h. Tiyeni titenge chitsanzo cha omanga kalasi:

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
}

Ndi chiyani chomwe chilipo komanso chofunikira apa? Ntchito ya init_device () imagawa kukumbukira zikhumbo zathu: gps_chingwe & gps_array, koma sikofunika. Chinthu chofunika kwambiri apa, ndemanga zake ndi izi:

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

Chilichonse chomwe chili mkati mwa block block sichidzaphatikizidwa mu pogo panthawi yokonzanso ma code choka!. Chilichonse chomwe sichili mu midadada chidzakhala! Awa ndi malo omwe titha kupanga mapulogalamu ndikupanga zosintha zathu.

Tsopano ndi ntchito ziti zazikulu zomwe kalasi ili nazo? 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);

Pamene tikufuna kuwerenga chikhalidwe mtengo gps_chingwe, ntchitozo zidzatchedwa motere: nthawi zonse_executed_hook, werengani_attr_hardware и werengani_gps_string. Read_gps_string idzadzaza gps_string ndi mtengo.

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
}

Kuphatikiza

Pitani ku foda yoyambira ndi:

make

Pulogalamuyi idzaphatikizidwa mu chikwatu cha ~/DeviceServers.

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

Jive

jive

Tango Controls

Pali zida zina m'nkhokwe, tiyeni tsopano tipange zathu Sinthani-> Pangani Seva

Tango Controls

Tsopano tiyeni tiyese kulumikizana nazo:

Tango Controls

Palibe chomwe chidzagwire ntchito, choyamba tiyenera kuyendetsa pulogalamu yathu:

sudo ./NEO6M neo6m -v2

Nditha kungolumikizana ndi com port yokhala ndi maufulu muzu-A. v - mulingo wodula mitengo.

Tsopano titha kulumikizana:

Tango Controls

Makasitomala

Pazojambula, kuyang'ana zithunzi ndikwabwino, koma mumafunikira china chothandiza. Tiyeni tilembe kasitomala yemwe angalumikizane ndi chipangizo chathu ndikuwerengera zowerengera.

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

Momwe mungaphatikizire:

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

Zotsatira:

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

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

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

Tidapeza zotsatira zake ngati kubweza kwa lamulo, kutenga mawonekedwe a chingwe ndi mndandanda wa zilembo.

powatsimikizira

Ndinalemba nkhaniyi ndekha, chifukwa patapita kanthawi ndikuyamba kuiwala momwe ndiyenera kuchita.

Zikomo chifukwa tcheru chanu.

Source: www.habr.com

Kuwonjezera ndemanga