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.