Kontrol Tango

Kontrol Tango

apa TANGO?

Iku sistem kanggo ngatur macem-macem hardware lan software.
TANGO saiki ndhukung 4 platform: Linux, Windows NT, Solaris lan HP-UX.
Ing kene kita bakal nerangake nggarap Linux (Ubuntu 18.04)

Kanggo apa?

Nyederhanakake karya karo macem-macem peralatan lan piranti lunak.

  • Sampeyan ora perlu mikir babagan carane nyimpen data ing database, iku wis rampung kanggo sampeyan.
  • Iku mung perlu kanggo njlΓ¨ntrΓ¨hakΓ© mekanisme kanggo sensor polling.
  • Nyuda kabeh kode sampeyan dadi siji standar.

Sing arep njaluk

Aku ora bisa miwiti saka kode sumber; Aku nggunakake gambar siap-digawe saka TangoBox 9.3 kanggo bisa.
Pandhuan nerangake carane nginstal saka paket.

Apa isine?

  • jive - digunakake kanggo ndeleng lan ngowahi database TANGO.
  • POGO - generator kode kanggo server piranti TANGO.
  • Astor - manajer program kanggo sistem TANGO.

Kita bakal kasengsem mung ing rong komponen pisanan.

Basa pamrograman sing didhukung

  • C
  • C ++
  • Jawa
  • JavaScript
  • Python
  • Matlab
  • LabVIEW

Aku kerjo karo python & c ++. Ing kene C ++ bakal digunakake minangka conto.

Saiki ayo pindhah menyang katrangan babagan carane nyambungake piranti menyang TANGO lan cara nggarap. Ragad bakal dijupuk minangka conto GPS neo-6m-0-001:

Kontrol Tango

Nalika sampeyan bisa ndeleng ing gambar, kita nyambung Papan kanggo PC liwat UART CP2102. Nalika disambungake menyang PC, piranti katon /dev/ttyUSB[0-N], biasane /dev/ttyUSB0.

POGO

Saiki ayo diluncurake pogo, lan ngasilake kode kerangka kanggo nggarap papan kita.

pogo

Kontrol Tango

Aku wis nggawe kode, ayo nggawe maneh File-> Anyar.

Kontrol Tango

Kita entuk ing ngisor iki:

Kontrol Tango

Piranti kita (ing mangsa ngarep, miturut piranti kita bakal tegese bagean piranti lunak) kosong lan duwe rong perintah kontrol: State & status.

Sampeyan kudu diisi karo atribut sing dibutuhake:

Properti piranti - nilai standar sing ditransfer menyang piranti kanggo miwiti; kanggo papan GPS, sampeyan kudu nransfer jeneng papan ing sistem com="/dev/ttyUSB0" lan kacepetan port com baudrade=9600

Prentah - printah kanggo ngontrol piranti kita; padha bisa diwenehi bantahan lan nilai bali.

  • STATE - ngasilake negara saiki, saka Serikat
  • STATUS - ngasilake status saiki, iki nglengkapi senar kanggo STATE
  • GPSArray - bali GPS string ing wangun DevVarCharArray

Sabanjure, setel atribut piranti sing bisa diwaca/ditulis menyang/saka.
Atribut skalar - atribut prasaja (char, string, long, etc.)
Atribut Spektrum - susunan siji-dimensi
Atribut Gambar - susunan rong dimensi

Serikat - negara ing ngendi piranti kita dumunung.

  • OPEN - piranti mbukak.
  • CLOSE - piranti ditutup.
  • GAGAL - kesalahan.
  • ON - nampa data saka piranti.
  • OFF - ora ana data saka piranti.

Tuladha nambah atribut gps_string:

Kontrol Tango

Periode polling wektu ing ms, sepira kerepe nilai gps_string bakal dianyari. Yen wektu nganyari ora ditemtokake, atribut bakal dianyari mung sawise dijaluk.

Kedadeyan:

Kontrol Tango

Saiki sampeyan kudu nggawe kode File-> Generate

Kontrol Tango

Kanthi gawan, Makefile ora digawe; sepisanan sampeyan kudu mriksa kothak kanggo nggawe. Iki ditindakake supaya owah-owahan sing ditindakake ora bakal dibusak sajrone generasi anyar. Sawise digawe lan dikonfigurasi kanggo proyek sampeyan (ndhaftar tombol kompilasi, file tambahan), sampeyan bisa lali babagan iki.

Saiki ayo pindhah menyang pemrograman. pogo kanthi ngasilake ing ngisor iki kanggo kita:

Kontrol Tango

Kita bakal kasengsem ing NEO6M.cpp & NEO6M.h. Ayo njupuk conto konstruktor kelas:

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
}

Apa ana lan apa sing penting ing kene? Fungsi init_device() nyedhiyakake memori kanggo atribut kita: gps_string & gps_array, nanging ora penting. Sing paling penting ing kene, iki komentar:

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

Kabeh sing ana ing blok komentar iki ora bakal kalebu ing pogo sajrone regenerasi kode sabanjure ngalih!. Kabeh sing ora ana ing blok bakal dadi! Iki minangka papan sing bisa kita program lan nggawe suntingan kita dhewe.

Saiki apa fungsi utama kelas kasebut? 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);

Nalika kita pengin maca nilai atribut gps_string, fungsi kasebut bakal diarani kanthi urutan ing ngisor iki: tansah_eksekusi_pancing, read_attr_hardware ΠΈ maca_gps_string. Read_gps_string bakal ngisi gps_string kanthi nilai.

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
}

Kompilasi

Pindhah menyang folder sumber lan:

make

Program kasebut bakal dikompilasi menyang folder ~/DeviceServers.

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

jive

jive

Kontrol Tango

Wis sawetara piranti ing database, ayo saiki nggawe kita Sunting-> Gawe Server

Kontrol Tango

Saiki ayo nyoba nyambungake:

Kontrol Tango

Ora ana sing bisa digunakake, mula kita kudu mbukak program:

sudo ./NEO6M neo6m -v2

Aku mung bisa nyambung menyang port com karo hak ROOT-a. v - tingkat logging.

Saiki kita bisa nyambung:

Kontrol Tango

Pelanggan

Ing grafis, ndeleng gambar mesthi apik, nanging sampeyan butuh sing luwih migunani. Ayo nulis klien sing bakal nyambung menyang piranti kita lan maca saka iku.

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

Cara ngumpulake:

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

Asil:

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

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

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

Kita entuk asil minangka printah bali, njupuk atribut saka senar lan Uploaded karakter.

referensi

Aku nulis artikel kanggo aku, amarga sawise sawetara wektu aku wiwit lali carane lan apa.

Matur nuwun kanggo manungsa waΓ©.

Source: www.habr.com

Add a comment