中南大学 · 过程控制系统课程设计
自动化T2301 · 张博豪
本项目设计并实现了一套基于 单路流量 的 积分分离 PID 实时控制系统,用于对实验室单管路流量对象进行闭环自动控制。系统通过 Modbus-RTU 协议与 NHR5300 智能仪表通信,在上位机(PC)中完成 PID 运算与控制逻辑,输出阀门开度指令以实现流量稳定跟踪目标设定值。
系统集成了增量式 PID、分段 PID、变速积分、前馈补偿、抗积分饱和等多种先进控制策略,并提供了完整的图形化人机交互界面,支持参数在线调整、实时趋势曲线、自动整定、报警监控和性能指标评估等功能。
| 策略 | 说明 |
|---|---|
| 增量式 PID | 以控制增量 Δu 为输出,天然抗积分饱和,无冲击切换 |
| 分段 PID(4段) | 根据误差大小自动切换增益:大误差大胆调节,小误差精细修正 |
| 变速积分 | 积分系数随误差减小而平滑增大,避免积分分离的硬切换突跳 |
| 前馈补偿 | 基于阀门标定曲线,从 SP 直接计算前馈开度,PID 仅输出微调 trim |
| MV 限速 | 限制阀门每步最大变化量,防止执行机构冲击 |
| SP 缓变 | 自动模式下设定值缓变过渡,避免阶跃冲击 |
| 抗积分饱和 | 增量式结构 + 输出限幅,确保积分项不会无限累加 |
- 深色主题(PyOneDark 风格),工业级视觉体验
- 左侧参数面板:实时数据卡片、PID 参数设定、控制模式切换、自整定按钮
- 右侧实时趋势曲线:PV/SP/MV 三条曲线,支持缩放、平移、暂停、数据导出
- 工艺流程动画:动态显示 PID 控制回路中的信号流向与阀门动作
- 工艺实拍图展示
- 报警与事件日志系统
- 阶跃性能指标实时计算(IAE、超调量、调节时间)
- 阶跃响应试验 → FOPTD 模型辨识(K, T, τ)
- Ziegler-Nichols PID 参数整定
- 一键执行,自动恢复安全状态
┌─────────────────────────────────────────────────────────────────┐
│ 上位机(PC) │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ main.py │───▶│ MainConsole │───▶│ pyqtgraph 曲线 │ │
│ │ 主窗口 │ │ 主控制台 │ │ 实时趋势图 │ │
│ └────┬─────┘ └──────┬───────┘ └──────────────────────┘ │
│ │ │ │
│ ┌────▼─────────────────▼───────────────────────────────────┐ │
│ │ ControlLoop(QThread) │ │
│ │ 采样 → 分段PID计算 → 前馈+trim → MV限速 → 输出 → 记录 │ │
│ └────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ┌────────────────────────▼──────────────────────────────────┐ │
│ │ NHR5300Client(Modbus-RTU) │ │
│ │ COM11 · 9600 · 8N1 · Slave ID: 2 │ │
│ └────────────────────────┬──────────────────────────────────┘ │
└───────────────────────────┼──────────────────────────────────────┘
│ RS-485
┌───────────────────────────▼──────────────────────────────────────┐
│ 下位机(NHR5300 智能仪表) │
│ 电动调节阀 · 电磁流量计 │
└──────────────────────────────────────────────────────────────────┘
| 模块 | 路径 | 职责 |
|---|---|---|
| 主入口 | code/main.py |
应用启动、窗口布局、信号连接、控制循环管理 |
| PID 控制器 | code/core/pid_controller.py |
增量式 + 分段 + 变速积分 PID 运算核心 |
| 控制循环 | code/core/control_loop.py |
QThread 后台线程:采样 → 控制 → 报警 → 日志 |
| Modbus 通信 | code/core/modbus_client.py |
NHR5300 仪表 Modbus-RTU 读写封装 |
| 自动整定 | code/core/auto_tuner.py |
阶跃响应 → FOPTD 辨识 → ZN 整定 |
| 流量模型 | code/core/flow_model.py |
阀门标定曲线、前馈映射、MV 限速 |
| 主控制台 | code/ui/main_console.py |
统一 GUI:参数面板 + 趋势曲线 + 流程动画 |
| 控制页面 | code/pages/control_page.py |
PID 参数与模式设定的独立页面 |
| 曲线页面 | code/pages/curve_page.py |
实时趋势曲线的独立页面 |
| 监控页面 | code/pages/monitor_page.py |
工艺流程监控与数据显示页面 |
- Python 3.9+
- 串口(用于连接 NHR5300 仪表)
cd code
pip install PySide6 pyqtgraph pymodbus numpy核心依赖:
PySide6— Qt GUI 框架pyqtgraph— 高性能实时曲线绘制pymodbus— Modbus-RTU 串口通信numpy— 数值计算
cd code
python main.py默认通信参数(在 code/main.py 中配置):
- 端口: COM11
- 波特率: 9600
- 从站地址: 2
- 字节序: 3412(word-swap)
增量输出的累积形式保证了无扰动切换(手动 ↔ 自动),且输出自然限幅于
| 误差范围 | Kp 增益倍率 | Ki 增益倍率 | 行为描述 |
|---|---|---|---|
| |e| ≥ 20 | 0.8× | 0.4× | 大误差:比例为主,弱积分避免打满 |
| |e| ≥ 8 | 1.0× | 0.55× | 中等误差:标准比例,适度积分 |
| |e| ≥ 2 | 0.75× | 1.15× | 小误差:降低比例,增强积分消除静差 |
| |e| < 2 | 0.45× | 1.80× | 微调段:保守比例,全力积分 |
积分有效系数
MV = Feedforward(SP) + PID_trim
Feedforward 根据阀门标定曲线直接算出 SP 对应的开度,PID 仅输出 ±10% 的微调量,大幅减轻控制器负担。
经实测标定的阀门特性(流量 vs 阀门开度):
| 阀门开度 | 流量(L/min) |
|---|---|
| 40% | 0.0 |
| 44% | 4.6 |
| 50% | 13.6 |
| 56% | 25.0 |
| 60% | 33.4 |
| 67.6% | 50.0 |
| 71.8% | 60.0 |
| 80% | 68.0 |
| 90% | 75.4 |
| 100% | 78.9 |
├── README.md # 本文件
├── doc/ # 课程设计文档
│ └── 课程设计报告.md # 设计报告
├── code/ # 源代码
│ ├── main.py # 应用主入口
│ ├── qt_core.py # PySide6 核心导入封装
│ ├── tune_pid.py # PID 参数离线整定脚本
│ ├── step_response_test.py # 阶跃响应测试脚本
│ ├── monitor_flow.py # 流量监控脚本
│ ├── test_communication.py # Modbus 通信测试
│ ├── test_pid_simulation.py # PID 仿真测试
│ ├── test_auto_tracking.py # 自动跟踪测试
│ ├── test_safety_regression.py # 安全回归测试
│ ├── core/ # 核心控制模块
│ │ ├── pid_controller.py # 增量式分段 PID 控制器
│ │ ├── control_loop.py # 控制循环线程
│ │ ├── modbus_client.py # Modbus-RTU 通信
│ │ ├── auto_tuner.py # PID 一键自动整定
│ │ └── flow_model.py # 流量对象标定模型
│ ├── ui/ # 用户界面
│ │ └── main_console.py # 统一主控制台 UI
│ ├── pages/ # 独立页面
│ │ ├── control_page.py # 控制参数页面
│ │ ├── curve_page.py # 实时曲线页面
│ │ └── monitor_page.py # 工艺监控页面
│ ├── gui/ # GUI 框架组件(基于 PyOneDark)
│ │ ├── core/ # 核心功能
│ │ ├── images/ # SVG 图标资源
│ │ ├── themes/ # 主题配置
│ │ ├── uis/ # 界面组件
│ │ └── widgets/ # 自定义控件
│ └── icon.ico # 应用程序图标
控制系统的实时性能通过以下指标评估(在主界面左侧面板实时显示):
| 指标 | 说明 |
|---|---|
| 实时误差 | 当前 SP - PV 偏差值 |
| IAE 累计 | 积分绝对误差,反映整体控制品质 |
| 最大超调 | 阶跃响应中 PV 超出 SP 的最大值 |
| 调节时间 | 进入 ±2% 误差带并保持的时间 |
| MV 变化率 | 阀门指令的变化速率,反映执行器负担 |
本项目仅供课程设计教学使用。