Modbus-CRC- und LRC-Rechner

CRC-16 eines Modbus-RTU-Telegramms oder LRC eines Modbus-ASCII-Telegramms berechnen oder prüfen und alle in den Bytes enthaltenen Felder lesen.

Modbus und serielle Verbindungen Aktualisiert Kostenlos, ohne Anmeldung

CRC-16, RTU

Zum Senden dieses Telegramms C5 CD anhängen. Ein eingefügtes Telegramm mit eigener CRC-Prüfsumme wird stattdessen geprüft.

Halteregister lesen, Anfrage

BytesFeldWertBedeutung
01Unit-Adresse1Server, für den dieses Telegramm bestimmt ist oder von dem es stammt
03Funktion0x03Halteregister lesen
00 00Startadresse0Halteregister 40001, Protokolladresse 0x0000
00 0AAnzahl1010 Halteregister; die Antwort enthält 20 Datenbytes
C5 CDCRC-160xCDC5Niederwertiges Byte zuerst

Vollständiges Telegramm

  • Mit Leerzeichen01 03 00 00 00 0A C5 CD
  • C-Array0x01, 0x03, 0x00, 0x00, 0x00, 0x0A, 0xC5, 0xCD
  • Ohne Trennzeichen01030000000AC5CD
  • Modbus ASCII, dann CR LF:01030000000AF2
CRC Byte für Byte

Das Register beginnt bei 0xFFFF. Jedes Byte wird per XOR mit seinem niederwertigen Byte verknüpft, dann achtmal nach rechts geschoben und mit 0xA001 verknüpft, sobald eine 1 herausfällt.

ByteWertRegister danach
1010x807E
2030x2140
3000xF020
4000xD8F1
5000x8419
60A0xCDC5

Das Register endet bei 0xCDC5 und wird mit dem niederwertigen Byte zuerst übertragen: C5 CD.

Prüfverfahren
Prüfverfahren
Telegramm

Beispiele

Ab der Unit-Adresse. Zum Prüfen mit CRC einfügen

CRC-Bytes in Übertragungsreihenfolge

C5 CD

Halteregister lesen: Anfrage an Unit 1.

CRC-Wert
0xCDC5
Vollständiges Telegramm
01 03 00 00 00 0A C5 CD
Telegrammlänge mit CRC
8 Bytes

Modbus überträgt das niederwertige CRC-Byte zuerst.

So wird es berechnet
  1. CRC = CRC-16/MODBUS(Telegramm), Start 0xFFFF, Polynom 0xA001=01 03 00 00 00 0A=0xCDC5
  2. Niederwertiges Byte zuerst übertragen=0xCDC5 → C5 CD

Choose the gateway connection for this Modbus line.

System zusammenstellen

Der Modbus-CRC-16 von 01 03 00 00 00 0A ist 0xCDC5; er wird mit dem niederwertigen Byte zuerst als C5 CD übertragen.

Tipp: Fügen Sie ein Telegramm direkt aus einer seriellen Aufzeichnung ein, einschließlich CRC. Wenn der Funktionscode die Länge festlegt, werden die letzten Bytes geprüft; das Ergebnis zeigt, ob die Prüfsumme übereinstimmt.

Modbus-CRC-16 berechnen

Jedes Modbus-RTU-Telegramm endet mit einem 16-Bit-CRC über alle vorhergehenden Bytes; bei der Übertragung kommt das niederwertige Byte zuerst. Ermittelt ein Gerät einen anderen CRC, verwirft es das Telegramm ohne Antwort. Deshalb zeigt sich ein falscher CRC als Zeitüberschreitung und nicht als Ausnahme. Modbus ASCII verwendet stattdessen einen einfacheren LRC aus einem Byte. Der Rechner ermittelt beide und zeigt das Telegramm Byte für Byte.

CRC-16 (Modbus RTU)

Start 0xFFFF; für jedes Byte: XOR, dann 8 × (nach rechts schieben; fällt eine 1 heraus, XOR mit 0xA001)

Beginnen Sie mit 0xFFFF. Verknüpfen Sie das erste Byte per XOR mit dem niederwertigen Registerbyte. Schieben Sie danach achtmal nach rechts und verknüpfen Sie nach jedem Schieben, bei dem eine 1 herausfällt, per XOR mit 0xA001. Wiederholen Sie dies für jedes Byte von der Unit-Adresse bis zum letzten Datenbyte.

Bytefolge bei der Übertragung

CRC 0x8776 → übertragen als 76 87

Der CRC ist das einzige Feld in einem Modbus-Telegramm, das mit dem niederwertigen Byte zuerst übertragen wird. Alle anderen Felder, auch Adressen und Registerwerte, werden mit dem höherwertigen Byte zuerst übertragen.

