97cfc84c932f52c6419eebfd4888f2d8212edb5b..c9d334e61ff33aa2f90b71e34d5a7a0340765bfe
2025-05-27 野心家
#ZH
c9d334 对比 | 目录
2025-05-27 野心家
#ZH
ebd350 对比 | 目录
2025-05-27 野心家
#ZH
f3cb87 对比 | 目录
2025-05-27 野心家
#ZH
ee44f9 对比 | 目录
2025-05-27 野心家
#ZH
b4cb8c 对比 | 目录
2025-05-27 野心家
#ZH
1b9f41 对比 | 目录
2025-05-27 野心家
#ZH
d6969a 对比 | 目录
2025-05-27 野心家
#ZH
f42295 对比 | 目录
2025-05-27 野心家
#ZH
b791da 对比 | 目录
24个文件已修改
6个文件已添加
908 ■■■■ 已修改文件
pom.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SiteController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/CrnListVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CarryParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 197 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/DevpThread.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/CrnErrCache.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/RgvErrCache.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/RgvRunCache.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/RgvStatusCache.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/CrnErrProtocol.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/CrnProtocol.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LedThread.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/ScaleThread.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/js/console.map.js 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/deviceOperate/crnOperate.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/deviceOperate/devpOperate.html 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/deviceOperate/rgvOperate.html 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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());  //  走行速度(m/min)
            vo.setYspeed(crnProtocol.getYSpeed());  //  升降速度(m/min)
            vo.setZspeed(crnProtocol.getZSpeed());  //  叉牙速度(m/min)
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("非自动!!!");
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,9 +219,14 @@
            }
            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);
            issuedTake.setTargetPositionStaNo(basDevpPosition.getDevNo());
            issuedTake.setTargetPositionStaNoPlcId(basDevpPosition.getPlcId());
            issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus()));
            issuedTake.setTargetPosition(basDevpPosition.getPlcPosition());
            issuedTake.setIsRunning(1);
@@ -255,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);
@@ -266,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);
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);
    }
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);
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 = "-";
}
src/main/java/com/zy/asrs/entity/param/CarryParam.java
@@ -51,7 +51,7 @@
//            String locNo = String.format("%02d", ) +
//                    String.format("%03d", split[3]) +
//                    String.format("%02d", split[4]);
            split[3] = split[3]+1;
            return split[2]+"0"+split[3]+split[4];
        } else {
            return point;
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(), "货叉位置不在中位");
                    }
                }
            }
        }
    }
@@ -749,7 +776,8 @@
                    log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0
//                        && staProtocol.isInEnable()
                        && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                    flag = true;
                }
@@ -764,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;
                }
@@ -822,18 +858,25 @@
                crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号
                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位列
                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位层
                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位排
                crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
                crnCommand.setSourcePosZ(crnStn.getLev().shortValue());   // 源库位层
                crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位列
                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位层
                int bay1 = Utils.getBayShort(taskWrk.getTargetPoint()) + 1;
                crnCommand.setDestinationPosY((short)bay1);     // 目标库位层
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位排
//                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("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", taskWrk.getWrkNo());
@@ -922,12 +965,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;
                        }
@@ -938,14 +990,17 @@
                        command.setAckFinish((short) 0);  // 任务完成确认位
                        command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式
                        command.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint()));     // 源库位排
                        command.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint()));     // 源库位列
                        int bayS = Utils.getBayShort(taskWrk.getStartPoint()) + 1;
                        command.setSourcePosY((short)bayS);     // 源库位列
                        command.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint()));     // 源库位层
                        command.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
                        command.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列
                        command.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层
                        command.setCommand((short) 1);
//                        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 {
@@ -955,6 +1010,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("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                                }
@@ -991,6 +1049,19 @@
                            } catch (Exception e) {
                                log.error("wcs派发出库任务上报wms失败", JSON.toJSONString(taskWrk));
//                                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(), "没有可出");
                            }
                        }
                    }
