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 复制代码
设备地址
寄存器地址
数据类型
缩放比例
字节顺序
相关推荐
Dev_XH1 天前
【成品设计】基于单片机的家用智能浇花系统的设计与实现
stm32·单片机·嵌入式硬件·物联网
CServer_011 天前
源码交付!有色金属工厂的AI数据底座
人工智能·物联网·制造
TDengine (老段)1 天前
TDengine IDMP 十大实用功能(9)
大数据·数据库·人工智能·物联网·时序数据库·tdengine·idmp
刘洪峰IoT1 天前
从点表到物模型,再到「模型即数据」:二十年亲历,见证设备接入的范式革命
物联网·yfios
Dev_XH1 天前
【成品设计】基于物联网的配电箱智能防护系统设计
stm32·单片机·嵌入式硬件·物联网
Dev_XH1 天前
【成品设计】基于单片机的工厂设备能耗监控与优化系统
stm32·单片机·嵌入式硬件·物联网
SL_staff2 天前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品
广凌科技2 天前
广凌校园物联网中台整体解决方案:三层架构驱动校园数字化智治
物联网·架构
海雅达手持终端PDA2 天前
巡线、深井、爆管抢修与极寒水网的硬件矩阵怎么配?海雅达水务巡检终端PDA选型指南
android·物联网·5g·集成测试·能源·政务
wendaoiot2 天前
低温环境下4G采集节点掉线的三类成因与参数边界
物联网