From c588ec9236ef644fe13af957920198bdcb4e05e8 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期六, 29 三月 2025 13:44:38 +0800
Subject: [PATCH] #输送线循环覆写由plc执行

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   46 +++-------
 src/main/java/com/zy/core/MainProcess.java                  |   21 +++--
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |   89 ++++++++++++++++++++++
 src/main/resources/application.yml                          |    1 
 src/main/java/com/zy/core/model/protocol/Cycle.java         |   51 ++++++++++++
 5 files changed, 168 insertions(+), 40 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 037ce7a..7c53b3c 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -159,31 +159,15 @@
                             StaProtocol staProtocol5 = getClonedStation(devpThread, staProtocol.getSiteId() - 1);
                             if (staProtocol5 != null && (staProtocol5.isLoading() && (staProtocol5.getStaNo() == 107 || staProtocol5.getStaNo() == 109))) {
                                 short workNo = staProtocol5.getWorkNo();
-
-                                // **鍏堟竻闆讹紝绛夊緟 100ms**
-                                staProtocol5.setWorkNo((short) 0);
-                                staProtocol5.setStaNo((short) 0);
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol5));
-                                Thread.sleep(100);
-
-                                // **鍐嶅啓鍏ョ洰鏍囧��**
                                 staProtocol5.setWorkNo(workNo);
                                 staProtocol5.setStaNo((short) 112);
-                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol5));
+                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol5));
                             }
                         } else {
                             short workNo = staProtocol.getWorkNo();
-
-                            // **鍏堟竻闆讹紝绛夊緟 100ms**
-                            staProtocol.setWorkNo((short) 0);
-                            staProtocol.setStaNo((short) 0);
-                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                            Thread.sleep(100);
-
-                            // **鍐嶅啓鍏ョ洰鏍囧��**
                             staProtocol.setWorkNo(workNo);
                             staProtocol.setStaNo((short) 112);
-                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol));
                         }
                     }
                 }
@@ -212,13 +196,13 @@
 
                 StaProtocol staProtocol = devpThread.getStation().get(112);
                 StaProtocol staProtocol2 = devpThread.getStation().get(116);
-                StaProtocol staProtocol3 = devpThread.getStation().get(117);
-                if(Objects.equals(staProtocol3.getWorkNo(), staProtocol.getWorkNo()) && staProtocol.getWorkNo() != 0){
-                    staProtocol.setWorkNo((short) 0);
-                    staProtocol.setStaNo((short) 0);
-                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                    Thread.sleep(100); // 璁� PLC 璇嗗埆鍙樺寲
-                }
+//                StaProtocol staProtocol3 = devpThread.getStation().get(117);
+//                if(Objects.equals(staProtocol3.getWorkNo(), staProtocol.getWorkNo()) && staProtocol.getWorkNo() != 0){
+//                    staProtocol.setWorkNo((short) 0);
+//                    staProtocol.setStaNo((short) 0);
+//                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                    Thread.sleep(100); // 璁� PLC 璇嗗埆鍙樺寲
+//                }
                 if (staProtocol == null || staProtocol.getWorkNo() == 0 || !staProtocol.isLoading() ) {
                     continue;
                 }
@@ -234,18 +218,18 @@
                     continue;
                 }
 
-                // 鍏堟竻闆�
+//                 鍏堟竻闆�
                 short workNo = staProtocol.getWorkNo();
                 short oldStaNo = staProtocol.getStaNo();
-                staProtocol.setWorkNo((short) 0);
-                staProtocol.setStaNo((short) 0);
-                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                Thread.sleep(100); // 璁� PLC 璇嗗埆鍙樺寲
+//                staProtocol.setWorkNo((short) 0);
+//                staProtocol.setStaNo((short) 0);
+//                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+//                Thread.sleep(100); // 璁� PLC 璇嗗埆鍙樺寲
 
                 // 鍐嶅啓鍏ョ洰鏍囩珯鐐�
                 staProtocol.setWorkNo(workNo);
                 staProtocol.setStaNo(Short.valueOf(taskWrk.getTargetPoint()));
-                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol));
                 Thread.sleep(200);
 
                 log.info("Shifted from cycle station 112 to target {}, workNo: {}", taskWrk.getTargetPoint(), workNo);
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index d0410f4..ed2bffa 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -27,6 +27,9 @@
     // 棰戠巼
     private int i = 0;
 
+    @Value("${wms.maxCirle}")
+    private Integer maxCount;
+
     /**
      * =====>>  寮�濮嬪伐浣�
      */
@@ -62,14 +65,16 @@
 //                    mainService.outOfDevp();
 
                     // 鍏朵粬  ===>> // 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁�
-
-                    i++;
-                    if (i > 2) {
-                        //鐜舰寰幆鍑芥暟
-                        mainService.shiftTargetToCyclePoint();
-                        mainService.shiftCyclePointToTarget();
-                        i = 0;
-                    }
+                    //鐜舰寰幆鍑芥暟
+                    mainService.shiftTargetToCyclePoint();
+                    mainService.shiftCyclePointToTarget();
+//                    i++;
+//                    if (i > maxCount) {
+//                        //鐜舰寰幆鍑芥暟
+//                        mainService.shiftTargetToCyclePoint();
+//                        mainService.shiftCyclePointToTarget();
+//                        i = 0;
+//                    }
 
                     //鑷姩娲惧彂浠诲姟
    //                 mainService.autoDistribute();
diff --git a/src/main/java/com/zy/core/model/protocol/Cycle.java b/src/main/java/com/zy/core/model/protocol/Cycle.java
new file mode 100644
index 0000000..48d7ce9
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/Cycle.java
@@ -0,0 +1,51 @@
+package com.zy.core.model.protocol;
+
+public class Cycle implements Cloneable {
+    // 绔欑偣缂栧彿
+    private Integer siteId;
+
+    // 宸ヤ綔鍙�
+    private Short workNo = 0;
+
+    // 鐩爣绔�
+    private Short staNo;
+
+    public Cycle(Integer siteId, Short staNo) {
+        this.siteId = siteId;
+        this.staNo = staNo;
+    }
+
+    public Integer getSiteId() {
+        return siteId;
+    }
+
+    public void setSiteId(Integer siteId) {
+        this.siteId = siteId;
+    }
+
+    public Short getWorkNo() {
+        return workNo;
+    }
+
+    public void setWorkNo(Short workNo) {
+        this.workNo = workNo;
+    }
+
+    public Short getStaNo() {
+        return staNo;
+    }
+
+    public void setStaNo(Short staNo) {
+        this.staNo = staNo;
+    }
+
+    @Override
+    public Cycle clone() {
+        try {
+            return (Cycle) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index d731d3a..783e791 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -24,6 +24,7 @@
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.Task;
+import com.zy.core.model.protocol.Cycle;
 import com.zy.core.model.protocol.StaProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -132,7 +133,7 @@
                         break;
                     // 鍐欐暟鎹� ID+鐩爣绔�
                     case 4:
-                        writeAgvOk((StaProtocol)task.getData());
+                        writeCycle((StaProtocol)task.getData());
                         read();
                         break;
                    /* case 3:
@@ -544,6 +545,76 @@
         handleWriteFailure(staProtocol, writeFlag);
     }
 
+    private void writeCycle(StaProtocol staProtocol) throws InterruptedException {
+        if (staProtocol == null) {
+            return;
+        }
+
+        ArrayList<Integer> staNos = getStaNo();
+        int index = staNos.indexOf(staProtocol.getSiteId());
+
+        if (index == -1) {
+            log.error("绔欑偣缂栧彿 {} 涓嶅湪宸茬煡鍒楄〃涓紝鏃犳硶鍐欏叆浠诲姟锛�", staProtocol.getSiteId());
+            return;
+        }
+
+        int writeCount = 0; // 浠诲姟涓嬪彂灏濊瘯娆℃暟
+        boolean writeFlag = false; // 浠诲姟涓嬪彂鎴愬姛鏍囪
+        String plcAddressWorkNo = "";
+        String plcAddressStaNo = "" ;
+        switch (staProtocol.getSiteId()){
+            case 105:
+                plcAddressWorkNo = "DB73." + 0;
+                plcAddressStaNo = "DB73." + 4;
+                break;
+            case 106:
+                plcAddressWorkNo = "DB73." + 6;
+                plcAddressStaNo = "DB73." + (6 + 4);
+                break;
+            case 108:
+                plcAddressWorkNo = "DB73." + 2 * 6;
+                plcAddressStaNo = "DB73." + (2 * 6 + 4);
+                break;
+            case 110:
+                plcAddressWorkNo = "DB73." + 3 * 6;
+                plcAddressStaNo = "DB73." + (3 * 6 + 4);
+                break;
+            case 112:
+                plcAddressWorkNo = "DB73." + 4 * 6;
+                plcAddressStaNo = "DB73." + (4 * 6 + 4);
+                break;
+        }
+//        String plcAddressWorkNo = "DB100." + index * 6;
+//        String plcAddressStaNo = "DB100." + (index * 6 + 4);
+
+        while (writeCount < 5) {
+            // **璇诲彇褰撳墠PLC鐘舵�侊紝閬垮厤涓嶅繀瑕佺殑鍐欏叆**
+            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+            if (readResult.IsSuccess) {
+                int currentWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+                short currentStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+
+                if (currentWorkNo == staProtocol.getWorkNo().intValue() && currentStaNo == staProtocol.getStaNo()) {
+                    log.info("绔欑偣 {} 褰撳墠鐘舵�佸凡鍖归厤锛屾棤闇�閲嶅鍐欏叆", staProtocol.getSiteId());
+                    return;
+                }
+            }
+
+            // **鍐欏叆鏂颁换鍔�**
+            if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) {
+                writeFlag = true;
+                log.info("杈撻�佺嚎鍛戒护鍐欏叆鎴愬姛锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                break;
+            }
+
+            log.warn("杈撻�佺嚎鍛戒护鍐欏叆澶辫触锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+            writeCount++;
+        }
+
+        // **鍐欏叆澶辫触澶勭悊**
+        handleWriteFailure(staProtocol, writeFlag);
+    }
+
     /**
      * 娓呴浂 PLC 鏁版嵁骞堕獙璇佹竻闆舵槸鍚︽垚鍔�
      */
@@ -584,6 +655,22 @@
         return false;
     }
 
+    private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, Cycle cycle) throws InterruptedException {
+        OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, cycle.getWorkNo().intValue());
+        OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, cycle.getStaNo());
+
+        if (writeResult1.IsSuccess && writeResult2.IsSuccess) {
+            Thread.sleep(200); // 绛夊緟 PLC 璇嗗埆鏂板��
+            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+            if (readResult.IsSuccess) {
+                int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+                short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+                return workNo == cycle.getWorkNo().intValue() && staNo == cycle.getStaNo();
+            }
+        }
+        return false;
+    }
+
     /**
      * 澶勭悊鍐欏叆澶辫触鐨勬儏鍐�
      */
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index de218f1..212973e 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -46,6 +46,7 @@
 wms:
   #杈撻�佺嚎鏆傚瓨鏁�
   count: 8
+  maxCirle: 5
   # 鏄惁寮�鍚笂鎶�
   start: true
   # WMS绯荤粺ip

--
Gitblit v1.9.1