CODESYS - das IEC 61131-3 Programmiersystem
https://forum-de.codesys.com/

Profinet Azyklisch lesen
https://forum-de.codesys.com/viewtopic.php?f=18&t=5910
Seite 1 von 1

Autor:  rKtiC [ Di Feb 05, 2019 4:05 pm ]
Betreff des Beitrags:  Profinet Azyklisch lesen

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:
Bild

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:

Code:
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);

Bild

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

Autor:  Edwin Schwellinger [ Mi Feb 06, 2019 9:02 am ]
Betreff des Beitrags:  Re: Profinet Azyklisch lesen

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

Autor:  rKtiC [ Do Feb 07, 2019 9:16 am ]
Betreff des Beitrags:  Re: Profinet Azyklisch lesen

Hallo,

das war der Fehler. Ein Tauschen der Bytereihenfolge brachte den Erfolg.
Vielen Dank!

Seite 1 von 1 Alle Zeiten sind UTC
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/