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)||TCP502端口|温度设备(Modbus Server)设备:
IP:192.168.1.100 端口:5024. Modbus 的核心:寄存器
Modbus 不直接传:
temperature=25.6℃而是:
读取地址40001返回:256然后约定:
实际温度=数据 /10256/10=25.6℃5. 四种寄存器类型(重点)
Modbus 有四类数据:
| 类型 | 名称 | 读写 | 示例 |
|---|---|---|---|
| Coil | 线圈 | 读写 | 开关 |
| Discrete Input | 离散输入 | 只读 | 按钮 |
| Input Register | 输入寄存器 | 只读 | 温度 |
| Holding Register | 保持寄存器 | 读写 | 参数 |
记忆:
0xxxx 线圈 开关 1xxxx 输入 3xxxx 输入寄存器 4xxxx 保持寄存器实际设备中最常见:
400014000240003...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: SlaveID=1设备2: SlaveID=28. Modbus RTU 通信参数
必须一致:
例如:
波特率:9600数据位:8停止位:1校验: None简称:
96008N1或者:
96008E19. 一次读取过程
例如:
主机:
我要读取:Slave=2寄存器:40001数量:2个发送:
02 03 0000 0002 CRC解释:
| 字段 | 意义 |
|---|---|
| 02 | 设备地址 |
| 03 | 功能码 |
| 0000 | 开始地址 |
| 0002 | 读取2个寄存器 |
| CRC | 校验 |
设备回复:
02 03 04 00FA 0102 CRC表示:
两个16位数据:
25025810. 常用功能码
| 功能码 | 作用 |
|---|---|
| 01 | 读线圈 |
| 02 | 读输入 |
| 03 | 读保持寄存器 |
| 04 | 读输入寄存器 |
| 05 | 写单个线圈 |
| 06 | 写单个寄存器 |
| 15 | 写多个线圈 |
| 16 | 写多个寄存器 |
最常用:
03 读数据 06 写数据11. Python 快速测试
安装:
pipinstallpymodbus读取 Modbus TCP:
from pymodbus.clientimportModbusTcpClient 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
命令:
sudoaptinstallmbpoll读取:
mbpoll\-mtcp\-a1\-r40001\192.168.1.10013. 最重要的三个概念
三个:
① Modbus 是读写寄存器
设备=一堆地址② 地址不是数据
例如:
40001只是位置。
里面可能:
温度 压力 电压要看设备手册。
③ 通信双方必须知道规则
包括:
设备地址 寄存器地址 数据类型 缩放比例 字节顺序