CRC-CCITT berechnen

Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe einen elektronischen Drehstromzähler Marke ISKRA eHZ-EDL Typ MT681 (Das ist ein normaler neuzeitlicher Einrichtungszähler).
Aus diesem möchte ich die aktuellen Daten auslesen und habe zu dem Zweck die optische Schnittstelle mit einem Auslesekopf (Optical Probe OP-300) per RS-232 abgefragt.
So weit klappt das prima; ich kann mit dem Terminalprogramm m.E. sinnvolle SML-Datenpakete empfangen.

Laut SML-Spezifikation (https://www.bsi.bund.de/SharedDocs/...ttstelle_Teilb.pdf?__blob=publicationFile&v=2) beginnt ein Telegramm mit vier mal '1B' (Start Telegramm) , dann kommt vier mal '01' (Start SML-V.1-Nachricht) gefolgt von den Nutzdatenpaketen. Am Ende des Telegramms erscheint wieder vier mal '1B', dann '1A', ein Füllbyte und als letzte zwei Bytes eine Prüfsumme gemäß 16 Bit CRC-CCITT. Hier liegt nun mein Problem: ich komme beim Überprüfen nicht auf diese Prüfsumme.

Wenn ich das komplette Datenpaket ohne die letzten zwei Bytes in einen der Online-CRC-Rechner kopiere (http://www.sunshine2k.de/coding/javascript/crc/crc_js.html) müsste doch die dort angezeigte Prüfsumme mit der im Telegramm mitgeschickten übereinstimmen ?
Bzw. wenn ich die komplette SML-Nachricht inklusive der letzten beiden Bytes berechnen lassen, müsste 'Null' herauskommen.

Soweit die Theorie; ich habe als Generatorpolynom CRC-CCITT (x^16 + x^12 + x^5 + 1) sowohl in Form von 16#1021 als auch bitreihenfolgengedreht in Form von 16#8408 ausprobiert, einen CRC-Startwert von 16#FFFF (laut Spezifikation) oder 16#0000 und so fort.
Wo ist da mein Denkfehler ?

Anbei mal zwei der mitgeschriebenen Telegramme, eins normgerecht geloggt mit 8N1, das andere versuchsweise mit 7E1 (las ich an einer anderen Stelle als Kommunikationseinstellung). Irgendeine Idee ??

Anhang anzeigen SML-Block aus Stromzähler (7E1).txtAnhang anzeigen SML-Block aus Stromzähler (8N1).txt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Oliver,

> Hast Du schon mal probiert nur das Nutzdatenpaket für die Prüfsumme zu nehmen ?

Klar. Ich nehme das Telegramm ohne die letzten beiden Bytes und fülle es in alle Online-CRC-Rechenprogramme ein, die ich gefunden habe. Das ist ja der erste Schritt, bevor ich überhaupt anfange, eine eigene Auswertung zu programmieren. Aber ich komme nicht auf die vom Zähler gesendete Bytefolge..
 
Das meinte ich nicht, ich meinte auch ohne die führenden und nachfolgenden Bytes (z.B. 0x1B). Ich hatte zum Beispiel mal mit einem Protokoll zu tun wo auch eine Länge übertragen wurde, die Bytes davon wurden aber nicht in die Prüfsumme eingerechnet. Vielleicht ist das bei Dir mit den festen Bytes ja auch so.

Von irgendwas mit Internetzugang gesendet
 
Ich hab's mal probiert, aber das scheint es auch nicht zu sein.
Die SML-Sprachbeschreibung sagt auch klar:"Prüfsummenberechnung vom 1. bis zum drittletzten Byte" (s. Bild 'SML-Protokollaufbau'"
SML-Protokollaufbau.jpg
Hier dieser Online-Rechner ist auch schön, da sieht man mehrere Möglichkeiten parallel: http://www.tahapaksu.com/crc/

Ich probiere es jetzt mal mit den 16#8810, die dort erwähnt sind..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gelöst !!

Prima, alleine durch ins Forum schreiben hat sich das Problem nach drei Tagen gelöst: Man muss alles anknipsen, was geht: Eingang und Ausgang 'reflekten' und am Ende nochmal verXODERn.


Mann...

Danke jedenfalls,
Michael
 

Anhänge

  • Lösung.jpg
    Lösung.jpg
    105,5 KB · Aufrufe: 44
Zurück
Oben