DDF-Handbuch / Teil A – Protokoll-DDF
Spalten & Keywords
*GENERAL – Parameter
Format: ;KEY;VALUE[;Hinweis/Optionen]. Alle Werte landen im Parameterverzeichnis des Geräts (params) und sind in Formeln als $.PARAM.<KEY> lesbar. Eine dritte Spalte (z. B. ;TIMEOUT;5000;ms oder ;PARITY;EVEN;NONE,ODD,EVEN) dient als Einheit bzw. Optionsliste für Editor und Anzeige.
| Key |
Pflicht |
Beschreibung |
DEVICE |
ja |
Gerätename/Modell |
MANUFACTURER |
ja |
Hersteller. ⚠ Der Export liest MANUFATURER (Tippfehler im Code). Manche Beispiele schreiben ebenfalls MANUFATURER. Zu klären, welcher Key verbindlich ist. Sicher ist es, MANUFACTURER zu verwenden. |
TYPE |
ja |
Kategorie (z. B. Wallbox, Weather station, Graphical user interface) |
PROTOCOL |
ja |
Protokoll. Ausgewertet wird das Präfix (siehe Architektur). |
VERSION_NR |
ja |
Versionsnummer (Integer, 6.00 → 6) |
MODEL_NR |
ja |
Modellnummer |
ID |
ja |
Hex-ID, siehe Dateiname & ID |
MIN_CONTROL_VERSION |
empfohlen |
Mindest-OS-Version im Format Vxxxxx-yy, z. B. V10384-11 |
REVISION |
optional |
Revision der DDF |
TIMESTAMP |
optional |
Zeitstempel. Wirkung im Code nicht belegt (zu klären). |
VERSION_INFO, VERSION_USER, AUTOR/AUTHOR, COMMENT |
optional |
Metadaten ohne belegte Wirkung |
DEFAULT_ALARMING, DEV_DEBUG, DEBUGPORT, DEFDOMAIN |
optional |
in Beispielen vorhanden, Wirkung zu klären |
Verbindung
| Key |
Protokolle |
Beschreibung / Default |
CONNECTION |
alle |
SERIALPORT (1), SERIALPORT+ (2), IPADDRESS (3), DOMAIN (4) |
IPADDRESS |
MODBUS TCP, Gateways |
IP-Adresse (vom Benutzer im System gesetzt) |
PORT |
MODBUS TCP |
TCP-Port, Default 502 |
DOMAIN |
REST, MQTT |
Basis-URL bzw. Broker-URL. Bei Slaves kommagetrennte Liste, Bereiche a.b.c.10-20 werden expandiert. |
SERIALPORT, SERIALPORT_NODE, IPADDRESS_NODE |
RTU, SERCOM, DMX |
serielle Schnittstelle bzw. IO-Node. Porttypen: COMPORT, RIO, IP, NODE |
BAUDRATE |
seriell |
Default 9600 |
DATABITS |
seriell |
Default 8 |
STOPBITS |
seriell |
Default 1 |
PARITY |
seriell |
NONE, ODD, EVEN (SERCOM wertet nur das erste Zeichen aus) |
FLOWCONTROL |
seriell |
NO, SW, HW |
SLAVE |
alle |
Slave-Adresse bzw. Slaveliste (siehe unten) |
SLAVESMAX |
alle |
max. Anzahl Instanzen (≤ 250). Ab 1 entsteht ein Multi-Device. |
TIMEOUT |
alle |
ms. MODBUS-Default 10000, SERCOM 5000. |
WAIT_AFTER_CONNECT |
MODBUS |
s, Default 2 |
MIN_PAUSE |
MODBUS, DMX |
ms zwischen Telegrammen. MODBUS 50, DMX 10. |
WAIT_AFTER_SEND |
SERCOM |
ms |
ACTION_AFTER_RECEIVE |
SERCOM |
NONE, CLEARIN (Default), CLEAROUT, CLEARINOUT |
WORDORDER |
MODBUS |
BIG_ENDIAN (=1) / LITTLE_ENDIAN (=0) |
BYTEORDER |
MODBUS |
BIG_ENDIAN (=0) / LITTLE_ENDIAN (=1) |
ERROR_HANDLING |
MODBUS, seriell |
FLUSH_OR_RECONNECT_ON_ERROR, NOP_ON_ERROR, FLUSH_OR_CLOSE_ON_ERROR |
AUTHENTIFICATION |
REST, MQTT, OCPP |
NONE (0), PASSWORD (1), TOKEN (2), OAUTH_DEVICE_FLOW (3), OAUTH_GRANT_FLOW (4), BASIC_AUTH (5) |
USER, PASSWORD |
REST, MQTT |
Zugangsdaten. Niemals echte Werte in eine DDF schreiben, das setzt der Benutzer. |
CLIENTID |
MQTT |
Default ioDeviceDBDevice_Mqtt_<station>_<device> |
LISTENER_PORT |
REST, OCPP |
Port des Listeners/Servers |
HEARTBEAT_INTERVAL |
OCPP |
s |
SOAPACTION, SOAPNS |
REST (SOAP) |
SOAP-Action und Namespace |
JPEGFILE |
REST |
Ablage für JPEG-Antworten (Kamera) |
FAILUREITEM |
alle |
Item für Fehlerzustand (Auswertung zu klären) |
DMXTYPE |
DMX |
0 = STANDARD, 1 = INTERN |
CONFIGFILE |
alle |
ENABLED aktiviert die Konfigurationsdatei devicedbconf_<station>.ddf |
DATATYPE und der Tippfehler ASCCI
Das Enum für DATATYPE (SERCOM) heißt im Code ASCCI (=0) und BYTE (=1). Wer ASCII schreibt, landet über den Default ebenfalls bei 0. Funktional ist das gleichwertig, nur BYTE muss exakt geschrieben werden.
Slaves und Domains
SLAVE enthält eine kommagetrennte Liste, z. B. 1,2,3. Ein Präfix >> kennzeichnet einen aus der DDF gesetzten Wert.
DOMAIN enthält eine kommagetrennte Liste. Ein Bereich wie 192.168.0.10-20 wird zu einzelnen Einträgen expandiert.
- Anzahl Instanzen =
max(Anzahl SLAVE-Einträge, Anzahl DOMAIN-Einträge), begrenzt durch SLAVESMAX.
- Bei REST/MQTT/OCPP mit
CONNECTION=DOMAIN erhält jede Instanz ihre eigene DOMAIN.
- In Formeln:
$.SLAVE = eigene Instanznummer, $.SLAVE.<n>.<var> = Variable einer anderen Instanz, $.GPARAM.<KEY> = Parameter von Instanz 1, $.GPARAM.SLAVELIST = Slaveliste.
*ITEM – Datenpunkte
| Spalte |
Beschreibung |
GROUP |
Gruppen-ID(s), kommagetrennt (0,1). Mit Gruppen wird ein Item als ITEM.<grp>.<ALIAS> adressiert. |
ALIAS |
eindeutiger Name (Großbuchstaben, _) |
NAME |
Anzeigename |
VISIBILITY |
leer = sichtbar, HIDDEN = nicht exportiert/angezeigt |
ID |
numerische ID (eindeutig im Gerät). Ansprechbar als X.<id>. |
UNIT |
Einheit |
TYPE |
real, int, bool, string, datetime, ARRAY, STRING … (bei ARRAY/STRING wird keine RFORMULA zyklisch ausgeführt) |
DIR |
IN / OUT (Hinweis für Editor). Exportiert wird als Output, wenn eine WFORMULA vorhanden ist. |
DEFAULT |
Startwert |
WFORMULA |
wird ausgeführt, wenn das System einen neuen Wert schreibt. x enthält den neuen Wert. |
RFORMULA |
wird zyklisch mit POLLING des Items ausgeführt |
POLLING |
ms für RFORMULA |
MASK |
Bitmaske, zusammen mit $.ITEMMASK |
Beispiel (aus DEMO_DDF.csv):
*ITEM;GROUP;ALIAS;NAME;VISIBILITY;ID;UNIT;TYPE;DIR;DEFAULT;WFORMULA;RFORMULA;POLLING
;0;WIND_DIRECTION;Wind direction;;0;°;real;IN
;0;TEMPERATURE;Temperature;;2;°C;real;IN
;1;POSITION_ALTITUDE;Position altitude;;7;m;real;IN
;0,1;QUALITY;Quality;;200;;int;IN
;0,1;INFO;Info;;210;;string;IN;SenTec SEM9000 weather station
*GROUP
| Spalte |
Beschreibung |
ID |
Gruppennummer |
ALIAS |
Gruppenalias |
NAME |
Anzeigename |
SUFFIX |
Namenssuffix (Wirkung zu klären) |
MASK |
Maske für $.ITEMMASK |
*IO
| Spalte |
Beschreibung |
GROUP |
Gruppe |
ID |
Index |
ALIAS |
Name |
DIR |
DI (1), DO (2), AI (3), AO (4). Intern gibt es auch String-In (5) und String-Out (6). |
In Formeln: IO.<grp>.<idx>.
*CONFIG
| Spalte |
Beschreibung |
ALIAS |
Name |
VALUE |
Wert |
TYPE |
Typ |
In Formeln: $.CONFIG.<idx>. Neu laden mit LOAD_CONFIG(); bzw. $.SYS.LOAD_CONFIG.
*COMMAND
| Spalte |
Beschreibung |
ID |
Nummer |
ALIAS |
Kommandoname |
FORMULA |
Formel, die beim Aufruf (InvokeCommand) ausgeführt wird |