From 4cd0f495beb0cca53a6c49c4e8ccdacad10c6961 Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期一, 14 七月 2025 17:18:16 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/core/thread/SiemensDevpThread.java |  226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 216 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 23ff938..356307c 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -58,6 +58,8 @@
         add(144);add(145);add(146);add(147);
         add(148);add(149);add(150);add(151);
         add(152);add(153);
+        add(170);
+        add(171);
     }};
     public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
         add(200);add(201);add(202);add(203);
@@ -67,6 +69,15 @@
         add(216);add(217);add(218);add(219);
         add(220);add(221);add(222);add(2000);
     }};
+
+    public static final ArrayList<Integer> staNos1Super = new ArrayList<Integer>() {{
+        add(118);add(119);add(120);add(121);add(122);add(123);add(131);add(135);add(147);
+    }};
+
+    public static final ArrayList<Integer> staNos2Super = new ArrayList<Integer>() {{
+        add(213);
+    }};
+
 
     /**
      * 鏉$爜鏁伴噺
@@ -86,6 +97,9 @@
     public IoModeType ioModeOf4F = IoModeType.NONE;
 //    public IoModeType ioMode = IoModeType.NONE;
 
+
+    private boolean connectDev = false;
+
     public SiemensDevpThread(DevpSlave slave) {
         this.slave = slave;
     }
@@ -101,10 +115,121 @@
         }
     }
 
+    private ArrayList<Integer> getStaNoSuper() {
+        switch (slave.getId()) {
+            case 1:
+                return staNos1Super;
+            case 2:
+                return staNos2Super;
+            default:
+                throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+        }
+    }
+
     @Override
     @SuppressWarnings("InfiniteLoopStatement")
     public void run() {
-        connect();
+        connectDev = this.connect();
+        while(!connectDev){
+            try {
+                connectDev = this.connect();
+                Thread.sleep(100);
+            } catch (Exception e){
+
+            }
+        }
+
+        // 鍚姩绾跨▼鑷姩閲嶈繛
+        new Thread(this::devConnect).start();
+
+        // 鍚姩璇绘暟鎹嚎绋�
+        new Thread(this::readStatusDev).start();
+
+        // 鍚姩浠诲姟涓嬪彂绾跨▼
+        new Thread(this::writeStatusDev).start();
+
+    }
+
+    /**
+     * 鍒濆鍖栫珯鐐圭姸鎬�
+     */
+    private void initSite() {
+        try{
+            ArrayList<Integer> staNos = getStaNo();
+            // 绔欑偣缂栧彿
+            for (Integer siteId : staNos) {
+                StaProtocol staProtocol = station.get(siteId);
+                if (null == staProtocol) {
+                    staProtocol = new StaProtocol();
+                    staProtocol.setSiteId(siteId);
+                    station.put(siteId, staProtocol);
+                }
+                staProtocol.setSiteId(siteId);
+                staProtocol.setWorkNo(0);    // ID
+                staProtocol.setAutoing(false);      // 鑷姩
+                staProtocol.setLoading(false);      // 鏈夌墿
+                staProtocol.setInEnable(false);     // 鍙叆
+                staProtocol.setOutEnable(false);    // 鍙嚭
+                staProtocol.setEmptyMk(false);      // 绌烘澘淇″彿
+                staProtocol.setStaNo(0);     // 鐩爣绔�
+
+                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
+                    staProtocol.setPakMk(true);
+                }
+            }
+
+
+            // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+            try {
+                List<BasDevp> basDevps = new ArrayList<>();
+                for (Integer siteId : staNos) {
+                    StaProtocol staProtocol = station.get(siteId);
+                    basDevps.add(staProtocol.toSqlModel());
+                }
+
+                BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
+                if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
+                    throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [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("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            }
+        } catch (Exception e){
+            try{
+                log.error(e.getMessage());
+            } catch (Exception e1){
+
+            }
+            log.error("鍒濆鍖栫珯鐐圭姸鎬佸紓甯�");
+        }
+    }
+
+
+
+    private void devConnect() {
+        while (true) {
+            try {
+                Thread.sleep(1000L);
+                if(!connectDev){
+                    try {
+                        connectDev = this.connect();
+                        Thread.sleep(100L);
+                    } catch (Exception e){
+
+                    }
+                }
+            } catch (Exception e) {
+
+                log.error("rgv杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                initSite();
+//                e.printStackTrace();
+            }
+        }
+    }
+
+    private void writeStatusDev() {
         while (true) {
             try {
                 int step = 1;
@@ -115,14 +240,10 @@
                 switch (step) {
                     // 璇绘暟鎹�
                     case 1:
-                        read();
+//                        read();
                         break;
                     // 鍐欐暟鎹� ID+鐩爣绔�
                     case 2:
-//                        write3((StaProtocol)task.getData());
-//                        Thread.sleep(400);
-//                        write4((StaProtocol)task.getData());
-//                        Thread.sleep(400);
                         write((StaProtocol)task.getData());
                         break;
                     // 鍐欐暟鎹� ID+鐩爣绔� 鐮佸灈瀹屾垚  缁欒緭閫佺嚎鍐欎换鍔″畬鎴�
@@ -147,10 +268,44 @@
 //                heartbeat();
                 Thread.sleep(400);
             } catch (Exception e) {
-                e.printStackTrace();
+//                e.printStackTrace();
+                try{
+                    log.error("dev鍐欑嚎绋嬪紓甯�"+e.getMessage());
+
+                } catch (Exception e1){
+
+                }
+                log.error("DEV鏁版嵁鍐欏叆绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+
             }
 
         }
+
+    }
+    private void readStatusDev() {
+        while (true) {
+            try {
+                if(!connectDev){
+                    try {
+                        Thread.sleep(1000L);
+                    } catch (Exception e){
+
+                    }
+                    continue;
+                }
+                Thread.sleep(200);
+                read();
+
+            } catch (Exception e) {
+                log.error("RGV璇荤嚎绋嬪紓甯�"+e.getMessage());
+
+                log.error("RGV鏁版嵁璇诲彇绾跨▼寮傚父锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                initSite();
+//                e.printStackTrace();
+            }
+
+        }
+
     }
 
     @Override
@@ -179,11 +334,35 @@
 //        // 鏇存柊鍏ュ嚭搴撴ā寮�
 //        updateIoMode();
         ArrayList<Integer> staNos = getStaNo();
+        ArrayList<Integer> staNoSuper = getStaNoSuper();
         int staNoSize = staNos.size();
+        int staNoSuperSize = staNoSuper.size();
         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); // 绔欑偣缂栧彿
+                if (siteId==119){
+                    StaProtocol staProtocol = station.get(siteId);
+                    if (null == staProtocol) {
+                        staProtocol = new StaProtocol();
+                        staProtocol.setSiteId(siteId);
+                        station.put(siteId, staProtocol);
+                    }
+                    staProtocol.setWorkNo(0);     // 宸ヤ綔鍙�
+
+                    staProtocol.setStaNo(0);   // 鐩爣绔�
+
+                    boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2);
+                    staProtocol.setAutoing(false);  // 鑷姩
+                    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]);      // 浣庡簱浣�
+                    continue;
+                }
                 StaProtocol staProtocol = station.get(siteId);
                 if (null == staProtocol) {
                     staProtocol = new StaProtocol();
@@ -203,7 +382,6 @@
                 staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
                 staProtocol.setHigh(status[6]);     // 楂樺簱浣�
                 staProtocol.setLow(status[7]);      // 浣庡簱浣�
-
                 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                     staProtocol.setPakMk(true);
                 }
@@ -295,6 +473,22 @@
             staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0)));
         }
 
