Tango ထိန်းချုပ်မှုများ

Tango ထိန်းချုပ်မှုများ

အဘယျသို့ Tango?

၎င်းသည် အမျိုးမျိုးသော ဟာ့ဒ်ဝဲနှင့် ဆော့ဖ်ဝဲလ်များကို စီမံခန့်ခွဲရန် စနစ်တစ်ခုဖြစ်သည်။
TANGO သည် လက်ရှိတွင် Linux၊ Windows NT၊ Solaris နှင့် HP-UX ပလပ်ဖောင်း 4 ခုကို ပံ့ပိုးထားသည်။
ဤနေရာတွင် ကျွန်ုပ်တို့သည် Linux (Ubuntu 18.04) ဖြင့် အလုပ်လုပ်ပုံကို ဖော်ပြပါမည်။

ဘာအတွက်လဲ

အမျိုးမျိုးသော စက်ကိရိယာများနှင့် ဆော့ဖ်ဝဲလ်များဖြင့် လုပ်ဆောင်မှုကို ရိုးရှင်းစေသည်။

  • ဒေတာဘေ့စ်တွင် ဒေတာကို မည်သို့သိမ်းဆည်းရမည်ကို သင်စဉ်းစားရန် မလိုအပ်ပါ၊ ၎င်းသည် သင့်အတွက် ပြီးသွားပြီဖြစ်သည်။
  • မဲရုံများအတွက် အာရုံခံကိရိယာများ၏ ယန္တရားကို ဖော်ပြရန်သာ လိုအပ်ပါသည်။
  • သင့်ကုဒ်အားလုံးကို စံတစ်ခုအဖြစ် လျှော့ချသည်။

ငါအဘယ်မှာရနိုင်မလဲ?

အရင်းအမြစ်ကုဒ်မှ စတင်၍မရပါ၊ အလုပ်လုပ်ရန် TangoBox 9.3 ၏ အဆင်သင့်လုပ်ထားသောပုံကို အသုံးပြုခဲ့သည်။
ညွှန်ကြားချက်များသည် ပက်ကေ့ဂျ်များမှ တပ်ဆင်နည်းကို ဖော်ပြသည်။

၎င်းတွင် အဘယ်အရာပါဝင်သနည်း။

  • jive - TANGO ဒေတာဘေ့စ်ကို ကြည့်ရှု တည်းဖြတ်ရန် အသုံးပြုသည်။
  • POGO - TANGO စက်ပစ္စည်းဆာဗာများအတွက် ကုဒ်မီးစက်။
  • Astor - TANGO စနစ်အတွက် ပရိုဂရမ်မန်နေဂျာ။

ပထမ အစိတ်အပိုင်းနှစ်ခုကိုသာ စိတ်ဝင်စားပါမည်။

ပရိုဂရမ်းမင်းဘာသာစကားများကို ပံ့ပိုးထားသည်။

  • C
  • C ++
  • ဂျာဗား
  • JavaScript ကို
  • Python ကို
  • matlab
  • LabVIEW

ကျွန်တော် python & c++ နဲ့ အလုပ်လုပ်ပါတယ်။ ဤနေရာတွင် C++ ကို နမူနာအဖြစ် အသုံးပြုပါမည်။

ယခု TANGO သို့ စက်ပစ္စည်းကို ချိတ်ဆက်နည်းနှင့် ၎င်းနှင့် မည်သို့အလုပ်လုပ်ပုံအကြောင်း ဖော်ပြချက်တစ်ခုသို့ သွားကြပါစို့။ အခကြေးငွေကို နမူနာအဖြစ် ယူပါမည်။ GPS neo-6m-0-001:

Tango ထိန်းချုပ်မှုများ

ပုံတွင်မြင်ရသည့်အတိုင်း UART CP2102 မှတစ်ဆင့် ဘုတ်အား PC သို့ ချိတ်ဆက်ပါသည်။ PC နှင့်ချိတ်ဆက်သောအခါ၊ စက်ပစ္စည်းပေါ်လာသည်။ /dev/ttyUSB[0-N]များသောအားဖြင့် /dev/ttyUSB0။

POGO

ကဲ စလိုက်ကြရအောင် တော့ Pogoနှင့် ကျွန်ုပ်တို့၏ဘုတ်အဖွဲ့နှင့် လုပ်ဆောင်ရန်အတွက် အရိုးစုကုဒ်ကို ဖန်တီးပါ။

pogo

Tango ထိန်းချုပ်မှုများ

ကုဒ်ကို ဖန်တီးပြီးပြီ၊ အဲဒါကို ထပ်ပြီး ဖန်တီးကြည့်ရအောင် ဖိုင်->အသစ်.

Tango ထိန်းချုပ်မှုများ

ကျွန်ုပ်တို့သည် အောက်ပါတို့ကို ရရှိသည်-

Tango ထိန်းချုပ်မှုများ

ကျွန်ုပ်တို့၏စက်ပစ္စည်း (အနာဂတ်တွင်၊ စက်အားဖြင့် ကျွန်ုပ်တို့သည် ဆော့ဖ်ဝဲအပိုင်းကို ဆိုလိုသည်) သည် ဗလာဖြစ်ပြီး ထိန်းချုပ်မှုဆိုင်ရာ အမိန့်နှစ်ခုပါရှိသည်- ပြည်နယ် & status.

လိုအပ်သော အရည်အချင်းများနှင့် ပြည့်စုံရပါမည်။

စက်ပစ္စည်း ပိုင်ဆိုင်မှု — ၎င်းကိုစတင်ရန်အတွက် စက်သို့ကျွန်ုပ်တို့လွှဲပြောင်းသည့်မူလတန်ဖိုးများ; GPS ဘုတ်အတွက်၊ သင်သည် စနစ်အတွင်းရှိဘုတ်အဖွဲ့အမည်ကို လွှဲပြောင်းရန်လိုအပ်သည်။ com="/dev/ttyUSB0" com port speed နှင့် baudrade=9600

commands — ကျွန်ုပ်တို့၏စက်ပစ္စည်းကို ထိန်းချုပ်ရန် အမိန့်ပေးချက်များ၊ ၎င်းတို့ကို အကြောင်းပြချက်များနှင့် ပြန်တန်ဖိုးတစ်ခုပေးနိုင်သည်။

  • ပြည်နယ် - လက်ရှိအခြေအနေ၊ မှ ပြန်ပေးသည်။ စတိတ်
  • STATUS - လက်ရှိ အခြေအနေကို ပြန်ပေးသည်၊ ဒါက string ၏ ဖြည့်စွက်ချက်ဖြစ်သည်။ ပြည်နယ်
  • GPSArray - ပြန်လာ ဂျီပီအက်စ် ပုံစံထဲမှာ string DevVarCharArray

ထို့နောက်၊ ၎င်းသို့ဖတ်ရန်/ရေးနိုင်/ရေးနိုင်သည့် စက်ပစ္စည်း attribute ကို သတ်မှတ်ပါ။
Scalar Attributes - ရိုးရှင်းသောအရည်အချင်းများ (char၊ string၊ long, etc.)
Spectrum အရည်အချင်းများ - one-dimensional arrays
ရုပ်ပုံဂုဏ်တော်များ - နှစ်ဖက်မြင် အခင်းအကျင်းများ

စတိတ် - ကျွန်ုပ်တို့၏စက်ပစ္စည်းတည်ရှိရာပြည်နယ်။

  • ဖွင့် - စက်ပစ္စည်းကို ဖွင့်ထားသည်။
  • CLOSE - စက်ပိတ်ထားသည်။
  • ပျက်ကွက် - အမှား။
  • ON - စက်မှဒေတာကိုရယူပါ။
  • OFF - စက်မှဒေတာမရှိပါ။

attribute တစ်ခုထည့်ခြင်း၏ဥပမာ gps_string:

Tango ထိန်းချုပ်မှုများ

မဲရုံကာလ ms တွင် အချိန်၊ gps_string တန်ဖိုးကို မည်မျှကြာကြာ အပ်ဒိတ်လုပ်မည်နည်း။ အပ်ဒိတ်အချိန်ကို မသတ်မှတ်ထားပါက၊ အရည်အချင်းကို တောင်းဆိုမှသာ အပ်ဒိတ်လုပ်မည်ဖြစ်သည်။

ဖြစ်ခဲ့သည်-

Tango ထိန်းချုပ်မှုများ

ယခုသင်ကုဒ်ကိုထုတ်လုပ်ရန်လိုအပ်သည်။ ဖိုင်->ထုတ်လုပ်ရန်

Tango ထိန်းချုပ်မှုများ

