Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 49387

DWORD aus 4 Bytes to signed INT

$
0
0
Hi,

ich spreche einen Service meiner Wärmepumpe an, um damit ein paar Temperaturen auszulesen.

Die Wärmepumpe (Luxtronic) liefert Werte, die ich als BYTES -> DWORDs -> REAL auslese über die SysLibSockets (Wago Steuerung, Codesys 2.x)

Code:

V_tempAussen := DWORD_TO_REAL(DWORD_OF_BYTE(R_BUF.BUFFER[72],R_BUF.BUFFER[73],R_BUF.BUFFER[74],R_BUF.BUFFER[75]))/10;
DWORD_OF_BYTE habe ich aus der Oscat Lib:
Code:

FUNCTION DWORD_OF_BYTE : DWORD
VAR_INPUT
    B3 : BYTE;
    B2 : BYTE;
    B1 : BYTE;
    B0 : BYTE;
END_VAR
--
DWORD_OF_BYTE := SHL(SHL(SHL(BYTE_TO_DWORD(B3),8) OR BYTE_TO_DWORD(B2),8) OR BYTE_TO_DWORD(B1),8) OR BYTE_TO_DWORD(B0);

Sobald die Temperator < 0 wird klappt es mit dem Vorzeichen nicht mehr, > 0 °C sieht alles gut aus.
Nach einigen Versuchen komme ich nicht auf den Trichter, wie ich das zu einem Signed INT / 100 oder direkt in ein vorzeichenbehaftetes REAL konvertieren kann.

Vielen Dank für Eure Hilfe!
Philipp

Viewing all articles
Browse latest Browse all 49387


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>