基于RS485通信的Modbus通信协议

 通信可以分为两个方面:

硬件层:RS485解决的是数据传输问题,也就是说如何将一个“0”或“1”传输到另外一端。(保证了数据可以转移到另一端)

软件层:modbus是在硬件基础上的传输协议,解决的是数据传输的含义或意义。

MCU要想实现RS485通信,必须借助电平转换芯片。 因为MCU是TTL电平信号,RS485是差分信号,如何将单端信号转换成差分信号就需要电平转换芯片。

TTL电平在传输信号特性逻辑“0”对应的电气信号为0V,逻辑“1”对应的电气信号为5V。

RS485通常有两根差分信号线,A和B,RS485的电平特性规定逻辑“0”指的是信号B的电压>A的电压,逻辑“1”指的是信号A的电压>信号B的电压。

TTL电平转换为RS485差分信号之后,抗干扰能力得到一定的增强,传输距离得到了很大的提高。

要想实现两个MCU能进行RS485通信,二者必须都有一个电平转换芯片。

MCU二者连接一般使用的是双绞线,在信号传输过程中,在一根线上出现的干扰一般也会在另一根线上出现,二者基本可以抵消,所以抗干扰能力大大增强。

结合所描述的内容,也就是说RS485通信实际上是硬件层的一个通信标准,它解决了TTL中的0和1如何通过485芯片转成差分信号之后,然后再传输到另一端的过程。

(两线制)差分信号线不可能同时传输数据,是一种半双工的通信,如果是四线制RS485,也可以是全双工通信,同时通信方式也和选择的接口芯片有关系。

下图是485其中的一种芯片电路:

基于RS485通信的Modbus通信协议_第1张图片

RE和DE是控制传输方向的, RO信号的输出,DI信号的输入。和UART的唯一区别就是需要控制方向。

基于RS485通信的Modbus通信协议_第2张图片

通信协议主要是为了不同厂商能够遵循相同的通信约定进行相互连接,工业上有一个标准叫做modbus通信协议,接下来可以了解一下:

基于RS485的modbus通信协议的一个硬件环境:一般遵循的是主从通信,一般来讲系统中会有一个主机,如果我们借助RS485通信,在用二线制的半双工的通信时,它支持一主多从的通信方式,也就是说,主机上有两根信号线,在信号线上可以挂多个从机。

基于RS485通信的Modbus通信协议_第3张图片

 硬件层借助RS485,软件层借助Modbus协议。

注意:

(1)在整个总线系统通信过程只有一台设备是主机,主从通信方式。

(2)系统中的从机不可以主动的向主机发送数据。

(3)系统上电之后,主机和从机所有的设备都应该处于监听总线的状态,也就是接收状态。

(4)如果想要发送数据实现通信,都必须由主机主动发起通信(任何一次的通信或数据交换)。

RS485并没有总线仲裁机制,只支持主从通信,在这个过程中,并没有优先级的设定。RS485支持问答机制:主机询问(轮询),从机应答。

主机要发送数据的时候需要注意:主机首先转换为发送模式,发送完之后立即转为接收模式,等待接收从机的应答。(模式切换借助芯片中的RE和DE引脚)

主机的寻址帧一般有两种传输方式,RTU(16进制方式)、ASCII。

modbus通信报文或数据包格式:地址码+功能码+数据区+校验码(CRC)

基于RS485通信的Modbus通信协议_第4张图片

通信地址:1-127(不同的设备有不同的地址)指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令。

基于RS485通信的Modbus通信协议_第5张图片

 通过Modbus poll和Modbus slave实现主从机的通信,设备ID为1,选用03功能码(读单个寄存器)实现下面的功能。软件链接:

链接:https://pan.baidu.com/s/1tvIJXZsEYJFsvk8yX6W5RA?pwd=d4w7 
提取码:d4w7 

基于RS485通信的Modbus通信协议_第6张图片

 从图中可以分析理解03功能码(从从机读单个或多个数据):

基于RS485通信的Modbus通信协议_第7张图片

 那么主机发送从机接收是如何识别这一包数据的呢?

我们靠的是时间间隔,规定了一包数据和一包数据最大的时间间隔为3.5个字符时间,假如是9600波特率,一个字符是10bit,3.5字符是35bit,计算出最大时间间隔W为:(3.5*10)/9600=3.6ms;一个包不同字符之间最大间隔时间不能超过1.5个字符时间。

寄存器地址只是为了统一变量的数据,具体变量可以自定义。

06功能码:写单个寄存器(向从机写数据)地址码(8bit)+功能码(8bit)+寄存器地址(16bit)+数据(19bit)+CRC(16bit)

基于RS485通信的Modbus通信协议_第8张图片

16功能码 :写多个寄存器地址(向从机写多个数据)

基于RS485通信的Modbus通信协议_第9张图片

如果对这篇博客有任何问题,可以评论区留言哈。

你可能感兴趣的:(嵌入式学习,stm32,单片机)