Modbus协议的工作原理与应用场景

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

Modbus协议的工作原理与应用场景缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. USB转串口 TTL RS-232 RS-485 COM口 UART区别
  2. 2. Modbus协议的应用
  3. 3. Modbus通信过程
  4. 4. Modbus存储区
  5. 5. Modbus协议类型
  6. 6. Modbus-RTUProtocol
  7. 7. Modbusfunction code
  8. 8. CRC check
  9. 9. 发送和接收数据示例
  10. 10. Modbus-ASCIIProtocol
  11. 11. Modbus-TCPProtocol

什么是通讯协议?

在了解什么是Modbus之前,让我们先来看看什么是通信协议。

通讯协议(Communication Protocol)是一种规则或约定,用于在计算机系统、网络设备或不同系统之间进行数据交换和通信。这些协议定义了通信的标准和规范,确保发送者和接收者之间能够正确理解和解释传输的数据。

通讯协议包括物理层协议、数据链路层协议、网络层协议、传输层协议、应用层协议等多个层次,每个层次负责不同的任务。以下是通讯协议的一些关键方面:

  1. Data format: 通讯协议规定了数据的格式,包括数据的编码方式、byte order、数据帧的结构等。这确保了数据在传输过程中可以被正确地解析和重建。
  2. 通信方式: 协议定义了通信的方式,包括单工通信(单方向传输)、半双工通信(双方交替传输)和全双工通信(同时双向传输)等。
  3. 错误检测和纠错: 通讯协议通常包括一些机制,用于检测和纠正在传输过程中可能发生的错误,以确保数据的完整性和准确性。
  4. 流量控制: 通讯协议可以定义如何控制数据的流量,以避免数据过载或拥塞,从而提高通信的效率。
  5. 地址和标识: 协议可以包括设备或节点的地址和标识,以确保数据被正确地发送到目标设备。
  6. 会话管理: 在某些协议中,会话管理用于建立、维护和终止通信会话,确保通信的有序性和可控性。

我们常见的通信协议包括I2C、SPI、UART等,而Modbus则是一种串行通信协议。

什么是RS-485和RS-232?

在讨论Modbus时,经常会遇到RS-485和RS-232,那么它们究竟是什么呢?

RS-485(Recommended Standard 485)和 RS-232(Recommended Standard 232)是两种常用的串行通信标准,用于在计算机和外部设备之间传输数据。它们在物理层和电气特性上有一些重要的区别:

RS-232:

  1. 单端口通信: RS-232 是一种单端口通信标准,即数据信号只通过一个传输线进行传输,其中包括一个发送线(TX)和一个接收线(RX)。
  2. 电压电平: RS-232 使用电压电平来表示数据位。典型的RS-232电平为正负12V,其中正电压表示逻辑0,负电压表示逻辑1。
  3. 通信距离: RS-232通信通常适用于较短的距离,通信距离通常不超过50英尺(约15米),并且通信速率受到距离的限制。
  4. 点对点通信: RS-232通信是点对点的,每个连接只支持两台设备之间的通信,一个发送方和一个接收方。
  5. 用途: RS-232常用于连接计算机和外部设备,如串行打印机、调制解调器、串行鼠标等。它也可以用于短距离的点对点通信。

RS-485:

  1. 差分信号: RS-485 使用差分信号传输数据,它包括两个传输线,一个为正(A或非反相线),一个为负(B或反相线)。这种差分信号可以提高抗干扰性能。
  2. 电压电平: RS-485通常使用低电平差分信号,其中正线的电压大致等于负线的电压,这有助于减少传输线上的干扰。
  3. 通信距离: RS-485通信适用于较长距离,通常可覆盖几千英尺(数百米)的距离,这取决于通信速率和线缆质量。
  4. 多点通信: RS-485支持多点通信,多个设备可以连接到同一传输线上,并且可以同时进行通信。这使得RS-485非常适合用于工业控制和仪表等应用,其中需要多个设备之间的数据交换。
  5. 用途: RS-485通常用于工业自动化、远程监控、建筑自动化以及其他需要长距离和多设备通信的应用。它在这些领域中被广泛使用,因为它的差分信号设计使其更耐干扰,适应更长的通信距离,并支持多点通信。

Modbus协议的工作原理与应用场景插图

如果您想进一步了解,请继续阅读:

USB转串口 TTL RS-232 RS-485 COM口 UART区别

