Tango-Steuerung

Tango-Steuerung

Welche TANGO?

Es handelt sich um ein System zur Verwaltung verschiedener Hardware und Software.
TANGO unterstĂŒtzt derzeit 4 Plattformen: Linux, Windows NT, Solaris und HP-UX.
Hier beschreiben wir die Arbeit mit Linux(Ubuntu 18.04)

Was ist das ĂŒberhaupt?

Vereinfacht die Arbeit mit verschiedenen GerÀten und Software.

  • Sie mĂŒssen nicht darĂŒber nachdenken, wie Sie Daten in der Datenbank speichern, das ist bereits fĂŒr Sie erledigt.
  • Es ist lediglich erforderlich, den Mechanismus zur Abfrage von Sensoren zu beschreiben.
  • Reduziert Ihren gesamten Code auf einen Standard.

Wo man es bekommt?

Ich konnte es nicht ĂŒber den Quellcode starten; ich habe ein vorgefertigtes Image von TangoBox 9.3 verwendet, um zu funktionieren.
Die Anleitung beschreibt die Installation aus Paketen.

Woraus besteht es?

  • jive – dient zum Anzeigen und Bearbeiten der TANGO-Datenbank.
  • POGO — Codegenerator fĂŒr TANGO-GerĂ€teserver.
  • Astor — Programmmanager fĂŒr das TANGO-System.

Wir werden uns nur fĂŒr die ersten beiden Komponenten interessieren.

UnterstĂŒtzte Programmiersprachen

  • C
  • C + +
  • Javac
  • JavaScript
  • Python
  • Matlab
  • LabVIEW

Ich habe damit in Python und C++ gearbeitet. Hier wird C++ als Beispiel verwendet.

Kommen wir nun zu einer Beschreibung, wie man das GerĂ€t mit TANGO verbindet und wie man damit arbeitet. Als Beispiel soll die GebĂŒhr genommen werden GPS neo-6m-0-001:

Tango-Steuerung

Wie auf dem Bild zu sehen ist, verbinden wir das Board per UART CP2102 mit dem PC. Bei Anschluss an einen PC erscheint das GerÀt /dev/ttyUSB[0-N], normalerweise /dev/ttyUSB0.

POGO

Jetzt lasst uns starten Pogo, und generieren Sie Grundcode fĂŒr die Arbeit mit unserem Board.

pogo

Tango-Steuerung

Ich habe den Code bereits erstellt, erstellen wir ihn erneut Datei->Neu.

Tango-Steuerung

Wir erhalten Folgendes:

Tango-Steuerung

Unser GerĂ€t (mit GerĂ€t meinen wir in Zukunft den Softwareteil) ist leer und verfĂŒgt ĂŒber zwei Steuerbefehle: Staat & Status.

Es muss mit den notwendigen Attributen gefĂŒllt sein:

GerĂ€teeigenschaft — Standardwerte, die wir zur Initialisierung an das GerĂ€t ĂŒbertragen; fĂŒr die GPS-Karte mĂŒssen Sie den Namen der Karte im System ĂŒbertragen com="/dev/ttyUSB0" und COM-Port-Geschwindigkeit Baudrade=9600

Befehle – Befehle zur Steuerung unseres GerĂ€ts; ihnen können Argumente und ein RĂŒckgabewert zugewiesen werden.

  • STATE - gibt den aktuellen Status zurĂŒck, von Staaten
  • STATUS - gibt den aktuellen Status zurĂŒck, dies ist das Komplement zu der Zeichenfolge STATE
  • GPSArray - kehrt zurĂŒck gps Zeichenfolge im Formular DevVarCharArray

Als nÀchstes legen Sie die GerÀteattribute fest, die darauf gelesen/geschrieben werden können.
Skalare Attribute — einfache Attribute (char, string, long usw.)
Spektrumattribute - eindimensionale Arrays
Bildattribute - zweidimensionale Arrays

Staaten — der Zustand, in dem sich unser GerĂ€t befindet.

  • OPEN — Das GerĂ€t ist geöffnet.
  • CLOSE — Das GerĂ€t ist geschlossen.
  • FEHLGESCHLAGEN - Fehler.
  • ON — Daten vom GerĂ€t empfangen.
  • OFF — Keine Daten vom GerĂ€t.

