Udhibiti wa Tango

Udhibiti wa Tango

Je, ni TANGO?

Ni mfumo wa kusimamia maunzi na programu mbalimbali.
TANGO kwa sasa inasaidia majukwaa 4: Linux, Windows NT, Solaris na HP-UX.
Hapa tutaelezea kufanya kazi na Linux (Ubuntu 18.04)

Ni ya nini?

Inarahisisha kazi na vifaa na programu mbalimbali.

  • Huna haja ya kufikiria jinsi ya kuhifadhi data katika hifadhidata, tayari imefanywa kwako.
  • Ni muhimu tu kuelezea utaratibu wa sensorer za kupigia kura.
  • Hupunguza msimbo wako wote hadi kiwango kimoja.

Wapi kupata

Sikuweza kuizindua kutoka kwa msimbo wa chanzo; nilitumia picha iliyotengenezwa tayari ya TangoBox 9.3 kufanya kazi.
Maagizo yanaelezea jinsi ya kusanikisha kutoka kwa vifurushi.

Inajumuisha nini?

  • JIVE β€” hutumika kutazama na kuhariri hifadhidata ya TANGO.
  • POGO β€” jenereta ya msimbo kwa seva za kifaa cha TANGO.
  • Astor - meneja programu wa mfumo wa TANGO.

Tutapendezwa tu na vipengele viwili vya kwanza.

Lugha za programu zinazotumika

  • C
  • C + +
  • Java
  • JavaScript
  • Chatu
  • Matlab
  • MAONI YA MAABARA

Nilifanya kazi nayo kwenye python & c ++. Hapa C++ itatumika kama mfano.

Sasa hebu tuendelee kwenye maelezo ya jinsi ya kuunganisha kifaa kwa TANGO na jinsi ya kufanya kazi nayo. Ada itachukuliwa kwa mfano GPS neo-6m-0-001:

Udhibiti wa Tango

Kama unavyoona kwenye picha, tunaunganisha ubao kwa Kompyuta kupitia UART CP2102. Unapounganishwa kwenye PC, kifaa kinaonekana /dev/ttyUSB[0-N], kawaida /dev/ttyUSB0.

POGO

Sasa tuzindue pogo, na kutoa msimbo wa mifupa kwa kufanya kazi na bodi yetu.

pogo

Udhibiti wa Tango

Tayari nimeunda msimbo, wacha tuunde tena Faili->Mpya.

Udhibiti wa Tango

Tunapata zifuatazo:

Udhibiti wa Tango

Kifaa chetu (katika siku zijazo, kwa kifaa tutamaanisha sehemu ya programu) ni tupu na ina amri mbili za udhibiti: Hali & Hali ya Oda.

Lazima ijazwe na sifa zinazohitajika:

Mali ya Kifaa - maadili chaguo-msingi ambayo tunahamisha kwa kifaa ili kuianzisha; kwa bodi ya GPS, unahitaji kuhamisha jina la bodi kwenye mfumo. com="/dev/ttyUSB0" na kasi ya bandari ya com baudrade=9600

Amri - amri za kudhibiti kifaa chetu; wanaweza kupewa hoja na thamani ya kurudi.

  • HALI - inarudi hali ya sasa, kutoka Nchi
  • HALI - inarudisha hali ya sasa, hii ni inayosaidia kamba kwa HALI
  • GPSArray - inarudi gps kamba katika fomu DevVarCharArray

Kisha, weka sifa za kifaa ambazo zinaweza kusomwa/kuandikwa kwa/kutoka humo.
Sifa za Scalar - sifa rahisi (char, kamba, ndefu, nk)
Sifa za Spectrum - safu za mwelekeo mmoja
Sifa za Picha - safu mbili-dimensional

Nchi - hali ambayo kifaa chetu kiko.

  • OPEN - kifaa kimefunguliwa.
  • Karibu - kifaa kimefungwa.
  • KUSHINDWA - kosa.
  • ON β€” kupokea data kutoka kwa kifaa.
  • OFF - hakuna data kutoka kwa kifaa.

Mfano wa kuongeza sifa gps_string:

Udhibiti wa Tango

Kipindi cha upigaji kura muda katika ms, ni mara ngapi thamani ya gps_string itasasishwa. Ikiwa muda wa sasisho haujabainishwa, sifa itasasishwa tu juu ya ombi.

Imetokea:

Udhibiti wa Tango

Sasa unahitaji kuunda msimbo Faili-> Tengeneza

Udhibiti wa Tango

Kwa chaguo-msingi, Makefile haijazalishwa; mara ya kwanza unahitaji kuangalia kisanduku ili kuunda. Hii inafanywa ili mabadiliko yaliyofanywa kwake yasifutwe wakati wa kizazi kipya. Ukiwa umeiunda mara moja na kuisanidi kwa mradi wako (usajili funguo za mkusanyiko, faili za ziada), unaweza kusahau kuihusu.

Sasa hebu tuendelee kwenye programu. pogo na imetutengenezea yafuatayo:

Udhibiti wa Tango

Tutapendezwa na NEO6M.cpp & NEO6M.h. Wacha tuchukue mfano wa mjenzi wa darasa:

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
}

Kuna nini na ni nini muhimu hapa? Kitendaji cha init_device() hutenga kumbukumbu kwa sifa zetu: gps_string & safu_ya_gps, lakini sio muhimu. Jambo muhimu zaidi hapa, haya ndio maoni:

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

Kila kitu kilicho ndani ya kizuizi hiki cha maoni hakitajumuishwa kwenye pogo wakati wa uundaji upya wa msimbo unaofuata ondoka!. Kila kitu ambacho hakiko kwenye vitalu kitakuwa! Haya ndio mahali ambapo tunaweza kupanga na kufanya uhariri wetu wenyewe.

Sasa ni kazi gani kuu za darasa linazo? 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);

Tunapotaka kusoma thamani ya sifa gps_string, kazi zitaitwa kwa mpangilio ufuatao: ndoano_inayotekelezwa kila wakati, soma_attr_vifaa ΠΈ soma_gps_string. Read_gps_string itajaza gps_string na thamani.

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
}

Mkusanyiko

Nenda kwenye folda ya chanzo na:

make

Programu itakusanywa kwenye folda ya ~/DeviceServers.

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

JIVE

jive

Udhibiti wa Tango

Tayari kuna baadhi ya vifaa kwenye hifadhidata, hebu sasa tuunde yetu Hariri-> Unda Seva

Udhibiti wa Tango

Sasa hebu tujaribu kuunganishwa nayo:

Udhibiti wa Tango

Hakuna kitakachofanya kazi, kwanza tunahitaji kuendesha programu yetu:

sudo ./NEO6M neo6m -v2

Ninaweza tu kuunganisha kwenye bandari ya com na haki mizizi-A. v - kiwango cha ukataji miti.

Sasa tunaweza kuunganisha:

Udhibiti wa Tango

Mteja

Katika graphics, kuangalia picha ni hakika nzuri, lakini unahitaji kitu muhimu zaidi. Hebu tuandike mteja ambaye ataunganisha kwenye kifaa chetu na kuchukua usomaji kutoka kwake.

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

Jinsi ya kukusanya:

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

Matokeo:

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

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

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

Tulipata matokeo kama kurudi kwa amri, kuchukua sifa za kamba na safu ya wahusika.

marejeo

Niliandika nakala hiyo mwenyewe, kwa sababu baada ya muda ninaanza kusahau jinsi na nini cha kufanya.

Asante kwa mawazo yako.

Chanzo: mapenzi.com

Kuongeza maoni