CRC-16-Modbus-Pruefsumme
Eine Modbus-RTU-Anfrage, die ab Register 0 zehn Register von Gerät 1 liest, erhält die CRC CDC5, gesendet als C5 CD. Fügen Sie einen Rahmen als Hex oder Text ein und erhalten Sie den 16-Bit-Wert mit seinen Bytes in Senderreihenfolge. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- Text
- 123456789
- CRC (Hex)
- 4B37
- CRC (Ganzzahl)
- 19.255
- Crc lo
- 37
- Crc hi
- 4B
CRC-16 Modbus ist die zyklische Redundanzprüfung, die fast jeden Modbus-RTU-Rahmen auf seriellen Leitungen und vielen industriellen Bussen abschließt. Programmierer, SPS-Integratoren und Protokolltester brauchen eine einzige deterministische Zahl, wenn sie eine Anfrage bauen, eine Antwort prüfen oder ein beschädigtes Paket auf der Leitung debuggen. Diese Fähigkeit akzeptiert entweder reinen UTF-8-Text oder einen Hex-Dump von Bytes, führt den Standardalgorithmus CRC-16/MODBUS mit Polynom 0xA001 und Startwert 0xFFFF aus und liefert das sechzehnbitige Ergebnis in Großbuchstaben-Hexadezimal zusammen mit den Low- und High-Bytes in der Modbus-Übertragungsreihenfolge.
Wozu die CRC am Ende jedes Modbus-Rahmens dient
Fast jeder Modbus-RTU-Rahmen auf seriellen und vielen industriellen Bussen endet mit einer 16-Bit-Prüfsumme. Sie entsteht, indem jedes Datenbyte durch ein festes Polynom geschoben wird, sodass schon ein einzelnes gekipptes Bit das Ergebnis fast immer verändert. Modbus nutzt dafür das gespiegelte Polynom A001, das in nicht gespiegelter Form 8005 entspricht, und startet das Register bei FFFF, ohne abschließende Maske. Mit genau diesem Wert bauen Sie eine Anfrage, prüfen eine Antwort oder finden ein beschädigtes Paket auf der Leitung.
Bytefolge, Hex-Eingabe und typische Fehler
Die fertige Prüfsumme wird mit dem Low-Byte zuerst angehängt, danach folgt das High-Byte. Genau diese Reihenfolge erwarten Elektriker und Protokollanalysatoren auf dem Oszilloskop oder im Mitschnitt. Mitschnitte aus einem seriellen Sniffer fügen Sie im Hex-Modus ein; Trennzeichen und 0x-Präfixe werden entfernt, eine ungerade Ziffernzahl gilt als Fehler. Im Textmodus zählen die UTF-8-Bytes des eingegebenen Textes. Viele Online-Rechner verwenden andere Startwerte oder Polynome und weichen still von der SPS ab, deshalb lohnt der Abgleich mit dem bekannten Wert 4B37 für 123456789.
Was CRC-16 Modbus ist und warum industrielle Werkzeuge es brauchen
Eine zyklische Redundanzprüfung faltet jedes Datenbyte durch ein festes Polynom, sodass ein einzelnes gekipptes Bit den Residualwert fast immer ändert. Modbus RTU übernahm eine bestimmte sechzehnbitige CRC: der Generator ist das reflektierte Polynom 0xA001 (äquivalent zu 0x8005 in nicht reflektierter Form), das Register startet bei 0xFFFF, jedes Datenbyte wird per XOR in die niedrigen acht Bits einbezogen, und pro Byte folgen acht Verschiebe- und bedingte XOR-Schritte ohne finales XOR.
Das resultierende sechzehnbitige Wort wird dem Rahmen zuerst Low-Byte, dann High-Byte angehängt — die Reihenfolge, die Elektriker und Protokollanalysatoren am Oszilloskop oder seriellen Sniffer erwarten. Lehrbücher und Chip-Datenblätter nennen dieses Profil CRC-16/MODBUS; Online-Rechner nutzen manchmal andere Initialwerte oder Polynome und weichen still von einer SPS ab. Dieser Endpunkt codiert das industrielle Profil fest, sodass die Zeichenkette eins-zwei-drei-vier-fünf-sechs-sieben-acht-neun den bekannten Residualwert 0x4B37 ergibt und eine klassische Leseanfrage für Holding-Register wie Adresse eins, Funktion drei, Startregister null, Menge zehn den Wert 0xCDC5 mit Leitungsreihenfolge C5 CD liefert.
Nutzen Sie ihn, wann immer Sie Modbus RTU zusammenbauen oder prüfen, viele Zählerprotokolle mit demselben CRC oder jeden eigenen Binärrahmen, der CRC-16 Modbus namentlich verlangt.
Eingabevertrag, Hex-Parsing und Antwortfelder
Im Textmodus wird die Zeichenkette als UTF-8 kodiert und jedes resultierende Byte geht in die CRC ein; leerer Text ist erlaubt und ergibt Residual FFFF für eine Nutzlast der Länge null. Im Hex-Modus wird die Zeichenkette als Bytesequenz gelesen: optionale 0x-Präfixe, Leerzeichen, Doppelpunkte, Bindestriche, Unterstriche und Kommas werden zuerst entfernt; die restlichen Zeichen müssen ausschließlich hexadezimale Ziffern in gerader Anzahl bilden. Fehlgeschlagene Validierung wird nicht berechnet.
Halten Sie Nutzlasten im Browser bescheiden; der Algorithmus ist linear in der Bytenlänge und vollständig im Speicher.
Anwendungsfälle
Capture-Analyse und Debugging
Fügen Sie Hex-Dumps eines seriellen Sniffers im Hex-Modus ein, um die CRC neu zu berechnen und abgeschnittene oder beschädigte Industrierahmen rasch zu erkennen.
Häufige Fragen
Welches Polynom und welchen Startwert verwendet sie?
CRC-16/MODBUS: reflektiertes Polynom 0xA001, Initialregister 0xFFFF, kein finales XOR. Das entspricht SPS- und Zählerimplementierungen auf Modbus RTU.
In welcher Reihenfolge werden die CRC-Bytes im Modbus-Rahmen gesendet?
Zuerst das Low-Byte, dann das High-Byte. Eine CRC von 4B37 läuft also als 37 und danach 4B über die Leitung, so wie es ein Oszilloskop oder ein serieller Mitschnitt zeigt. Sie erhalten beide Bytes getrennt und in Senderreihenfolge.
Kann ich einen Hex-Mitschnitt eines seriellen Sniffers einfügen?
Ja. Wählen Sie den Hex-Modus und fügen Sie die Bytes ein: Leerzeichen, Doppelpunkte, Bindestriche, Unterstriche, Kommas und 0x-Präfixe werden zuerst entfernt. Übrig bleiben muss eine gerade Anzahl Hexziffern, sonst meldet das Werkzeug fehlerhaftes Hex.
Warum liefert ein anderer Online-Rechner eine andere CRC?
Manche Rechner nutzen einen anderen Startwert oder ein anderes Polynom und widersprechen einer SPS stillschweigend. Prüfen Sie mit dem Text 123456789: CRC-16 Modbus muss 4B37 ergeben. Jedes andere Ergebnis deutet auf ein anderes Profil.
Lässt sich die CRC einer leeren Nachricht berechnen?
Ja. Im Textmodus ist eine leere Eingabe erlaubt und ergibt FFFF, den Startwert des Registers, weil kein Byte verarbeitet wurde. Jeder andere Text wird vor der Berechnung als UTF-8 kodiert.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/enc/crc16-modbus \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"123456789"}'const res = await fetch("https://api.kit.forhosting.com/enc/crc16-modbus", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "123456789"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/crc16-modbus",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "123456789"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/crc16-modbus", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"123456789"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"123456789"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/crc16-modbus", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"text": "123456789"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.crc16_modbus",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Fehlerhaftes Hex — ungerade Ziffernanzahl oder Nicht-Hex-Zeichen — scheitert mit invalid_input, statt eine Prüfsumme zu erfinden.
Eingabevertrag, Hex-Parsing und Antwortfelder
Senden Sie per POST einen JSON-Body mit dem Pflicht-Stringfeld text und dem optionalen input_format mit Wert text oder hex, Standard text. Eine ungerade Ziffernzahl nach dem Entfernen oder jedes Zeichen außerhalb von null bis neun und A bis F löst invalid_input mit einer Meldung zu fehlerhaftem Hex aus, damit Clients den Fehler neben dem Feld anzeigen können, ohne zu raten. Bei Erfolg enthält der Body crc_hex als vier Großbuchstaben-Hexziffern, crc_int als vorzeichenlose Ganzzahl von null bis fünfundsechzigtausendfünfhundertfünfunddreißig, crc_lo und crc_hi als Low- und High-Bytes dieses Worts, wire_hex als die zweibyteige Little-Endian-Übertragungsreihenfolge von Modbus RTU, byte_count der interpretierten Nutzlast, das zurückgegebene input_format sowie feste Strings algorithm, poly und init, die CRC-16/MODBUS mit 0xA001 und 0xFFFF dokumentieren. Alias-Schlüssel data, payload, value und input sind für die Nutzlast erlaubt; format, mode und encoding aliasieren input_format.
Wo eine CRC-16-Modbus-API ihren Nutzen beweist
Protokoll-Reverse-Engineers und Sicherheitsforscher berechnen Residualwerte über erfassten Verkehr neu, um saubere Rahmen vom Rauschen zu trennen, ohne einen vollen Stack aufzubauen. Content-Sites, die für CRC-16-Modbus-Prüfsumme ranken, gewinnen einen Live-Rechner, dessen freier Pfad byteweise mit dem Automatisierungspfad übereinstimmt. Halten Sie Anfragen deterministisch, heften Sie den bekannten Vektor eins-zwei-drei-vier-fünf-sechs-sieben-acht-neun gleich vier B drei sieben in Regressionssuites an, und Sie erhalten industrielle Reproduzierbarkeit, ohne CRC-Tabellen in jeden Microservice einzubetten. Systemintegratoren skripten die API in Inbetriebnahme-Werkzeugen, die Hunderte Modbus-Lese- und Schreibrahmen für Zähler, Antriebe und entfernte Terminals erzeugen, und heften goldene crc_hex-Werte in der kontinuierlichen Integration an, damit ein Polynom-Tippfehler nie ausgeliefert wird. Kombinieren Sie die Antwort wire_hex mit Ihrem seriellen Schreibpfad, wenn Sie die exakten zwei Trailer-Bytes brauchen, oder nutzen Sie crc_hex, wenn Sie nur den numerischen Residualwert für Protokolle und Unit-Tests brauchen.
Integrationsbeispiele
Zusammenbau von Modbus-RTU-Rahmen
Bauen Sie Adress-, Funktions- und Datenbytes und hängen Sie den zurückgegebenen wire_hex-Trailer an, damit das CRC-Low-Byte zuerst gesendet wird, wie Modbus RTU verlangt.
Firmware- und CI-Golden-Checks
Stellen Sie sicher, dass Gerätecode und serverseitige Werkzeuge beide crc_hex 4B37 für ASCII 123456789 und den dokumentierten Residualwert Ihrer festen Anfragevorlagen erzeugen.
Technische Fragen
Wie berechne ich eine CRC-16-Modbus-Prüfsumme?
Senden Sie text als UTF-8 mit input_format text (Standard) oder eine Hex-Bytes-Zeichenkette mit input_format hex. Die API liefert crc_hex, crc_int, Low-/High-Bytes und wire_hex in Modbus-RTU-Reihenfolge.
Was passiert bei fehlerhafter Hex-Zeichenkette?
Ungerade Ziffernzahl nach dem Entfernen von Trennzeichen oder jedes Nicht-Hex-Zeichen scheitert mit invalid_input und einer Meldung zu fehlerhaftem Hex. Diese Fehler werden nicht berechnet.
Was ist der Unterschied zwischen wire_hex und crc_hex?
crc_hex ist der sechzehnbitige Residualwert als vier Hexziffern (hohes Nibble des High-Bytes zuerst in der Zeichenkette). wire_hex ist Low-Byte dann High-Byte — die Reihenfolge auf der Modbus-RTU-Leitung.
Was kostet das CRC-16-Modbus-Prüfsummenwerkzeug?
Das Browser-Werkzeug ist kostenlos. API-Anfragen nutzen vorausbezahltes KIT-Guthaben zu $0.002 pro erfolgreichem Aufruf; ungültige Eingabe wird nicht berechnet.