Architektur
Datenfluss
flowchart LR
A[DDF-Datei<br/>CSV] -->|loadDeviceDSC| B[ioDeviceDB<br/>Loader & Geräteinstanzen]
B -->|PROTOCOL-Präfix| C[Protokolltreiber<br/>MODBUS / REST / MQTT / OCPP / SERCOM / DMX]
C -->|Rohdaten<br/>ALIAS.xxx| D[Formelinterpreter]
D -->|ITEM.ALIAS| E[Items / Datenpunkte]
E -->|varmap / ALIAS| F[myGEKKO-System<br/>Variablen]
E --> G[GUI<br/>*OBJECT / SVG]
F -->|Schreibwert| D
D -->|WFORMULA / *WRITE| C
1. DDF-Datei
Eine CSV-Datei mit ; als Trenner. Der Loader erkennt Blöcke an Zeilen, die mit * beginnen. Die Kopfzeile jedes Blocks legt die Spaltennamen fest.
2. ioDeviceDB (Loader)
- liest die DDF (
loadDeviceDSC), prüft optional die Signatur und legt Geräteinstanzen an, - speichert die aktive DDF je Station als
/control/ini/devicedb_<station>.ddf, Retain-Daten alsdevicedb_<station>.json, Konfiguration alsdevicedbconf_<station>.ddfund die Geräteliste als/control/ini/devicedb.csv, - prüft die DDF-Datei alle 2 s auf Änderungen (mtime) und lädt sie bei Bedarf neu.
3. Protokolltreiber
Gewählt wird nach dem Präfix von PROTOCOL:
| Präfix | Treiber |
|---|---|
MODBUS |
MODBUS (MODBUS TCP → TCP, MODBUS RTU → RTU, sonst ASCII) |
SERCOM |
serielle ASCII/Binär-Kommunikation |
DMX512 |
DMX-Ausgabe |
REST |
HTTP(S)-Client, Listener, SSE |
MQTT |
MQTT-Client |
OCPP |
OCPP-Central-System (WebSocket-Server) |
SVG |
reines GUI-Gerät ohne Kommunikation |
Weil nur das Präfix verglichen wird, funktionieren auch Werte wie MODBUS RTU (DDF) oder SERCOM(new).
4. Formelinterpreter
Jede Funktion (*READ, *WRITE, *FUNCTION) und jedes Item (RFORMULA, WFORMULA) kann eine Formel enthalten. Formeln lesen die Rohdaten (ALIAS.…), rechnen und schreiben Items (ITEM.…) oder Rohdaten zurück. Siehe Formeln und Formelreferenz.
5. Items, varmap und ALIAS
Items sind die Datenpunkte eines Geräts. Sie werden exportiert (Input, wenn keine WFORMULA vorhanden ist, sonst Output) und im myGEKKO-System über varmap/ALIAS auf Systemvariablen abgebildet. GUI-Formeln greifen über $.VARLOCAL.<alias> / $.VARGLOBAL.<pfad> auf diese Alias-Adressen zu (siehe GUI-Variablen).
6. GUI
Über *OBJECT definiert eine DDF, welche Werte in der Visualisierung als Liste erscheinen. Optional wird das Widget per SVG und Formeln frei gezeichnet.
Ablaufzyklus je Gerät
sequenceDiagram
participant L as Loop (ioDeviceDB Process)
participant D as Device
L->>D: process_start (Verbindung aufbauen)
loop zyklisch
L->>D: process_data("PREPROCESS") (*READ)
L->>D: process_datapoints (RFORMULA / WFORMULA)
L->>D: process_data("ONCHANGE") (*WRITE)
end
Eine Funktion wird ausgeführt, wenn ihr POLLING-Intervall (ms) abgelaufen ist oder ihr Change-Flag (ALIAS.F) gesetzt wurde.
Mehrere Geräte (Slaves)
Ist SLAVESMAX > 0, legt der Loader mehrere Instanzen an (deviceId 1…n). Ihre Anzahl ist das Maximum aus Slave- und Domainliste, gedeckelt auf SLAVESMAX (max. 250). Bei MODBUS, SERCOM und DMX teilen Slaves > 1 die Verbindung von Device 1. Details: Spalten & Keywords.