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!
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)
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.