Контроли на танго

Контроли на танго

Што е ТАНГО?

Тоа е систем за управување со различен хардвер и софтвер.
TANGO моментално поддржува 4 платформи: Linux, Windows NT, Solaris и HP-UX.
Овде ќе ја опишеме работата со Linux (Ubuntu 18.04)

За што е?

Ја поедноставува работата со различна опрема и софтвер.

  • Не треба да размислувате како да складирате податоци во базата на податоци, тоа е веќе направено за вас.
  • Потребно е само да се опише механизмот за сензори за гласање.
  • Го намалува целиот ваш код на еден стандард.

Каде да го добие?

Не можев да го стартувам од изворниот код, користев готова слика на TangoBox 9.3 за работа.
Упатствата опишуваат како да инсталирате од пакети.

Од што се состои?

  • JIVE — се користи за прегледување и уредување на базата на податоци на TANGO.
  • ПОГО — генератор на код за сервери на уреди TANGO.
  • Астор — програмски менаџер за системот TANGO.

Ќе нè интересираат само првите две компоненти.

Поддржани програмски јазици

  • C
  • C + +
  • Јава
  • Го вклучите Javascript-
  • Пајтон
  • Матлаб
  • LabVIEW

Работев со него во python & c++. Овде C++ ќе се користи како пример.

Сега да преминеме на опис на тоа како да го поврзете уредот со TANGO и како да работите со него. Надоместокот ќе се земе како пример GPS нео-6м-0-001:

Контроли на танго

Како што можете да видите на сликата, плочката ја поврзуваме со компјутерот преку UART CP2102. Кога е поврзан со компјутер, уредот се појавува /dev/ttyUSB[0-N], обично /dev/ttyUSB0.

ПОГО

Сега да започнеме пого, и генерира скелет код за работа со нашата табла.

pogo

Контроли на танго

Веќе го создадов кодот, ајде да го креираме повторно Датотека->Ново.

Контроли на танго

Го добиваме следново:

Контроли на танго

Нашиот уред (во иднина под уред ќе го мислиме софтверскиот дел) е празен и има две контролни команди: Држава & Статус.

Мора да се пополни со потребните атрибути:

Својство на уредот — стандардните вредности што ги пренесуваме на уредот за да го иницијализираме за таблата GPS, треба да го пренесете името на таблата во системот; com="/dev/ttyUSB0" и брзината на пристаништето баудрејд=9600

Команди — наредбите за контрола на нашиот уред може да добијат аргументи и повратна вредност.

  • ДРЖАВА - ја враќа моменталната состојба, од Државите
  • СТАТУС - го враќа тековниот статус, ова е дополнување на низата ДРЖАВА
  • GPSArray - враќа GPS низа во форма DevVarCharArray

Следно, поставете ги атрибутите на уредот што може да се читаат/пишуваат на/од него.
Скаларни атрибути - едноставни атрибути (кар, стринг, долг, итн.)
Спектар атрибути - еднодимензионални низи
Атрибути на слика - дводимензионални низи

Државите — состојбата во која се наоѓа нашиот уред.

  • ОТВОРЕНО — уредот е отворен.
  • CLOSE - уредот е затворен.
  • НЕСПЕШЕН - грешка.
  • ON — примајте податоци од уредот.
  • OFF — нема податоци од уредот.

Пример за додавање атрибут gps_string:

Контроли на танго

Избирачки период време во ms, колку често ќе се ажурира вредноста на 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_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

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

Додадете коментар