3.5.2
CRC Überprüfung
Die Fehlerprüfbytes der Modbus-Nachricht beinhalten einen Wert der zyklischen Redundanzprüfung (Cyclical
Redundancy Check-CRC), der zur Prüfung des Inhaltes der gesamten Nachricht genutzt wird. Das
FehlerprüfByte muss, um dem Modbus-Protokoll zu entsprechen, immer vorhanden 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 übereinstimmen, ist die Nachricht zu verwerfen.
Die Fehlerprüfberechnung wird gestartet, indem zunächst ein 16 Bit-Register zu allen 1. (z.B. Hex(FFFF) je
aufeinander folgendem 8 Bit Byte der Nachricht, zu den Inhalten aller Register beaufschlagt wird. Hinweis: Nur
die 8 Bit der Daten eines übermittelten Charakters werden zur Generierung des CRC genutzt. Startbit, StoppBit
und ein ggf. verwendetes Paritätsbit, sind in 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 am wenigsten signifikanten Bit (LSB) verschoben, wobei in
die Position des am meisten signifikanten Bit eine „0" geschrieben wird. Nach jeder Verschiebung des LSB, vor
erneuter Verschiebung wird LSB extrahiert und untersucht. Falls LSB den Wert „1" aufweist, wird das Register
mit einem vorgegebenen festen XOR-Wert beaufschlagt. Falls LSB den Wert „0" aufweist, wird keine
XOR-Beaufschlagung vorgenommen.
Dieser Vorgang wird solange wiederholt, bis 8 Verschiebungen durchgeführt wurden. Nach der letzten
Verschiebung 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-Kode stellt „ErrorWord
(Fehlerwort)" einen 16 Bit-Fehlerprüfwert dar.
BEGIN
ErrorWord = Hex (FFFF)
FOR Each Byte in message
NEXT Byte in message
END
3.6
Funktionskodes
Der Teil des Funktionskodes einer Modbus-Nachricht definiert die auszuführende Aktion des „Slave".
Integra-Messinstrumente unterstützen die folgenden Funktionskodes.
Code / Kode
MODBUS Name
03
Read Holding Registers /
Lesen der Halteregister
04
Read Input Registers / Lese
Eingaberegister
08
Diagnostics / Diagnose
16
Pre-set Multiple Registers /
Voreinstellung mehrerer
Register
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
Description / Beschreibung
Read the contents of read/write location
(4X references) / Liest den Inhalt von Lese/Schreib-Punkten (4X-
Referenzen)
Read the contents of read only location
(3X references) / Liest den Inhalt der nur Lesen-Punkte
Only sub-function zero is supported. This returns the data
element of the query unchanged / nur die Unterfunktion „null" wird
unterstützt. Das Datenformat der Anfrage wird unverändert
zurückgemeldet
Set the contents of read/write location
(4X references) / Stellt den Inhalt von Schreib / Lese- Punkten ein
(4X-Referenzen)
18