Forum: PC-Programmierung SPS Crouzet Millenium 3 Prüfsumme


von Georg H. (Gast)


Lesenswert?

Moin Moin

ich brauche mal Eure Hilfe. Ich bin dabei die Crouzet Millenium xd26 
über die Serielle Schnittstelle auszulesen. Jedoch bekomme ich es nicht 
hin die Prüfsumme zu berechnen.

Hier mal die Anleitung von Crouzet:




Beschreibung
Der Funktionsblock Ausgang serielle Verbindung ermöglicht das Senden von 
Daten, die sich an festen Adressen im Controller befinden, an andere 
Geräte über eine serielle Verbindung.


------------------------------------------------------------------------ 
--------

Zugriff
Diese Funktion kann über die HMI-Funktionsleiste aufgerufen werden.


------------------------------------------------------------------------ 
--------

Eingänge/Ausgänge
Die Funktion verfügt über acht Eingänge vom Typ Ganzzahl. Diese Eingänge 
ermöglichen es der Applikation, die zu sendenden Daten an die gewählten 
Festadressen-Speicherpositionen zu schreiben.


------------------------------------------------------------------------ 
--------

Parameter
Über das Fenster Parameter wählt der Benutzer einen Bereich von acht 
Adressen. Folgende Adressbereiche sind verfügbar:
25 - 32
33 - 40
41 - 48




------------------------------------------------------------------------ 
--------

Der Frame der zu lesenden Daten und die Antwort
Der an den Controller zu sendende Frame für die zu lesenden Daten ist 
wie folgt strukturiert:
Anfangstrennzeichen: " : "
Adresse des Slave: 0x04
Lesebefehl: 0x03
Adresse der Daten: 0x00 00 FF xx
xx ist eine Zahl zwischen 0x00 und 0x2F und entspricht der Adresse des 
ersten zu lesenden Datenbytes minus 1.
Anzahl Bytes: 0xnn
Dies ist die Anzahl der zu lesenden Datenbytes. Jeder Wert besteht aus 
zwei Bytes.
Prüfsumme: 0xcc
Dies ist die Summe plus 1 der Bytes der Slave-Adresse und der Anzahl 
Bytes.
Endtrennzeichen: " CR " " LF "


Die Antwort des Controllers ist wie folgt strukturiert:
Anfangstrennzeichen: " : "
Adresse des Slave: 0x04
Lesebefehl: 0x03
Anzahl Bytes: 0xnn
Gelesene Daten: 0xd1H d1L d2H ... dnnL
Es handelt sich um die 0xnn gelesenen Bytes.
Prüfsumme: 0xcc
Dies ist die Summe plus 1 der Bytes der Slave-Adresse und des letzten 
gelesenen Datenbytes.
Endtrennzeichen: " CR " " LF "




------------------------------------------------------------------------ 
--------

Beispiel
Lesen von 5 16-Bit-Werten von der Adresse 17:
Frame in hexadezimaler Schreibweise vor der ASCII-Codierung:
" : " 04 03 00 00 FF 10 0A E0 " CR " " LF "
Frame in hexadezimaler Schreibweise nach der ASCII-Codierung:
3A 30 34 30 33 30 30 30 30 46 46 31 30 30 41 45 30 0D 0A
Antwort, wenn die fünf Werte 0 ergeben:
3A 30 34 30 33 30 41 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 
30 30 30 45 46 0D 0A




------------------------------------------------------------------------ 
--------

Verhalten im Falle eines Kommunikationsausfalls
Das Senden bestimmter fehlerhafter Frames an den Controller hat einen 
Ausfall der Kommunikation zur Folge. Das heißt, dass weder das Senden 
von Daten über den seriellen Port an den Controller noch die 
Kommunikation mit dem Controller aus der Programmierumgebung heraus 
möglich ist. In diesem Fall muss die Stromversorgung des Controllers 
aus- und wiedereingeschaltet werden. Auf diese Weise lässt sich die 
Kommunikation wiederherstellen.





Wenn ich das Beispiel wie oben angegeben an die SPS Sende funktioniert 
es wunderbar sobald ich aber die Adresse der Bytes (Welche laut 
Anleitung nicht zur Berechnung der Prüfsumme relevant ist) , oder die 
Anzahl der Bytes verändere klappt es nicht mehr! Dies liegt wie gesagt 
an der Prüfsumme.

Kann mir hierbei jemand helfen?

Wie komme ich auf die 0xE0 entspricht 224 ???

Ich komme nur auf 214 also 0xD6. Hiermit klappt die Verbindung nicht 
mehr ist ja klar!
(Rechnung: 0 => ASCII 48, 4 => ASCII 52, 0 => ASCII 48, A => ASCII 65 
daraus die Summe 213 + 1 = 214 )


Gruß
und vielen Dank für eure Hilfe!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Georg H. schrieb:
> Dies ist die Summe plus 1 der Bytes der Slave-Adresse und des letzten
> gelesenen Datenbytes.

Die Frage ist vielmehr, wie Du diese Formulierung interpretierst.

Recht sicher heißt das nicht "plus eines der Bytes der Slave-Adresse", 
sondern Summe der Bytes (...) plus 1.

Mit etwas gegoogele findet sich das hier:


> Checksum: 0xcc
> This is the complementary sum increased by 1,
> of the bytes between the slave address and the last
> of the data to be written.

Das ist die Komplementärsumme plus 1 der Bytes zwischen der 
Slave-Adresse und dem letzten zu übertragenden Datenbyte.

> Example:
> Write to address 3 the 16-bit value 8569:
>
> 8569 corresponds to 0x2179 in hexadecimal format.
>
> Checksum:
> 00x04+0x10 + 0x00 + 0x00+ 0xFF + 0x02 + 0x02 + 0x21 + 0x79 = 0x1B1
> hence the complement increased by 1 gives on a 0x4F byte

(Quelle 
http://www.digikey.com/Web%20Export/Supplier%20Content/Crouzet_646/PDF/Crouzet_M3Help.pdf?redirected=1)

von Georg H. (Gast)


Lesenswert?

Ja dort geht es um das Schreiben in die SPS das klappt auch super aber 
ich möchte ja lesen! Um aus der SPS etwas zu lesen muss eine Anfrage 
geschickt werden wie oben in der Anleitung beschrieben aber dort wird 
die checksumme anders gebildet als beim Schreiben das ist das Problem. 
Eventuell eine Idee wie dies geschied?

von Georg (Gast)


Lesenswert?

Georg H. schrieb:
> Dies ist die Summe plus 1 der Bytes der Slave-Adresse und der Anzahl
> Bytes.

Georg H. schrieb:
> die Adresse der Bytes (Welche laut
> Anleitung nicht zur Berechnung der Prüfsumme relevant ist)

Da bist du wohl auf einen Übersetzungsfehler hereingefallen, es muss 
heissen:

Dies ist die Summe plus 1 der Bytes ZWISCHEN der Slave-Adresse und der 
Anzahl
Bytes (jeweils einschliesslich).

Also alle Bytes vom ersten nach ':' bis zum letzten vor der Checksumme 
selbst, etwas anderes macht für jemanden, der Erfahrung mit Protokollen 
hat, auch garkeinen Sinn.

Protokolle müssen ganz exakt befolgt werden, da ist so eine Beschreibung 
natürlich eine Zumutung.

Georg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.