Mae'n system ar gyfer rheoli caledwedd a meddalwedd amrywiol.
Ar hyn o bryd mae TANGO yn cefnogi 4 platfform: Linux, Windows NT, Solaris a HP-UX.
Yma byddwn yn disgrifio gweithio gyda Linux (Ubuntu 18.04)
Beth yw ei ddiben?
Symleiddio gwaith gydag offer a meddalwedd amrywiol.
Nid oes angen i chi feddwl am sut i storio data yn y gronfa ddata, mae eisoes wedi'i wneud i chi.
Nid oes ond angen disgrifio'r mecanwaith ar gyfer synwyryddion pleidleisio.
Ni allwn ei lansio o'r cod ffynhonnell; defnyddiais ddelwedd barod o TangoBox 9.3 i weithio.
Mae'r cyfarwyddiadau yn disgrifio sut i osod o becynnau.
Beth mae'n ei gynnwys?
JIVE β yn cael ei ddefnyddio i weld a golygu cronfa ddata TANGO.
POGO - generadur cod ar gyfer gweinyddwyr dyfais TANGO.
Astor β rheolwr rhaglen ar gyfer y system TANGO.
Dim ond yn y ddwy gydran gyntaf y bydd gennym ddiddordeb.
Ieithoedd rhaglennu Γ’ chymorth
C
C + +
Java
Javascript
Python
matlab
LabVIEW
Gweithiais gydag ef yn python & c++. Yma bydd C++ yn cael ei ddefnyddio fel enghraifft.
Nawr, gadewch i ni symud ymlaen at ddisgrifiad o sut i gysylltu'r ddyfais Γ’ TANGO a sut i weithio gydag ef. Cymerir y ffi fel enghraifft GPS neo-6m-0-001:
Fel y gwelwch yn y llun, rydym yn cysylltu'r bwrdd Γ’'r PC trwy UART CP2102. Pan fydd wedi'i gysylltu Γ’ PC, mae'r ddyfais yn ymddangos /dev/ttyUSB[0-N], fel arfer /dev/ttyUSB0.
POGO
Nawr gadewch i ni lansio pogo, a chynhyrchu cod sgerbwd ar gyfer gweithio gyda'n bwrdd.
pogo
Rwyf eisoes wedi creu'r cod, gadewch i ni ei greu eto Ffeil-> Newydd.
Rydym yn cael y canlynol:
Mae ein dyfais (yn y dyfodol, yn Γ΄l dyfais byddwn yn golygu'r rhan meddalwedd) yn wag ac mae ganddi ddau orchymyn rheoli: wladwriaeth & Statws.
Rhaid ei lenwi Γ’'r nodweddion angenrheidiol:
Eiddo Dyfais - gwerthoedd diofyn y byddwn yn eu trosglwyddo i'r ddyfais i'w gychwyn; ar gyfer y bwrdd GPS, mae angen i chi drosglwyddo enw'r bwrdd yn y system com="/dev/ttyUSB0" a chyflymder porthladd com bawd = 9600
Gorchmynion β gorchmynion i reoli ein dyfais; gellir rhoi dadleuon a gwerth dychwelyd iddynt.
DATGANIAD β yn dychwelyd y cyflwr presennol, o Gwladwriaethau
STATWS - yn dychwelyd y statws presennol, dyma gyflenwad y llinyn i DATGANIAD
Array GPS - yn dychwelyd meddygon teulu llinyn yn y ffurf DevVarCharArray
Nesaf, gosodwch y priodoleddau dyfais y gellir eu darllen / ysgrifennu ato / ohono. Nodweddion Scalar β priodoleddau syml (torgoch, llinyn, hir, ac ati) Nodweddion Sbectrwm - araeau un-dimensiwn Nodweddion Delwedd - araeau dau ddimensiwn
Gwladwriaethau - y cyflwr y mae ein dyfais wedi'i lleoli ynddo.
AGORED - mae'r ddyfais ar agor.
GAU - mae'r ddyfais ar gau.
METHU - gwall.
ON - derbyn data o'r ddyfais.
OFF - dim data o'r ddyfais.
Enghraifft o ychwanegu priodoledd gps_llinyn:
Cyfnod pleidleisio amser yn ms, pa mor aml y bydd y gwerth gps_string yn cael ei ddiweddaru. Os na nodir yr amser diweddaru, dim ond ar gais y bydd y nodwedd yn cael ei diweddaru.
Digwyddodd:
Nawr mae angen i chi gynhyrchu'r cod Ffeil-> Cynhyrchu
Yn ddiofyn, nid yw'r Makefile yn cael ei gynhyrchu; y tro cyntaf mae angen i chi wirio'r blwch i'w greu. Gwneir hyn fel nad yw'r newidiadau a wneir iddo yn cael eu dileu yn ystod cenhedlaeth newydd. Ar Γ΄l ei greu unwaith a'i ffurfweddu ar gyfer eich prosiect (cofrestrwch allweddi llunio, ffeiliau ychwanegol), gallwch anghofio amdano.
Nawr, gadewch i ni symud ymlaen at raglennu. pogo gyda'r canlynol wedi'u cynhyrchu i ni:
Bydd gennym ddiddordeb yn NEO6M.cpp & NEO6M.h. Gadewch i ni gymryd enghraifft o adeiladwr dosbarth:
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
}
Beth sydd yna a beth sy'n bwysig yma? Mae'r ffwythiant init_device() yn dyrannu cof ar gyfer ein priodoleddau: gps_llinyn & gps_array, ond nid yw'n bwysig. Y peth pwysicaf yma, dyma'r sylwadau:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
Ni fydd popeth sydd y tu mewn i'r bloc sylwadau hwn yn cael ei gynnwys mewn pogo yn ystod adfywiad cod dilynol symud i ffwrdd!. Bydd popeth nad yw mewn blociau! Dyma'r mannau lle gallwn raglennu a gwneud ein golygiadau ein hunain.
Nawr beth yw prif swyddogaethau'r dosbarth? NEO6M:
Pan fyddwn am ddarllen y gwerth priodoledd gps_llinyn, bydd y swyddogaethau'n cael eu galw yn y drefn ganlynol: bob amser_gweithredu_bachyn, read_attr_hardware ΠΈ darllen_gps_llinyn. Bydd Read_gps_string yn llenwi gps_string gyda'r gwerth.
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
}
Llunio
Ewch i'r ffolder ffynhonnell a:
make
Bydd y rhaglen yn cael ei chrynhoi yn y ffolder ~/DeviceServers.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
JIVE
jive
Mae rhai dyfeisiau yn y gronfa ddata eisoes, gadewch i ni nawr greu ein rhai ni Golygu-> Creu Gweinydd
Nawr, gadewch i ni geisio cysylltu ag ef:
Ni fydd unrhyw beth yn gweithio, yn gyntaf mae angen i ni redeg ein rhaglen:
sudo ./NEO6M neo6m -v2
Dim ond gyda hawliau y gallaf gysylltu Γ’'r porthladd com gwraidd-A. v - lefel logio.
Nawr gallwn gysylltu:
Cwsmer
Mewn graffeg, mae edrych ar luniau yn sicr yn dda, ond mae angen rhywbeth mwy defnyddiol arnoch chi. Gadewch i ni ysgrifennu cleient a fydd yn cysylltu Γ’'n dyfais ac yn cymryd darlleniadau ohoni.
#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);
}
}