From 29bb1c46cbca730c552f02b3fbe46ea53560f95f Mon Sep 17 00:00:00 2001
From: 野心家 <1051256694@qq.com>
Date: 星期三, 14 五月 2025 14:09:25 +0800
Subject: [PATCH] 初始化

---
 src/main/java/com/zy/core/thread/SiemensDevpThread.java |  495 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 400 insertions(+), 95 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 5e9dc63..1c7f818 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;
@@ -48,32 +49,77 @@
     private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
     private short heartBeatVal = 1;
     public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
-        add(100);add(101);add(102);add(103);add(104);add(105);add(106);add(107);
+        add(1001);
+        add(1002);
+        add(1003);
+        add(1004);
+        add(1005);
+        add(1010);
+        add(1006);
+        add(1007);
+        add(1008);
+        add(1009);
+        add(1011);
+        add(1012);
+        add(1013);
+        add(1014);
+        add(1015);
+        add(1016);
+        add(1017);
+        add(1018);
+        add(1019);
+        add(1020);
+
+
     }};
-    /*public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
-        add(200);add(201);add(202);add(203);
-        add(204);add(205);add(206);add(207);
-        add(208);add(209);add(210);add(211);
-        add(212);add(213);add(214);add(215);
-        add(216);add(217);add(218);add(219);
-        add(220);add(221);add(222);add(223);
-        add(224);add(225);add(226);add(227);
-        add(228);add(229);add(230);add(231);
-        add(232);add(233);add(234);add(235);
+    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+        add(2001);
+        add(2002);
+        add(2003);
+        add(2004);
+        add(2005);
+        add(2006);
+        add(2007);
+        add(2008);
+        add(2009);
+        add(2010);
+        add(2011);
+        add(2012);
+        add(2013);
+        add(2014);
+        add(2015);
+        add(2016);
+        add(2017);
+        add(2018);
+        add(2019);
+
     }};
     public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{
-        add(300);add(301);add(302);add(303);
-        add(304);add(305);add(306);add(307);
+        add(1051);
+        add(1052);
+        add(1053);
+        add(1054);
+        add(1055);
+        add(1056);
+        add(1057);
+        add(1058);
     }};
     public static final ArrayList<Integer> staNos4 = new ArrayList<Integer>() {{
-        add(400);add(401);add(402);add(403);
-        add(404);add(405);add(406);add(407);
-    }};*/
+        add(2051);
+        add(2052);
+        add(2053);
+        add(2054);
+        add(2055);
+        add(2056);
+        add(2057);
+        add(2058);
+
+    }};
 
     /**
      * 鏉$爜鏁伴噺
      */
-    private int barcodeSize = 7;
+    private int barcodeSize = 1;
 
     /**
      * 鍏ュ嚭搴撴ā寮�
@@ -84,17 +130,18 @@
      * 4.鍑哄簱妯″紡
      */
     public IoModeType ioModeOf2F = IoModeType.NONE;
