Modbus 通信协议学习笔记

RS485 + Modbus:MAX485 收发电路、主从轮询机制、报文格式与 03/06 功能码报文示例。

通信:

硬件层:RS485解决数据传输问题,如何将“0”或“1”传输到另外一个设备

软件层:MODBUS,在硬件基础上解决数据传输的含义或意义

对于RS485:作为两线制485由于传输差分信号,因此是半双工的

image-20250923164142804

对于MAX485芯片: RE和DE连一根线,为高电平时DE使能,单片机TX发送至DI。为低电平时RE使能,485信号发送至单片机RX

image-20250923164546337

max485电路:

image-20250923184642251

对于主从机:RS485和modbus支持主从通信,能够一主多从

image-20250923165437760

modbus约定:

  1. 一个系统一主多从,只能进行主从通信,从从通信需要借助主机
  2. 系统中从机不可主动向主机发送数据
  3. 系统上电后所有设备都应处于监听总线的状态,也就是接收状态
  4. 如果要进行一次通信,必须由主机主动发起通信

一次modbus通信:模式为主机轮询,从机应答的机制

  1. 主机一开始也是监听总线的状态,要切换成发送模式(实际上是修改MAX485上RE、DE的电平),发送数据包
  2. 发送完成后立马转成接收模式

modbus通信报文或数据包格式:

通信地址0-247,指定地址0是广播指令,所有设备都会运行

image-20250923185045174

常用功能码:

image-20250923184947054

03功能码报文示例:从机读数据

主机发送Tx:01 03 00 00 00 02 C4 0B

地址码8bit功能码8bit寄存器起始16bitCRC校验16bit
主机发送010300 00C4 0B
从机应答Rx:01 03 04 00 01 00 02 2A 32

读了2个寄存器,每个寄存器16位

地址码功能码字节数数据1数据2CRC校验
从机应答01030400 0100 022A 32

06功能码报文示例:向从机写一个寄存器数据

主机发送Tx:01 06 00 03 00 C8 78 5C

地址码8bit功能码8bit寄存器个数16bit数据16bitCRC校验16bit
主机发送010600 0300 C878 5C

从机应答Rx::01 06 00 03 00 C8 78 5C与主机发送一致

image-20250923193620361

如何接受报文:

9600波特率,3字符 1个字符占10bit

3*10*1/9600=3ms 超时时间10ms就认为一个新的数据包

使用 Hugo 构建
主题 Stack 由 Jimmy 设计