# 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/ # 本地调试与诊断工具 ``` ## 环境要求 ```bash ``` ## 运行 ```bash 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 完成,不由客户端工具执行。