From 7ed8a3db0115b19349cbdad55c91c353a0e8e300 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 26 四月 2026 16:29:19 +0800
Subject: [PATCH] 一楼输送线出入库冲突控制

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |   90 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 88 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 3a39e8d..1a86a6e 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -1690,6 +1690,89 @@
         wrkSourceStaNoToRgvStaMap.put(1407,1403);
     }
 
+    // ========================
+    // 馃敟 閫氶亾閿侊紙鏍稿績锛�
+    // ========================
+    private volatile int pathLock = 0;
+
+    // 0 = 绌洪棽
+    // 1 = 鍏ュ簱鍗犵敤锛�1106鈫�1105鈫�1114锛�
+    // 2 = 鍑哄簱鍗犵敤锛�1114鈫扲GV鈫掑锛�
+
+
+    public synchronized void releasePathIfFree() {
+
+        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, 1);
+        RgvProtocol rgv = rgvThread.getRgvProtocol();
+        if (rgv == null) return;
+
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+
+        StaProtocol sta1105 = devpThread.getStation().get(1105);
+        StaProtocol sta1114 = devpThread.getStation().get(1114);
+
+        if (sta1105 == null || sta1114 == null) return;
+
+        boolean allFree =
+                rgv.getTaskNo1() == 0
+                        && rgv.loaded1 == 0
+                        && rgv.statusType == RgvStatusType.IDLE
+                        && rgv.modeType == RgvModeType.AUTO
+                        && rgv.alarm == 0
+
+                        && sta1105.isAutoing()
+                        && sta1105.getWorkNo() == 0
+                        && !sta1105.isLoading()
+
+                        && sta1114.isAutoing()
+                        && sta1114.getWorkNo() == 0
+                        && !sta1114.isLoading();
+
+        if (allFree && pathLock != 0) {
+            pathLock = 0;
+            devpThread.updatePathStatus(0);
+        }
+    }
+
+    public synchronized void rgvCarryOne() {
+        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, 1);
+        RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+        if (rgvProtocol == null) {
+            return;
+        }
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol1106 = devpThread.getStation().get(1106);
+        if (staProtocol1106 == null) {
+            return;
+        }
+        StaProtocol staProtocol1105 = devpThread.getStation().get(1105);
+        if (staProtocol1105 == null) {
+            return;
+        }
+        StaProtocol staProtocol1114 = devpThread.getStation().get(1114);
+        if (staProtocol1114 == null) {
+            return;
+        }
+        if (isIdle(rgvProtocol, staProtocol1105, staProtocol1114) &&  staProtocol1106.isAutoing() && staProtocol1106.isLoading() && staProtocol1106.getWorkNo() != 0 && staProtocol1106.getStaNo() != 1106) {
+            applyPath(1, devpThread);
+        }
+    }
+
+    public synchronized boolean isIdle(RgvProtocol rgvProtocol,StaProtocol staProtocol1105,StaProtocol staProtocol1114) {
+        return rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.statusType == RgvStatusType.IDLE && rgvProtocol.loaded1 == 0
+                && rgvProtocol.alarm == 0 && rgvProtocol.getTaskNo1() == 0
+                && staProtocol1105.isAutoing() && !staProtocol1105.isLoading() && staProtocol1105.getWorkNo() == 0
+                && staProtocol1114.isAutoing() && !staProtocol1114.isLoading() && staProtocol1114.getWorkNo() == 0;
+    }
+
+    private synchronized boolean applyPath(int newStatus, SiemensDevpThread devpThread) {
+        if (pathLock != 0) return false;
+
+        pathLock = newStatus;
+        devpThread.updatePathStatus(newStatus);
+        return true;
+    }
+
     public synchronized void rgvCarry() {
         for(int i = 1; i <= 4; i ++) {
             List<Integer> rgvCarrySiteList;
@@ -1724,8 +1807,11 @@
                         // 鍒ゆ柇鐩爣绔欑偣鏄惁鍙敤
                         StaProtocol staProtocol = devpThread.getStation().get(wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()) == null ?
                                 wrkMast.getStaNo() : wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()));
-                        if (staProtocol != null && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
-
+                        if (staProtocol != null && (staProtocol.getSiteId() != 1114 || isIdle(rgvProtocol,devpThread.getStation().get(1105),staProtocol))
+                                && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
+                            if (staProtocol.getSiteId() == 1114) {
+                                applyPath(2, devpThread);
+                            }
                             RgvCommand rgvCommand = new RgvCommand();
                             rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
 //                            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�

--
Gitblit v1.9.1