openABK-Support für programmierbare Displays und Gateways

Autor: Wolfgang Büscher, MKT Systemtechnik
Datum: 2020-05-29 (ISO 8601)
Quelldatei ("Master"): <WoBu><ProgrammingTool>..help\openABK_49.htm
Online: www.mkt-sys.de/MKT-CD/upt/help/openABK_49.htm

Inhalt

  1. Einleitung
    1. OpenABK-'Discovery' (Protokoll zum Auffinden von IP-Adressen)
    2. OpenABK-Server im MKT-View (IV)
    3. OpenABK-Client im MKT-View (IV)
  2. Parametrieren der openABK-Funktionen im Programmiertool
    1. Verknüpfen von openABK-Variablen mit UPT-Display-Variablen
    2. Verknüpfen von openABK-'Mailboxen' mit UPT-Display-Variablen
    3. Metadaten von openABK-Variablen und 'Mailboxen'
    4. Optionen (Einstellungen) für die openABK-Anwendung
  3. Interaktion von openABK und Script
    1. openABK-Server mit Script-Steuerung
    2. openABK-Client mit Script-Steuerung
    3. openABK-spezifische API in der Script-Sprache
    4. openABK-spezifische Callback-Funktionen
Siehe auch (Links zu weiteren Dokumenten):
Handbuch zum Programmiertool : 'Display-Variablen mit Anbindung an openABK', Stichwort-Verzeichnis ('von A bis Z'),
Feature Matrix (mit Übersicht in welchen MKT-Geräten ein openABK-Client oder/und -Server enthalten ist),
openABK.org : Beschreibung der offenen Schnittstelle zwischen Datenloggern und Displays.

1. Einleitung

Dieses Dokument beschreibt die openABK-Funktionalität, die in verschiedenen (aber nicht allen) programmierbaren Anzeige-Geräten von MKT Systemtechnik optional zur Verfügung steht.

Die openABK-Protokoll-Spezifikation konnte anno 2015 von openABK.org heruntergeladen werden.
Die deutsch-englische Abkürzung 'openABK' steht für 'offenes Anzeige- und Bedienkonzept'.
Das Protokoll dient im Wesentlichen zur Kommunikation zwischen 'Display' und 'Logger', wozu UDP/IP, TCP/IP, HTTP, und verschiedene Web-Services verwendet werden.

Mangels Nachfrage wurde die Weiterentwicklung von openABK in den Anzeigegeräten von MKT (u.A. das 'konfigurationsfreie Auflisten' von Signalen ohne Programmierung) wieder eingestellt. Die anno 2016 bis 2018 im MKT-View III integrierten Funktionen werden bei nachfolgenden Generationen (speziell beim CAN-FD-fähigen MKT-View V) wohl nicht mehr enthalten sein.

1.1 OpenABK-'Discovery' (Protokoll zum Auffinden von IP-Adressen)

MKT-Geräte mit Ethernet-Anschluss können per openABK-'Discovery'-Prokoll im lokalen Netzwerk gefunden werden. Das Programmiertool kann damit eine Liste mit den IP-Adressen aller vorhandenen Geräte erstellen, unabhängig davon ob diese eine per DHCP zugewiesene dynamische, oder eine statische IP-Adresse verwenden.
Das Aus- und Wiedereinschalten des Gerätes (um das Senden einer DHCP-Abfrage zu erzwingen) ist beim Einsatz des openABK-'Discovery'-Protokolls daher nicht mehr erforderlich.

Einige 'MKT-Views' (z.B. MKT-View III) unterstützen zwar das openABK-'Discovery'-Protokoll zum Erkennen der IP-Adresse, enthalten aber keinen 'vollwertigen' OpenABK-HTTP-Server !
Solche Geräte (die nur das 'Discovery'-Protokoll unterstützen) antworten auf entsprechende UDP-Broadcasts an Port 51234 mit ihrer IP-Adresse, melden per JSON-Objekt aber statt "Key":"AbkServer" das Wertepaar "Key":"UPT" (d.h. User Programmable Terminal, aber kein "ABK-Server").
Dadurch werden Probleme mit anderen OpenABK-Clients im Netzwerk vermieden, die nur auf die Antwort von einem 'vollwertigen' OpenABK-Server reagieren sollten.

Alle per 'Discovery' erkannten Geräte werden in der Liste von IP-Adressen angezeigt (zusätzlich zu den per DHCP anhand ihrer MAC-Adresse als 'MKT-Gerät' erkannten Displays).
Zur Erleichterung der Auswahl wird zusätzlich der Name des openABK-Gerätes angehängt :


(Screenshort nach 'Transfer'..'MKT- und OpenABK-Geräte im lokalen Netz finden'.
Verschiedene Geräte wurden im Netzwerk gefunden,
darunter ein MKT-View (IV) mit dem Host-Namen "MKTVIEW4WB"
und ein Open-ABK-'Test'-Server mit fehlerhaft gemeldeter IP-Adresse )



1.2 OpenABK-Server im MKT-View (IV)

Für die ersten Tests mit openABK steht seit Januar 2016 ein openABK-Server im MKT-View IV zur Verfügung.
Geplant: Dieser wird (später) in einer kostenoptimierten, Display-losen Variante als 'CAN-openABK-Gateway', eventuell auch als openABK-kompatibler 'Logger' verfügbar sein.
Stand der Entwicklung im Februar 2016:

  • Server-Informationen, Variablenlisten, Mailbox-Listen können vom Server angefordert werden,
  • einzelne Variablen- und Mailbox-Werte können per POST abgefragt werden (/abk/variables/var_value, etc),
  • DAQ-Listen können per PUT erstellt, per GET abgefragt, und per DELETE gelöscht werden (/abk/variables/daq_list, etc),
  • Server-Events können per GET (mit 'long polling') abgefragt werden
  • Als openABK-Variablen stehen alle UPT-'Display-Variablen' zur Verfügung, die z.B. per CAN mit der 'Aussenwelt' verbunden sind
  • Als openABK-'Mailboxen' stehen alle UPT-Display-Variablen zur Verfügung, die nicht per CAN mit der 'Aussenwelt' verbunden sind
Änderungen an existierenden UPT-Applikationen (*.cvt) sind daher nicht nötig, um die oben beschriebene Server-Funktionalität zu nutzen.
Die im weiteren Verlauf dieses Dokumentes beschriebenen Funktionen werden nur für 'fortgeschrittene' Anwendungen, bzw. für dem Einsatz des MKT-Views (IV) als openABK-Client benötigt.

1.3 OpenABK-Client im MKT-View (IV)

Stand der Entwicklung im Februar 2016:
  • Im MKT-View IV ist z.Z. nur der in Kapitel 1.2 vorgestellte openABK-Server vorhanden,
  • Im Programmiertool ist dagegen ein openABK-Client vorhanden,
    dieser dient bislang allerdings nur zum Zugriff auf den im MKT-View laufenden Server.


2. Parametrieren der openABK-Funktionen im Programmiertool

Für die Konfiguration der Applikation (im MKT-View oder openABK-Gateway) enthält das Programmiertool das in diesem Kapitel vorgestellte Dialogfenster.
Der Dialog wird üblicherweise nach dem Einlesen der Informationen vom openABK-Server (in vielen Fällen direkt aus dem openABK-Server) aufgerufen. Für den Verbindungsaufbau mit dem Server wird zunächst das 'Discovery'-Protokoll verwendet, um einen geeigneten openABK-Server im Netzwerk zu finden. Anschließend versucht der im Programmiertool integrierte openABK-Client, alle für die Konfiguration benötigten Informationen per HTTP (Hypertext Transfer Protocol) aus dem Server zu lesen. Der Server kann ein Gerät von MKT Systemtechnik sein, oder ein beliebiger Server (z.B. ein Logger mit openABK-Funktionalität).

Um eine Verbindung zum openABK-Server aufzubauen, wählen Sie im Hauptmenü des Programmiertools den Eintrag Transfer, openABK, und im daraufhin angezeigten Untermenü die Funktion Definition von Variablen und Mailboxen aus einem openABK-Server lesen.

Sie werden anschliessend nach der IP-Adresse und der Portnummer des openABK-Servers gefragt.
Als Port-Nummer verwendet ein openABK-Server 8080 oder 8090 (Quelle: openABK-Spezifikation V1.0), es wurden in der Praxis allerdings auch anders konfigurierte openABK-Server beobachtet.
Wenn das Gerät nicht vorher per 'Discovery' gefunden wurde, entnehmen Sie die IP-Adresse und openABK-Port-Nummer bitte der Beschreibung des Herstellers. Bei Geräten von MKT Systemtechnik kann sowohl die (statische) IP-Adresse als auch die openABK-Port-Nummer im Netzwerk-Setup flexibel eingestellt werden.
Die per Discovery ermittelte IP-Adresse wird als 'Vorgabe' verwendet. Vor dem Auslesen der Server-Informationen kann dessen Adresse ggf. manuell geändert werden kann (falls das 'Discovery'-Protokoll nicht funktioniert, weil z.B. die dafür benötigten UDP-Telegramme nicht korrekt geroutet werden):


(Screenshot : Eingabe der IP-Adresse und Port-Nummer eines openABK-Servers)

Nach dem Bestätigen der IP-Adresse und Port-Nummer (per 'Ok'-Button) baut das Programmiertool eine Verbindung mit dem openABK-Server auf. Im ersten Schritt werden z.B. alle im Server verfügbaren Variablen abgefragt. Abgesehen vom Verbindungsaufbau dauert dieser Vorgang i.A. nur Sekundenbruchteile. Solange das Programmiertool mit dem Auslesen von Daten aus dem openABK-Server beschäftigt ist, wird das unten gezeigte Info-Fenster angezeigt:


(Screenshot : 'Verbindungsaufbau' oder 'Kommunikation mit dem openABK-Server' im UPT-Programmiertool)

