前两天,在一个QQ群里,有同行的朋友问,在MCGS中如何实现批量读取数据,因为他当时面临设备,通讯协议才是MODBUS RTU,同时厂家说地址不能分开读,必须是连续的。鉴于他提供的消息是能够设置的地方都试过了。为此,我直接告诉通过脚本,批量读取的方案。那么这个方案究竟如何实现?且看我下面慢慢道来。
一、工具
1.modsim:仿真PLC或者第三方设备。
2.MCGS组态软件
3.串口软件:在电脑中生成两不同名称,但互联的串口,COM1和COM2;
二、指令介绍
1.设备函数
!SetDevice(DevName,DevOp,CmdStr)
函数意义: 按照设备名字对设备进行操作
返 回 值: 数值型
= 0,调用正常
= -1,失败
= -2,超时
= 1,设备启动状态
= 3,设备停止状态
参 数: DevName,字符型,设备名
DevOp,数值型,设备操作码
CmdStr,字符串,设备命令,只有当DevOp=6时CmdStr才有意义
DevOp取值范围及相应含义:
= 1,启动设备开始工作
= 2,停止设备的工作
= 3,测试设备的工作状态
= 4,启动设备工作一次
= 5,改变设备的工作周期,CmdStr包含新的工作周期,单位ms
= 6,执行指定的设备命令,CmdStr中包含指定命令的格式
实 例: !SetDevice(OmronPLC,1,"" ),启动设备构件“OmronPLC”开始工作
2.批评读取指令
ReadPV( 寄存器名称, 起始地址,数据类型,数据个数n,数据1 [,返回状态])
3.使用实例
!SetDevice( 设备0,6,"ReadPV(4,10,WUB,5,Data00, 返回值)")表示读取4 区寄存器从地址10 开始的5 个16 位无符号数值,放入MCGS 变量Data00 为起始,连续5 个变量( 即:Data00,Data01,Data02,Data03,Data04) 中,结果存入变量“返回值”中。
三、批量读取modbus数据的实现方法
1、使用串口软件创建两个互联的串口COM1和COM2,如图所示

图1 串口软件创建的互联串口
2、启动仿真PLC工具Modsim,并通过COM1(POTR1)连接,寄存器区域:保持寄存器区,设备地址:1,起始地址:40001,长度:10,将部分寄存器设置为随机数。如图所示

图2 Modsim设置
3、MCGS组态软件组态
(1)、在设备窗口中,组态设备及其端口,如图所示

图3 设备组态1
(2)、设置通用串口父设备端口为COM2口,波特率与仿真PLC的端口一直,如图所示

图4 父设备串口设置
(3)、父设备下的子设备设置,本实例中名称为“设备1”,并设置好设备1的相关参数,如设备地址,采样周期等,详细如下图所示

图5 设备1的设置
(4)、在运行策略中创建一个循环策略,并设置循环策略循环时间为1s,如图所示

图6 循环策略设置
(5)创建数据标签:Data10~Data14,如图所示

图7 新建的5个变量标签
(6)、在循环策略中用脚本编写批量读取指令!SetDevice( 设备1,6,"ReadPV(4,2,WB,5,Data10, )")各参数见前面指令介绍,本函数实现的是将40002寄存器开始5个符号整型数据存放在Data10~Data14中。如图所示

图8 批量读数脚本
(7)、在用户窗口中创建标签值动态显示画面,并下装运行,效果如图所示

图9 原始数据与批量读数对比图
综上所述:MCGS实现批量读取modbus数据的方法就介绍到这里了。
知识分享是一种态度!欢迎读者阅读,并指正!