为啥子叫MODBUS
Modbus是“Modicon Bus”的缩写,其中“Mod”源自其开发者Modicon公司(现为施耐德电气旗下品牌)的名称,“Bus”表示其作为通信总线协议的性质
bus是什么
公共汽车
就是所有设备的信息都可以在上面跑上面交互的意思
理解了BUS就成功了一半
解释一下
大致分为以下几种:
Modbus-RTU
Modbus-ASCII
Modbus-TCP
一般来说大部分的设备都是Modbus-RTU协议
Modbus是主从方式通信
总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信
半双工
设备必须要有RTU协议!这是Modbus协议上规定的,且默认模式必须是RTU,ASCII作为选项
协议的结构
地址 + 功能码 + 数据 + 校验
1字节 + 1字节 + N + 2字节
Modbus-RTU协议一般我们用的最多功能码就是03和06,
03查询功能码,
06修改功能码
主机发送: 01 03 00 00 00 01 84 0A
01-地址,也就是你传感器的地址
03-功功能码,03代表查询功能,查询传感器的数据
00 00-代表查询的起始寄存器地址.说明从0x0000开始查询。这里需要说明以下,Modbus把数据存放在寄存器中,通过查询寄存器来得到不同变量的值,一个寄存器地址对应2字节数据
00 01-代表查询了一个寄存器.结合前面的00 00,意思就是查询从0开始的1个寄存器值
84 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到84前面为止;
从机回复: 01 03 02 19 98 B2 7E
01-地址,也就是你传感器的地址
03-功功能码,03代表查询功能,查询传感器的数据。这里要注意的是注意发给从机的功能码是啥,从机就要回复同样的功能码,如果不一样说明这一帧数据有错误
02-代表后面数据的字节数,因为上面说到,一个寄存器有2个字节,所以后面的字节数肯定是2*查询的寄存器个数;
19 98-寄存器的值是19 98,结合发送的数据看出,01这个寄存器的值为19 98
B2 7E-循环冗余校验

主机发送: 01 06 00 00 00 01 48 0A
01-主机要查询的从机地址
06-功能码,06代表修改单个寄存器功能,修改有些不同,有修改一个寄存器和修改多个寄存器;
00 00-代表修改的起始寄存器地址.说明从0x0000开始.
00 01-代表修改的值为00 01.结合前面的00 00,意思就是修改0号寄存器值为00 01;
48 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到48前面为止
从机回复: 01 06 00 00 00 01 48 0A
01-从机返回给主机自己的地址,说明这就是主机查的从机
06-功能码,代表修改单个寄存器功能,主机发啥功能码,从机就必须回什么功能码;
00 00-代表修改的起始寄存器地址.说明是0x0000.
00 01-代表修改的值为00 01.结合前面的00 00,意思就是修改0号寄存器值为00 01;
48 0A-循环冗余校验,是modbus的校验公式,从首个字节开始到48前面为止;
黄色:A 绿色:B 紫色:A-B



起始位+数据位+停止位
串口的协议
使用485的电平解析后
就是串口的一个字节
6099

被折叠的 条评论
为什么被折叠?



