通信:
硬件层:RS485解决数据传输问题,如何将“0”或“1”传输到另外一个设备
软件层:MODBUS,在硬件基础上解决数据传输的含义或意义
对于RS485:作为两线制485由于传输差分信号,因此是半双工的

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

max485电路:

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

modbus约定:
- 一个系统一主多从,只能进行主从通信,从从通信需要借助主机
- 系统中从机不可主动向主机发送数据
- 系统上电后所有设备都应处于监听总线的状态,也就是接收状态
- 如果要进行一次通信,必须由主机主动发起通信
一次modbus通信:模式为主机轮询,从机应答的机制
- 主机一开始也是监听总线的状态,要切换成发送模式(实际上是修改MAX485上RE、DE的电平),发送数据包
- 发送完成后立马转成接收模式
modbus通信报文或数据包格式:
通信地址0-247,指定地址0是广播指令,所有设备都会运行

常用功能码:

03功能码报文示例:从机读数据
主机发送Tx:01 03 00 00 00 02 C4 0B
| 地址码8bit | 功能码8bit | 寄存器起始16bit | CRC校验16bit | |
|---|---|---|---|---|
| 主机发送 | 01 | 03 | 00 00 | C4 0B |
| 从机应答Rx:01 03 04 00 01 00 02 2A 32 |
读了2个寄存器,每个寄存器16位
| 地址码 | 功能码 | 字节数 | 数据1 | 数据2 | CRC校验 | |
|---|---|---|---|---|---|---|
| 从机应答 | 01 | 03 | 04 | 00 01 | 00 02 | 2A 32 |
06功能码报文示例:向从机写一个寄存器数据
主机发送Tx:01 06 00 03 00 C8 78 5C
| 地址码8bit | 功能码8bit | 寄存器个数16bit | 数据16bit | CRC校验16bit | |
|---|---|---|---|---|---|
| 主机发送 | 01 | 06 | 00 03 | 00 C8 | 78 5C |
从机应答Rx::01 06 00 03 00 C8 78 5C与主机发送一致

如何接受报文:
9600波特率,3字符 1个字符占10bit
3*10*1/9600=3ms 超时时间10ms就认为一个新的数据包