Verständnis der LRC - und CRC-Verifikation von Modbus

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Verständnis der LRC - und CRC-Verifikation von Modbus

Die Modbus-Kommunikation basierend auf seriellen Verbindungen erfordert eine Fehlerprüfung, die je nach Übertragungsmodus (ASCII oder RTU) unterschiedliche Prüfmethoden für die Fehlerprüfung verwendet.

  • ASCII-Modus- Das Prüffeld besteht aus zwei Zeichen, deren Wert auf dem Ergebnis einerLRC- Überprüfung (Longitudinal Redundancy Check) basiert. Das berechnete Objekt beinhaltet nicht das anfängliche Doppelpunkt (:) und das Wagenrückkehrzeichen (CRLF).
  • RTU-Modus- - Das Prüffeld besteht aus 16 Bits (zwei Bytes), dessen Wert basiert auf der Ausführung des gesamten Inhalts der NachrichtCRC Das Ergebnis der Berechnungen der Cyclic Redundancy Check (Cyclic Redundancy Check) Das berechnete Objekt umfasst alle Bytes vor dem Prüffeld.

LRC-Prüfung

Die LRC-Prüfung ist relativ einfach und wird im ASCII-Protokoll verwendet, um den Inhalt des Nachrichtenfelds mit Ausnahme des Doppelpunkts am Anfang und des endenden Wagenrückkehrzeilen zu erkennen. Es ist einfach, jede Daten, die übertragen werden müssen, in Byte zu überlagern (alle Carries fallen lassen) und dann binäre Ergänzungs-Operationen auf das Ergebnis durchzuführen.

Hier ist der spezifische Code für die LRC-Prüfungen:

unsigned char LRC(unsigned char *auchMsg, unsigned short usDataLen)
{
    unsigned char uchLRC = 0;
    while (usDataLen--)
        uchLRC += *auchMsg++;
    return ((unsigned char)(-((char)uchLRC)));
}

Im Algorithmus ist das LRC-Feld selbst nur 1 Byte groß, aber wenn ein Nachrichtenframe im ASCII-Modus übertragen wird, wird der LRC-Wert als 2 - Byte-ASCII - Zeichen kodiert. Zum Beispiel wird der berechnete LRC-Wert 0xF3 in ASCII-Nachrichtenframe als 'F' und '3' dargestellt.

CRC-Check

Das CRC-Feld besteht aus zwei Byte und enthält einen 16 - Bit-Binärwert. Es wird vom Übertragungsgerät berechnet und der Nachricht hinzugefügt. Das empfangende Gerät berechnet die CRC der empfangenen Nachricht neu und vergleicht sie mit dem Wert im empfangenen CRC-Feld, wenn sich die beiden Werte unterscheiden, gibt es einen Fehler.

CRC ruft zuerst ein 16 - Bit-Register mit einem Wert von „1" auf und ruft dann eine Prozedur auf, um die Werte in den aktuellen Registeren der aufeinanderfolgenden 8 - Bit-Bytes in der Nachricht zu verarbeiten. Nur 8 Datenbits pro Zeichen sind für CRC gültig, die Start - und Stop-Bits sowie die Paritätsbits sind nicht gültig. Während der CRC-Generation wird jedes 8 - Bit-Zeichen einzeln mit dem Registerinhalt OR (OR) und das Ergebnis wird in die Richtung des am wenigsten signifikanten Bits verschoben, wobei das höchste signifikante Bit mit 0 gefüllt ist. LSBs werden extrahiert, um zu erkennen, wenn LSB ist 1, Register allein und vordefinierten Wert oder ein paar, wenn LSB ist 0, nicht durchgeführt. Der gesamte Prozess wird achtmal wiederholt. Nachdem der letzte Bit (Bit 8) fertig ist, wird das nächste 8 - Bit-Byte allein mit dem aktuellen Wert des Registers OR. Der Wert im endgültigen Register ist der CRC-Wert, nachdem alle Bytes der Nachricht ausgeführt wurden.

Hier ist der spezifische Code für die CRC-Prüfungen:

unsigned short CRC16(unsigned char *puchMsg, unsigned short usDataLen)
{
    int i, j;
    unsigned short usRegCRC = 0xFFFF;
    
    for (i=0; i<usDataLen; i++)
    {
        usRegCRC ^= *puchMsg++;
        for (j=0; j<8; j++)
        {
            if (usRegCRC & 0x0001)
                usRegCRC = usRegCRC >> 1 ^ 0xA001;
            else
                usRegCRC >>= 1;
        }
    }
    
    return usRegCRC;
}

Im Modbus-RTU - Modus wird festgelegt, dass der CRC-Prüfwert bei der Übertragung eines Nachrichtenframes in der Reihenfolge vor dem niedrigen Bytes und nach dem höheren Bytes liegen muss. Zum Beispiel ist der berechnete CRC-Wert 0xCA31, so dass die Sendefolge 0x31, 0xCA ist.

Die oben genannte CRC16 - Berechnungsmethode ist nicht optimal, da sie eine Menge Berechnungen erfordert und nur für Geschwindigkeitsunempfindliche Anwendungen geeignet ist. Wenn es Anforderungen an die Berechnungsgeschwindigkeit gibt, kann die Tabellensuchmethode verwendet werden, um den Prüfwert zu erhalten, eine Strategie, die Raum für Zeit verwendet.

Relevante Etiketten
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.