上一篇文章我们学习总结了Modbus协议相关的一些理论基础,在这篇文章中,我们将通过搭建Modbus仿真环境来对Modbus协议进行实际分析。
协议分析环境:
软件下载:
正常情况下,Modbus协议调试需要两台以上的电脑联机进行调试。但是在使用了VSPD后,我们能够通过在一台电脑上创建虚拟串口的方式,在一台主机上分析Modbus通信。
安装过程就一路next就可以,安装好之后,更具提示进行软件破解。
打开软件页面如下,右边就是新增串口操作的功能位置,我们选择两个较大的串口号进行添加,如下图:
点击添加,成功在左侧页面看到添加的虚拟串口信息:
为了验证是否添加成功,可以在此电脑->管理->设备管理器找那个查看端口,如下图,成功添加。
ModBus Slave 软件安装过程一路next就可以,安装完之后,打开输入即可进行正常使用。
打开后新建连接,Connection—>Connection,提示要输入key,输入软件包中提供的秘钥即可,然后一路OK到如下页面,设置连接信息如图,红框标出的内容需注意,连接串口选择刚刚VSPD添加的串口。
ModBus Poll与ModBus Slave 一样的安装和打开操作,只不过在选择串口的时候,选择创建的另一个就OK。
主从站点都已经建立了连接,就需要对主从站点进行设置,点击菜单栏的Setup --> Definition: function 03 ,保持寄存器信息,对于主站和从站来说都相同,如下图:
主从站设置好之后,可以双击从站(Slave)的寄存器的的某一行的地址,然后输入数据,并勾选上自动增加数值选项,让其每秒自动增加:
然后在主站中查看是否读取到寄存器的值,如果读取到,说明主从站连接成功。
对于安装, CommMonitor串口监控支持WinXP,Win7,Win10, Win11,32/64位操作系统,默认安装即可 。
打开软件后,我们需要对串口进行监控,这里我们选择串口COM21,因为我们点击主站串口选择的就是COM21,数据主要是从主站发起,从站响应,并且由于所有数据都会通过两个串口,所以只需要监听其中一个就可以。
在串口监控设置方面,选上ModBUs视图,MOdbus RTU 模式,与我们的连接方式相对应。
串口监控设置好之后,我们就能看到串口中实时传输的数据了,基本情况如下:
如图所示,Modbus协议已经被解析,0x03功能码表示正在请求读取保持寄存器的值,请求读取的地址为0x00,读取长度为0x0A,校验码为0xC5CD。
对于从站响应包解析结果如下图:更具结果中的响应码说明从站寄存器数据读取成功。
然后我们再修改主站上的数据,发送到从站:
我们再来看看ModBus协议数据,如下图是我们的请求数据包,可见功能码是0x06,也就是写单个保持寄存器,要写入的值为222:
再看看响应包的内容,响应包中的功能码也为0x06,说明写入成功:
首先说说在环境设置上的不同点:在新建连接的时候无论是主站还是从站,都需要将传输协议设置为Modbus TCP/IP,并且设置连接端口为同一个,如下图所示:
设置好连接之后,参照上述方法,在从站设置数据自增长即可,然后打开wireshark进行抓包,如下图是其中的一个请求包:
具体分析情况如下:
byte[0] byte[1]: 00 76 为消息号,随机指定,返回数据包的消息号的和请求数据包的消息号相同
byte[2] byte[3]: 00 00 为modbus强制标识
byte[4] byte[5]: 00 06 modbus报文的长度,往后数,一共也是6个字节,能够正确对应
byte[6]: 01 为从站编号
byte[7]: 03 功能码,标识读取保持线圈寄存器的值
byte[8] byte[9]: modbus将要读取的保持寄存器的起始地址
byte[10] byte[11]:modbus将要读取的保持寄存器的个数
再来看看响应包:
对响应包的具体分析如下:
byte[0] byte[1]: 00 76 为消息号,与请求包相同
byte[2] byte[3]: 00 00 为modbus强制标识
byte[4] byte[5]: 00 17 modbus报文的长度,往后数,一共也是23个字节,能够正确对应
byte[6]: 01 为从站编号
byte[7]: 03 功能码,与请求包的功能码相同
byte[8]:读取到的数据长度的总长度,往后数一共20个byte,与之对于。
byte[9] byte[10]:第一个保持寄存器的数据,2个byte
byte[11] byte[12]:第二个保持寄存器的数据,2个byte,此处为00 41 ,也就是65
byte[13] byte[14]:第二个保持寄存器的数据,2个byte
........
byte[27] byte[28]:第10个保持寄存器的数据,2个byte