MODBUS学习日志
一、MODBUS通信协议
1、通信协议
- 硬件层协议:解决传输问题,相当于路
- 串口通信协议 : RS232、RS485、CAN总线
1.1、三种通信方式
1.1.1、单工方式(simplex)
单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向。为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号。此种方式适用于数据收集系统,如气象数据的收集、电话费的集中计算等。例如计算机和打印机之间的通信是单工模式,因为只有计算机向打印机传输数据,而没有相反方向的数据传输。还有在某些通信信道中,如单工无线发送等。
1.1.2、半双工方式(需要上层软件做协议)(half-duplex)
半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。因此,半双工通信实际上是一种可切换方向的单工通信。此种方式适用于问讯、检索、科学计算等数据通信系统;传统的对讲机使用的就是半双工通信方式。由于对讲机传送及接收使用相同的频率,不允许同时进行。因此一方讲完后,需设法告知另一方讲话结束(例如讲完后加上’OVER’),另一方才知道可以开始讲话。
1.1.3、全双工方式(full-duplex)
全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输。全双工通信是两个单工通信方式的结合,要求收发双方都有独立的接收和发送能力。全双工通信效率高,控制简单,但造价高。计算机之间的通信是全双工方式。一般的电话、手机也是全双工的系统,因为在讲话时可以听到对方的声音。
参考链接: https://blog.csdn.net/iningwei/article/details/100134783
1.2、主从模式:
主从模式,是数据库设计模式中最常见、也是大家日常设计工作中用的最多的一种模式,它描述了两个表之间的主从关系,是典型的“一对多”关系。
规定要求:
1. 系统中只有一个设备时主机
2. 系统中的所有从机不可以主动向主机发数据
3. 系统中的主机和所有从机上电后都处于监听状态
4. 任何一次的数据交换都要由主机发起
4.1、将自己转为发送状态
4.2、主机按照预先约定的格式,发出寻址数据帧
4.3、恢复自己的接受状态,等待所寻址的从机响应
1.3、软件层协议:解决传输的目的
1.3.1、主从模式
-
整个系统只能有一个主机,每个从机必须有一个唯一的地址(0~247)
-
其中0号地址位广播地址:主机向0号地址的设备发数据包,也就是要把该数据包发给所有的从设备。0号地址的数据包所有从机是不回应的。
2、MODBUS的主机寻址帧的格式
>MODBUS的两种传输方式:RTU方式和ASC方式
>
>RTU方式:也叫十六进制 例如:发送0x03:0000 0011
>
>RTU方式:也叫十六进制 例如:发送0x03:0000 0011
>
>ASC方式:0x03 {发送0 :0x30:0011 0000 }{ 发送3:0x33:0011 0011}
>
>所以ASC的通信效率低,但是方便调试,使用实验;工业上都采用RTU方式,效率高
2.3、RTU方式
1、从机地址 2、功能码(127个) 3、数据1~数据n 4、校验码(CRCL、CRCH)
其中: 1~3参与CRC16校验
从机是以接收数据停止时间达到3.5个字节以上,那么就认为主机的寻址帧完成,并开始处理。
例如:波特率:9600bt/s
所以每位数据传输的时间T=1000000us/9600=104us
一字节时间位=10T=1004us(起始位 8位 停止位)(串口格式)
所以时间为:3.5*10T=3645us
2.4、ASC方式
1、: 2、地址 3、功能码 4、数据1~数据n 5、(地址数据)采用LRC校验=((地址+功能码+数据1数据n)%256)+1=(0255) 6、13 10(回车 换行)
2.5、CRC简述
1.将一个 16 位寄存器装入十六进制 FFFF (全 1). 将之称作 CRC 寄存器.
2.将报文的第一个 8 位字节与 16 位 CRC 寄存器的低字节异或,结果置于 CRC 寄存器.
3.将 CRC 寄存器右移 1 位 (向 LSB 方向), MSB 充零. 提取并检测 LSB.
4.(如果 LSB 为 0): 重复步骤 3 (另一次移位).
(如果 LSB 为 1): 对 CRC 寄存器异或多项式值 0xA001 (1010 0000 0000 0001).
5.重复步骤 3 和 4,直到完成 8 次移位。当做完此操作后,将完成对 8 位字节的完整操作。
6.对报文中的下一个字节重复步骤 2 到 5,继续此操作直至所有报文被处理完毕。
7.CRC 寄存器中的最终内容为 CRC 值.
8.当放置 CRC 值于报文时,高低字节必须交换。
3、从设备的回应数据包格式
- 回应数据包和主机查询的数据包格式包是一致的
- 正常回应时,功能码与主机发的功能码一致(1~127)
- 异常的回应,功能码要在收到的功能码基础上加上128 例如:发 0x03 收:0x03 +128
4、MODBUS从机协议实现
- 硬件上具备串口
- 硬件上需要定时器(精确到毫秒级)