@@ -1051,10 +1122,12 @@
                crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                crnCommand.setSourcePosX(Utils.getRowShort(taskWrk.getStartPoint()));     // 源库位排
                crnCommand.setSourcePosY(Utils.getBayShort(taskWrk.getStartPoint()));     // 源库位列
                int bayS = Utils.getBayShort(taskWrk.getStartPoint()) + 1;
                crnCommand.setSourcePosY((short)bayS);     // 源库位列
                crnCommand.setSourcePosZ(Utils.getLevShort(taskWrk.getStartPoint()));     // 源库位层
                crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
                int bayE = Utils.getBayShort(taskWrk.getTargetPoint()) + 1;
                crnCommand.setDestinationPosY((short)bayE);     // 目标库位列
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
//                crnCommand.setCommand((short) 1);
                if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) {
@@ -1440,7 +1513,51 @@
        }
        return true;
    }
    public boolean rgvOtherIDLEOther2(RgvSlave slave) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)
                || rgvProtocol.getRgvPos().equals(0L)
                || rgvTaskProtocol.getAvoid() == -1) {
            return false;
        }
        if (rgvProtocol.getLoaded()!=0) {
            return false;
        }
        return true;
    }
    public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvProtocol == null || rgvTaskProtocol == null) {
            return false;
        }
        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return true;
        }
        if (rgvProtocolOther.statusEnable) {
            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
            if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
                    >=
                    Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
                return false;
            }
        }
        return true;
    }
    public boolean rgvOtherIDLE2(RgvSlave slave,Integer staNo) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
@@ -1477,7 +1594,7 @@
        // 判断是否满足取货条件
        if (staProtocol.isAutoing()
//                && staProtocol.isLoading()
                && staProtocol.isStaOk()
//                && staProtocol.isStaOk()
                && staProtocol.getWorkNo() != 0) {
            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
            if (taskWrk != null) {
@@ -1614,6 +1731,14 @@
                            }
                        }
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther2(rgvSlave)){
                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                    sign=true;
                                }
                            }
                        }
                        if (!sign) {
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
@@ -1633,7 +1758,7 @@
                                }
                            }
                        }
                        if (!sign) {
                        if (!sign && staList.size()>1) {
                            //  半边区域内取货任务
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
@@ -1656,26 +1781,26 @@
                                }
                            }
                        }
                        if (!sign) {
                            //  半边区域内放货任务
                            for (Integer staNoNow : rangeListOther) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
                                        TaskWrk taskWrk = deviceDetection(rgvStn);
                                        if (taskWrk != null) {
                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                            }
                                        }
                                        break;
                                    }
                                }
                                if (sign) {
                                    break;
                                }
                            }
                        }
//                        if (!sign) {
//                            //  半边区域内放货任务
//                            for (Integer staNoNow : rangeListOther) {
//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
//                                        if (taskWrk != null) {
//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
//                                            }
//                                        }
//                                        break;
//                                    }
//                                }
//                                if (sign) {
//                                    break;
//                                }
//                            }
//                        }
                    } else {
                        //可用区域就近取货
                        //就近排序
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);
}
src/main/java/com/zy/core/cache/CrnErrCache.java
New file
@@ -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 {
        }
    }
}
src/main/java/com/zy/core/cache/RgvErrCache.java
New file
@@ -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 {
        }
    }
}
src/main/java/com/zy/core/cache/RgvRunCache.java
New file
@@ -0,0 +1,60 @@
package com.zy.core.cache;
import com.core.common.Cools;
import com.zy.core.model.protocol.RgvRunProtocol;
import com.zy.core.model.protocol.RgvTaskProtocol;
import java.util.concurrent.ConcurrentHashMap;
/**
 * Created by IX on 2025/02/21
 */