-//    public IoModeType ioMode = IoModeType.NONE;
+
+    //    public IoModeType ioMode = IoModeType.NONE;
     private ArrayList<Integer> getStaNo() {
         switch (slave.getId()) {
             case 1:
                 return staNos1;
-            /*case 2:
+            case 2:
                 return staNos2;
             case 3:
                 return staNos3;
             case 4:
-                return staNos4;*/
+                return staNos4;
             default:
                 throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
         }
@@ -122,7 +169,12 @@
                         break;
                     // 鍐欐暟鎹� ID+鐩爣绔�
                     case 2:
-                        write((StaProtocol)task.getData());
+                        write((StaProtocol) task.getData());
+                        read();
+                        break;
+                    // 鍐欐暟鎹� ID+鐩爣绔�
+                    case 4:
+                        writeCycle((StaProtocol) task.getData());
                         read();
                         break;
                    /* case 3:
@@ -176,12 +228,12 @@
         siemensS7Net.setRack(slave.getRack().byteValue());
         siemensS7Net.setSlot(slave.getSlot().byteValue());
         OperateResult connect = siemensS7Net.ConnectServer();
-        if(connect.IsSuccess){
+        if (connect.IsSuccess) {
             result = true;
-            OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
         } else {
-            OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
 //            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
 //            deviceErrorService.addDeviceError("devp", slave.getId(), "杈撻�佺嚎plc杩炴帴澶辫触");
@@ -199,7 +251,7 @@
 //        updateIoMode();
         ArrayList<Integer> staNos = getStaNo();
         int staNoSize = staNos.size();
-        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize*8));
+        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8));
         if (result.IsSuccess) {
             for (int i = 0; i < staNoSize; i++) {
                 Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
@@ -209,11 +261,11 @@
                     staProtocol.setSiteId(siteId);
                     station.put(siteId, staProtocol);
                 }
-                staProtocol.setWorkNo((short)siemensS7Net.getByteTransform().TransInt32(result.Content, i*8));     // 宸ヤ綔鍙�
+                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8));     // 宸ヤ綔鍙�
 
-                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4));   // 鐩爣绔�
+                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 8 + 4));   // 鐩爣绔�
 
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2);
+                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 2);
                 staProtocol.setAutoing(status[0]);  // 鑷姩
                 staProtocol.setLoading(status[1]);  // 鏈夌墿
                 staProtocol.setInEnable(status[2]); // 鍙叆
@@ -229,40 +281,65 @@
             }
         }
 
-
-        if (slave.getId() == 1) {
-            //鏉$爜
-            //Thread.sleep(200);
-            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840.0", (short) 32);
-            if (result2.IsSuccess) {
-                for (int i = 0; i < 4; i++) {
-                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
-                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
-                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
-                        barcodeThread.setBarcode(barcode);
-                    }
+        //鏉$爜
+        Thread.sleep(200);
+        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840.0", (short) 8);
+        if (result2.IsSuccess) {
+            for (int i = 0; i < 1; i++) {
+                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
+                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, slave.getId());
+                if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
+                    barcodeThread.setBarcode(barcode);
                 }
             }
+        }
 
-
-            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB13.2", (short) (staNoSize * 4));
-            if (resultErr.IsSuccess) {
-                for (int i = 0; i < staNoSize; i++) {
-                    Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
-                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1);
-                    StaProtocol staProtocol = station.get(siteId);
-                    staProtocol.setBreakerErr(status[0]);
-                    staProtocol.setInfraredErr(status[1]);
-                    staProtocol.setOutTimeErr(status[2]);
-                    staProtocol.setSeizeSeatErr(status[3]);
-                    staProtocol.setWrkYgoodsN(status[4]);
-                    staProtocol.setInverterErr(status[5]);
-                    staProtocol.setContactErr(status[6]);
-                    staProtocol.setUpcontactErr(status[7]);
-
-                }
+        //澶栧舰妫�娴�
+        OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.802.0", (short) (barcodeSize * 1));
+        if (resultErr1.IsSuccess) {
+            int sta = 0;
+            switch (slave.getId()) {
+                case 1:
+                    sta = 1014;
+                    break;
+                case 2:
+                    sta = 2007;
+                    break;
+                case 3:
+                    sta = 1052;
+                    break;
+                case 4:
+                    sta = 2056;
+                    break;
             }
+            StaProtocol staProtocol1 = station.get(sta);
+            boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, 0, 1);
+            staProtocol1.setFrontErr(status1[0]);
+            staProtocol1.setBackErr(status1[1]);
+            staProtocol1.setHighErr(status1[2]);
+            staProtocol1.setLeftErr(status1[3]);
+            staProtocol1.setRightErr(status1[4]);
+            staProtocol1.setWeightErr(status1[5]);
+            staProtocol1.setBarcodeErr(status1[6]);
+        }
 
+
+        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4));
+        if (resultErr.IsSuccess) {
+            for (int i = 0; i < staNoSize; i++) {
+                Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1);
+                StaProtocol staProtocol = station.get(siteId);
+                staProtocol.setBreakerErr(status[0]);
+                staProtocol.setInfraredErr(status[1]);
+                staProtocol.setOutTimeErr(status[2]);
+                staProtocol.setSeizeSeatErr(status[3]);
+                staProtocol.setWrkYgoodsN(status[4]);
+                staProtocol.setInverterErr(status[5]);
+                staProtocol.setContactErr(status[6]);
+                staProtocol.setUpcontactErr(status[7]);
+
+            }
         }
 
 
@@ -289,9 +366,8 @@
 //            this.ioMode = IoModeType.get(result2.Content);
 //        }
 
-        if (result.IsSuccess ) {
-
-            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+        if (result.IsSuccess) {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
 
             // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
             try {
@@ -324,39 +400,268 @@
     /**
      * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
      */
-    private void write(StaProtocol staProtocol) throws InterruptedException {
+    private void writeAgvOk(StaProtocol staProtocol) throws InterruptedException {
         if (null == staProtocol) {
             return;
         }
         ArrayList<Integer> staNos = getStaNo();
-
         int index = staNos.indexOf(staProtocol.getSiteId());
-        short[] array = new short[2];
-        array[0] = staProtocol.getWorkNo();
-        array[1] = staProtocol.getStaNo();
-//        OperateResult write = siemensS7Net.Write("DB100." + index*4, array);
+        if (staProtocol.getAgvTypeSign() == 0 || staProtocol.getAgvTypeSign() == 2) {  //0鍙栬揣
+            switch (staProtocol.getSiteId()) {
+                case 100:
+                    index = 32;
+                    break;
+                case 101:
+                    index = 34;
+                    break;
+                case 102:
+                    index = 38;
+                    break;
+                case 103:
+                    index = 40;
+                    break;
+                case 104:
+                    index = 44;
+                    break;
+                case 105:
+                    index = 46;
+                    break;
+                case 106:
+                    index = 50;
+                    break;
+                case 107:
+                    index = 52;
+                    break;
+                default:
+                    return;
+            }
+        } else {
+            switch (staProtocol.getSiteId()) {
+                case 100:
+                    index = 30;
+                    break;
+                case 102:
+                    index = 36;
+                    break;
+                case 104:
+                    index = 42;
+                    break;
+                case 106:
+                    index = 48;
+                    break;
+                default:
+                    return;
+            }
+        }
 
-        OperateResult writeResult;
+        OperateResult write = null;
         //浠诲姟涓嬪彂娆℃暟
         int writeCount = 0;
-        //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
-        boolean writeFlag = false;
-        OperateResult writeResult1 = siemensS7Net.Write("DB100." + index*6, (int) staProtocol.getWorkNo());    // 宸ヤ綔鍙�
-        OperateResult writeResult2 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo());    // 鐩爣绔�
-        if(writeResult1.IsSuccess&&writeResult2.IsSuccess){
-            //鏇存柊浠诲姟姝ュ簭
-            TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
-            TaskWrk taskWrk = taskWrkService.selectByWrkNo((int) staProtocol.getWorkNo());
-            if (taskWrk != null) {
-                taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭
-                taskWrkService.updateById(taskWrk);
-            }else{
-                log.error("杈撻�佺嚎鍐欏叆澶辫触"+staProtocol+"++++++++++++++++++++++++++++++++++++++");
+        do {
+            short textWrite = 1;// 浠诲姟瀹屾垚
+            if (staProtocol.getAgvTypeSign() > 1) {
+                textWrite = 0;// 浠诲姟澶嶄綅
             }
+            write = siemensS7Net.Write("DB102." + index, textWrite);
+            if (write.IsSuccess) {
+                writeCount = 6;
+            } else {
+                writeCount++;
+                log.error("鍐欏叆杈撻�佺嚎鍙栨斁璐у畬鎴愬懡浠ゅ悗璇诲彇澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+            }
+        } while (writeCount < 5);
+
+        if (!write.IsSuccess) {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+            log.error("鍐欏叆杈撻�佺嚎鍙栨斁璐у畬鎴愮珯鐐规暟鎹け璐ャ�傝緭閫佺嚎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)));
+            log.info("杈撻�佺嚎鍙栨斁璐у畬鎴愬懡浠や笅鍙戠爜鍨涘畬鎴�  缁欒緭閫佺嚎鍐欎换鍔″畬鎴� [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol));
         }
 
 
     }
+
+    private void write(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 = "DB100." + index * 6;
+        String plcAddressStaNo = "DB100." + (index * 6 + 4);
+        Thread.sleep(100);
+        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 (!clearPLCData(plcAddressWorkNo, plcAddressStaNo, staProtocol.getSiteId())) {
+                writeCount++;
+                continue; // 閲嶆柊灏濊瘯娓呴浂
+            }
+
+            // **鍐欏叆鏂颁换鍔�**
+            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);
+    }
+
+    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;
+        }
+
+
+        // **鍐欏叆鏂颁换鍔�**
+        if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) {
+            writeFlag = true;
+            log.info("杈撻�佺嚎鍛戒护鍐欏叆鎴愬姛锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+        }
+
+        // **鍐欏叆澶辫触澶勭悊**
+        handleWriteFailure(staProtocol, writeFlag);
+    }
+
+    /**
+     * 娓呴浂 PLC 鏁版嵁骞堕獙璇佹竻闆舵槸鍚︽垚鍔�
+     */
+    private boolean clearPLCData(String plcAddressWorkNo, String plcAddressStaNo, int siteId) throws InterruptedException {
+        siemensS7Net.Write(plcAddressWorkNo, 0);
+        siemensS7Net.Write(plcAddressStaNo, (short) 0);
+        Thread.sleep(100); // 绛夊緟PLC璇嗗埆
+
+        OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+        if (readResult.IsSuccess) {
+            int readWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+            short readStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+            if (readWorkNo == 0 && readStaNo == 0) {
+                return true; // 娓呴浂鎴愬姛
+            }
+        }
+
+        log.warn("绔欑偣 {} 娓呴浂澶辫触锛屽皾璇曢噸鏂版竻闆�...", siteId);
+        return false;
+    }
+
+    /**
+     * 鍐欏叆鏂颁换鍔″埌 PLC 骞堕獙璇佹槸鍚︽垚鍔�
+     */
+    private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, StaProtocol staProtocol) throws InterruptedException {
+        OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, staProtocol.getStaNo());
+
+        OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, staProtocol.getWorkNo().intValue());
+
+        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 == staProtocol.getWorkNo().intValue() && staNo == staProtocol.getStaNo();
+            }
+        }
+        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;
+    }
+
+    /**
+     * 澶勭悊鍐欏叆澶辫触鐨勬儏鍐�
+     */
+    private void handleWriteFailure(StaProtocol staProtocol, boolean writeFlag) {
+        if (!writeFlag) {
+            StaProtocol currentStaProtocol = station.get(staProtocol.getSiteId());
+            if (currentStaProtocol.getWorkNo() == 0 && currentStaProtocol.getStaNo() == 0) {
+                currentStaProtocol.setPakMk(true);
+            }
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�侾LC缂栧彿={1}锛岀珯鐐规暟鎹�={2}",
+                    slave.getId(), JSON.toJSON(currentStaProtocol)));
+            log.error("杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ワ紝PLC缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(currentStaProtocol));
+        } 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));
+        }
+    }
+
+
     private void write2(StaProtocol staProtocol) throws InterruptedException {
         if (null == staProtocol) {
             return;
@@ -373,16 +678,16 @@
         int writeCount = 0;
         //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
         boolean writeFlag = false;
-        while(writeCount < 5){
-            writeResult = siemensS7Net.Write("DB100." + index*4, array);    // 宸ヤ綔鍙枫�佺洰鏍囩珯
+        while (writeCount < 5) {
+            writeResult = siemensS7Net.Write("DB100." + index * 4, array);    // 宸ヤ綔鍙枫�佺洰鏍囩珯
 
-            if(writeResult.IsSuccess){
+            if (writeResult.IsSuccess) {
                 Thread.sleep(200);
-                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*4, (short)4);
-                if(readResult.IsSuccess){
+                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + 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)){
+                    if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) {
                         //浠诲姟鍛戒护鍐欏叆鎴愬姛
                         writeFlag = true;
                         log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
@@ -392,7 +697,7 @@
                     } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
                         writeCount++;
                         OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                                slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                                slave.getId(), JSON.toJSON(staProtocol), writeCount));
                         log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
 
                     }
@@ -406,7 +711,7 @@
             } else {
                 writeCount++;
                 OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                        slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                        slave.getId(), JSON.toJSON(staProtocol), writeCount));
                 log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
 
             }
