『7x24小时有问必答』
置顶/标星公众号,不错过每一条消息!
本篇文章分享一下WINCC Modbus TCPIP驱动读取64位浮点数的方法

1.问题描述

大家知道目前为止WINCC Modbus TCPIP驱动是不支持64位浮点数的

1.png

但做项目往往会碰到从站使用这种类型数据,如累积流量值、电度量。那如何读取呢?

2.解决方法

Modbus协议以一系列具有不同特征的数据模型为基础。四个基本模型为:

2.png

对于一个64位浮点数,就是以16-bits word为数据模型,4个连续的保持寄存器。所以可以使用功能码0x03分别读取这4个连续的保持寄存器值,然后还原为原64位浮点数。

如以Modbus Slave为从站,设置WINCC要读取的64位浮点数,其保持寄存器地址为4x00001-4x00004。

3.jpeg

在WINCC Modbus TCPIP驱动添加四个“无符号的 16 位值”变量读取这4个保持寄存器的值

4.png

然后用以下C脚本还原为64位浮点数

5.png

有一点要注意:为了保证数据的一致性,4个连续的保持寄存器必须在一帧报文读取。如下面的情况,可能会导致还原的浮点数不正确:

WINCC需读取Modbus Slave的一个16位整型数据(其保持寄存器地址为4x00001)、一个64位浮点数(其保持寄存器起始地址为4x00100)(当然,对于这么设计从站设备的人,可以认为他不专业)。

由于WINCC优化了其Modbus TCPIP驱动报文(详细内容请看以前推送的文章《WINCCMODBUSTCP协议通道使用注意》),64位浮点数的4个寄存器会被分成两帧报文读取。

6.png

哪怎么解决这个问题呢?我卖个关子,知道的请留言。

推荐阅读:

  最后
若觉得文章对你有帮助,随手点赞、分享,也是支持和鼓励。

扫描下面二维码、关注后,在底部菜单中可查看更多内容!  

微信公众号:scadaclub

长按识别图中二维码关注

7.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码