Éta mangrupikeun sistem pikeun ngatur rupa-rupa hardware sareng parangkat lunak.
TANGO ayeuna ngadukung 4 platform: Linux, Windows NT, Solaris sareng HP-UX.
Di dieu urang bakal ngajelaskeun gawé bareng Linux Ubuntu (Ubuntu 18.04)
Keur naon eta?
Simplifies gawé kalawan sagala rupa parabot jeung software.
Anjeun teu kedah mikir ngeunaan kumaha carana nyimpen data dina database, éta geus dipigawé pikeun anjeun.
Ieu ngan perlu ngajelaskeun mékanisme pikeun sensor polling.
Abdi henteu tiasa ngaluncurkeun éta tina kode sumber; Kuring nganggo gambar siap-siap TangoBox 9.3 pikeun damel.
Parentah ngajelaskeun kumaha carana masang tina bungkusan.
Naon eusina?
JIVE - dipaké pikeun nempo jeung ngédit database TANGO.
POGO - generator kode pikeun server alat TANGO.
Astor - manajer program pikeun sistem TANGO.
Urang bakal museurkeun ukur dina dua komponén munggaran.
Dirojong basa programming
C
C ++
Jawa
JavaScript
Python
matlab
LabVIEW
Kuring digawé kalayan eta dina python & c ++. Di dieu C ++ bakal dipaké salaku conto.
Ayeuna hayu urang ngaléngkah ka pedaran kumaha nyambungkeun alat ka TANGO jeung kumaha carana dianggo kalayan eta. fee bakal dicokot salaku conto GPS neo-6m-0-001:
Sakumaha anjeun tiasa tingali dina gambar, urang sambungkeun dewan ka PC via UART CP2102. Lamun disambungkeun ka PC, alat nembongan /dev/ttyUSB[0-N], biasana /dev/ttyUSB0.
POGO
Ayeuna hayu urang ngajalankeun pogo, sarta ngahasilkeun kode rangka pikeun gawé bareng dewan urang.
pogo
Kuring geus nyieun kode, hayu urang nyieun deui File-> Anyar.
Urang meunang di handap:
Alat kami (dina mangsa nu bakal datang, ku alat kami bakal hartosna bagian software) kosong tur boga dua paréntah kontrol: nagara & status.
Éta kedah dieusi ku atribut anu diperyogikeun:
Harta alat - nilai standar anu kami transfer ka alat pikeun ngamimitianana; pikeun papan GPS, anjeun kedah nransper nami dewan dina sistem com = "/ dev / ttyUSB0" jeung speed port com baudrade = 9600
Paréntah - Paréntah pikeun ngadalikeun alat urang; aranjeunna tiasa dipasihan argumen sareng nilai mulang.
kaayaan - mulih kaayaan ayeuna, ti Amérika
status - mulih status ayeuna, ieu pelengkap string pikeun kaayaan
GPSArray - mulih GPS string dina bentuk DevVarCharArray
Salajengna, setel atribut alat nu bisa dibaca/ditulis ka/ti eta. Atribut skalar - atribut basajan (char, string, panjang, jsb) Atribut spéktrum - arrays hiji diménsi Atribut Gambar - arrays dua diménsi
Amérika - kaayaan dimana alat urang aya.
OPEN — alatna dibuka.
nutup - alat geus ditutup.
GAGAL - kasalahan.
ON - nampi data tina alat.
OFF - euweuh data ti alat.
Conto nambahkeun atribut gps_string:
Periode polling waktos dina ms, sabaraha sering nilai gps_string bakal diropéa. Lamun waktu update teu dieusian, atribut bakal diropéa ngan kana pamundut.
Kajadian:
Ayeuna anjeun kedah ngahasilkeun kode File-> Generate
Sacara standar, Makefile henteu dihasilkeun; pertama kali anjeun kedah mariksa kotak pikeun nyiptakeunana. Hal ieu dilakukeun supados parobihan anu dilakukeun kana éta henteu dipupus salami generasi énggal. Saatos nyiptakeunana sakali sareng ngonpigurasikeunana pikeun proyék anjeun (ngadaptarkeun konci kompilasi, file tambahan), anjeun tiasa hilap ngeunaan éta.
Ayeuna hayu urang ngaléngkah ka programming. pogo kalayan ngahasilkeun ieu pikeun urang:
Urang bakal museurkeun NEO6M.cpp & NEO6M.h. Hayu urang nyandak conto constructor 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
}
Naon anu aya sareng naon anu penting di dieu? The init_device () fungsi allocates memori pikeun atribut kami: gps_string & gps_array, tapi teu penting. Hal pangpentingna di dieu, ieu komentar:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Sadayana anu aya di jero blok koméntar ieu moal kalebet dina pogo salami regenerasi kode salajengna ngajauhan!. Sagalana nu teu di blok bakal! Ieu mangrupikeun tempat dimana urang tiasa program sareng ngadamel éditan urang sorangan.
Nalika urang hoyong maca nilai atribut gps_string, fungsi bakal disebut dina urutan ieu: always_executed_hook, read_attr_hardware и baca_gps_string. Read_gps_string bakal ngeusian gps_string kalayan 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
}
Nyusun
Pindah ka folder sumber sareng:
make
Program bakal disusun kana folder ~/DeviceServers.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
JIVE
jive
Geus aya sababaraha alat dina database, hayu urang ayeuna nyieun urang Edit-> Jieun Server
Ayeuna hayu urang coba sambungkeun ka éta:
Henteu aya anu tiasa dianggo, mimitina urang kedah ngajalankeun program kami:
sudo ./NEO6M neo6m -v2
Kuring ukur bisa nyambung ka port com kalawan hak akar-A. v - tingkat logging.
Ayeuna urang tiasa nyambungkeun:
Palanggan
Dina grafik, ningali gambar pasti saé, tapi anjeun peryogi anu langkung mangpaat. Hayu urang nyerat klien anu bakal nyambung ka alat urang sareng nyandak bacaan tina é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);
}
}