Joshi 466f10db2f fix: 修正PDI表查询使用完整表名PLTM.PDI_PLTM
feat(api): 新增钢种查询接口和下一编号获取接口
2026-04-09 16:05:51 +08:00

HEFA-L2 PDI 管理系统

基于 FastAPI + Oracle + OPC-UA + Vue2 的生产计划数据管理平台。

功能说明

模块 说明
PDI 计划管理 PDI_PLTM 表进行增删改查,支持分页、筛选
跟踪图监控 实时展示 CMPT_PL_TRACKMAP OPC 采集数据,每 3 秒刷新
OPC 配置 可视化配置 OPC-UA 服务器地址、计数器节点、节点映射

目录结构

HEFA-L2/
├── backend/
│   ├── main.py          # FastAPI 路由
│   ├── database.py      # Oracle 连接
│   ├── models.py        # Pydantic 模型
│   ├── opc_service.py   # OPC-UA 轮询服务
│   ├── requirements.txt
│   └── .env.example     # 环境变量模板
└── frontend/
    ├── src/
    │   ├── main.js
    │   ├── router.js
    │   ├── App.vue
    │   ├── api/index.js
    │   └── views/
    │       ├── PdiList.vue    # PDI CRUD
    │       ├── TrackMap.vue   # OPC 跟踪图
    │       └── OpcConfig.vue  # OPC 配置
    ├── package.json
    └── vue.config.js

快速启动

1. 后端

cd backend

# 复制并填写环境变量
copy .env.example .env
# 编辑 .env填入 Oracle 连接信息和 OPC 地址

# 安装依赖(需要先安装 Oracle Instant Client
pip install -r requirements.txt

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

2. 前端

cd frontend

npm install
npm run serve
# 访问 http://localhost:8080

环境变量说明 (.env)

变量 说明 示例
ORACLE_DSN Oracle 数据源 192.168.1.10:1521/ORCL
ORACLE_USER 用户名 pltm
ORACLE_PASSWORD 密码 your_password
OPC_URL OPC-UA 服务器地址 opc.tcp://192.168.1.100:4840
OPC_COUNTER_NODE 计数器节点 ID ns=2;s=PL.TRACKMAP.COUNTER
OPC_POLL_INTERVAL 轮询间隔(秒) 2
OPC_NODE_position 位置节点映射 ns=2;s=PL.TRACKMAP.POSITION
OPC_NODE_coilid 卷号节点映射 ns=2;s=PL.TRACKMAP.COILID

OPC 采集逻辑

  1. 后端启动时自动开始轮询 OPC-UA 服务器
  2. 每隔 OPC_POLL_INTERVAL 秒读取 OPC_COUNTER_NODE 节点值
  3. 当 counter 值发生变化时,读取所有在 trackmap_nodes 中配置的节点
  4. 根据 position 字段更新 Oracle PLTM.CMPT_PL_TRACKMAP 对应行
  5. 所有操作写入事件日志可在「OPC 配置」和「跟踪图监控」页面查看

OPC 节点映射配置方式

方式一:通过 .env 文件

OPC_NODE_position=ns=2;s=PL.TRACKMAP.POSITION
OPC_NODE_coilid=ns=2;s=PL.TRACKMAP.COILID
OPC_NODE_bef_es=ns=2;s=PL.TRACKMAP.BEF_ES
OPC_NODE_es=ns=2;s=PL.TRACKMAP.ES
OPC_NODE_ent_loo=ns=2;s=PL.TRACKMAP.ENT_LOO
OPC_NODE_pl=ns=2;s=PL.TRACKMAP.PL
OPC_NODE_int_loo=ns=2;s=PL.TRACKMAP.INT_LOO
OPC_NODE_st=ns=2;s=PL.TRACKMAP.ST
OPC_NODE_exi_loo=ns=2;s=PL.TRACKMAP.EXI_LOO
OPC_NODE_run_speed_min=ns=2;s=PL.TRACKMAP.RUN_SPEED_MIN
OPC_NODE_run_speed_max=ns=2;s=PL.TRACKMAP.RUN_SPEED_MAX

方式二通过前端「OPC 配置」页面
在界面上添加列名→节点ID映射保存后立即生效。

Oracle Instant Client 安装

安装后设置环境变量或在代码中初始化:

import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_21_x")
Description
河南信阳
Readme 346 KiB
Languages
Python 60.2%
Vue 36.9%
JavaScript 1.8%
Batchfile 0.9%
HTML 0.2%