# ReinLoop ReinLoop 是一套面向压力控制、容积测量和系统辨识的完整系统,由以下三个部分组成: - **ReinLoop 客户端**:基于 Modbus 的 Python GUI,提供 PID、强化学习和手动控制,并执行容积测量与系统辨识。 - **ControlPanel**:Electron B 端工作台,用于组织、许可证、模型、配置、辨识数据和控制数据管理。 - **Server**:Node.js 服务,负责文件中转、配置发布、辨识反馈、许可证与元数据持久化。 接口、权限边界、请求字段和响应格式统一维护在 [server/features.md](server/features.md)。 ## 仓库结构 ``` ReinLoop/ ├── ReinLoop/ # Python 控制客户端与 GUI ├── ControlPanel/ # Electron B 端工作台 ├── server/ # Node.js / Express 服务 ├── changelog.md # 变更记录 └── toserver.md # 服务端待办与协议说明 ``` ## 核心流程 ### 压力控制、容积测量与辨识 ReinLoop 客户端通过 Modbus TCP 连接 MT2-AM8 模块,支持 PID、强化学习和手动控制。容积测量采用一次性配置请求:A 端发起请求,B 端提交经校验的配置后,A 端读取并执行测量。 系统辨识由 B 端发布参数,A 端上传稳定压力 JSON 与辨识 CSV。ControlPanel 下载并绘图后由操作者评审:结果为 `1` 时结束本轮辨识;结果为 `0` 时必须先发布一套新参数,A 端读取后重新辨识。 ### 组织、许可证与模型 设备 ID 固定为 `/`,公司、产线、模型目录、配置发布、绘图收件箱和辨识反馈均使用该 ID。ControlPanel 支持: - 新增公司与产线,并显示基于服务端心跳的在线状态; - 签发、登记、查看、下载和撤销 RSA-PSS 许可证;私钥只在操作者本地使用; - 按产线上传、下载、删除模型及管理控制数据; - 发布容积测量和系统辨识配置,处理辨识数据与人工反馈。 ## 快速开始 ### Server 要求 Node.js 20 或更高版本。 ```powershell cd server npm install $env:B_ADMIN_TOKEN="your-admin-token" npm start ``` 默认服务地址为 `http://127.0.0.1:3000`,健康检查为 `http://127.0.0.1:3000/health`。业务请求统一使用根路径。跨设备部署时,应使用服务器局域网 IP 或 HTTPS 域名,而不是 `127.0.0.1`。 ### ControlPanel ```powershell cd ControlPanel npm install $env:REINLOOP_API_URL="http://server-address:3000" $env:B_ADMIN_TOKEN="your-admin-token" npm run gui ``` 也可在界面顶部输入 Server URL 和管理令牌;令牌只由 Electron 主进程使用,不会保存到浏览器存储或配置文件。Windows 打包使用 `npm run pack:win`,产物位于仓库根目录的 `Build` 文件夹。 ### ReinLoop 客户端 安装 Python 依赖后,在 `ReinLoop` 目录运行: ```bash python main.py ``` 客户端服务地址和设备目录由 `api.py` 配置。控制数据、辨识数据和容积测量结果经 Server 上传;许可证、模型、公司和产线操作由 ControlPanel 完成。 #### 无硬件模拟模式 需要在不连接 MT2-AM8、PLC 或串口电机的情况下测试控制流程时,在启动客户端前设置: ```powershell $env:REINLOOP_SIMULATION="1" python main.py ``` 该模式使用内存中的压力、流量和阀门模型,不创建真实 TCP/串口连接。默认值为空,客户端仍使用真实 Modbus 硬件路径。旧版 `tool/gui.py`、`get_V.py` 和 `ind_collector.py` 也支持同一环境变量。 恢复真实硬件模式: ```powershell Remove-Item Env:REINLOOP_SIMULATION python main.py ``` ## 部署与数据 - 新生产环境使用 PostgreSQL:设置 `NODE_ENV=production` 与 `DATABASE_URL`;迁移可通过 `npm run migrate` 重复执行。 - 设置高熵 `B_ADMIN_TOKEN`、`LICENSE_PUBLIC_KEY_PATH`、`PUBLIC_BASE_URL`、`HOST`、`PORT` 和可选的 `DATA_DIR`。 - 生产环境应使用 HTTPS,并定期备份 PostgreSQL 与完整 `DATA_DIR`;不得提交、上传或保存 RSA 私钥。 - 模型存于 `data/models///`;其他文件由 `DATA_DIR` 管理。已处理辨识文件默认保留 30 天后清理。 - 非模型文件下载需要服务端签发的短期凭证;直接拼接文件地址会被拒绝。 外部访问出现 `502 Bad Gateway` 时,先检查 `http://127.0.0.1:3000/health`,再检查反向代理上游地址、端口和服务日志。 ## 验证 ```powershell cd server npm run check npm test ``` ## 已知事项 - 稳定压力数组 JSON 的最终结构、两套参数的正式默认值、单位与范围仍需产品或算法确认。 - 图像是否通过目前由人工判断,尚未提供自动判定阈值或算法。 - Electron 的第三方构建依赖存在已知安全告警;未执行可能造成破坏性升级的 `npm audit fix --force`。