Modbus

AI-摘要
切换
Huggingface
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Modbus
KayerModbus 工业通信的通用语言
1. 什么是Modbus
Modbus 是一种工业级串行通信协议,由施耐德电气(Schneider Electric)旗下的 Modicon 公司于 1979 年推出,最初用于可编程逻辑控制器(PLC)之间的通信。经过数十年发展,它已成为工业自动化领域的通用语言,广泛应用于传感器、变频器、仪表、PLC、SCADA(监控和数据采集系统)等设备间的数据交互,核心优势是结构简单、开源免费、兼容性强。
2. Modbus 的核心特点
Modbus 能在工业场景中普及,源于其适配工业环境的核心特性:
- 主从(Master-Slave)通信架构
通信网络中只有 1 个主设备(如 PLC、工控机)和多个从设备(如传感器、执行器),主设备主动发起请求,从设备仅响应主设备的指令(不主动发送数据),避免网络冲突,适配工业场景的集中控制 需求。 - 开源免费,无专利限制
协议规范完全公开,设备厂商无需支付授权费即可实现兼容,因此几乎所有工业设备厂商(如西门子、罗克韦尔、欧姆龙等)都支持 Modbus。
轻量化设计,易实现 - 协议帧结构简单(仅包含地址、功能码、数据、校验码),对硬件资源要求低,即使是低成本的单片机(如 51 单片机)也能轻松实现。
支持多种物理层 - 可基于不同的物理接口和传输介质部署,满足不同工业场景的距离、速度需求,常见物理层包括 RS-232、RS-485、以太网等。
3. Modbus 的主要协议变体
根据物理层和传输方式的不同,Modbus 主要分为三大类,适配不同的工业通信场景:
协议变体 | 物理层 | 传输介质 | 核心特点 | 典型应用场景 |
---|---|---|---|---|
Modbus RTU | RS-485 / RS-232 | 屏蔽双绞线 | 1. 二进制编码,数据密度高(传输效率高) 2. 抗干扰能力强(RS-485 支持差分传输) 3. 传输距离远(RS-485 单段最大 1200 米) 4. 支持多从机(RS-485 最多 32 个从设备) |
车间内短距离、多设备的分布式控制(如传感器组网、变频器控制) |
Modbus ASCII | RS-485 / RS-232 | 屏蔽双绞线 | 1. ASCII 编码(数据以可打印字符传输) 2. 可读性强(便于调试,可直接查看数据) 3. 传输效率低(相同数据占用字节更多) |
对调试可读性要求高、数据量小的场景 |
Modbus TCP | 以太网 | 网线、光纤 | 1. 基于 TCP/IP 协议,使用端口 502 2. 支持远距离传输(依托以太网 / 互联网) 3. 可实现多主多从(突破 RTU/ASCII 的单主限制) 4. 传输速度快(依托以太网带宽,可达 100Mbps/1Gbps) |
跨车间、跨厂区的远程监控(如 SCADA 系统、工业互联网平台) |
4. Modbus 通信的核心概念
Modbus 通信的核心概念主要是以下两点:
从设备地址(Slave Address)
- 仅用于 Modbus RTU/ASCII(TCP 用 IP 地址标识设备),是从设备的唯一标识(范围:1-247,0 为广播地址)。
- 主设备发起请求时,需指定目标从设备的地址,只有地址匹配的从设备才会响应。
功能码(Function Code)
功能码是 主从设备的指令约定,主设备通过功能码告知从设备要做什么,从设备通过相同功能码响应(或返回错误码)。
常见功能码如下:
功能码 名称 作用 典型应用 01 读线圈状态 读取从设备的线圈(离散输出,如继电器开关) 查看电机启停状态、阀门开关状态 02 读离散输入状态 读取从设备的离散输入(如按钮、传感器开关) 查看急停按钮状态、光电传感器信号 03 读保持寄存器 读取从设备的保持寄存器(16 位整数,可读写) 读取变频器频率、仪表测量值(如温度、压力) 04 读输入寄存器 读取从设备的输入寄存器(16 位整数,只读) 读取模拟量传感器数据(如电流、电压信号) 05 写单个线圈 控制从设备的单个线圈(置 1 或置 0) 控制继电器吸合 / 断开、阀门打开 / 关闭 06 写单个保持寄存器 向从设备的单个保持寄存器写入数据 设置变频器目标频率、设定仪表报警阈值 16(0x10) 写多个保持寄存器 批量写入多个保持寄存器 批量设置设备参数(如 PLC 的多通道输出值)
数据地址(Register Address)
设备的寄存器 / 线圈按地址 划分,主设备需指定起始地址 和数据长度 来读写数据。
需注意:- 地址偏移问题:不同厂商的设备可能存在地址偏移(如 Modbus 标准地址为 40001 开始的保持寄存器,部分设备可能显示为 00001 开始),需参考设备手册确认。
- 数据类型:寄存器通常为 16 位整数,若需传输 32 位浮点数(如温度值 25.5℃),需将两个 16 位寄存器拼接(大端 / 小端顺序需与设备约定)。
校验码(Checksum)
仅用于 Modbus RTU/ASCII(TCP 依赖 TCP 协议的校验机制,无需额外校验),用于检测传输过程中的数据错误:- RTU 校验:采用 CRC16 循环冗余校验(2 字节),计算整个数据帧的校验值,从设备接收后重新计算,不匹配则丢弃。
- ASCII 校验:采用 LRC 纵向冗余校验(1 字节),计算数据帧中所有字节的异或值,实现简单但抗干扰能力弱于 CRC16。
5. Modbus 通信流程(以 RTU 为例)
以主设备读取从设备的数据 为例,流程如下:
- 主设备发起请求:
数据帧结构为[从地址] + [功能码] + [起始地址] + [数据长度] + [CRC16校验]
如读取地址 1 的传感器(功能码 03,起始地址 00 00,读取 1 个寄存器),帧为01 03 00 00 00 01 84 0A
。 - 从设备接收并响应:
从设备(地址 1)接收后,验证 CRC 校验,确认功能码和地址匹配,读取寄存器数据,返回响应帧:[从地址] + [功能码] + [数据长度] + [数据] + [CRC16校验]
如01 03 02 00 19 79 8E
(其中 02 为数据长度,00 19 为数据(2个字节表示一个寄存器的值)。 - 主设备处理数据:
主设备接收响应帧,校验 CRC 后,解析数据(00 19 转换为十进制 25),完成一次通信。
6. Modbus 的优缺点与应用场景
- 优点
- 兼容性极强:几乎所有工业设备都支持,不同厂商设备可直接通信(无需定制协议)。
- 部署成本低:RTU 基于 RS-485,硬件成本低;TCP 可复用现有以太网网络。
- 调试便捷:有大量开源工具(如 Modbus Poll、QModMaster)支持数据监控和测试。
- 缺点
- 安全性弱:协议本身无加密机制,数据传输为明文,易被窃取或篡改(需额外叠加 VPN、防火墙等安全措施)。
- RTU/ASCII 单主限制:仅支持 1 个主设备,无法满足多系统同时控制的场景(需用 Modbus TCP 或网关转换)。
- 数据长度有限:单帧最大传输 256 字节,不适合大数据量传输(如视频、大量日志)。
- 典型应用场景
- 工业自动化控制:PLC 与变频器、伺服驱动器通信,实现电机转速控制。
- 过程监控:传感器(温度、压力、流量)与 SCADA 系统通信,实时采集生产数据。
- 智能楼宇:楼宇控制器与空调、照明、电梯设备通信,实现能耗监控。
- 物联网(IIoT):通过 Modbus TCP 或网关(RTU 转 TCP)将工业设备接入云端平台(如阿里云 IoT、AWS IoT)。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果