嵌入式总线技术学习(二):Modbus 总线技术详解

2023-12-13 06:16:46

参考资料

1. Modbus 概述

  • Modbus 是全球第一个真正用于工业现场的总线协议。为更好地普及和推动 Modbus 在基于以太网上的分布式应用,目前施耐德公司已将 Modbus 协议的所有权移交给 IDA (Interfacefor DistributedAutomation,分布式自动化接口) 组织并成立了 Modbus-IDA 组织。在中国,Modbus 已经成为国家标准 GB/T19582-2008

  • Modbus 协议描述了控制器请求访问其他设备的过程、如何回应来自其他设备的请求以及怎样侦测错误并记录

  • Modbus 协议是一种应用层协议,它定义了一种通用的消息格式,使得不同的设备之间可以进行数据交换和控制。该协议支持不同的物理层,如 RS-232、RS-422、RS-485 和以太网,因此可以应用于不同的设备和网络

1.1 Modbus 的特点

  • 标准、开放。用户可以免费、放心地使用 Modbus 协议,不需要交纳许可费用,也不会侵犯知识产权。目前,支持 Modbus 的厂家超过 400 家,支持 Modbus 的产品超过 600 种
  • Modbus 可以支持多种电气接口,如 RS-232、RS-485 和以太网等,还可以在各种介质上传送,如双绞线、光纤和无线介质等
  • Modbus 的格式简单、紧凑,通俗易懂,用户使用容易,厂商开发简单

1.2 Modbus 的通信模型

  • Modbus 是 OS I参考模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,Modbus 的通信模型如下图所示

在这里插入图片描述

  • Modbus 包括标准 Modbus、Modbus TCP 和 Modbus + 3 种形式
    • 标准 Modbus 指的就是在异步串行通信中传输 Modbus 信息
    • Modbus + 指的就是在一种高速令牌传递网络中传输 Modbus 信息,采用全频通信,具有更快的通信传输速率
    • Modbus TCP 就是采用 TCP/IP 和以太网协议来传输 Modbus 信息,属于工业控制网络范畴

1.3 通用 Modbus 帧

  • Modbus 协议定义了一个与基础通信层无关的简单协议数据单元 (PDA),特定总线或网络上的 Modbus 协议映射能够在应用数据单元 (ADU) 上引入一些附加字段,通用 Modbus 帧格式如下图所示
    • Modbus PDU 中功能码的主要作用是告知将执行哪种操作,功能码后面是含有请求和响应参数的数据域
    • Modbus ADU 中的附加地址用于告知站地址差错校验码是根据报文内容执行冗余校验计算的结果

在这里插入图片描述

1.4 Modbus 通信原理

  • Modbus 是一种简单的客户机/服务器型应用协议,其通信过程如下图所示
    • 首先,客户机准备请求并向服务器发送请求,即发送功能码和数据请求,此过程称为启动请求
    • 服务器分析并处理客户机的请求,此过程称为执行操作,最后向客户机发送处理结果,即返回功能码和数据响应,此过程称为启动响应
    • 如果在执行操作过程中出现任何差错,服务器将启动差错响应,即返回一个差错码/异常码

在这里插入图片描述

  • Modbus 串行链路协议是一个主-从协议,串行总线的主站作为客户机,从站作为服务器
    • 在同一时刻只有一个主站连接总线,一个或多个 (最多为 247 个) 从站连接于同一个串行总线
    • Modbus 通信总是由主站发起,从站根据主站功能码进行响应
    • 从站在没有收到来自主站的请求时,不会发送数据,所以从站之间不能互相通信
    • 主站在同一时刻只会发起一个 Modbus 事务处理
  • 主站以如下两种模式对从站发出 Modbus 请求
    • 单播模式
      • 在单播模式下,主站寻址单个从站,从站接收并处理完请求后,向主站返回一个响应
      • 在这种模式下,一个 Modbus 事务处理包含 2 个报文,一个是来自主站的请求,另一个是来自从站的应答
      • 每个从站必须有唯一的地址 (1~247),这样才能区别于其他节点而被独立寻址
    • 广播模式
      • 在广播模式下,主站向所有从站发送请求,对于主站广播的请求没有应答返回
      • 广播请求必须是写命令
      • 所有的设备必须接受广播模式的写功能,地址 0 被保留用来识别广播通信

2. Modbus 物理层

  • 在物理层,串行链路上的 Modbus 系统可以使用不同的物理接口,最常用的是 RS-485 两线制接口
    • 作为附加选项,该物理接口也可以使用 RS-485 四线制接口
    • 当只需要短距离的点对点通信时,也可以使用 RS-232 串行接口作为 Modbus 系统的物理接口

