三、ModBus协议实战分析

在这里插入图片描述

0x01 前言

上一篇文章我们学习总结了Modbus协议相关的一些理论基础,在这篇文章中,我们将通过搭建Modbus仿真环境来对Modbus协议进行实际分析。

协议分析环境:

  • ModbusPoll : 用于仿真Modbus主站或Modbus客户端
  • ModbusSlave : 用于仿真Modbus从站或Modbus服务器
  • Configure Virtual Serial Port Driver :简称VSPD, 用与给电脑创建虚拟串口
  • CommMonitor :串口监控精灵,能够监控串口数据传输

软件下载:

  • ModbusPol、ModbusSlave、VSPD下载:https://pan.baidu.com/s/1vQiGP-AIYxShcZhbxbctTg 提取码: dqeg
  • CommMonitor下载:http://www.ceiwei.com/mt/

0x02 使用VSPD新建串口

正常情况下,Modbus协议调试需要两台以上的电脑联机进行调试。但是在使用了VSPD后,我们能够通过在一台电脑上创建虚拟串口的方式,在一台主机上分析Modbus通信。

安装过程就一路next就可以,安装好之后,更具提示进行软件破解。

打开软件页面如下,右边就是新增串口操作的功能位置,我们选择两个较大的串口号进行添加,如下图:

在这里插入图片描述

点击添加,成功在左侧页面看到添加的虚拟串口信息:

在这里插入图片描述

为了验证是否添加成功,可以在此电脑->管理->设备管理器找那个查看端口,如下图,成功添加。

在这里插入图片描述

0x03 新建ModBus串口连接

ModBus Slave 软件安装过程一路next就可以,安装完之后,打开输入即可进行正常使用。

打开后新建连接,Connection—>Connection,提示要输入key,输入软件包中提供的秘钥即可,然后一路OK到如下页面,设置连接信息如图,红框标出的内容需注意,连接串口选择刚刚VSPD添加的串口。

在这里插入图片描述

ModBus Poll与ModBus Slave 一样的安装和打开操作,只不过在选择串口的时候,选择创建的另一个就OK。

在这里插入图片描述

主从站点都已经建立了连接,就需要对主从站点进行设置,点击菜单栏的Setup --> Definition: function 03 ,保持寄存器信息,对于主站和从站来说都相同,如下图:

在这里插入图片描述

主从站设置好之后,可以双击从站(Slave)的寄存器的的某一行的地址,然后输入数据,并勾选上自动增加数值选项,让其每秒自动增加:

在这里插入图片描述

然后在主站中查看是否读取到寄存器的值,如果读取到,说明主从站连接成功。

在这里插入图片描述

0x04 使用 CommMonitor 进行分析

对于安装, CommMonitor串口监控支持WinXP,Win7,Win10, Win11,32/64位操作系统,默认安装即可 。

打开软件后,我们需要对串口进行监控,这里我们选择串口COM21,因为我们点击主站串口选择的就是COM21,数据主要是从主站发起,从站响应,并且由于所有数据都会通过两个串口,所以只需要监听其中一个就可以。

在串口监控设置方面,选上ModBUs视图,MOdbus RTU 模式,与我们的连接方式相对应。

在这里插入图片描述

串口监控设置好之后,我们就能看到串口中实时传输的数据了,基本情况如下:

在这里插入图片描述

如图所示,Modbus协议已经被解析,0x03功能码表示正在请求读取保持寄存器的值,请求读取的地址为0x00,读取长度为0x0A,校验码为0xC5CD。

对于从站响应包解析结果如下图:更具结果中的响应码说明从站寄存器数据读取成功。

在这里插入图片描述

然后我们再修改主站上的数据,发送到从站:

在这里插入图片描述

我们再来看看ModBus协议数据,如下图是我们的请求数据包,可见功能码是0x06,也就是写单个保持寄存器,要写入的值为222:

在这里插入图片描述

再看看响应包的内容,响应包中的功能码也为0x06,说明写入成功:

在这里插入图片描述

0x05 使用Wireshark抓包分析

首先说说在环境设置上的不同点:在新建连接的时候无论是主站还是从站,都需要将传输协议设置为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

0x06 参考文章

  • https://blog.csdn.net/as480133937/article/details/123219425
  • https://baijiahao.baidu.com/s?id=1728421275380437231&wfr=spider&for=pc
  • https://www.likecs.com/show-94474.html
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程背景Modbus 协议是工业自动化控制系统中常见的通信协议协议的全面理解是个痛点。本课程主讲老师集10多年在Modbus协议学习、使用中的经验心得,结合当前物联网浪潮下Modbus协议开发的痛点,推出这套面向Modbus 协议初学者的课程。本课程不同于以往市面课程只是协议讲解无实现代码,而是采用讲解与实践并重的方式,结合STM32F103ZET6开发板进行手把手编程实践,十分有利于初学者学习。涵盖了学习者在Modbus协议方面会遇到的方方面面的问题,是目前全网首个对Modbus协议进行全面总结的课程。课程名称   协议讲解及实现>>课程内容1、Modbus 协议的基础。2、Modbus协议栈函数编程实现。3、Modbus协议在串行链路编程实现。4、Modbus协议在以太网链路编程实现。5、常见问题的解决方法。带给您的价值通过学习本课程,您可以做到如下:1、全面彻底的理解Modbus协议。2、理解在串行链路,以太网链路的实现。3、掌握Modbus协议解析的函数编程方法,调试工具的使用。4、掌握多个串口,网口同时运行同一个Modbus协议栈的方法。5、掌握Modbus协议下,负数,浮点数等处理方法。讲师简介许孝刚,山东大学工程硕士,副高职称,技术总监。10多年丰富嵌入式系统开发经验,国家软考“嵌入式系统设计师”。2017年获得“华为开发者社区杰出贡献者”奖励。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值