dubin
4 天以前 ffc3b1151655f258fb1db0b24c3434bd294b0598
联调
12个文件已修改
691 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 462 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/LedSlave.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/CrnProtocol.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/MelsecCrnThread.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.map.js 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -29,6 +29,7 @@
import com.zy.core.enums.SlaveType;
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LedSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.StaProtocol;
@@ -42,6 +43,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
@@ -388,4 +390,14 @@
        return R.ok().add(JSON.toJSONString(jsonObjects));
    }
    @GetMapping("/getLedInfos")
    public R getLedInfos(HttpServletRequest request) {
        String remoteAddr = request.getRemoteAddr();
        for (LedSlave slave : slaveProperties.getLed()) {
            if (slave.getIp().equals(remoteAddr)) {
                return R.ok().add(slave);
            }
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -164,9 +164,6 @@
                    errMsg = "扫码失败";
                    back = true;
                }
//                if(staProtocol.getWeight() <= 0 ){
//                    continue;
//                }
//                if (!back && staProtocol.getWeight() == 0.0) {
//                    errMsg = "重量获取失败";
//                    back = true;
@@ -197,12 +194,7 @@
                }
                // 判断是否满足入库条件
                if (staProtocol.isAutoing()
                        && staProtocol.isLoading()
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                        && staProtocol.isPakMk()
                        && staProtocol.getWorkNo() == 9999) {
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) {
                    if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
                        News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
@@ -254,9 +246,7 @@
//                        }
                    }
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                            .eq("barcode", barcode)
                            .in("io_type", 107, 103, 57));
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).in("io_type", 107, 103, 57));
                    if (!Cools.isEmpty(checkPick)) {
                        continue;
                    }
@@ -270,13 +260,7 @@
                        param.setSourceStaNo(inSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        param.setWeight(staProtocol.getWeight());
                        String response = new HttpHandler.Builder()
                                .setTimeout(30, TimeUnit.SECONDS)
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/loc/v1")
                                .setJson(JSON.toJSONString(param))
                                .build()
                                .doPost();
                        String response = new HttpHandler.Builder().setTimeout(30, TimeUnit.SECONDS).setUri(wmsUrl).setPath("/rpc/pakin/loc/v1").setJson(JSON.toJSONString(param)).build().doPost();
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
@@ -379,9 +363,7 @@
                if (!staProtocol.isLoading()) {
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && staProtocol.isPakMk()) {
                if (staProtocol.isAutoing() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
@@ -409,9 +391,7 @@
                    }
                } else {
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable()
                            + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo()
                            + "、锁定标记" + staProtocol.isPakMk() + "、入库印记:" + staProtocol.getStamp());
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo() + "、锁定标记" + staProtocol.isPakMk() + "、入库印记:" + staProtocol.getStamp());
                }
            }
        }
@@ -546,8 +526,7 @@
                        // 无拣料数据
                        continue;
                    }
                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                        continue;
                    }
@@ -561,9 +540,7 @@
//                        log.error("{}号任务数据异常!", wrkMast.getWrkNo());
//                    }
                    // 获取目标站
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                            .eq("type_no", wrkMast.getIoType() - 50)
                            .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>().eq("type_no", wrkMast.getIoType() - 50).eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站
                            .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
@@ -636,8 +613,7 @@
                    }
                } else {
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable()
                            + "、空板信号:" + staProtocol.isEmptyMk());
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() + "、空板信号:" + staProtocol.isEmptyMk());
                }
            }
@@ -660,10 +636,7 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing()
                        && staProtocol.isLoading()
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk()
//                        && staProtocol.getWorkNo() > 0
                        && staProtocol.isPakMk()) {
@@ -736,13 +709,9 @@
                        String response = "";
                        log.info("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param);
                        try {
                            response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath("/rpc/pakin2/loc/v1")
                                    .setJson(JSON.toJSONString(param))
                            response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/pakin2/loc/v1").setJson(JSON.toJSONString(param))
//                                    .setTimeout(15, TimeUnit.SECONDS)
                                    .build()
                                    .doPost();
                                    .build().doPost();
                        } catch (Exception e) {
                            log.error("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param);
                            log.error("stnToCrnStnPick2===>>盘点查库位入库接口失败", e);
@@ -844,9 +813,7 @@
                        continue;
                    }
                    //  判断堆垛机状态等待确认
                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
                            && crnProtocol.statusType == CrnStatusType.WAITING
                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                        log.info("堆垛机出库完成 - 开始执行");
                        // 命令下发区 --------------------------------------------------------------------------
@@ -860,6 +827,38 @@
                        } else {
                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "输送线出库命令下发成功");
                        }
                        Integer pltType = wrkMast.getPltType();
                        // 更新工作档状态为14失败
                        wrkMast.setWrkSts(14L);
                        wrkMast.setCrnEndTime(new Date());
                        wrkMast.setPltType(0);
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
                            log.error("出库任务完成下发堆垛机复位,{},{}", wrkMast.getWrkNo(), wrkMast.getPltType());
                            if (pltType == 1) {
                                crnThread.setResetFlag(true);
                            } else if (pltType == 2) {
                                crnThread.setResetFlagTwo(true);
                            }
                        } else {
                            News.error("" + mark + " - 1" + " - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo());
                        }
                    } else if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNoTwo().equals(wrkMast.getWrkNo().shortValue()) && crnProtocol.statusTypeTwo == CrnStatusType.WAITING && crnProtocol.forkPosTypeTwo == CrnForkPosType.HOME) {
                        log.info("堆垛机出库完成 - 开始执行");
                        // 命令下发区 --------------------------------------------------------------------------
                        // 下发站点信息
                        staProtocol.setWorkNo(wrkMast.getWrkNo());
                        staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(), wrkMast.getSourceStaNo()));
                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "输送线出库命令下发失败");
                            continue;
                        } else {
                            log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "输送线出库命令下发成功");
                        }
                        Integer pltType = wrkMast.getPltType();
                        // 更新工作档状态为14失败
                        wrkMast.setWrkSts(14L);
