ืืื ืื ืื ?
ืืืื ืืขืจืืช ืื ืืืื ืืืืจื ืืชืืื ื ืฉืื ืื.
TANGO ืชืืืืช ืืืื ื-4 ืคืืืคืืจืืืช: Linux, Windows NT, Solaris ื-HP-UX.
ืืื ื ืชืืจ ืขืืืื ืขื ืืื ืืงืก (ืืืืื ืื 18.04)
ืืฉื ืื ืื?
ืืคืฉื ืขืืืื ืขื ืฆืืื ืืชืืื ืืช ืฉืื ืืช.
- ืืชื ืื ืฆืจืื ืืืฉืื ืืื ืืืืกื ื ืชืื ืื ืืืกื ืื ืชืื ืื, ืื ืืืจ ื ืขืฉื ืืฉืืืื.
- ืืฉ ืฆืืจื ืจืง ืืชืืจ ืืช ืืื ืื ืื ืขืืืจ ืืืืฉื ื ืกืงืจ.
- ืืฆืืฆื ืืช ืื ืืงืื ืฉืื ืืชืงื ืืื.
ืืืื ื ืืชื ืืืฉืื ืืืชื?
ืื ืืืืืชื ืืืคืขืื ืืืชื ืืงืื ืืืงืืจ; ืืฉืชืืฉืชื ืืชืืื ื ืืืื ื ืฉื TangoBox 9.3 ืืื ืืขืืื.
ืืืืจืืืช ืืชืืจืืช ืืืฆื ืืืชืงืื ืืืืืืืช.
ืืื ืื ืืืจืื?
- ื'ืืื - ืืฉืืฉ ืืฆืคืืื ืืขืจืืื ืฉื ืืกื ืื ืชืื ืื ืฉื TANGO.
- POGO - ืืืืื ืงืื ืขืืืจ ืฉืจืชื ืืืฉืืจื TANGO.
- ืืกืืืจ - ืื ืื ืชืืื ืืช ืขืืืจ ืืขืจืืช TANGO.
ื ืชืขื ืืื ืจืง ืืฉื ื ืืืจืืืืื ืืจืืฉืื ืื.
ืฉืคืืช ืชืื ืืช ื ืชืืืืช
- C
- C + +
- Java
- JavaScript
- ืคืืชืื
- ืืืื
- LabVIEW
ืขืืืชื ืขื ืื ื-python & c++. ืืื C++ ืืฉืืฉ ืืืืืื.
ืืขืช ื ืขืืืจ ืืชืืืืจ ืืืฆื ืืืืจ ืืช ืืืืฉืืจ ื-TANGO ืืืื ืืขืืื ืืืชื. ืืืืจื ืชืืืงื ืืืืืื GPS neo-6m-0-001:
ืืคื ืฉื ืืชื ืืจืืืช ืืชืืื ื, ืื ื ืืืืจืื ืืช ืืืื ืืืืฉื ืืืืฆืขืืช UART CP2102. ืืืฉืจ ืืืืืจ ืืืืฉื, ืืืชืงื ืืืคืืข /dev/ttyUSB[0-N], ืืืจื ืืื /dev/ttyUSB0.
POGO
ืขืืฉืื ืืืื ื ืชืืื ืคืื, ืืฆืืจ ืงืื ืฉืื ืืขืืืื ืขื ืืืื ืฉืื ื.
pogo
ืืืจ ืืฆืจืชื ืืช ืืงืื, ืืืื ื ืืฆืืจ ืืืชื ืฉืื ืงืืืฅ->ืืืฉ.
ืื ืื ื ืืงืืืื ืืช ืืืืจืื ืืืืื:
ืืืืฉืืจ ืฉืื ื (ืืขืชืื, ืืืืฉืืจ ื ืชืืืื ืืืืง ืืชืืื ื) ืจืืง ืืืฉ ืื ืฉืชื ืคืงืืืืช ืฉืืืื: ืืืื ื & ืืฆื.
ืืฉ ืืืื ืืืชื ืืชืืื ืืช ืืืจืืฉืืช:
ื ืืก ืืืฉืืจ - ืขืจืื ืืจืืจืช ืืืื ืฉืื ื ืืขืืืจืื ืืืืฉืืจ ืืื ืืืชืื ืืืชื; ืขืืืจ ืืื ื-GPS, ืขืืื ืืืขืืืจ ืืช ืฉื ืืืื ืืืขืจืืช com="/dev/ttyUSB0" ืืืืืจืืช ืืฆืืืช COM baudrade=9600
ืคืงืืืืช - ืคืงืืืืช ืืฉืืืื ืืืืฉืืจ ืฉืื ื; ื ืืชื ืืชืช ืืื ืืจืืืื ืืื ืืขืจื ืืืืจื.
- ืืืื ื - ืืืืืจ ืืช ืืืฆื ืื ืืืื, ื ืืืจืืช
- ืกืึธืืึผืก - ืืืืืจื ืืช ืืกืืืืก ืื ืืืื, ืื ืืืฉืืื ืฉื ืืืืจืืืช ืืืื ื
- GPSArray - ืืืืจืืช GPS ืืืจืืืช ืืืืคืก DevVarCharArray
ืืืืจ ืืื, ืืืืจ ืืช ืชืืื ืืช ืืืืฉืืจ ืฉื ืืชื ืืงืจืื/ืืืชืื ืืืื/ืืื ื.
ืชืืื ืืช ืกืงืืจืืืช - ืชืืื ืืช ืคืฉืืืืช (char, ืืืจืืืช, ืืจืืื ืืื')
ืชืืื ืืช ืกืคืงืืจืื - ืืขืจืืื ืื ืืืืืืื
ืชืืื ืืช ืชืืื ื - ืืขืจืืื ืื ืืืืืืื
ืืืจืืช - ืืืฆื ืฉืื ื ืืฆื ืืืืฉืืจ ืฉืื ื.
- ืึดืคึฐืชืึนืึท - ืืืืฉืืจ ืคืชืื.
- ืืกืืืจ - ืืืืฉืืจ ืกืืืจ.
- ืืฉื - ืฉืืืื.
- ON โ ืงืืืช ื ืชืื ืื ืืืืืฉืืจ.
- ืืืื - ืืื ื ืชืื ืื ืืืืืฉืืจ.
ืืืืื ืืืืกืคืช ืชืืื ื gps_string:
ืชืงืืคืช ืืงืืคืืืช ืืื ื-ms, ืืืืื ืชืืืจืืช ืขืจื ื-gps_string ืืชืขืืื. ืื ืื ืฆืืื ืืื ืืขืืืื, ืืชืืื ื ืชืขืืืื ืจืง ืืคื ืืงืฉื.
ืืชืืจืจ:
ืขืืฉืื ืืชื ืฆืจืื ืืืฆืืจ ืืช ืืงืื ืงืืืฅ->ืฆืืจ
ืืืจืืจืช ืืืื, ื-Makefile ืื ื ืืฆืจ; ืืคืขื ืืจืืฉืื ื ืืชื ืฆืจืื ืืกืื ืืช ืืชืืื ืืื ืืืฆืืจ ืืืชื. ืื ื ืขืฉื ืืื ืฉืืฉืื ืืืื ืฉื ืขืฉื ืื ืื ืืืืืงื ืืืืื ืืืจ ืืืฉ. ืืืืจ ืฉืืฆืจืช ืืืชื ืคืขื ืืืช ืืืืืจืช ืืืชื ืขืืืจ ืืคืจืืืงื ืฉืื (ืจืืฉืื ืืคืชืืืช ืงืืืคืืืฆืื, ืงืืฆืื ื ืืกืคืื), ืืชื ืืืื ืืฉืืื ืืื.
ืืขืช ื ืขืืืจ ืืชืื ืืช. pogo ืขื ืืฆืจ ืขืืืจื ื ืืช ืืืืจืื ืืืืื:
ื ืชืขื ืืื ื-NEO6M.cpp & NEO6M.h. ื ืืงื ืืืืื ืฉื ืื ืื ืืืืงื:
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
}
ืื ืืฉ ืืื ืืฉืื ืืื? ืืคืื ืงืฆืื init_device() ืืงืฆื ืืืืจืื ืขืืืจ ืืชืืื ืืช ืฉืื ื: gps_string & gps_array, ืืื ืื ืื ืืฉืื. ืืืืจ ืืื ืืฉืื ืืื, ืืื ืืืขืจืืช:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
ืื ืื ืฉื ืืฆื ืืชืื ืืืืง ืืืขืจืืช ืืื ืื ืืืืื ื-pogo ืืืืื ืืืืืฉื ืืงืื ืืืืื ืืื!. ืื ืื ืฉืื ื ืืฆื ืืืืืงืื ืืืื! ืืื ืืืงืืืืช ืฉืืื ืื ืื ื ืืืืืื ืืชืื ืช ืืืืฆืข ืขืจืืืืช ืืฉืื ื.
ืขืืฉืื ืืื ืืคืื ืงืฆืืืช ืืขืืงืจืืืช ืฉืืืืืงื ืืืืื? 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);
ืืืฉืจ ืื ื ืจืืฆืื ืืงืจืื ืืช ืขืจื ืืชืืื ื gps_string, ืืคืื ืงืฆืืืช ืืืงืจืื ืืกืืจ ืืื: ืืืง_ืืืืฆืข_ืชืืื, read_attr_hardware ะธ ืืืจืืืช_gps_read. Read_gps_string ืืืื ืืช ื-gps_string ืืขืจื.
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
}
ืงืืืคืืืฆืื
ืขืืืจ ืื ืชืืงืืืช ืืืงืืจ ื:
make
ืืชืืื ืืช ืชืืจืื ืืชืื ืืชืืงืื ~/DeviceServers.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
ื'ืืื
jive
ืืฉ ืืืจ ืืื ืืืฉืืจืื ืืืกื ืื ืชืื ืื, ืืืื ื ืืฆืืจ ืขืืฉืื ืืช ืฉืื ื ืขืจืืื->ืฆืืจ ืฉืจืช
ืขืืฉืื ื ื ืกื ืืืชืืืจ ืืืื:
ืฉืื ืืืจ ืื ืืขืืื, ืจืืฉืืช ืขืืื ื ืืืคืขืื ืืช ืืชืืื ืืช ืฉืื ื:
sudo ./NEO6M neo6m -v2
ืื ื ืืืื ืืืชืืืจ ืจืง ืืืฆืืืช ื-com ืขื ืืืืืืช ืฉืืจืฉ-ื. v - ืจืืช ืจืืฉืื.
ืืขืช ื ืืื ืืืชืืืจ:
ืืงืื
ืืืจืคืืงื, ืืกืชืืืืช ืืชืืื ืืช ืืื ืืืืื ืืืื, ืืื ืืชื ืฆืจืื ืืฉืื ืฉืืืืฉื ืืืชืจ. ืืืื ื ืืชืื ืืงืื ืฉืืชืืืจ ืืืืฉืืจ ืฉืื ื ืืืืงื ืืื ื ืงืจืืืืช.
#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);
}
}
ืืืฆื ืืืจืืื:
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++
ืชืืฆืื:
tango-cs@tangobox:~/workspace/c$ ./a.out
$GPRMC,,V,,,,,,,,,,N*53
$GPRMC,,V,,,,,,,,,,N*53
$GPRMC,,V,,,,,,,,,,N*53
ืงืืืื ื ืืช ืืชืืฆืื ืืืืืจืช ืคืงืืื, ืืืงืืช ืืช ืืชืืื ืืช ืฉื ืืืจืืืช ืืืขืจื ืฉื ืชืืืื.
ืชืืืืจ
ืืชืืชื ืืช ืืืืืจ ืืขืฆืื, ืื ืืืืจ ืืื ืื ืื ื ืืชืืื ืืฉืืื ืืื ืืื ืืขืฉืืช.
ืชืืื ืขื ืชืฉืืืช ืืื ืฉืื.
ืืงืืจ: www.habr.com