现场设备用485线接入MOXA MB3480网关,然后用网线接入交换机,在wincc中建立modbus TCP/IP连接,用这样的方式来读取现场设备数据。有一台设备通过MODSCAN32仿真软件可以读取到数据,但是要选择浮点数(互换)的方式,wincc中不能直接读取浮点数(互换),只能读32-浮点数,请问怎么才能把读到的浮点数转化为浮点数(互换)呢?用脚本或者别的方法都可以,请给出准确指导,谢谢。
图片说明:
最佳答案
如果WINCC中32-位浮点数 IEEE 754读取的数据不正确,说明设备的数据存储格式与WINCC不兼容
从截图看,高低字、高低字节都需要交换,及收到的内存数据为ABCD需要调整为DCBA
这个需要用脚本来处理
如添加WINCC MODBUS TCP变量tag1“无符号的 32 位值”读取设备数据,内部变量tag2“32-位浮点数 IEEE 754”用来保存处理后的值
示例C脚本:
DWORD A=0;
float B=0;
A=GetTagDWord("Tag1");
((BYTE*)&B)[0]= ((BYTE*)&A)[3];
((BYTE*)&B)[1]= ((BYTE*)&A)[2];
((BYTE*)&B)[2]= ((BYTE*)&A)[1];
((BYTE*)&B)[3]= ((BYTE*)&A)[0];
SetTagFloat("Tag2",B);
提问者对于答案的评价:
谢谢大佬,成功解决。参考MODSCAN以及16进制转浮点数在线转换工具,确定需要把ABCD改为CDAB,对应修改为0-2,1-3,2-0,3-1。多谢指点。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc366966.html