打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【原创分享】经典WINCC浮点数输入/输出异常的处理方法
【导读】WINCC在进行Modbus TCP通信时,由于WINCC默认是大端模式存储,即数据高字存在低位存储器中,这就导致有些小端模式的现场仪表的的浮点数不能正确在WINCC上进行显示,必须进行大小端匹配转换(有的品牌可以直接设置)。下面详细阐述处理方法。
技术交流点此进群
销售采购点此进群

(一)模拟服务器环境搭建

本例并不采用Modbus SIMModbus Slave做为服务器的原因是这两个软件可以通过DINTREAL的显示格式。通常在实际现场,设备侧的寄存器存储模式已经固定,不能修改,这样就必须在上位中进行处理。
利用施耐德UnityPro建立一个Modbus TCP的仿真服务器,并新建变量如下图,变量aabb分别为REALDint类型,在内存中都是占据%MW0,%MW1四个字节,通过在线监视可以看出,施耐德数据存储是“小端模式”即数据高字存在高位存储器中,即CDAB形式。

(二)WINCC通信

WINCC中新建驱动并新建a3a4变量,分别为FLOATDINT类型,同样在内存中都是占据%MW0和%MW1共四个字节,并在上位画面中与相应的IO域关联。

与施耐德仿真PLC通信成功后,不难发现%MW0和%MW1均与PLC上一一对应,但是REAL类型的a3变量不能显示,a4类型的DINT变量与PLC侧的DINT数据不一样。通过对比不难发现在WINCC侧DINT和REAL的存储结构是高字储存在低位,而在PLC侧是高字储存在高位,这样就造成这种双字类型的变量显示异常。

(三)输出值处理

为了能正确显示,需要在IO域输出中利用C脚本进行高低字转化,具体过程如下图:

通过上述C脚本处理后REAL类型显示值就与PLC侧一致了,DINT类型的处理过程类似,就不在赘述。

(四)输入值处理

通过上述方法处理后,这样虽然可以正常的显示,但是无法通过上位IO域输入修改PLC侧的变量数据。

因此本文通过监听输入值改变的事件,然后在事件中利用脚本将输入的值按照小端模式进行重新组合后再写给变量,从而改变相应变量的值并且与PLC侧数据同步。具体过程如下:

(五)IO域输入/输出连接不同变量的间接方法

在西门子论坛中看到过两个咨询帖子,关于IO域的输出和输入连接不同变量的问题,通过官方的回复,基本确定目前并不支持该功能。

通过前面解决浮点数显示和输入问题的思路,我们同样可以可以利用C脚本间接实现一个IO域输出、输入关联不同的变量。具体实现过程,各位网友可以按上述思路完成。

(六)博途WINCC Modbus TCP驱动

默认情况在博途WINCC中新建Modbus TCP驱动时,有一个改变字顺序复制框,默认情况是没有勾选的。

同时在博途WINCC下建立相同的变量进行测试,结果如下:
(1)不勾选更改字顺序,按小端处理,与PLC侧数据一致。
(2)勾选更改字顺序,按大端处理,显示数据异常。

作者简介(微信ID:xiaoxing2324)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用OB8x诊断SIMATIC PLC(PN)
图文详解西门子s7-200smart的modbus通讯!
DLT698转modbus协议网关把电能数据接到wincc的方法
OPC组态软件与WINCC通讯
WinCC通过MODBUS TCP通信读取PAC3200仪表的电能值
新增亮点解读——SMART LINE V4面板
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服