DDF-Handbuch / Teil A – Protokoll-DDF

MODBUS RTU

Konzept

Wie MODBUS TCP, jedoch über eine serielle Schnittstelle (RS485), direkt oder über einen IO-Node. Spalten, Funktionscodes und Datentypen sind identisch. PROTOCOL beginnt mit MODBUS RTU. Andere MODBUS…-Werte ergeben MODBUS ASCII.

Parameter

Key Default Beschreibung
CONNECTION – SERIALPORT (1), SERIALPORT+ (2), IPADDRESS (3, z. B. Gateway)
SERIALPORT / SERIALPORT_NODE / IPADDRESS_NODE – Schnittstelle bzw. IO-Node
BAUDRATE 9600
DATABITS 8
STOPBITS 1
PARITY – NONE, ODD, EVEN
FLOWCONTROL – NO, SW, HW
SLAVE – Slave-Adresse(n)
TIMEOUT, WAIT_AFTER_CONNECT, MIN_PAUSE, WORDORDER, BYTEORDER, ERROR_HANDLING wie TCP

Unterstützte Port-Codes

Der Port-Code 8888 (IO-Node) wird unterstützt. Die Codes 9999 und Werte ≥ 1000 werden für MODBUS nicht unterstützt.

Mehrere Slaves auf einem Bus

Mit SLAVESMAX > 0 und einer SLAVE-Liste entsteht je Adresse eine Instanz. Alle Instanzen teilen sich die serielle Verbindung von Instanz 1. Mit FUNCTION(slave,method,getset,master,start,len); bzw. $.SYS.FUNCTION… lassen sich Register zwischen Slave und Master kopieren.

Realer Auszug: DEMO_DDF.csv (SenTec SEM9000 Wetterstation)

*GENERAL
;DEVICE;SEM9000 weather station
;MANUFACTURER;SenTec
;TYPE;Weather station
;PROTOCOL;MODBUS RTU (DDF)
;VERSION_NR;1
;MODEL_NR;1
;ID;0x0B00008300010100
;SLAVE;1
;CONNECTION;SERIALPORT;0:SERIALPORT,1:SERIALPORT+,2:IPADDRESS,3:DOMAIN
;BAUDRATE;9600
;DATABITS;8
;STOPBITS;1
;PARITY;EVEN;NONE,ODD,EVEN
;FLOWCONTROL;NO;NO,SW,HW
;TIMEOUT;5000;ms
;WAIT_AFTER_CONNECT;2;s
;MIN_PAUSE;50;ms
;WORDORDER;LITTLE_ENDIAN
;BYTEORDER;BIG_ENDIAN
;ERROR_HANDLING;FLUSH_OR_RECONNECT_ON_ERROR;FLUSH_OR_RECONNECT_ON_ERROR;NOP_ON_ERROR; FLUSH_OR_CLOSE_ON_ERROR
*READ;ALIAS;FUNCTION;ADDRESS;COUNT;POLLING;FORMULA
;DATA;FC3;0;51;1000;"""
IF DATA.Q THEN
    ITEM.0.WIND_DIRECTION:=DATA.1.WORD;
    ITEM.0.WIND:=DATA.2.FLOAT;
    ITEM.0.TEMPERATURE:=DATA.4.FLOAT;
    ITEM.0.HUMIDITY:=DATA.6.FLOAT;
    ITEM.1.POSITION_QUALITY:=DATA.17.WORD;
    IF ITEM.1.POSITION_QUALITY == 0 THEN
        ITEM.1.POSITION_ALTITUDE:=DATA.37.FLOAT;
    ELSE
        ITEM.1.POSITION_ALTITUDE:=0;
    ENDIF;
    ITEM.0.BRIGHTNESS_SOUTH:=DATA.29.FLOAT/1000;
    ITEM.0.UV_INDEX:=DATA.16.WORD/10;
ENDIF;
"""

(gekürzt) Erläuterungen:

Fallstricke

Checkliste