Beispiel fĂŒr das HinzufĂŒgen eines Attributs gps_string:

Tango-Steuerung

Abstimmungszeitraum Zeit in ms, wie oft der gps_string-Wert aktualisiert wird. Wenn die Aktualisierungszeit nicht angegeben ist, wird das Attribut nur auf Anfrage aktualisiert.

Es stellte sich heraus:

Tango-Steuerung

Jetzt mĂŒssen Sie den Code generieren Datei->Generieren

Tango-Steuerung

StandardmĂ€ĂŸig wird das Makefile nicht generiert. Beim ersten Mal mĂŒssen Sie das KontrollkĂ€stchen aktivieren, um es zu erstellen. Dies geschieht, damit die daran vorgenommenen Änderungen bei einer neuen Generation nicht gelöscht werden. Nachdem Sie es einmal erstellt und fĂŒr Ihr Projekt konfiguriert haben (KompilierungsschlĂŒssel registrieren, zusĂ€tzliche Dateien), können Sie es vergessen.

Kommen wir nun zur Programmierung. pogo with hat fĂŒr uns Folgendes generiert:

Tango-Steuerung

Wir werden an NEO6M.cpp und NEO6M.h interessiert sein. Nehmen wir ein Beispiel fĂŒr einen Klassenkonstruktor:

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
}

Was gibt es und was ist hier wichtig? Die Funktion init_device() reserviert Speicher fĂŒr unsere Attribute: gps_string & gps_array, aber es ist nicht wichtig. Das Wichtigste hier, das sind die Kommentare:

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

Alles, was sich in diesem Kommentarblock befindet, wird bei nachfolgenden Code-Neugenerierungen nicht in Pogo einbezogen wegziehen!. Alles, was nicht in Blöcken ist, wird es sein! Dies sind die Orte, an denen wir programmieren und unsere eigenen Bearbeitungen vornehmen können.

Was sind nun die Hauptfunktionen, die die Klasse enthÀlt? 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);

Wenn wir den Attributwert lesen möchten gps_string, werden die Funktionen in der folgenden Reihenfolge aufgerufen: Always_executed_hook, read_attr_hardware Đž read_gps_string. Read_gps_string fĂŒllt gps_string mit dem Wert.

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
}

Zusammenstellung

Gehen Sie zum Quellordner und:

make

Das Programm wird in den Ordner ~/DeviceServers kompiliert.

tango-cs@tangobox:~/DeviceServers$ ls
NEO6M

jive

jive

Tango-Steuerung

Es sind bereits einige GerÀte in der Datenbank vorhanden, jetzt erstellen wir eines Bearbeiten->Server erstellen

Tango-Steuerung

Versuchen wir nun, eine Verbindung herzustellen:

Tango-Steuerung

Nichts wird funktionieren, zuerst mĂŒssen wir unser Programm ausfĂŒhren:

sudo ./NEO6M neo6m -v2

Ich kann mich nur mit Rechten mit dem COM-Port verbinden Wurzel-a. v — Protokollierungsstufe.

Jetzt können wir Folgendes verbinden:

Tango-Steuerung

Auftraggeber

In der Grafik ist das Betrachten von Bildern sicherlich gut, aber Sie brauchen etwas NĂŒtzlicheres. Schreiben wir einen Client, der sich mit unserem GerĂ€t verbindet und Messwerte von diesem erfasst.

#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);
    }
}

So kompilieren Sie:

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++

Ergebnis:

tango-cs@tangobox:~/workspace/c$ ./a.out 
$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

Wir haben das Ergebnis als BefehlsrĂŒckgabe erhalten und dabei die Attribute einer Zeichenfolge und eines Zeichenarrays ĂŒbernommen.

Referenzen

Ich habe den Artikel fĂŒr mich selbst geschrieben, weil ich nach einer Weile vergesse, wie und was ich tun soll.

Vielen Dank fĂŒr Ihre Aufmerksamkeit.

Source: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz und VPS-VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster