Танго удирдлага

Танго удирдлага

гэж юу вэ Танго?

Энэ нь янз бүрийн техник хангамж, програм хангамжийг удирдах систем юм.
TANGO одоогоор Linux, Windows NT, Solaris болон HP-UX гэсэн 4 платформыг дэмждэг.
Энд бид Линукс (Ubuntu 18.04) дээр ажиллах талаар тайлбарлах болно.

Энэ юунд зориулагдсан бэ?

Төрөл бүрийн тоног төхөөрөмж, программ хангамжтай ажиллах ажлыг хялбаршуулдаг.

  • Мэдээллийн санд өгөгдлийг хэрхэн хадгалах талаар бодох шаардлагагүй, энэ нь танд зориулж хийгдсэн.
  • Энэ нь зөвхөн санал хураах мэдрэгчийн механизмыг тайлбарлах шаардлагатай.
  • Таны бүх кодыг нэг стандарт болгон бууруулна.

Хаанаас авах вэ?

Би үүнийг эх кодоос эхлүүлж чадсангүй; Би ажиллахын тулд TangoBox 9.3-ийн бэлэн зургийг ашигласан.
Заавар нь багцуудаас хэрхэн суулгахыг тайлбарладаг.

Энэ нь юунаас бүрддэг вэ?

  • ЖАЙВ — TANGO мэдээллийн санг үзэх, засварлахад ашигладаг.
  • ПОГО — TANGO төхөөрөмжийн серверт зориулсан код үүсгэгч.
  • Астор — TANGO системийн программын менежер.

Бид зөвхөн эхний хоёр бүрэлдэхүүн хэсгийг сонирхох болно.

Дэмжигдсэн програмчлалын хэлүүд

  • C
  • C ++
  • Java
  • JavaScript
  • Python
  • Матлаб
  • LabVIEW

Би түүнтэй python & c++ дээр ажиллаж байсан. Энд C++ хэлийг жишээ болгон ашиглах болно.

Одоо төхөөрөмжийг TANGO-д хэрхэн холбох, түүнтэй хэрхэн ажиллах талаархи тайлбар руу шилжье. Төлбөрийг жишээ болгон авч үзэх болно GPS neo-6m-0-001:

Танго удирдлага

Зураг дээр харж байгаагаар бид самбарыг UART CP2102-ээр дамжуулан компьютерт холбодог. Компьютерт холбогдсон үед төхөөрөмж гарч ирнэ /dev/ttyUSB[0-N], ихэвчлэн /dev/ttyUSB0.

ПОГО

Одоо эхлүүлцгээе пого, мөн манай самбартай ажиллах араг ясны кодыг үүсгэнэ.

pogo

Танго удирдлага

Би кодыг аль хэдийн үүсгэсэн, дахин үүсгэцгээе Файл-> Шинэ.

Танго удирдлага

Бид дараахь зүйлийг авна.

Танго удирдлага

Манай төхөөрөмж (ирээдүйд бид програм хангамжийн хэсгийг хэлэх болно) хоосон бөгөөд хоёр хяналтын командтай байна: Төрийн & байдал.

Энэ нь шаардлагатай шинж чанаруудаар дүүрэн байх ёстой:

Төхөөрөмжийн шинж чанар - төхөөрөмжийг эхлүүлэхийн тулд бидний шилжүүлдэг анхдагч утгууд; GPS самбарын хувьд та самбарын нэрийг системд шилжүүлэх хэрэгтэй. com="/dev/ttyUSB0" болон com портын хурд baudrade = 9600

Тушаалууд — манай төхөөрөмжийг удирдах командууд бөгөөд тэдгээрт аргумент болон буцаах утгыг өгч болно.

  • Статус -аас одоогийн төлөвийг буцаана Улсууд
  • STATUS - одоогийн статусыг буцаана, энэ нь мөрийн нэмэлт юм Статус
  • GPSArray - буцаж ирдэг GPS-ийн маягт дахь мөр DevVarCharArray

Дараа нь түүн рүү унших/бичих боломжтой төхөөрөмжийн шинж чанаруудыг тохируулна уу.
Скаляр шинж чанарууд - энгийн шинж чанарууд (тэмдэгт тэмдэг, мөр, урт гэх мэт)
Спектрийн шинж чанарууд - нэг хэмжээст массив
Зургийн шинж чанарууд - хоёр хэмжээст массив

Улсууд — манай төхөөрөмж байгаа муж.

  • Нээх - төхөөрөмж нээлттэй байна.
  • ОЙРЫН - төхөөрөмж хаалттай.
  • БҮТГҮЙ - алдаа.
  • ON - төхөөрөмжөөс өгөгдөл хүлээн авах.
  • OFF - төхөөрөмжөөс өгөгдөл байхгүй.

Атрибут нэмэх жишээ gps_string:

Танго удирдлага

Санал авах хугацаа gps_string утгыг хэр олон удаа шинэчлэх вэ гэдгийг мс-ээр илэрхийлнэ. Хэрэв шинэчлэх хугацааг заагаагүй бол атрибутыг зөвхөн хүсэлтийн дагуу шинэчлэх болно.

Болсон:

Танго удирдлага

Одоо та кодыг үүсгэх хэрэгтэй Файл->Үйлдвэрлэх

Танго удирдлага

Анхдагч байдлаар, Makefile үүсгэгдээгүй бөгөөд та үүнийг үүсгэхийн тулд эхлээд хайрцгийг шалгах хэрэгтэй. Энэ нь шинэ үеийн үед хийсэн өөрчлөлтийг устгахгүйн тулд хийгддэг. Үүнийг нэг удаа үүсгэж, төсөлдөө тохируулсны дараа (бүртгэх эмхэтгэлийн түлхүүрүүд, нэмэлт файлууд) та үүнийг мартаж болно.

Одоо програмчлал руу шилжье. pogo нь бидэнд дараах зүйлийг үүсгэсэн:

Танго удирдлага

Бид 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_массив, гэхдээ энэ нь чухал биш юм. Энд хамгийн чухал зүйл, эдгээр сэтгэгдэл байна:

/*----- 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_техник хангамж и унших_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

Би зөвхөн ком порт руу эрхээр холбогдож чадна эх-А. 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

сэтгэгдэл нэмэх