کنترل های تانگو

کنترل های تانگو

چه شده است TANGO?

این یک سیستم برای مدیریت سخت افزارها و نرم افزارهای مختلف است.
TANGO در حال حاضر از 4 پلتفرم پشتیبانی می کند: Linux، Windows NT، Solaris و HP-UX.
در اینجا کار با لینوکس (اوبونتو 18.04) را شرح خواهیم داد.

Для чего нужно؟

کار با تجهیزات و نرم افزارهای مختلف را ساده می کند.

  • نیازی نیست به نحوه ذخیره داده ها در پایگاه داده فکر کنید، این کار قبلا برای شما انجام شده است.
  • فقط لازم است مکانیسم سنسورهای نظرسنجی را توضیح دهیم.
  • تمام کدهای شما را به یک استاندارد کاهش می دهد.

از کجا دریافت کنم؟

من نتوانستم آن را از کد منبع راه اندازی کنم؛ از یک تصویر آماده از TangoBox 9.3 برای کار استفاده کردم.
دستورالعمل نحوه نصب از بسته ها را شرح می دهد.

از چه چیزی تشکیل شده است؟

  • واضح - برای مشاهده و ویرایش پایگاه داده TANGO استفاده می شود.
  • POGO - تولید کننده کد برای سرورهای دستگاه TANGO.
  • آستور - مدیر برنامه برای سیستم TANGO.

ما فقط به دو جزء اول علاقه مند خواهیم بود.

زبان های برنامه نویسی پشتیبانی شده

  • C
  • ++C
  • جاوه
  • جاوا اسکریپت
  • پــایتــون
  • متلب
  • LabVIEW

من با آن در پایتون و c++ کار کردم. در اینجا C++ به عنوان مثال استفاده خواهد شد.

حال به توضیح نحوه اتصال دستگاه به TANGO و نحوه کار با آن می پردازیم. هزینه به عنوان مثال در نظر گرفته خواهد شد GPS neo-6m-0-001:

کنترل های تانگو

همانطور که در تصویر مشاهده می کنید، ما برد را از طریق UART CP2102 به کامپیوتر متصل می کنیم. هنگام اتصال به رایانه شخصی، دستگاه ظاهر می شود /dev/ttyUSB[0-N]، معمولا /dev/ttyUSB0.

POGO

حالا بیایید راه اندازی کنیم POGO، و کد اسکلت را برای کار با برد ما ایجاد کنید.

pogo

کنترل های تانگو

من قبلاً کد را ایجاد کردم، بیایید دوباره آن را ایجاد کنیم فایل->جدید.

کنترل های تانگو

موارد زیر را دریافت می کنیم:

کنترل های تانگو

دستگاه ما (در آینده منظور از دستگاه قسمت نرم افزار خواهد بود) خالی است و دارای دو دستور کنترل است: دولت & وضعیت.

باید با ویژگی های لازم پر شود:

ویژگی دستگاه - مقادیر پیش فرضی که برای مقداردهی اولیه به دستگاه منتقل می کنیم؛ برای برد GPS، باید نام برد را در سیستم منتقل کنید. com="/dev/ttyUSB0" و سرعت پورت com baudrade=9600

دستورات - دستوراتی برای کنترل دستگاه ما؛ می توان به آنها آرگومان و مقدار بازگشتی داد.

  • حالت - وضعیت فعلی را از ایالات
  • وضعیت - وضعیت فعلی را برمی گرداند، این مکمل رشته است حالت
  • GPSArray - برمی گردد GPS رشته در فرم DevVarCharArray

در مرحله بعد، ویژگی‌های دستگاه را تنظیم کنید که می‌توان آن را خواند/نوشتن کرد.
ویژگی های اسکالر - ویژگی های ساده (کاراکتر، رشته، طولانی و غیره)
ویژگی های طیف - آرایه های یک بعدی
ویژگی های تصویر - آرایه های دو بعدی

ایالات - وضعیتی که دستگاه ما در آن قرار دارد.

  • باز کن - دستگاه باز است.
  • نزدیک - دستگاه بسته است.
  • شکست - خطا
  • ON - دریافت اطلاعات از دستگاه
  • OFF - داده ای از دستگاه وجود ندارد.

مثال اضافه کردن یک ویژگی gps_string:

کنترل های تانگو

دوره نظرسنجی زمان بر حسب ms، مقدار gps_string هر چند وقت یکبار به روز می شود. اگر زمان به روز رسانی مشخص نشده باشد، ویژگی فقط در صورت درخواست به روز می شود.

اتفاق افتاد:

کنترل های تانگو

حالا باید کد را تولید کنید File->Generate

کنترل های تانگو

به‌طور پیش‌فرض، 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_array، اما مهم نیست. مهمترین چیز اینجاست، این نظرات است:

/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    .......
/*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1

هر چیزی که در این بلوک نظرات است در طول بازسازی کد بعدی در pogo گنجانده نمی شود کنار رفتن!. هر چیزی که در بلوک نیست خواهد بود! اینها مکان هایی هستند که می توانیم برنامه ریزی کنیم و ویرایش های خود را انجام دهیم.

حالا توابع اصلی کلاس شامل چه مواردی است؟ 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

اضافه کردن نظر