USB转串口(USB to Serial)是一种将USB接口连接到串行通信接口的设备,通常用于将计算机连接到需要串行通信的外部设备。这些串口可以是TTLserial port、RS-232串口或RS-485串口,具体区别如下:

  1. TTLserial port: TTL(Transistor-Transistor Logic)串口使用低电平(通常是0V表示逻辑0,3.3V或5V表示逻辑1)进行通信。它通常用于嵌入式系统和微控制器之间的通信。USB转TTL串口适用于连接计算机与TTLSerial Port Device,例如Arduino等。
  2. RS-232串口: RS-232是一种常见的串行通信标准,通常使用正负12V的电压电平表示逻辑0和逻辑1。USB转RS-232串口适用于连接计算机与老式串行设备,如串行打印机、调制解调器等。
  3. RS-485串口: RS-485是一种差分信号串口标准,使用两个传输线(A和B)传输数据,其中一个线路是正相位,另一个线路是反相位。它具有抗干扰性和支持多点通信的能力,通常用于工业控制和长距离通信。USB转RS-485串口适用于连接计算机与RS-485串口设备,如工业自动化设备。
  4. COM口(serial port): COM口是计算机上用于串行通信的物理接口,通常使用RS-232或RS-485标准。COM口通常用于连接外部设备,如串行打印机、GPS接收器、数据采集器等。USB转COM口适用于计算机没有内置串行接口的情况,允许用户通过USB接口模拟COM口。
  5. UART(通用异步收发传输器): UART是一种通信芯片或模块,用于将并行数据转换为串行数据以进行串行通信。UART可以与TTL、RS-232或RS-485等不同类型的串口配合使用。USB转UART通常是一个通用的串口适配器,可以用于连接不同类型的串口设备。

Modbus协议的工作原理与应用场景插图1

Modbus协议说明

Modbus诞生于1979年,最初由莫迪康公司(Modicon)开发,后来被施耐德电气公司收购。Modbus为设备和设备之间的通信提供了通用语言。它已成为工业领域通信协议的行业标准,并且是工业电子设备之间常用的连接方式之一。Modbus作为目前工业领域应用最广泛的协议之一,有着以下Advantages:

– Modbus协议是开放、公开发表且无版权要求的,可以广泛应用。

– Modbus协议支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外线、无线等。

– Modbus协议的消息帧格式简单、紧凑且易于理解。用户容易理解和使用,制造商容易开发和集成,方便形成工业控制网络。

Modbus协议的应用

最简单地说,Modbus是一种总线通信协议,类似于I2C和SPI,但不依赖于特定的硬件总线。Modbus之所以广泛使用,是因为它具有许多优点。

Modbus通信过程

需要注意的是,Modbus是一种一主多从的通信协议。在Modbus通信中,只有一个设备可以发送请求,其他从设备接收主机发送的请求数据并进行响应。从设备可以是各种外围设备,如I/OSensors、阀门、网络驱动器或其他类型的

测量设备。从站处理信息并使用Modbus将其数据发送给主站。换句话说,不能在同一时间内进行Modbus同步通信。主机一次只能向一个从机发送请求,总线上每次只有一个数据进行传输,即主机发送请求,从机响应。如果主机没有发送请求,总线上就没有数据通信。

需要特别注意的是,Modbus通信没有忙机制判断。例如,如果主机发送命令给从机,但从机没有收到或正在处理其他任务,那么从机将无法及时响应,因为Modbus总线只负责传输数据,没有其他仲裁机制。因此,必须通过软件的方式来判断是否成功接收到数据。

Modbus存储区

既然从机存储数据,必须有一种方式来进行文件操作。我们都知道,文件可以分为只读(Read-Only,-R)和读写(Read-Write,-RW)两种类型,而Modbus也有相应的存储区。

在Modbus协议中,存储的数据类型可以分为两种主要类型:布尔量和16位寄存器。

– 布尔量:这些数据可以表示诸如IO口电平高低、灯的开关状态等。

– 16位寄存器:这些数据通常用于表示传感器的温度数据、存储密码等信息。

Modbus协议将存储区分为4个区域,分别是0、1、3和4区。among them,1区和4区是可读可写的,而0区和3区是只读的。

此外,Modbus还为每个存储区分配了地址范围。主机在向从机请求数据时,只需告诉从机数据的起始地址和要获取的字节数,从机就可以发送数据给主机。

