Kini usa ka sistema sa pagdumala sa lainlaing hardware ug software.
Ang TANGO karon nagsuporta sa 4 nga mga plataporma: Linux, Windows NT, Solaris ug HP-UX.
Dinhi among ihulagway ang pagtrabaho kauban ang Linux (Ubuntu 18.04)
Para sa unsa kini?
Gipasayon ββang pagtrabaho sa lainlaing kagamitan ug software.
Dili nimo kinahanglan nga maghunahuna kung giunsa ang pagtipig sa datos sa database, nahimo na kini alang kanimo.
Gikinahanglan lamang nga ihulagway ang mekanismo sa mga sensor sa botohan.
Gipakunhod ang tanan nimong code sa usa ka sumbanan.
Dili nako kini malansad gikan sa source code; Gigamit nako ang usa ka andam nga hinimo nga imahe sa TangoBox 9.3 aron magtrabaho.
Ang mga panudlo naghulagway kung giunsa ang pag-install gikan sa mga pakete.
Unsa ang naglangkob niini?
jive β gigamit sa pagtan-aw ug pag-edit sa TANGO database.
POGO β code generator para sa TANGO device servers.
Astor β program manager para sa TANGO system.
Kita interesado lamang sa unang duha ka mga sangkap.
Gisuportahan nga mga pinulongan sa programming
C
C ++
Java
JavaScript
Python
matlab
LabVview
Nagtrabaho ko niini sa python & c++. Dinhi ang C++ gamiton isip pananglitan.
Karon magpadayon kita sa usa ka paghulagway kung giunsa ang pagkonektar sa aparato sa TANGO ug kung giunsa kini pagtrabaho. Ang bayranan pagakuhaon ingong pananglitan GPS neo-6m-0-001:
Sama sa imong makita sa litrato, among gikonektar ang board sa PC pinaagi sa UART CP2102. Kung konektado sa usa ka PC, makita ang aparato /dev/ttyUSB[0-N], kasagaran /dev/ttyUSB0.
POGO
Karon atong ilunsad pogo, ug paghimo og skeleton code alang sa pagtrabaho uban sa among board.
pogo
Gibuhat na nako ang code, buhata na usab File-> Bag-o.
Atong makuha ang mosunod:
Ang among device (sa umaabot, pinaagi sa device among ipasabot ang software nga bahin) walay sulod ug adunay duha ka control commands: State & Kahimtang.
Kini kinahanglan nga puno sa gikinahanglan nga mga hiyas:
Property sa Device - mga default nga kantidad nga among gibalhin sa aparato aron masugdan kini; alang sa GPS board, kinahanglan nimo nga ibalhin ang ngalan sa board sa sistema com="/dev/ttyUSB0" ug com port speed baudrade=9600
Mga sugo β mga mando aron makontrol ang among aparato; mahimo silang hatagan mga argumento ug usa ka pagbalik nga kantidad.
ESTADO - mibalik sa kasamtangan nga kahimtang, gikan sa Mga Estado
STATUS - nagbalik sa kasamtangan nga kahimtang, kini ang komplemento sa string ESTADO
GPSArray - mibalik gps string sa porma DevVarCharArray
Sunod, itakda ang mga hiyas sa device nga mahimong basahon/isulat ngadto/gikan niini. Mga Kinaiya sa Scalar - yano nga mga kinaiya (char, string, taas, ug uban pa) Mga Hiyas sa Spectrum - usa ka dimensyon nga mga array Mga Hulagway sa Hulagway - duha-ka-dimensional nga mga han-ay
Mga Estado β ang estado diin nahimutang ang among aparato.
ABLI - ang aparato bukas.
SUOD NGA - ang aparato sirado.
PAKYAS - sayop.
ON - makadawat data gikan sa device.
OFF - walay data gikan sa device.
Pananglitan sa pagdugang sa usa ka hiyas gps_string:
Panahon sa pagboto oras sa ms, unsa kasubsob ang gps_string nga kantidad ma-update. Kung ang oras sa pag-update wala gitakda, ang hiyas ma-update lamang kung gihangyo.
Nahitabo:
Karon kinahanglan nimo nga makamugna ang code File-> Paghimo
Sa kasagaran, ang Makefile wala mamugna; sa unang higayon nga kinahanglan nimong susihon ang kahon aron mahimo kini. Gihimo kini aron ang mga pagbag-o nga gihimo niini dili mapapas sa panahon sa usa ka bag-ong henerasyon. Ang paghimo niini kausa ug gi-configure kini alang sa imong proyekto (pagrehistro sa mga yawe sa pagtipon, dugang nga mga file), mahimo nimong kalimtan kini.
Karon magpadayon kita sa pagprograma. pogo nga nakamugna sa mosunod alang kanamo:
Kita mahimong interesado sa NEO6M.cpp & NEO6M.h. Atong kuhaon ang usa ka pananglitan sa usa ka tigtukod sa klase:
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
}
Unsa ang naa ug unsa ang hinungdanon dinhi? Ang init_device() function naggahin ug memorya alang sa atong mga hiyas: gps_string & gps_array, apan dili kini importante. Ang labing importante nga butang dinhi, mao kini ang mga komento:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Ang tanan nga naa sa sulod niini nga bloke sa komentaryo dili iapil sa pogo sa mga sunod nga pagbag-o sa code palayo!. Ang tanan nga wala sa mga bloke mahimong! Kini ang mga lugar diin mahimo namon nga magprograma ug maghimo sa among kaugalingon nga mga pag-edit.
Karon unsa ang mga nag-unang gimbuhaton sa klase? NEO6M:
Kung gusto namong basahon ang attribute value gps_string, ang mga gimbuhaton tawgon sa mosunod nga han-ay: always_executed_hook, read_attr_hardware ΠΈ read_gps_string. Ang Read_gps_string mopuno sa gps_string sa kantidad.
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
}
Panagsama
Adto sa source folder ug:
make
Ang programa i-compile sa ~/DeviceServers folder.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
jive
jive
Naa nay pipila ka mga gamit sa database, buhata na nato ang atoa I-edit-> Paghimo og Server
Karon atong sulayan ang pagkonektar niini:
Walay bisan unsa nga molihok, una kinahanglan naton nga modagan ang among programa:
sudo ./NEO6M neo6m -v2
Makakonekta ra ko sa com port nga adunay mga katungod gamut-A. v - lebel sa pag-log.
Karon kita makakonektar:
Kustomer
Siyempre, ang pagtan-aw sa mga hulagway maayo sa mga graphic, apan kinahanglan nimo ang usa ka butang nga mas mapuslanon. Magsulat kita og kliyente nga magkonektar sa atong device ug mokuha og mga pagbasa gikan niini.
#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);
}
}
Gisulat nako ang artikulo alang sa akong kaugalingon, tungod kay pagkahuman sa usa ka panahon nagsugod ako sa pagkalimot kung giunsa ug unsa ang buhaton.