From 9932bfdb4e4ab325cabe17af3cfb556dd3ea6d7c Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期四, 31 七月 2025 13:52:05 +0800
Subject: [PATCH] 初始化1.0

---
 src/main/java/com/zy/core/thread/SiemensDevpThread.java |  229 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 204 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 506993f..e387434 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -54,7 +54,10 @@
     }};
     public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
         add(300);add(301);add(302);add(303);add(304);
+        add(311);add(312);add(313);add(314);add(315);
     }};
+
+
 
     public static final ArrayList<Integer> barcode1 = new ArrayList<Integer>() {{
         add(1); add(2);
@@ -62,6 +65,10 @@
 
     public static final ArrayList<Integer> barcode2 = new ArrayList<Integer>() {{
        add(3);
+    }};
+
+    public static final ArrayList<Integer> barcode3 = new ArrayList<Integer>() {{
+        add(4);
     }};
 
     private Integer count=0;
@@ -163,6 +170,8 @@
                 return barcode1;
             case 2:
                 return barcode2;
+            case 3:
+                return barcode3;
             default:
                 throw new CoolException("鑾峰彇鏉$爜鎵弿鍣ㄥけ璐ワ紒");
         }
@@ -224,7 +233,7 @@
                 }
             } else {
                 OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-                log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
+//                log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
             }
 
             //鏉$爜鎵弿鍣�
@@ -271,14 +280,14 @@
                 }
             } else {
                 OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-                log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
+//                log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
             }
 
             //澶栧舰妫�娴�
             OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.42", (short) 8);
             if (resultErr.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, 0, 1);
-                StaProtocol staProtocol = station.get(303);
+                StaProtocol staProtocol = station.get(304);
                 staProtocol.setFrontErr(status[0]);
                 staProtocol.setBackErr(status[1]);
                 staProtocol.setHighErr(status[2]);
@@ -306,6 +315,7 @@
         }
         // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
         try {
+            if (!station.isEmpty()) {
             List<BasDevp> basDevps = new ArrayList<>();
             for (Integer siteId : staNos) {
                 StaProtocol staProtocol = station.get(siteId);
@@ -315,6 +325,7 @@
             BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
             if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
                 throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
+            }
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -332,31 +343,199 @@
         ArrayList<Integer> staNos = getStaNo();
         OperateResult write = null;
         OperateResult write1 = null;
-        // 鍐�2鍙疯緭閫佺嚎
+        int index = staNos.indexOf(staProtocol.getSiteId());
+
+        //// 鍐�2鍙疯緭閫佺嚎
+        //if (slave.getId() == 1) {
+        //
+        //    //Thread.sleep(500);
+        //    //write1 = siemensS7Net.Write("DB100." + (4 * index + 2), staProtocol.getStaNo());    // 鐩爣绔檈
+        //} else {
+        //    write = siemensS7Net.Write("DB100." + index * 6, staProtocol.getWorkNo().intValue());    // 宸ヤ綔鍙�
+        //    Thread.sleep(200);
+        //    write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 鐩爣绔�
+        //}
+
         if (slave.getId() == 1) {
-            int index = staNos.indexOf(staProtocol.getSiteId());
-            write = siemensS7Net.Write("DB100." + index * 4, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
-            Thread.sleep(500);
-            write1 = siemensS7Net.Write("DB100." + (4 * index + 2), staProtocol.getStaNo());    // 鐩爣绔檈
-        } else {
-            int index = staNos.indexOf(staProtocol.getSiteId());
-            write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 鐩爣绔�
-            Thread.sleep(500);
-            write = siemensS7Net.Write("DB100." + index * 6, staProtocol.getWorkNo().intValue());    // 宸ヤ綔鍙�
+            short[] array = new short[2];
+            array[0] = staProtocol.getWorkNo();
+            array[1] = staProtocol.getStaNo();
+            //write = siemensS7Net.Write("DB100." + index * 4, array);    // 宸ヤ綔鍙�
+
+            OperateResult writeResult;
+            //浠诲姟涓嬪彂娆℃暟
+            int writeCount = 0;
+            //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+            boolean writeFlag = false;
+            while(writeCount < 5){
+                // 鍐�2鍙疯緭閫佺嚎
+                write = siemensS7Net.Write("DB100." + index * 4, array);    // 宸ヤ綔鍙枫�佺洰鏍�
+                if(write.IsSuccess){
+                    Thread.sleep(200);
+                    OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*4, (short)4);
+                    //OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB1000." + index*4, (short)4);
+                    if(readResult.IsSuccess){
+                        short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+                        short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
+                        if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){
+                            //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                            writeFlag = true;
+                            log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                            break;
+                        } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+                            writeCount++;
+                            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                                    slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                            log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                        }
+                    } else {
+                        writeCount++;
+                        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                                slave.getId(), JSON.toJSON(staProtocol), writeCount));
+                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                    }
+                } else {
+                    writeCount++;
+                    OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                            slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                    log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                }
+                Thread.sleep(200);
+            }
+
+            //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+            if(!writeFlag){
+                staProtocol = station.get(staProtocol.getSiteId());
+                if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+                    staProtocol.setPakMk(true);
+                }
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+
+                //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+                boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
+                read();//璇诲彇1娆¤澶囩姸鎬�
+                return;
+            } else {
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+                log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
+
+                Integer siteId = staProtocol.getSiteId();
+                staProtocol = station.get(siteId);
+                if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+                    staProtocol.setPakMk(true);
+                }
+            }
+
+        } else {//PLC2
+            OperateResult writeResult;
+            //浠诲姟涓嬪彂娆℃暟
+            int writeCount = 0;
+            //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+            boolean writeFlag = false;
+            while(writeCount < 5){
+                // 鍐�2鍙疯緭閫佺嚎
+                write = siemensS7Net.Write("DB100." + index * 6, staProtocol.getWorkNo().intValue());    // 宸ヤ綔鍙�
+                Thread.sleep(200);
+                write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 鐩爣绔�
+                if(write.IsSuccess){
+                    Thread.sleep(200);
+                    OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*6, (short)4);
+                    Thread.sleep(200);
+                    OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB100." + (index*6+4), (short)2);
+                    //OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB1000." + index*4, (short)4);
+                    if(readResult.IsSuccess && readResult1.IsSuccess){
+                        int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+                        short staNo = siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 0);
+                        if(staProtocol.getWorkNo().equals((short)workNo) && staProtocol.getStaNo().equals(staNo)){
+                            //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                            writeFlag = true;
+                            log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                            break;
+                        } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+                            writeCount++;
+                            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                                    slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                            log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                        }
+                    } else {
+                        writeCount++;
+                        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                                slave.getId(), JSON.toJSON(staProtocol), writeCount));
+                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                    }
+                } else {
+                    writeCount++;
+                    OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                            slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                    log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                }
+                Thread.sleep(200);
+            }
+
+            //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+            if(!writeFlag){
+                staProtocol = station.get(staProtocol.getSiteId());
+                if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+                    staProtocol.setPakMk(true);
+                }
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+
+                //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+//                boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
+                read();//璇诲彇1娆¤澶囩姸鎬�
+                return;
+            } else {
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+                log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
+
+                Integer siteId = staProtocol.getSiteId();
+                staProtocol = station.get(siteId);
+                if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+                    staProtocol.setPakMk(true);
+                }
+            }
+
         }
 