+        //绔欑偣瓒呯骇鏈夌墿淇″彿
+        Thread.sleep(200);
+        OperateResultExOne<byte[]> resultStaSuper = siemensS7Net.Read("DB101.1320",(short)(staNoSuperSize*2));
+        if (resultStaSuper.IsSuccess) {
+            for (int i = 0; i < staNoSuperSize; i++) {
+                Integer siteId = staNoSuper.get(i); // 绔欑偣缂栧彿
+                StaProtocol staProtocol = station.get(siteId);
+                if (null == staProtocol) {
+                    staProtocol = new StaProtocol();
+                    staProtocol.setSiteId(siteId);
+                    station.put(siteId, staProtocol);
+                }
+                short loadingSuper = siemensS7Net.getByteTransform().TransInt16(resultStaSuper.Content, i * 2);
+                staProtocol.setLoadingSuper(loadingSuper==0);   // 鐩爣绔�
+            }
+        }
 
 
         if (result.IsSuccess) {
@@ -322,6 +516,7 @@
         } 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()));
 //            log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            initSite();
         }
     }
 
@@ -382,7 +577,7 @@
             case 118:
                 index=0;
                 break;
-            case 119:
+            case 171:
                 index=1;
                 break;
             case 120:
@@ -449,7 +644,7 @@
             case 118:
                 index=0;
                 break;
-            case 119:
+            case 171:
                 index=1;
                 break;
             case 120:
@@ -532,6 +727,17 @@
         }
     }
 
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setReportSign(Integer siteId, boolean pakMk) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setReportSign(pakMk);
+        }
+    }
+
     @Override
     public void close() {
         siemensS7Net.ConnectClose();

--
Gitblit v1.9.1