news 2026/10/10 6:01:32

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Modbus TCP 协议开发实战:Python 从站模拟、主站读写与异常处理全流程实测

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

Modbus 是工业协议里的「通用语」,但新手最大的障碍是没硬件——总不能为了学协议先买一台 PLC。这套教学工程用纯 Python 搭了一条完整链路:温控产线从站模拟器(内置温度物理模型与可控加热器)+ 主站读写演示 + 非法地址异常处理,Windows 11 x64 + Python 3.14 + pymodbus 3.15 实测,文内输出全部是真实运行记录。

一、寄存器表(从站 SIM-TEMP-01,设备 ID=1)

地址类型含义
保持寄存器 1uint16温度 ×10(248 = 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~205:isError=True 异常码=2

写设定值 30.0℃ 后打开加热器,温度每秒爬升约 0.4~0.5℃,物理模型 behaving 如预期——这比「写个数再读出来」的静态演示有说服力得多。

三、异常处理是必考题

# 读不存在的地址 200~205rr=awaitclient.read_holding_registers(200,6,slave=1)ifrr.isError():# Modbus 协议层异常(异常码 2 = Illegal Data Address)print("illegal address:",rr.exception_code)

真实从站对越界地址返回异常码 2 而不是报 Python 异常,也有的老设备直接返回零填充数据不报错——所以工程上要「isError 判断 + 数据合理性双重校验」。这个坑在从站模拟器里可以稳定复现,比连真机调试成本低得多。

四、从模拟到真机

换真机只改两个参数:主站连接地址从 127.0.0.1 换成设备 IP,从站 ID 换成设备的 unit id。寄存器表换成设备手册的点表,读写代码一行不用动。这套工程适合作为工业自动化的入门沙盒,也适合给上位机开发当集成测试的假从站。

📦 本文对应的完整工程(从站+主站+教程)已整理上传:点击查看资源包

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 6:00:48

swiftui-ui-patterns - focus

焦点处理与字段串联 意图 使用 FocusState 控制键盘焦点、串联字段,并在复杂表单中协调焦点。 核心模式 使用枚举表示可聚焦的字段。在 onAppear 中设置初始焦点。使用 .onSubmit 将焦点移动到下一个字段。对于动态字段列表,使用带关联值的枚举&#xff…

作者头像 李华
网站建设 2026/10/10 6:00:19

【计算机毕业设计单片机案例】基于单片机的室内气压烟雾颗粒物检测与移动端远程提醒控制系统设计 基于单片机的本地与移动端协同管理多环境参数监测报警装置设计(030110)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/10/10 5:59:13

局域网内 Docker 部署 DeepSeek AI Agent 平台实战

1. 为什么要在局域网里自建 AI Agent 平台很多人第一次接触大模型,习惯直接开个网页版用。但真到团队协作、数据敏感、或者需要把 AI 能力嵌进内部工具链的时候,网页版就明显不够用了。你没法控制它的上下文长度,没法接自己的知识库&#xff…

作者头像 李华
网站建设 2026/10/10 5:58:26

Java工程师面试答疑:从背八股文到讲原理与取舍

见过太多简历写“熟悉Java、熟悉Spring、熟悉Redis”的候选人,一到追问环节就开始支支吾吾。前阵子有位读者“谢飞机”找我做面试答疑,他准备冲击互联网大厂Java工程师岗位,学历背景不算亮眼,项目经历也偏中小厂,典型的…

作者头像 李华
网站建设 2026/10/10 5:57:19

Marvell88Q5152交换机开发(10)-项目开发问题(一)

问题 问题:TCAM做doubletag过滤,当外标签时0x88A8时无法击中TCAM的规则。 如上图所示配置一个TCAM的黑名单,frame type=0(normal);outerTag=0x88A8,innerTag=0x8100/0x9100/任意,当收到的报文符合这个规则就Drop丢弃。 补充:每个port口有四个TCAM击中计数器,如果报…

作者头像 李华