Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: REAL-Zahl mit Nachkommastelle

  1. #1
    Registriert seit
    04.09.2012
    Beiträge
    252
    Danke
    45
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe folgendes Problem:

    REAL1:= (TP_Istwert_Geschwindigkeit_Auf_REAL *100.0);
    INT1:= REAL_TO_INT (REAL1);
    REAL2:= INT_TO_REAL(INT1) * (0.01); (*Divison 100*)

    Durch diese Anweisungen erhalte ich eine Zahl mit zwei Nachkommastellen.

    Das Problem ist jetzt, dass ich als Ergebnis 8.e^-002 bekomme. Mir wäre es lieber, wenn da einfach 0.08 stünde. Weiß jemand vielleicht Rat? Arbeite mit Twincat 2.
    Zitieren Zitieren Gelöst: REAL-Zahl mit Nachkommastelle  

  2. "Hallo,
    das ist nur ein Anzeige- bzw. Darstellungsproblem, 8.0e-002 ist der selbe Wert wie 0.08. Wo willst Du denn die 0.08 sehen? Ein Ausgabefeld einer Visu? Stelle bei der Ausgabe ein, daß Du den REAL-Wert im Format '0.00' angezeigt bekommen willst. Wenn das nicht möglich ist, dann konvertiere selber den REAL-Wert in einen String mit dem gewünschten Format z.B. mit der Function LREAL_TO_FMTSTR oder mit dem Function_Block FB_FormatString.

    Harald"


  3. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.200
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Hallo,
    das ist nur ein Anzeige- bzw. Darstellungsproblem, 8.0e-002 ist der selbe Wert wie 0.08. Wo willst Du denn die 0.08 sehen? Ein Ausgabefeld einer Visu? Stelle bei der Ausgabe ein, daß Du den REAL-Wert im Format '0.00' angezeigt bekommen willst. Wenn das nicht möglich ist, dann konvertiere selber den REAL-Wert in einen String mit dem gewünschten Format z.B. mit der Function LREAL_TO_FMTSTR oder mit dem Function_Block FB_FormatString.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    siegener19 (08.05.2016)

  5. #3
    siegener19 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.09.2012
    Beiträge
    252
    Danke
    45
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo Harald,

    die REAL2:= 0.08 sollen hier rein :

    FILEDATA := CONCAT (FILEDATA,REAL_TO_STRING(REAL2));

    und dann in eine CSV-Datei rein. in der CSV steht dann so ein Mist wie 8,00E+12 . Warum weiß ich auch nicht. Glaube da stimmt was mit der Umwandlung in String nicht.

    Hier mal ein Bild mit dem REAL Wert 0.13
    Angehängte Grafiken Angehängte Grafiken

  6. #4
    siegener19 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.09.2012
    Beiträge
    252
    Danke
    45
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Danke, mit dem "LREAL_TO_FMTSTR" hat es doch geklappt. Mit "REAL_TO_STRING" hatte ich dasselbe vor.

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.200
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bei REAL_TO_STRING kann man das Ausgabeformat nicht beeinflussen. Diese Konvertierung entscheidet sich halt manchmal für die Exponential-Schreibweise. Ich kenne Twincat nicht, doch anscheinend gibt es keine (öffentlich zugängliche) exakte Dokumentation, nach welchen Regeln REAL_TO_STRING den Ausgabestring erzeugt (wie leider bei so vielen Sachen, die aus Codesys kommen). Das ist wie bei VB, was schnelle Erfolgserlebnisse liefert für Programmierer, welche eigentlich nicht recht wissen, was sie tun, aber Hauptsache es kommt irgendwas vorzeigbares 'raus.

    Ich empfehle LREAL_TO_FMTSTR gleich mit dem original REAL-Wert zu benutzen, ohne vorher zusätzlich verfälschende Rechenoperationen auszuführen oder Ziffern abzuschneiden, dann wird wenigstens meistens richtig gerundet, z.B. LREAL_TO_FMTSTR(0.46523,2,TRUE) ergibt korrekte '0.47'
    Also etwa so:
    Code:
    FILEDATA := CONCAT(FILEDATA, LREAL_TO_FMTSTR(TP_Istwert_Geschwindigkeit_Auf_REAL, 2, TRUE));
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    siegener19 (09.05.2016)

Ähnliche Themen

  1. Real Zahl auf Nachkommastelle runden
    Von digga im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 19.10.2017, 16:27
  2. Step 7 REAL Zahl mit Komma?
    Von ds-90 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 10.10.2014, 19:04
  3. TIA Nachkommastelle Real
    Von kuti im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 16.06.2013, 15:02
  4. Antworten: 20
    Letzter Beitrag: 18.07.2012, 16:17
  5. Antworten: 6
    Letzter Beitrag: 13.02.2008, 09:23

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •