ich habe Probleme bei der Verwendung des Beispiels ProfinetAcyclicSP9. Ich würde gerne Daten azyklisch aus einem Profinetgerät auslesen.
Das Gerät ist angebunden und funktioniert. Für den azyklischen Datendienst habe ich folgende Angabe:
Daraus folgt, dass ich von insgesamt 16 Byte die letzen 4 auslesen möchte, da dort die Daten stehen.
Daher würde ich den Code im obengenannten Beispiel wie folgt anpassen:
SysMemCpy(ADR(OrderID), ADR(buffer[12]), 4);
(OrderID ist vom Typ REAL)
Die auszulesende Variable habe ebenfalls angepasst zu rdrec.INDEX := TO_INT(16#123);
Das schöne ist, dass Daten gelesen werden, jedoch sollte der ausgelesene Wert 4 sein. Hier scheint der ausgelesene Wert 64 zu sein.
Was bedeutet der Wert der in OrderID steht (4,89*10^-41)? Müsste SysMemCpy nicht den Wert aus dem Buffer in OrderID schreiben?
Vielen Dank schon mal.
rKtiC
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich weiß nicht wie die Gleitkommazahl „4.0“ binär aussieht, aber Profinet verwendet (genau wie) IEC ISO/IEC/IEEE 60559 Single precision.
D.h. Vorzeichen + 7 Bit Exponent + 23 Bit Mantisse (siehe https://de.wikipedia.org/wiki/IEEE_754)
Die Byte-Order ist bei Profinet immer Big-Endian !
(fürs Byte drehen gibt’s einen FB ByteBuffer in der MemUtils Lib)
Hoffe das hilft dir so weiter....
Grüße
Edwin
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen,
ich habe Probleme bei der Verwendung des Beispiels ProfinetAcyclicSP9. Ich würde gerne Daten azyklisch aus einem Profinetgerät auslesen.
Das Gerät ist angebunden und funktioniert. Für den azyklischen Datendienst habe ich folgende Angabe:
Daraus folgt, dass ich von insgesamt 16 Byte die letzen 4 auslesen möchte, da dort die Daten stehen.
Daher würde ich den Code im obengenannten Beispiel wie folgt anpassen:
(OrderID ist vom Typ REAL)
Die auszulesende Variable habe ebenfalls angepasst zu rdrec.INDEX := TO_INT(16#123);
Das schöne ist, dass Daten gelesen werden, jedoch sollte der ausgelesene Wert 4 sein. Hier scheint der ausgelesene Wert 64 zu sein.
Was bedeutet der Wert der in OrderID steht (4,89*10^-41)? Müsste SysMemCpy nicht den Wert aus dem Buffer in OrderID schreiben?
Vielen Dank schon mal.
rKtiC
Hallo,
ich weiß nicht wie die Gleitkommazahl „4.0“ binär aussieht, aber Profinet verwendet (genau wie) IEC ISO/IEC/IEEE 60559 Single precision.
D.h. Vorzeichen + 7 Bit Exponent + 23 Bit Mantisse (siehe https://de.wikipedia.org/wiki/IEEE_754)
Die Byte-Order ist bei Profinet immer Big-Endian !
(fürs Byte drehen gibt’s einen FB ByteBuffer in der MemUtils Lib)
Hoffe das hilft dir so weiter....
Grüße
Edwin
Hallo,
das war der Fehler. Ein Tauschen der Bytereihenfolge brachte den Erfolg.
Vielen Dank!