Modbus协议类型

在Modbus协议中,数据传输可以采用不同的介质和模式,主要有三种报文类型,包括ASCII、RTU(远程终端控制系统)和TCP。

对于串行端口,Modbus协议有多个版本,但最常见的包括以下四种:

– **Modbus-RTU**:采用紧凑的hexadecimal表示数据的方式。Modbus-RTU在数据帧中附加了循环冗余校验(CRC),用于检测数据是否正确。一个典型的Modbus-RTU报文包含从机地址、function code、数据和CRC check。

– **Modbus-ASCII**:采用ASCII码表示数据,每个8位字节都被转换为两个ASCII字符发送。Modbus-ASCII也包含循环冗余校验,但使用了不同的校验方法。

– **Modbus-TCP**:Modbus-TCP不需要从机地址,而是需要MBAP(Modbus Application Protocol over TCP)message header。由于TCP本身具有校验和差错检测能力,因此Modbus-TCP不需要额外的差错校验。

– **Modbus Plus**:这是另一种Modbus协议版本,用于特定的工业应用。

在这些版本中,Modbus-RTU最为常见,而Modbus-ASCII较少使用。下面我们将详细讨论Modbus-RTUProtocol。

Modbus-RTUProtocol

Modbus报文帧结构

Modbus报文是指主机发送给从机的一帧数据,其中包含了从机的地址、主机要执行的操作、数据以及校验码等信息。在串行链路上,Modbus报文的格式如下:

– **从机地址**:每个从机都有唯一的地址,占用一个字节,有效范围通常是1-247,among them255是广播地址,表示向所有从机发送请求。

– **function code**:占用一个字节,它表示主机发送的请求是何种操作,不同的功能码对应不同的操作。

– **data**:根据功能码的不同,包含不同的信息。例如,如果功能码是查询从机的数据,数据部分包括起始寄存器地址和要读取的寄存器数量。

– **checksum**:在数据传输过程中

,数据可能会受到干扰或损坏,CRC检验用于检测接收到的数据是否正确。

Modbusfunction code

Modbus协议规定了多个功能码,每个功能码对应一种操作。虽然Modbus定义了多达20多种功能码,但实际应用中常用的只有其中的8种,用于对存储区的读写。以下是常用的Modbusfunction code:

– **03**:读取多个寄存器的值。
– **06**:设置单个寄存器的值。
– **16**:设置多个寄存器的值。
– **01**:读取多个开关量输入。
– **02**:读取多个开关量输出。
– **05**:设置单个开关量输出。
– **15**:设置多个开关量输出。
– **23**:读取多个寄存器的值(扩展功能码)。

需要注意的是,不同的功能码对应不同的操作,因此主机在发送请求时需要指定功能码,以告知从机要执行的操作。

CRC check

CRC(循环冗余校验)用于检测数据传输过程中的错误。在Modbus协议中,CRC check占用两个字节,包含一个16位的二进制值。CRC值由发送设备计算并附加到数据帧上,在接收设备接收数据时重新Calculate CRC值,并与接收到的CRC check值进行比较。如果这两个值不相等,就表示数据传输存在错误。

CRC check的计算流程如下:

1. 预置一个16位寄存器为0xFFFF(全1),称之为CRCregister。
2. 把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRCregister。
3. 将CRC寄存器向右移动一位,最高位填充0,最低位被移出并进行检测。
4. 如果最低位为0,则重复第3步(继续下一次移位);如果最低位为1,则将CRC寄存器与预设的固定值(0xA001)进行异或运算。
5. 重复第3步和第4步,直到进行8次移位,处理完一个完整的8位。
6. 重复第2步到第5步来处理下一个8位,直到所有字节处理完成。
7. 最终CRC寄存器中的值就是CRC check值。

此外,还有一种使用预先计算的表格来Calculate CRC的方法,它具有更快的计算速度,但需要较大的存储空间。这种方法在此不做详细说明。

发送和接收数据示例

下面我们将详细介绍Modbus-RTU协议的发送和接收数据示例。

1. 主机对从机读数据操作

主机发送报文格式如下:

01 03 00 01 00 01 D5 CA

解释:

