plc - 双猫 3 : How to convert 4 HEX array to Float?

标签 plc twincat

我们正在接收(通过 UDP 数据报)一个由 4 字节十六进制数组编码的浮点值。

我们需要将 4 个十六进制字节转换为 float 。

udp_data[0] = 'BE';
udp_data[1] = '7A';
udp_data[2] = 'E0';
udp_data[3] = 'F4';

在给定的例子中,正确的等价,转换后,udp_data等价于-0.24499:

Twincat 3 PLC 中的最佳转换是什么?也许一些图书馆?我们需要一次对这种类型进行 52 次转换。

我附上了一个例子,其中的例子取自在线计算器:

谢谢!!

最佳答案

您可以使用 UNION 类型,它将在同一地址保存一个字节数组(就像您从 UDP 通信中获得的那个)和您要转换为的真实变量。
当您更改字节数组时,真实会自动反射(reflect)出来。事实上,转换也可以反过来进行。

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;

关于plc - 双猫 3 : How to convert 4 HEX array to Float?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039570/

相关文章:

java - PLC-IT通讯

programming-languages - 为什么 Elsif 不是 Else If 在 PLC 编程中

plc - 用于读取和写入 PLC 标签(在 AB Logix 5000 Controller 上)的 CIP 服务是原子的吗?

c# - 如何从 Windows 10 中的 TwinCAT 获取符号?

TwinCAT 和 CoDeSys 中的指针和在线更改

PLC能力及工作原理

logic - Step7 - 如何调用循环中断

python - Pyads 在通知上读取值 : when TwinCat cycle occured

plc - 如何在 twincat3 中为数组分配可变长度