-        if (!write.IsSuccess || !write1.IsSuccess) {
-            staProtocol = station.get(staProtocol.getSiteId());
-            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
-                staProtocol.setPakMk(true);
-            }
-            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
-            News.error("SiemensDevp" + " - 4" + " - 鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
-        } else {
-            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));
-        }
-    }
+   }
+
+    ///**
+    // * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
+    // */
+    //private void write(StaProtocol staProtocol) throws InterruptedException {
+    //    if (null == staProtocol) {
+    //        return;
+    //    }
+    //    ArrayList<Integer> staNos = getStaNo();
+    //    OperateResult write = null;
+    //    OperateResult write1 = null;
+    //    // 鍐�2鍙疯緭閫佺嚎
+    //    if (slave.getId() == 1) {
+    //        int index = staNos.indexOf(staProtocol.getSiteId());
+    //        write = siemensS7Net.Write("DB100." + index * 4, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+    //        Thread.sleep(500);
+    //        write1 = siemensS7Net.Write("DB100." + (4 * index + 2), staProtocol.getStaNo());    // 鐩爣绔檈
+    //    } else {
+    //        int index = staNos.indexOf(staProtocol.getSiteId());
+    //        write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 鐩爣绔�
+    //        Thread.sleep(500);
+    //        write = siemensS7Net.Write("DB100." + index * 6, staProtocol.getWorkNo().intValue());    // 宸ヤ綔鍙�
+    //    }
+    //
+    //    if (!write.IsSuccess || !write1.IsSuccess) {
+    //        staProtocol = station.get(staProtocol.getSiteId());
+    //        if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
+    //            staProtocol.setPakMk(true);
+    //        }
+    //        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+    //        News.error("SiemensDevp" + " - 4" + " - 鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+    //    } else {
+    //        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));
+    //    }
+    //}
 
     // 鏇存柊鍏ュ嚭搴撴ā寮�
     private void updateIoMode() throws InterruptedException {

--
Gitblit v1.9.1