Decode Real Format aus 2 Word / Modbus

  • Jens Pasch
  • Autor
  • Besucher
  • Besucher
1 Jahr 5 Monate her #241 von Jens Pasch
Decode Real Format aus 2 Word / Modbus wurde erstellt von 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?

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
1 Jahr 5 Monate her #242 von 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

Anhänge:
Folgende Benutzer bedankten sich: Jürgen Huber

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

logi.cals Österreich

Adresse

Europaplatz 7/1,
3100 St. Pölten

logi.cals Deutschland

Adresse

Postfach 1306,
40738 Langenfeld

Benutzer

Registrieren
© 1987 - 2019 logi.cals GmbH