public class RgvRunCache {
    // 本地缓存,键为 currentPosition,值为 DeviceStatus
    private static final ConcurrentHashMap<String, RgvRunProtocol> cache = new ConcurrentHashMap<>();
    /**
     * 更新设备状态
     */
    public static void updateRgvStatus(RgvRunProtocol status) {
        try {
            cache.put(status.getDev(), status);
        } finally {
        }
    }
    /**
     * 获取设备状态
     */
    public static RgvRunProtocol getRgvRun() {
        try {
            RgvRunProtocol rgv = cache.get("RGV");
            if (Cools.isEmpty(rgv)){
                rgv = new RgvRunProtocol();
            }
            return rgv;
        } finally {
        }
    }
    /**
     * 获取设备状态
     */
    public static RgvRunProtocol getRgvStatus(String dev) {
        try {
            return cache.get(dev);
        } finally {
        }
    }
    /**
     * 获取所有设备状态
     */
    public static ConcurrentHashMap<String, RgvRunProtocol> getAllRgvStatus() {
        try {
            return new ConcurrentHashMap<>(cache); // 返回副本
        } finally {
        }
    }
}
src/main/java/com/zy/core/cache/RgvStatusCache.java
@@ -2,6 +2,7 @@
import com.zy.core.model.protocol.RgvProtocol;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -16,6 +17,9 @@
     */
    public static void updateRgvStatus(RgvProtocol status) {
        try {
            if (status.getRgvNo()!=1 && status.getRgvNo() != 2){
                return;
            }
            cache.put(status.getRgvNo(), status);
        } finally {
        }
@@ -41,4 +45,19 @@
        }
    }
    /**
     * 获取所有设备状态
     */
    public static void removeAll() {
        try {
            ConcurrentHashMap<Integer, RgvProtocol> integerRgvProtocolConcurrentHashMap = new ConcurrentHashMap<>(cache);
            if (integerRgvProtocolConcurrentHashMap.values().size()>2){
                for (RgvProtocol rgvProtocol : integerRgvProtocolConcurrentHashMap.values()){
                    cache.remove(rgvProtocol.getRgvNo());
                }
            }
        } finally {
        }
    }
}
src/main/java/com/zy/core/model/protocol/CrnErrProtocol.java
New file
@@ -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(){}
}
src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -197,6 +197,7 @@
     * 堆垛机累计升降时长h
     */
    public Float yDuration;
    public String errCrn;
    public void setMode(Short mode) {
        this.mode = mode;
src/main/java/com/zy/core/model/protocol/RgvErrProtocol.java
New file
@@ -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(){}
}
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;
src/main/java/com/zy/core/model/protocol/RgvRunProtocol.java
New file
@@ -0,0 +1,18 @@
package com.zy.core.model.protocol;
import lombok.Data;
/**
 * Created by IX on 2025/02/21
 */
@Data
public class RgvRunProtocol {
    private String dev = "RGV";
    private Integer RgvNo = 1;
    public Long currentTimeMilliOld = 0L;
    public RgvRunProtocol(){}
}
src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
@@ -21,7 +21,5 @@
     */
    public Long AvoidingTheDestination;
    public boolean signRun = true;
    public RgvTaskProtocol(){}
}
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();
src/main/java/com/zy/core/thread/LedThread.java
@@ -212,7 +212,7 @@
                deviceErrorService.addDeviceError("led", slave.getId(), "led连接失败");
            }
        } catch (Exception e){
            log.error("e:"+e.getMessage());
//            log.error("e:"+e.getMessage());
        }
        return connRes;
