Kontrol Tango

Kontrol Tango

Apa TANGO?

Ini adalah sistem untuk mengelola berbagai perangkat keras dan perangkat lunak.
TANGO saat ini mendukung 4 platform: Linux, Windows NT, Solaris dan HP-UX.
Di sini kami akan menjelaskan bekerja dengan Linux (Ubuntu 18.04)

Π΅Π³ΠΎ ΠΎ?

Menyederhanakan pekerjaan dengan berbagai peralatan dan perangkat lunak.

  • Anda tidak perlu memikirkan cara menyimpan data ke database, itu sudah selesai untuk Anda.
  • Kita hanya perlu menjelaskan mekanisme sensor polling.
  • Mengurangi semua kode Anda menjadi satu standar.

Kemana harus mendapatkan?

Saya tidak dapat meluncurkannya dari kode sumber; saya menggunakan gambar TangoBox 9.3 yang sudah jadi agar berfungsi.
Instruksi menjelaskan cara menginstal dari paket.

Terdiri dari apa?

  • Jive β€” digunakan untuk melihat dan mengedit database TANGO.
  • POGO β€” generator kode untuk server perangkat TANGO.
  • Astor β€” manajer program untuk sistem TANGO.

Kami hanya akan tertarik pada dua komponen pertama.

Bahasa pemrograman yang didukung

  • C
  • C + +
  • Jawa
  • JavaScript
  • Ular sanca
  • matlab
  • LabVIEW

Saya mengerjakannya dengan python & c++. Di sini C++ akan digunakan sebagai contoh.

Sekarang mari beralih ke penjelasan tentang cara menghubungkan perangkat ke TANGO dan cara menggunakannya. Biayanya akan diambil sebagai contoh GPS neo-6m-0-001:

Kontrol Tango

Seperti yang Anda lihat pada gambar, kami menghubungkan papan ke PC melalui UART CP2102. Saat terhubung ke PC, perangkat muncul /dev/ttyUSB[0-N], biasanya /dev/ttyUSB0.

POGO

Sekarang mari kita luncurkan pogo, dan buat kode kerangka untuk bekerja dengan papan kami.

pogo

Kontrol Tango

Saya sudah membuat kodenya, mari kita buat lagi File->Baru.

Kontrol Tango

Kami mendapatkan yang berikut:

Kontrol Tango

Perangkat kami (selanjutnya, yang kami maksud dengan perangkat adalah bagian perangkat lunak) kosong dan memiliki dua perintah kontrol: Negara & Status.

Itu harus diisi dengan atribut yang diperlukan:

Properti Perangkat β€” nilai default yang kami transfer ke perangkat untuk menginisialisasinya; untuk papan GPS, Anda perlu mentransfer nama papan di sistem com="/dev/ttyUSB0" dan kecepatan port com baudrade=9600

Perintah β€” perintah untuk mengontrol perangkat kita; mereka dapat diberikan argumen dan nilai kembalian.

  • NEGARA - mengembalikan keadaan saat ini, dari Negara
  • STATUS - mengembalikan status saat ini, ini adalah pelengkap string NEGARA
  • Array GPS - kembali gps string dalam bentuk DevVarCharArray

Selanjutnya, atur atribut perangkat yang dapat dibaca/ditulis ke/darinya.
Atribut Skalar β€” atribut sederhana (char, string, long, dll.)
Atribut Spektrum - array satu dimensi
Atribut Gambar - array dua dimensi

Negara β€” keadaan di mana perangkat kita berada.

  • OPEN β€” perangkat terbuka.
  • TUTUP - perangkat ditutup.
  • GAGAL - kesalahan.
  • ON β€” menerima data dari perangkat.
  • MATI β€” tidak ada data dari perangkat.

Contoh penambahan atribut gps_string:

Kontrol Tango

periode pemungutan suara waktu dalam ms, seberapa sering nilai gps_string akan diperbarui. Jika waktu pembaruan tidak ditentukan, atribut hanya akan diperbarui berdasarkan permintaan.

Terjadi:

Kontrol Tango

Sekarang Anda perlu membuat kodenya File->Hasilkan

Kontrol Tango

Secara default, Makefile tidak dibuat; pertama kali Anda perlu mencentang kotak untuk membuatnya. Hal ini dilakukan agar perubahan yang dilakukan tidak terhapus pada generasi baru. Setelah membuatnya sekali dan mengonfigurasinya untuk proyek Anda (mendaftarkan kunci kompilasi, file tambahan), Anda bisa melupakannya.

Sekarang mari kita beralih ke pemrograman. pogo dengan menghasilkan yang berikut ini untuk kami:

Kontrol Tango

Kami akan tertarik dengan NEO6M.cpp & NEO6M.h. Mari kita ambil contoh 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 yang ada di sana dan apa yang penting di sini? Fungsi init_device() mengalokasikan memori untuk atribut kita: gps_string & gps_array, tapi itu tidak penting. Hal terpenting di sini, ini komentarnya:

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

Segala sesuatu yang ada di dalam blok komentar ini tidak akan disertakan dalam pogo selama pembuatan ulang kode berikutnya pindah!. Segala sesuatu yang tidak ada dalam blok akan menjadi! Ini adalah tempat di mana kita dapat memprogram dan melakukan pengeditan sendiri.

Sekarang apa fungsi utama yang ada di kelas tersebut? 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);

Ketika kita ingin membaca nilai atribut gps_string, fungsi akan dipanggil dengan urutan sebagai berikut: selalu_eksekusi_hook, baca_attr_perangkat keras ΠΈ baca_gps_string. Read_gps_string akan mengisi gps_string dengan nilainya.

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

Buka folder sumber dan:

make

Program akan dikompilasi ke dalam folder ~/DeviceServers.

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

Jive

jive

Kontrol Tango

Sudah ada beberapa perangkat di database, sekarang mari kita buat perangkat kita sendiri Sunting->Buat Server

Kontrol Tango

Sekarang mari kita coba menyambungkannya:

Kontrol Tango

Tidak ada yang berhasil, pertama-tama kita perlu menjalankan program kita:

sudo ./NEO6M neo6m -v2

Saya hanya dapat terhubung ke port com dengan hak akarOh v β€” tingkat pencatatan.

Sekarang kita dapat terhubung:

Kontrol Tango

Klien

Secara grafis, melihat gambar tentu bagus, namun membutuhkan sesuatu yang lebih berguna. Mari kita menulis klien yang akan terhubung ke perangkat kita dan membaca darinya.

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

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

Hasilnya:

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

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

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

Kami mendapatkan hasilnya sebagai pengembalian perintah, mengambil atribut string dan array karakter.

referensi

Saya menulis artikel itu untuk diri saya sendiri, karena lama kelamaan saya mulai lupa bagaimana dan apa yang harus dilakukan.

Terima kasih atas perhatian Anda.

Sumber: www.habr.com

Tambah komentar