Tango Controls

Tango Controls

Abin da TANGO?

Tsari ne na sarrafa kayan masarufi da software iri-iri.
A halin yanzu TANGO yana goyan bayan dandamali 4: Linux, Windows NT, Solaris da HP-UX.
Anan zamu bayyana aiki tare da Linux (Ubuntu 18.04)

Menene don me?

Sauƙaƙe aiki tare da kayan aiki daban-daban da software.

  • Ba kwa buƙatar yin tunanin yadda ake adana bayanai a cikin rumbun adana bayanai, an riga an yi muku.
  • Ya zama dole kawai a kwatanta tsarin na'urar firikwensin zaɓe.
  • Yana rage duk lambar ku zuwa ma'auni ɗaya.

Inda zaka samu

Ba zan iya ƙaddamar da shi daga lambar tushe ba; Na yi amfani da hoton da aka shirya na TangoBox 9.3 don aiki.
Umurnin sun bayyana yadda ake shigarwa daga fakiti.

Menene ya kunsa?

  • JIVE - ana amfani dashi don dubawa da gyara bayanan TANGO.
  • POGO - janareta na lambar don sabobin na'urar TANGO.
  • Taurari - Manajan shirin don tsarin TANGO.

Za mu yi sha'awar kawai a cikin abubuwa biyu na farko.

Harsunan shirye-shirye masu goyan baya

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

Na yi aiki tare da shi a Python & c++. Anan C++ za a yi amfani da shi azaman misali.

Yanzu bari mu matsa zuwa bayanin yadda ake haɗa na'urar zuwa TANGO da yadda ake aiki da ita. Za a ɗauki kuɗin a matsayin misali GPS neo-6m-0-001:

Tango Controls

Kamar yadda kake gani a hoton, muna haɗa allon zuwa PC ta UART CP2102. Lokacin da aka haɗa zuwa PC, na'urar tana bayyana /dev/ttyUSB[0-N], yawanci /dev/ttyUSB0.

POGO

Yanzu bari mu kaddamar pogo, da kuma samar da lambar kwarangwal don aiki tare da hukumar mu.

pogo

Tango Controls

Na riga na ƙirƙiri lambar, bari mu sake ƙirƙira shi Fayil->Sabo.

Tango Controls

Muna samun masu zuwa:

Tango Controls

Na'urar mu (a nan gaba, ta na'urar za mu nufi sashin software) fanko ne kuma yana da umarnin sarrafawa guda biyu: Jihar & Status.

Dole ne a cika shi da halayen da ake bukata:

Dukiyar Na'ura - tsoho dabi'u waɗanda muke canjawa zuwa na'urar don fara ta; don allon GPS, kuna buƙatar canja wurin sunan allon a cikin tsarin. com = "/dev/ttyUSB0" da saurin tashar jiragen ruwa com baurade=9600

dokokin - umarni don sarrafa na'urar mu; ana iya ba su muhawara da ƙimar dawowa.

  • STATE - ya dawo da halin yanzu, daga Amirka
  • STATUS - yana dawo da halin yanzu, wannan shine madaidaicin kirtani STATE
  • GPSArray - dawo GPS kirtani a cikin tsari DevVarCharArray

Na gaba, saita halayen na'urar waɗanda za'a iya karantawa/rubutu zuwa/daga gareta.
Halayen Scalar - sauki halaye (char, kirtani, dogo, da dai sauransu)
Halayen Spectrum - tsararraki mai girma ɗaya
Halayen Hoto - tsararraki masu girma biyu

Amirka - yanayin da na'urar mu ke ciki.

  • BUDE - na'urar a bude take.
  • KUSANTAR - an rufe na'urar.
  • GASKIYA - kuskure.
  • ON - karɓar bayanai daga na'urar.
  • KASHE - babu bayanai daga na'urar.

Misalin ƙara sifa gps_string:

Tango Controls

Lokacin zabe lokaci a cikin ms, sau nawa za a sabunta ƙimar gps_string. Idan ba a kayyade lokacin sabuntawa ba, za a sabunta sifa ce kawai akan buƙata.

Ya faru:

Tango Controls

Yanzu kuna buƙatar ƙirƙirar lambar Fayil-> Ƙirƙira

Tango Controls

Ta hanyar tsoho, ba a samar da Makefile ba; a karon farko kana buƙatar duba akwatin don ƙirƙirar shi. Ana yin haka ne don kada a goge sauye-sauyen da aka yi masa yayin sabuwar tsara. Bayan ƙirƙira shi sau ɗaya kuma saita shi don aikin ku (maɓallan haɗaɗɗen rajista, ƙarin fayiloli), zaku iya mantawa da shi.

Yanzu bari mu matsa zuwa shirye-shirye. pogo tare da samar mana da abubuwa masu zuwa:

Tango Controls

Za mu yi sha'awar NEO6M.cpp & NEO6M.h. Bari mu ɗauki misalin mai ginin aji:

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
}

Menene akwai kuma menene mahimmanci a nan? Aikin init_device() yana keɓance ƙwaƙwalwar ajiya don halayenmu: gps_string & gps_array, amma ba shi da mahimmanci. Abu mafi mahimmanci a nan, wadannan sune sharhin:

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

Duk abin da ke cikin wannan shingen sharhi ba za a saka shi cikin pogo ba yayin sabunta lambar da ke gaba tafi!. Duk abin da ba a cikin tubalan zai kasance! Waɗannan su ne wuraren da za mu iya yin shirye-shirye da yin namu gyara.

Yanzu menene manyan ayyuka ajin ya kunsa? 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);

Lokacin da muke son karanta darajar sifa gps_string, za a kira ayyukan a cikin tsari mai zuwa: ko da yaushe_executed_ƙugiya, karanta_attr_hardware и karanta_gps_string. Read_gps_string zai cika gps_string tare da ƙimar.

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
}

Haɗawa

Jeka babban fayil ɗin tushen kuma:

make

Za a haɗa shirin cikin babban fayil ~/DeviceServers.

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

JIVE

jive

Tango Controls

Akwai wasu na'urori a cikin ma'ajin bayanai, bari yanzu mu ƙirƙiri namu Edit-> Ƙirƙiri Sabar

Tango Controls

Yanzu bari mu yi ƙoƙarin haɗawa da shi:

Tango Controls

Babu wani abu da zai yi aiki, da farko muna buƙatar gudanar da shirinmu:

sudo ./NEO6M neo6m -v2

Zan iya haɗawa da tashar com kawai tare da haƙƙoƙi tushen-A. v - matakin shiga.

Yanzu za mu iya haɗawa:

Tango Controls

Abokin Ciniki

A cikin zane-zane, kallon hotuna tabbas yana da kyau, amma kuna buƙatar wani abu mafi amfani. Bari mu rubuta abokin ciniki wanda zai haɗa zuwa na'urar mu kuma mu ɗauki karatu daga gare ta.

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

Yadda ake hada:

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

Sakamako:

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

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

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

Mun sami sakamakon azaman dawowar umarni, ɗaukar halayen kirtani da jerin haruffa.

nassoshi

Na rubuta labarin da kaina, domin bayan wani lokaci na fara manta yadda da abin da zan yi.

Gode ​​muku da hankali.

source: www.habr.com

Add a comment