Python上位机开发实战:5分钟搞定Modbus通信(附完整代码)

Python 实现上位机(一) 记录并分享一个用 python 实现上位机功能的思路与模板。本章将用 Python 实现一个简易的自定义规约。 阅读详情

Python上位机开发实战:5分钟搞定Modbus通信(附完整代码)

最近在做一个设备数据采集的小项目,客户那边有几台老旧的PLC,需要把里面的温度、压力数据读到电脑上做个简单的监控界面。一开始我琢磨着是不是得用组态软件,但预算有限,而且客户后期还想加一些自定义的数据分析功能。这时候,Python的优势就体现出来了。我花了大概一个下午的时间,用Python写了个简单的上位机程序,不仅成功读到了数据,还做了一个带实时曲线图的界面。整个过程比想象中顺畅得多,尤其是利用现成的库来处理Modbus协议,几乎没在通信协议本身花什么时间。

所谓上位机,在工业控制场景里,通常指的就是我们面前这台电脑上运行的软件,它负责跟现场的设备“对话”,把数据拿上来,展示给人看,或者把人的指令发下去,控制设备动作。Python来做这件事,最大的好处就是“快”。你不用去啃那些复杂的工业软件套件,也不用纠结于C++的指针和内存管理,几行清晰的代码就能建立起通信链路,特别适合快速验证想法、搭建原型,或者应对那些需求灵活多变的中小型项目。

如果你有Python基础,想把手伸向工业自动化或物联网数据采集领域,那么用Python开发上位机将是一个非常高效的切入点。这篇文章,我就以最经典的Modbus TCP通信为例,带你从零开始,一步步搭建一个能实际运行的上位机数据采集程序。我们会涵盖从环境搭建、协议理解、代码编写到界面构建的完整流程,并提供可直接运行的代码。你会发现,那些听起来很“工业”的东西,用Python来实现,也可以如此简单直接。

1. 环境准备与库的选择

工欲善其事,必先利其器。用Python开发上位机,第一步就是搭建一个顺手的环境。我个人强烈推荐使用 Anaconda 来管理Python环境,它能很好地处理不同项目间第三方库的版本冲突问题。当然,如果你习惯使用纯Python安装,配合 venv 创建虚拟环境也是完全可行的。

对于这个Modbus TCP上位机项目,我们主要需要两个核心库:

  1. pymodbus: 这是Python生态中功能最全面、最活跃的Modbus协议库。它同时支持Modbus TCP和RTU(串口),并且完美实现了客户端(主站)和服务器(从站)的功能。我们将用它来发起数据请求。
  2. PySide6: 用于构建图形用户界面(GUI)。选择PySide6而不是Tkinter,是因为它提供的控件更现代、功能更强大,布局管理也更灵活,能轻松做出接近专业工业软件风格的界面。它是Qt官方提供的Python绑定,完全免费商用。

你可以通过以下命令一次性安装所有必需的库:

# 使用pip安装
pip install pymodbus PySide6

# 如果你使用conda,可以先创建并激活一个环境
conda create -n scada python=3.10
conda activate scada
conda install pymodbus pyside6 -c conda-forge

安装完成后,可以通过一个简单的导入测试来验证:

import pymodbus.client as ModbusClient
from PySide6.QtWidgets import QApplication
print(“环境检查通过!”)

除了软件库,你还需要一个**Modbus TCP服务器(从站)**用于测试。有以下几种选择:

  • 硬件设备: 真实的PLC、传感器网关等。
  • 软件模拟器: 这是学习和开发阶段最方便的工具。推荐 Modbus Poll 的从站模拟功能,或者开源的 qModMaster。
  • Python模拟: 我们甚至可以用 pymodbus 库自己写一个简单的模拟服务器,这在后续调试时会非常有用。

为了让大家能无障碍地跟着操作,我将在后续章节中穿插一个用 pymodbus 创建简易测试服务器的代码块,这样你在一台电脑上就能完成客户端和服务的全部测试。

2. 理解Modbus TCP:五分钟协议精讲

在写代码之前,花五分钟理解一下Modbus TCP的基本原理,能让你在调试时胸有成竹,而不是盲目地试错。Modbus本质上是一种主从式(客户端/服务器) 的请求-响应协议。

核心通信模型:

  1. 客户端(上位机/主站): 主动发起请求,例如“请把1号保持寄存器地址40001的值发给我”。
  2. 服务器(下位机/从站): 被动响应请求,执行读/写操作,并回复结果或错误码。