Nach Abschluss der Datenübertragung schaltet das UPT-Programmiertool in ein neues Fenster um, in dem u.A. die aus dem openABK-Server gelesenen Variablen mit den UPT-Display-Variablen (bzw den Variablen im MKT-Gateway) verknüpft werden können. Bei der später folgenden Applikations-Entwicklung spielt es dann keine Rolle mehr, ob es sich um eine 'interne' UPT-Variable, eine openABK-Variable, oder eine openABK-Mailbox handelt. Details dazu folgen in den nächsten Kapiteln.

2.1 Verknüpfen von openABK-Variablen mit UPT-Display-Variablen

Nach Abschluss der in Kapitel 2.0 beschriebenen Datenübertragung schaltet das UPT-Programmiertool in ein neues Fenster um, in dem u.A. die auf dem openABK-Server vorhandenen Variablen mit den UPT-Display-Variablen (bzw den Variablen im MKT-Gateway) verknüpft werden können.
Hinweis
Für Signale im openABK-Server von Loggern oder Gateways (z.B. im MKT-View IV) ist diese Zuordnung nicht erforderlich, denn per Default sind alle UPT-Variablen automatisch auch als openABK-Variablen im openABK-Server verfügbar (*).
Für MKT-Displays, deren interner openABK-Client aktiv Messwerte (u.Ä.) von einem Server anfordern soll, kann mit der unten gezeigten Registerkarte im 'openABK'-Fenster eine feste Zuordnung zwischen 'openABK-Variablen' (in der linken Liste) und UPT-Display-Variablen (in der rechten Liste) hergestellt werden:


(Screenshot : Registerkarte 'openABK-Variablen' im UPT-Programmiertool)

Für Display-Applikationen, bei denen die anzuzeigenden Messwerte erst während der Laufzeit (durch den Bediener) ausgewählt werden sollen, eignet sich die oben beschriebene Funktion nicht, denn die im 'Logger' (oder CAN-openABK-Gateway von MKT) vorhandenen openABK-Variablen (Messwerte) sind i.A. beim Entwurf der Applikation noch nicht bekannt.
In dem Fall muss der noch in Planung befindliche Client-seitige openABK-Support in der Script-Sprache verwendet werden. Entsprechende Script-Beispiele werden im Bedarfsfall noch erstellt.

2.2 Verknüpfen von openABK-'Mailboxen' mit UPT-Display-Variablen

Aus Sicht des Entwicklers stellen openABK-'Mailboxen' ebenfalls Variablen dar. Soweit das der anno 2015 verfügbaren openABK-Spezifikation zu entnehmen war, besteht zwischen 'Variablen' und 'Mailboxen' lediglich der folgende Unterschied:
  • 'Variablen' sind (aus Sicht eines openABK-Servers) immer mit 'Messwerten' verbunden, z.B. vom CAN-Bus
  • 'Mailboxen' dienen wohl zur Signalsiserung von Logger-internen Zuständen und Ereignissen.
    Zitat aus der openABK-Spezifikation (anno 2012, V1.0, Seite 9):
      > Mailboxen sind für Handshake-Funktionen gedacht.
      > Mit ihnen können z.B. Elemente in einem Dialog synchronisiert werden, z.B. ein Fortschritts-Balken.
      > Die Funktionsweise ist sehr ähnlich wie die der Variablen.
Aufgrund der sehr ähnlichen Funktionsweise können im Programmiertool openABK-'Mailboxen' genau wie openABK-Variablen mit UPT-Variablen verknüpft werden.
Dazu dient die Registerkarte 'Mailboxen' im Dialogfenster 'openABK':


(Screenshot : Registerkarte 'openABK-Mailboxen' im UPT-Programmiertool)


2.3 Metadaten von openABK-Variablen und 'Mailboxen'

Intern werden zwischen openABK-Client und -Server auch Meta-Daten ausgetauscht. In den Meta-Daten sind z.B. Informationen über die Skalierung von Messwerten, Kommentare, die physikalische Einheit (z.B. 'km/h'), und ein 'Symbol' (z.B. Formelzeichen 'V' für Velocity) enthalten.
Wenn das Programmiertool eine direkte Verbindung mit dem openABK-Server aufgebaut hat, können die Meta-Daten des ersten selektierten Eintrags in der Liste von openABK-Variablen (bzw. Mailboxen) in der Info-Box im unteren Teil des Dialogfensters angezeigt werden:


(Screenshot : Anzeige von openABK-'Metadaten' im UPT-Programmiertool)

2.4 Optionen (Einstellungen) für die openABK-Anwendung


(Sollte überraschenderweise noch Interesse an openABK bestehen,
nehmen Sie für weitere Informationen bitte Kontakt mit dem Entwickler auf.)


3. Interaktion von openABK und dem Script


 (2016-02: Die openABK-Script-Anbindung ist noch in Planung...
  2020-05: Die Weiterentwicklung von openABK wurde mangels Nachfrage eingestellt.)


3.1 openABK-Server mit Script-Steuerung


  (in Vorbereitung.. siehe oben)

3.2 openABK-Client mit Script-Steuerung


  (in Vorbereitung.. siehe oben)

3.3 openABK-spezifische API in der Script-Sprache


  (in Vorbereitung.. siehe oben)

3.4 openABK-spezifische Callback-Funktionen


  (in Vorbereitung.. siehe oben)