تانگو ڪنٽرول

تانگو ڪنٽرول

ڇا ٽانگ?

اهو مختلف هارڊويئر ۽ سافٽ ويئر کي منظم ڪرڻ لاء هڪ نظام آهي.
TANGO هن وقت 4 پليٽ فارمن کي سپورٽ ڪري ٿو: لينڪس، ونڊوز NT، سولاريس ۽ HP-UX.
هتي اسان لينڪس سان ڪم ڪرڻ جي وضاحت ڪنداسين (Ubuntu 18.04)

ڇا لاءِ آهي؟

مختلف سامان ۽ سافٽ ويئر سان ڪم کي آسان بڻائي ٿو.

  • توهان کي اهو سوچڻ جي ضرورت ناهي ته ڊيٽابيس ۾ ڊيٽا ڪيئن ذخيرو ڪجي، اهو توهان لاءِ اڳ ۾ ئي ٿي چڪو آهي.
  • اهو صرف پولنگ sensors لاء ميڪانيزم بيان ڪرڻ ضروري آهي.
  • توھان جي سڀني ڪوڊ کي ھڪڙي معيار تائين گھٽائي ٿو.

حاصل ڪرڻ لاء

مان ان کي سورس ڪوڊ مان لانچ نه ڪري سگھيس؛ مون ڪم ڪرڻ لاءِ TangoBox 9.3 جي تيار ٿيل تصوير استعمال ڪئي.
هدايتون بيان ڪن ٿيون ته پيڪيجز مان ڪيئن انسٽال ڪجي.

اهو ڇا تي مشتمل آهي؟

  • جيو - TANGO ڊيٽابيس کي ڏسڻ ۽ ايڊٽ ڪرڻ لاءِ استعمال ڪيو ويو.
  • پوگو - TANGO ڊوائيس سرورز لاء ڪوڊ جنريٽر.
  • Astor - TANGO سسٽم لاءِ پروگرام مئنيجر.

اسان کي صرف پهرين ٻن حصن ۾ دلچسپي وٺندي.

سپورٽ پروگرامنگ ٻوليون

  • C
  • C ++
  • جاوا
  • JavaScript
  • Python
  • مرڪب
  • LabVIEWVIEW

مون ان سان گڏ پيٿون ۽ سي ++ ۾ ڪم ڪيو. هتي C++ مثال طور استعمال ڪيو ويندو.

ھاڻي اچو ته تفصيل ڏانھن وڃو ته ڊوائيس کي TANGO سان ڪيئن ڳنڍجي ۽ ان سان ڪيئن ڪم ڪجي. فيس کي مثال طور ورتو ويندو GPS neo-6m-0-001:

تانگو ڪنٽرول

جئين توهان تصوير ۾ ڏسي سگهو ٿا، اسان بورڊ کي PC سان UART CP2102 ذريعي ڳنڍيندا آهيون. جڏهن هڪ PC سان ڳنڍيل آهي، ڊوائيس ظاهر ٿئي ٿو /dev/ttyUSB[0-N]عام طور تي /dev/ttyUSB0.

پوگو

هاڻي اچو ته لانچ ڪريون پوگو، ۽ اسان جي بورڊ سان ڪم ڪرڻ لاءِ سڪل ڪوڊ ٺاهيو.

pogo

تانگو ڪنٽرول

مون پهريان ئي ڪوڊ ٺاهي ڇڏيو آهي، اچو ته ان کي ٻيهر ٺاهيو فائل-> نئون.

تانگو ڪنٽرول

اسان هيٺ ڏنل حاصل ڪريون ٿا:

تانگو ڪنٽرول

اسان جو ڊوائيس (مستقبل ۾، ڊوائيس ذريعي اسان جو مطلب آهي سافٽ ويئر حصو) خالي آهي ۽ ٻه ڪنٽرول حڪم آهن: رياست & اسٽيٽس.

اهو ضروري خاصيتن سان ڀريو وڃي ٿو:

ڊوائيس ملڪيت - ڊفالٽ قدر جيڪي اسان ڊوائيس ڏانهن منتقل ڪريون ٿا ان کي شروع ڪرڻ لاءِ؛ GPS بورڊ لاءِ، توهان کي سسٽم ۾ بورڊ جو نالو منتقل ڪرڻ جي ضرورت آهي com="/dev/ttyUSB0" ۽ com پورٽ جي رفتار باڊراڊ = 9600

حڪم - اسان جي ڊوائيس کي ڪنٽرول ڪرڻ لاء حڪم؛ انهن کي دليل ۽ واپسي جي قيمت ڏني وڃي ٿي.

  • رياست - موٽائي ٿو موجوده حالت، مان رياست
  • اسٽٽس - موجوده حالت کي واپس ڏئي ٿو، هي اسٽرنگ جي مڪمل آهي رياست
  • GSArray - واپسي ايس فارم ۾ تار DevVarCharArray

اڳيون، ڊيوائس جون خاصيتون سيٽ ڪريو جيڪي پڙهي / لکي سگهجن ٿيون / ان کان.
اسڪالر خاصيتون - سادي خاصيتون (چار، تار، ڊگهو، وغيره)
اسپيڪٽرم خاصيتون - هڪ-dimensional arrays
تصوير جون خاصيتون - ٻه-dimensional arrays

رياست - رياست جنهن ۾ اسان جو ڊوائيس واقع آهي.

  • کليل - ڊوائيس کليل آهي.
  • بند - ڊوائيس بند آهي.
  • ناڪام - غلطي.
  • 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

تبصرو شامل ڪريو