From c9b270dae703ee077a4e41013d7662c5e61afd29 Mon Sep 17 00:00:00 2001
From: 野心家 <1051256694@qq.com>
Date: 星期一, 26 五月 2025 23:02:15 +0800
Subject: [PATCH] #ZH

---
 src/main/java/com/zy/core/thread/SiemensDevpThread.java |  189 +++++++++++++++--------------------------------
 1 files changed, 61 insertions(+), 128 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 25d9512..4e4031f 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -8,9 +8,11 @@
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.service.BasDevpService;
 import com.zy.core.DevpThread;
+import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.cache.SlaveConnection;
@@ -19,6 +21,7 @@
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.protocol.StaProtocol;
+import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
@@ -41,20 +44,30 @@
     private SiemensS7Net siemensS7Net;
     private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
     private short heartBeatVal = 1;
-    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
-        add(101);add(102);add(103);add(104);
-        add(201);add(202);add(203);add(204);
-        add(301);add(302);add(303);add(304);add(305);add(306);
+    private boolean result = false;
+    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(108);add(109);add(110);add(111);add(112);add(113);add(114);add(115);
     }};
-
-    /**
-     * 鏉$爜鏁伴噺
-     */
-    private int barcodeSize = 3;
-    public IoModeType ioMode = IoModeType.NONE;
+    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+        add(116);add(117);add(118);add(119);add(120);
+        add(121);add(122);add(123);add(124);add(125);add(126);add(127);add(128);add(129);add(130);
+        add(131);add(132);add(133);
+    }};
 
     public SiemensDevpThread(DevpSlave slave) {
         this.slave = slave;
+    }
+
+    private ArrayList<Integer> getStaNo() {
+        switch (slave.getId()) {
+            case 1:
+                return staNos1;
+            case 2:
+                return staNos2;
+            default:
+                throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+        }
     }
 
     @Override
@@ -73,10 +86,10 @@
                     case 1:
                         read();
                         break;
-                    // 鍐欐暟鎹� ID+鐩爣绔�
-                    case 2:
-                        write((StaProtocol)task.getData());
-                        break;
+//                    // 鍐欐暟鎹� ID+鐩爣绔�
+//                    case 2:
+//                        write((StaProtocol)task.getData());
+//                        break;
                     default:
                         break;
                 }
@@ -92,7 +105,7 @@
 
     @Override
     public boolean connect() {
-        boolean result = false;
+        result = false;
         siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
         siemensS7Net.setRack(slave.getRack().byteValue());
         siemensS7Net.setSlot(slave.getSlot().byteValue());
@@ -113,10 +126,9 @@
      * 璇诲彇鐘舵�� ====> 鏁村潡plc
      */
     private void read() throws InterruptedException {
-//        // 鏇存柊鍏ュ嚭搴撴ā寮�
-//        updateIoMode();
+        ArrayList<Integer> staNos = getStaNo();
         int staNoSize = staNos.size();
-        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize*4));
+        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB128.0", (short) (staNoSize*4));
         if (result.IsSuccess) {
             for (int i = 0; i < staNoSize; i++) {
                 Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
@@ -126,69 +138,12 @@
                     staProtocol.setSiteId(siteId);
                     station.put(siteId, staProtocol);
                 }
-                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4));     // 宸ヤ綔鍙�
-
-                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4 + 2));   // 鐩爣绔�
-            }
-        }
-//        Thread.sleep(200);
-//        OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 186);
-//        if (result0.IsSuccess) {
-//            for (int i = 0; i < 93; i++) {
-//                Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
-//                StaProtocol staProtocol = station.get(siteId);
-//                if (null == staProtocol) {
-//                    staProtocol = new StaProtocol();
-//                    staProtocol.setSiteId(siteId);
-//                    station.put(siteId, staProtocol);
-//                }
-//                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result0.Content, i*2));   // 鐩爣绔�
-//            }
-//        }
-        Thread.sleep(200);
-        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.100", (short) (staNoSize));
-        if (result1.IsSuccess) {
-            for (int i = 0; i < staNoSize; i++) {
-                Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i, 1);
-                StaProtocol staProtocol = station.get(siteId);
-                staProtocol.setAutoing(status[0]);  // 鑷姩
-                staProtocol.setLoading(status[1]);  // 鏈夌墿
-                staProtocol.setInEnable(status[2]); // 鍙叆
-                staProtocol.setOutEnable(status[3]);// 鍙嚭
-                staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
-                staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
-                staProtocol.setHigh(status[6]);     // 楂樺簱浣�
-                staProtocol.setLow(status[7]);      // 浣庡簱浣�
-
-                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
-                    staProtocol.setPakMk(true);
-                }
+                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransUInt32(result.Content, i*4));     // 宸ヤ綔鍙�
             }
         }
 
