IEEE 754 с одинарной точностью для REAL Codesys

Я использую ПЛК Wago 750, на самом деле я читаю через ModBus 32-битный регистр с другого устройства и сохраняю значение в var POINT TO REAL, в этом конкретном случае значение равно 0000 40A0. Я инвертирую MSW и LSW, чтобы иметь 40A0 0000 (IEEE 754) с десятичным числом 5,0. Моя проблема в том, что я не знаю, как отформатировать этот POINTER TO REAL в REAL переменную с помощью CODESYS для преобразования его в STRING.

Заранее спасибо.


person Luis Miguel Mora Vera    schedule 24.02.2016    source источник
comment
Можете ли вы опубликовать код, который у вас есть, где вы инвертируете MSW и LSW, и любые попытки, которые вы пытались преобразовать в строку?   -  person mrsargent    schedule 24.02.2016


Ответы (1)


Опустив приведенную ниже логику замены слов, вы сможете преобразовать POINTER TO REAL в REAL для преобразования в STRING.

VAR
   realVal:REAL:=5.0;
   pRealVal:POINTER TO REAL;
   newReal:REAL;
   someString:STRING;
END_VAR

(*save real value to pointer *)
pRealVal:=ADR(realVal);

(*dereference the pointer to some other real value *)
someOtherReal:=pRealVal^;

(*convert real value to string *)
aString:=REAL_TO_STRING(someOtherReal);

ключ - это ^, который разыменовывает указатель.

person mrsargent    schedule 24.02.2016