EngyVolt RV15
handen sein. Es besteht keine Möglichkeit zur Deaktivierung. Die Fehlerprüfbyte repräsentieren
einen 16 Bit Binärwert, der durch das übertragende Gerät errechnet wird. Das empfangende
Gerät muss diesen CRC-Wert während des Empfangs der Nachricht erneut berechnen und mit
dem Wert des empfangenen Fehlerprüfbyte vergleichen. Falls die beiden Werte nicht überein-
stimmen, ist die Nachricht zu verwerfen.
Die Fehlerprüfberechnung wird gestartet, in dem zunächst ein 16 Bit Register zu allen 1. (z.B.
Hex(FFFF) je aufeinanderfolgendem 8-Bit-Byte der Nachricht, zu den Inhalten aller Register
beaufschlagt wird.
Nur die 8 Bit der Daten einer übermittelten Nachricht werden zur Generierung des CRC
genutzt. Startbit, Stoppbit und ein ggf. verwendetes Paritätsbit sind im Fehlerprüfbyte nicht
enthalten. Während der Erzeugung des Fehlerprüfbyte wird jedes 8-Bit-Byte der Nachricht,
in der unteren Hälfte des 16-Bit Registers, mit XOR (Exlusiv Oder) beaufschlagt.
Das Register wird dann 8 mal in die Richtung des niedrigstwertigen Bit (LSB) verschoben, wobei
in die Position des höchstwertigen Bit eine „0" geschrieben wird. Nach jeder Verschiebung des
LSB, vor erneuter Verschiebung, wird das LSB extrahiert und untersucht. Falls das LSB den Wert
„1" aufweist, wird das Register mit einem vorgegebenen festen XOR-Wert beaufschlagt. Falls das
LSB den Wert „0" aufweist, wird keine XOR- Beaufschlagung vorgenommen. Dieser Vorgang
wird solange wiederholt, bis 8 Verschiebungen durchgeführt wurden. Nach der letzten Verschie-
bung wird das nächste 8-Bit-Nachrichtenbyte mit XOR in der unteren Hälfte des 16-Bit-Registers
beaufschlagt und der Vorgang wiederholt sich. Der endgültige Wert des Registers, nachdem alle
Byte der Nachricht beaufschlagt wurden, ergibt die Fehlerprüfsumme. Im folgenden Pseudo-Code
stellt „ErrorWord (Fehlerwort)" einen 16-Bit-Fehlerprüfwert dar.
BEGIN
ErrorWord = Hex (FFFF)
FOR Each byte in message
ErrorWord = ErrorWord XOR byte in message
FOR Each bit in byte
LSB = ErrorWord AND Hex (0001)
IF LSB = 1 THEN ErrorWord = ErrorWord – 1
ErrorWord = ErrorWord / 2
IF LSB = 1 THEN ErrorWord = ErrorWord XOR Hex (A001)
NEXT bit in byte
NEXT Byte in message
END
11.4.6
Funktionscodes
Der Teil des Funktionscodes einer Modbus-Nachricht definiert die auszuführende Aktion des
„Slave". EngyVolt-Geräte unterstützen die folgenden Funktionscodes.
Code
Modbus-Protokoll-Name
03
Lesen der Halteregister
04
Lese Eingaberegister
08
Diagnose
16
Voreinstellung mehrerer Register
11.4.7
IEEE Gleitkommaformat
Das Modbus-Protokoll definiert 16-Bit-Register für die Datenvariablen. Allerdings würde sich ein
16-Bit-Ausdruck als zu eingeschränkt z.B. für Energieparameter erweisen, da der maximale Wert
eines 16-Bit-Ausdrucks 65535 beträgt. Es wurden daher verschiedene Zugriffe realisiert, um die
Beschreibung
Liest den Inhalt von Lese/Schreib-Punkten (4X Referen-
zen)
Liest den Inhalt der nur Lesen-Punkte
Nur die Unterfunktion „Null" wird unterstützt. Das Daten-
format der Anfrage wird unverändert zurückgemeldet.
Stellt den Inhalt von Schreib/Lese-Punkten ein (4X Refe-
renzen)
Anhang
53