前言
我们在开发Modbus程序的时候,会需要测试以下我们写的Modbus程序有没有问题,这时候就需要使用到Modbus Slave和Modbus Poll这两个软件,Modbus Slave是模拟Modbus从站,Modbus Poll是模拟Modbus从站主站的,
1、协议选择
一般情况下我们开发的Modbus主站程序,当我们没有硬件作为从站的时候,我们可以使用Modbus Slave来模拟Modbus从站,然后我们就可以对Modbus Slave进行访问,进行读取线圈状态,读取保持寄存器的值等操作,当然我们在进行Modbus调试的时候可能有三种不同的协议,也就是ModbusRTU、ModbusASCII、ModbusTCP,下面分别介绍如何在Modbus Slave使用这三种不同的协议
1.1 ModbusRTU
当我们使用ModbusRTU协议时,在连接时选择Serial Port,然后Mode中选择RTU即可,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a0d2e717d4c4d1d87d7b755279437af.png)
1.2 ModbusASCII
当我们使用ModbusASCII协议时,在连接时选择Serial Port,然后Mode中选择ASCII即可,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/5ee65dee3f274ea7acd7aa807b8d1b4b.png)
1.3 ModbusTCP
当我们使用ModbusTCP协议时,在连接时选择Modbus TCP/IP,然后设置IP Address、Port即可,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a2327a6b3b7e4d08a252ee6fd7227de1.png)
2、Modbus Slave
2.1 Modbus Slave创建0到9一共10个地址的线圈
这里以Modbus RTU为例,我们通过Modbus Slave创建0到9一共10个地址的输出线圈,并且将地址0、1、2这三个地址的值赋值为1,其余地址值为0,操作步骤如下:
1)点击“Connect”
![在这里插入图片描述](https://img-blog.csdnimg.cn/54e4fdc5302f4624bf5a38207a0317ba.png)
2)设置通信参数
尤其注意,因为我电脑使用虚拟串口助手,虚拟了COM1、COM2这一对串口,所以我在这里选择的是COM2,因为我会在Modbus主站打开COM1,然后点击“OK”
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7dc9ec54e924d2bafa602557f835774.png)
3)点击“Slave Definition”
![在这里插入图片描述](https://img-blog.csdnimg.cn/b0fe5c9ee1ba48f89360db501b3e8d88.png)
4)设置读取、写入参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/b562337924134e63a9b26916aa7ea863.png)
设置从站地址(Slave Id)为1
设置功能(Function)为01 线圈状态,这里特别要注意的是:
4.1)当主站使用0x01、0x05、0x0F这三个功能码时,ModbusSlave的Function都是选择01 Coil Status
4.2)主站使用0x02这个功能码时,ModbusSlave的Function都是选择02 Input Status
![在这里插入图片描述](https://img-blog.csdnimg.cn/cfecf5c6e7c045c5bc634c4e89ed92a6.png)
4.3)当主站使用0x03、0x06、0x10这三个功能码时,ModbusSlave的Function都是选择03 Holding Register,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/406a9556a35040b29becaa54285c1875.png)
4.4)当主站使用0x04这个功能码时,ModbusSlave的Function都是选择04 Input Register,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/bde665b3c3f34b85bcfcb14150f4bed7.png)
设置起始地址为0
设置数量为10,
结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/cf3bbd4140da4859880a533567a2c07a.png)
我们可以手动的更改每个线圈的值如下:
双击箭头所指处,然后弹出一个窗体,我们可以设置该线圈的值时ON还是OFF。
![在这里插入图片描述](https://img-blog.csdnimg.cn/01f510f1394145e79ca33bc655ecdee7.png)
我们将地址0、1、2设置为ON,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7e17cb4eaf14965ab46ce3a85e135af.png)
5)打开Modbus Poll
![在这里插入图片描述](https://img-blog.csdnimg.cn/3ae07082dbe04591b4da2d4eccc98c40.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/92db3f73029e4543b20d2258f7787c29.png)
将Modbus Poll的参数设置的和Modbus Slave一样,就会发现地址0、1、2的值在ModbusPoll中显示的都是1.