
ምን ?
ይህ የተለያዩ መሳሪያዎችን እና ሶፍትዌሮችን ለማስተዳደር የሚያስችል ስርዓት ነው።
ታንጎ በአሁኑ ጊዜ 4 መድረኮችን ይደግፋል፦ Linux, Windows ኤንቲ፣ ሶላሪስ እና ኤችፒ-ኤክስ።
እዚህ ጋር ስራውን እንገልፃለን Linux(Ubuntu 18.04)
ለምን ዓላማ ነው?
ከተለያዩ መሳሪያዎች እና ሶፍትዌሮች ጋር ስራን ቀላል ያደርገዋል።
- በመረጃ ቋቱ ውስጥ እንዴት ውሂብ ማከማቸት እንደሚቻል ማሰብ አያስፈልግዎትም፣ አስቀድሞ ለእርስዎ ተከናውኗል።
- የምርጫ ዳሳሾችን ዘዴ መግለጽ ብቻ አስፈላጊ ነው።
- ሁሉንም ኮድዎን ወደ አንድ መደበኛ ያጣምራል።
የት እንደሚያገኙ?
ከምንጭ ኮዱ ማስኬድ ስላልቻልኩ ለስራ ዝግጁ የሆነ የታንጎቦክስ 9.3 ምስል ተጠቀምኩ።
መመሪያዎቹ ከጥቅሎች እንዴት እንደሚጫኑ ያብራራሉ።
ምንን ያካትታል?
- ቀጥታ — የTANGO ዳታቤዝን ለማየት እና ለማርትዕ ይጠቅማል።
- POGO — ለ TANGO መሣሪያ አገልጋዮች የኮድ ጀነሬተር።
- አስትሮ — ለ TANGO ስርዓት የሶፍትዌር አስተዳዳሪ።
በመጀመሪያዎቹ ሁለት ክፍሎች ላይ ብቻ ፍላጎት እናሳያለን።
የሚደገፉ የፕሮግራሚንግ ቋንቋዎች
- C
- በ C ++
- ጃቫ
- ጃቫስክሪፕት
- ዘንዶ
- ማቲብ
- LabVIEW
በፓይቶን እና በC++ ውስጥ ከእሱ ጋር ሠርቻለሁ። እዚህ፣ C++ እንደ ምሳሌ ጥቅም ላይ ይውላል።
አሁን መሳሪያውን ከታንጎ ጋር እንዴት ማገናኘት እንደሚቻል እና እንዴት እንደሚሰራው ወደ ገለጻው እንሸጋገር። ሰሌዳውን እንደ ምሳሌ እንጠቀማለን። ጂፒኤስ ኒዮ-6m-0-001:

በሥዕሉ ላይ እንደሚታየው፣ ሰሌዳውን ከፒሲው ጋር በUART CP2102 በኩል እናገናኛለን። ከፒሲው ጋር ሲገናኝ መሣሪያው ይታያል። /dev/ttyUSB[0-N], አብዛኛውን ጊዜ /dev/ttyUSB0.
POGO
አሁን እንሩጥ ፖጎእና ከቦርዱ ጋር ለመስራት የአጽም ኮድ እናመነጫለን።
pogo
ኮዱን አስቀድሜ ፈጥሬዋለሁ፣ እስቲ እንደገና እንፍጠር ፋይል->አዲስ.

የሚከተለውን እናገኛለን:

መሳሪያችን (ከዚህ በኋላ "መሳሪያ" የሚለው ቃል የሶፍትዌሩን ክፍል የሚያመለክት ነው) ባዶ ሲሆን ሁለት የቁጥጥር ትዕዛዞች አሉት፡ ሁኔታ & ሁናቴ.
በሚያስፈልጉት ባህሪያት መሞላት አለበት፡-
የመሣሪያ ንብረት — መሣሪያውን ለማስጀመር ወደ መሣሪያው የምናስተላልፋቸው ነባሪ እሴቶች፤ ለጂፒኤስ ቦርድ፣ የቦርዱን ስም በስርዓቱ ውስጥ ማስተላለፍ ያስፈልግዎታል። com="/dev/ttyUSB0" እና የCOM ወደብ ፍጥነት ባውድራድ=9600
ትዕዛዞች — መሣሪያችንን ለመቆጣጠር ትዕዛዞች፣ ክርክሮች እና የመመለሻ እሴት ሊሰጡ ይችላሉ።
- STATE - የአሁኑን ሁኔታ ይመልሳል፣ ከ ስቴትስ
- ሁኔታ - የአሁኑን ሁኔታ ይመልሳል፣ ይህ የሕብረቁምፊ ማሟያ ነው ለ STATE
- የጂፒኤስ አራይ - ተመላሾች አቅጣጫ መጠቆሚያ በቅጹ ውስጥ ያለ መስመር DevVarCharArray
ቀጥሎ፣ ከእሱ ጋር ሊነበቡ/ሊጻፉ/ሊጻፉ የሚችሉ የመሣሪያ ባህሪያት ተገልጸዋል።
የስኬላር ባህሪያት - ቀላል ባህሪያት (ቁምፊ፣ ሕብረቁምፊ፣ ረጅም፣ ወዘተ)
የስፔክትረም ባህሪያት - ባለ አንድ-ልኬት ድርድሮች
የምስል ባህሪያት - ባለ ሁለት ገጽታ ድርድሮች
ስቴትስ — መሣሪያችን የሚገኝበት ሁኔታ።
- ክፈት - መሣሪያው ክፍት ነው።
- ገጠመ - መሣሪያው ተዘግቷል።
- ሽንፈት - ስህተት።
- ON — ከመሳሪያው ውሂብ እንቀበላለን።
- ጠፍቷል - ከመሳሪያው ምንም ውሂብ የለም።
ባህሪን የመጨመር ምሳሌ የጂፒኤስ_ስትሪንግ:

