Mantisse und Exponent zu REAL

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe Mantisse (als REAL x.xxxx) und Exponent (als INT +/- y). Wie kann man daraus am einfachsten in Step7 (AWL oder SCL) eine Gleitpunktzahl machen?

Gibt es da vielleicht schon was Fertiges?

Nathalie
 
Nathalie schrieb:
Hallo,

...und Exponent (als INT +/- y).
Ich nehme mal an es ist ein Exponent zur Basis 10 wie in 4.56*10^3?
L 10.0
LN //sollte den natürlichen Logarithmus von 10 liefern
L "Exponent"
ITD
DTR
*R
EXP //sollte e hoch Exponent mal Logrithmus(10) berechnen. Das ist gleich 10 hoch
// Exponent
L "Mantisse"
* R

Fertig
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich mir das S7-Gleitpunktformat z.B. in der VAT anschaue, dann sehe ich z.B.: 1.23 e -3

Ich habe jetzt als Mantisse einen Real-Wert: 1.23 und ale Exponeten einen Integer-Wert: -3. Daraus soll der neue Gleitpunktwert gemacht werden.

Ich glaube, das leider nicht Basis 10, sondern 2. Da müßte man doch vielleicht mit SLD oder SRD arbeiten, oder? Aber denen müßte man dann als "Schiebeanzahl" den Exponenten übergeben. Aber wie geht das?
 
Nathalie schrieb:
Ich habe jetzt als Mantisse einen Real-Wert: 1.23 und ale Exponeten einen Integer-Wert: -3. Daraus soll der neue Gleitpunktwert gemacht werden.

Ich glaube, das leider nicht Basis 10
Doch, ist es.
Die INTERNE Darstellung einer Gleitkommazahl arbeitet mit Exponenten zur Basis 2. Wenn du eine Mantisse inder Form 1.23 und einen Exponenten -3 hast, kannst du mit Schieben gar nichts machen. Das liegt daran, daß ln10/ln2 keine ganze Zahl ist (oder, vielleicht einfacher verständlich, das 10 keine Zweierpotenz ist).
Ferner beinhalten die 32 Bits einer Gleitkommazahl 23 Bits der Mantisse(als Binärzahl!) , den Exponenten und die Vorzeichen von Mantisse und Exponent. Wenn du die mit SRD(SLD verschiebst, schiebst du Bits der Mantisse in den Exponenten oder umgekehrt. Das gibt Chaos.
 
Also irgendwie stehe ich auf dem Schlauch.

Es gibt da einen FC39 aus der IEC-Library. Der macht eigentlich genau das, was ich habe möchte. Nur erwartet der am Eingang einen genau definierten String und ich habe statt dessen eben 2 Zahlen.

Also muss es ja irgendwie gehen, nur wie? :roll:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mit der fc39 geht das sicher auch. aber zottels lösung klappt einwandfrei.
hab ich eben mal kurz getestet.

Code:
      L     1.000000e+001
      LN                                //sollte den natürlichen Logarithmus von 10 liefern 
      L     MW    30                    //Exponent (INT) z.b. 3
      ITD   
      DTR   
      *R    
      EXP                               //sollte e hoch Exponent mal Logrithmus(10) berechnen. Das ist gleich 10 hoch Exponent 
      L     MD    34                    //Mantisse (real) z.b. 2.34
      *R    
      T     MD    40                   //ist dann als real 2340 bzw 2.34+e03
 
Das hier ist ein Step-Programm in AWL, ist nur 8 Anweisungen lang und MACHT es!
Code:
L 10.0 
LN 
L "Exponent" 
ITD 
DTR 
*R 
EXP
L "Mantisse" 
* R
Fang' jetzt bloß nicht, an erst noch Strings zu bilden.
 
jetzt hast du aber eine wichtige anweisung vergessen :wink:
EXP

was ich darüber geschrieben habe ist ja im prinzip das gleiche. ich war nur ein paar sekunden schneller :wink: :wink:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, ich habe das EXP wieder eingefügt.
Gut, daß du es getestet hast! Ich habe keine S7 oder Simulator auf dem Schreibtisch und da man Logarithmen so selten braucht, war ich nicht ganz sicher, ob es LOG oder LN heißt, und, falls es nur LOG gäbe, zu welcher Basis es rechnet :)
 
Vielen Dank an alle. Ich war schon am Verzweifeln. Ich fummel nämlich nun schon seit Mittag an dieser Sache. :(

Und leider hatte eben auch Zottels Code nicht funktioniert (Es fehlte das EXP). Naja, so ist das, wenn man etwas ohne Nachzudenken einfach übernimmt...

Aber, kaum macht man es richtig, schon geht es!
 
In meiner ersten Antwort war das EXP aber von Anfang an drin. Bei deinem übernächsten Posting hatte ich dann den Eindruck, daß du es garnicht als Programm wahrgenommen hast. Da habe ich es nochmal gepostet, in Code tags verpackt und wollte den langen Kommentar rausscheißen. Dabei ist das EXP verlorengegangen.
 
Zottel schrieb:
...Da habe ich es nochmal gepostet, in Code tags verpackt und wollte den langen Kommentar rausscheißen...

Gutes Gelingen :lol: , Onkel


Nachtrag:
Markus, wenn du den Beitrag von Porno@Ralle löschst, lösche meinen bitte gleich mit. Ich wollte nicht dass es ausartet. Danke.
 
Zurück
Oben