wangyu f5c59db92b feat(prediction): 三层校准体系 + 按钢种分组 + 数据飞轮
1. 按钢种分组 K_cal:cal_coeffs.json 升级为嵌套结构,
   {kcal: {model: {_default, Q235, ...}}, phys: {...}},
   旧平铺格式首次加载时自动迁移。

2. 物理参数自适应:EA_R/K0/N_CONC 按钢种网格拟合
   (7×5×3=105 组合),每次校准追加样本到
   production_samples.jsonl,≥10 条后自动触发拟合。

3. 数据飞轮:新增 POST /retrain 端点,后台子进程跑
   train_models.py --use-real-data 混入实绩重训
   (10× 权重),完成后 ONNX 热重载,无需重启服务。

新增端点:
  GET  /calibration/samples         样本数统计
  GET  /calibration/phys-params     物理参数查询
  POST /calibration/fit-phys/{key}  手动触发物理参数拟合
  POST /retrain                     启动重训
  GET  /retrain/status              重训进度

模型类签名变更:
  TensionModel / QualityPredictionModel 新增 steel_grade 参数
  AcidConsumptionModel 新增 fe_conc_avg 参数

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 16:13:39 +08:00

推拉酸洗线 L2 过程控制系统

基于 FastAPI + Vue 2 的推拉酸洗线二级过程控制系统,实现物料跟踪、实绩管理、计划管理、停机管理、设备管理、工艺预测等功能。


技术栈

技术
后端 Python 3.11+FastAPISQLAlchemy 2asyncasyncpg
数据库 PostgreSQL 16
缓存 Redis 7
前端 Vue 2.7Element UIAxios
L1通信 UDPasyncio DatagramProtocol监听 9000 端口

目录结构

pickling-mes/
├── backend/
│   ├── app/
│   │   ├── api/          # 路由(各模块接口)
│   │   ├── models/       # SQLAlchemy 数据模型
│   │   ├── services/     # 业务逻辑UDP解析、预测模型
│   │   ├── config.py     # 配置(环境变量)
│   │   ├── database.py   # 数据库连接
│   │   └── main.py       # 入口
│   ├── tests/
│   │   └── test_udp_sender.py  # UDP报文模拟测试工具
│   └── requirements.txt
├── frontend/
│   ├── src/
│   │   ├── views/        # 页面组件
│   │   ├── api/          # 接口调用
│   │   ├── store/        # Vuex认证
│   │   └── router/       # 路由
│   └── package.json
├── docs/                 # 接口文档
└── docker-compose.yml

启动方式

方式一Docker Compose推荐

前置条件:已安装 Docker Desktop

cd pickling-mes
docker-compose up -d

启动后访问:

停止:

docker-compose down

方式二:本地开发启动

前置条件Python 3.11+Node.js 18+PostgreSQL 16Redis 7

1. 准备数据库

# 启动 PostgreSQL 和 Redis也可用 Docker 只起这两个服务)
docker-compose up -d postgres redis

2. 启动后端

cd backend

# 安装依赖
pip install -r requirements.txt

# 配置环境变量(可选,默认值已可用于本地开发)
cp .env.example .env   # 如有需要修改数据库连接

# 启动
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

后端启动时会自动:

  • 建表init_db
  • 创建默认 admin 账号admin / admin123
  • 启动 UDP 监听服务0.0.0.0:9000

3. 启动前端

cd frontend

# 安装依赖
npm install

# 开发模式启动
npm run serve

访问 http://localhost:8080


环境变量说明

backend/.env 中配置(不存在则使用下列默认值):

变量 默认值 说明
DATABASE_URL postgresql+asyncpg://postgres:password@localhost:5432/pickling_mes 数据库连接async
DATABASE_SYNC_URL postgresql://postgres:password@localhost:5432/pickling_mes 数据库连接同步Alembic用
REDIS_URL redis://localhost:6379/0 Redis 连接
SECRET_KEY dev-secret-key JWT 签名密钥,生产环境必须修改
L1_HOST 0.0.0.0 UDP 监听地址
L1_PORT 9000 UDP 监听端口L1 PLC 向此端口发送报文)
ACCESS_TOKEN_EXPIRE_MINUTES 480 Token 有效期(分钟)

L1 通信UDP

系统启动后自动监听 UDP 0.0.0.0:9000,接收 L1 PLC 推送的报文。

已实现的报文类型Body 格式待 PLC 方协议文档确认后适配):

报文 ID 含义 触发时机
PC01 卷材入口 带钢上线时
PC02 卷材出口 带钢下线时
PC03 过程数据 周期推送2s
PC04 质量缺陷 缺陷检出时
PC05 设备状态 状态变化时
PC20 心跳 每 10s

模拟测试(无 PLC 时验证 UDP 通信):

cd backend
python tests/test_udp_sender.py
# 默认向 127.0.0.1:9000 发送 PC20/PC01/PC03/PC02 测试帧

预测模型

后端内置 4 个基于物理公式的工艺预测模型,无需训练数据即可运行:

模型 接口 说明
酸洗速度 POST /prediction/acid-speed 基于 Arrhenius 动力学,输出最大允许速度
张力设定 POST /prediction/tension 基于截面积×屈服强度,输出各区张力
质量预测 POST /prediction/quality 输出质量等级A1~C及改进建议
消耗预测 POST /prediction/consumption 输出单卷酸、蒸汽、电、水消耗量

接口参数详见:http://localhost:8000/docs


主要功能模块

路径 模块
/dashboard 生产看板(实时指标、趋势图)
/material 物料跟踪(卷材全流程跟踪)
/production 实绩管理
/plan 计划管理
/downtime 停机管理
/equipment 设备管理
/message 报文监控UDP收发日志
/process-model 工艺段模型(酸洗速度预测)
/tension-model 张力设定
/pdi PDI 管理L3 下发→L2 确认)
/quality 质量管理
/capacity 产能分析
Description
推拉酸洗线 MES 系统
Readme 6.3 MiB
Languages
Vue 41.8%
Python 33.1%
HTML 20.9%
JavaScript 2.1%
SCSS 2%