TIA CRC-Summe prüfen in Tia Portal.

Nethiros

Level-2
Beiträge
57
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich bin momentan dabei ein Programm zu schreiben, welches das Transponderschlüsselsystem EKS von Euchner nutzt.
Der Transponder kann zusätzlich eine CRC Checksumme berechnen, mit der dann in der SPS Daten auf Richtigkeit überprüft werden können.
Es gibt ein Dokument auf der offiziellen Webseite von Euchner, welches sich mit der Implementierung der Checksumme beschäftigt.

Das Dokument dazu findet ihr hier: EKS CRC - Implementierung

Leider wird in dem Dokument AWL-Code genutzt, mit welchem ich bisher noch nicht arbeiten musste. Generell verstehe ich jedoch auch nicht den Ablauf des Programmes. Was für ein CRC wird genutzt (CRC-16, CRC-32, und dort gibt es ja auch noch Abgrenzungen) und wieso wird im Programm nicht ein CRC Polynom definiert? Ich habe bereits Checksummen vom zugehörigen EKM Programm berechnen lassen, allerdings kann ich das Ergebnis auch nicht reproduzieren. Im Beispiel waren die Eingangswerte 32 30 32 33 und das Ergebnis 1E1F. Hat einer von euch schon einmal mit dem EKS System gearbeitet und weiß wie man die CRC-Checksumme in einem SPS Programm implementieren kann, oder hat jemand mehr Durchblick durch das Dokument als ich und weiß was im SCL-Code stehen müsste?

Vielen Dank für jede Hilfe.
LG Nethiros
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kenne die Euchner Checksumme nicht, aber was ist dir im AWL Code unklar?
Ich bin leider nichts so bewandert in AWL und musste damit bisher noch nicht arbeiten. Die Grundsätze des Programmes kann ich mir wohl ableiten, aber näher verstehen tue ich den Code leider nicht. Generell kann ich leider auch nicht aus der Dokumentation von Euchner genauer verstehen, wie genau bei Euchner der CRC zustande kommt.
 
Was genau?


Hab es mir grob angeschaut.
Da werden in einer Schleife 5 Wörter die Bytes verdreht und addiert (Summe).
Dann wird noch eine KeyId (?) (4 Wörter lang) die Bytes verdreht und auch dazu addiert.
Ich stelle mich vielleicht etwas doof an, aber mir wird einfach nicht klar, inwiefern das Programm einen CRC berechnet. KeyID ist eine Zuordnung (Unikat) für jeden Transponder. Könntest du vielleicht ein sehr kurzes Beispiel für mich erklären, direkt anhand von einer kleinen Bytezahl (z.B. 0x1234 + KeyID (0x5678))?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber deine KeyId müsste doch 4 Wörter bzw. 8 Byte lang sein. Also z.B. 0x5678 9abc def0 1234
Dann müsste es (so wie ich es verstehe), da gerade Anzahl von Nutzbytes (nämlich 2), so sein:

0x2312 //Nutzdaten verdreht
+0x7856 //KeyId verdreht
+0xbc9a //KeyId verdreht
+0xf0de //KeyId verdreht
+0x3412 //KeyId verdreht
=...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber deine KeyId müsste doch 4 Wörter bzw. 8 Byte lang sein. Also z.B. 0x5678 9abc def0 1234
Dann müsste es (so wie ich es verstehe), da gerade Anzahl von Nutzbytes (nämlich 2), so sein:

0x2312 //Nutzdaten verdreht
+0x7856 //KeyId verdreht
+0xbc9a //KeyId verdreht
+0xf0de //KeyId verdreht
+0x3412 //KeyId verdreht
=...
Hm dann habe ich verstanden was der AWL Code macht, allerdings noch nicht inwiefern das dann zur Berechnung einer CRC-Checksumme hilft.
 
EKS FSA an Siemens S7-1200 – An-/Abmeldesystem in PL....

Anhang anzeigen 70626

Downloads: Beispieldateien und Bibliotheken – EKS

Falls der TE kein Tia Portal hat, könnte das Projekt ja jemand für ihr mal aufmachen und ggf. die Quelle hier einstellen.
Ich habe bezüglich der Checksumme nur einen Programmteil im EKS Data Baustein gefunden. Diese Checksumme ist allerdings nicht die Checksumme, die ich benötige, da diese sich nicht auf die Kommunikation zwischen SPS und Transponder, sondern zwischen SPS und Server.
In den anderen Bibliotheken habe ich bisher allerdings noch nicht den Reak_all_EKS Baustein entdeckt. Da muss ich nochmal genauer schauen, in welcher Bibliothek der bei Euchner vorhanden ist.

Checksumme_Server_Hinweis.PNG
 
Ich habe die EKS Prüfsumme mal in einem C# Programm berechnet.
Nicht verwirren lassen, es ist eine Prüfsumme KEINE klassische CRC mit Polynom.
Eigentlich werden nur die Daten Wortweise aufsummiert.

C#:
int crc = 0;

for (int i = 84; i < 114; i += 2) {
    crc += _keyData[i] + (_keyData[i + 1] << 8);
}

for (int i = 0; i < 8; i += 2) {
    crc += _serial[i] + (_serial[i + 1] << 8);
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe die EKS Prüfsumme mal in einem C# Programm berechnet.
Nicht verwirren lassen, es ist eine Prüfsumme KEINE klassische CRC mit Polynom.
Eigentlich werden nur die Daten Wortweise aufsummiert.

C#:
int crc = 0;

for (int i = 84; i < 114; i += 2) {
    crc += _keyData[i] + (_keyData[i + 1] << 8);
}

for (int i = 0; i < 8; i += 2) {
    crc += _serial[i] + (_serial[i + 1] << 8);
}
Dann verstehe ich die von Euchner berechnete Checksumme jedoch nicht. Euchner erstellt selbst im EKM Manager eine Checksumme, die auf dem Transponder zum Vergleich gespeichert werden soll. Diese besteht jedoch nur aus 4 Bytes.
 
Bei meiner Anwendung wurden die Schlüssel von einer 840D mit Siemens HMI PRO gelesen.
Evtl. benutzt Euchner bei dem EKM einen anderen Algorithmus?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei meiner Anwendung wurden die Schlüssel von einer 840D mit Siemens HMI PRO gelesen.
Evtl. benutzt Euchner bei dem EKM einen anderen Algorithmus?
So, ich habe es jetzt herausgefunden. Es werden tatsächlich wie auch schon vorher hier erklärt wurde lediglich alle Bytes gedreht und anschließend addiert. Zum Schluss sind dann die letzten 2 Bytes des Ergebnisses die berechnete Checksumme.
 
Zurück
Oben