"Byteverwürfelung"

Ricko

Level-1
Beiträge
118
Reaktionspunkte
0
Hallo SPS'ler

habe Problem einen Wert richtig darzustellen. Kommt vom E+H Zähler als Registerwert:
000 Status aktuell "1" also Wert ist OK
001 und 002 bilden den Wert als 32 Bit Float (HB als zuerst!)
gang 0..20mA Bereich 0..100%


In S7 ist alles OK z.b 81,3%

die Register sind Wortweise gelesen.
der 001 habe ich in wird DWORD umgewandelt, 16 Bit nach links verschoben
der 002 in DWORD umgewandelt, beide DWORD mit OR verknüpft. Diese Wert zeigt als REAL 81,3% :D

es handelt sich aber um ABB SPS, ich bekomme als REAL 1.1857e+009 !?

Die Byts sind irgendwie vertauscht!

Habe probiert die Register Byteweise auszulesen:
also 000,001 Status 002,003 und 004,005 den Wert

die Bytes habe ich verschoben so dass in einem DWORD die Position 5,4,3,2 aber auch 2,3,4,5 hatten alles um sonst!

Wie geht das !

Fragende Grüße

Ricko
 
Kann es sein das es hier das Problem mit den INTEL / MOTOROLA Format gibt ...
Also das Hig- und Low-Bytes verdreht sind.

Also 1-2-3-4 so in der Art 2-1-4-3
 
DIE LÖSUNG!

Boxy hat recht mit dem Motorola Format.
Normale IEC Konvertierungsbausteine kann man nicht einsetzen!
Im S7 kein Problem!

Für CodeSys wird der SysMemCopy und 2 ADR Bausteine verwendet (Danke an Hr.B. von ABB).
Der SysMemCpy umkopiert den Speicher (dwSCR Eingang) um N (dwCount Eingang, hier 4) Speicherstellen auf die Adresse (dwDest Eingang, auch Speicher).

Der gelesen DWORD (wie oben beschrieben...schieben, verodern) da WORD-Register 001 Hex: 42A2 und 002 Hex: C7B6 enthält.

also 16#42A2C7B6 geht an den ADR Baustein, der mit dwSCR Eingang verbunden ist.
Die Adresse WERT_Nr (DWORD) geht an ADR Baustein, der mit dwDest verbunden ist

(INFO: ADR Baustein liefert die Adresse seines Arguments in DWORD Format, es wird die Absolute Adresse ermittelt)

WERT_Nr zeigt dann Hex: 42A2C7B6 aber auch Dez. 81,3 :D


Grüße
Ricko
 
Zurück
Oben