Kawalan Tango

Kawalan Tango

Apakah TANGO?

Ia adalah sistem untuk menguruskan pelbagai perkakasan dan perisian.
TANGO kini menyokong 4 platform: Linux, Windows NT, Solaris dan HP-UX.
Di sini kami akan menerangkan bekerja dengan Linux (Ubuntu 18.04)

Untuk apa itu?

Memudahkan kerja dengan pelbagai peralatan dan perisian.

  • Anda tidak perlu memikirkan cara untuk menyimpan data dalam pangkalan data, ia sudah dilakukan untuk anda.
  • Ia hanya perlu untuk menerangkan mekanisme untuk penderia undian.
  • Mengurangkan semua kod anda kepada satu standard.

Di mana untuk mendapatkan?

Saya tidak dapat melancarkannya daripada kod sumber; Saya menggunakan imej siap sedia TangoBox 9.3 untuk berfungsi.
Arahan menerangkan cara memasang daripada pakej.

Apakah kandungannya?

  • jive β€” digunakan untuk melihat dan mengedit pangkalan data TANGO.
  • POGO β€” penjana kod untuk pelayan peranti TANGO.
  • Astor β€” pengurus program untuk sistem TANGO.

Kami hanya akan berminat dalam dua komponen pertama.

Bahasa pengaturcaraan yang disokong

  • C
  • C + +
  • Java
  • JavaScript
  • Python
  • Matlab
  • Tinjauan Makmal

Saya bekerja dengannya dalam python & c++. Di sini C++ akan digunakan sebagai contoh.

Sekarang mari kita beralih kepada penerangan tentang cara menyambungkan peranti ke TANGO dan cara bekerja dengannya. Bayaran akan diambil sebagai contoh GPS neo-6m-0-001:

Kawalan Tango

Seperti yang anda lihat dalam gambar, kami menyambungkan papan ke PC melalui UART CP2102. Apabila disambungkan ke PC, peranti muncul /dev/ttyUSB[0-N], biasanya /dev/ttyUSB0.

POGO

Sekarang mari kita lancarkan pogo, dan menjana kod rangka untuk bekerja dengan papan kami.

pogo

Kawalan Tango

Saya sudah mencipta kod itu, mari buat semula Fail->Baharu.

Kawalan Tango

Kami mendapat perkara berikut:

Kawalan Tango

Peranti kami (pada masa hadapan, mengikut peranti yang kami maksudkan bahagian perisian) kosong dan mempunyai dua arahan kawalan: Negeri & status.

Ia mesti diisi dengan sifat-sifat yang diperlukan:

Harta Peranti β€” nilai lalai yang kami pindahkan ke peranti untuk memulakannya; untuk papan GPS, anda perlu memindahkan nama papan dalam sistem com="/dev/ttyUSB0" dan kelajuan port com baudrade=9600

arahan β€” perintah untuk mengawal peranti kami; ia boleh diberikan hujah dan nilai pulangan.

  • NEGERI - mengembalikan keadaan semasa, daripada Syarikat
  • STATUS - mengembalikan status semasa, ini adalah pelengkap rentetan NEGERI
  • GPSArray - pulangan gps rentetan dalam bentuk DevVarCharArray

Seterusnya, tetapkan atribut peranti yang boleh dibaca/ditulis ke/daripadanya.
Atribut Skalar - atribut mudah (char, rentetan, panjang, dll.)
Atribut Spektrum - tatasusunan satu dimensi
Atribut Imej - tatasusunan dua dimensi

Syarikat β€” keadaan di mana peranti kami berada.

  • BUKA β€” peranti terbuka.
  • TUTUP - peranti ditutup.
  • GAGAL - kesilapan.
  • ON β€” terima data daripada peranti.
  • OFF β€” tiada data daripada peranti.

Contoh menambah atribut gps_string:

Kawalan Tango

tempoh pengundian masa dalam ms, kekerapan nilai gps_string akan dikemas kini. Jika masa kemas kini tidak ditentukan, atribut akan dikemas kini hanya atas permintaan.

Berlaku:

Kawalan Tango

Sekarang anda perlu menjana kod Fail->Jana

Kawalan Tango

Secara lalai, Makefile tidak dijana; kali pertama anda perlu menandakan kotak untuk menciptanya. Ini dilakukan supaya perubahan yang dibuat padanya tidak dipadamkan semasa generasi baharu. Setelah menciptanya sekali dan mengkonfigurasinya untuk projek anda (daftar kunci kompilasi, fail tambahan), anda boleh melupakannya.

Sekarang mari kita beralih kepada pengaturcaraan. pogo dengan menghasilkan yang berikut untuk kami:

Kawalan Tango

Kami akan berminat dengan NEO6M.cpp & NEO6M.h. Mari kita ambil contoh pembina 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 yang ada dan apa yang penting di sini? Fungsi init_device() memperuntukkan memori untuk atribut kami: gps_string & gps_array, tetapi ia tidak penting. Perkara yang paling penting di sini, ini adalah ulasan:

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

Semua yang ada di dalam blok ulasan ini tidak akan disertakan dalam pogo semasa penjanaan semula kod berikutnya berpindah!. Semua yang tidak ada dalam blok akan menjadi! Ini adalah tempat di mana kita boleh memprogram dan membuat suntingan kita sendiri.

Sekarang apakah fungsi utama yang terkandung dalam kelas? 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);

Apabila kita ingin membaca nilai atribut gps_string, fungsi akan dipanggil dalam susunan berikut: always_executed_hook, read_attr_hardware ΠΈ read_gps_string. Read_gps_string akan mengisi gps_string dengan 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
}

Penyusunan

Pergi ke folder sumber dan:

make

Program ini akan disusun ke dalam folder ~/DeviceServers.

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

jive

jive

Kawalan Tango

Sudah terdapat beberapa peranti dalam pangkalan data, mari kita cipta peranti kita sekarang Edit->Buat Pelayan

Kawalan Tango

Sekarang mari kita cuba menyambung kepadanya:

Kawalan Tango

Tiada apa-apa yang akan berfungsi, pertama kita perlu menjalankan program kami:

sudo ./NEO6M neo6m -v2

Saya hanya boleh menyambung ke port com dengan hak akar-a. v - tahap pembalakan.

Sekarang kita boleh menyambung:

Kawalan Tango

Pelanggan

Dalam grafik, melihat gambar sudah tentu bagus, tetapi anda memerlukan sesuatu yang lebih berguna. Mari tulis pelanggan yang akan menyambung ke peranti kami dan mengambil bacaan daripadanya.

#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 menyusun:

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

Keputusan:

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

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

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

Kami mendapat keputusan sebagai pulangan arahan, mengambil atribut rentetan dan pelbagai aksara.

rujukan

Saya menulis artikel itu untuk diri saya sendiri, kerana selepas beberapa ketika saya mula lupa bagaimana dan apa yang perlu dilakukan.

Terima kasih atas perhatian anda.

Sumber: www.habr.com

Tambah komen