DDF-Handbuch / Teil A – Protokoll-DDF

SERCOM

Konzept

SERCOM ist die generische serielle Kommunikation (ASCII oder binär) für Geräte mit eigenem Telegrammprotokoll, etwa Wetterstationen, RFID-Leser oder proprietäre Busse. Eine Funktion beschreibt ein Telegramm: was gesendet wird, wie die Antwort begrenzt ist und wie lang sie ist. PROTOCOL beginnt mit SERCOM (auch SERCOM(new)).

Parameter

Key Default Beschreibung
CONNECTION – SERIALPORT, SERIALPORT+, IPADDRESS
SERIALPORT, SERIALPORT_NODE, IPADDRESS_NODE – Schnittstelle
BAUDRATE, DATABITS, STOPBITS – seriell
PARITY – nur das erste Zeichen zählt (N/O/E)
FLOWCONTROL – NO/SW/HW
TIMEOUT 5000 ms Antwort-Timeout
WAIT_AFTER_SEND – ms Wartezeit nach dem Senden
ACTION_AFTER_RECEIVE CLEARIN NONE, CLEARIN, CLEAROUT, CLEARINOUT (Puffer leeren)

Spalten

Spalte Beschreibung
ALIAS Name
SEND zu sendender Inhalt (Text, Hexbytes \XX…, mit Argumenten)
SEND_DELIMITER_START / SEND_DELIMITER_END Start-/Endzeichen des Sendetelegramms
RECEIVE_LEN erwartete Antwortlänge in Byte (max. 1024)
DATATYPE ASCII (intern ASCCI, =0) oder BYTE (=1)
DELIMITER_START / DELIMITER_END Start-/Endkennung der Antwort
POLLING ms
CRC wird eingelesen. Die Verwendung ist zu klären.
FORMULA Auswertung

Delimiter-Notation: \ gefolgt von Hexbytes, z. B. \02 (STX), \03 (ETX), \0D0A (CR LF), \030D0A (ETX CR LF).

Wann wird gesendet?

Eine SERCOM-Funktion sendet nur in der PREPROCESS-Phase (*READ) oder wenn ihr Flag .F gesetzt ist.

Argumente

;*ARGS;METHOD;ALIAS;TYPE;NAME;VALUE;ITEM;FORMAT; (Spalte nach ARGS = Funktions-Alias). Bei SERCOM ist NAME ein printf-Format, in das der Wert eingesetzt wird. FORMAT kann DEZIMAL, FLOAT, STRING, DAY, ISO8601, ENUM:…, T_YYYYMMDDHHMM oder ein %-Format (s, g, f, X, x, c) sein.

Zugriff auf die Antwort

Ausdruck Bedeutung
<A>.DATA gesamte Antwort
<A>.<start>.<len>.STRING Teilstring ab Byte start (Länge len). Position 0 ist das erste Zeichen des Telegramms, laut Elsner-Beispiel der Start-Delimiter (W).
<A>.<start>.<len>.INT als Ganzzahl interpretiert
<A>.<start>.<len>.FLOAT als Gleitkomma interpretiert
<A>.<start>.<len>.HEX als Hexwert interpretiert
<A>.<start>.<len>.BYTESUM Summe der Bytes (z. B. für Prüfsummen)
<A>.<pos>.<a,b,c> liefert den Index der Option, die an Position pos steht (z. B. N,S → 0/1)
<A>.ARG.<name> Argument

Realer Auszug: Elsner P04/3-RS485 basic

Datei Elsner.Weather station.SERCOM (DDF).P043-RS485 basic.1(0x0900004000010100).csv (vollständiger Funktionsteil). Die Station sendet zyklisch ein ASCII-Telegramm, das mit W beginnt und mit ETX (\03) endet.

*GENERAL;
;DEVICE;P04/3-RS485-basic;
;MANUFACTURER;Elsner;
;TYPE;Weather station;
;PROTOCOL;SERCOM(new);
;MODEL_NR;7;
;VERSION_NR;1;
;ID;0x0900004000010100;
;CONNECTION;SERIALPORT+;0:SERIALPORT,1:SERIALPORT+,2:IPADDRESS,3:DOMAIN;
;BAUDRATE;19200;
;DATABITS;8;
;STOPBITS;1;
;PARITY;NONE;NONE,ODD,EVEN;
;FLOWCONTROL;NO;NO,SW,HW;
;TIMEOUT;5000;ms;
;WAIT_AFTER_CONNECT;2;s;
;MIN_PAUSE;50;ms;
;ERROR_HANDLING;FLUSH_OR_RECONNECT_ON_ERROR;
;ACTION_AFTER_RECEIVE;CLEARINOUT;
*PREPROCESS;ALIAS;SEND;RECEIVE_LEN;DATATYPE;DELIMITER_START;DELIMITER_END;POLLING;FORMULA;
;READ;;26;ASCII;W;\03;500;"""
ITEM.QUALITY:= READ.T>($.SYS.TIME-20) && READ.Q;
ITEM.SUMDATA:=READ.0.21.BYTESUM;
ITEM.CHECKSUM:=READ.21.4.INT;
ITEM.DATALEN:=READ.L;
ITEM.ERRORCOUNT:=READ.EC;
IF ITEM.DEBUG==1 THEN
    DEBUG(READ.T,READ.Q,READ.EC,READ.L,READ.0.21.BYTESUM,READ.21.4.INT);
ENDIF;
IF (ITEM.SUMDATA == ITEM.CHECKSUM) THEN
    CHECK_OK:=1;
ELSE
    CHECK_OK:=0;
ENDIF;
IF CHECK_OK && READ.Q THEN
    ITEM.TEMPERATURE:=READ.1.5.FLOAT;
    ITEM.BRIGHTNESS_SOUTH:=READ.6.2.INT;
    ITEM.BRIGHTNESS_WEST:=READ.8.2.INT;
    ITEM.BRIGHTNESS_EAST:=READ.10.2.INT;
    ITEM.TWILIGHT_ON:=READ.12.N,J;
    ITEM.TWILIGHT:=READ.13.3.INT;
    ITEM.WIND:=READ.16.4.FLOAT;
    ITEM.RAIN_ON:=READ.20.N,J;
    ITEM.ERRORCOUNT:=0;
ELSE
    ITEM.ERRORCOUNT:=1;
ENDIF;
""";
*ITEM;ALIAS;NAME;VISIBILITY;ID;UNIT;TYPE;DEFAULT;WFORMULA;RFORMULA;POLLING
;TEMPERATURE;Temperatur outside;;0;C;
;BRIGHTNESS_SOUTH;Sun south;;1;klx;
;TWILIGHT_ON;Twilight indication;;4;
;WIND;Wind;;6;m/s;
;RAIN_ON;Raining;;7;
;SUMDATA;Sumdata helper;;210;
;CHECKSUM;Checksum;;211;
;QUALITY;Quality;;201;
;INFO;Info;;204;;STRING;Elsner P04/3-RS485-basic;

Was der Auszug zeigt:

Fallstricke

Checkliste