Files
ReinLoopTest/README.md
T
2026-07-31 11:29:10 +08:00

116 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 固定为 `<company-code>/<line-code>`,公司、产线、模型目录、配置发布、绘图收件箱和辨识反馈均使用该 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`。业务请求可使用根路径或 `/api`。跨设备部署时,应使用服务器局域网 IP 或 HTTPS 域名,而不是 `127.0.0.1`
### ControlPanel
```powershell
cd ControlPanel
npm install
$env:REINLOOP_API_URL="http://server-address:3000/api"
$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/<company-code>/<line-code>/`;其他文件由 `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`