LMDaniel999
Level-1
- Beiträge
- 57
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Hallo,
ich habe eine Frage, bei der wir aktuell nicht weiter kommen.
Wir haben zwar eine Idee, wissen aber nicht ob das richtig ist und wie wir das lösen können.
Wir möchten mit TwinCAT 2 eine ADS Kommunikation zwischen einer CX5020 (Intel Celeron X86) und einem CP66 (ARM) aufbauen.
Prinzipiell funktioniert das auch: Ein Struct mit verschiedenen Variablen und fester Adresse im Speicher auf der einen CPU, ein ADSRead Befehl auf der anderen CPU.
Das Problem ist, dass das gleiche Struct auf der Ziel CPU anders beschrieben wird. Die Werte stimmen nicht!
Wir haben uns die übertragenen Daten Byte für Byte in Hex angesehen und festgestellt, dass die Bytes korrekt übertragen werden.
Das Problem ist aber, dass es von der einen CPU zur anderen eine Verschiebung der Variablen gibt.
Beispiel: Erstes Teil im Struct ist ein String der Länge 32. Die ersten 32Bytes sind Chars, Byte 33 ist der Abschluss vom String.
Die nächste Variable ist eine Real. Die eine CPU fängt mit der Real in Byte 34 an, die andere in Byte 37.
Unsere Theorie:
Die CX5020 nutzt jedes Byte ohne Lücke, das CP66 lässt teilweise Lücken und nutzt "eine Art Viererpack".....
Ich hoffe, das war jetzt verständlich....
Nun zu den Fragen:
Warum ist das so?
Gibt es hierfür unterschiedliche Arten für eine Speicherbelegung? Wenn ja, wo steht das?
Wie setze ich eine ADS Kommunikation dann vernünftig um? Passende Reihenfolge der Variablen?
Danke!
ich habe eine Frage, bei der wir aktuell nicht weiter kommen.
Wir haben zwar eine Idee, wissen aber nicht ob das richtig ist und wie wir das lösen können.
Wir möchten mit TwinCAT 2 eine ADS Kommunikation zwischen einer CX5020 (Intel Celeron X86) und einem CP66 (ARM) aufbauen.
Prinzipiell funktioniert das auch: Ein Struct mit verschiedenen Variablen und fester Adresse im Speicher auf der einen CPU, ein ADSRead Befehl auf der anderen CPU.
Das Problem ist, dass das gleiche Struct auf der Ziel CPU anders beschrieben wird. Die Werte stimmen nicht!
Wir haben uns die übertragenen Daten Byte für Byte in Hex angesehen und festgestellt, dass die Bytes korrekt übertragen werden.
Das Problem ist aber, dass es von der einen CPU zur anderen eine Verschiebung der Variablen gibt.
Beispiel: Erstes Teil im Struct ist ein String der Länge 32. Die ersten 32Bytes sind Chars, Byte 33 ist der Abschluss vom String.
Die nächste Variable ist eine Real. Die eine CPU fängt mit der Real in Byte 34 an, die andere in Byte 37.
Unsere Theorie:
Die CX5020 nutzt jedes Byte ohne Lücke, das CP66 lässt teilweise Lücken und nutzt "eine Art Viererpack".....
Ich hoffe, das war jetzt verständlich....
Nun zu den Fragen:
Warum ist das so?
Gibt es hierfür unterschiedliche Arten für eine Speicherbelegung? Wenn ja, wo steht das?
Wie setze ich eine ADS Kommunikation dann vernünftig um? Passende Reihenfolge der Variablen?
Danke!