UINT to Float

Raydien

Level-1
Beiträge
219
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich beschäftige mich seit kurzem mit den Beckhoff Steuerung,
Meine aktuelle Aufgabe ist es Daten von einer Siemens über Profibus einzulesen und die auf dem Bedienfeld darzustellen.

Die Kom. klappt ich bekomme die Daten rein. Doch leider nur im dem Format UINT.
Jetzt habe ich eine Siemens Real Zahl (2 Wörter ala UNIT in der Beckhoff Steuerung).

Wie schraube ich die Bytes (bzw. Bits) zusammen, damit nacher eine Floatzahl (32bits) in Beckhoff rauskommt?

Gruß

Ray
 
Zuletzt bearbeitet:
Ich weiß nicht, ob ich dich richtig verstanden habe. Die eine Zahl ist die vor dem Komma und die
andere die Nachkommastellen? Wenn du das so meinst, versuch doch mal
fErgebnis:=UINT_TO_REAL(Vorkommazahl)+UINT_TO_REAL(Nachkommazahl/100);
Ich hab´s zwar noch nicht ausprobiert, aber das wäre meine erste Idee.
 
Das Allereinfachste wäre:

Siemensseitig:
L Wert_Irgendwas (z.B. DB100.DBD0)
TAD
T Sende_DB.Wert_Irgendwas ...

Inwiefern Beckhoff einen Bibliotheksbaustein oder ähnliches für eine Big/Little-Endian Wandlung hat weiß ich nicht.

Mfg
Manuel
 
Wenn ich dich richtig verstanden habe, sollte folgendes funktionieren:

Definiere dir ein Array of UINT

arr : ARRAY [0..1] OF UINT;

da schreibst du die beiden UINT's rein die du bekommst.
Dann machst du dir einen Pointer to REAL:

preal : POINTER TO REAL;
preal := ADR(arr);

das sollte funktionieren. Falls die Siemens eine andere Byte-Order (Motorola Little endian) verwendet, kann es sein dass du die Bytes noch swappen musst.
Dann würde ich einen Umweg wählen:

pbytes : POINTER TO ARRAY [0..3] OF BYTE;

pbytes := ADR(arr);
SWAP(pbytes); // musst du dir selber schreiben einfach die bytes in der Reihenfolge vertauschen

preal := ADR(arr);
 
Zurück
Oben