feat: 初始化HEFA-L2 PDI管理系统项目
添加前端Vue2项目结构,包括ElementUI集成、路由配置和API模块 实现后端FastAPI服务,包含Oracle数据库连接和PDI CRUD接口 添加OPC-UA轮询服务,支持跟踪图数据同步到Oracle 提供SQLite镜像数据库用于本地开发和快速查询 包含完整的部署脚本和文档说明
This commit is contained in:
114
README.md
Normal file
114
README.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# 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")
|
||||
```
|
||||
Reference in New Issue
Block a user