我正试图从电能表读取值,并将它们转换为REAL(32位浮点数)。在这种情况下,我正在读取1相电压。每个值在两个寄存器中读取。所以我已经收到了值17268的单词(MSW)和2456(LSW)将它们转换为DWORD,然后在乘以0.1后转换为REAL值,但我没有得到我所期望的答案。我应该得到245.0375伏特。然而,我得到1.13E+08请查看带有活动值的结构化文本的片段。剪断
问题是DWORD_TO_REAL
正在尝试进行类型转换;即使DWORD
的值与REAL
的格式匹配。在您的情况下,MSW
和LSW
的内容只是一个分成两半的IEEE754值,只需要强制进入REAL
变量的相应位。使用TwinCAT (Beckhoff),我将进行直接内存复制:
MEMCPY(ADR(realValue)+2, ADR(MSW), 2);
MEMCPY(ADR(realValue), ADR(LSW), 2);
我认为Schneider也有类似的命令。