@@ -868,9 +867,9 @@
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
                            log.error("出库任务完成下发堆垛机复位,{},{}", wrkMast.getWrkNo(), wrkMast.getPltType());
                            if (wrkMast.getPltType() == 1) {
                            if (pltType == 1) {
                                crnThread.setResetFlag(true);
                            } else if (wrkMast.getPltType() == 2) {
                            } else if (pltType == 2) {
                                crnThread.setResetFlagTwo(true);
                            }
                        } else {
@@ -878,11 +877,7 @@
                        }
                    } else {
                        News.errorNoLog("" + mark + " - 6" + " - 堆垛机信息不符合入库条件!!!"
                                + " 堆垛机状态:" + crnProtocol.modeType + "==自动AUTO:" + CrnModeType.AUTO
                                + "、堆垛机任务号:" + crnProtocol.getTaskNo() + "==工作档任务号:" + wrkMast.getWrkNo().shortValue()
                                + "、状态枚举:" + crnProtocol.statusType + "==WAITING:90 //任务完成等待WCS确认):" + CrnStatusType.WAITING
                                + "、货叉位置:" + crnProtocol.forkPosType + "==HOME:0  // 货叉原位:" + CrnForkPosType.HOME);
                        News.errorNoLog("" + mark + " - 6" + " - 堆垛机信息不符合入库条件!!!" + " 堆垛机状态:" + crnProtocol.modeType + "==自动AUTO:" + CrnModeType.AUTO + "、堆垛机任务号:" + crnProtocol.getTaskNo() + "==工作档任务号:" + wrkMast.getWrkNo().shortValue() + "、状态枚举:" + crnProtocol.statusType + "==WAITING:90 //任务完成等待WCS确认):" + CrnStatusType.WAITING + "、货叉位置:" + crnProtocol.forkPosType + "==HOME:0  // 货叉原位:" + CrnForkPosType.HOME);
                    }
                }
@@ -937,8 +932,7 @@
//            }
            // 只有当堆垛机空闲 并且 无任务时才继续执行
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO
                    && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) {
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getForkPos() == 0 && crnProtocol.getTaskNo() == 0 && crnProtocol.getTaskNoTwo() == 0) {
                News.warnNoLog("" + mark + " - 0" + " - 开始执行堆垛机入出库作业下发");
                if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 0) {
                    //堆垛机没有物料
@@ -946,21 +940,21 @@
                    if (crnProtocol.getLastIo().equals("I")) {
                        if (basCrnp.getInEnable().equals("Y")) {
                            //mark - 1 - ....
                            this.inTake(crn, crnProtocol, mark); //  入库
                            this.inTake(crn, crnProtocol, 0, mark); //  入库
                            crnProtocol.setLastIo("O");
                        } else if (basCrnp.getOutEnable().equals("Y")) {
                            //mark - 2 - ....
                            this.outTake(crn, crnProtocol, mark); //  出库
                            this.outTake(crn, crnProtocol, 0, mark); //  出库
                            crnProtocol.setLastIo("I");
                        }
                    }
                    // 如果最近一次是出库模式
                    else if (crnProtocol.getLastIo().equals("O")) {
                        if (basCrnp.getOutEnable().equals("Y")) {
                            this.outTake(crn, crnProtocol, mark); //  出库
                            this.outTake(crn, crnProtocol, 0, mark); //  出库
                            crnProtocol.setLastIo("I");
                        } else if (basCrnp.getInEnable().equals("Y")) {
                            this.inTake(crn, crnProtocol, mark); //  入库
                            this.inTake(crn, crnProtocol, 0, mark); //  入库
                            crnProtocol.setLastIo("O");
                        }
                    }
@@ -986,14 +980,14 @@
                        if (wrkMast.getIoType() >= 100) {
                            WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
                            if (wrkMast1 != null) {
                                this.outTake(crn, crnProtocol, mark);
                                this.outTake(crn, crnProtocol, 2, mark);
                            } else {
                                this.outPut(crn, crnProtocol, mark);
                            }
                        } else {
                            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
                            if (wrkMast1 != null) {
                                this.inTake(crn, crnProtocol, mark);
                                this.inTake(crn, crnProtocol, 2, mark);
                            } else {
                                this.inPut(crn, crnProtocol, mark);
                            }
@@ -1010,14 +1004,14 @@
                        if (wrkMast.getIoType() >= 100) {
                            WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
                            if (wrkMast1 != null) {
                                this.outTake(crn, crnProtocol, mark);
                                this.outTake(crn, crnProtocol, 1, mark);
                            } else {
                                this.outPut(crn, crnProtocol, mark);
                            }
                        } else {
                            WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
                            if (wrkMast1 != null) {
                                this.inTake(crn, crnProtocol, mark);
                                this.inTake(crn, crnProtocol, 1, mark);
                            } else {
                                this.inPut(crn, crnProtocol, mark);
                            }
@@ -1043,11 +1037,11 @@
     * @return
     */
    private Integer getCrnStation(String locNo) {
        String bay = locNo.substring(2, 6);
        String bay = locNo.substring(2, 5);
        if (Integer.parseInt(bay) == 1) {
            return 2;
        } else if (Integer.parseInt(bay) == 29) {
            return 1;
        } else if (Integer.parseInt(bay) == 29) {
            return 2;
        }
        if (Integer.parseInt(locNo.substring(0, 2)) >= 14) {
            return 1;
@@ -1060,7 +1054,7 @@
    /**
     * 入库取货
     */
    public synchronized void inTake(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
    public synchronized void inTake(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation, Integer mark) {
        News.warnNoLog("" + mark + " - 1" + " - 0" + " - 堆垛机入出库作业下发:执行入库");
        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
            boolean flag = false;
@@ -1080,15 +1074,11 @@
                continue;
            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                flag = true;
            }
            if (!flag) {
                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):"
                        + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading()
                        + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable()
                        + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                continue;
            }
            // 获取工作状态为2(设备上走)的入库工作档
@@ -1119,10 +1109,12 @@
            if (wrkMast103 != null) {
                News.error("" + mark + " - 1" + " - 8" + " - 堆垛机正在执行其他任务,请稍后再试");
            }
            Integer crnStation = getCrnStation(wrkMast.getLocNo());
            if (crnStation == 0) {
                crnStation = getCrnStation(wrkMast.getLocNo());
            }
            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
                News.error("" + mark + " - 1" + " - 9" + " - 堆垛机改工位存在工作档,工位={}", crnStation);
                break;
            }
            // 已经存在吊车执行任务时,则过滤
@@ -1130,9 +1122,7 @@
                continue;
            }
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                    , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()
                    , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue(), locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
@@ -1155,7 +1145,7 @@
                // 修改工作档状态 2.设备上走 => 103.吊车入库中
                Date now = new Date();
                wrkMast.setWrkSts(103L);
                wrkMast.setPltType(1);
                wrkMast.setPltType(crnStation);
                wrkMast.setCrnStrTime(now);
                wrkMast.setModiTime(now);
                if (wrkMastMapper.updateById(wrkMast) == 0) {
@@ -1215,9 +1205,7 @@
                continue;
            }
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                    , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()
                    , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue(), locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
@@ -1254,7 +1242,7 @@
    /**
     * 出库取货
     */
    public synchronized void outTake(CrnSlave slave, CrnProtocol crnProtocol, Integer mark) {
    public synchronized void outTake(CrnSlave slave, CrnProtocol crnProtocol, Integer crnStation, Integer mark) {
        News.warnNoLog("" + mark + " - 2" + " - 0" + " - 堆垛机入出库作业下发:执行出库");
        for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
            // 获取工作状态为11(生成出库ID)的出库工作档
@@ -1292,8 +1280,7 @@
                    break;
                }
                // 判断堆垛机出库站状态
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                    // 命令下发区 --------------------------------------------------------------------------
                    // 堆垛机控制过滤
@@ -1350,10 +1337,12 @@
                            }
                        }
                    }
                    Integer crnStation = getCrnStation(wrkMast.getSourceLocNo());
                    if (crnStation == 0) {
                        crnStation = getCrnStation(wrkMast.getSourceLocNo());
                    }
                    if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
                        News.error("" + mark + " - 1" + " - 9" + " - 堆垛机改工位存在工作档,工位={}", crnStation);
                        break;
                    }
                    // 已经存在吊车执行任务时,则过滤