2.1 RS-232 接口标准

  • RS-232C 是美国电子工业协会 EIA(Electronic Industry Association) 制定的一种串行物理接口标准
    • RS 是英文 “推荐标准” 的缩写,232 为标识号,C 表示修改次数
    • RS-232 总线标准设有 25 条信号线,包括一个主通道和一个辅助通道,其主要端子分配如下图所示

在这里插入图片描述

2.1.1 信号含义
  • RS-232 的功能特性定义了 25 芯标准连接器中的 20 根信号线,其中 2 条地线、4 条数据线、11 条控制线、3 条定时信号线,剩下的 5 根线作备用或未定义。常用的只有如下所述的 9 根

  • 1. 联络控制信号线(6 根)

    • 数据发送准备好 (DSR):DSR 有效时,表明 MODEM(调制解调器) 处于可使用的状态
    • 数据终端准备好 (DTR):DTR 有效时,表明数据终端可以使用
      • 这两个设备状态信号有效,只表示设备本身可用,能否进行通信要由下面的控制信号决定
    • 请求发送(RTS):表示 DTE 请求 DCE 发送数据,即当终端准备要接收 MODEM 传来的数据时,使该信号有效,请求 MODEM 发送数据,它用来控制 MODEM 是否要进入发送状态
    • 允许发送(CTS):表示 DCE 准备好接收 DTE 发来的数据,当 MODEM 准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线 TXD 发送数据
    • 振铃指示(RI):当 MODEM 收到交换台送来的振铃呼叫信号时使RI信号有效(ON状态),通知终端已被呼叫。
  • 2. 数据发送与接收线(2 根)

    • 发送数据(TXD):通过 TXD 终端将串行数据发送到 MODEM(DTE-DCE)
    • 接收数据(RXD):通过RXD线终端接收从 MODEM 发来的串行数据 (DCE-DTE)
  • 3. 地线(1 根)

    • GND 提供参考电位,无方向

通常只需 TXD、RXD 和 GND 三根线即可实现通信

2.1.2 电气特性
  • 在 TXD 和 RXD 上(数据,信息码)
    • 逻辑 1(MARK,传号) =-3~-15V
    • 逻辑 0(SPACE,空号) =+3~+15V
  • 在 RTS、CTS、DSR、DTR 和 DCD 等上(控制信号)
    • 信号有效(接通,ON 状态,正电压) =+3~+15V
    • 信号无效(断开,OFF 状态,负电压) =-3~-15V

因此,实际工作时,应保证电平在 ±(3~15) V

2.1.3 RS-232 电平转换
  • 为实现采用 +5V 供电的 TTL 和 CMOS(Component Object Mode) 通信接口电路能与 RS-232 标准接口连接,必须进行串行口的输入/输出信号的电平转换

2.2 RS-485 接口标准

  • RS-232 接口可以实现点对点的通信方式,但这种方式不能实现联网功能,RS-485 接口解决了这个问题
2.2.1 RS-485 接口特点
  • 逻辑 1 以两线间的电压差为 +(0.2~6)V 表示,逻辑 0 以两线间的电压差为 -(0.2~6)V 表示。接口信号电平比 RS-232 低,不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,方便与 TTL 电路连接
  • RS-485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好
  • RS-48 5最大的通信距离约为 1219m,最大传输速率为 10Mbit/s,传输速率与传输距离成反比,在 100kbit/s 的传输速率下,才可以达到最大的通信距离,如需传输更长的距离,需要加 485 中继器
  • RS-485 总线一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,最多可以支持到 400 个节点
  • RS-485 与 RS-232 之间的主要性能指标的比较如下图

在这里插入图片描述

2.2.2 RS-485 的优点
  • 成本低
  • 网络驱动能力强
  • 连接距离远
  • 传输速率快

3. Modbus 串行链路层标准

  • Modbus 串行链路层标准就是通常所说的标准 Modbus 协议,它是 Modbus 协议在申行链路上的实现
    • Modbus串行链路层协议是一个主从协议,该协议位于 OSI 参考模型的第 2 层
    • Modbus 串行链路层标准定义了一个控制器能够识别使用的消息结构,而不管它们是经过何种网络进行通信的,也不需要考虑通信网络的拓扑结构
    • 它定义了各种数据帧格式,用以:描述控制器请求访问其他设备的过程、如何响应来自其他设备的请求以及怎样侦测错误并记录

3.1 Modbus 传输模式

  • Modbus 定义了 ASCII (美国信息交换标准代码) 和 RTU (远程终端单元) 两种串行传输模式
    • 在 Modbus 串行链路上,所有设备的传输模式 (及串行口参数) 必须相同,默认设置为 RTU 模式,所有设备必须实现 RTU 模式
    • 若要使用 ASCII 模式,需要按照使用指南进行设置
