RS485、MODBUS通信协议浅显易懂篇

前言

        MODBUS协议是Modicon公司发表的一种串行通信协议,属于OSI模型中应用层的协议,现广泛应用于工业控制领域,它的主要特点是免费开放、支持多种电气接口(如RS-232、RS-485),传输介质可以是双绞线、光纤、无线等。

        RS485(即TIA485)处于OSI模型的物理层,作为上层协议的通信接口,它是针对RS232的不足而诞生的新的接口,主要特点是传输距离远、传输速率高、抗干扰性强、可以实现多机通信(一主多从)

1、RS485通信接口

1.1、RS485物理特性

RS485电气特性通常为2线(A、B线)、半双工通信;(4线可实现全双工)

利用A、B线两端的电压差值来表示传递数据信号,接口电平低,不易损坏芯片,

逻辑“1”以AB两线间的电压差为+(2~6)V表示;逻辑“0”以AB两线间的电压差为-(2~6)V表示;

采用平衡驱动器和差分接收器的组合,抗共模干扰能力强;

理论通讯距离可达1200米(100Kbps)。

1.2 、RS485一主多从连线

通常情况下RS485需要接2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。

1.3、RS485自动收发实现原理

A、B接口用于连接485总线,

RO是接收输出端,DI是发送数据端,

RE是接收使能信号(低电平有效),DE是发送使能信号(高电平有效)。

实现原理如下:

        RE和DE通过一个IO口控制,当USART_TX输出低电平时,三极管Q1截止未导通,RE和DE由于R6上拉为高电平,DE为高电平有效,所以此时处于发送数据模式,DI为数据发送端接地,因此TX输出低电平时485处于发送模式,DI接地发送低电平信号

当USART_TX输出高电平时,三极管Q1导通接地,RE和DE为低电平,处于接收模式,由于A端接了上拉电阻R3,B端接了下拉电阻R2,因此,TX输出高电平时485处于接收模式,AB的电压差值为逻辑“1”

综上所述,当数据发送完成后,将TX配置为高电平,使485通常情况下处于接收模式。

2、MODBUS协议

2.1 MODBUS协议概述

Modbus协议属于OSI模型-应用层的传输协议,分为客户机和服务器(即C/S架构);

Modbus串行链路协议属于OSI模型-数据链路层,分为主机和从机

客户机的功能由主机提供,服务器的功能由从机提供;

 同一时刻只能有一个主机(客户机)连接到总线上,一个或者多个从机(服务器)连接到总线上;

通信的发起端只能是主机,从机负责响应主机的请求,也就是说从机的通信都是被动的,它不会主动对主机发起通信;(主机没有地址)

主机对从机发起通信的模式有两种:

单播模式:主机指定特定的子机地址(1~247),子机接到主机的请求后,向主机返回一个报文作为响应;

广播模式:主机向所有子机发送请求,广播地址为0,当主机向0号地址发数据包的时候,每一个从机设备都会收到数据包,子机接收到主机的广播命令后不需要返回报文作为响应。

单播模式
单播模式

广播模式

2.2 MODBUS通信方式

Modbus的通信方式可以分为三种:

①基于串口的Modbus-ASCII :ASCII模式使用文本格式的数据,其中每个字节都表示一个字符。在ASCII模式下,Modbus协议使用ASCII码来表示数据。ASCII模式通常用于短距离的串行通信,例如在同一个局域网内的设备之间进行通信。

基于串口的Modbus-RTU :每个 8 位字节含有两个 4 位十六进制字符,这种模式的主要优点是较高的数据密度,在相同的波特率下比 ASCII 模式有更高的吞吐率,每个报文必须以连续的字符流传送通常采用CRC-16_Modbus校验算法。

③基于网口的Modbus-TCP: Modbus-TCP基于TCP/IP协议。

在应用当中首先要确认的就是使用哪个通信方式工作,主从机必须工作在同一种模式下,且其它串行参数也要设置为相同,如波特率等;在嵌入式工业领域中最常用的还是RTU模式,下面就着重以RTU来解析。

2.3 Modbus-RTU通信模式

2.3.1 RTU报文帧格式

子节点地址对应子机地址,功能代码下文会解释,简单理解为配置读寄存器还是写寄存器。