src/main/java/com/zy/core/thread/RgvThread.java
@@ -25,10 +25,7 @@
import com.zy.core.model.RgvSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.RgvTaskProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.model.protocol.TaskProtocol;
import com.zy.core.model.protocol.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -56,7 +53,7 @@
    private Long trackBenchmark = 1L;
    //  # 避让距离
    private Long avoidDistance = 5000L;
    private Long currentTimeMilliOld = 0L;
    private String errorRgv = "-";
    /**
     * 工位1复位信号
@@ -121,7 +118,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "rgv连接失败"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
//                e.printStackTrace();
@@ -133,7 +130,7 @@
        while (true) {
            try {
                Thread.sleep(20);
                System.out.println("读线程"+ slave.getId());
//                System.out.println("读线程"+ slave.getId());
                readStatus();
@@ -143,7 +140,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV数据读取线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
//                e.printStackTrace();
@@ -176,7 +173,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV数据任务下发复位线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                initRgv();
//                e.printStackTrace();
@@ -292,19 +289,26 @@
     */
    private void taskIssued() {
        while (true) {
            RgvRunProtocol rgvRun = RgvRunCache.getRgvRun();
            if (!rgvRun.getRgvNo().equals(slave.getId())){
                continue;
            }
            try {
                Thread.sleep(50);
                rgvRun = RgvRunCache.getRgvRun();
//                System.out.println(JSON.toJSON(rgvRun));
                // 休眠 1 秒
                if (System.currentTimeMillis() - currentTimeMilliOld > 100) {
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                if (System.currentTimeMillis() - rgvRun.currentTimeMilliOld > 1000) {
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                } else {
                    continue;
                }
                if (!deviceDetection()) {
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    continue;
                }
                if (!signRunStart()){
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                    continue;
                }
@@ -316,13 +320,16 @@
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)){
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
                if (rgvProtocol.getLoaded() == -1){
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    RgvErrCache.updateRgvErr(slave.getId(),"小车探物物状态异常");
                    continue;
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
@@ -333,14 +340,16 @@
                        issued.setTaskStatus(1);
                        issued.setDirection(true);
                        write(issued);
                        RgvErrCache.updateRgvErr(slave.getId());
                        rgvTaskProtocol.setAvoid(0);
//                        try{Thread.sleep(50L);} catch (Exception e){}
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                    }
                    signRunEnd();
                    currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    continue;
                }
@@ -353,21 +362,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) {//准备下发
@@ -375,6 +388,7 @@
                            if (rgvOtherStatusEnable()) {
                                //另一台车是否允许此台车执行
                                if (!otherRgvAvoid(taskProtocol.getTargetPosition())) {
                                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                                    break;
                                }
                            }
@@ -384,36 +398,59 @@
                                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId());
                                    StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo());
                                    if (staProtocol == null ) {
                                        continue;
                                        RgvErrCache.updateRgvErr(slave.getId(),"未查到小车作业站"+staProtocol.getStaNo()+"站点");
                                        break;
                                    }
                                    // 判断是否满足入库条件
                                    if (!staProtocol.isAutoing() || staProtocol.isLoading()
                                    ){
                                        continue;
                                        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;
                            }
                        }
                    }
                }
                signRunEnd();
                currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.setRgvNo(slave.getOtherId());
                RgvRunCache.updateRgvStatus(rgvRun);
            } catch (Exception e) {
                log.error("RGV任务下发线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV任务下发线程异常"+e.getMessage());
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
                rgvRun = RgvRunCache.getRgvRun();
                rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                rgvRun.setRgvNo(slave.getOtherId());
                RgvRunCache.updateRgvStatus(rgvRun);
                continue;
//                e.printStackTrace();
            }
        }
@@ -437,67 +474,31 @@
        return true;
    }
    public boolean signRunStart() {
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvTaskProtocol == null) {
            return false;
        }
        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
        if (rgvTaskProtocolOther == null) {
            return false;
        }
        if(!rgvTaskProtocol.isSignRun()) {
            return false;
        }
        if(rgvTaskProtocolOther.isSignRun()) {
            rgvTaskProtocol.setSignRun(rgvTaskProtocol.getRgvNo()==1);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            return false;
        }
        rgvTaskProtocol.setSignRun(false);
        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
        return true;
    }
    public boolean signRunEnd() {
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        if (rgvTaskProtocol == null) {
            return false;
        }
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
        if (rgvProtocolOther == null) {
            return false;
        }
        if (rgvProtocolOther.statusEnable) {
            RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
            if (rgvTaskProtocolOther == null) {
                return false;
            }
            rgvTaskProtocol.setSignRun(false);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            rgvTaskProtocolOther.setSignRun(true);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther);
        } else {
            rgvTaskProtocol.setSignRun(true);
            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
        }
        return true;
    }
    public boolean deviceDetection() {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        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 (signRunStart()){
                signRunEnd();
            }
        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());