在Modbus TCP中,这个对话过程被封装在了标准的TCP/IP数据包中。一个Modbus TCP报文主要包含两部分:

  • MBAP头(Modbus Application Protocol Header): 7个字节,包含事务标识符、协议标识符(Modbus固定为0)、长度字段和单元标识符(从站地址)。
  • PDU(Protocol Data Unit): 即Modbus协议本身的数据单元,包含功能码和请求/响应数据。

对我们开发者而言,pymodbus 库已经完美地处理了这些底层报文的组帧和解析。我们需要关心的,主要是以下几组核心概念:

概念 说明 对应功能码(常见) 在代码中的体现
线圈(Coils) 1位(比特)读写,通常表示开关量状态,如电机启停、报警位。 读:0x01;写:0x05, 0x0F read_coils, write_coil
离散输入(Discrete Inputs) 1位只读,通常表示只读的开关量输入,如限位开关状态。 读:0x02 read_discrete_inputs
保持寄存器(Holding Registers) 16位读写,最常用的数据区,存储温度、压力等模拟量数据或可修改参数。 读:0x03;写:0x06, 0x10 read_holding_registers, write_register
输入寄存器(Input Registers) 16位只读,通常存储只读的模拟量输入,如传感器实时值。 读:0x04 read_input_registers

注意: 很多设备厂商的文档中,会使用“4xxxx”、“3xxxx”这样的地址编号来指代寄存器。例如“地址40001”通常对应保持寄存器的地址0(在代码中起始地址填0)。务必仔细查阅你的设备手册,确认地址映射关系。

理解了这些,我们就可以用 pymodbus 来发起一次最简单的数据读取了。假设我们要从地址为 192.168.1.100,端口为 502 的从站设备上,读取其保持寄存器起始地址为0的连续10个寄存器值(即设备手册里的40001到40010)。

from pymodbus.client import ModbusTcpClient

