Sentron : Double nach S7-Real wandeln

Kieler

Level-2
Beiträge
763
Reaktionspunkte
86
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Mitstreiter,

ich habe gerade ein Siemens Sentron Meßgerät über eine Modbus on TCP an eine S7-300 angebunden. Geht soweit auch ganz gut. Bis ich zu den Zählwerten gekommen bin. Diese sind im Format Double (also ein 64 Bit Realwert) abgelegt. Hat einer eine Idee, wie ich diese in das S7-Real (32 Bit) wandeln kann. Hat vielleicht jemand etwas fertiges?

Kieler
 
Wikipedia

Wenn Ihr schon alle in Wikipedia unterwegs seit, müsst Ihr auch den richtigen Artikel verwenden :
http://de.wikipedia.org/wiki/IEEE_754

Hierbei entspricht die S7-Real-Zahl in etwa dem Single. Die Zahl welche ich über die Kopplung bekomme, aber dem Format Double. Eigentlich dachte ich, es müsste mit ein paar Schiebebefehlen erledigt sein. Aber ganz so schlicht ist es dann doch wieder nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kieler,

ich hab grad mal ein bissel gegoogelt und mal bei anderen Steuerungsherstellern nachgeschaut (z.B. Beckhoff). Bin aber bzgl. fertiger Funktion für Siemens nicht fündig geworden. Bei Beckhoff (Twincat) gibt´s zwar die Funktion LREAL_TO_REAL, diese ist aber in keiner Bibliothek abgelegt und somit nicht zugänglich.

Im Prinzip sollte das ganze aber nicht so schwierig sein. Du musst halt deine 64-Bit Gleitpunktzahl in Mantisse und Exponent zerlegen und diese wieder auf einem Doppelwort bzw. Siemens-REAL ablegen.

Mfg
uncle_tom
 
Wenn wir schon alles bei Wikipedia nachschlagen, wie wär's denn mit folgender Lösung:

Code:
[B] Berechnung einer IEEE [I]double precision[/I] Gleitkommazahl (64-Bit-Gleitkommazahl) [/B]

 [B]Umkehrung[/B]
 Will man aus einer Gleitkommazahl im Maschinenwort (64 Bit) eine Dezimalzahl errechnen so kann man dieses mit folgender Formel recht schnell erledigen:
 [IMG]http://upload.wikimedia.org/math/0/7/9/079067d886af2f8bad6b05f2458b96a6.png[/IMG]
 
Beispiel:
 Folgende Binärzahl mit 64-Bit soll als Gleitkommazahl interpretiert werden:
 0 [I]10001110100[/I] 0000101001000111101011101111111011000101001101001001
 (das Bit ganz links ist Bit 63 und das Bit ganz rechts ist Bit 0)
 
Das 63. Bit repräsentiert das Vorzeichen (1 Bit), also
     VZ = 0binär = 0
Bit 62 bis 52 repräsentieren den Exponenten (11 Bit), also:
    E = 10001110100binär = 1140
Bit 51 bis 0 repräsentieren die Mantisse (52 Bit), also:
     M = 0000101001000111101011101111111011000101001101001001binär = [IMG]http://upload.wikimedia.org/math/8/8/5/885b2d18c63e0151605cd210cd408fc1.png[/IMG]
Eingesetzt in die Formel ergibt sich als Ergebnis (Rundungswerte):
    [IMG]http://upload.wikimedia.org/math/2/1/1/211362c27a9cb20a76589ba1b638a635.png[/IMG]
Findet man auch hier
 
64 bit double

Hallo

nun stehe ich genau vor diesem Problem.
Ich soll die Wirkarbeit (64bit double) in WinCC darstellen und komme zu keiner Lösung.
Kann mir da jemand weiterhelfen?

Gruss
 
Zurück
Oben