@@ -506,13 +507,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) {
                if (signRunStart()){
                    signRunEnd();
                }
                errorRgv = slave.getOtherId()+"号小车状态异常";
                return false;
            }
        }
@@ -568,11 +568,12 @@
                                            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行走超出范围");
                                                } catch (Exception e2){
                                                    log.error("e2:"+e2.getMessage());
//                                                    log.error("e2:"+e2.getMessage());
                                                }
                                                return false;
                                            }
@@ -591,17 +592,20 @@
                            }
                        }
                        if (signNowPosRun){
                            errorRgv = slave.getOtherId()+"号RGV等待作业...";
                            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行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -623,11 +627,13 @@
                    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行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -650,11 +656,13 @@
                        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行走超出范围");
                            } catch (Exception e2){
                                log.error("e2:"+e2.getMessage());
//                                log.error("e2:"+e2.getMessage());
                            }
                            return false;
                        }
@@ -667,6 +675,8 @@
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                        return false;
                    }
                    errorRgv = slave.getOtherId()+"号RGV影响,等待中...";
                    return false;
                }
            } else {
@@ -703,11 +713,13 @@
                                            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行走超出范围");
                                                } catch (Exception e2){
                                                    log.error("e2:"+e2.getMessage());
//                                                    log.error("e2:"+e2.getMessage());
                                                }
                                                return false;
                                            }
@@ -726,17 +738,20 @@
                            }
                        }
                        if (signNowPosRun){
                            errorRgv = slave.getOtherId()+"号RGV等待作业...";
                            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行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -758,11 +773,13 @@
                    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行走超出范围");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                        return false;
                    }
@@ -786,11 +803,13 @@
                        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行走超出范围");
                            } catch (Exception e2){
                                log.error("e2:"+e2.getMessage());
//                                log.error("e2:"+e2.getMessage());
                            }
                            return false;
                        }
@@ -803,6 +822,7 @@
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                        return false;
                    }
                    errorRgv = slave.getOtherId()+"号RGV等待中...";
                    return false;
                }
            } else {
@@ -813,6 +833,8 @@
                }
            }
        }
        errorRgv = slave.getOtherId()+"号RGV影响,等待中...";
        return false;
    }
@@ -849,7 +871,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV异常"+e.getMessage());
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            rgvProtocol.setStatusEnable(true);
        }
@@ -887,7 +909,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGVplc连接失败");
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
        }
        initRgv();
@@ -916,6 +938,7 @@
                if (rgvProtocol.getRgvPosDestination()==0L){
                    rgvProtocol.setRgvPosDestination(rgvProtocol.getRgvPos());
                }
                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 8));
                rgvProtocol.setTaskNo((long)siemensNet.getByteTransform().TransInt32(result.Content, 10));