3.1.1 ASCII 模式
  • ASCII 模式的消息以冒号(:)字符 (ASCII 码 3AH) 开始,以回车换行符结束 (ASCII 码 0DH,0AH)
  • 其他域可以使用的传输字符是十六进制的 0···9,A···F 的 ASCII 码。网络上的设备不断侦测冒号 “:” 字符,当接收到一个冒号时,每个设备都解码下个域 (地址域) 来判断是否发给自己的
  • 消息中字符间发送的时间间隔最长不能超过 1s,否则接收的设备将认为传输错误。典型 ASCII 消息帧结构如下图

在这里插入图片描述

  • 例如向 1 号从站的 2000H 寄存器写入 12H 数据的 ASCII 消息格式,如下表
    • 完整的 ASCII 消息为 3AH 30H 31H 30H 36H 32H 30H 30H 30H 30H 30H 31H 32H 43H 37H 0DH 0AH

在这里插入图片描述

3.1.2 RTU 模式
  • RTU 模式的消息发送至少要以 3.5 个字符时间的停顿间隔开始
    • 传输的第一个域是设备地址,可以使用的传输字符是十六进制的 0···9,A···F
    • 网络设备不断侦测网络总线,包括停顿间隔时间内,当第一个域 (地址域) 接收到时,每个设备都进行解码以判断是否发往自己的
    • 在最后一个传输字符之后,一个至少 3.5 个字符时间的停顿标定了消息的结束,一个新的消息可在此停顿后开始
  • 整个消息帧必须作为一连续的流转输
    • 如果在帧完成之前有超过 1.5 个字符时间的停顿时间,接收设备将刷新不完整的消息,并假定下一字节是一个新消息的地址域
    • 同样地,如果一个新消息在小于 3.5 个字符时间内接着前个消息的开始,接收设备将认为它是前一消息的延续,这将导致一个错误,因为在最后 CRC 域的值不可能是正确的
  • 典型的 RTU 消息帧结构如下图

在这里插入图片描述

  • 例如向 1 号从站的 2000H 寄存器写入 12H 数据的 RTU 消息格式,如下表
    • 完整的 RTU 消息为 01H 06H 20H 00H 00H 12H 02H 01H

在这里插入图片描述

3.1.3 地址域
  • 消息帧的地址域包含两个字符 (ASCII) 或 8bit(RTU),可能的从站地址是 0~247 (十进制)
    • 单个设备的地址范围是 1~247
    • 主站通过将要联络的从站的地址放入消息中的地址域来选通从站,当从站发送回应消息时,它把自己的地址放入回应的地址域中,以便主站知道是哪一个设备作出回应
    • 地址 0 是用做广播的地址,所有的从站都能认识
    • 当 Modbus 协议用于更高水准的网络时,广播可能不允许或以其他方式代替
3.1.4 功能代码域
  • 消息帧的功能代码域包含两个字符 (ASCII) 或 8bit(RTU),可能的代码范围是进制的 1~255
    • 当消息从主站发往从站时,功能代码域将告知从站需要执行哪些行为,例如,去读取输入的开关状态、读一组寄存器的数据内容、读从站的诊断状态以及允许调入、记录、校验在从站中的程序等
    • 当从站回应时,它使用功能代码域来指示是正常响应(无误)还是有某种错误发生(错误回应)
      • 对于正常响应,从站仅回应相应的功能代码
      • 对于差错响应,从站返回一差错码其格式为功能代码的最高位置 1
3.1.5 数据域
  • 数据域是由两个十六进制数集合构成的,范围为 00~FFH
    • 根据网络传输模式,这可以是由一对 ASCII 字符组成或一个 RTU 字符组成的
    • 从主站发给从站的消息的数据域包含附加的信息,指示从站必须用于进行执行由功能代码所定义的行为
      • 如果主站需要从站读取一组保持寄存器 (功能代码 03H),数据域指定了起始寄存器以及要读的寄存器数量
      • 如果主站写一组从站的寄存器 (功能代码 10H),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的数据字节数要写入寄存器的数据
    • 如果没有错误发生,由从站返回的数据域包含请求的数据,如果有错误发生,此域包含异常码,主站应用程序可以用来判断采取下一步行动
    • 在某种消息中,数据域可以是不存在的 (0 长度)
      • 例如,主站要求从站回应通信事件记录(功能代码 0BH)时,从站不需任何附加的信息

