Parameter für CRC_GEN

Begonnen von Schmiegel, 06. Juli 2010, 09:38:22

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Schmiegel

Hallo,

ich soll eine Schnittstelle zu einem Bezahlterminal über das ZVT-Kassenprotokoll in STEP7 erstellen.
Dieses Protokoll verlangt eine CRC-Berechnung. Die CRC-Prüfsumme wird nach CRC-XModem mit dem Polynom x16+ x15+ x10+ x3 gebildet.
Hier ist ein Beispiel eines zu sendenden Codes das laut Bedienungsanleitung richtig ist:

Anmeldung:
Send: 10 02 06 00 06 12 34 56 BA 09 78 10 03 24 C3

Die unterstrichenen Zeichen sind der CRC-Code der über das Polynom berechnet werden soll. Die durchgestrichenen werden nicht in die CRC-Berechnung einbezogen.

Ich verwende den FB CRC_GEN aus der Oscat Library 3.03

Das Polynom müsste demnach heissen
"IDB_TEST".CRC_GEN.Polynom_L = DW#16#00018408
Die Daten 06 00 06 12 34 56 BA 09 78 03 habe ich in einen DB geschrieben und als Pointer an "pt" übergeben
"size" habe ich mit 10 angegeben
Alle anderen Parameter habe ich auf den Defaultwerten gelassen. Am Ausgang CRC_GEN bekomme ich DW#16#00000900
statt der erwarteten DW#16#00002403.

Habe ich was falsch gemacht? In der Liste der gebräuchlichen Polynome ist dieses Polynom leider nicht zu finden.
Deshalb weiss ich auch nicht, wie die anderen Parameter zu belegen sind.
Kann mir jemand einen Tipp geben?

Vielen Dank für Eure Hilfe




dalbi

Hi,

das Polynom dazu muss lauten Binär "1100001000000100" Hexadezimal "C204".

Ergibt sich aus:

x16 + x15 + x10 + x3 =
+ 1000000000000000
+ 0100000000000000
+ 0000001000000000
+ 0000000000000100
--------------------
= 1100001000000100

Gruss Daniel

Schmiegel

Hallo Daniel,
vielen Dank für Deine schnelle Hilfe.

das LSB ist doch X0, so steht's bei Wikipedia http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung

x16 + x15 + x10 + x3 =
+ 1 0000 0000 0000 0000
+ 0 1000 0000 0000 0000
+ 0 0000 0100 0000 0000
+ 0 0000 0000 0000 1000
--------------------
= 1 1000 0100 0000 1000 = Hex 18408

oder hab ich da was übersehen. Ich werde das trotzdem morgen testen.
Vielen Dank

Schmiegel

Schmiegel

Ich habe es gerade noch mal getestet.
Mit Hex C204 kommt Hex 0480 raus!

Danke für eure Hilfe

dalbi

Hi,

hab im Baustein noch einen Fehler entdeckt. Anbei ein Testprojekt mit der funktionierenden CRC-Prüfung.
Dein Polynom ist vom Prinzip her ein CRC-CCITT (Kermit).

Gruss Daniel

[gelöscht durch Administrator]

Schmiegel

Hallo Daniel,
vielen Dank für Dein Testprojekt.

Wie kommst Du auf "DW#16#11021  //CRC-CCITT (Kermit)" für POLYNOM_L?
Mein Polynom ist definitiv x16+ x15+ x10+ x3 also DW#16#00018408.

Wenn es  "//CRC-CCITT (Kermit)" ist müsste lt. OSCAT-Handbuch der Parameter "rev_out" mit True belegt sein?

Das Protokoll, das ich benötige ist unter http://www.terminalhersteller.de/ZVT-Kassenprotokoll.html zu finden.
Teil 2 beschreibt das CRC-Polynom und dessen Bildung. Die Log-Dateien zeigen typische Datenübertragungen und die sich daraus ergebende CRC-Prüfsumme.
ZitatSend: 10 02 06 00 06 12 34 56 BA 09 78 10 03 24 C3
Die unterstrichenen Zeichen sind der CRC-Code der über das Polynom berechnet werden soll. Die durchgestrichenen werden nicht in die CRC-Berechnung einbezogen.
Die 24 im Datenstrom ist laut Beschreibund das CRC Low Byte, die C3 das CRC High Byte!

Ich habe andere Datenströme mit Deinem Testprojekt probiert, leider haben die auch nicht funktioniert!

Gruss Schmiegel

dalbi

Hi,

ok, wenn C3 das High- und 24 das Lowbytes ist, muss die Ausgabe auch noch gedreht werden.
Parameter rev_out := TRUE dann ist es doch ok oder?

Gruss Daniel

Schmiegel

Hallo Daniel,

ich habe es auch mit anderen Datenstrings probiert.
Sie funktionieren auch mit den Einstellungen in Deinem Testprojekt nicht.
Gibt es Erfahrungen mit CRC_GEN?

dalbi

Hi,

wieso funktioniert das nicht, wenn ich die Daten von Deinem ersten Post nehme kommen genau 24C3 raus?

Bei einem String in S7 musst Du daran denken das die ersten 2 Byte keine Zeichen enthalten, diese 2 Bytes definieren den String das 1. Byte enthält die Maximale und das 2. Byte die tatsächliche Länge in dezimaler Form.

Gruss Daniel

Schmiegel

#9
Hallo Daniel,

vielen Dank für Deine Geduld.

Wenn ich folgenden code probiere:

10 02 06 01 0A 04 00 00 00 01 10 10 00 49 09 78 10 03 F2 FF

ergibt das einen String
06 01 0A 04 00 00 00 01 10 00 49 09 78 03

Mit Deinem Testprogramm erhalte ich als CRC DW#16#4FFF
Es müsste aber DW#16#F2FF sein!







Schmiegel

Hallo,

leider bin ich bis jetzt noch nicht weiter gekommen.
Hat noch jemand Erfahrungen mit CRC_GEN?

Hallo Daniel,
hast Du mein  Beispiel aus dem letzetn Post getestet?

dalbi

Hi,

nein leider noch nicht, aber heute Abend setzt ich mich mal hin. Wenn alle Stränge reissen auf der geposteten Seite von Dir ist ein Beispiel zur Generierung unter VB, das könnte man entsprechend in SCL umsetzen.

Gruss Daniel

dalbi

Hi,

das kam jetzt dabei raus  ;)

Gruss Daniel

[gelöscht durch Administrator]