From da4f2304da2646aa0336b492514655e7cc8a494a Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期三, 11 六月 2025 12:49:38 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jx-gt-crn-wcs' into jx-gt-crn-wcs

---
 src/main/java/com/zy/core/thread/SiemensDevpThread.java |  198 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 136 insertions(+), 62 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index f107d92..96f6cde 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -45,11 +45,22 @@
     private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
     private short heartBeatVal = 1;
     private StaError1 staError1;
+    public static boolean is = true;
 //    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
 //
 //    }};
     public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
-        add(140);add(141);
+    add(1000);	add(1001);	add(1002);	add(1003);	add(1004);	add(1005);	add(1006);	add(1007);	add(1008);	add(1009);	add(1010);
+    add(1011);	add(1012);	add(1013);	add(1014);	add(1015);	add(1016);	add(1017);	add(1018);	add(1019);	add(1020);	add(1021);
+    add(1022);	add(1023);	add(1024);	add(1025);	add(1026);	add(1027);	add(1028);	add(1029);	add(1030);
+    add(2000); add(2001); add(2002); add(2003); add(2004);add(2005); add(2006); add(2007);
+//        add(200);add(201);add(202);
+    }};
+    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+       add(1040);add(1041);add(1042);add(1043);add(1044);add(1045);add(1046);add(1047);
+       add(2010);add(2011);add(2012);add(2013);add(2014);add(2015);add(2016);add(2017);
+       add(3010);add(3011);add(3012);add(3013);add(3014);add(3015);add(3016);add(3017);
+
 //        add(200);add(201);add(202);
     }};
 
@@ -91,6 +102,8 @@
         switch (slave.getId()) {
             case 1:
                 return staNos1;
+            case 2:
+                return staNos2;
             default:
                 throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
         }
@@ -115,7 +128,7 @@
                     // 鍐欐暟鎹� ID+鐩爣绔�
                     case 2:
                         writeD((StaProtocol)task.getData(),1);
-                        log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
+//                        log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                         break;
                     default:
                         break;
@@ -135,31 +148,43 @@
     private void initSite() {
         count ++;
         ArrayList<Integer> staNos = getStaNo();
+        if(count > 50) {
+            // 绔欑偣缂栧彿
+            for (Integer siteId : staNos) {
+                StaProtocol staProtocol = station.get(siteId);
+                if (null == staProtocol) {
+                    staProtocol = new StaProtocol();
+                    staProtocol.setSiteId(siteId);
+                    station.put(siteId, staProtocol);
+                }
+                staProtocol.setWorkNo(0);     // 宸ヤ綔鍙�
+                staProtocol.setStaNo((short) 0);   // 鐩爣绔�
+                staProtocol.setState((short) 0);  // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰
+                staProtocol.setWorkIo((short) 0);
+                staProtocol.setRequestIo((short) 0);
+                staProtocol.setTrayIo((short) 0);
+                staProtocol.setLocIo((short) 0);
+                staProtocol.setBarcode("-");
+                staProtocol.setWeightIo(0.0);
+                staProtocol.setMode((short) 0);
 
-        // 绔欑偣缂栧彿
-        for (Integer siteId : staNos) {
-            StaProtocol staProtocol = station.get(siteId);
-            if (null == staProtocol) {
-                staProtocol = new StaProtocol();
-                staProtocol.setSiteId(siteId);
-                station.put(siteId, staProtocol);
+                if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) {
+                    staProtocol.setPakMk(true);
+                }
             }
-            staProtocol.setWorkNo(0);     // 宸ヤ綔鍙�
-            staProtocol.setStaNo((short) 0);   // 鐩爣绔�
-            staProtocol.setState((short) 0);  // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰
-            staProtocol.setWorkIo((short) 0);
-            staProtocol.setRequestIo((short) 0);
-            staProtocol.setTrayIo((short) 0);
-            staProtocol.setLocIo((short) 0);
-            staProtocol.setBarcode("-");
-            staProtocol.setWeightIo(0.0);
-            staProtocol.setMode((short) 0);
-
-            if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) {
-                staProtocol.setPakMk(true);
-            }
+            count = 0;
         }
-        count = 0;
+
+
+    }
+
+    public void initSta(){
+        if (is){
+            for (int i = 1000; i <= 1300; i++) {
+                staNos1.add(i);
+            }
+            is = false;
+        }
 
     }
 
@@ -198,9 +223,9 @@
                 StaProtocol staProtocol = station.get(siteId);
                 if (null == staProtocol) {
                     staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
                     station.put(siteId, staProtocol);
                 }
+                staProtocol.setSiteId(siteId);
                 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*66 + 8));     // 宸ヤ綔鍙�
                 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 12));   // 鐩爣绔�
                 staProtocol.setState(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 14));  // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰
@@ -208,11 +233,11 @@
                 staProtocol.setRequestIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 18));
                 staProtocol.setTrayIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 20));
                 staProtocol.setLocIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 22));
-                staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*66 + 24,16, "UTF-8"));
+                staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*66 + 24,16, "UTF-8").trim());
 //                staProtocol.setWeightIo(siemensS7Net.getByteTransform().TransDouble(result.Content,i*66 + 40));
                 staProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 44));
 
-                if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) {
+                if (!staProtocol.isPakMk() && (staProtocol.workType == DevpWorkType.IDLE  || staProtocol.isPakReset())) {
                     staProtocol.setPakMk(true);
                 }
             }
