Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于单路流量的积分分离PID实时控制系统设计

中南大学 · 过程控制系统课程设计
自动化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)

控制器设计详解

增量式 PID

$$ \Delta u(k) = K_p \cdot \Delta e(k) + K_i \cdot e(k) \cdot dt + K_d \cdot \frac{\Delta^2 e(k)}{dt} $$

增量输出的累积形式保证了无扰动切换(手动 ↔ 自动),且输出自然限幅于 $[-\text{trim_limit}, +\text{trim_limit}]$。

分段 PID 策略

误差范围 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× 微调段:保守比例,全力积分

变速积分

$$ f(|e|) = \begin{cases} 0, & |e| \geq \beta \\ \dfrac{\beta - |e|}{\beta}, & |e| < \beta \end{cases} $$

积分有效系数 $f \in [0, 1]$ 连续变化,误差大时积分暂停以防超调,误差小时积分全量投入以消除静差。

前馈 + Trim 结构

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 变化率 阀门指令的变化速率,反映执行器负担

许可证

本项目仅供课程设计教学使用。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages