From 1b9f41e12e3ee8ac8bbc388eab7585300bdab75a Mon Sep 17 00:00:00 2001
From: 野心家 <1051256694@qq.com>
Date: 星期二, 27 五月 2025 16:57:35 +0800
Subject: [PATCH] #ZH

---
 src/main/java/com/zy/asrs/controller/SiteController.java     |    2 
 src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java |   16 ++
 src/main/java/com/zy/asrs/controller/RgvController.java      |   18 ++
 src/main/java/com/zy/asrs/controller/OpenController.java     |   15 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java  |   78 +++++++++
 src/main/java/com/zy/core/cache/RgvErrCache.java             |  102 ++++++++++++
 src/main/java/com/zy/core/cache/CrnErrCache.java             |  101 ++++++++++++
 src/main/java/com/zy/asrs/controller/CrnController.java      |    1 
 src/main/java/com/zy/core/DevpThread.java                    |    1 
 pom.xml                                                      |   12 
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java    |    1 
 src/main/webapp/views/deviceOperate/rgvOperate.html          |    4 
 src/main/java/com/zy/core/model/protocol/StaProtocol.java    |    1 
 src/main/java/com/zy/core/thread/RgvThread.java              |   62 +++++++
 src/main/java/com/zy/core/thread/SiemensCrnThread.java       |    9 +
 src/main/webapp/views/deviceOperate/devpOperate.html         |    8 +
 src/main/java/com/zy/core/model/protocol/CrnErrProtocol.java |   16 ++
 src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java         |    2 
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java    |    1 
 src/main/webapp/views/deviceOperate/crnOperate.html          |    4 
 src/main/java/com/zy/asrs/domain/vo/CrnListVo.java           |    1 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java      |   11 +
 22 files changed, 445 insertions(+), 21 deletions(-)

diff --git a/pom.xml b/pom.xml
index bf09a9c..2b6fe46 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,12 +61,12 @@
 <!--        </dependency>-->
 
         <!-- 鏄惧紡鎺掗櫎slf4j-simple -->
-<!--        <dependency>-->
-<!--            <groupId>org.slf4j</groupId>-->
-<!--            <artifactId>slf4j-simple</artifactId>-->
-<!--            <version>1.7.30</version>-->
-<!--            <scope>provided</scope> &lt;!&ndash; 鎴栫洿鎺ュ垹闄よ渚濊禆 &ndash;&gt;-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.7.30</version>
+            <scope>provided</scope> <!-- 鎴栫洿鎺ュ垹闄よ渚濊禆 -->
+        </dependency>
         <dependency>
             <groupId>com.dameng</groupId>
             <artifactId>DmJdbcDriver8</artifactId>
diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index cd1ae7f..4a7dc85 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -303,6 +303,7 @@
                 }
             }
             vo.setLaneNo(crnProtocol.getLaneNo());  //
+            vo.setErrorCrn(crnProtocol.getErrCrn());  //
             vo.setXspeed(crnProtocol.getXSpeed());  //  璧拌閫熷害锛坢/min)
             vo.setYspeed(crnProtocol.getYSpeed());  //  鍗囬檷閫熷害锛坢/min)
             vo.setZspeed(crnProtocol.getZSpeed());  //  鍙夌墮閫熷害锛坢/min)
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index ee44e22..33e41cb 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -551,13 +551,14 @@
             basRgvWmsParam.setStatusType(rgvStatus.getStatusType().desc);
             basRgvWmsParam.setSteNo(rgvSlave.getId());
             basRgvWmsParam.setSteErr(rgvStatus.getAlarm().longValue());