# 1. 创建客户端并连接到服务器
client = ModbusTcpClient(host=‘192.168.1.100’, port=502)
connection = client.connect(
Python 上位机开发 首先,什么是上位机?上位机通常是指可以与下位机(如单片机、传感器等硬件设备)进行通信和交互,实现数据采集、控制指令发送以及数据处理和展示的计算机程序。 Python 作为一种高级编程语言,在开发上位机方面具有诸多优势。它拥有丰富的第三方库,使得开发过程变得相对简单和高效。 阅读详情

相关推荐

pyqt开发上位机

熟悉QT的朋友都知道,Qt做出来的界面好看,功能特别强大。但是学习Qt的成本时比较高的,C++的语法点特别多,特别是对做电气人员来说,门槛比较高。好在python对Qt进行了全部封装,python的易学性和Qt的强大联合,使得门槛大大降低。任何一个技术学三两个月的能学会的肯定不值钱,绝大部分人与人之间的智商差距很小,关键看谁能坚持的久。这就是提的MVC模式,M代表模型,比如你需要处理数据,或通信部分,可以创建一个类,专门处理这些数据,到时把这个类实例化一个对象放在逻辑层里调用。如果项目小的化不用也无所谓。

weixin_49577420的博客 1434

5分钟搞定Modbus CRC校验——用Python脚本替代在线计算器的自动化方案

本文针对现场调试中依赖在线CRC计算器的痛点,提供了一套基于Python的本地化Modbus CRC校验自动化方案。通过crcmod库,工程师可快速构建离线、高效、可集成的CRC计算工具,实现微秒级计算并支持批处理与脚本集成,彻底摆脱网络依赖,提升工控调试效率。

weixin_29162439的博客 258

系统学习上位机软件开发的第一步操作指南

从零开始搭建开发环境、选择合适语言与通信协议,是迈入上位机软件开发的关键起点。掌握串口通信、Modbus协议等核心技能,能快速实现下位机数据采集与可视化控制,为后续工业自动化项目打下坚实基础。

weixin_33375360的博客 297

C#工业上位机开发实战:通信协议、线程调度与数据可信

上位机开发本质是构建工业现场的数据管道,核心在于实现设备通信、实时采集与可靠呈现。它涉及Modbus/S7等工业协议解析、多线程与UI调度协同、高精度时间戳与数据溯源等关键技术。C#凭借.NET Framework在工控环境的深度兼容性(如Win7/XP支持)、WPF硬件加速渲染能力及丰富工业库生态,成为中小制造企业产线监控系统的主流选择。面对‘c#循环数据采集和ui刷新卡顿’‘c#扫码枪触发事件丢包’等高频痛点,需跳出语法教学,聚焦协议适配、线程安全缓冲、Stopwatch时间基准、异常隔离等工程实践。本

weixin_34238633的博客 309

Modbus TCP调试实战:用ModbusPoll和ModbusSlave定位通信失败根源

Modbus TCP是一种将传统Modbus帧封装于TCP/IP之上的工业通信协议,其可靠性依赖网络层连接、应用层功能码解析与寄存器地址映射三重协同。理解TCP三次握手、MBAP报文结构及字节序(Big/Little Endian)等底层原理,是解决‘连不上’‘读错数’‘写无效’等高频问题的技术前提。ModbusPoll作为标准客户端工具,用于主动发起请求并验证响应;ModbusSlave作为可配置仿真服务器,支持自定义寄存器数量、响应延迟与写入权限,构成闭环调试能力。该组合广泛应用于PLC协议验证、HMI

weixin_34409357的博客 354

C# WPF半导体上位机实战:晶圆搬运控制中枢设计

上位机系统是工业自动化与智能制造的核心枢纽,其本质是连接PLC、传感器、视觉设备与MES的实时数据中台。在高精度、高可靠性的半导体产线场景中,WPF凭借独立渲染线程与矢量图形能力,显著优于WinForms的GDI+瓶颈;C#则依托.NET原生集成性与强类型安全,支撑Modbus RTU、WebSocket、OpenCVSharp等多协议混合通信。技术价值体现在毫秒级UI响应、跨线程安全调度、单文件部署及SIL2级联锁保障。典型应用于晶圆搬运、光刻胶涂布、封装测试等洁净车间设备控制。本文聚焦C# WPF在真实

weixin_34327761的博客 180

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3586

S7-200 Smart 控制运动轴(脉冲电机/伺服)教程

S7-200 Smart 控制运动轴(脉冲电机/伺服) 结合本人刚接触触摸屏时候的踩坑经验,编写S7-200 Smart 控制运动轴(脉冲电机/伺服)的详细流程,给刚接触PLC的朋友提供一些经验指导。 本文详细介绍了S7-200 Smart 控制脉冲步进/伺服电机流程,包含接线方法及梯形图。希望对初学者有所帮助

xjbsw0的博客 5万+

手把手教你用Multisim 14.2仿真一个4.4V的LDO电路(附完整仿真文件)

本文详细介绍了如何使用Multisim 14.2仿真一个4.4V的LDO电路,从环境配置、核心参数解析到电路搭建和仿真调试。通过分压电阻精确计算和瞬态响应测试,帮助读者掌握LDO电路的设计与验证技巧,并附有完整仿真文件供参考。

weixin_28738397的博客 275

C语言—for循环打印矩形,正三角形,倒三角形,九九乘法,等腰三角形,倒着的等腰三角形(简易版代码)(重点考察for循环嵌套)

本章节教大家如何利用for循环打印正三角形,倒三角形,九九乘法表及等腰三角形(简易版代码)说明:1、循环语句的循环体内又包含另一个完整的循环结构,称为循环结构的嵌套。内嵌的循环语句中还可以再嵌套循环结构,这样就形成多重循环结构的嵌套。2、for 语句、while 语句和 do-while 语句都允许嵌套。三种循环语句可以相互嵌套。3、内层的循环语句必须完全被包含在外层的循环体中,不能发生交叉。

m0_63501145的博客 1695

BPMN-JS :修改节点“Change Type”事件类型

修改路径:node_modules\bpmn-js\lib\features\replace\ReplaceOptions.js。

TaylorY的博客 679

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现

设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN-

weixin_42300449的博客 304

Fabric V2.5 通用溯源系统——使用Hyperledger Caliper压力测试

Caliper是一款测试区块链性能的工具,支持Hyperledger Fabric、Ethereum等,支持丰富的测试配置参数,测试完成后将直接输出报告,相较于tape更加专业,但是配置稍微有些复杂。本文将一步一步配置Caliper以测试Fabric V2.5 通用溯源系统中的注册用户、查询用户、农产品上链、农产品查询的区块链性能。

TrueTechLabs 官方博客 1396

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Git分支删除的隐藏技巧:为什么你的git push origin :branch_name依然失败?
下一篇: Visual Studio 2022配置SFML 2.6.1避坑指南:从下载到运行的全流程解析
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值