modbus快速入门

分类: MODBUS

1. 核心概念:主从模式 (Master/Slave)

Modbus 最基本的逻辑是一问一答

  • 主站 (Master / Client): 整个网络的控制者(通常是 PLC、触摸屏、或电脑)。只有主站能主动发起对话
  • 从站 (Slave / Server): 被动响应者(通常是传感器、变频器、仪表)。它从不主动说话,只有被主站点名时才回答。

注意: 在一个 Modbus RTU (串行) 网络中,同一时刻只能有一个主站,但可以有多个从站(最多 247 个)。


2. 数据模型:四个“仓库”

这是新手最容易晕的地方。Modbus 把从站设备里的数据分成了四个区域(仓库),主站去读写这些数据。

区域名称 对象类型 读写权限 数据类型 用途示例
线圈 (Coils) 0xxxx 读 / 写 布尔 (0/1) 控制继电器、启停开关
离散输入 (Discrete Inputs) 1xxxx 只读 布尔 (0/1) 读取接近开关、按钮状态
输入寄存器 (Input Registers) 3xxxx 只读 16位字 (Word) 读取温度传感器数值、电压值
保持寄存器 (Holding Registers) 4xxxx 读 / 写 16位字 (Word) 设定PID参数、频率设定
  • 0/1 (位操作): 开关量,就像电灯开关。
  • Word (字操作): 模拟量,一个寄存器 16 bit(2字节),数值范围 0-65535。如果需要传浮点数(如 23.56),通常需要合并读取两个连续的寄存器。

3. 两种主流传输方式

虽然协议逻辑一样,但物理上的“语言格式”有两种主要变体:

A. Modbus RTU (最常用)

  • 物理层: 通常跑在 RS-485 串口上。
  • 特点: 使用十六进制 (Hex) 传输,紧凑、效率高。
  • 校验: 使用 CRC (循环冗余校验) 防止数据出错。

B. Modbus TCP

  • 物理层: 跑在网线 (Ethernet) 上。
  • 特点: 基于 TCP/IP 协议,不需要校验码(TCP 自带校验),速度极快。
  • 端口: 默认端口 502

4. 报文解剖:它到底发了什么?

让我们看一个真实的 Modbus RTU 例子。

场景: 主站想要读取 1号从站保持寄存器,从地址 0 开始,读 2 个数据。

主站发送 (Request): 01 03 00 00 00 02 C4 0B

字节 (Hex) 含义 解析
01 从站地址 "喂,1号设备听着..."
03 功能码 "我要读取保持寄存器 (Read Holding Registers)..."
00 00 起始地址 "从第 0 个地址开始..."
00 02 寄存器数量 "往后读 2 个寄存器..."
C4 0B CRC 校验 (用于确保数据没传错的校验码)

从站回复 (Response): 01 03 04 00 0A 01 02 3F 45

字节 (Hex) 含义 解析
01 从站地址 "我是1号..."
03 功能码 "这是你要的读取结果..."
04 数据字节数 "后面跟着 4 个字节的数据 (2个寄存器 x 2字节)..."
00 0A 数据1 第一个寄存器的值是 10
01 02 数据2 第二个寄存器的值是 258 (0x0102)
3F 45 CRC 校验 (校验码)

5. 常用功能码 (Function Codes)

你需要记住的主要是这几个:

  • 01: 读线圈 (Read Coils)
  • 02: 读离散输入 (Read Discrete Inputs)
  • 03: 读保持寄存器 (最常用,读参数)
  • 04: 读输入寄存器 (读传感器值)
  • 05: 写单个线圈 (开关控制)
  • 06: 写单个寄存器 (改参数)
  • 15: 写多个线圈
  • 16: 写多个寄存器 (批量改参数)

6. 新手常见的“坑”

  1. 地址偏移 (0 vs 1): - 协议底层地址是从 0 开始的。 - 但是 PLC 或文档里通常写成从 1 开始(例如 40001)。 - 坑: 如果文档说地址是 40001,你在代码里发送指令时,地址通常要写 0 (即 40001 - 40001)。如果读不到数据,尝试把地址 +1-1 试试。
  2. 大小端 (Endianness): - 一个 16 位整数由两个字节组成(高字节和低字节)。 - 不同厂家设备的发送顺序可能不同(先发高位还是先发低位)。如果读出来的数字很奇怪(比如把 1 读成了 256),通常是字节序反了,需要在软件里勾选 "Byte Swap"。
  3. RS-485 接线: - A 接 A,B 接 B(有时标为 D+ 接 D+,D- 接 D-)。千万不要接反,接反了无法通信,但通常不会烧坏设备。

7. 必备工具

要开始实战,你需要:

  • 硬件: USB 转 RS485 转换器(淘宝十几块钱一个)。
  • 软件(PC端):
  • Modbus Poll: 模拟主站(用来测试传感器好不好用)。
  • Modbus Slave: 模拟从站(用来测试你的上位机软件写得对不对)。