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 复制代码
设备地址
寄存器地址
数据类型
缩放比例
字节顺序
相关推荐
HKElec13 小时前
PaperFocus:基于 ESP32-S3 与墨水屏的开源专注助手
物联网·esp32
K成长日志14 小时前
BLE链路层--比特流处理
网络·物联网·网络协议·蓝牙·iot·ble·无线
2501_913981781 天前
工业4.0时代的物联网解决方案:领先品牌如何引领智能制造变革
物联网·制造·工业物联网
虎王物联1 天前
物联网协议网关设计:多协议融合与数据转换的工程实战
物联网·嵌入式·esp32
2601_960906721 天前
具备抗弯耐磨的性能特点
大数据·人工智能·物联网·决策树·动态规划
YCOSA20251 天前
雨晨 Windows 11 IoT 企业版 LTSC 26H1 特制 28000.2796
windows·物联网
2401_865261632 天前
亦唐科技:引领国产贴片机创新,推动智能制造升级
大数据·人工智能·物联网
淡淡的香烟2 天前
Android视频直播播放器简单封装
android·物联网·音视频
Hello_Damon_Nikola2 天前
HT2813从入门到精通
单片机·嵌入式硬件·物联网
Devlab2 天前
LVGL设计大师——网页版anyui来了!!
嵌入式硬件·物联网·低代码·ui·iot