From 1e41834e469c07a6ea4b7c06625a3661433db976 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 30 Apr 2026 13:12:32 +0800 Subject: [PATCH] =?UTF-8?q?refactor(opc):=20=E7=A7=BB=E9=99=A4=E4=BF=A1?= =?UTF-8?q?=E5=8F=B71=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除前端信号1配置项、后端信号1处理逻辑及相关API 更新OPC配置节点信息及启动脚本conda初始化 --- .gitignore | 5 ---- backend/.env | 11 +++++++++ backend/main.py | 8 +------ backend/opc_config.json | 40 +++++++++++++++++++++++++------- backend/opc_service.py | 12 ++++------ frontend/src/views/OpcConfig.vue | 4 ---- start_tdh.bat | 11 ++++++++- 7 files changed, 59 insertions(+), 32 deletions(-) create mode 100644 backend/.env diff --git a/.gitignore b/.gitignore index 1773501..3756d11 100644 --- a/.gitignore +++ b/.gitignore @@ -21,16 +21,11 @@ __pycache__/ *$py.class # 虚拟环境 -.env/ .venv/ -env/ venv/ ENV/ # 环境变量文件 (包含敏感信息) -.env -.env.local -.env.*.local # 数据库文件 (SQLite 本地缓存) *.db diff --git a/backend/.env b/backend/.env new file mode 100644 index 0000000..75ee374 --- /dev/null +++ b/backend/.env @@ -0,0 +1,11 @@ +# Oracle Database +ORACLE_DSN=localhost:1521/orcl +ORACLE_USER=pltm +ORACLE_PASSWORD=pltm123 + +# OPC-UA Server +OPC_URL=opc.tcp://127.0.0.1:49320 +OPC_COUNTER_NODE=ns=2;s=通道 1.PLCFur.LineMeasure-1.SystemCounter +OPC_POLL_INTERVAL=2 + + diff --git a/backend/main.py b/backend/main.py index 6b3d653..e84fb80 100644 --- a/backend/main.py +++ b/backend/main.py @@ -653,7 +653,6 @@ def get_coils_by_range(start: int = Query(1), end: int = Query(5)): def get_signal_config(): """获取信号节点配置""" return { - "signal1_node": opc_service.signal1_node, "signal2_node": opc_service.signal2_node, } @@ -661,7 +660,6 @@ def get_signal_config(): @app.post("/api/opc/signals") async def save_signal_config(data: dict): """保存信号节点配置""" - opc_service.signal1_node = data.get("signal1_node", opc_service.signal1_node) opc_service.signal2_node = data.get("signal2_node", opc_service.signal2_node) try: opc_service.save_config() @@ -675,11 +673,7 @@ async def save_signal_config(data: dict): # 模拟信号接口 (用于测试) # ───────────────────────────────────────────── -@app.post("/api/track/simulate/signal1") -async def simulate_signal1(): - """模拟信号1触发 - 获取下5个钢卷""" - await opc_service._handle_signal1() - return {"message": "信号1已触发"} +# 信号1模拟API已移除 - 信号1不再使用 @app.post("/api/track/simulate/signal2") diff --git a/backend/opc_config.json b/backend/opc_config.json index a8f1a4a..25684a8 100644 --- a/backend/opc_config.json +++ b/backend/opc_config.json @@ -1,15 +1,39 @@ { "opc_url": "opc.tcp://127.0.0.1:49320", - "counter_node": "ns=2;s=PL.TRACKMAP.COUNTER", + "counter_node": "ns=2;s=通道 1.PLCFur.LineMeasure-1.COUNTER", "poll_interval": 2, "trackmap_nodes": {}, - "signal1_node": "ns=2;s=PL.Signal.EntryCoil", - "signal2_node": "ns=2;s=PL.Signal.WeldDone", - "write_counter_node": "", - "write_source_node": "", - "write_target_node": "", + "signal2_node": "ns=2;s=通道 1.PLCFur.LineMeasure-1.WeldDone", + "write_counter_node": "ns=2;s=通道 1.PLCFur.LineMeasure-1.WriteCounter", + "write_source_node": "ns=2;s=通道 1.PLCFur.LineMeasure-1.Source", + "write_target_node": "ns=2;s=通道 1.PLCFur.LineMeasure-1.Target", + "write_s7_endpoint": "140.80.0.2:102", + "write_s7_rack": 0, + "write_s7_slot": 1, "write_nodes": { - "1": {}, - "2": {} + "1": { + "setup_data_revision": "DB35501.DINT0", + "coilid": "DB35501.DBB4", + "entry_coil_weight": "DB35501.DBD26", + "entry_of_coil_length": "DB35501.DBD30", + "entry_coil_width": "DB35501.DBD34", + "entry_coil_thickness": "DB35501.DBD38", + "entry_of_coil_inner_diameter": "DB35501.DBD42", + "entry_of_coil_outer_diameter": "DB35501.DBD46", + "alloy_code": "DB35501.DBB50", + "material": "DB35501.DBB56" + }, + "2": { + "setup_data_revision": "DB35501.DINT0", + "coilid": "DB35501.DBB78", + "entry_coil_weight": "DB35501.DBD100", + "entry_of_coil_length": "DB35501.DBD104", + "entry_coil_width": "DB35501.DBD108", + "entry_coil_thickness": "DB35501.DBD112", + "entry_of_coil_inner_diameter": "DB35501.DBD116", + "entry_of_coil_outer_diameter": "DB35501.DBD120", + "alloy_code": "DB35501.DBB124", + "material": "DB35501.DBB130" + } } } \ No newline at end of file diff --git a/backend/opc_service.py b/backend/opc_service.py index fb7404d..3dcf5c2 100644 --- a/backend/opc_service.py +++ b/backend/opc_service.py @@ -272,14 +272,12 @@ class OpcService: counter_changed = current_counter != self.last_counter_at_state_change - # State machine for signal processing + # Signal1自动化处理已禁用 - 只允许手动调用_handle_signal1函数 + # 信号1不再响应自动化触发,确保双向保护 if self.track_state == "WAIT_S1": - if signal1_value is not None and self.signal1_last is not None: - if self.signal1_last == 0 and signal1_value == 1 and counter_changed: - self._log(f"Signal1: Entry coil triggered (0->1) with counter change, state={self.track_state}") - await self._handle_signal1() - self.track_state = "WAIT_S2" - self.last_counter_at_state_change = current_counter + # 不再处理信号1的自动化触发 + # 信号1只能通过手动调用API或信号2内部逻辑触发 + pass elif self.track_state == "WAIT_S2": if signal2_value is not None and self.signal2_last is not None: diff --git a/frontend/src/views/OpcConfig.vue b/frontend/src/views/OpcConfig.vue index 1c2624a..f0f3862 100644 --- a/frontend/src/views/OpcConfig.vue +++ b/frontend/src/views/OpcConfig.vue @@ -18,10 +18,6 @@ 追踪流程计数器,节点值变化时触发采集 - - - 入口钢卷信号,0→1触发 - 焊接完成信号,0→1且计数器变化触发 diff --git a/start_tdh.bat b/start_tdh.bat index 8c28ee1..4abb293 100644 --- a/start_tdh.bat +++ b/start_tdh.bat @@ -15,6 +15,12 @@ set "BACKEND_DIR=backend" set "FRONTEND_DIR=frontend" :: ===================================================== +:: 初始化 conda(关键:让脚本内部能使用 conda 命令) +for /f "delims=" %%i in ('conda info --base') do set "CONDA_BASE=%%i" +call "%CONDA_BASE%\shell\condabin\conda-hook.cmd" +echo ✅ conda 环境初始化完成 + +echo. echo [1/4] 检查并创建 conda 环境... conda env list | findstr %CONDA_ENV% if %errorlevel% equ 0 ( @@ -33,8 +39,11 @@ cd .. echo. echo [4/4] 启动前后端... -start "【后端】" cmd /k "chcp 65001 & call conda activate %CONDA_ENV% & cd /d ""%BACKEND_DIR%"" & uvicorn main:app --host 0.0.0.0 --port 8000 --reload" +:: 启动后端 +start "【后端】" cmd /k "chcp 65001 & for /f "delims=" %%i in ('conda info --base') do set "CONDA_BASE=%%i" & call "%%CONDA_BASE%%\shell\condabin\conda-hook.cmd" & call conda activate %CONDA_ENV% & cd /d ""%BACKEND_DIR%"" & uvicorn main:app --host 0.0.0.0 --port 8000 --reload" timeout /t 2 /nobreak >nul + +:: 启动前端 start "【前端】" cmd /k "chcp 65001 & cd /d ""%FRONTEND_DIR%"" & npm run serve" echo.