የሕዝብ አስተያየት መስጫ ጊዜ የጂፒኤስ_ስትሪንግ እሴት በምን ያህል ጊዜ እንደሚዘመን የሚያሳይ ጊዜ በሚሊሰከንዶች (ሚሴንዶች)። የዝማኔው ጊዜ ካልተገለጸ፣ ባህሪው የሚዘመነው ሲጠየቅ ብቻ ነው።
ተከሰተ፡-

አሁን ኮዱን መፍጠር ያስፈልግዎታል ፋይል -> ፍጠር

በነባሪነት፣ Makefile አይፈጠርም፤ ለመጀመሪያ ጊዜ ለመፍጠር ሳጥኑ ላይ ምልክት ማድረግ ያስፈልግዎታል። ይህ የሚደረገው አዲስ ትውልድ ሲሰራ በእሱ ላይ የተደረጉ ማናቸውም ማስተካከያዎች እንዳይጠፉ ለማረጋገጥ ነው። አንዴ ከፈጠሩት እና ለፕሮጀክትዎ (የማጠናቀሪያ ቁልፎችን እና ተጨማሪ ፋይሎችን ጨምሮ) ካበጁት በኋላ ሊረሱት ይችላሉ።
አሁን ወደ ፕሮግራሚንግ እንሸጋገር። ፖጎ የሚከተለውን ፈጥሯል፡

በ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() ተግባር ለባህሪያቶቻችን ማህደረ ትውስታን ይመድባል፡ የጂፒኤስ_ስትሪንግ & የጂፒኤስ_አሬይግን ያ ምንም ለውጥ አያመጣም። እዚህ ላይ በጣም አስፈላጊው ነገር, እነዚህ አስተያየቶች ናቸው፡
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1በዚህ የአስተያየት ብሎክ ውስጥ ያለ ማንኛውም ነገር በፖጎ ውስጥ በሚቀጥሉት የኮድ እድሳት ውስጥ አይካተትም። ውጣ!በብሎኮች ውስጥ የሌለ ነገር ሁሉ ይሆናል! እነዚህ ፕሮግራሞችን በራሳችን ማስተካከል የምንችልባቸው እና የምንሰራባቸው ቦታዎች ናቸው።
አሁን ክፍሉ የያዘው ዋና ዋና ተግባራት ምንድን ናቸው? ኒኦ6ኤም:
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);የአንድን ባህሪ እሴት ለማንበብ ስንፈልግ የጂፒኤስ_ስትሪንግ, ተግባሮቹ በሚከተለው ቅደም ተከተል ይጠራሉ: ሁልጊዜ_የሚፈጸም_መንጠቆ, read_attr_hardware и read_gps_stringበ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ከኮም ወደብ ጋር መገናኘት የምችለው በፈቃዶች ብቻ ነው። ሥር-ኤ. 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ውጤቱን እንደ ትዕዛዝ ተመላሽ አግኝተናል፣ የሕብረቁምፊ ባህሪያትን እና የቁምፊዎች ድርድርን ወስደናል።
ማጣቀሻዎች
ይህንን ጽሑፍ የጻፍኩት ለራሴ ነው፣ ምክንያቱም ከተወሰነ ጊዜ በኋላ እንዴት እና ምን ማድረግ እንዳለብኝ መርሳት እጀምራለሁ።
የእርስዎን ትኩረት እናመሰግናለን.
ምንጭ: hab.com
