我们正在接收(通过UDP数据报)由4个字节的十六进制数组编码的浮点值。
我们需要将4个十六进制字节转换为浮点数。
udp_data[0] = 'BE';
udp_data[1] = '7A';
udp_data[2] = 'E0';
udp_data[3] = 'F4';
在给定的示例中,转换后的正确等效项udp_data等于-0.24499:
Twincat 3 PLC的最佳转换是什么?也许一些图书馆?我们需要一次执行这种类型的52次转换。
我附上了一个例子,并举例说明了一个在线计算器:
谢谢!
答案 0 :(得分:6)
您可以使用UNION类型,该类型将在同一地址保存一个字节数组(就像从UDP通信中获得的字节数组一样)和要转换为的实变量。
更改字节数组时,实数会自动反映出来。实际上,这种转换也可以采用其他方法。
TYPE U_Convert :
UNION
arrUDP_Data: ARRAY [0 .. 3] OF BYTE; // Array must start with LSB
rReal : REAL;
END_UNION
END_TYPE
在MAIN中,您可以声明以下变量。
VAR
uConvert: U_Convert;
fValue : REAL;
END_VAR
然后在MAIN主体中,将字节数组更新为请求的值。
// Here we update the byte array
uConvert.arrUDP_Data[0] := 16#F4; // LSB
uConvert.arrUDP_Data[1] := 16#E0;
uConvert.arrUDP_Data[2] := 16#7A;
uConvert.arrUDP_Data[3] := 16#BE; // MSB
// Here we 'use' the converted value
fValue := uConvert.rReal;
答案 1 :(得分:4)