116 lines
4.9 KiB
Markdown
116 lines
4.9 KiB
Markdown
# 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`。业务请求统一使用根路径。跨设备部署时,应使用服务器局域网 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/<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`。
|