DDF-Handbuch / Einführung

Was ist DDF?

Ein Device Definition File (DDF) ist eine CSV-Datei, die vollständig beschreibt, wie ein myGEKKO-Controller

  1. mit einem externen Gerät oder Dienst kommuniziert (Protokoll, Verbindung, Adressen, Abfragezyklen),
  2. die empfangenen Rohdaten in Datenpunkte (Items) umrechnet (Formeln),
  3. Werte aus dem System zurück an das Gerät schreibt, und
  4. optional, wie die Daten grafisch dargestellt werden (UI-Objekte, SVG, Zeichenformeln).

Ein Gerät wird also nicht mehr in C++ programmiert. Es wird in einer Datei deklarativ beschrieben, ergänzt um kleine Formeln. Die Firmware (DeviceLib) interpretiert diese Datei zur Laufzeit.

Zwei Arten von DDF

Art PROTOCOL Zweck
Protokoll-/Geräte-DDF MODBUS TCP, MODBUS RTU, REST, MQTT, OCPP, SERCOM, DMX512, (WS) Anbindung eines Geräts oder Dienstes
GUI-DDF SVG, SVG (DDF) Rein grafische Widgets, die auf bestehende Systemvariablen zugreifen
Bibliothek LIBRARY Sammlung wiederverwendbarer SVG-Symbole (*SVGGROUP/*SVG)

Eine Geräte-DDF kann zusätzlich einen *OBJECT-Block mit SVG-Grafik enthalten. DEMO_DDF.csv ist zum Beispiel eine MODBUS-RTU-Wetterstation mit einem SVG-Widget.

Bausteine einer DDF

*GENERAL      Metadaten + Verbindungsparameter (KEY;VALUE)
*READ         Lese-Funktionen (laufen in der PREPROCESS-Phase)
*WRITE        Schreib-Funktionen (laufen in der ONCHANGE-Phase)
*FUNCTION     Funktionen/Listener (TYPE=LISTENER)
*ARGS / ARGS  Argumente für Funktionen (REST, MQTT, SERCOM)
*GROUP        Gruppen von Items
*ITEM         Datenpunkte (Alias, Typ, Einheit, Lese-/Schreibformeln)
*IO           Ein-/Ausgänge (DI/DO/AI/AO)
*CONFIG       Konfigurationswerte
*COMMAND      Kommandos (Formeln, die per Aufruf ausgeführt werden)
*OBJECT       UI-Objekte inkl. SVG / SVGANIMATE / SVGEVENT
*SIGNATURE    Digitale Signatur (muss erste Sektion sein)

Details: CSV-Struktur & Blöcke.

Minimalbeispiel (Auszug Keba-Wallbox)

Stark gekürzter Auszug aus der Keba-DDF (MODBUS TCP). Ein Lesebefehl, ein Item:

*GENERAL;
;DEVICE;KeContact P30 c-series;
;MANUFACTURER;Keba;
;TYPE;Wallbox;
;PROTOCOL;MODBUS TCP (DDF);
;VERSION_NR;1;
;MODEL_NR;1;
;ID;0x0A00003300010100;
;CONNECTION;IPADDRESS;
;PORT;502;
*READ;ALIAS;FUNCTION;ADDRESS;COUNT;POLLING;FORMULA;
;GetPower;FC3;1020;2;1000;"""
IF GetPower.Q THEN
    ITEM.POWER:= GetPower.0.DWORD/1000000;
ENDIF;
""";
*ITEM;ALIAS;NAME;VISIBILITY;ID;UNIT;TYPE;DIR;
;POWER;Power Total;;10;kW;real;IN;

Jede einzelne Formel muss mit ; abgeschlossen sein, auch ENDIF;.