# 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") ```