ٹینگو کنٹرولز

ٹینگو کنٹرولز

کیا ہے ٹینگو?

یہ مختلف ہارڈ ویئر اور سافٹ ویئر کے انتظام کے لیے ایک نظام ہے۔
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

اس تبصرے کے بلاک کے اندر موجود ہر چیز کو بعد کے کوڈ کی تخلیق نو کے دوران پوگو میں شامل نہیں کیا جائے گا۔ دور ہو جاؤ!. وہ سب کچھ ہوگا جو بلاکس میں نہیں ہے! یہ وہ جگہیں ہیں جہاں ہم پروگرام کر سکتے ہیں اور اپنی ترمیم کر سکتے ہیں۔

اب کلاس میں کون سے اہم کام ہیں؟ 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 и 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);
    }
}

مرتب کرنے کا طریقہ:

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

نیا تبصرہ شامل کریں