From 82374fe4b32d58956810f445b7889f1a370f1ab9 Mon Sep 17 00:00:00 2001
From: 1 <1>
Date: 星期一, 27 十月 2025 15:26:13 +0800
Subject: [PATCH] #配置信号

---
 src/main/java/com/zy/core/thread/RgvThread.java |  130 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 110 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index c41d911..d8e1bed 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -5,18 +5,13 @@
 import HslCommunication.Profinet.Siemens.SiemensPLCS;
 import HslCommunication.Profinet.Siemens.SiemensS7Net;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 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.entity.BasRgv;
-import com.zy.asrs.entity.BasRgvMap;
-import com.zy.asrs.entity.BasRgvOpt;
-import com.zy.asrs.service.BasDevpService;
-import com.zy.asrs.service.BasRgvMapService;
-import com.zy.asrs.service.BasRgvOptService;
-import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
 import com.zy.common.utils.News;
 import com.zy.core.RgvThread2;
 import com.zy.core.ThreadHandler;
@@ -35,6 +30,7 @@
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
+import java.sql.Wrapper;
 import java.text.MessageFormat;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -64,15 +60,17 @@
     //閿佸畾鏍囪
     private boolean PakMk = true;
     //鍏ュ簱鏍囪
-    private boolean PakIn = true;
-    //鍑哄簱鏍囪
-    private boolean PakOut = true;
-    //鏍规嵁璺濈璺宠繃鍙栬揣
-    private boolean PakRgv = true;
-    //鎺ラ┏鏍囪
-    private boolean PakToCrn = true;
+//    private boolean PakIn = true;
+//    //鍑哄簱鏍囪
+//    private boolean PakOut = true;
+//    //鏍规嵁璺濈璺宠繃鍙栬揣
+//    private boolean PakRgv  = true;
+//    //鎺ラ┏鏍囪
+//    private boolean PakToCrn = true;
     // 浠诲姟閿佸畾
-    private boolean Paking = true;
+    private boolean Paking  = true;
+//    //杩炵画浠诲姟涓嬪彂
+//    private boolean PakAll = true;
 
     public RgvThread(RgvSlave slave) {
         this.slave = slave;
@@ -123,9 +121,10 @@
         }
     }
     private static final Set<Integer> specialSites = new HashSet<>(
-            Arrays.asList(1004,1014,1018,1028,1035));
+            Arrays.asList(1004,1014,1018,1028,1035,2006,2012,2018,2024,2030));
     public static final Map<Integer, Integer> StaPosition = new HashMap<Integer, Integer>() {{
         put(1004, 1001);put(1014, 1011);put(1018, 1015);put(1028, 1025);put(1035, 1032);
+        put(2006, 2004);put(2012, 2010);put(2018, 2016);put(2024, 2022);put(2030, 2028);
 
     }};
     public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
@@ -234,15 +233,48 @@
             buffer[byteIndex] &= ~(1 << bitIndex); // 娓呴浂
         }
     }