@@ -1362,9 +1351,7 @@
//                        return;
                    }
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                            , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
                            , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
@@ -1386,6 +1373,7 @@
                        // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                        Date now = new Date();
                        wrkMast.setWrkSts(106L);
                        wrkMast.setPltType(crnStation);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
@@ -1441,8 +1429,7 @@
//                    continue;
                }
                // 判断堆垛机出库站状态
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                    // 命令下发区 --------------------------------------------------------------------------
                    // 堆垛机控制过滤
@@ -1452,53 +1439,53 @@
                    }
                    // 双深库位且浅库位有货,则需先对浅库位进行库位移转
                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}", wrkMast.getWrkNo());
                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                        // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
                            News.warnNoLog("" + mark + " - 2" + " - 7" + " - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}", shallowLoc.getLocSts());
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                            if (null == waitWrkMast) {
                                News.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
                            } else {
                                if (waitWrkMast.getWrkSts() == 11) {
                                    waitWrkMast.setIoPri(15D);
                                    waitWrkMast.setModiTime(new Date());
                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                        News.error("" + mark + " - 2" + " - 8" + " - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
                                    }
                                    continue;
                                } else {
                                }
                            }
                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F、D  库位状态={}", shallowLoc.getLocSts());
//                    if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
//                        News.warnNoLog("" + mark + " - 2" + " - 6" + " - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}", wrkMast.getWrkNo());
//                        String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
//                        LocMast shallowLoc = locMastService.selectById(shallowLocNo);
//                        // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
//                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
//                            News.warnNoLog("" + mark + " - 2" + " - 7" + " - // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!库位状态={}", shallowLoc.getLocSts());
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
                            //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                            // 此标记避免多次执行移库任务
//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
//                                || Cools.isEmpty(waitWrkMast)) {
                            if (Cools.isEmpty(waitWrkMast)) {
                                wrkMast.setUpdMk("Y");
                                wrkMastMapper.updateById(wrkMast);
                                // 生成工作档,将浅库位移转到新的库位中
                                moveLocForDeepLoc(slave, shallowLoc, mark);
                            }
                            News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
                            continue;
                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q、S  库位状态={}", shallowLoc.getLocSts());
                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
                                News.infoNoLog("" + mark + " - 2" + " - 11" + " - // F、D  工作状态(判断条件为==4)={}", waitWrkMast.getWrkSts());
                                continue;
                            }
                        }
                    }
//                            if (null == waitWrkMast) {
//                                News.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
//                            } else {
//                                if (waitWrkMast.getWrkSts() == 11) {
//                                    waitWrkMast.setIoPri(15D);
//                                    waitWrkMast.setModiTime(new Date());
//                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
//                                        News.error("" + mark + " - 2" + " - 8" + " - 调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
//                                    }
//                                    continue;
//                                } else {
//
//                                }
//                            }
//                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
//                            News.warnNoLog("" + mark + " - 2" + " - 9" + " - // F、D  库位状态={}", shallowLoc.getLocSts());
////                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
//                            //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
//                            // 此标记避免多次执行移库任务
////                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
////                                || Cools.isEmpty(waitWrkMast)) {
//                            if (Cools.isEmpty(waitWrkMast)) {
//                                wrkMast.setUpdMk("Y");
//                                wrkMastMapper.updateById(wrkMast);
//                                // 生成工作档,将浅库位移转到新的库位中
//                                moveLocForDeepLoc(slave, shallowLoc, mark);
//                            }
//                            News.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
//                            continue;
//                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
//                            News.warnNoLog("" + mark + " - 2" + " - 10" + " - // Q、S  库位状态={}", shallowLoc.getLocSts());
//                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
//                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
//                                News.infoNoLog("" + mark + " - 2" + " - 11" + " - // F、D  工作状态(判断条件为==4)={}", waitWrkMast.getWrkSts());
//                                continue;
//                            }
//                        }
//                    }
                    if (wrkMastMapper.selectByPltType(slave.getId(), wrkMast.getPltType()) == null) {
                        News.error("" + mark + " - 1" + " - 9" + " - 堆垛机改工位存在工作档,工位={}", wrkMast.getPltType());
@@ -1511,9 +1498,7 @@
//                        return;
                    }
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                            , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
                            , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
@@ -1629,15 +1614,11 @@
//            if(staProtocol.getWorkNo() == 9998){
//                continue;
//            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                flag = true;
            }
            if (!flag) {
                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):"
                        + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading()
                        + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable()
                        + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                News.errorNoLog("" + mark + " - 1" + " - 3" + " - 堆垛机入库站信息(以下需要全true):" + "自动信号" + staProtocol.isAutoing() + "有物信号" + staProtocol.isLoading() + "工作号>0" + staProtocol.getWorkNo() + "可入信号" + staProtocol.isInEnable() + "能入信号(wms设置).equals(\"Y\")" + staDetl.getCanining());
                continue;
            }
            // 获取工作状态为2(设备上走)的入库工作档