ပုံသေအားဖြင့်၊ Makefile ကို မထုတ်ပေးပါ၊ ၎င်းကိုဖန်တီးရန် ပထမဆုံးအကွက်ကို စစ်ဆေးရန် လိုအပ်ပါသည်။ မျိုးဆက်သစ်တစ်ခုအတွင်း ပြုလုပ်ထားသော အပြောင်းအလဲများကို ဖျက်ပစ်ခြင်း မပြုစေရန် ၎င်းကို လုပ်ဆောင်ပါသည်။ ၎င်းကို တစ်ကြိမ်ဖန်တီးပြီး သင့်ပရောဂျက်အတွက် ပြင်ဆင်သတ်မှတ်ခြင်း (စုစည်းမှုကီးများ၊ အပိုဖိုင်များကို မှတ်ပုံတင်ခြင်း) ဖြင့် သင်မေ့သွားနိုင်ပါသည်။

အခု programming ကို ဆက်သွားရအောင်။ pogo သည် ကျွန်ုပ်တို့အတွက် အောက်ပါတို့ကို ထုတ်ပေးသည်-

Tango ထိန်းချုပ်မှုများ

NEO6M.cpp & NEO6M.h ကို စိတ်ဝင်စားပါမည်။ class constructor ရဲ့ ဥပမာကို ကြည့်ရအောင်။

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 တွင် ထည့်သွင်းမည်မဟုတ်ပါ။ ရွှေ့ပါ။. ဘလောက်ထဲမှာမပါတဲ့ အရာအားလုံးဖြစ်လိမ့်မယ်။ ဤနေရာများသည် ကျွန်ုပ်တို့၏ကိုယ်ပိုင် တည်းဖြတ်မှုများ ပြုလုပ်နိုင်သည့် နေရာများဖြစ်သည်။

အခု class မှာ ပါဝင်တဲ့ အဓိကလုပ်ဆောင်ချက်တွေက ဘာတွေလဲ။ 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);

attribute value ကို ဖတ်ချင်တဲ့အခါ gps_stringလုပ်ဆောင်ချက်များကို အောက်ပါအစီအစဉ်အတိုင်း ခေါ်ပါမည်။ always_executed_hook, read_attr_ဟာ့ဒ်ဝဲ и 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

jive

Tango ထိန်းချုပ်မှုများ

ဒေတာဘေ့စ်တွင် အချို့သောစက်ပစ္စည်းများ ရှိနေပြီ၊ ယခု ကျွန်ုပ်တို့၏အရာများကို ဖန်တီးလိုက်ကြပါစို့ တည်းဖြတ်->ဆာဗာဖန်တီးပါ။

Tango ထိန်းချုပ်မှုများ

ယခု ၎င်းနှင့်ချိတ်ဆက်ရန် ကြိုးစားကြပါစို့။

Tango ထိန်းချုပ်မှုများ

မည်သည့်အရာမျှ အလုပ်မဖြစ်ပါ၊ ဦးစွာ ကျွန်ုပ်တို့၏ ပရိုဂရမ်ကို လုပ်ဆောင်ရန် လိုအပ်သည်-

sudo ./NEO6M neo6m -v2

ကျွန်ုပ်သည် အခွင့်အရေးဖြင့် com port သို့သာ ချိတ်ဆက်နိုင်သည်။ အမြစ်-a v - မှတ်တမ်းအဆင့်။

ယခု ကျွန်ုပ်တို့ ချိတ်ဆက်နိုင်သည်-

Tango ထိန်းချုပ်မှုများ

လိုင်း

ဂရပ်ဖစ်တွင်၊ ပုံများကိုကြည့်ခြင်းသည် သေချာပေါက် ကောင်းမွန်သော်လည်း သင်ပိုမိုအသုံးဝင်သောအရာတစ်ခု လိုအပ်ပါသည်။ ကျွန်ုပ်တို့၏စက်ပစ္စည်းသို့ချိတ်ဆက်ကာ ၎င်းမှဖတ်ရှုမှုများကိုရယူမည့် client တစ်ခုကိုရေးကြပါစို့။

#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

string တစ်ခု၏ attribute နှင့် character array ကိုယူပြီး command return အဖြစ် ရလဒ်ကို ရရှိခဲ့သည်။

ကိုးကား

ကျွန်တော် ဆောင်းပါးကို ကိုယ်တိုင်ရေးခဲ့တယ်၊ ဘာကြောင့်လဲဆိုတော့ ခဏကြာပြီးနောက် ကျွန်တော် ဘာလုပ်ရမယ်ဆိုတာ မေ့သွားလို့ပါပဲ။

သင့်ရဲ့အာရုံစူးစိုက်မှုကိုကျေးဇူးတင်ပါသည်။

source: www.habr.com

မှတ်ချက် Add