Decode Real Format aus 2 Word / Modbus

  • Jens Pasch
  • Topic Author
  • Visitor
  • Visitor
1 year 6 months ago #241 by Jens Pasch
Decode Real Format aus 2 Word / Modbus was created by Jens Pasch
Hallo,
möchte über Modbus eine real formatierten Wert einlesen. Habe 2 x Register Word welche ich in einer Funktion zu einem DWORD formatiere.
FUNCTION DWORD_OF_WORD : DWORD
VAR_INPUT
	W1 : WORD;
	W0 : WORD;
END_VAR
DWORD_OF_WORD := SHL (TO_DWORD(W1),16) OR TO_DWORD(W0);
END_FUNCTION

Wie kann ich jetzt das DWORD bitweise decodieren damit ich eine REAL bekomme.
Oder ist das der falsche Ansatz?

Please Log in or Create an account to join the conversation.

More
1 year 6 months ago #242 by Clemens Kneidinger
Hallo,
die Konvertierung zu einem Datentyp ist mit dem Befehl: TO_jeweiligerDatentyp(datentypXY); am einfachsten realisierbar. In Ihrem konkreten Fall könnte der Code folgendermaßen aussehen:

FUNCTION WORD_TO_DWORD_TO_REAL
{
width := 370;
}
VAR_INPUT
W1 : WORD;
W0 : WORD;
END_VAR

VAR_OUTPUT
dword_out : DWORD;
real_out : REAL;
END_vAR
dword_out := SHL (TO_DWORD(W1),16) OR TO_DWORD(W0);
real_out := TO_REAL(dword_out);
END_FUNCTION

Sollte Ihre Frage dahin zielen, dass Sie nicht ganzzahlige Werte, verpackt in zwei WORDs per Modbus empfangen. So werden diese in der Regel mit einem Faktor von 10,100,1000,... versehen (Volt werden meist in Millivolt, Ampere in Milliampere usw. übergeben).

z.B.:
word1 := WORD := 16#0000;
word2 := WORD := 16#270F;

dword_out := SHL (TO_DWORD(word2 ),16) OR TO_DWORD(word1 );
dword_out = 16#0000270F;
real_out := TO_REAL(dword_out);
real_out = 9999;

Dividiert man nun real_out durch z.b. 1000 ist das Ergebnis, solange der Datentyp REAL ist, 9,999.

Beste Grüße
Clemens Kneidinger

Attachments:
The following user(s) said Thank You: Jürgen Huber

Please Log in or Create an account to join the conversation.

LOGI.CALS AUSTRIA

Address

Europaplatz 7/1,
3100 St. Pölten

LOGI.CALS GERMANY

Address

Postfach 1306,
40738 Langenfeld
© 1987 - 2019 logi.cals GmbH