@@ -1711,9 +1692,7 @@
//                    }
//                }
//            }
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                    , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue()
                    , locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
            News.warnNoLog("" + mark + " - 1" + " - 15" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue(), locMast.getRow1().shortValue(), locMast.getBay1().shortValue(), locMast.getLev1().shortValue());
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
@@ -1829,8 +1808,7 @@
//                    continue;
                }
                // 判断堆垛机出库站状态
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                    // 命令下发区 --------------------------------------------------------------------------
                    // 堆垛机控制过滤
@@ -1894,9 +1872,7 @@
//                        return;
                    }
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                            , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
                            , crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    News.warnNoLog("" + mark + " - 2" + " - 12" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), crnStn.getRow().shortValue(), crnStn.getBay().shortValue(), crnStn.getLev().shortValue());
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
@@ -2092,14 +2068,40 @@
        if (wrkMastMapper.selectWorking(slave.getId()) != null) {
            return;
        }
        int crnStation = 0;
        String bay = wrkMast.getSourceLocNo().substring(2, 5);
        String bay2 = wrkMast.getLocNo().substring(2, 5);
        if (Integer.parseInt(bay) == 1 || Integer.parseInt(bay2) == 1) {
            crnStation = 1;
            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
                this.outPut(slave, crnProtocol, mark);
                return;
            }
        } else if (Integer.parseInt(bay) == 29 || Integer.parseInt(bay2) == 29) {
            crnStation = 2;
            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
                this.outPut(slave, crnProtocol, mark);
                return;
            }
        } else {
            crnStation = 1;
            if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
                if (wrkMastMapper.selectByPltType(slave.getId(), 2) != null) {
                    this.outPut(slave, crnProtocol, mark);
                    return;
                } else {
                    crnStation = 2;
                }
            }
        }
        News.warnNoLog("" + mark + " - 3" + " - 3" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue()
                , sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue()
                , sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue());
        News.warnNoLog("" + mark + " - 3" + " - 3" + " - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}", wrkMast.getWrkNo().shortValue(), sourceSta.getRow1().shortValue(), sourceSta.getBay1().shortValue(), sourceSta.getLev1().shortValue(), sta.getRow1().shortValue(), sta.getBay1().shortValue(), sta.getLev1().shortValue());
        // 命令下发区 --------------------------------------------------------------------------
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setPltType(getCrnStation(wrkMast.getSourceLocNo()));
        crnCommand.setPltType(crnStation);
        crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