– `0x01`:从机的地址。
– `0x03`:查询功能,读取从机寄存器的数据。
– `0x00 0x01`:表示读取的起始寄存器地址,从0x0001开始读取。
– `0x00 0x01`:表示查询的寄存器数量为1个。Modbus将数据存储在寄存器中,通过查询寄存器来获取不同变量的值。一个寄存器地址对应2字节数据,寄存器地址对应从机的实际存储地址。
– `0xD5 0xCA`:循环冗余校验 (CRC)。

从机回复报文格式如下:

01 03 02 00 17 F8 4A

解释:

– `0x01`:从机的地址。
– `0x03`:查询功能,读取从机寄存器的数据。
– `0x02`:返回字节数为2个,一个寄存器对应2个字节。
– `0x00 0x17`:寄存器的值是0x0017。
– `0xF8 0x4A`:循环冗余校验 (CRC)。

2. 主机对从机写数据操作

主机发送报文格式如下:

01 06 00 01 00 17 98 04

解释:

– `0x01`:从机的地址。
– `0x06`:修改功能,修改从机寄存器的数据。
– `0x00 0x01`:表示修改的起始寄存器地址,说明要修改0x0001-0x0003的存储内容。
– `0x00 0x17`:要修改的数据值为0x0017。
– `0x98 0x04`:循环冗余校验 (CRC)。

从机回复报文格式如下:

01 06 00 01 00 17 98 04

解释:

从机的回复与主机的发送相同。如果不同,说明发生了错误。

这是一个Modbus-RTU协议的简单示例,演示了主机如何向从机发送读取和写入数据的请求,并从从机接收响应。每个Modbus报文都包含从机地址、function code、数据以及CRC check,以确保可靠的数据传输。

Modbus-ASCIIProtocol

Modbus-ASCII协议与Modbus-RTU协议相似,但在消息中的每个字节都作为两个ASCII字符发送。十六进制的0到F分别对应ASCII字符的0到9和AtoF。

以下是Modbus-ASCII协议的特点:

– 每个字节都以ASCII字符表示,例如0x30~0x3A表示0到9,0x41~0

x46表示AtoF。
– 字节之间使用空格分隔。
– 每个消息以回车符(CR,0x0D)和换行符(LF,0x0A)End。

Modbus-ASCII的CRC check与Modbus-RTU相同,但在ASCII格式下表示为ASCIIcharacters。

Modbus-TCPProtocol

Modbus-TCP协议是基于TCP/IP协议的Modbus协议变种,用于在TCP/IP网络上进行通信。与Modbus-RTU和Modbus-ASCII协议不同,Modbus-TCP协议不使用物理串行链路,而是使用以太网或Wi-Fi等TCP/IP网络。

以下是Modbus-TCP协议的特点:

– Modbus-TCP使用标准的TCP/IP套接字连接,无需物理串行通信线路。
– Modbus-TCP消息与Modbus-RTU协议消息的结构相似,但不包括CRC check。
– 在Modbus-TCP中,数据以二进制格式传输,而不是ASCIIcharacters。
– Modbus-TCP消息通过TCP连接的套接字发送和接收。
– Modbus-TCP使用TCP端口502。

因此,与Modbus-RTU和Modbus-ASCII协议相比,Modbus-TCP协议更适合基于以太网的通信,通常用于现代工业自动化系统和设备。

总结

Modbus是一种用于工业领域通信的通用协议,具有多个版本,包括Modbus-RTU、Modbus-ASCII和Modbus-TCP。不同版本适用于不同的通信介质和场景。 Modbus-RTU通常用于串行通信,而Modbus-TCP用于以太网通信。 Modbus协议包括功能码、CRC check等元素,用于发送和接收数据。使用ModbusProtocol,主机可以与从机进行通信,读取和写入数据,以实现自动化和控制系统。

技术术语(共 7 个)—— Click to Expand
RS485工业常用的差分串行通信标准,支持多点通信
RS232点对点串行通信标准,常用于短距离设备通信
function codeModbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
registerModbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
CRC check循环冗余校验,用于检测数据传输中的错误
serial port计算机与外部设备进行串行通信的物理接口
Sensors将物理量转换为电信号的检测装置
来源/工具信息 —— Click to Expand
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbuscommunication protocol technical community Category Modbus protocol standard 字数 6534 字 · 阅读约 17 分钟 更新 2026-07-01 永久链接 https://www.modbus.cn/24939.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus debugging tool,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 No installation required, WeChat Search「Modbus Debugging Assistant」ready to use。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.