# Gleitpunktzahl zerlegen



## Lockerbee (5 Februar 2007)

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


----------



## volker (5 Februar 2007)

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

muss berücksichtigt werden um wieviel stellen das komma verschoben werden muss??


----------



## Lockerbee (5 Februar 2007)

Ich brauche nur eine stelle hinterm Komma un max 2 vorm Komma
Also die Größte Zahl wäre z.B. 12,8


----------



## volker (5 Februar 2007)

das ist leicht 



```
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
```


----------



## hugo (5 Februar 2007)

die funktion trunc(X) liefert den teil vorm komma,
in der oscat.lib unter www.oscat.de findest du auch eine funktion fract(x) die den nachkommateil liefert.


----------



## kpeter (6 Februar 2007)

volker schrieb:


> ```
> L     MD    10                    //deine zahl
> L     1.000000e+001               //100 für 2 nachkommastellen
> *R
> ...


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


----------



## Lockerbee (6 Februar 2007)

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.


----------



## Rainer Hönle (6 Februar 2007)

kpeter schrieb:


> Morgen Volker
> 
> ich will dich ja nicht korriegieren
> 
> ...


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.


----------



## kpeter (6 Februar 2007)

Rainer Hönle schrieb:


> 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


----------



## Ralle (6 Februar 2007)

Ja, der korrekte Umgang ist schon wichtig, sind manchmal recht eigenartige  (Ergebnisse), die dann entstehen.


----------



## Rainer Hönle (6 Februar 2007)

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?


----------



## kpeter (6 Februar 2007)

Rainer Hönle schrieb:


> @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


----------



## Rainer Hönle (6 Februar 2007)

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.


----------



## kpeter (6 Februar 2007)

das stimmt


----------



## hugo (6 Februar 2007)

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.


----------



## volker (6 Februar 2007)

*gelöscht*
die antwort passt besser zu einem anderen beitrag.


----------



## 3Scode (6 Februar 2007)

y:=1,25;
x1:=trunc;  (1)
x2:=abs((y-trunc)*100);  (25)


----------



## gravieren (19 Februar 2007)

Hi



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


 
Versuche es mal mit "plain-Text"


----------



## hugo (20 Februar 2007)

dieoscat lib ist nun auch in text form zum download auf der homepage
den text kannst du dann ins siemens entwicklungssystem pasten.

www.oscat.de


----------

