Files
tiandihe/README.md
Joshi d8b142bb4a feat: 初始化HEFA-L2 PDI管理系统项目
添加前端Vue2项目结构,包括ElementUI集成、路由配置和API模块
实现后端FastAPI服务,包含Oracle数据库连接和PDI CRUD接口
添加OPC-UA轮询服务,支持跟踪图数据同步到Oracle
提供SQLite镜像数据库用于本地开发和快速查询
包含完整的部署脚本和文档说明
2026-04-09 16:05:20 +08:00

115 lines
3.4 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.

# 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. 后端
```bash
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. 前端
```bash
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 安装
安装后设置环境变量或在代码中初始化:
```python
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_21_x")
```