组态王是北京亚控科技的一款SCADA产品,是一款国内知名度很不错的产品。这里不谈产品本身,而是谈谈在组态王中,通过modbus的方式与PLC或者第三方设备通讯时,如果浮点数需要对其存储器进行字或者字节交换的问题。
做过PLC项目或者是DCS项目,也或者是搞系统维护等的自动化工控人都知道,PLC系统与现场设备或者是第三方PLC系统通过modbus进行数据交换,在进行数据交换时,特别是浮点数可能数据不能直接对上,需要对地址进行字节或者是字进行交换,两个数据才能完全吻合。下面我来讲讲组态王是如何实现的。
一、实验工具
SCADA:组态王6.55版本
PLC或者第三方:用modsim来模拟
二、实现步骤
1、启动modsin模拟器,通过modbus tcp的方式连接,IP地址:127.0.0.1,端口号:502,设备地址:1,寄存器地址:40001,40002,40003,40004,40005,40006,如下图所示:
![32b21fcc743a8d56b2c0982aad3152cc.png](https://i-blog.csdnimg.cn/blog_migrate/44d12c7b241366b0e4176094bb609c62.jpeg)
图1 modsim仿真页面
2、启动组态王管理器,并打开测试的项目,如图所示
![0622e747113b4d37dc7831e43491b4ce.png](https://i-blog.csdnimg.cn/blog_migrate/de52266769f48e2049be4c3efa6be284.jpeg)
图2 组态工程浏览器窗口
3、配置设备通讯接口,本文采用莫迪康的MODBUS TCP方式。在工程浏览器窗口左侧的设备---板卡---双击新建---PLC---莫迪康----modbus TCP---下一步。如下图所示
![d41a1ca7053decb7606787fdb2d5918d.png](https://i-blog.csdnimg.cn/blog_migrate/0da59894d9b533417077f5aea031ff99.jpeg)
图3 通讯接口配置1
在上图中下一步之后,填上逻辑名称,然后下一步,然后接着选择连接的串口号,这里的串口,必须选择一个没有使用的串口号,如COM15,然后下一步进入下一个配置窗口,如图所示
![aefd19b7a8cc09b6bb6c21cef978618a.png](https://i-blog.csdnimg.cn/blog_migrate/272792e141905e9ae85233131185a1da.jpeg)
图4 通讯接口配置2
在上图点击下一步后,进入设备地址填写界面,地址为:127.0.0.1:502 1/10,地址组成为:设备IP地址+:+端口号+空格+设备地址+/+超时时间。如图所示
![4e5b51a71746a67803bbcefb73fa3226.png](https://i-blog.csdnimg.cn/blog_migrate/afcfd4d633485438e4a2c42296e3bed5.jpeg)
图5 通讯接口配置3
上图单击下一步,直至完成。这样新建的设备就创建完成,如图所示
![57a39e4c63932c1ed64ea45380df09a0.png](https://i-blog.csdnimg.cn/blog_migrate/c208727a23dd20f4a396ef1f986447e0.jpeg)
图6 通讯接口配置4
4、组态王中,浮点数需要寄存器做字或者字节交换以及寄存器说明,如图所示
![197e74bc507bc993e8d27f044742e9af.png](https://i-blog.csdnimg.cn/blog_migrate/8f5793a30f0ffd1cbff88dd01d439cda.jpeg)
图6 浮点数交换的官方说明1
![e3b7714826034adbb88068da34caa6a7.png](https://i-blog.csdnimg.cn/blog_migrate/747c2dcf8ae343482e9ba0fcf49f3754.jpeg)
图7 浮点数交换的官方说明2
![12099e265339ff093190c0cf64f439fe.png](https://i-blog.csdnimg.cn/blog_migrate/11aab9e0eadec59239226c3011c6cca4.jpeg)
图8 浮点数交换的官方说明3
5、建点三个I/O实型点,每个点占用2个字的modbus地址,如图所示
![0889c513688d6de62d7dc5073288bf2d.png](https://i-blog.csdnimg.cn/blog_migrate/c632bf53fd73943cbf27675c30f50f0f.jpeg)
图9 变量建立说明1
![dfb2319da732fa51043446b5a07b0a49.png](https://i-blog.csdnimg.cn/blog_migrate/3a7e95e414f2177f6598712b28ca133c.jpeg)
图10 新建的三个变量
6、本步骤比较重要,要充分理解组态王地址交换,这里需要建一个I/O整型的变量,寄存器选择:连接设备:选择组态王连接的设备,寄存器选择:SwapF0,记住这里是SwapF0,不是SwapF,数据类型选择:BYTE,读写属性选择:读写,如图
![3b13fd52fad6adc4166976ed7e32922f.png](https://i-blog.csdnimg.cn/blog_migrate/5f1be35acc333f431489e12667197f98.jpeg)
图11 新建的SWAPF测试变量窗口
说明:如果在通讯时从1地址读取的四个十六进制值为 HV1,HV2, HV3, HV4则:
当SWAP测试变量 = 0时,转换后浮点数对应的内存值为: HV4 HV3 HV2 HV1。
当SWAP测试变量 = 1时,转换后浮点数对应的内存值为: HV3 HV4 HV1 HV2。
当SWAP测试变量 = 2时,转换后浮点数对应的内存值为: HV1 HV2 HV3 HV4。
当SWAP测试变量 = 3时,转换后浮点数对应的内存值为: HV2 HV1 HV4 HV3。
7、新建一个测试画面,并在画面中建立三个变量的显示,如图所示
![9dce3f5cca2989a7400a3d28f7bbec66.png](https://i-blog.csdnimg.cn/blog_migrate/81fa625fa19645096f0cbdf03a76671a.jpeg)
图12 画面动态连接图
8、新建一个SWAP测试变量的动态显示以及值得切换按钮,如图所示
![ce3bd9c787dbc8d316c49ea0aaba48e6.png](https://i-blog.csdnimg.cn/blog_migrate/499dc54c9f94c8bb2334b1cb66634a30.jpeg)
图13 SWPF测试变量的动态连接
9、运行画面,并通过切换SWAPF测试变量的值,查看变量的数据变化。如下图所示:
![0fcc1a5e15ed4d02d5d95f834dd0efd9.png](https://i-blog.csdnimg.cn/blog_migrate/7a2a43f918871e21093838beea0823a1.jpeg)
图14 Modsim寄存器的当前值
![329cf6180c8c471ebc1d843b13f601cd.png](https://i-blog.csdnimg.cn/blog_migrate/ca579585a7f9c8f6351bf7edf7020f96.jpeg)
图15 SWAP测试变量值不同,组态王动态显示值对比图