文章目录
1 软件说明
- Modbus Poll:是Witte Software公司开发的的Modbus主机仿真器,用于测试和调试Modbus从设备。软件支持ModbusRTU、ASCII、TCP/IP协议。支持多设备监控,可以同时监视多个从设备/数据域。
- Modbus Slave:Modbus从设备仿真器,主要用来模拟Modbus从站设备,接收主站的命令包,回送数据包。帮助Modbus通讯设备开发人员进行Modbus通讯协议的模拟和测试,用于模拟、测试、调试Modbus通讯设备。
2 本例目标
- 下文中整个测试例子的目标是:在本机电脑上,让slave Id为2,端口为502的Modbus Slave和Poll实现功能码为0x03的Modbus TCP/IP连接。此外,连接检测地址从3开始的100个寄存器。
3 Modbus Poll配置步骤
-
打开软件后的主界面如下图,红字
No connection
表示此时没有连接任何从设备。其中,Tx表示发送帧数,Err表示错误帧,ID表示从站的ID号,F表示功能码,SR表示轮询周期,右下角的[127.0.0.1]:502显示IP地址和端口号
-
点击导航栏里Connection->connect可以设置连接的一些参数,本次例子为Modbus TCP/IP。所以Connection选择Modbus TCP/IP,端口与从站一致设为502。还可以下载
Virtual Serial Port Driver Pro
软件去模拟串口连接。
-
设置成功后,点击
OK
按钮。但还需要进行Modbus TCP/IP连接协议配置。导航栏Setup->Read/Write Definition。根据目标要求,把Slave Id改为2,Function选择03,Address设3,Quantity数量设100。其余属性保持默认。配置好后点击按钮OK
。
4 Modbus Slave配置步骤
-
打开软件后,主界面如下图。其中,ID即从站ID,F为功能码。红字
No connection
表示此时未与任何设备连接。右下角[Any IP Address]:502显示ip地址和端口。
-
导航栏Connection->connect,Connection选择Modbus TCP/IP,端口设为502,其余保持默认。配置好,点击按钮ok。
-
导航栏Setup->Slave Definition。Slave ID即从站地址配为2,Function选择0x03,Address保持默认0,Quantity改为103。因为poll里的address和quantity表示,从address开始读quantity个寄存器值。而slave表示从Address开始共有quantity个寄存器。那么只要slave里有poll要读的寄存器即可,所以slave可以多设寄存器数量但不是不能少配置。
5 各种测试
5.1 正常显示
- 按照上述配置后,两个软件能够实现连接,下面是它们的主界面图:
图1. Modbus Poll
- 查看二者之间的报文,都是导航栏Display->communication。如下图所示,Tx表示发送报文,即poll发出的;Rx为响应报文,即slave响应回来的。而Exit表示退出,弹窗关闭;Stop停止报文,显示框内停止报文记录;Clear清空,显示框清空;Log可以把报文保存在本机上,存为txt文件。
- 因为0x03功能码是读寄存器,所以当slave寄存器里值变化时,poll读到的值也会变化。如下图所示。但是改slave寄存器1的数值时,poll没有变化。因为poll没有address为3之前的寄存器。
5.2 Slave Id不一致
- 如果从站ID为2,但是poll没有改,无法成功连接,报
Timeout Error
。
- 打开poll日志发现只有发送报文,没有响应报文。因为Slave ID不一致,slave和poll没有成功连接。
5.3 Quantity不够
- 把slave设置的quantity改为100,即address为0,quantity为100,共100个寄存器。但是不满足poll读的要求。poll界面显示如下,报
Illegal Data Address
非法数据地址。
- 打开poll的日志,有发送报文和响应报文,但是响应报文为异常的。可以与正常时作比较。
5.4 测试IP Address
- 准备两台不同的电脑,即主机,一台运行slave,一台运行poll,让二者连接成功。
- 步骤如下:
- 在主机A上运行Modbus poll,点击Connection->Connection;跳出配置弹窗。在弹窗,选择modbus tcp/IP,填写主机B的IP地址,其它配置默认,点击“OK”。
- 在主机B上运行modbus slave,操作同步骤上,同样选择modbus tcp/IP,先去掉“Any address”,ip根据实际从机设备的IP设置,再勾上“Any address”。点击OK。即可成功建立连接。
6 总结
- 上述内容是常用的连接介绍,软件导航栏的其余选项可自行探索;
- poll和slave不一定要同时使用,这两个软件是进行模拟主从设备的。当有实际的主平台时,可以只有slave模拟从设备,从而检测主平台性能;当有实际从设备时,也可以只有poll模拟主平台。
7 补充
7.1 异常模拟
- 2023-07-28,补充关于Modbus Slave的**故障模拟(Error Simulation)**功能。
- 此功能在”setUp->slave definition…“的弹窗里。下面是针对几种模拟的具体分析。
7.1.1 Skip response
- Skip response:跳过响应。就是poll(主机)在发多帧报文的时候,slave有一帧不回。主机具体发多少帧会有一帧不回,没有进行统计分析,读者可自行实验。配置如下,可设500ms的响应延迟,这样能更清楚看到效果。
- 当slave跳过响应时,poll会显示红字提示
Timeout Error
,且Err计数加一。在本实例中,由39变成40。
- 在communication(Display->communication)中,可以借助
Stop on Error
功能来更好的分析报文情况。
- 此外,还可以勾选
Time stamp(时间戳)
显示每帧报文的具体时间。红线上对应,时、分、秒,即10时50分40秒。
7.1.2 Insert CRC/LRC error
- Insert CRC/LRC error:插入CRC/LRC错误。就是poll(主机)在发多帧报文的时候,slave这边会有一帧返回错误CRC/LRC校验。具体频率,请自行分析。
- 此外要特别注意
Not when using TCP/IP
,该功能不适用于Modbus TCP/IP,因为该协议没有CRC/LRC校验。Modbus的串口通信才有校验,可以使用Virtual Serial Port Driver
软件模拟串口。
7.1.3 Return exception 06. Busy
- Return exception 06. Busy:返回设备繁忙状态,即异常码06。此部分内容可移步Modbus TCP/IP之异常响应。
7.2 自加说明
-
2023-08-07,补充关于Modbus Slave的自加功能(Auto increment)功能。
-
双击数据框,可以修改寄存器/线圈的数值。其中,Auto increment是每次通信后自动增加数值。(可以用来做心跳包模拟)
-
简要测试总结:
- 由于个人项目的需求,主要涉及两个轮询时间1000ms和500ms;
- 当轮询为1000ms时,在0x04功能码下auto increment就是每秒增加1;
- 当轮询为500ms时,在0x04功能码下auto increment为秒增肌2,即每500ms增加1。每次通信后就增加1。
- 但当个人自主测试时,轮询改为200ms和5000ms,并没有实现每200ms加1,或者每5000ms加1。自增频率还是在每秒加1和每秒加2里。当为200ms时,自增频率为每秒加2;当为5000ms时,自增频率为每秒加1。(通过肉眼观测和手机秒表记录的)
- 针对第四点的测试,欢迎大佬评论指点、解释。