帧最大为256字节,每个字节为11位,传输顺序为从最低有效位开始(即起始位开始)

如果设置为奇/偶校验则为起始位1bit+8bit数据+1bit奇偶校验位+1bit停止位);

如果设置为无校验则为起始位1bit+8bit数据+2bit停止位)。

2.3.2 RTU报文帧时序要求

报文帧间至少为 3.5 个字符时间的空闲间隔;

整个报文帧必须以连续的字符流发送,如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。

2.3.3 RTU功能码

下图为公共功能码定义:

Modbus-RTU协议不支持Modbus协议中的功能码01和02,因为它们使用了不同的数据结构来表示输入和线圈状态。此外,Modbus-RTU协议还支持一些额外的功能码,用于读取和写入保持寄存器,以便在通信过程中保持某些状态信息。这里仅介绍0x03、0x06、0x10。

2.3.3.1  读多个寄存器功能码0x03

使用该功能码读取保持寄存器连续块的内容

寄存器地址由2个字节表示(范围为0x0000~0xFFFF);

寄存器数量也由2个字节表示(范围为0~0x7d)

示例:

主机读取子机地址为01,寄存器地址为0x0001为起始的连续10个寄存器值(以下为十六进制数)

主机请求帧:01  03  00  01  00  0A  CRC_L  CRC_H(即为子机地址+功能码+寄存器地址高字节+寄存器地址低字节+寄存器数量高字节+寄存器数量低字节+CRC低字节+CRC高字节);

子机响应帧01 03  06  00  02  00  04  00  06(即为子机地址+功能码+读取的字节数+DATA1_H+DATA1_L+DATA2_H+DATA2_L+DATA3_H+DATA3_L+CRC低字节+CRC高字节)。

2.3.3.2 写单个寄存器功能码0x06

使用该功能码向单个寄存器写入值;

寄存器地址由2个字节表示(范围为0x0000~0xFFFF);

寄存器数量也由2个字节表示(范围为0x0000~0xFFFF)

示例:

主机向子机地址为01,寄存器地址为0x0001写入0x03值(以下为十六进制数)

主机请求帧01  06  00  01  00 03  CRC_L  CRC_H(即为子机地址+功能码+寄存器地址高字节+寄存器地址低字节+写入值高字节+写入值低字节+CRC_L_CRC_H);

子机响应帧01  06  00  01  00 03  CRC_L  CRC_H(即为子机地址+功能码+输出寄存器地址高字节+输出寄存器地址低字节+输出写入值高字节+输出写入值低字节+CRC_L_CRC_H)。

2.3.3.3 写多个寄存器值0x10

使用该功能码写连续寄存器块(1 至约 120 个寄存器)

同上面两个功能码同理,就不一一介绍了;

2.3.3.4  其它功能码

错误码:0x86

异常码:01、02、03、04

等等

2.3.4 CRC校验

基于循环冗余校验 (CRC - Cyclical RedundancyChecking) 算法的错误检验域;

CRC 检验是对整个报文帧内容的校验,即使没有奇偶校验位,也要执行此检验;

CRC 的值由主机端根据算法计算而来,它由两个字节组成,低字节在前,高字节为报文发送的最后一个字节;从机接受到报文后也会去计算CRC值,计算结果与主机发送过来的CRC值比较,相等即为校验通过,传输的数据无误。

