我有一个通过 Profibus DP 与 PLC 通信的硬件,它向我发送 4 个十六进制字节的数据,即“44 79 FF FF”,并且在 PLC 程序中,我为此输入数据声明了一个 BYTE 数组。问题是在 PLC 中,我在 BYTE 数组中收到的数据是“66 121 255 255”,这是十六进制的十进制值,但我的目标是将该值转换为 REAL,当我这样做时,我不是得到我期望的价值。
我创建了一个 DWORD( 4bytesData
),我将所有 BYTES 插入其中。所以在我将 4 个字节插入4bytesData
字节之前是:in1 = 68
, in2 = 121
, in3 = 255
&in4 = 255
4bytesData := (SHL(SHL(SHL(BYTE_TO_DWORD(in1), 8) OR BYTE_TO_DWORD(in2), 8) OR BYTE_TO_DWORD(in3), 8) OR in4);
realValue := DWORD_TO_REAL(4bytesData);
其中 in1、in2、in3 和 in4 是字节 0-3。
我得到的价值是;4bytesData
= 1148846079 & realValue
= 1.148846e+009
我期望从中获得的价值realValue
是= 9.9999993896484375E2
如果我使用这个网站( IEEE754 Analyzer/Converter)并转换十六进制值(4479FFFF),我得到我想要的值,如果我插入十进制值(1148846079),我得到的值与我在可编程逻辑控制器。
我希望你能理解我的问题,非常感谢提前。