@@ -285,53 +310,102 @@
     }
 
     private void writeD(StaProtocol staProtocol,Integer count)throws InterruptedException{
+
+        boolean reset = true;
         if (null == staProtocol) {
             return;
+        }
+        staProtocol = staProtocol.clone();
+        Integer oriWrkNo = staProtocol.getWorkNo();
+        short oriStaNo = staProtocol.getStaNo();
+        ArrayList<Integer> staNos = getStaNo();
+        int index = staNos.indexOf(staProtocol.getSiteId());
+
+
+        if(writeWrk(staProtocol,1)){
+
+            int whileCount = 0;
+            OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1);
+            if (write3.IsSuccess){
+                News.info("杈撻�佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+1+"]");
+                Thread.sleep(100);
+                do {
+                    OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2);
+                    short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0);
+                    if (mk == 2){
+                        OperateResult write5 = siemensS7Net.Write("DB100." + index*66, 0);    // 宸ヤ綔鍙�
+                        Thread.sleep(100);
+                        OperateResult write6 = siemensS7Net.Write("DB100." + (index*66+4), (short) 0);    // 鐩爣绔�
+                        Thread.sleep(100);
+                        OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), (short) 0);
+                        reset = false;
+                        if (write4.IsSuccess && write5.IsSuccess && write6.IsSuccess){
+                            News.info("杈撻�佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+"0,0,0"+"]");
+                            OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100."+(index*66), (short) 8);
+                            Integer wrkNo1 = siemensS7Net.getByteTransform().TransInt32(result1.Content, 0);
+                            short staNo1 = siemensS7Net.getByteTransform().TransInt16(result1.Content, 4);
+                            short mk1 = siemensS7Net.getByteTransform().TransInt16(result1.Content, 6);
+                            if (wrkNo1 != 0 || staNo1 !=0 || mk1 !=0){
+                                whileCount++;
+                                News.info("澶嶄綅澶辫触,杈撻�佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+"0,0,0"+"]");
+                            }else {
+                                News.info("杈撻�佺嚎澶嶄綅瀹屾垚");
+                                break;
+                            }
+
+                        }
+                    }else if (reset && mk == 0 ){
+                        OperateResult write7 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1);
+                        News.info("鍥炶1澶辫触锛岃緭閫佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+"1"+"]");
+                        Thread.sleep(100);
+                        whileCount++;
+                    }else {
+                        whileCount++;
+                    }
+                }while (whileCount <10);
+            }
+        }else {
+            log.error("杈撻�佸懡浠や笅鍙戝け璐�"+JSON.toJSONString(staProtocol));
+        }
+
+
+
+    }
+
+    private boolean writeWrk(StaProtocol staProtocol,Integer count)throws InterruptedException {
+
+        if (null == staProtocol) {
+            return false;
         }
         Integer oriWrkNo = staProtocol.getWorkNo();
         short oriStaNo = staProtocol.getStaNo();
 
         ArrayList<Integer> staNos = getStaNo();
         int index = staNos.indexOf(staProtocol.getSiteId());
-
-        OperateResult write1 = siemensS7Net.Write("DB100." + index*66, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
-        Thread.sleep(200);
-        OperateResult write2 = siemensS7Net.Write("DB100." + (index*66+4), staProtocol.getStaNo());    // 鐩爣绔�
-        if(write1.IsSuccess && write2.IsSuccess){
-            OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100."+(index*66), (short) 6);
-            Integer wrkNo = siemensS7Net.getByteTransform().TransInt32(result.Content, 0);
-            short staNo = siemensS7Net.getByteTransform().TransInt16(result.Content, 4);
-            if (!oriWrkNo.equals(wrkNo)  || oriStaNo != staNo){
-                if (count >= 5){
-                    log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), count);
-                    return;
-                }
-                count++;
-                writeD(staProtocol,count);
-            }
-            int whileCount = 0;
-            OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1);
-            if (write3.IsSuccess){
-                Thread.sleep(200);
-                do {
-                    OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2);
-                    short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0);
-                    if (mk == 2){
-                        OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), 0);
-                        if (write4.IsSuccess){
-                            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
-                            News.info("SiemensDevp"+" - 5"+" - 杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
-                            break;
-                        }
-                    }else {
-                        whileCount++;
+        do {
+            log.info("杈撻�侀�掑綊娆℃暟:" + count);
+            OperateResult write1 = siemensS7Net.Write("DB100." + index * 66, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+            Thread.sleep(100);
+            OperateResult write2 = siemensS7Net.Write("DB100." + (index * 66 + 4), staProtocol.getStaNo());    // 鐩爣绔�
+            if (write1.IsSuccess && write2.IsSuccess) {
+                News.info("杈撻�佺嚎鍛戒护涓嬪彂[id:" + slave.getId() + "] >>>>>" + "[" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "]");
+                OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100." + (index * 66), (short) 6);
+                Integer wrkNo = siemensS7Net.getByteTransform().TransInt32(result.Content, 0);
+                short staNo = siemensS7Net.getByteTransform().TransInt16(result.Content, 4);
+                if (!oriWrkNo.equals(wrkNo) || oriStaNo != staNo) {
+                    if (count >= 5) {
+                        log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), count);
+                        return false;
                     }
-                }while (whileCount <5);
+                    count++;
+                }else {
+                    return true;
+                }
             }
-        }
+        }while (count <=5);
 
 
-
+        return true;
     }
 
     // 鏇存柊鍏ュ嚭搴撴ā寮�

--
Gitblit v1.9.1