问题已解决,wincc7.3的modbus采集64位浮点数格式确实有问题,后来自己编写程序将字节位置调换以后解决了,具体格式为:
1、如果从站采用64位浮点数(不交换),则wincc接收到的数据需要按以下顺序交换字节位置:45670123
2、如果从站采用64位浮点数(交换),则wincc接收到的数据需要按以下顺序交换字节位置:23016745
有个项目,需要wincc用modbus通道接收一个modbus设备的数据,其中有一个数据采用的是double inverse(64位浮点数 高低位交换)格式。结果发现wincc的modbus接收64位浮点数不对,modbus slave设备采用double和double inverse两种格式wincc接收的数据都不对。连接参数里面那个(转换字类型数据为16位值)对64位浮点数没有影响,勾不勾选接收到的值都不变。
请问这个怎么解决啊? 怎样正确接收这个数据?
下面两张图是我用modbus slave模拟器模拟的数据,用modscan和wincc同时连接这个模拟器,modbusscan接收的数据正确,wincc接收的数据不对。
-
引用 wangchen 2017/3/28 21:05:16 发表于2楼的内容
-
-
wuwei01 发表于 2017/4/2 11:22:19
我的测试是wincc对于double类型,能够写入,但显示有问题,一直是0.00 .测试环境是虚拟机win10+wincc7.4+modbus slave 。
定义64为浮点数变量到400001,写入数据123.45, 十六进制表示为 16#405E_DCCC_CCCC_CCCD,
400001~400004分别为
CCCD
CCCC
DCCC
405E
引用 wuwei01 2017/4/2 11:22:19 发表于3楼的内容
-
-
xueba 发表于 2017/4/2 14:20:52
如果Wincc无内置这样顺序,而且只是显示的话,只能分别读4个寄存器然后用脚本合成字符串再显示咯…40位有效值,这么一长串数字看着都头皮嘛…
楼主的什么设备需要64位浮点数精度这么高的精度…难道是银河系内的纳米级别的GPS定位?!!!!吓人又穿越了么……
引用 xueba 2017/4/2 14:20:52 发表于4楼的内容