@@ -935,7 +958,7 @@
                rgvProtocol.setErr4(status[11]);
                rgvProtocol.setErr5(status[12]);
                rgvProtocol.setErr6(status[13]);
                System.out.println("读线程"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
//                System.out.println("读线程"+ slave.getId()+"---"+JSON.toJSONString(rgvProtocol));
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
//                // 工位1复位信号
@@ -949,6 +972,9 @@
//                        }
//                    }
//                }
                if (rgvProtocol.getAlarm$()!=0){
                    RgvErrCache.updateRgvErr(slave.getId(),rgvProtocol.getAlarmM());
                }
                try {
                    // 根据实时信息更新数据库
@@ -969,7 +995,7 @@
                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                            deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV plc数据库更新失败");
                        } catch (Exception e2){
                            log.error("e2:"+e2.getMessage());
//                            log.error("e2:"+e2.getMessage());
                        }
                    }
                } catch (Exception ignore) {
@@ -990,7 +1016,7 @@
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "读取RGV plc状态信息失败");
                } catch (Exception e2){
                    log.error("e2:"+e2.getMessage());
//                    log.error("e2:"+e2.getMessage());
                }
            }
        } catch (Exception e) {
@@ -1002,7 +1028,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "读取RGV plc状态信息失败");
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            initRgv();
        }
@@ -1019,7 +1045,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV写入命令为空");
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            return false;
        }
@@ -1078,7 +1104,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV 命令下发"+JSON.toJSON(taskProtocol));
            } catch (Exception e2){
                log.error("e2:"+e2.getMessage());
//                log.error("e2:"+e2.getMessage());
            }
            OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(taskProtocol)));
            return true;
src/main/java/com/zy/core/thread/ScaleThread.java
@@ -55,7 +55,7 @@
                    String s = new String(read);
                    if (!Cools.isEmpty(s) && s.startsWith("\u0002+")) {
//                    if (!Cools.isEmpty(s) && s.startsWith("=")) {
                        scale = Double.parseDouble(s.substring(1))/100;
                        scale = Double.parseDouble(s.substring(1));
//                        System.out.println("scale:"+scale+ "ip:"+slave.getIp());
//                        String substring = s.substring(1);
@@ -124,20 +124,20 @@
//            log.info("条码扫描仪连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.deleteDeviceError("devp", slave.getId());
                deviceErrorService.deleteDeviceError("Scale", slave.getId());
            } catch (Exception e){
                log.error("e:"+e.getMessage());
//                log.error("e:"+e.getMessage());
            }
        } catch (Exception e) {
            socket = null;
            log.error("磅秤连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//            log.error("磅秤连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//            deviceErrorService.addDeviceError("scale", slave.getId(), "磅秤连接失败");
            try{
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.deleteDeviceError("devp", slave.getId());
                deviceErrorService.deleteDeviceError("Scale", slave.getId());
            } catch (Exception e1){
                log.error("e:"+e1.getMessage());
//                log.error("e:"+e1.getMessage());
            }
            return false;
        }
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("写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
            CrnErrCache.updateCrnErr(slave.getId(), "写入堆垛机plc数据失败");
            return false;
        }
    }
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -264,7 +264,7 @@
                        throw new Exception("更新数据库数据失败");
                    }
                } catch (Exception e){
                    log.error("e:"+e.getMessage());
//                    log.error("e:"+e.getMessage());
                }
            } catch (Exception e) {
@@ -277,7 +277,7 @@
                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                deviceErrorService.deleteDeviceError("devp", slave.getId());
            } catch (Exception e){
                log.error("e:"+e.getMessage());
//                log.error("e:"+e.getMessage());
            }
        } 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()));
@@ -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();
src/main/webapp/static/wcs/js/console.map.js
@@ -14,8 +14,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack2",
@@ -24,8 +24,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack3",
@@ -34,8 +34,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack4",
@@ -44,8 +44,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack5",
@@ -54,8 +54,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack6",
@@ -64,8 +64,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack7",
@@ -74,8 +74,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack8",
@@ -84,8 +84,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack9",
@@ -94,8 +94,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }, {
        "type": "rack",
        "id": "rack10",
@@ -104,8 +104,8 @@
        "width": 1295,
        "height": 23,
        "minBayNo": 1,
        "maxBayNo": 65,
        "hiddenArr": [1,65]
        "maxBayNo": 55,
        "hiddenArr": [1,55]
    }],
    "crns": [{
        "type": "crane",
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>
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>
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>