3.9 KiB
3.9 KiB
ReinLoop V1.0 — 收敛有界
基于 Modbus 通讯的压力控制 GUI,支持 PID / 强化学习 / 手动三种控制模式。
项目结构
pressure_control_gui/
├── main.py # 应用入口
├── PcControl.py # Modbus 通讯类
│ # MT2AM8Client - MT2-AM8 模块 TCP(AI 读压力/流量,AO 写电机)
│ # Easy521ModbusClient - PLC TCP(读压力/流量,备用)
│ # MotorModbusRTUClient - 电机 RTU(直接写位置,备用)
│ # PressureModbusRTUClient - 压力变送器 RTU(备用)
├── controllers.py # 增量式 PID 控制器
├── api.py # Express Server API 配置
├── styles.py # 全局 QSS 样式表
├── ind_collector.py # PRBS 辨识数据采集
├── get_V.py # 容积测量
├── license_utils.py # 许可证签发与校验
├── core/
│ ├── control_engine.py # 控制主循环(PID / RL / 手动),含 EMA 压力滤波
│ ├── connection_manager.py# 连接管理器(封装 MT2AM8Client)
│ ├── model_manager.py # RL 模型管理
│ ├── data_collector.py # 数据采集与云服务器上传
│ └── identification.py # 系统辨识与容积测量管理
├── ui/
│ ├── main_window.py # 主窗口(布局与信号槽绑定)
│ ├── connection_tab.py # 连接设置页(Modbus TCP)
│ ├── control_tab.py # 控制设置页
│ ├── debug_tab.py # 模型调试页(高级参数:死区/限幅/模拟量映射)
│ ├── status_bar.py # 底部状态栏
│ └── plot_window.py # 数据绘图窗口
├── src/ # SVG 图标资产
├── model_config/ # RL 模型配置文件
├── ind_data/ # 辨识数据本地输出目录
└── tool/ # 本地调试与诊断工具
环境要求
运行
python main.py
控制模式
| 模式 | 说明 |
|---|---|
| PID | 增量式 PID,参数可在线调整,死区/限幅可配置 |
| RL | 强化学习模型实时预测 Kp/Ki,需先加载模型 |
| 手动 | 直接设定阀门开度百分比 |
控制周期由 PID 的 dt 参数决定(默认 0.1s),QTimer 驱动主线程执行,每周期末自动 sleep 补足时长保证精确周期。
硬件连接
GUI 主程序使用 MT2-AM8 模拟量模块(艾莫迅),通过 Modbus TCP 统一 IO:
- MT2-AM8 模块:Modbus TCP,默认
192.168.1.12:502,模块地址 1- AI(输入寄存器 0x00~0x03):读压力传感器(4-20mA → 0-4095 → kPa)、读流量计
- AO(保持寄存器 0x00~0x03):写电机伺服驱动器(0-10V 模拟量控制行程)
- 模拟量映射范围、压力/流量量程可在界面中配置
PcControl.py 中其他可用通讯类
以下类在 GUI 主循环中未直接使用,但可供独立脚本(如 get_V.py 的 main())或调试调用:
| 类 | 协议 | 默认参数 | 用途 |
|---|---|---|---|
Easy521ModbusClient |
Modbus TCP | 192.168.1.88:502 |
读 PLC 压力寄存器 504(32-bit float)、写线圈控制 |
MotorModbusRTUClient |
Modbus RTU | /dev/cu.usbserial-BG02B0IX,站号 4,115200 |
通过 RS-485 直接读写电机驱动器寄存器 |
PressureModbusRTUClient |
Modbus RTU | /dev/cu.usbserial-D30JITMY,站号 1,9600 |
读压力变送器保持寄存器(备用) |
数据上传
控制数据(Episode)、辨识数据和容积测量结果通过 Express Server 的上传接口保存,
服务地址与设备目录配置在 api.py。许可证、模型和公司/产线等管理操作由
ControlPanel 完成,不由客户端工具执行。