Umrechnung Dezimal in Fliesskomma

Matze
2005-09-12
2010-06-16
  • Matze - 2005-09-12

    Hi

    Ich hab da mal eine Frage. Gibt es bei Codesys einen Baustein , der mir eine Dezimaldarstellung von Zahlen (z.B. "1.02") in eine von modernen CPUs verwendeten IEEE 754-Fließkommazahldarstellung umwandelt ?

    Danke für die Hilfe.

     
  • Anonymous - 2005-10-11

    Originally created by: Gast

    Die Konverierungsfunktionen STRING_TO_REAL bzw. STRING_TO_LREAL leisten das gewünschte. Das Zielformat ist das Gleitkommaformat der jeweiligen CPU. Das ist bis auf wenige Ausnahmen (8051, manche c16x Plattformen) IEE-konform.

    Gruß

    Dieter Hess

     
  • Wolfgang Doll - 2005-10-13

    Für den Fall, dass es um die Darstellung des binären Musters im Speicher geht würde ich folgendes vorschlagen:

     VAR
        sValue : STRING;
        rValue : REAL;
        pValue : POINTER TO DWORD;
        dwValue : DWORD;
     END_VAR
    sValue := "1.02";
    rValue := STRING_TO_REAL(sValue);
    pValue := ADR(rValue);
    dwValue := pValue^; 
    

    In dwValue steht die Zahl "1.02" als Bitmuster im IEEE Format.

    In diesem Fall also : 16#3F828F5C

    Gruß

    Wolfgang Doll

     
  • scorpion - 2010-06-16

    Hallo zusammen

    Die Wandlung von Real (z.B. 1.02) in das IEEE 754-Format scheint ja auf diese Weise zu funtkionieren.

    Ich brauche aber die umgekehrte Funktion.

    Mein Profibus Slave liefert mir den Istwert aufgeteilt auf die 4 Bytes.

    Diese Bytes möchte ich nun in eine "normale" REAL-Zahl wandeln.

    Kann mir jemand helfen?

     
  • Michael.Klank - 2010-06-16

    Also damit

    Michael

     
  • Michael.Klank - 2010-06-16

    Aus dem Oscat Forum:

    IEEE32 in REAL
    FUNCTION IEEE32_TO_REAL : REAL
    VAR_INPUT
       IN:DWORD;
    END_VAR
    VAR
       PTREAL:POINTER TO REAL;
    END_VAR
    PTREAL:=ADR(IN);
    IEEE32_TO_REAL:=PTREAL^;
    END_FUNCTION
    REAL in IEEE32
    FUNCTION REAL_TO_IEEE32 : DWORD
    VAR_INPUT
       IN:REAL;
    END_VAR
    VAR
       PTDWORD:POINTER TO DWORD;
    END_VAR
    PTDWORD:=ADR(IN);
    REAL_TO_IEEE32:=PTDWORD^;
    END_FUNCTION
    

    Michael

     

Log in to post a comment.