Was ist DDF?
Ein Device Definition File (DDF) ist eine CSV-Datei, die vollständig beschreibt, wie ein myGEKKO-Controller
- mit einem externen Gerät oder Dienst kommuniziert (Protokoll, Verbindung, Adressen, Abfragezyklen),
- die empfangenen Rohdaten in Datenpunkte (Items) umrechnet (Formeln),
- Werte aus dem System zurück an das Gerät schreibt, und
- 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;.