modbus快速入门

我的小站:Ean7的小站

1. Modbus 是什么?

Modbus 是一种工业通信协议,用于 PLC、传感器、变频器、仪表、智能电表等设备之间交换数据。

它的特点:

  • 简单

  • 开放标准

  • 工业应用非常广

  • 主从结构(传统 Modbus RTU/TCP)

    • 在 Modbus 里面,主站(Master) 可以简单理解为:

      主动发起通信、提出读写请求的一方。

      而:

      从站(Slave) 是被询问、返回数据或执行命令的一方。

      现在新的 Modbus 标准里更常叫:

      • Master → Client(客户端)
      • Slave → Server(服务器)

      但工业现场仍然习惯叫主站/从站。

典型场景:

上位机/PLC
    |
    | Modbus
    |
+---+----+----+
|        |    |
温度计  电表  变频器

2. Modbus 有哪些类型?

主要有三个:

类型 物理层 常用场景
Modbus RTU RS485 工业现场最多
Modbus ASCII RS232/485 老设备
Modbus TCP Ethernet 现在越来越多

现在最常用:

  • RS485 + Modbus RTU
  • 网口 + Modbus TCP

3. Modbus TCP 快速理解

例如:

电脑读取一个温度传感器:

电脑(Modbus Client)
        |
        | TCP 502端口
        |
温度设备(Modbus Server)

设备:

IP:
192.168.1.100

端口:
502

4. Modbus 的核心:寄存器

Modbus 不直接传:

temperature = 25.6℃

而是:

读取地址 40001
返回:
256

然后约定:

实际温度 = 数据 / 10

256 / 10 = 25.6℃

5. 四种寄存器类型(重点)

Modbus 有四类数据:

类型 名称 读写 示例
Coil 线圈 读写 开关
Discrete Input 离散输入 只读 按钮
Input Register 输入寄存器 只读 温度
Holding Register 保持寄存器 读写 参数

记忆:

0xxxx
线圈
开关


1xxxx
输入


3xxxx
输入寄存器


4xxxx
保持寄存器

实际设备中最常见:

40001
40002
40003
...

6. 一个实际例子

假设:

温度模块:

地址:
40001

数据:
253

说明书:

温度 = 寄存器值 ×0.1

读取:

40001 → 253

计算:

253×0.1

=25.3℃

7. Modbus RTU(RS485)是什么?

典型接线:

PLC             温度模块

A  ------------ A
B  ------------ B

GND ---------- GND

多个设备:

          RS485总线

主站
 |
 +----设备1 地址1
 |
 +----设备2 地址2
 |
 +----设备3 地址3

每个设备有地址:

设备1:
Slave ID=1

设备2:
Slave ID=2

8. Modbus RTU 通信参数

必须一致:

例如:

波特率:
9600

数据位:
8

停止位:
1

校验:
None

简称:

9600 8N1

或者:

9600 8E1

9. 一次读取过程

例如:

主机:

我要读取:
Slave=2

寄存器:
40001

数量:
2个

发送:

02
03
0000
0002
CRC

解释:

字段 意义
02 设备地址
03 功能码
0000 开始地址
0002 读取2个寄存器
CRC 校验

设备回复:

02
03
04
00FA
0102
CRC

表示:

两个16位数据:

250
258

10. 常用功能码

功能码 作用
01 读线圈
02 读输入
03 读保持寄存器
04 读输入寄存器
05 写单个线圈
06 写单个寄存器
15 写多个线圈
16 写多个寄存器

最常用:

03 读数据

06 写数据

11. Python 快速测试

安装:

pip install pymodbus

读取 Modbus TCP:

from pymodbus.client import ModbusTcpClient


client = ModbusTcpClient(
    "192.168.1.100",
    port=502
)

client.connect()


result = client.read_holding_registers(
    address=0,
    count=10
)


print(result.registers)


client.close()

输出:

[253, 100, 0, 55,...]

12. 常用调试软件

Windows

推荐:

Modbus Poll

功能:

  • 模拟主站
  • 读写寄存器
  • 看通信帧

Modbus Slave

模拟设备。


Linux

命令:

sudo apt install mbpoll

读取:

mbpoll \
-m tcp \
-a 1 \
-r 40001 \
192.168.1.100

13. 最重要的三个概念

三个:

① Modbus 是读写寄存器

设备 = 一堆地址

② 地址不是数据

例如:

40001

只是位置。

里面可能:

温度
压力
电压

要看设备手册。


③ 通信双方必须知道规则

包括:

设备地址
寄存器地址
数据类型
缩放比例
字节顺序
posted @ 2026-07-22 13:39  七仔子  阅读(2)  评论(0)    收藏  举报