Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus 协议包括
RTU、ASCII、TCP。其中 MODBUS-RTU 最常用,比较简单,在单片机上很容易实现。
虽然 RTU 比较简单,但是看协议资料、手册说得太专业了,起初很多内容都很难理解。
所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号。现在就来
定义一个新的最简单协议。例如,
协议: “A” --“LED 灭”
“B” --“报警”
“C” --“LED 亮”
单片机接收到“A”控制一个 LED 灭,单片机接收到“B”控制报警,单片机接收到“A”控制一个
LED 亮。那么当收到对应的信息就执行相应的动作,这就是协议,很简单吧。
先来简单分析一条 MODBUS-RTU 报文,例如:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
从机地址 功能号 数据地址 数据 CRC 校验
这一串数据的意思是:把数据 0x0017(十进制 23) 写入 1 号从机地址 0x0001 数据地址。
先弄明白下面的东西。
1、报文
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上
面的一串数据。
2、CRC 校验
意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法(见附录 2,
很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是
010600010017 加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC 检验检测接收的数据是否正确。比如
主机发出 01 06 00 01 00 17 98 04,那么从机接收到后要根据 01 06 00 01 00 17 再计算
CRC 校验值,从机判断自己计算出来的 CRC 校验是否与接收的 CRC 校验(98 04 主机计
算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。
3、功能号
意义:modbus 定义。见附录 1。
作用:指示具体的操作。
MODBUS-RTU
一、一个报文分析
先声明下我们的目的,我们是要两个设备通讯,用的是 MODBUS 协议。上面简单介绍了:
“报文”“CRC 校验”“功能号”。