-            try{
-                BasRgvErr basRgvErr = basRgvErrService.selectById((long)rgvStatus.getAlarm$());
-
-                basRgvWmsParam.setSteErrM(basRgvErr.getErrName());
-            } catch (Exception e){
-                basRgvWmsParam.setSteErrM("鏈煡寮傚父");
-            }
+            basRgvWmsParam.setSteErrM(rgvStatus.getAlarmM());
+//            try{
+//                BasRgvErr basRgvErr = basRgvErrService.selectById((long)rgvStatus.getAlarm$());
+//
+//                basRgvWmsParam.setSteErrM(basRgvErr.getErrName());
+//            } catch (Exception e){
+//                basRgvWmsParam.setSteErrM("鏈煡寮傚父");
+//            }
             if (rgvStatus.getMode()!=1){
                 basRgvWmsParam.setSteErr(999L);
                 basRgvWmsParam.setSteErrM("闈炶嚜鍔紒锛侊紒");
diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
index b76d1f2..112568f 100644
--- a/src/main/java/com/zy/asrs/controller/RgvController.java
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -2,9 +2,11 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.asrs.entity.BasDevpPosition;
 import com.zy.asrs.service.BasDevpPositionService;
+import com.zy.core.cache.RgvErrCache;
 import com.zy.core.cache.RgvStatusCache;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.cache.TaskProtocolCache;
@@ -46,6 +48,7 @@
             map2.put("rgvPos", rgvProtocol.getRgvPos());
             map2.put("rgvPosDestination", rgvProtocol.getRgvPosDestination());
             map2.put("loaded", rgvProtocol.getLoaded().equals((short)-1)? "鏈煡":rgvProtocol.getLoaded()==1? "鏈夌墿":"鏃犵墿");
+            map2.put("errorRgv", RgvErrCache.getErrorDev(rgvProtocol.getRgvNo()));
             res.add(map2);
         }
         return R.ok().add(res);
@@ -113,6 +116,9 @@
         }
         if (rgvPosDestination == null || rgvPosDestination == 0){
             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut));
+            if (Cools.isEmpty(basDevpPosition)){
+                return R.error("鐩爣绔欑偣涓嶅瓨鍦�");
+            }
             rgvPosDestination = basDevpPosition.getPlcPosition();
         }
         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
@@ -168,6 +174,9 @@
             }
 
             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut));
+            if (Cools.isEmpty(basDevpPosition)){
+                return R.error("鐩爣绔欑偣涓嶅瓨鍦�");
+            }
             //鎵ц
             issuedPut.setTaskNo(Long.valueOf(taskNo));
             issuedPut.setTaskStatus(3);
@@ -210,6 +219,9 @@
             }
 
             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoTake));
+            if (Cools.isEmpty(basDevpPosition)){
+                return R.error("鍙栬揣绔欑偣涓嶅瓨鍦�");
+            }
             //鎵ц
             issuedTake.setTaskNo(Long.valueOf(taskNo));
             issuedTake.setTaskStatus(2);
@@ -257,6 +269,9 @@
             }
 
             BasDevpPosition basDevpPositionTake = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoTake));
+            if (Cools.isEmpty(basDevpPositionTake)){
+                return R.error("鍙栬揣绔欑偣涓嶅瓨鍦�");
+            }
             //鎵ц
             issuedTake.setTaskNo(Long.valueOf(taskNo));
             issuedTake.setTaskStatus(2);
@@ -268,6 +283,9 @@
             issuedTake.setDirection(basDevpPositionTake.getRgvSign()==1);
 
             BasDevpPosition basDevpPositionPut = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut));
+            if (Cools.isEmpty(basDevpPositionPut)){
+                return R.error("鐩爣绔欑偣涓嶅瓨鍦�");
+            }
             //鎵ц
             issuedPut.setTaskNo(Long.valueOf(taskNo));
             issuedPut.setTaskStatus(3);
diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
index cdb066b..076c199 100644
--- a/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -113,6 +113,8 @@
             vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
 //            vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "浣�" : "楂�");     //楂樹綆搴撲綅
             vo.setLocType1(devp.getDevNo()==102 ? "楂�" : "浣�");
+            vo.setWeight(staProtocol.getGrossWt().toString());
+            vo.setErrorDev(staProtocol.getErrorDev());
         }
         return R.ok().add(list);
     }
diff --git a/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java b/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java
index bff0249..fe895e9 100644
--- a/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/CrnListVo.java
@@ -112,6 +112,7 @@
 
     // 鍙嚭
     private String outEnable;