+    private void updateFlagInDb(String field, boolean value) {
+        try {
+            BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+
+            EntityWrapper<BasRgv> wrapper = new EntityWrapper<>();
+            wrapper.eq("rgv_no", slave.getId());
+
+            BasRgv entity = new BasRgv();
+            switch (field) {
+                case "pak_mk":    entity.setPakMk(value ? "1" : "0"); break;
+                case "pak_in":    entity.setPakIn(value ? "1" : "0"); break;
+                case "pak_out":   entity.setPakOut(value ? "1" : "0"); break;
+                case "pak_rgv":   entity.setPakRgv(value ? "1" : "0"); break;
+                case "pak_to_crn":entity.setPakToCrn(value ? "1" : "0"); break;
+                case "paking":entity.setPaking(value ? "1" : "0"); break;
+                case "pak_all":entity.setPakAll(value ? "1" : "0"); break;
+                default:
+                    log.warn("鏈煡鏍囧織浣嶅瓧娈�: {}", field);
+                    return;
+            }
+
+            basRgvService.update(entity, wrapper);
+//            log.info("RGV鏍囧織浣嶆洿鏂版垚鍔� [rgv_no:{}] {}={}", slave.getId(), field, value ? "1" : "0");
+
+        } catch (Exception e) {
+            log.error("鏇存柊RGV鏍囧織浣嶅紓甯� [rgv_no:{}] {}={} 閿欒锛歿}", slave.getId(), field, value, e.getMessage());
+        }
+    }
+
+
+    public void setPakMk(boolean pakMk) {
+        this.PakMk = pakMk;
+        updateFlagInDb("pak_mk", pakMk);
+    }
 
     /**
      * 璇诲彇鐘舵��
      */
     private void readStatus(){
         try {
-            ArrayList<Integer> staNos = getStaNo();
 
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 38);
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 42);
             if (result.IsSuccess) {
                 if (null == rgvProtocol) {
                     rgvProtocol = new RgvProtocol();
@@ -274,8 +306,54 @@
                 rgvProtocol.setErr10(status3[1]);
                 rgvProtocol.setErr11(status3[2]);
                 rgvProtocol.setErr12(status3[3]);
-                BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
+                boolean[] statusErr = siemensNet.getByteTransform().TransBool(result.Content, 36, 6);
+                rgvProtocol.setEmergencyStop(statusErr[0]);       // 鎬ュ仠瑙﹀彂
+                rgvProtocol.setSlot1EmptyNoData(statusErr[1]);   // 1鍙蜂綅鏈夌墿鏃犺祫鏂�
+                rgvProtocol.setSlot2EmptyNoData(statusErr[2]);   // 2鍙蜂綅鏈夌墿鏃犺祫鏂�
+                rgvProtocol.setCommandErrorChainConflict(statusErr[3]); // 鍛戒护閿欒璧伴摼鏉″啿绐�
+                rgvProtocol.setTargetPositionIssue(statusErr[4]); // 鐩爣浣嶄笅鍙戦敊璇�
+                rgvProtocol.setTravelInverterError(statusErr[5]); // 璧拌鍙橀鍣ㄥ紓甯�
+                rgvProtocol.setPhotoelectric1Error(statusErr[6]); // 1鍙峰厜鐢靛紓甯�
+                rgvProtocol.setPhotoelectric2Error(statusErr[7]); // 2鍙峰厜鐢靛紓甯�
+                rgvProtocol.setTimeoutConnectionWithLine(statusErr[8]); // 涓庤緭绾挎椂鎺ヨ秴鏃�
+                rgvProtocol.setLeftRollerTimeout(statusErr[9]);    // 宸︿晶婊氱瓛杩愯瓒呮椂
+                rgvProtocol.setRightRollerTimeout(statusErr[10]);   // 鍙充晶婊氱瓛杩愯瓒呮椂
+                rgvProtocol.setRgvRunTimeout(statusErr[11]);        // rgv杩愯瓒呮椂
+                rgvProtocol.setPosition1ChainInverterError(statusErr[12]); // 1鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
+                rgvProtocol.setPosition2ChainInverterError(statusErr[13]); // 2鍙峰伐浣嶉摼鏉″彉棰戝櫒寮傚父
+                rgvProtocol.setFrontRearLimit(statusErr[14]);      // 鍓嶅悗鏋侀檺浣�
+                rgvProtocol.setEmergencyButton(statusErr[15]);     // 鎬ュ仠鎸夐挳
+                rgvProtocol.setForwardButton(statusErr[16]);       // 鍓嶈繘鎸夐挳
+                rgvProtocol.setReverseButton(statusErr[17]);       // 鍚庨��鎸夐挳
+                rgvProtocol.setLocalRemote(statusErr[18]);         // 鏈湴/杩滅▼
+                rgvProtocol.setReset(statusErr[19]);               // 澶嶄綅
+                rgvProtocol.setTravelBrakeSwitch(statusErr[20]);   // 璧拌鎶遍椄寮�鍏抽挳
+                rgvProtocol.setTravelSpeedLimitPhotoelectric(statusErr[21]); // 璧拌寮哄埗鍑忛�熷厜鐢�
+                rgvProtocol.setLeftOverlimit1(statusErr[22]);      // 宸﹁秴闄� 1
+                rgvProtocol.setRightOverlimit1(statusErr[23]);     // 鍙宠秴闄� 1
+                rgvProtocol.setLeftAtPosition1(statusErr[24]);     // 宸﹀埌浣� 1
+                rgvProtocol.setRightAtPosition1(statusErr[25]);    // 鍙冲埌浣� 1
+                rgvProtocol.setChainForward1(statusErr[26]);       // 閾炬潯鍓嶈繘 1
+                rgvProtocol.setChainReverse1(statusErr[27]);       // 閾炬潯鍚庨�� 1
+                rgvProtocol.setInverterAlarm(statusErr[28]);       // 鍙橀鍣ㄦ姤璀�
+                rgvProtocol.setLeftOverlimit2(statusErr[29]);      // 宸﹁秴闄� 2
+                rgvProtocol.setRightOverlimit2(statusErr[30]);     // 鍙宠秴闄� 2
+                rgvProtocol.setLeftAtPosition2(statusErr[31]);     // 宸﹀埌浣� 2
+                rgvProtocol.setRightAtPosition2(statusErr[32]);    // 鍙冲埌浣� 2
+                rgvProtocol.setCargoSpeedReduction(statusErr[33]); // 璐х墿鍑忛��
+                rgvProtocol.setConveyorInverterAlarm2(statusErr[34]); // 杈撻�佸彉棰戝櫒鎶ヨ 2
+                rgvProtocol.setRightConveyor2(statusErr[35]);      // 鍙宠緭閫� 2
+                rgvProtocol.setLeftConveyor2(statusErr[36]);       // 宸﹁緭閫� 2
+                if(rgvProtocol.getStatus() == 99){
+                    rgvProtocol.setErrorMk(true);//鑻ュ瓨鍦ㄥ紓甯歌Е鍙戝啓鍏�
+                }else{
+                    rgvProtocol.setWriteMk(true);//鏃犲紓甯稿悗鎵嶈兘缁х画鍐欏叆
+                    rgvProtocol.setErrorMk(false);
+                }
 
+
+
+//                BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
                 OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
                 try {
                     // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
@@ -283,6 +361,18 @@
                     BasRgv basRgv = new BasRgv();
                     basRgv.setRgvNo(slave.getId());
                     basRgv.setRgvSts((int)rgvProtocol.getMode());
+                    if(rgvProtocol.isWriteMk() && rgvProtocol.isErrorMk()){
+                        try {
+                            // 鏃ュ織璁板綍寮傚父鎯呭喌
+                            BasRgvErrorLog basRgvErrorLogs;
+                            basRgvErrorLogs = rgvProtocol.toSqlModelError();
+                            BasRgvErrorLogService basRgvErrorLogService = SpringUtils.getBean(BasRgvErrorLogService.class);
+                            basRgvErrorLogService.insert(basRgvErrorLogs);
+                            rgvProtocol.setWriteMk(false);
+                        } catch (Exception ignore) {
+                            log.error(ignore.getMessage());
+                        }
+                    }
                     if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
                         log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
                     }

--
Gitblit v1.9.1