<think>好的,用户想了解RS485 Modbus协议的工作原理。首先,我需要把RS485Modbus分开来理解,然后再看它们是怎么结合在一起的。 首先,RS485是一种物理层的标准,属于硬件接口的部分。根据引用[3],RS485在OSI模型的物理层,主要特点是传输距离远、速率高、抗干扰强,支持多设备连接。它RS232不同,RS485是差分信号传输,所以抗干扰能力更好,适合工业环境。另外,引用[2]提到RS485是半双工,需要方向控制,所以通信的时候要考虑收发切换的问题。比如MAX485这样的芯片来处理电平转换。 然后是Modbus协议,属于应用层的协议,运行在物理层之上。Modbus有两种传输模式,RTUASCII,用户问的是RTU方式。根据引用[1][2],Modbus RTU使用二进制数据格式,通过主从结构通信。主设备发送请求,从设备响应。每个报文有地址、功能码、数据、校验等部分。校验部分用的是CRC校验,确保数据正确。 接下来要解释RS485Modbus如何协同工作。RS485作为物理层提供电气特性,而Modbus定义数据帧的结构通信规则。主从架构中,主设备通过RS485总线发送Modbus命令,从设备接收并回应。因为RS485支持多点连接,所以一个主设备可以轮询多个从设备,这在工业控制中很常见。 用户可能需要了解具体的数据帧结构,比如地址域、功能码的作用,以及CRC校验的计算方法。比如功能码03是读取保持寄存器,从设备收到后会返回寄存器的值。此外,通信的时序也很重要,比如RTU模式下字符之间的时间间隔不能超过一定值,否则会被认为是新帧的开始。 还要注意RS485半双工带来的方向控制问题,主设备在发送完请求后需要切换到接收模式,等待从设备的响应。硬件上可能需要控制REDE引脚的电平,这部分在引用[2]有提到MAX485芯片的使用。 用户可能还想知道实际应用中的接线方式,比如终端电阻的作用,防止信号反射。或者地址分配,每个从设备必须有唯一地址。另外,常见的错误处理机制,比如超时重发、错误校验等,也是工作原理的一部分。 最后需要总结RS485Modbus如何结合,实现可靠的数据传输。引用中的资料已经提供了基本的结构,需要把这些点组织起来,用清晰的中文解释,并确保LaTeX格式正确,比如变量用$...$,独立公式用$$...$$。同时生成相关问题,帮助用户深入理解。</think>### RS485 Modbus协议工作原理详解 #### 一、RS485接口特性 1. **物理层基础** RS485是一种半双工差分信号传输接口,支持多点通信(一主多从),最大节点数可达32个(通过中继器扩展至256个)[^3]。 - **差分传输**:通过$V_A - V_B$的电压差表示逻辑状态(如$+2V$至$+6V$为逻辑1,$-6V$至$-2V$为逻辑0),抗干扰能力显著优于RS232。 - **传输距离速率**:最远1200米(速率≤100kbps),速率最高10Mbps(距离≤15米)。 2. **硬件实现** 使用MAX485等芯片实现TTLRS485电平转换,通过方向控制引脚(如RE/DE)切换收发状态。主从机初始化时默认处于接收模式[^2]。 #### 二、Modbus协议框架 1. **协议分层** Modbus为应用层协议,定义数据帧格式通信规则,运行在RS485物理层之上。支持两种模式: - **RTU模式**:二进制数据,紧凑高效,默认使用CRC校验。 - **ASCII模式**:可读性强,效率较低,使用LRC校验[^1]。 2. **主从通信流程** - **主设备**发起请求,从设备响应,单次交互仅允许一个从设备回复[^2]。 - 典型报文格式(RTU): $$ \text{地址(1字节)} + \text{功能码(1字节)} + \text{数据(N字节)} + \text{CRC校验(2字节)} $$ 例如:读取保持寄存器(功能码03)的请求帧:`01 03 00 00 00 02 C4 0B`。 3. **功能码数据解析** - **常用功能码**: - 01/02:读线圈/离散输入 - 03/04:读保持/输入寄存器 - 05/06:写单个线圈/寄存器 - 15/16:写多个线圈/寄存器 - **数据域**:以16进制表示寄存器地址、数量或写入值。例如,`00 00 00 02`表示起始地址0x0000,读取2个寄存器。 4. **校验机制** - **CRC校验**:通过多项式$G(x)=x^{16}+x^{15}+x^2+1$计算,确保数据传输完整性。 - **超时重发**:主设备等待响应超时后重发请求,避免总线阻塞。 #### 三、RS485Modbus协同工作 1. **通信时序** - 主设备发送请求后切换为接收模式,从设备在3.5字符时间内响应[^2]。 - RTU帧间需保持至少3.5字符时间的空闲间隔,否则视为新帧起始。 2. **典型应用场景** - 工业PLC传感器通信(如温度、压力采集) - 能源管理系统(电表数据集中读取) - 楼宇自动化(灯光、空调控制)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值