如果大家从事物联网相关行业的开发或者运维,相信对于modbus协议不会陌生。刚好我在平时运维工作中,也会因为需要排查问题而接触到modbus协议。本文就通过常用调试工具结合实例带大家来解析modbus协议,希望可以通过具体协议数据解析,让大家加深对该协议的理解。
一、modbus协议简介
modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用modbus协议发出。在其它网络上,包含了modbus协议的消息转换为在此网络上使用的帧或包结构。
此外,modbus协议是modicon公司(现在的施耐德电气 schneider electric)于1979年为使用可编程逻辑控制器(plc)通信而发表。modbus已经成为工业领域通信协议的业界标准(de facto),并且现在是工业电子设备之间常用的连接方式。
此协议是一个请求/应答协议,包括ascii、rtu、tcp等版本。它定义了控制器能够认识和使用的消息结构,而不管它们是通过何种硬件方式进行通信的。所以硬件接口可以是rs-232、rs-422、rs-485和以太网等设备。tcp和rtu是modbus协议的两种常见形式,其中tcp的使用频率更高一些。
二、案例协议文档
以下解析案例来自某厂家的温湿度传感器协议文档。
(一)通讯参数 1、上位机串口设置 本温湿度传感器通讯数据帧格式采用固定的“n,8,1”格式,使用时请将串口设置成1位起始位,8位数据位,1位停止位,无奇偶校验位。
2、数据寄存器地址
(二)应用举例 1、应用举例 (1)多个寄存器数据读取 主机发送
子机响应 地址为1的传感器收到上面的数据后,将会做出以下响应
(2)功能码06应用举例:将子机地址改为2,波特率改为19200
功能码06时的子机响应:子机会将主机发来的数据原封返回。
三、协议解析
以下对上方温湿度传感器及其协议进行数据解析。以下环境均搭建完毕
(一)需要准备工具及其环境: 1、温湿度传感器设备一套; 2、485串口线一条(usb转232线,再通过232转485口接传感器485口); 3、windows环境作为上位机软件modbus poll运行环境; (二)modbus协议数据解析举例 1、读取温湿度传感器的温度的测量值 (1)打开上位机软件modbus poll,如下图所示:
(2)通过在上位机软件中进行串口连接相关配置(根据自己实际电脑串口号进行配置),如下图所示:
(3)在上位机软件中设置读取传感器的相关参数,一般根据协议文档中说明设置,如下图对传感器的温度值进行读取:
(4)打开日志进行记录传感器串口收发数据,方便我们等下转化值进行比对,如下所示:
点击log按钮还可以将串口收发数据保存在文件中,方便查看。
(5)完成以上设置后,即可读取传感器的温度值,如下所示:
(6)执行读取操作后,可以看到如下结果:
串口收发数据如下:
tx:002-01 03 00 33 00 01 74 05
rx:003-01 03 02 06 49 7a 12
根据协议文档对上位机发送的串口数据01 03 00 33 00 01 74 05进行解析: 第一个字节01表示读取地址为1的传感器数据; 第二个字节03表示功能码; 第三、第四个字节00 33表示从寄存器的地址0x0033开始读; 第五、第六个字节00 01表示读取寄存器的个数为1; 第七、第八个字节74 05表示crc码; 根据协议文档对传感器返回的串口数据01 03 02 06 49 7a 12进行解析: 第一个字节01表示485地址为1的传感器进行回应; 第二个字节03表示功能码对应3; 第三个字节02表示读取一个寄存器对应2个字节数; 第四、第五两个字节06 49表示寄存器地址为0x0033对应的内容,转化为10进制等于1609,跟上位机软件自动转化的值一样; 第六、第七两个字节7a 12表示crc码; 2、读取温湿度传感器的湿度、温度、露点的测量值,即读取3个寄存器地址所对应的值
(1)在上位机软件中设置读取传感器的相关参数,一般根据协议文档中说明设置,如下图所示:
(2)开启串口数据收发日志记录
(3)执行读取操作后,可以看到如下结果:
串口收发数据如下:
tx:004-01 03 00 32 00 03 a4 04
rx:005-01 03 06 0f 5a 06 50 00 e4 79 55
根据协议文档对上位机发送的串口数据01 03 00 32 00 03 a4 04进行解析: 第一个字节01表示读取地址为1的传感器数据; 第二个字节03表示功能码; 第三、第四个字节00 32表示从寄存器的地址0x0032开始读; 第五、第六个字节00 03表示读取寄存器的个数为3; 第七、第八个字节a4 04表示crc码; 根据协议文档对传感器返回的串口数据01 03 06 0f 5a 06 50 00 e4 79 55进行解析: 第一个字节01表示485地址为1的传感器进行回应; 第二个字节03表示功能码对应3; 第三个字节06表示读取3个寄存器对应6个字节数; 第四、第五两个字节0f 5a表示寄存器地址为0x0032对应的内容,转化为10进制等于3930,跟上位机软件自动转化的值一样; 第六、第七两个字节06 50表示寄存器地址为0x0033对应的内容,转化为10进制等于1616,跟上位机软件自动转化的值一样; 第八、第九两个字节00 e4表示寄存器地址为0x0034对应的内容,转化为10进制等于228,跟上位机软件自动转化的值一样; 第十、第十一两个字节79 55表示crc码;
四、总结 到此,我们已经结合一款温湿度传感器的协议文档,对它的mudbus协议进行数据解析。其它产品的跟这个差不多,无非可能是参数指标多点。掌握其协议原理并且解析,可以有助于我们排查问题。比如客户反馈温湿度的值不准了,我们第一时间只能通过协议抓包解析,看看它底端的原始值是多少,才能知道不准的根本原因。 关于mudbus协议数据转化,我们经常在16进制与10进制之间进行转化,下面给大家附上一些在线转换工具网址。 https://jisuan5.com/hexadecimal-to-decimal/
下一代先进储能技术无负极锂金属电池的研究进展
百度云携手生态 助力智能服务变革
锁频环为什么锁定后又发生失锁现象?
特斯拉第三代太阳能屋顶将进军国内市场
接地电阻柜在电力系统中的作用分析
实例解析Modbus协议
工业静电监控系统的功能介绍
知存科技连续两年获评中国IC独角兽企业
道通则人兴!华为微模块赋能数字甘肃智慧交通建设
Type-C Cables是什么
HDI PCB一阶和二阶和三阶依靠什么来区分
无人驾驶硝烟弥漫创业两年基本靠“吹”
全面解读HarmonyOS新一代UI框架
值得工程师收藏的电气图表示方法大全
Apple Watch继续发力,苹果可穿戴设备出货重回榜首
高压连接线可分离性电蜂
AliOS Things是什么?与物联网相结合的变化之路
旋塞阀的基本结构_旋塞阀的工作原理
冷却器有哪些清洗方法 简述清洗步骤
国内3G终端市场新机遇