Gleitpunktzahl IEEE754

sps_mitte

Level-2
Beiträge
172
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich erhalte ein Meßwert (aus Profibus PA) im Format 32bit-Gleitpunktzahl im IEEE754 Format.
Wie habe ich den PEW einzulesen und abzulegen, wenn die ersten vier Byte den Meßwert und das letzte Byte die Statusinformation enthalten?
Hat da jemand für ein Beispiel?
 
Hallo Leute,
ich erhalte ein Meßwert (aus Profibus PA) im Format 32bit-Gleitpunktzahl im IEEE754 Format.
Wie habe ich den PEW einzulesen und abzulegen, wenn die ersten vier Byte den Meßwert und das letzte Byte die Statusinformation enthalten?
Hat da jemand für ein Beispiel?

Also wenn ich richtig verstehe, dann sind 32 bit dein Messwert und das letzte BYte deinStatus.
Dann ist das ganze 40 bit lang?
Wenn du etwas herausfiltern willst, dann sind Wortoperation dein Freund.


bike
 
wie bekomme ich denn hier z.b. 5 byte eingelesen aus der Gleitpunktzahl im IEE754 format ? Habe gerade was von SFC14 gesehen? möglich
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
wie bekomme ich denn hier z.b. 5 byte eingelesen aus der Gleitpunktzahl im IEE754 format ?

Da beginnt mein Verständnis Problem.
Wenn eine Zahl 32 Bit lang ist, wie willst du da mit 5 Byte also 40 Bit da etwas herausnehmen?
Wenn dein Datenfeld 40Bit lang ist, dann kannst du doch die rechten 32 Bit hernehmen, zwischenspeichern und wandeln.

und dann die linken 8 Bit als Status zwischenspeichern und auswerten.

Wo ist das ein Problem?:confused:


bike
 
Da beginnt mein Verständnis Problem.
Wenn eine Zahl 32 Bit lang ist, wie willst du da mit 5 Byte also 40 Bit da etwas herausnehmen?
Wenn dein Datenfeld 40Bit lang ist, dann kannst du doch die rechten 32 Bit hernehmen, zwischenspeichern und wandeln.

und dann die linken 8 Bit als Status zwischenspeichern und auswerten.

Wo ist das ein Problem?:confused:


bike

Vielleicht weiß er nicht, welches der 5 Bytes das Statusbyte ist.

Wir haben zu wenig Informationen, um eine sinnvolle Aussage zu tätigen.
 
wie bekomme ich denn hier z.b. 5 byte eingelesen aus der Gleitpunktzahl im IEE754 format ? Habe gerade was von SFC14 gesehen? möglich

Was willst du machen?
Du kannst mit SFC die Daten einlesen.
Du kannst aber auch mit Laden der Eingangsworte diese deinem Programm zur Verfügung stellen.
Doch solange du ein Geheimnis daraus machst, was du wie machen willst, kann dir nicht geholfen werden.

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie gesagt, ich habe ein Wert als Gleitpunktzahl im IEEE754 Format, besteht aus 4 byte Werte + 1 Byte Status. Das möchte ich einfach in ein DB ablegen. Jedoch vorher mit TAD die bitreihenfolge tauschen und über SFC14 in ein DB ablegen.
 
Mit "L ED yyy" kannst du (nur) deinen Messwert laden, da du aber mehr als 4 Bytes (dein Status)
konsistent haben willst, nimm den SFC 14.

Die LADDR-Adresse und den DB musst du anpassen, den RET_VAL kannst du auch woanders hinlegen:

Code:
CALL SFC 14      //"DPRD_DAT"
LADDR :=W#16#zzz //5 Byte konsistent von der Adresse zzz lesen
RET_VAL:=MW20    //Status-/Fehlermeldung vom SFC 14
RECORD :=P#DBxx.DBX0.0 BYTE 5 //schreiben in einen DB ab DBB0....

Nun liegt dein Messwert im DBxx ab DBB 0, 1, 2 und 3 (=DBW 0 + 2 oder auch = DBD 0) und
dein Status liegt in DBB 4.
Deinen Messwert kannst du nun mit L DBxx.DBD 0 (REAL) laden und verarbeiten,
den Status lädst du mit LDBxx.DBB 4 (BYTE) und wertest in aus.

Wie gesagt, ich habe ein Wert als Gleitpunktzahl im IEEE754 Format, besteht aus 4 byte Werte + 1 Byte Status. Das möchte ich einfach in ein DB ablegen.
Jedoch vorher mit TAD die bitreihenfolge tauschen und über SFC14 in ein DB ablegen.

Das TAD tauscht keine Bits, sondern die Byte-Reihenfolge im Akku.
Wenn du die Bytes tauscht, wird auch deine eigentliche Zahl verändert.

Wenn du unbedingt die Bitreihenfolge des Messwerts tauschen willst (aus welchen Gründen auch immer),
dann benutze die Rotieroperationen RLD oder RRD, jeweils mit Operand 32 (=32 Bits rotieren)
 
Zurück
Oben