+    private String errorCrn;
 
     public void setXspeed(Float xspeed) {
         this.xspeed = Utils.scale(xspeed);
diff --git a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
index 4fa183e..df7b847 100644
--- a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
@@ -37,5 +37,7 @@
 
     //楂樹綆搴撲綅
     private String locType1 = "-";
+    private String weight = "-";
+    private String errorDev = "-";
     private String car = "-";
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 7ab88ac..585322f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -128,7 +128,7 @@
 
                     // 灏哄妫�娴嬪紓甯�
                     boolean back = false;
-                    String errMsg = "";
+                    String errMsg = "-";
                     if (staProtocol.getGrossWt()>=600){
                         errMsg = "瓒呴噸";
                         back = true;
@@ -177,6 +177,7 @@
                         staProtocol.setWorkNo(9999);
                         staProtocol.setStaNo(inSta.getBackSta());
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
+                        devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                         TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
                         if (taskWrk != null) {
@@ -217,6 +218,7 @@
                                         staProtocol.setWorkNo(taskWrk1.getWrkNo());
                                         staProtocol.setStaNo(staProtocol.getSiteId());
                                         devpThread.setPakMkWalk(staProtocol.getSiteId(), false);
+                                        devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
                                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                     }
                                 }
@@ -252,6 +254,7 @@
                                 staProtocol.setStaNo(inSta.getBackSta());
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
                                 devpThread.setPakMkWalk(staProtocol.getSiteId(), false);
+                                devpThread.setErrorDev(staProtocol.getSiteId(), e.getMessage());
                                 MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                 continue;
                             }
@@ -270,6 +273,8 @@
                             if (!Cools.isEmpty(jsonObject.getInteger("code")) && jsonObject.getInteger("code").equals(200)) {
                                 try {
                                     devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                    devpThread.setErrorDev(staProtocol.getSiteId(), "涓婃姤鎴愬姛绛夊緟浠诲姟");
+
                                 } catch (Exception e) {
                                     // 閫�鍥�
                                     log.error("鎵爜妫�娴嬬▼搴忓紓甯�" + inSta.getStaNo() + errMsg);
@@ -278,9 +283,18 @@
                                     staProtocol.setWorkNo(9999);
                                     staProtocol.setStaNo(inSta.getBackSta());
                                     devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                    devpThread.setErrorDev(staProtocol.getSiteId(), "涓婃姤鎴愬姛閿佸畾澶辫触");
+
                                     MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                 }
 
+                            } else {
+                                // 閫�鍥�
+                                staProtocol.setWorkNo(9999);
+                                staProtocol.setStaNo(inSta.getBackSta());
+                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                devpThread.setErrorDev(staProtocol.getSiteId(), jsonObject.getString("msg"));
+                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             }
                         } else {
                             // 閫�鍥�
@@ -289,6 +303,7 @@
                             staProtocol.setWorkNo(9999);
                             staProtocol.setStaNo(inSta.getBackSta());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            devpThread.setErrorDev(staProtocol.getSiteId(), "鎵爜鍏ュ簱鎵爜澶辫触锛侊紒锛佹壂鐮佸�硷細"+barcode);
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
                             if (taskWrk != null) {
@@ -558,6 +573,7 @@
                                         staProtocol.setWorkNo(taskWrk1.getWrkNo());
                                         staProtocol.setStaNo(BarcodeUtils.getStaNo(staProtocol.getSiteId()));
                                         devpThread.setPakMkWalk(staProtocol.getSiteId(), false);
+                                        devpThread.setErrorDev(staProtocol.getSiteId(), "-");
                                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
 
                                         Date now = new Date();
@@ -721,8 +737,19 @@
                         crnProtocol.setLastIo("O");
                     }
                 }
+            }  else {
+                if (crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getStatusType() == CrnStatusType.IDLE){
+                    if (crnProtocol.getTaskNo() != 0){
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "宸ヤ綔鍙蜂笉涓�0");
+                    }
+                    if (crnProtocol.getLoaded() != 0){
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "杞借揣鍙版湁鐗�");
+                    }
+                    if (crnProtocol.getForkPos() != 0){
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "璐у弶浣嶇疆涓嶅湪涓綅");
+                    }
+                }
             }
-
         }
     }
 
@@ -765,12 +792,20 @@
                 }
 
                 // 鍫嗗灈鏈烘帶鍒惰繃婊�
-                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE)) {
+                    devpThread.setErrorDev(staProtocol.getSiteId(), "鍫嗗灈鏈洪潪绌洪棽");
+                    continue;
+                }
+                if (crnProtocol.getTaskNo() != 0) {
+                    devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄伐浣滃彿涓嶄负0");
+                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "宸ヤ綔鍙蜂笉涓�0");
                     continue;
                 }
 
                 // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                 if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
+                    devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄瓨鍦ㄥ悐杞︿换鍔�");
+                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄瓨鍦ㄦ墽琛屼腑鍚婅溅浠诲姟");
                     continue;
                 }
 
@@ -832,9 +867,15 @@
 //                crnCommand.setCommand((short) 1);
                 if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
                     log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
