یہ مختلف ہارڈ ویئر اور سافٹ ویئر کے انتظام کے لیے ایک نظام ہے۔
TANGO فی الحال 4 پلیٹ فارمز کو سپورٹ کرتا ہے: Linux، Windows NT، Solaris اور HP-UX۔
یہاں ہم لینکس کے ساتھ کام کرنے کی وضاحت کریں گے (اوبنٹو 18.04)
یہ کس لیے ہے؟
مختلف آلات اور سافٹ ویئر کے ساتھ کام کو آسان بناتا ہے۔
آپ کو یہ سوچنے کی ضرورت نہیں ہے کہ ڈیٹا بیس میں ڈیٹا کیسے ذخیرہ کیا جائے، یہ آپ کے لیے پہلے ہی ہو چکا ہے۔
میں اسے سورس کوڈ سے لانچ نہیں کر سکا؛ میں نے کام کرنے کے لیے TangoBox 9.3 کی ریڈی میڈ تصویر استعمال کی۔
ہدایات پیکیجز سے انسٹال کرنے کا طریقہ بیان کرتی ہیں۔
یہ کس چیز پر مشتمل ہے؟
جیوی - TANGO ڈیٹا بیس کو دیکھنے اور اس میں ترمیم کرنے کے لیے استعمال کیا جاتا ہے۔
پوگو - ٹینگو ڈیوائس سرورز کے لیے کوڈ جنریٹر۔
استور - ٹینگو سسٹم کے لیے پروگرام مینیجر۔
ہم صرف پہلے دو اجزاء میں دلچسپی لیں گے۔
معاون پروگرامنگ زبانیں۔
C
C ++
اعلی درجے کا Java
جاوا سکرپٹ
ازگر
متلب
LabVIEW
میں نے اس کے ساتھ python اور c++ میں کام کیا۔ یہاں C++ کو بطور مثال استعمال کیا جائے گا۔
اب آئیے اس کی تفصیل کی طرف بڑھتے ہیں کہ ڈیوائس کو TANGO سے کیسے جوڑنا ہے اور اس کے ساتھ کیسے کام کرنا ہے۔ فیس کو بطور مثال لیا جائے گا۔ GPS neo-6m-0-001:
جیسا کہ آپ تصویر میں دیکھ سکتے ہیں، ہم UART CP2102 کے ذریعے بورڈ کو PC سے جوڑتے ہیں۔ پی سی سے منسلک ہونے پر، آلہ ظاہر ہوتا ہے۔ /dev/ttyUSB[0-N]عام طور پر /dev/ttyUSB0۔
پوگو
اب لانچ کرتے ہیں۔ پوگواور ہمارے بورڈ کے ساتھ کام کرنے کے لیے سکیلیٹن کوڈ تیار کریں۔
pogo
میں پہلے ہی کوڈ بنا چکا ہوں، آئیے اسے دوبارہ بناتے ہیں۔ فائل-> نیا.
ہم مندرجہ ذیل حاصل کرتے ہیں:
ہمارا آلہ (مستقبل میں، آلہ سے ہمارا مطلب سافٹ ویئر کا حصہ ہوگا) خالی ہے اور اس میں دو کنٹرول کمانڈز ہیں: حالت & درجہ.
یہ ضروری صفات سے بھرا ہوا ہونا چاہئے:
ڈیوائس پراپرٹی - پہلے سے طے شدہ اقدار جو ہم آلہ کو شروع کرنے کے لیے منتقل کرتے ہیں؛ GPS بورڈ کے لیے، آپ کو سسٹم میں بورڈ کا نام منتقل کرنا ہوگا۔ com="/dev/ttyUSB0" اور com پورٹ کی رفتار baudrade = 9600
حکم دیتا ہے - ہمارے آلے کو کنٹرول کرنے کے لیے کمانڈ؛ انہیں دلائل اور واپسی کی قیمت دی جا سکتی ہے۔
حالت - موجودہ حالت واپس کرتا ہے، سے امریکہ
اسٹیٹس - موجودہ حیثیت لوٹاتا ہے، یہ اسٹرنگ کی تکمیل ہے۔ حالت
GSArray --.واپس n GPS فارم میں تار DevVarCharArray
اگلا، ڈیوائس کی خصوصیات کو سیٹ کریں جو اس سے پڑھا/لکھا جا سکتا ہے۔ اسکیلر اوصاف - سادہ صفات (چار، تار، لمبی، وغیرہ) سپیکٹرم اوصاف - ایک جہتی صفیں۔ تصویری خصوصیات - دو جہتی صفیں۔
امریکہ - وہ حالت جس میں ہمارا آلہ واقع ہے۔
OPEN - آلہ کھلا ہے۔
بند - آلہ بند ہے۔
فیل --.غلطی
ON - ڈیوائس سے ڈیٹا وصول کریں۔
بند - ڈیوائس سے کوئی ڈیٹا نہیں ہے۔
ایک وصف شامل کرنے کی مثال gps_string:
پولنگ کا دورانیہ ms میں وقت، کتنی بار 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
اس تبصرے کے بلاک کے اندر موجود ہر چیز کو بعد کے کوڈ کی تخلیق نو کے دوران پوگو میں شامل نہیں کیا جائے گا۔ دور ہو جاؤ!. وہ سب کچھ ہوگا جو بلاکس میں نہیں ہے! یہ وہ جگہیں ہیں جہاں ہم پروگرام کر سکتے ہیں اور اپنی ترمیم کر سکتے ہیں۔
جب ہم انتساب کی قدر کو پڑھنا چاہتے ہیں۔ gps_string، افعال کو درج ذیل ترتیب میں بلایا جائے گا: ہمیشہ_جاری_ہوک, 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);
}
}