-        Thread.sleep(200);
-        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.150",(short)(barcodeSize*8));
-        if (result2.IsSuccess) {
-            for (int i = 0; i < barcodeSize; 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);
-                }
-            }
-
-        }
-
-//        OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0");
-//        if (result2.IsSuccess) {
-//            this.ioMode = IoModeType.get(result2.Content);
-//        }
-
-        if (result.IsSuccess && result1.IsSuccess) {
-
+        if (result.IsSuccess) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
-
             // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
             try {
                 List<BasDevp> basDevps = new ArrayList<>();
@@ -197,9 +152,13 @@
                     basDevps.add(staProtocol.toSqlModel());
                 }
 
-                BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
-                if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
-                    throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
+                try{
+                    BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
+                    if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
+                        throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
+                    }
+                } catch (Exception e){
+                    log.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
                 }
             } catch (Exception e) {
                 e.printStackTrace();
@@ -220,17 +179,30 @@
         if (null == staProtocol) {
             return;
         }
+        ArrayList<Integer> staNos = getStaNo();
         int index = staNos.indexOf(staProtocol.getSiteId());
-        short[] array = new short[10];
-        array[0] = staProtocol.getWorkNo();
-        array[1] = staProtocol.getStaNo();
-        OperateResult write = siemensS7Net.Write("DB100." + index*4, array);
+//        int[] array = new int[2];
+//        array[0] = staProtocol.getWorkNo();
+//        array[1] = staProtocol.getStaNo();
+//        OperateResult write = siemensS7Net.Write("DB100." + index*8, array);
 
-//        OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
-//        Thread.sleep(500);
-//        OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo());    // 鐩爣绔�
+        OperateResult write = null;
+        OperateResult write1 = null;
+        //浠诲姟涓嬪彂娆℃暟
+        int writeCount = 0;
+        do {
+            write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue());    // 鐩爣绔�
+//            Thread.sleep(500);
+            write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+            if(write.IsSuccess || write1.IsSuccess){
+                writeCount=6;
+            }else {
+                writeCount++;
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+            }
+        }while (writeCount<5);
 
-        if (!write.IsSuccess) {
+        if (!write.IsSuccess || !write1.IsSuccess) {
             staProtocol = station.get(staProtocol.getSiteId());
             if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
                 staProtocol.setPakMk(true);
@@ -240,16 +212,6 @@
         } 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 updateIoMode() throws InterruptedException {
-        if (this.ioMode != IoModeType.NONE) {
-            if (!siemensS7Net.Write("DB200", this.ioMode.id).IsSuccess) {
-                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎1F鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
-                log.error("鍐欏叆杈撻�佺嚎1F鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
-            }
         }
     }
 
@@ -285,37 +247,8 @@
     }
 
     public static void main(String[] args) {
-        System.out.println(staNos.indexOf(129));
-        System.out.println(staNos.size());
-        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);
+
     }
 
-//    public static void main(String[] args) throws Exception {
-//        DevpSlave slave = new DevpSlave();
-//        slave.setIp("192.168.2.125");
-//        SiemensDevpThread devpThread = new SiemensDevpThread(slave);
-//        devpThread.connect();
-//        devpThread.read();
-//        // 鍐�
-//        StaProtocol staProtocol = devpThread.getStation().get(1);
-//        staProtocol.setWorkNo((short) 232);
-//        staProtocol.setStaNo((short) 6);
-//        staProtocol.setAutoing(true);
-//        staProtocol.setEmptyMk(true);
-//        staProtocol.setInEnable(true);
-//        devpThread.write(staProtocol);
-//        System.out.println("----------------------------------------");
-//        // 璇�
-//        devpThread.read();
-//        System.out.println(JSON.toJSONString(devpThread.station));
-//
-//    }
 
 }

--
Gitblit v1.9.1