Modbus 通信协议详解


一、概述

Modbus 是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。ModBus 网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。为更好地普及和推动 Modbus 在基于以太网上的分布式应用,目前施耐德公司已将 Modbus 协议的所有权移交给 IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了 Modbus-IDA 组织,为 Modbus 今后的发展奠定了基础。

在中国,Modbus 已经成为国家标准,并有专业的规范文档,感兴趣的可以去查阅相关的文件,详情如下:标准编号为:GB/T19582-2008文件名称:《基于 Modbus 协议的工业自动化网络规范》,主要包含三个部分:

  • GB-T19582.1-2008 第 1 部分:Modbus 应用协议
  • GB-T19582.1-2008 第 2 部分:Modbus 协议在串行链路上的实现指南
  • GB-T19582.1-2008 第 3 部分:Modbus 协议在 TCP/IP 上的实现指南

二、Modbus 的作用

Modbus 协议是一种通信协议,而且是一种开放协议,因此广泛地用于在工业自动化系统中实现设备之间的数据交换。它是最常用的串行通信协议之一,广泛应用于监控和控制设备之间的通信。简而言之,它是用于在电子设备之间的串行线路上传输信息的方法。请求信息的设备被称为 Modbus 客户端,提供信息的设备是 Modbus 服务器。Modbus 支持单主机,多个从机,在标准 Modbus 网络中,有一个客户端和多达 247个服务器,每个服务器都有从 1 到 247 的唯一服务器地址。客户端还可以向服务器写入信息。

Modbus 通常用于从仪器和控制设备传输信号到主控制器或数据采集系统,例如用于测量温度和湿度并将结果传输到计算机的系统。Modbus 通常用于将监控计算机与远程终端单元(RTU)连接在一起,这在监控和数据采集(SCADA)系统中使用。

Modbus 协议简单易于实现,传输效率高,因此在工业自动化领域得到广泛应用。它支持多个设备之间的并行通信,可以实现分布式控制系统的互联互通。同时,Modbus 协议还具有跨平台、跨厂商的特点,使得不同厂商的设备可以进行互操作。

三、Modbus 的工作原理

Modbus 是一主多从的协议,如下图所示:

主控发出的数据里,必定含有如下信息:

  1. 设备地址:你要访问从设备 1,还是访问从设备 2。
  2. 访问哪类寄存器,是读还是写,只访问 1 个寄存器,还是多个寄存器:这被称为功能码。
  3. 起始寄存器地址、寄存器数量:这在数据里定义。
  4. 为了保证数据传输的可靠,还附带有 CRC 检验码。

1、四种数据类型

Modbus协议规定,进行读写操作的数据类型,按照读写属性和类型可分为以下4种:

  • 离散量输入Discretes Input):1位,只读
  • 线圈Coils):1位,读写
  • 输入寄存器Input Registers):16位,只读
  • 保持寄存器Holding Registers):16位,读写
内存区块 数据类型 主设备访问 从设备访问 内容
离散量输入 布尔 只读 读写 I/O 系统提供这种类型数据
线圈 布尔 读写 读写 通过应用程序改变这种类型数据
输入寄存器 无符号双字节整型 只读 读写 I/O 系统提供这种类型数据
保持寄存器 无符号双字节整型 读写 读写 通过应用程序改变这种类型数据
寄存器种类 说明 与PLC类比 举例说明
线圈状态(Coil Status) 输出端口。可设定端口输出状态,也可以读取该位的输出状态。可分为两种不同的执行状态,例如保持型或边沿触发型。 DO(数字量输出) 电磁阀输出、 MOSFEF输出、LED显示等
离散输入状态(Discrete Input Status) 输入端口。通过外部设定改变输入状态,可读但不可以写。 DI(数字量输入) 拨码开关、接近开关等
保持寄存器(HoldingRegister) 输出参数或保持参数,控制器运行时被设定的某些参数,可读可写。 AO(模拟量输出) 模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限
输入寄存器(Input Register) 输入参数。控制器运行时从外部设备获得的参数,但可读不可写。 AI(模拟量输入) 模拟量输入

2、三种工作模式

Modbus 协议主要有三种形式:Modbus ASCIIModbus RTUModbus TCP/IPModbus ASCIIModbus RTU 是基于串行通信的协议,而 Modbus TCP/IP 则是基于以太网的协议。

  • Modbus ASCII 是一种文本协议,使用 ASCII 码表示数据。它使用起始字符(“:”)、从站地址、功能码、数据、结尾字符(换行符 CR/LF)等字段来定义通信内容,并采用的是 LRC 校验算法。数据以 ASCII 码的形式传输,通常是通过 RS-232 或 RS-485 等串行通信接口进行传输。
  • Modbus RTU 是一种二进制协议,使用二进制码表示数据。它采用起始字符、从站地址、功能码、数据等字段来定义通信内容,并使用 CRC 校验位来保证数据的完整性。Modbus RTU 通常通过 RS-232、RS-485 或 RS-422 等串行通信接口进行传输。
  • Modbus TCP/IP 是一种基于以太网的协议,使用 TCP/IP 协议栈进行通信。它使用以太网帧作为数据传输的封装,通过 IP 地址和端口号来标识设备。其占用的是 502 端口,数据帧主要包括两部分:MBAP(报文头)+PDU(帧结构),数据块与串行链路是一致的。Modbus TCP/IP 可以通过以太网、无线局域网等网络介质实现设备之间的远程通信。

补充:

  • RS-485:半双工收发接口,这是最为常用的 Modbus 物理层,信号采用差分电平编码,用一对双绞线现场布线,抗干扰性能也不错
  • RS-422:全双工收发接口,这种物理层也有比较多的应用,信号采用差分电平编码,需要两对双绞线现场布线,抗干扰性能也不错。与 RS-485 相比,其优势在于可以实现全双工,通信的效率高些,所需要的代价就是现场布线需要两对双绞线,增加了一定的成本。
  • RS-232:全双工收发接口,这个基本用在点对点通信场景下,不适合多点拓扑连接,采用共模电平编码,一般需要 Rxd/Txd/Gnd 三根线连接。

3、三类功能码

Modbus 协议定义了一系列功能码,用于读取和写入设备的寄存器。常用的功能码包括读取保持寄存器、读取输入寄存器、写单个保持寄存器等。通过组合使用功能码和寄存器地址,可以实现对设备的读取和控制操作。

Modbus 主要包括 3 类功能码:公共功能码、用户定义功能码和保留功能码。

3.1 标志功能码

  1. 0 类代码
    0 类代码通常被认为是有效 Modbus 设备的最低配置,因为此类代码可使主设备能够读取或写入数据模型。
</
代码 说明
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值