@@ -414,9 +719,9 @@
         }
 
         //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
-        if(!writeFlag){
+        if (!writeFlag) {
             staProtocol = station.get(staProtocol.getSiteId());
-            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+            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)));
@@ -432,7 +737,7 @@
 
             Integer siteId = staProtocol.getSiteId();
             staProtocol = station.get(siteId);
-            if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+            if ((siteId == 101 || siteId == 201) && (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0)) {
                 staProtocol.setPakMk(true);
             }
 
@@ -489,7 +794,7 @@
     /**
      * 蹇冭烦
      */
-    private void heartbeat(){
+    private void heartbeat() {
         if (heartBeatVal == 1) {
             heartBeatVal = 2;
         } else {
@@ -521,14 +826,14 @@
         ArrayList<Integer> staNos = staNos1;
         System.out.println(staNos.indexOf(129));
         System.out.println(staNos.size());
-        for (int i = 0; i<staNos.size(); i++) {
+        for (int i = 0; i < staNos.size(); i++) {
 //            System.out.println(i*2);
 //            System.out.println(i*2 + 200);
 //            System.out.println(i);
         }
         int index = staNos.indexOf(128);
-        System.out.println(index*2);
-        System.out.println(index*2 + 200);
+        System.out.println(index * 2);
+        System.out.println(index * 2 + 200);
     }
 
 //    public static void main(String[] args) throws Exception {

--
Gitblit v1.9.1