Andy_S
Level-1
- Beiträge
- 15
- Reaktionspunkte
- 21
-> Hier kostenlos registrieren
Mit welcher Programmiersprache greifst Du denn auf die Steuerung zu?
Vom Prinzip musst Du über einen Zeiger auf den Empfangspuffer von vorne nach hinten durch den Puffer wandern und dir Deine Werte herauspicken.
Beispiel:
In den Puffer werden 5 Werte gelesen
1 DWORD
2 REAL
1 INT
1 BYTE
Dein Empfangspuffer enthält 15 Byte
Über Einen Zeiger auf den Start des Empfangspuffers kannst Du die ersten 4 Byte extrahieren (DWORD = 32 Bit = 4Byte), dann addierst Du zum Zeiger den Offset 4 und holst die nächsten 4 Byte (REAL = 32 Bit = 4Byte), dann wieder einen Offset von 4 zum Zeiger addieren, die nächsten 4 Byte auslesen, wieder 4 zum Zeiger, dann nur 2 Byte lesen (INT), dann nur 2 zum Zeiger addieren und das letzte einzelne Byte auslesen
Diese Prozedur findest Du in meinem obigen Beispiel in dem Abschnitt "Ausgabe-String zusammenstellen"
hier siehst Du die Zeigervariable *S7_Daten, die am Anfang ohne Offset und später als *S7_Daten + 2, *S7_Daten + 20 und *S7_Daten + 24 auftaucht. An dieser Stelle mache ich genau das oben beschriebene.
Wichtig zu beachten ist noch der Umstand, dass es sich bei der S7 um ein Big-Endian System handeld, während der PC ein Little-Endian System ist (siehe Wikipedia). Das heißt, das die Reihenfolge der Byte bei den einzelnen Werten vertauscht werden muss
Beispiel (DWORD oder REAL):
Big Endian Byte 1 - Byte 2 -Byte 3 -Byte 4 wird im Little-Endian Format zu Byte 4 - Byte 3 -Byte 2 -Byte 1
Wenn die Programmiersprache bekannt ist lassen sich genauere Aussagen über die Vorgehensweise machen, da jede Programmiersprache andere Befehle benötigt um das oben beschriebene umzusetzen.
Gruß, Andreas
Vom Prinzip musst Du über einen Zeiger auf den Empfangspuffer von vorne nach hinten durch den Puffer wandern und dir Deine Werte herauspicken.
Beispiel:
In den Puffer werden 5 Werte gelesen
1 DWORD
2 REAL
1 INT
1 BYTE
Dein Empfangspuffer enthält 15 Byte
Über Einen Zeiger auf den Start des Empfangspuffers kannst Du die ersten 4 Byte extrahieren (DWORD = 32 Bit = 4Byte), dann addierst Du zum Zeiger den Offset 4 und holst die nächsten 4 Byte (REAL = 32 Bit = 4Byte), dann wieder einen Offset von 4 zum Zeiger addieren, die nächsten 4 Byte auslesen, wieder 4 zum Zeiger, dann nur 2 Byte lesen (INT), dann nur 2 zum Zeiger addieren und das letzte einzelne Byte auslesen
Diese Prozedur findest Du in meinem obigen Beispiel in dem Abschnitt "Ausgabe-String zusammenstellen"
hier siehst Du die Zeigervariable *S7_Daten, die am Anfang ohne Offset und später als *S7_Daten + 2, *S7_Daten + 20 und *S7_Daten + 24 auftaucht. An dieser Stelle mache ich genau das oben beschriebene.
Wichtig zu beachten ist noch der Umstand, dass es sich bei der S7 um ein Big-Endian System handeld, während der PC ein Little-Endian System ist (siehe Wikipedia). Das heißt, das die Reihenfolge der Byte bei den einzelnen Werten vertauscht werden muss
Beispiel (DWORD oder REAL):
Big Endian Byte 1 - Byte 2 -Byte 3 -Byte 4 wird im Little-Endian Format zu Byte 4 - Byte 3 -Byte 2 -Byte 1
Wenn die Programmiersprache bekannt ist lassen sich genauere Aussagen über die Vorgehensweise machen, da jede Programmiersprache andere Befehle benötigt um das oben beschriebene umzusetzen.
Gruß, Andreas
Zuletzt bearbeitet: