TIA CRC Prüfsumme von DB generieren

LUW

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Foren-Gemeinde,

ich habe ein Problem, welches ich nicht durch die Suchfunktion lösen konnte:

Ich habe eine Profinet Kommunikation zwischen einer 1500er und einer 1200er Steuerung erstellt. Wir nutzen die Kommunikation um Datenbausteine zu senden und zu empfangen.

Problem:
Ein Kunde hat bemängelt das wir nicht sicherstellen können, dass die Daten auch richtig ankommen(sind Bits gekippt?). Wir haben vorgeschlagen Abhilfe durch eine CRC Checksumme/Prüfsumme zu schaffen, sodass eine Prüfsumme beim Senden und Empfangen generiert wird, welche anschließend verglichen wird.

Hat jemand schoneinmal vor dem Gleichen Problem gestanden und einen Lösungsvorschlag für mich?

Vielen Dank für eure Hilfe!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Banana Joe,
vielen Dank!

Die Bibliothek habe ich schon gefunden, jedoch begreife ich noch nicht die Funktionsweise und die Variablen Schnittstelle.
Mir fehlt leider die Übergabe vom gesamten DB in die Funktion. Der Input wird mit Array
[*] of Byte angegeben, was leider nicht kompatibel zu TIA V13 ist.

Vielen Dank für weitere Hilfe.

Gruß LUW
 
Das ihr TIA V13 nutzt verkompliziert die ganze Sache natürlich etwas, Array
[*] wurde, soweit ich weiß, mit V14 eingeführt. Eventuell könnt ihr den Programmcode aus den LGF-Bausteinen extrahieren und auf eure Anwendung ummünzen? Dann könntet ihr eventuell auch gleich die Logik mit in den Baustein integrieren, welche den Inhalt des DBs in ein Array of Byte schreibt.
 
Hallo Banana Joe,
schonmal Vielen Dank für deine weitere Antwort. :)

Den Progammcode in SCL in TIA Portal V13 funktioniert. Mein Problem ist es die Daten in die Funktion zu übergeben. Ich versuche gerade die Funkion Serialize um die Daten aus dem DB in ein Array zu schreiben, damit ich dieses in die Funktion geben kann.

Vielen Dank!
Gruß LUW
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein Kunde hat bemängelt das wir nicht sicherstellen können, dass die Daten auch richtig ankommen(sind Bits gekippt?).

Na wenn die Kommunikation über RS232 geht verstehe ich das noch...

Ethernet also TCP/IP usw. haben eigene Kontroll- und Korrekturmechanismen, die sicher stellen das an den Empfänger auch das Richtige übergeben wird.
Zusätzliche CRC-Prüfsummen sind da eigendlich unnötig, belasten die Steuerung auf Sende UND Empfangsseite unnötig, verschlechtern also direkt die Performance der Anlage und Zeigt doch nur das der "Kunde" keine Ahnung hat...
 
Hallo NBerger,

ich teile deine Auffassung. Jedoch sind wir Zulieferer in der Pharma-Industrie und diese ist sehr kritisch und die Qualitätsanforderung ist sehr hoch.
Der Kunde hat uns mitgeteilt, dass wenn wir keine zusätzliche Prüfung einsetzen, dieser den Auftrag zurücknimmt und die Anlage nicht gebaut wird.
Die Verschlechterung der Performance halte ich im Hinterkopf. Danke für den Hinweis.
 
War nicht bös gemeint...

Die CRC-Funktionen aus der LGF-Bibliothek habe ich auch schon eingesetzt. Ist recht problemlos...
Must halt nur für das Datenarry sorgen, was du zur Übertagung aber eh benötigst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Alles gut,

dacht nur, ich erkläre die Umstände. :)
Für die Übertragung haben ich POKE_BLK verwendet, sodass ich keine Arrays erzeugen musste.

Ich versuche gerade ein Daten Array mit der Funktion Serialize zu erzeugen, jedoch habe ich Probleme die Funktion richtig zu parametrieren. Ich bekomme immer den Fehler: "Am Parameter DEST_ARRAY steht nicht genügend Speicherplatz zur Verfügung".
serialize.PNG
Da ich leider noch nicht so viele Erfahrungen zu Arrays sammeln konnte, bin ich gerade etwas überfragt.

Vielen Dank für eure Hilfe!
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    21,5 KB · Aufrufe: 17
Klar,

wir machen eine E/A Kommunikation zwischen einer 1200er und einer 1500er. Die gesendeten und empfangenen Daten werden in Datenbausteinen mit absoluter Adressierung abgelegt.

Die Kommunikation zwischen den Geräten ist nicht mein Problem. Diese möchte ich nicht verändern. Ich möchte aus dem Datenbaustein eine Prüfsumme bilden. Die Prüfsumme möchte ich mit einer SCL funktion von Siemens erstellen. Für die Funktion benötige, ich jedoch die Daten als Array.

Mein Problem ist, dass ich die Daten nicht in eine Array bekomme, da der Baustein Serialize mir eine Fehlermeldung liefert, dich mir nicht erklären kann.

Konnte ich dir meine Situation ausreichend schildern?

Vielen Dank für eure Hilfe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Klar,

wir machen eine einfache EA Kommunikation via Profinet.

Mein Problem ist jedoch, dass ich die Daten aus dem DB nicht in ein Array schieben, kann der Baustein Serialize auf Fehler geht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Sicherstellen der Konsistenz des Speicherbereichs (ggf. samt CRC) gehört auch, daß zwischen Sendeanstoß und Fertig-Meldung die Daten im Sendepuffer nicht geändert werden dürfen, und der Empfänger darf die Daten nur in genau dem Moment übernehmen/umkopieren/prüfen, wenn er den kompletten Empfang im Empfangspuffer signalisiert bekommt. Beachtest Du dies auch?

Harald
 
Hallo Harald,

das ist ein guter Einwand. Habe ich aber schon Bedacht und stellt auch kein Problem für mich da.
 
Hallo,
ich habe auch das Problem das ich eine Modbus RTU Kommunikation mit einer S7 1200 machen soll.
Die Hardware läuft ich Kommuniziere jedoch ohne Checksumme.
Jetzt wollte ich die Checksumme berechnen und habe mir die LGF Heruntergeladen diese aufgerufen läuft auch aber was da raus kommt passt nicht.
Ich habe mir einen DB gemacht und die Werte die ich übertragen möchte
in HEX
01 03 20 01 00 01 angelegt die habe ich auch als AARRAY auf den FC LGF_CalcCRC16 gelegt
Startvalue habe ich mit Word 0000 versorgt da ich ab dem ARRAY[0] die Daten liegen habe.
Habe auch nur 6 Byte im DB
Als Polynom habe ich schon einiges versucht was ich zum Modbus finden konnte leider passt das nicht mein Gerät
Benötigt als Checksumme
DE 0A

Kann vielleicht mal jemand einfach ein Beispiel zur Verfügung stellen.
Eigentlich wollen doch alle das gleiche oder ?

Wie ich das verstanden habe ist das Polynom zur Verrechnung auch der Rechenweg hat noch keiner ausführlich erklärt.

Unter C++ habe ich das auch schon gemacht aber einfach Modul rein Checksumme raus....

Kann mir vielleicht bitte jemand Licht ans ende des Tunnels bringen ?
 
Zurück
Oben