modbus快速入门

我的小站:Ean7的小站

1. Modbus 是什么?

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

它的特点:

  • 简单

  • 开放标准

  • 工业应用非常广

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

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

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

      而:

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

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

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

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

典型场景:

bash 复制代码
上位机/PLC
    |
    | Modbus
    |
+---+----+----+
|        |    |
温度计  电表  变频器

2. Modbus 有哪些类型?

主要有三个:

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

现在最常用:

  • RS485 + Modbus RTU
  • 网口 + Modbus TCP

3. Modbus TCP 快速理解

例如:

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

bash 复制代码
电脑(Modbus Client)
        |
        | TCP 502端口
        |
温度设备(Modbus Server)

设备:

bash 复制代码
IP:
192.168.1.100

端口:
502

4. Modbus 的核心:寄存器

Modbus 不直接传:

bash 复制代码
temperature = 25.6℃

而是:

bash 复制代码
读取地址 40001
返回:
256

然后约定:

bash 复制代码
实际温度 = 数据 / 10

256 / 10 = 25.6℃

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

Modbus 有四类数据:

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

记忆:

bash 复制代码
0xxxx
线圈
开关


1xxxx
输入


3xxxx
输入寄存器


4xxxx
保持寄存器

实际设备中最常见:

bash 复制代码
40001
40002
40003
...

6. 一个实际例子

假设:

温度模块:

bash 复制代码
地址:
40001

数据:
253

说明书:

bash 复制代码
温度 = 寄存器值 ×0.1

读取:

bash 复制代码
40001 → 253

计算:

bash 复制代码
253×0.1

=25.3℃

7. Modbus RTU(RS485)是什么?

典型接线:

bash 复制代码
PLC             温度模块

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

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

多个设备:

bash 复制代码
          RS485总线

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

每个设备有地址:

bash 复制代码
设备1:
Slave ID=1

设备2:
Slave ID=2

8. Modbus RTU 通信参数

必须一致:

例如:

bash 复制代码
波特率:
9600

数据位:
8

停止位:
1

校验:
None

简称:

bash 复制代码
9600 8N1

或者:

bash 复制代码
9600 8E1

9. 一次读取过程

例如:

主机:

bash 复制代码
我要读取:
Slave=2

寄存器:
40001

数量:
2个

发送:

bash 复制代码
02
03
0000
0002
CRC

解释:

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

设备回复:

bash 复制代码
02
03
04
00FA
0102
CRC

表示:

两个16位数据:

bash 复制代码
250
258

10. 常用功能码

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

最常用:

bash 复制代码
03 读数据

06 写数据

11. Python 快速测试

安装:

bash 复制代码
pip install pymodbus

读取 Modbus TCP:

bash 复制代码
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()

输出:

bash 复制代码
[253, 100, 0, 55,...]

12. 常用调试软件

Windows

推荐:

Modbus Poll

功能:

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

模拟设备。


Linux

命令:

bash 复制代码
sudo apt install mbpoll

读取:

bash 复制代码
mbpoll \
-m tcp \
-a 1 \
-r 40001 \
192.168.1.100

13. 最重要的三个概念

三个:

① Modbus 是读写寄存器
bash 复制代码
设备 = 一堆地址

② 地址不是数据

例如:

bash 复制代码
40001

只是位置。

里面可能:

bash 复制代码
温度
压力
电压

要看设备手册。


③ 通信双方必须知道规则

包括:

bash 复制代码
设备地址
寄存器地址
数据类型
缩放比例
字节顺序
相关推荐
数字新视界10 小时前
数据中心DCIM管理系统赋能智能运维与高效管理模型
物联网·数据中心·机房管理·动环监控系统·动力环境监控系统
星恒讯工业路由器12 小时前
房车旅居不“断网”:移动生活如何实现全程在线?
网络·物联网·生活·工业路由器·车载工业路由器·房车通信·双卡备份
aiprtem14 小时前
物联网 fastbee MQTT QoS1缺陷分析
物联网
TDengine (老段)16 小时前
TDengine Catalog 与元数据缓存
大数据·数据库·物联网·缓存·时序数据库·tdengine
jianqiang.xue17 小时前
收官:从v0.1到“研发新常态“,一套嵌入式智能体的落地与边界
stm32·单片机·物联网·架构·esp32
D_codingXuChu18 小时前
2026物联网应用开发服务商D-coding定制开发
物联网·信息可视化·开发经验·d-coding
笨笨饿18 小时前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
Jaixln_HRF18 小时前
芯维尔CN8010 1.2A/6V同步降压转换器芯片,集成350/230mΩ MOSFET与1.5MHz高频,用于汽车电子/IoT/便携仪器
嵌入式硬件·物联网·硬件工程
老周聊架构20 小时前
物联网设备怎么上户口:一机一密、一型一密与证书认证的技术拆解
物联网
爱吃洋芋丝1 天前
rk3576 android14 evb1-v10实验板点亮edp示例设备树修改
物联网