لم أتمكن من تشغيله من الكود المصدري؛ لقد استخدمت صورة جاهزة من TangoBox 9.3 للعمل.
تصف التعليمات كيفية التثبيت من الحزم.
مما تتكون؟
جيف - يستخدم لعرض وتحرير قاعدة بيانات TANGO.
بوجو - مولد الأكواد لخوادم أجهزة TANGO.
أستور — مدير برنامج لنظام التانجو.
سنكون مهتمين فقط بالمكونين الأولين.
لغات البرمجة المدعومة
C
C + +
جافا
جافا سكريبت
بايثون
ماتلاب
ابفيف
لقد عملت معها في بايثون وC++. هنا سيتم استخدام C++ كمثال.
ننتقل الآن إلى وصف كيفية توصيل الجهاز بـ TANGO وكيفية العمل معه. سيتم أخذ الرسوم كمثال نظام تحديد المواقع الجديد-6m-0-001:
كما ترون في الصورة، نقوم بتوصيل اللوحة بالكمبيوتر عبر UART CP2102. عند توصيله بجهاز الكمبيوتر، يظهر الجهاز /ديف/ttyUSB[0-N]، عادةً /dev/ttyUSB0.
بوجو
الآن دعونا نركض بوجو، وإنشاء كود هيكلي للعمل مع مجلسنا.
pogo
لقد قمت بالفعل بإنشاء الكود، فلنقم بإنشائه مرة أخرى ملف->جديد.
نحصل على ما يلي:
جهازنا (في المستقبل، سنعني بالجهاز جزء البرنامج) فارغ ويحتوي على أمرين للتحكم: الولايه او المحافظه & الحالة.
يجب أن تكون مليئة بالسمات اللازمة:
خاصية الجهاز - القيم الافتراضية التي ننقلها إلى الجهاز لتهيئته، بالنسبة للوحة GPS، تحتاج إلى نقل اسم اللوحة في النظام كوم = "/ديف/ttyUSB0" وسرعة منفذ كوم بودراد=9600
أوامر - أوامر للتحكم في أجهزتنا، ويمكن إعطاؤها وسيطات وقيمة إرجاع.
STATE - إرجاع الحالة الحالية، من المحافظة
الوضع - يُرجع الحالة الحالية، وهذا هو مكمل للسلسلة STATE
GPSArray - عائدات نظام تحديد المواقع سلسلة في النموذج DevVarCharArray
بعد ذلك، قم بتعيين سمات الجهاز التي يمكن قراءتها/كتابتها إليه/ منه. السمات العددية - سمات بسيطة (شار، سلسلة، طويلة، الخ) سمات الطيف - المصفوفات أحادية البعد سمات الصورة - صفائف ثنائية الأبعاد
المحافظة — الحالة التي يقع فيها جهازنا.
فتح - الجهاز مفتوح .
إغلاق - الجهاز مغلق .
فشل - خطأ.
ON - استقبال البيانات من الجهاز.
اضافي - لا توجد بيانات من الجهاز.
مثال على إضافة سمة gps_string:
فترة الاقتراع الوقت بالمللي ثانية، كم مرة سيتم تحديث قيمة gps_string. إذا لم يتم تحديد وقت التحديث، فسيتم تحديث السمة فقط عند الطلب.
حدث:
الآن أنت بحاجة إلى إنشاء الكود ملف->إنشاء
بشكل افتراضي، لا يتم إنشاء ملف 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() بتخصيص الذاكرة لسماتنا: gps_string & gps_array، ولكن ليس من المهم. الشيء الأكثر أهمية هنا، وهذه هي التعليقات:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
لن يتم تضمين كل ما هو موجود داخل كتلة التعليق هذه في pogo أثناء عمليات تجديد التعليمات البرمجية اللاحقة الابتعاد!. كل ما ليس في الكتل سيكون! هذه هي الأماكن التي يمكننا فيها البرمجة وإجراء التعديلات الخاصة بنا.
الآن ما هي الوظائف الرئيسية التي يحتوي عليها الفصل؟ نيو6M:
عندما نريد قراءة قيمة السمة gps_string، سيتم استدعاء الوظائف بالترتيب التالي: Always_executed_hook, 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
لا يمكنني الاتصال بمنفذ 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);
}
}