Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Profinet Azyklisch lesen

rKtiC
2019-02-05
2019-02-07
  • rKtiC - 2019-02-05

    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:

    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

    IMG: Bild

    IMG: Bild

     
  • eschwellinger

    eschwellinger - 2019-02-06

    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

     
  • rKtiC - 2019-02-07

    Hallo,

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

     

Log in to post a comment.