Gleitpunktzahl zerlegen

Lockerbee

Level-2
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich benötige eine Lösung um eine Gleitpunktzahl in zwei zahlen zu zerlegen.

Die Zahl z.B. 1,25 -->> soll dann 1 und 25 ergeben.

Gibt es da eine Funktion oder sowas ?

Danke im vorraus
 
für so eine zahl wäre das einfach.

muss berücksichtigt werden um wieviel stellen das komma verschoben werden muss??
 
das ist leicht ;)


Code:
      L     MD    10                    //deine zahl
      L     1.000000e+001               //100 für 2 nachkommastellen
      *R    
      TRUNC                             //real -> dint
      T     MD    14
      L     10                          //100 für 2 nachkommastellen
      MOD   
      T     MW    20                    //nach dem komma
      L     MD    14
      L     10                          //100 für 2 nachkommastellen
      /D    
      T     MW    22                    //vor dem komma
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      L     MD    10                    //deine zahl
      L     1.000000e+001               //100 für 2 nachkommastellen
      *R    
      TRUNC                             //real -> dint
      T     MD    14
      L     10                          //100 für 2 nachkommastellen
      MOD   
      T     MW    20                    //nach dem komma
      L     MD    14
      L     10                          //100 für 2 nachkommastellen
      /D    
      T     MW    22                    //vor dem komma

Morgen Volker

ich will dich ja nicht korriegieren

aber es heist statt L 10 L L#10 sonst bekommst du nur eine 16 bit zahl und wenn du eine division über dem Grenzwert machst dann stimmts nicht mehr.

So und jetzt könnt ihr mich zerreisen :???:
 
Danke, werde es mal probieren.

Kann mir vielleicht jemand sagen, wie man die OSCAT.lib in S7 bekommt,
würde einige sachen gerne mal probieren.
 
Morgen Volker

ich will dich ja nicht korriegieren

aber es heist statt L 10 L L#10 sonst bekommst du nur eine 16 bit zahl und wenn du eine division über dem Grenzwert machst dann stimmts nicht mehr.

So und jetzt könnt ihr mich zerreisen :???:
Nachdem 10 eine positive Zahl ist, steht in beiden Fällen nachher in Akku1 dasselbe. Nur beim Laden von negativen Zahlen gibt es den kleinen aber feine Unterschied.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachdem 10 eine positive Zahl ist, steht in beiden Fällen nachher in Akku1 dasselbe. Nur beim Laden von negativen Zahlen gibt es den kleinen aber feine Unterschied.

ich wollte damit nur sagen das auch ab einen bestimmten positiven wert nicht mehr das richtige drinnen steht
 
Ja, der korrekte Umgang ist schon wichtig, sind manchmal recht eigenartige :confused: (Ergebnisse), die dann entstehen.
 

Anhänge

  • I_D.jpg
    I_D.jpg
    126,4 KB · Aufrufe: 58
Wenn es bei positiven Zahlen einen Unterschied macht, dann hat die Siemens-Hilfe unrecht:
Inhalt von Akkumulator 1

Inhalt von AKKU 1 AKKU1-H-H AKKU1-H-L AKKU1-L-H AKKU1-L-L
vor Ausführung der Ladeoperation XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
nach Ausführung von L MB10 (L <Byte>) 00000000 00000000 00000000 <MB10>
nach Ausführung von L MW10 (L <Wort>) 00000000 00000000 <MB10> <MB11>
nach Ausführung von L MD10
(L <Doppelwort>) <MB10> <MB11> <MB12> <MB13>

Wenn natürlich ein Operand negativ ist (wie in Ralles Beispiel) ist das verhalten ganz normal. Es fehlt dann die Vorzeichenerweiterung ins Highwort und -10 wird dann als 65526 interpretiert.
@kpeter: hast du ein Beispiel, das Probleme macht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@kpeter: hast du ein Beispiel, das Probleme macht?

ich habs gewusst das ich damit die hunde aufwecke hätte ich mal meinen mund gehalten

nochmal zum mitschreiben

also die zahlen von 0 bis 32768 stimmen in beiden formate überein
nur wenn du eine minus zahl nimmst dann wird diese zahl falsch ausgewertet
 
Es geht nicht um Hunde oder Katzen. Aber ich hatte geschrieben, dass wenn es sich um eine positive Zahl handelt (wie in Volkers Beispiel), dann macht es keinen Unterschied. Der ergibt sich erst bei einer negative Zahl. Dies ist vollkommen klar, da das Highwort 0 enthält statt FFFF.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die oscat.lib kannst du nicht direkt im siemens system laden, am desten ist es eine demo version von codesys zu verwenden und dann mit cut and paste den code ins siemens system kopieren. die oscat lib ist 100% iec61131-3 und benutzt keinerlei herstellerroutinen. sie sollte also auch auf siemens (ist ja auch iec61131-3 laufen.
 
gelöscht
die antwort passt besser zu einem anderen beitrag.
 
Zuletzt bearbeitet:
Zurück
Oben