@@ -2126,6 +2128,8 @@
        News.infoNoLog("" + mark + " - 3" + " - 0" + " - 堆垛机入出库作业下发:库位移转完成");
    }
    /**
     * 执行对工作档的完成操作
@@ -2176,8 +2180,47 @@
                if (wrkMastMapper.updateById(wrkMast) > 0) {
                    // 堆垛机复位
                    log.error(wrkMast.getWrkNo() + "任务修改状态4成功,复位堆垛机={}", crnThread.getCrnProtocol().getCrnNo());
                    News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                    News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号工位1={}", crnThread.getCrnProtocol().getCrnNo());
                    crnThread.setResetFlag(true);
                }
            } else if (crnProtocol.statusTypeTwo == CrnStatusType.WAITING && crnProtocol.getTaskNoTwo() != 0) {
                News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
                if (crnProtocol.getTaskNo() == 9999) {
                    crnThread.setResetFlagTwo(true);
                    continue;
                }
                // 获取入库待确认工作档
                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNoTwo().intValue());
                if (wrkMast == null) {
                    News.error("" + mark + " - 1" + " - 堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo());
                    continue;
                }
                // 入库 + 库位转移  ==> 4.入库完成
                if (wrkMast.getWrkSts() == 3) {
                    wrkMast.setWrkSts(4L);
                    wrkMast.setPltType(0);
                } else if (wrkMast.getWrkSts() == 103) {
                    wrkMast.setWrkSts(104L);
                } else if (wrkMast.getWrkSts() == 105) {
                    wrkMast.setWrkSts(4L);
                    wrkMast.setPltType(0);
                } else if (wrkMast.getWrkSts() == 106) {
                    wrkMast.setWrkSts(107L);
                } else if (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11) {
                    wrkMast.setWrkSts(4L);
                    wrkMast.setPltType(0);
                } else {
                    continue;
                }
                Date now = new Date();
                wrkMast.setCrnEndTime(now);
                wrkMast.setModiTime(now);
                // 修改成功后复位堆垛机
                if (wrkMastMapper.updateById(wrkMast) > 0) {
                    // 堆垛机复位
                    log.error(wrkMast.getWrkNo() + "任务修改状态4成功,复位堆垛机={}", crnThread.getCrnProtocol().getCrnNo());
                    News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号2工位2={}", crnThread.getCrnProtocol().getCrnNo());
                    crnThread.setResetFlagTwo(true);
                }
            }
@@ -2214,8 +2257,7 @@
                            }
                            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                            BasErrLog basErrLog = new BasErrLog(
                                    null,    // 编号
                            BasErrLog basErrLog = new BasErrLog(null,    // 编号
                                    wrkMast.getWrkNo(),    // 工作号
                                    now,    // 发生时间
                                    null,    // 结束时间
@@ -2262,8 +2304,7 @@
                        if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                            String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                            BasErrLog basErrLog = new BasErrLog(
                                    null,    // 编号
                            BasErrLog basErrLog = new BasErrLog(null,    // 编号
                                    null,    // 工作号
                                    now,    // 发生时间
                                    null,    // 结束时间
@@ -2338,13 +2379,7 @@
                }
                // 站点条件判断
                if (staProtocol.isAutoing()
                        && staProtocol.isLoading()
                        && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk()
                        && staProtocol.isPakMk()
                        && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)
                ) {
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isEmptyMk() && staProtocol.isPakMk() && (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() > 9700)) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行:空栈板初始化入库,叉车入库站放货");
                    try {
@@ -2354,12 +2389,7 @@
                        param.setIoType(10);
                        param.setSourceStaNo(emptyInSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/loc/v1")
                                .setJson(JSON.toJSONString(param))
                                .build()
                                .doPost();
                        String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/pakin/loc/v1").setJson(JSON.toJSONString(param)).build().doPost();
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
@@ -2414,9 +2444,7 @@
                    }
                } else {
                    News.errorNoLog("" + mark + " - 4" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isAutoing() + "、可入信号:" + staProtocol.isInEnable()
                            + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo()
                            + "、锁定标记" + staProtocol.isPakMk());
                    News.errorNoLog("" + mark + " - 4" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isAutoing() + "、可入信号:" + staProtocol.isInEnable() + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo() + "、锁定标记" + staProtocol.isPakMk());
                }
            }
        }
@@ -2673,9 +2701,9 @@
            for (Integer row : rows) {
                if (Utils.isDeepLoc(slaveProperties, row)) {
                    if (shallowLoc.getBay1() == 1) {
                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
                    } else if (shallowLoc.getRow1() == 29) {
                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 29);
                    } else if (shallowLoc.getRow1() == 29) {
                        loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
                    } else {
                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                    }
@@ -2699,9 +2727,9 @@
                for (Integer row : rows) {
                    if (Utils.isShallowLoc(slaveProperties, row)) {
                        if (shallowLoc.getBay1() == 1) {
                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
                        } else if (shallowLoc.getRow1() == 29) {
                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 29);
                        } else if (shallowLoc.getRow1() == 29) {
                            loc = locMastService.queryFreeLocMast2(row, shallowLoc.getLocType1(), 1);
                        } else {
                            loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
                        }
@@ -2972,9 +3000,7 @@
                                    // 出库切换中
                                    devpThread.ioModeOf2F = IoModeType.PAKOUT_BOOTING;
                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
                                            && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading()
                                            && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
                                        // 出库模式
                                        devpThread.ioModeOf2F = IoModeType.PAKOUT_MODE;
                                    }
@@ -2990,9 +3016,7 @@
                                    // 出库切换中
                                    devpThread.ioModeOf4F = IoModeType.PAKOUT_BOOTING;
                                    WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
                                            && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading()
                                            && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
                                    if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() && !devpThread.getStation().get(inSta.getStaNo() + 1).isLoading() && devpThread.getStation().get(inSta.getStaNo() + 1).getWorkNo() == 0) {
                                        // 出库模式
                                        devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE;
                                    }
@@ -3053,8 +3077,7 @@
            if (staProtocol.isAutoing()  //自动
                    && !staProtocol.isLoading()  //无物
                    && staProtocol.isOutEnable()  //可出信号
                    && staProtocol.getWorkNo() == 0
            ) {
                    && staProtocol.getWorkNo() == 0) {
                WrkMast pakoutEmpty = wrkMastMapper.selectPakoutEmpty(site);
                if (null != pakoutEmpty) {
                    return;
@@ -3066,12 +3089,7 @@
                LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1);
                locTypeDto.setSiteId(site);
                try {
                    String response = new HttpHandler.Builder()
                            .setUri(wmsUrl)
                            .setPath("/rpc/auto/emptyOut/v1")
                            .setJson(JSON.toJSONString(locTypeDto))
                            .build()
                            .doPost();
                    String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyOut/v1").setJson(JSON.toJSONString(locTypeDto)).build().doPost();
                    JSONObject jsonObject = JSON.parseObject(response);
                    if (jsonObject.getInteger("code").equals(200)) {
                        String data = jsonObject.get("data").toString();
@@ -3103,8 +3121,7 @@
            if (staProtocol.isAutoing()  //自动
                    && staProtocol.isLoading()  //有物
                    && staProtocol.isInEnable()  //可入信号
                    && staProtocol.isPakMk()
                    && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //工作号为0或者工作号是9991~9999(输送机留用)
                    && staProtocol.isPakMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //工作号为0或者工作号是9991~9999(输送机留用)
            ) {
                try {
@@ -3115,12 +3132,7 @@
                    LocTypeDto locTypeDto = new LocTypeDto(loctype1, (short) 1, (short) 1);
                    locTypeDto.setSiteId(site);
                    String response = new HttpHandler.Builder()
                            .setUri(wmsUrl)
                            .setPath("/rpc/auto/emptyIn/v1")
                            .setJson(JSON.toJSONString(locTypeDto))
                            .build()
                            .doPost();
                    String response = new HttpHandler.Builder().setUri(wmsUrl).setPath("/rpc/auto/emptyIn/v1").setJson(JSON.toJSONString(locTypeDto)).build().doPost();
                    JSONObject jsonObject = JSON.parseObject(response);
                    if (jsonObject.getInteger("code").equals(200)) {
                        News.info((String) jsonObject.get("msg"));
@@ -3203,12 +3215,8 @@
                }
                // 只有当RGV空闲、自动,工位一无物//rgv可用
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE &&
                        rgvProtocol.getModeType() == RgvModeType.AUTO
                        && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接
                        && (rgvProtocol.getTaskNo1() == 0)
                        && rgvThread.isPakMk()
                ) {
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接
                        && (rgvProtocol.getTaskNo1() == 0) && rgvThread.isPakMk()) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    Integer rgvNoOther = basRgvMap.getRgvNoOther(rgvProtocol.getRgvNo());
@@ -3219,12 +3227,7 @@
                    } else {
                        rgvProtocolOther = rgvProtocolOther.clone();
                    }
                    if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE
                            && rgvProtocolOther.getModeType() == RgvModeType.AUTO
                            && rgvProtocolOther.getLoaded1() == 0
                            && (rgvProtocolOther.getTaskNo1() == 0)
                            && rgvThreadOther.isPakMk()
                    ) {
                    if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE && rgvProtocolOther.getModeType() == RgvModeType.AUTO && rgvProtocolOther.getLoaded1() == 0 && (rgvProtocolOther.getTaskNo1() == 0) && rgvThreadOther.isPakMk()) {
                        //对工作档进行判断
                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
                        if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo1() <= 9000) {
@@ -3268,10 +3271,7 @@
                    }
                    // 只有当RGV等待WCS确认、自动
                    if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1() == RgvStatusType.FETCHWAITING)
                            && rgvProtocol.getModeType() == RgvModeType.AUTO
                            && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1)
                    ) {
                    if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1() == RgvStatusType.FETCHWAITING) && rgvProtocol.getModeType() == RgvModeType.AUTO && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1)) {
                        log.info("{}号小车等待wcs确认,状态{},参数{}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol);
                        if (rgvProtocol.getTaskNo1() != 0) {
                            if (rgvProtocol.getTaskNo1() == 32222) {
@@ -3379,12 +3379,7 @@
                }
                // 只有当RGV空闲、自动,工位一无物//rgv可用
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                        && rgvProtocol.getModeType() == RgvModeType.AUTO
                        && rgvProtocol.getLoaded1() == 0
                        && rgvProtocol.getTaskNo1() == 0
                        && rgvThread.isPakMk()
                ) {
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakMk()) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
@@ -3595,12 +3590,8 @@
                }
                // 只有当RGV空闲、自动,工位一无物//rgv可用
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                        && rgvProtocol.getModeType() == RgvModeType.AUTO
                        && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接
                        && rgvProtocol.getTaskNo1() == 0
                        && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
                        && rgvThread.isPakMk()
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接
                        && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvThread.isPakMk()
//                        && rgvProtocol.getTaskNo2()==0
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
@@ -3850,10 +3841,7 @@
                        continue;
                    }
                }
                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                        .eq("crn_no", crn.getId())
                        .notIn("wrk_sts", 5, 14, 15)
                );
                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crn.getId()).notIn("wrk_sts", 5, 14, 15));
                if (!wrkMasts.isEmpty()) {
                    continue;
                }
src/main/java/com/zy/core/MainProcess.java
@@ -77,7 +77,7 @@
//                        News.info("输入成功");
//                    }
                    //堆垛机无任务回入库口待机
                    mainService.crnMove();
                    //mainService.crnMove();
                    // 其他  ===>> LED显示器复位,显示默认信息
                    mainService.ledReset();
src/main/java/com/zy/core/model/LedSlave.java
@@ -21,4 +21,5 @@
    // 叉车站点数组
    private List<Integer> staArr = new ArrayList<>();
    private Integer crnId;
}
src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -283,31 +283,31 @@
        return basCrnp;
    }
    public void setxSpeed(Short xSpeed) {
        this.xSpeed = Float.valueOf(xSpeed);
    public void setxSpeed(Float xSpeed) {
        this.xSpeed = (xSpeed);
    }
    public void setySpeed(Short ySpeed) {
        this.ySpeed = Float.valueOf(ySpeed);
    public void setySpeed(Float ySpeed) {
        this.ySpeed =ySpeed;
    }
    public void setzSpeed(Short zSpeed) {
        this.zSpeed = Float.valueOf(zSpeed);
    public void setzSpeed(Float zSpeed) {
        this.zSpeed = zSpeed;
    }
    public void setxDistance(Short xDistance) {
        this.xDistance = Float.valueOf(xDistance);
    public void setxDistance(Float xDistance) {
        this.xDistance =xDistance;
    }
    public void setyDistance(Short yDistance) {
        this.yDistance = Float.valueOf(yDistance);
    public void setyDistance(Float yDistance) {
        this.yDistance = yDistance;
    }
    public void setxDuration(Short xDuration) {
        this.xDuration = Float.valueOf(xDuration);
    public void setxDuration(Float xDuration) {
        this.xDuration =xDuration;
    }
    public void setyDuration(Short yDuration) {
    public void setyDuration(Float yDuration) {
        this.yDuration = Float.valueOf(yDuration);
    }
src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -126,13 +126,13 @@
        crnProtocol.setWalkPos((short)0);
        crnProtocol.setLoaded((short)0);
        crnProtocol.setAlarm((short)0);
        crnProtocol.setxSpeed((short)0);
        crnProtocol.setySpeed((short)0);
        crnProtocol.setzSpeed((short)0);
        crnProtocol.setxDistance((short)0);
        crnProtocol.setyDistance((short)0);
        crnProtocol.setxDuration((short)0);
        crnProtocol.setyDuration((short)0);
        crnProtocol.setxSpeed((float)0);
        crnProtocol.setySpeed((float)0);
        crnProtocol.setzSpeed((float)0);
        crnProtocol.setxDistance((float)0);
        crnProtocol.setyDistance((float)0);
        crnProtocol.setxDuration((float)0);
        crnProtocol.setyDuration((float)0);
    }
    @Override
@@ -183,13 +183,13 @@
                crnProtocol.setTemp2(melsecMcNet.getByteTransform().TransInt16(result.Content, 22));
                crnProtocol.setTemp3(melsecMcNet.getByteTransform().TransInt16(result.Content, 24));
                crnProtocol.setTemp4(melsecMcNet.getByteTransform().TransInt16(result.Content, 26));
                crnProtocol.setxSpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 28));
                crnProtocol.setySpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 32));
                crnProtocol.setzSpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 36));
                crnProtocol.setxDistance(melsecMcNet.getByteTransform().TransInt16(result.Content, 40));
                crnProtocol.setyDistance(melsecMcNet.getByteTransform().TransInt16(result.Content, 44));
                crnProtocol.setxDuration(melsecMcNet.getByteTransform().TransInt16(result.Content, 48));
                crnProtocol.setyDuration(melsecMcNet.getByteTransform().TransInt16(result.Content, 52));
//                crnProtocol.setxSpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 28));
//                crnProtocol.setySpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 32));
//                crnProtocol.setzSpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 36));
//                crnProtocol.setxDistance(melsecMcNet.getByteTransform().TransInt16(result.Content, 40));
//                crnProtocol.setyDistance(melsecMcNet.getByteTransform().TransInt16(result.Content, 44));
//                crnProtocol.setxDuration(melsecMcNet.getByteTransform().TransInt16(result.Content, 48));
//                crnProtocol.setyDuration(melsecMcNet.getByteTransform().TransInt16(result.Content, 52));
                OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -147,13 +147,13 @@
        crnProtocol.setWalkPos((short) 0);
        crnProtocol.setLoaded((short) 0);
        crnProtocol.setAlarm((short) 0);
        crnProtocol.setxSpeed((short) 0);
        crnProtocol.setySpeed((short) 0);
        crnProtocol.setzSpeed((short) 0);
        crnProtocol.setxDistance((short) 0);
        crnProtocol.setyDistance((short) 0);
        crnProtocol.setxDuration((short) 0);
        crnProtocol.setyDuration((short) 0);
        crnProtocol.setxSpeed((float) 0);
        crnProtocol.setySpeed((float) 0);
        crnProtocol.setzSpeed((float) 0);
        crnProtocol.setxDistance((float) 0);
        crnProtocol.setyDistance((float) 0);
        crnProtocol.setxDuration((float) 0);
        crnProtocol.setyDuration((float) 0);
    }
    @Override
@@ -181,7 +181,7 @@
     */
    private void readStatus() {
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56);
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 66);
            if (result.IsSuccess) {
                if (null == crnProtocol) {
                    crnProtocol = new CrnProtocol();
@@ -201,18 +201,17 @@
                crnProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 32));
                //crnProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 20));
                //crnProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 22));
                //crnProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24));
                //crnProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 26));
                crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 34));
                crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 38));
                crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 42));
                crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 46));
                crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 50));
                crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 54));
                crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 58));
                crnProtocol.setxSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 34));
                crnProtocol.setySpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 38));
                crnProtocol.setzSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 42));
                crnProtocol.setxDistance((float) siemensNet.getByteTransform().TransInt16(result.Content, 50) / 10000);
                crnProtocol.setyDistance((float) siemensNet.getByteTransform().TransInt16(result.Content, 54) / 10000);
                crnProtocol.setxDuration((float) siemensNet.getByteTransform().TransInt16(result.Content, 58) / 10000);
                crnProtocol.setyDuration((float) siemensNet.getByteTransform().TransInt16(result.Content, 62) / 10000);
                //2工位
                crnProtocol.setTaskNoTwo(siemensNet.getByteTransform().TransInt16(result.Content, 14));
@@ -227,7 +226,7 @@
                // 复位信号
                if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
                    News.error("---第一步、[堆垛机号:{}, 工作号:{}, 载货台信号:{}]==>> 状态为10,等待确认!!",
                    News.error("---第一步、[堆垛机号:{}, 工作号:{}, 载货台1信号:{}]==>> 状态为10,等待确认!!",
                            slave.getId(), crnProtocol.getTaskNo(), crnProtocol.getLoaded() == 1 ? "有物" : "无物");
                    if (resetFlag) {
                        if (crnProtocol.getTaskNo() == 9999) {
@@ -238,7 +237,7 @@
                        crnCommand.setAckFinish((short) 1);
                        if (write(crnCommand)) {
                            resetFlag = false;
                            News.error("---第二步、[堆垛机号:{}, 工作号:{}]==>> 复位resetFlag标记成功{}!!",
                            News.error("---第二步、[堆垛机号:{}, 工作号:{}]==>> 工位1复位resetFlag标记成功{}!!",
                                    slave.getId(), wrkNo, resetFlag);
                        }
                    }
@@ -246,7 +245,7 @@
                // 复位信号
                if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusTypeTwo().equals(CrnStatusType.WAITING)) {
                    News.error("---第一步、[堆垛机号:{}, 工作号:{}, 载货台信号:{}]==>> 状态为10,等待确认!!",
                    News.error("---第一步、[堆垛机号:{}, 工作号:{}, 载货台2信号:{}]==>> 状态为10,等待确认!!",
                            slave.getId(), crnProtocol.getTaskNo(), crnProtocol.getLoaded() == 1 ? "有物" : "无物");
                    if (resetFlagTwo) {
                        if (crnProtocol.getTaskNo() == 9999) {
@@ -257,7 +256,7 @@
                        crnCommand.setAckFinish((short) 1);
                        if (write2(crnCommand)) {
                            resetFlagTwo = false;
                            News.error("---第二步、[堆垛机号:{}, 工作号:{}]==>> 复位resetFlag标记成功{}!!",
                            News.error("---第二步、[堆垛机号:{}, 工作号:{}]==>> 工位2复位resetFlag标记成功{}!!",
                                    slave.getId(), wrkNo, resetFlag);
                        }
                    }
@@ -498,7 +497,7 @@
        }
        // 向堆垛机发任务前的堆垛机状态
        try {
            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.20", (short) 18);
            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.20", (short) 20);
            if (resultRead.IsSuccess) {
                CrnCommand one = new CrnCommand();
                one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
@@ -556,7 +555,7 @@
                    writeCount1++;
                    continue;
                }
                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.20", (short) 18);
                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 36);
                if (resultRead.IsSuccess) {
                    CrnCommand one = new CrnCommand();
                    one.setAckFinish(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
@@ -601,7 +600,7 @@
                    }
                }
            } catch (Exception e) {
                News.error("堆垛机命令地址写入后回读出错,异常:" + e);
                News.error("堆垛机命令地址写入后回读出错2,异常:" + e);
            }
            writeCount1++;
        } while (writeCount1 < 6);
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -46,13 +46,12 @@
    private StaError1 staError1;
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(1101);
        add(1102);
        add(1103);
        add(1104);
        add(1105);
        add(1106);
        add(1107);
        add(1001);
        add(1002);
        add(1003);
        add(1004);
        add(1005);
        add(1006);
    }};
@@ -62,15 +61,11 @@
    public static final ArrayList<Integer> staNosErrList1 = new ArrayList<Integer>() {{
        add(102);
        add(1005);
    }};
    public static final ArrayList<Integer> staNoWeight1 = new ArrayList<Integer>() {{
        add(101);
        add(102);
        add(103);
        add(104);
        add(105);
        add(1005);
    }};
@@ -414,21 +409,21 @@
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            News.error("SiemensDevp" + " - 4" + " - 写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        }
//        else {
//            //dang 101,201zhan xaifazhiling qingchu tiaoxingsaomaolide shuju shanchu
//            if (staProtocol.getSiteId()==101){
//                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 1);
//                log.info("qingchutiaoma,{}",barcodeThread.getBarcode());
//                barcodeThread.clearBarcode();
//            }
//            if (staProtocol.getSiteId()==201){
//                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 2);
//                log.info("qingchutiaoma,{}",barcodeThread.getBarcode());
//                barcodeThread.clearBarcode();
//            }
//            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
//            News.info("SiemensDevp"+" - 5"+" - 输送线命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
//        }
        else {
            //dang 101,201zhan xaifazhiling qingchu tiaoxingsaomaolide shuju shanchu
            if (staProtocol.getSiteId()==101){
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 1);
                log.info("qingchutiaoma,{}",barcodeThread.getBarcode());
                barcodeThread.clearBarcode();
            }
            if (staProtocol.getSiteId()==201){
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 2);
                log.info("qingchutiaoma,{}",barcodeThread.getBarcode());
                barcodeThread.clearBarcode();
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            News.info("SiemensDevp"+" - 5"+" - 输送线命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    // 更新入出库模式
src/main/resources/application.yml
@@ -38,7 +38,7 @@
  enable: false
wms:
  url: 127.0.0.1:8080/wcs
  url: 127.0.0.1:8080/czkhasrs
# 下位机配置
wcs-slave:
@@ -53,7 +53,7 @@
  # 堆垛机1
  crn[0]:
    id: 1
    ip: 10.10.10.100
    ip: 192.168.7.210
    port: 102
    rack: 0
    slot: 0
@@ -63,31 +63,31 @@
    # 堆垛机入库站点
    crnInStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1105
      staNo: 1006
      row: 2
      bay: 11
      lev: 2
      lev: 1
    # 堆垛机出库站点
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1101
      staNo: 1001
      row: 2
      bay: 14
      lev: 2
      lev: 1
  # plc
  devp[0]:
    id: 1
    ip: 10.10.10.120
    ip: 192.168.7.230
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 1106
      staNo: 1006
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 1105
      backSta: 1005
      led: ${wcs-slave.led[0].id}
#    # 入库口2
#    inSta[1]:
@@ -97,10 +97,10 @@
#      led: ${wcs-slave.led[1].id}
    # 拣料入库口1
    pickSta[0]:
      staNo: 1106
      staNo: 1006
      barcode: ${wcs-slave.barcode[0].id}
      led: ${wcs-slave.led[0].id}
      backSta: 1105
      backSta: 1005
#    # 拣料入库口2
#    pickSta[1]:
#      staNo: 225
@@ -109,9 +109,9 @@
#      backSta: 224
    # 空板入库口1
    emptyInSta[0]:
      staNo: 1106
      staNo: 1006
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 1105
      backSta: 1005
      led: ${wcs-slave.led[0].id}
    # 空板入库口2
    #emptyInSta[1]:
@@ -121,7 +121,7 @@
      #led: ${wcs-slave.led[1].id}
    # 出库口1
    outSta[0]:
      staNo: 1101
      staNo: 1001
  # 条码扫描仪1
  barcode[0]:
    id: 1
@@ -130,15 +130,17 @@
  # LED1
  led[0]:
    id: 121
    ip: 10.10.10.51
    ip: 192.168.7.241
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 1104
    staArr: 1004
    crnId: 1
#  # LED2
#  led[1]:
#    id: 123
#    ip: 10.10.10.52
#    port: 5005
#    devpPlcId: ${wcs-slave.devp[0].id}
#    staArr: 104
  led[1]:
    id: 123
    ip: 192.168.7.240
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 1004
    crnId: 1
src/main/resources/mapper/WrkMastMapper.xml
@@ -149,7 +149,7 @@
    </select>
    <select id="selectWorking" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where 1=1 and (wrk_sts=3 or wrk_sts=12) and crn_no=#{crnNo} order by io_time,wrk_no
        select top 1 * from dbo.asr_wrk_mast where 1=1 and (wrk_sts=3 or wrk_sts=12 or wrk_sts=103 or wrk_sts=105 or wrk_sts=106) and crn_no=#{crnNo} order by io_time,wrk_no
    </select>
<!--    &lt;!&ndash; 入库任务 &ndash;&gt;-->
src/main/webapp/static/js/common.js
@@ -1,4 +1,3 @@
// var baseUrl = "/rqdzwcs";
var baseUrl = "/wcs";
// 赋值
src/main/webapp/static/js/console.map.js
@@ -1,5 +1,4 @@
mapInfo ={
    // "mapName": "rqdzwcs",
    "mapName": "wcs",
    "rackCount": 8,
    "crnCount": 4,
@@ -127,11 +126,11 @@
                    "stns": [
                        // { "type": "stn", "id": "site-100", "text": "100", "top": 80, "left": 94, "width": 40, "height": 23 },
                        //{ "type": "stn", "id": "site-103", "text": "103", "top": 160, "left": 1430, "width": 120, "height": 23 },
                        {"type": "stn", "id": "site-1103", "text": "1103", "top": 180, "left": 1000, "width": 45, "height": 45},
                        {"type": "stn", "id": "site-1104", "text": "1104", "top": 180, "left": 945, "width": 45, "height": 45},
                        {"type": "stn", "id": "site-1105", "text": "1105", "top": 180, "left": 890, "width": 45, "height": 45},
                        { "type": "stn", "id": "site-1102", "text": "1102", "top": 280, "left": 890, "width": 45, "height": 45 },
                        { "type": "stn", "id": "site-1101", "text": "1101", "top": 230, "left": 890, "width": 45, "height": 45 },
                        {"type": "stn", "id": "site-1001", "text": "1001", "top": 180, "left": 1000, "width": 45, "height": 45},
                        {"type": "stn", "id": "site-1004", "text": "1004", "top": 280, "left": 945, "width": 45, "height": 45},
                        {"type": "stn", "id": "site-1006", "text": "1006", "top": 180, "left": 890, "width": 45, "height": 45},
                        { "type": "stn", "id": "site-1005", "text": "1005", "top": 230, "left": 890, "width": 45, "height": 95 },
                        //{ "type": "stn", "id": "site-1101", "text": "1005", "top": 230, "left": 890, "width": 45, "height": 45 },
                        // { "type": "stn", "id": "site-110", "text": "110", "top": 130, "left": 1784, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-111", "text": "111", "top": 130, "left": 1826, "width": 40, "height": 23 },
                        //
@@ -145,8 +144,8 @@
                        // { "type": "stn", "id": "site-118", "text": "118", "top": 240, "left": 94, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-119", "text": "119", "top": 240, "left": 52, "width": 40, "height": 23 },
                        // { "type": "stn", "id": "site-120", "text": "120", "top": 240, "left": 10, "width": 40, "height": 23 },
                        { "type": "stn", "id": "site-1107", "text": "1107", "top": 280, "left": 1000, "width": 45, "height": 45 },
                        { "type": "stn", "id": "site-1106", "text": "1106", "top": 230, "left": 1000, "width": 45, "height": 45 },
                        { "type": "stn", "id": "site-1003", "text": "1003", "top": 280, "left": 1000, "width": 45, "height": 45 },
                        { "type": "stn", "id": "site-1002", "text": "1002", "top": 230, "left": 1000, "width": 45, "height": 45 },
                        // { "type": "stn", "id": "site-123", "text": "123", "top": 210, "left": 1301, "width": 60, "height": 23 },
                        // { "type": "stn", "id": "site-124", "text": "124", "top": 160, "left": 1742, "width": 120, "height": 23 },