Modbus TCP 协议开发实战:Python 从站模拟、主站读写与异常处理全流程实测

发布时间:2026/10/10 6:01:37
Modbus TCP 协议开发实战:Python 从站模拟、主站读写与异常处理全流程实测
Modbus TCP 协议开发实战Python 从站模拟、主站读写与异常处理全流程实测Modbus 是工业协议里的「通用语」但新手最大的障碍是没硬件——总不能为了学协议先买一台 PLC。这套教学工程用纯 Python 搭了一条完整链路温控产线从站模拟器内置温度物理模型与可控加热器 主站读写演示 非法地址异常处理Windows 11 x64 Python 3.14 pymodbus 3.15 实测文内输出全部是真实运行记录。一、寄存器表从站 SIM-TEMP-01设备 ID1地址类型含义保持寄存器 1uint16温度 ×10248 24.8℃受物理模型驱动保持寄存器 2uint16目标温度设定值 ×10可写300 30.0℃保持寄存器 3uint16运行小时数线圈 1bool加热器启停ON 向设定值爬升OFF 缓慢回落温度不是拍脑袋随机数从站内置物理模型加热器打开后温度向设定值爬升关闭后缓慢回落环境温度——这让「写设定值 → 观察变化」成为闭环实验。二、主站实测全流程三步跑通pip install pymodbus→ 窗口 A 起从站python slave_simulator.py监听 127.0.0.1:5020→ 窗口 B 跑主站python master_demo.py[连接] 127.0.0.1:5020 - 成功 [读] 保持寄存器 1~3原始值 [248, 12, 0] 温度 24.8 ℃ [写] 寄存器 2 写 300 - 回读设定值 30.0 ℃ [写] 线圈 1 打开加热器 ON [观察] 加热 6 秒25.3 - 25.8 - 26.3 - 26.7 - 27.1 - 27.5 ℃ [异常] 读地址 200~205isErrorTrue 异常码2写设定值 30.0℃ 后打开加热器温度每秒爬升约 0.4~0.5℃物理模型 behaving 如预期——这比「写个数再读出来」的静态演示有说服力得多。三、异常处理是必考题# 读不存在的地址 200~205rrawaitclient.read_holding_registers(200,6,slave1)ifrr.isError():# Modbus 协议层异常异常码 2 Illegal Data Addressprint(illegal address:,rr.exception_code)真实从站对越界地址返回异常码 2 而不是报 Python 异常也有的老设备直接返回零填充数据不报错——所以工程上要「isError 判断 数据合理性双重校验」。这个坑在从站模拟器里可以稳定复现比连真机调试成本低得多。四、从模拟到真机换真机只改两个参数主站连接地址从 127.0.0.1 换成设备 IP从站 ID 换成设备的 unit id。寄存器表换成设备手册的点表读写代码一行不用动。这套工程适合作为工业自动化的入门沙盒也适合给上位机开发当集成测试的假从站。 本文对应的完整工程从站主站教程已整理上传点击查看资源包