LRC (Modbus ASCII)

LRC = (0x100 − (Bytesumme mod 0x100)) mod 0x100

Addieren Sie Adress-, Funktions- und Datenbytes, verwerfen Sie Überträge über 8 Bit hinaus und bilden Sie das Zweierkomplement. Es wird als zwei Hex-Zeichen nach den Daten und vor CR LF übertragen.

Beispiele: Modbus-CRC

Drei Halteregister von Unit 17 lesen

Unit 0x11 (17), Funktion 03, ab Adresse 0x006B, drei Register: die Anfrage aus dem Leitfaden für die serielle Modbus-Leitung. Der CRC ist 0x8776 und wird als 76 87 übertragen. Das vollständige Telegramm lautet daher 11 03 00 6B 00 03 76 87.

CRC-Bytes in Übertragungsreihenfolge 76 87 Im Rechner öffnen

Dieselbe Anfrage in Modbus ASCII

0x11 + 0x03 + 0x00 + 0x6B + 0x00 + 0x03 = 0x82. Das Zweierkomplement ist 0x7E. Der LRC ist damit 7E und die Zeile lautet :1103006B00037E, gefolgt von CR LF.

LRC-Byte 7E Im Rechner öffnen

Ein erfasstes Telegramm prüfen

Eine serielle Aufzeichnung zeigt 01 03 00 00 00 0A C5 CD. Geben Sie die ersten sechs Bytes ein: Der CRC ergibt C5 CD und stimmt mit den letzten beiden erfassten Bytes überein. Der Prüfwert des Telegramms passt damit zu seinen vorangehenden Bytes. Falls die Werte abweichen, prüfen Sie Verkabelung, Abschluss und Störungen, bevor Sie das Gerät verdächtigen.

CRC-Bytes in Übertragungsreihenfolge C5 CD Im Rechner öffnen

CRC und LRC gängiger Modbus-Anfragen

Anfragen an Unit 1 und Unit 17, mit dem CRC in Übertragungsreihenfolge und dem Modbus-ASCII-LRC.

Telegramm (Hex)CRC-16, übertragenLRC
01 03 00 00 00 0184 0AFB
01 03 00 00 00 0AC5 CDF2
01 04 00 00 00 0271 CBF9
01 06 00 01 00 0398 0BF5
11 03 00 6B 00 0376 877E
11 10 00 01 00 02 04 00 0A 01 02C6 F0CB

Diese Tabelle als CSV herunterladen

Fragen zu Modbus-CRC

Warum wird beim Modbus-CRC das niederwertige Byte zuerst übertragen?

Das folgt aus der CRC-Berechnung, die beim niederwertigsten Bit beginnt und nach rechts schiebt. Die Modbus-Spezifikation für serielle Leitungen legt die Reihenfolge fest: erst das niederwertige, dann das höherwertige Byte. Werkzeuge mit der Anzeige 0x8776 und Telegramme mit der Endfolge 76 87 sind beide korrekt.

Was geschieht bei einem falschen CRC?

Das Gerät verwirft das Telegramm und antwortet nicht; der Master sieht eine Zeitüberschreitung. Für einen falschen CRC sendet das Gerät keine Ausnahme. Wiederholte CRC-Fehler weisen häufig auf Abschluss, Bias-Widerstände, Erdung oder Leitungsführung hin.

Verwendet Modbus TCP einen CRC?

Nein. Modbus TCP stützt sich auf die Fehlerprüfung von TCP und ersetzt den CRC durch den MBAP-Header. Ein Gateway zwischen TCP und RTU ergänzt beziehungsweise entfernt den CRC.

Welche CRC-Variante verwendet Modbus?

CRC-16/MODBUS: Polynom 0x8005 in reflektierter Form (0xA001), Anfangswert 0xFFFF, kein abschließendes XOR.

Grenzen dieses Ergebnisses

  • Ein übereinstimmender CRC belegt nur, dass die eingegebenen Bytes die Prüfsumme ergeben; er bestätigt weder Funktion, Adresse, Anzahl noch Geräteantwort.
  • Modbus-TCP-Telegramme enthalten keinen CRC; der MBAP-Header wird hier nicht erstellt.

Kontinuierlich messen

Ein ZMB erstellt und prüft die RTU-Telegramme selbst. Er fragt das Modbus-Gerät vor Ort über RS-485 ab und sendet die Daten über das drahtlose Mesh-Netz an das Gateway.

Verwandte Leitfäden

Quellen

  1. MODBUS over Serial Line Specification and Implementation Guide V1.02 (öffnet in einem neuen Tab) (PDF) Modbus Organization, 2006-12-20
  2. SCADAPack E Modbus frame diagnostics example (öffnet in einem neuen Tab) Schneider Electric, modified 2025-08-18