+                    devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
+                    CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "杩愯鍛戒护涓嬪彂澶辫触");
+
                     throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
                 } else {
                     try {
+                        devpThread.setErrorDev(staProtocol.getSiteId(), "-");
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "-");
+
                         taskWrkService.updateById(taskWrk);
                     } catch (Exception e) {
                         log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo());
@@ -923,12 +964,21 @@
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                         // 鍫嗗灈鏈烘帶鍒惰繃婊�
-                        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-                            break;
+                        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE)) {
+                            devpThread.setErrorDev(staProtocol.getSiteId(), "鍫嗗灈鏈洪潪绌洪棽");
+                            continue;
+                        }
+                        if (crnProtocol.getTaskNo() != 0) {
+                            devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄伐浣滃彿涓嶄负0");
+                            CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "宸ヤ綔鍙蜂笉涓�0");
+
+                            continue;
                         }
 
                         // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                         if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
+                            devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄瓨鍦ㄥ悐杞︿换鍔�");
+                            CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鍫嗗灈鏈哄瓨鍦ㄦ墽琛屼腑鍚婅溅浠诲姟");
                             break;
                         }
 
@@ -947,6 +997,8 @@
                         command.setCommand((short) 1);
                         if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command))) {
                             log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屽贩閬�={}锛屼换鍔℃暟鎹�={}", slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command));
+                            devpThread.setErrorDev(staProtocol.getSiteId(), crnProtocol.getLaneNo()+"宸烽亾鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
+                            CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "杩愯鍛戒护涓嬪彂澶辫触");
                             throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
                         } else {
                             try {
@@ -956,6 +1008,9 @@
                                 taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);
                                 taskWrk.setModiTime(now);
                                 taskWrk.setExecuteTime(now);
+                                devpThread.setErrorDev(staProtocol.getSiteId(), "-");
+                                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "-");
+
                                 if (taskWrkMapper.updateById(taskWrk) == 0) {
                                     log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", taskWrk.getWrkNo());
                                 }
@@ -994,6 +1049,19 @@
 //                                throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触");
                             }
                         }
+                    } else {
+                        CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "-");
+                        if (staProtocol.isAutoing()){
+                            if (staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")){
+                                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "鑳藉嚭锛氭湭鎵撳紑");
+                            }
+                            if (staProtocol.getWorkNo() == 0){
+                                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "宸ヤ綔鍙蜂笉涓�0");
+                            }
+                            if (staProtocol.isOutEnable()){
+                                CrnErrCache.updateCrnErr(crnProtocol.getCrnNo(), "娌℃湁鍙嚭");
+                            }
+                        }
                     }
                 }
             }
diff --git a/src/main/java/com/zy/core/DevpThread.java b/src/main/java/com/zy/core/DevpThread.java
index ecdfafc..5e9e167 100644
--- a/src/main/java/com/zy/core/DevpThread.java
+++ b/src/main/java/com/zy/core/DevpThread.java
@@ -11,5 +11,6 @@
     void setPakMk(Integer siteId, boolean pakMk);
     void setPakMkWalk(Integer siteId, boolean pakMkWalk);
     void setGrossWt(Integer siteId, Double grossWt);
+    void setErrorDev(Integer siteId, String msgErr);
 
 }