3.2 Modbus 差错检验

  • 标准的 Modbus 串行链路的可靠性基于两种错误检验方法,即奇偶校验和帧校验
    • 奇偶校验 (偶或奇) 应该被每个字符采用
    • 帧校验 (LRC 或 CRC) 必须运用于整个报文
3.2.1 奇偶校验
  • 用户可以配置控制器是奇或偶校验,或无校验,这将决定每个字符中的奇偶校验位是如何设置的
  • 如果指定了奇或偶校验,1 的位数将算到每个字符的位数中 (ASCII 模式 7 个数据位,RTU 模式 8 个数据位)
    • 例如,RTU 字符中包含 8 个数据位 (11000101),其中 1 的数目是 4 个
      • 如果使用了偶校验,帧的奇偶校验位将是 0,RTU 字符中 1 的个数仍是 4 个
      • 如果使用了奇校验,帧的奇偶校验位将是 1,使得 1 的个数是 5 个
  • 如果没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测,一个附加的停止位填充至要传输的字符帧中
3.2.2 帧校验
  • LRC 检验

    • 采用 ASCII 传输模式时,ASCII 消息帧中包括了一个基于 LRC 方法的错误检测域
    • LRC 域检测消息帧中除开始的冒号及结束的回车换行号外的内容
    • LRC 域是一个包含 8 位二进制值的字节。LRC 值由传输设备来计算并放到 ASCII 消息帧中,接收设备在接收 ASCII 消息的过程中计算 LRC,并将它和接收到的 ASCII 消息帧 LRC 域中的值比较,如果两值不等,则说明有错误
    • LRC 方法是将消息中 8bit 的字节连续累加,丢弃了进位
  • CRC 检验

    • 采用 RTU 模式时,RTU 消息帧包括了一个基于 CRC 方法的错误检测域
    • CRC 域检测整个 RTU 消息帧的内容
    • CRC 域是两个字节,包含 16 位二进制值。它由传输设备计算后加入 RTU 消息中,接收设备重新计算收到的 RTU 消息帧的 CRC,并与接收到的 CRC 域中的值比较,如果两值不同,则有误
    • CRC 值的计算方法是先调入一个值是全 1 的 16 位寄存器,然后调用计算过程将消息中连续的 8 位字节和当前寄存器中的值进行处理。仅每个字符中的 8bit 数据对 CRC 有效,起始位和停止位以及奇偶校验位均无效
    • CRC 添加到消息中时,低字节先加入,然后加入高字节

3.3 Modbus 功能码

  • Modbus 协议定义了公共功能码、用户定义功能码和保留功能码 3 种功能码
    • 公共功能码是指被确切定义的、唯一的功能码,由 Modbus-IDA 组织确认,可进行一致性测试,且已归档为公开
    • 用户定义功能码是指用户无需 Modbus-IDA 组织的任何批准就可以选择和实现的功能码,但是不能保证用户定义功能码的使用是唯一的
    • 保留功能码是某些公司在传统产品上现行使用的功能码,不作为公共使用
  • Modbus 的功能码定义如下表所示

在这里插入图片描述

在这里插入图片描述

  • Modbus 协议常用的功能码主要是 01、02、03、04、05、06、15 和16,对应数据类型如下表

在这里插入图片描述

4. Modbus 协议的应用

Modbus 协议在工业控制和监测应用中广泛使用,包括自动化工厂、机器人控制、电力监测和控制、油气开采和运输、水处理和供应、自动化建筑等等。Modbus 也适用于实时数据采集和处理,包括数据传输、数据监测和控制、故障检测和诊断等

  • PLC 控制

    • Modbus 协议是许多 PLC(可编程逻辑控制器)之间通信的标准协议
    • PLC 是工业自动化领域中广泛应用的设备,它们通常用于控制和监测生产过程中的各种参数,如温度、压力、流量等
  • 智能仪表

    • Modbus 协议也被广泛用于不同类型的智能仪表之间的通信,如温度传感器、压力传感器、流量计
    • 这些仪表通常用于监测和控制生产过程中的各种参数,以确保生产的稳定性和质量
  • 数据采集系统

    • Modbus 协议可以用于不同类型的数据采集系统之间的通信,以便将来自不同设备的数据收集到一个集中的位置进行处理和分析
    • 这些数据采集系统通常用于监测生产设备的性能和状态,以便及时发现和解决问题
  • SCADA 系统

    • Modbus 协议也可以用于不同类型的 SCADA(监视、控制和数据采集)系统之间的通信,以便实现实时监测和控制生产过程中的各种参数
    • 这些系统通常用于自动化生产过程,以提高生产效率和质量。

文章来源:https://blog.csdn.net/qq_42994487/article/details/134851565
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。