diff --git a/src/main/java/com/zy/core/cache/CrnErrCache.java b/src/main/java/com/zy/core/cache/CrnErrCache.java
new file mode 100644
index 0000000..f1af02f
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/CrnErrCache.java
@@ -0,0 +1,101 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.CrnErrProtocol;
+import com.zy.core.model.protocol.RgvErrProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class CrnErrCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<Integer, CrnErrProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateCrnStatus(CrnErrProtocol status) {
+        try {
+            cache.put(status.getCrnNo(), status);
+        } finally {
+        }
+    }
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateCrnErr(Integer crnNo,String error) {
+        try {
+            CrnErrProtocol crnErrProtocol = cache.get(crnNo);
+            if (crnErrProtocol == null){
+                crnErrProtocol = new CrnErrProtocol();
+                crnErrProtocol.setCrnNo(crnNo);
+            }
+            if (!crnErrProtocol.getError().equals(error)){
+                crnErrProtocol.setError(error);
+                cache.put(crnErrProtocol.getCrnNo(), crnErrProtocol);
+            }
+        } finally {
+        }
+    }
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateCrnErr(Integer crnNo) {
+        try {
+            CrnErrProtocol crnErrProtocol = cache.get(crnNo);
+            if (crnErrProtocol == null){
+                crnErrProtocol = new CrnErrProtocol();
+                crnErrProtocol.setCrnNo(crnNo);
+            }
+            if (!crnErrProtocol.getError().equals("-")){
+                crnErrProtocol.setError("-");
+                cache.put(crnErrProtocol.getCrnNo(), crnErrProtocol);
+            }
+        } finally {
+        }
+    }
+
+
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static String getErrorCrn(Integer crnNo) {
+        try {
+            CrnErrProtocol crnErrProtocol = cache.get(crnNo);
+            if (crnErrProtocol == null){
+                crnErrProtocol = new CrnErrProtocol();
+                crnErrProtocol.setCrnNo(crnNo);
+            }
+            return crnErrProtocol.getError();
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static CrnErrProtocol getCrnStatus(Integer crnNo) {
+        try {
+            return cache.get(crnNo);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<Integer, CrnErrProtocol> getAllCrnStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/cache/RgvErrCache.java b/src/main/java/com/zy/core/cache/RgvErrCache.java
new file mode 100644
index 0000000..c8ce8f9
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvErrCache.java
@@ -0,0 +1,102 @@
+package com.zy.core.cache;
+
+import com.core.common.Cools;
+import com.zy.core.model.protocol.RgvErrProtocol;
+import com.zy.core.model.protocol.RgvRunProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvErrCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<Integer, RgvErrProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvStatus(RgvErrProtocol status) {
+        try {
+            cache.put(status.getRgvNo(), status);
+        } finally {
+        }
+    }
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvErr(Integer rgvNo,String error) {
+        try {
+            RgvErrProtocol rgvErrProtocol = cache.get(rgvNo);
+            if (rgvErrProtocol == null){
+                rgvErrProtocol = new RgvErrProtocol();
+                rgvErrProtocol.setRgvNo(rgvNo);
+            }
+            if (!rgvErrProtocol.getError().equals(error)){
+                rgvErrProtocol.setError(error);
+                cache.put(rgvErrProtocol.getRgvNo(), rgvErrProtocol);
+            }
+        } finally {
+        }
+    }
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvErr(Integer rgvNo) {
+        try {
+            RgvErrProtocol rgvErrProtocol = cache.get(rgvNo);
+            if (rgvErrProtocol == null){
+                rgvErrProtocol = new RgvErrProtocol();
+                rgvErrProtocol.setRgvNo(rgvNo);
+            }
+            if (!rgvErrProtocol.getError().equals("-")){
+                rgvErrProtocol.setError("-");
+                cache.put(rgvErrProtocol.getRgvNo(), rgvErrProtocol);
+            }
+        } finally {
+        }
+    }
+
+
+
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static String getErrorDev(Integer rgvNo) {
+        try {
+            RgvErrProtocol rgvErrProtocol = cache.get(rgvNo);
+            if (rgvErrProtocol == null){
+                rgvErrProtocol = new RgvErrProtocol();
+                rgvErrProtocol.setRgvNo(rgvNo);
+            }
+            return rgvErrProtocol.getError();
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvErrProtocol getRgvStatus(Integer rgvNo) {
+        try {
+            return cache.get(rgvNo);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<Integer, RgvErrProtocol> getAllRgvStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/CrnErrProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnErrProtocol.java
new file mode 100644
index 0000000..0b9b845
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/CrnErrProtocol.java
@@ -0,0 +1,16 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class CrnErrProtocol {
+
+    private Integer crnNo;
+
+    public String error = "-";
+
+    public CrnErrProtocol(){}
+}
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index 36cad3c..1def4c8 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -197,6 +197,7 @@
      * 鍫嗗灈鏈虹疮璁″崌闄嶆椂闀縣
      */
     public Float yDuration;
+    public String errCrn;
 
     public void setMode(Short mode) {
         this.mode = mode;
diff --git a/src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java
new file mode 100644
index 0000000..b72d9c0
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java
@@ -0,0 +1,16 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class RgvErrProtocol {
+
+    private Integer rgvNo;
+
+    public String error = "-";
+
+    public RgvErrProtocol(){}
+}
diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
index 15c7135..e69ba54 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -116,6 +116,7 @@
 
     // 鍏夌數寮傚父
     private boolean err6;
+    private String errorRgv;
 
     public void setMode(Short mode) {
         this.mode = mode;
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 9dee92a..252d523 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -86,6 +86,7 @@
     //鎸囦护ID
     private Integer commandId;
     private Double grossWt = 0D;
+    private String errorDev = "-";
 
     public BasDevp toSqlModel(){
         BasDevp basDevp = new BasDevp();
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 879779c..8cf35c2 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -53,6 +53,7 @@
     private Long trackBenchmark = 1L;
     //  # 閬胯璺濈
     private Long avoidDistance = 5000L;
+    private String errorRgv = "-";
 
     /**
      * 宸ヤ綅1澶嶄綅淇″彿
@@ -290,6 +291,7 @@
         while (true) {
             RgvRunProtocol rgvRun = RgvRunCache.getRgvRun();
             if (!rgvRun.getRgvNo().equals(slave.getId())){
+
                 continue;
             }
             try {
@@ -307,6 +309,7 @@
                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                     rgvRun.setRgvNo(slave.getOtherId());
                     RgvRunCache.updateRgvStatus(rgvRun);
+                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                     continue;
                 }
 
@@ -327,6 +330,7 @@
                     rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                     rgvRun.setRgvNo(slave.getOtherId());
                     RgvRunCache.updateRgvStatus(rgvRun);
+                    RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅鎺㈢墿鐗╃姸鎬佸紓甯�");
                     continue;
                 }
                 if (rgvTaskProtocol.getAvoid() != 0) {
@@ -337,6 +341,7 @@
                         issued.setTaskStatus(1);
                         issued.setDirection(true);
                         write(issued);
+                        RgvErrCache.updateRgvErr(slave.getId());
                         rgvTaskProtocol.setAvoid(0);
 
 //                        try{Thread.sleep(50L);} catch (Exception e){}
@@ -358,21 +363,25 @@
                             if (rgvOtherStatusEnable()) {
                                 //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
                                 if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
+                                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                                     break;
                                 }
                             }
                             if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50
                                     && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){
                                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
+                                RgvErrCache.updateRgvErr(slave.getId());
                                 break;
                             } else {
                                 TaskProtocol issued = new TaskProtocol(taskProtocol,true);
                                 write(issued);
+                                RgvErrCache.updateRgvErr(slave.getId());
                                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
                                 break;
                             }
                         }
                     }
+                    RgvErrCache.updateRgvErr(slave.getId());
                 } else {
                     for (TaskProtocol taskProtocol : allTakeTaskProtocol) {
                         if (taskProtocol.getIsRunning() == 1) {//鍑嗗涓嬪彂
@@ -380,6 +389,7 @@
                             if (rgvOtherStatusEnable()) {
                                 //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
                                 if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
+                                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                                     break;
                                 }
                             }
@@ -389,32 +399,38 @@
                                     DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
                                     StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
                                     if (staProtocol == null ) {
+                                        RgvErrCache.updateRgvErr(slave.getId(),"鏈煡鍒板皬杞︿綔涓氱珯"+staProtocol.getStaNo()+"绔欑偣");
                                         break;
                                     }
                                     // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                                     if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                     ){
+                                        RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅绛夊緟"+staProtocol.getStaNo()+"绔欑偣灏辩华");
                                         break;
                                     }
                                 } else if (taskProtocol.getTaskStatus()==2){
                                     DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
                                     StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
                                     if (staProtocol == null ) {
+                                        RgvErrCache.updateRgvErr(slave.getId(),"鏈煡鍒板皬杞︿綔涓氱珯"+staProtocol.getStaNo()+"绔欑偣");
                                         break;
                                     }
                                     // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                                     if (!staProtocol.isAutoing() || !staProtocol.isLoading() || staProtocol.getWorkNo()==0
                                     ){
+                                        RgvErrCache.updateRgvErr(slave.getId(),"灏忚溅绛夊緟"+staProtocol.getStaNo()+"绔欑偣灏辩华");
                                         break;
                                     }
                                 }
                                 TaskProtocol issued = new TaskProtocol(taskProtocol);
                                 write(issued);
+                                RgvErrCache.updateRgvErr(slave.getId());
                                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection());
                                 break;
                             } else {
                                 TaskProtocol issued = new TaskProtocol(taskProtocol,true);
                                 write(issued);
+                                RgvErrCache.updateRgvErr(slave.getId());
                                 break;
                             }
                         }
@@ -465,10 +481,25 @@
         RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
 
         if (rgvProtocol == null || rgvTaskProtocol == null) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹁繛鎺ュけ璐�";
             return false;
         }
-        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
-                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹂潪鑷姩";
+            return false;
+        }
+        if (rgvProtocol.getRgvPos().equals(0L)
+                || rgvTaskProtocol.getAvoid() == -1
+                || rgvProtocol.getRgvPosDestination() == 0L) {
+            errorRgv = slave.getId()+"鍙峰皬杞︾姸鎬佸紓甯�";
+            return false;
+        }
+        if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹂潪绌洪棽";
+            return false;
+        }
+        if ( (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
+            errorRgv = slave.getId()+"鍙峰皬杞﹀瓨鍦ㄨ繍琛岀洰鏍囧�硷紝闇�瑕佸浣嶏紒锛侊紒";
             return false;
         }
         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -477,10 +508,12 @@
 //                "rgvTaskProtocolOther:"+slave.getOtherId()+"sign:"+rgvTaskProtocolOther.isSignRun()+"/n");
 
         if (rgvProtocolOther == null) {
+            errorRgv = slave.getOtherId()+"鍙峰皬杞﹁繛鎺ュけ璐�";
             return false;
         }
         if (rgvProtocolOther.statusEnable) {
             if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
+                errorRgv = slave.getOtherId()+"鍙峰皬杞︾姸鎬佸紓甯�";
                 return false;
             }
         }
@@ -536,6 +569,7 @@
                                             long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
                                             if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                                                 log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                                                errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
                                                 try{
                                                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                     deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -559,12 +593,15 @@
                             }
                         }
                         if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
                             return false;
                         }
                     }
                     long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
                     if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                         log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                         try{
                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                             deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -591,6 +628,8 @@
                     long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
                     if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                         log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                         try{
                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                             deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -618,6 +657,8 @@
                         long avoid = rgvProtocolOther.getRgvPos() - rgvProtocolOther.getCarBodyJiaoMing() - avoidDistance - rgvProtocol.getCarBodyKunPeng();
                         if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                             log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                            errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                             try{
                                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                 deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -635,6 +676,8 @@
                         RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                         return false;
                     }
+                    errorRgv = slave.getOtherId()+"鍙稲GV褰卞搷锛岀瓑寰呬腑...";
+
                     return false;
                 }
             } else {
@@ -671,6 +714,8 @@
                                             long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
                                             if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                                                 log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                                                errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                                                 try{
                                                     DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                                     deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -694,12 +739,15 @@
                             }
                         }
                         if (signNowPosRun){
+                            errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟浣滀笟...";
                             return false;
                         }
                     }
                     long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
                     if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                         log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                         try{
                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                             deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -726,6 +774,8 @@
                     long avoid = targetPosition - rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
                     if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) {
                         log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                        errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                         try{
                             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                             deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -754,6 +804,8 @@
                         long avoid = rgvProtocolOther.getRgvPos() + rgvProtocolOther.getCarBodyKunPeng() + avoidDistance + rgvProtocol.getCarBodyJiaoMing();
                         if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                             log.error("RGV琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                            errorRgv = "RGV琛岃蛋鐩爣瓒呭嚭鑼冨洿";
+
                             try{
                                 DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                                 deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV琛岃蛋瓒呭嚭鑼冨洿");
@@ -771,6 +823,7 @@
                         RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                         return false;
                     }
+                    errorRgv = slave.getOtherId()+"鍙稲GV绛夊緟涓�...";
                     return false;
                 }
             } else {
@@ -781,6 +834,8 @@
                 }
             }
         }
+
+        errorRgv = slave.getOtherId()+"鍙稲GV褰卞搷锛岀瓑寰呬腑...";
         return false;
     }
 
@@ -918,6 +973,9 @@
 //                        }
 //                    }
 //                }
+                if (rgvProtocol.getAlarm$()!=0){
+                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
+                }
 
                 try {
                     // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 676afa7..51f727f 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -13,6 +13,7 @@
 import com.zy.asrs.service.BasCrnOptService;
 import com.zy.asrs.service.BasCrnpService;
 import com.zy.core.CrnThread;
+import com.zy.core.cache.CrnErrCache;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.CrnStatusType;
@@ -243,6 +244,8 @@
             log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
         }
+        CrnErrCache.updateCrnErr(slave.getId(), "-");
+
 //        convertRow(command);
         command.setCrnNo(slave.getId());
         short[] array = new short[10];
@@ -276,6 +279,8 @@
                 if (!command.getTaskNo().equals(one.getTaskNo())
                 ){
                     i++;
+                    CrnErrCache.updateCrnErr(slave.getId(), "鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐�");
+
                     log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}]>>>>閲嶅啓[{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), i,JSON.toJSON(command),JSON.toJSON(one));
                     result = siemensNet.Write("DB100.0", array);
                 }else{
@@ -297,6 +302,8 @@
                 if (transInt16 != commandFinish){
                     log.info("涓嬪彂DB100.18  鍥炶澶辫触" + "commandFinish:"+commandFinish);
                     log.info("涓嬪彂DB100.18  鍥炶澶辫触" + "array:"+ JSON.toJSONString(array));
+                    CrnErrCache.updateCrnErr(slave.getId(), "涓嬪彂DB100.18  鍥炶澶辫触");
+
                     result = siemensNet.Write("DB100.18", commandFinish);
                     signFinish++;
                 }else {
@@ -339,6 +346,8 @@
         } else {
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
             log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            CrnErrCache.updateCrnErr(slave.getId(), "鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触");
+
             return false;
         }
     }
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index fdf1b1c..eb6e729 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -460,6 +460,17 @@
         }
     }
 
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setErrorDev(Integer siteId, String msgErr) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setErrorDev(msgErr);
+        }
+    }
+
     @Override
     public void close() {
         siemensS7Net.ConnectClose();
diff --git a/src/main/webapp/views/deviceOperate/crnOperate.html b/src/main/webapp/views/deviceOperate/crnOperate.html
index f32bc2f..8406daf 100644
--- a/src/main/webapp/views/deviceOperate/crnOperate.html
+++ b/src/main/webapp/views/deviceOperate/crnOperate.html
@@ -28,6 +28,8 @@
 				</el-table-column>
 				<el-table-column property="deviceStatus" label="璁惧鐘舵��">
 				</el-table-column>
+				<el-table-column property="errorCrn" label="寮傚父鎻愮ず">
+				</el-table-column>
 			</el-table>
 		</div>
 
@@ -166,6 +168,8 @@
 								</el-descriptions-item>
 								<el-descriptions-item label="鍗囬檷鏃堕暱(H)">{{ tableData[currentIndex].yduration }}
 								</el-descriptions-item>
+								<el-descriptions-item label="寮傚父鎻愮ず">{{ tableData[currentIndex].errorCrn }}
+								</el-descriptions-item>
 							</el-descriptions>
 						</div>
 					</div>
diff --git a/src/main/webapp/views/deviceOperate/devpOperate.html b/src/main/webapp/views/deviceOperate/devpOperate.html
index 7565bc4..724416e 100644
--- a/src/main/webapp/views/deviceOperate/devpOperate.html
+++ b/src/main/webapp/views/deviceOperate/devpOperate.html
@@ -24,6 +24,10 @@
 				</el-table-column>
 				<el-table-column property="pakMk" label="鍏ュ簱鏍囪">
 				</el-table-column>
+				<el-table-column property="weight" label="绉伴噸">
+				</el-table-column>
+				<el-table-column property="errorDev" label="寮傚父鎻愮ず">
+				</el-table-column>
 			</el-table>
 		</div>
 
@@ -93,6 +97,10 @@
 								</el-descriptions-item>
 								<el-descriptions-item label="楂樹綆搴撲綅">{{ tableData[currentIndex].locType1 }}
 								</el-descriptions-item>
+								<el-descriptions-item label="閲嶉噺">{{ tableData[currentIndex].weight }}
+								</el-descriptions-item>
+								<el-descriptions-item label="寮傚父鎻愮ず">{{ tableData[currentIndex].errorDev }}
+								</el-descriptions-item>
 							</el-descriptions>
 						</div>
 					</div>
diff --git a/src/main/webapp/views/deviceOperate/rgvOperate.html b/src/main/webapp/views/deviceOperate/rgvOperate.html
index 2a7ef09..fe04738 100644
--- a/src/main/webapp/views/deviceOperate/rgvOperate.html
+++ b/src/main/webapp/views/deviceOperate/rgvOperate.html
@@ -28,7 +28,9 @@
 				</el-table-column>
 				<el-table-column property="rgvPosDestination" label="鐩爣瀹氫綅缃�">
 				</el-table-column>
-				<el-table-column property="loaded" label="鏈夌墿">
+				<el-table-column property="loaded" label="鎺㈢墿">
+				</el-table-column>
+				<el-table-column property="errorRgv" label="鎻愮ず">
 				</el-table-column>
 			</el-table>
 		</div>

--
Gitblit v1.9.1