lty
2025-05-11 f25bbbc769f14d18c39f11ba0e395a9f09431148
#调试
7个文件已修改
440 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 203 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -149,6 +149,9 @@
            /**
             * 堆垛机状态判断
             */
            if(crnProtocol.getAlarm() == 10){
                crnProtocol.setAlarm((short) 0);
            }
            if (crnProtocol.getAlarm() > 0) {
                vo.setCrnStatus(CrnStatusType.MACHINE_ERROR);
            } else {
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -127,6 +127,9 @@
            vo.setForkOffset(crnProtocol.getForkPosType().desc);    // 货叉位置
            vo.setLiftPos(crnProtocol.getLiftPosType().desc);
            vo.setWalkPos(crnProtocol.getWalkPos()==1?"不在定位":"在定位");
            if(crnProtocol.getAlarm() == 10){
                crnProtocol.setAlarm((short) 0);
            }
            vo.setWarnCode(String.valueOf(crnProtocol.getAlarm()));
            if (crnProtocol.getAlarm() > 0) {
                BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
@@ -513,7 +516,10 @@
    }
    private boolean isLocSts(String row,String bay,String lev){
        String loc = String.format("%2d",row)+String.format("%3d",bay)+String.format("%2d",lev);
        int rowInt = Integer.parseInt(row);
        int bayInt = Integer.parseInt(bay);
        int levInt = Integer.parseInt(lev);
        String loc = String.format("%2d",rowInt)+String.format("%3d",bayInt)+String.format("%2d",levInt);
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", loc));
        if (Cools.isEmpty(locMast)){
            return false;
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -411,7 +411,7 @@
                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
                if(staProtocol == null) {
                    News.error("站点信息未获得");
//                    News.error("站点信息未获得");
                    continue;
                }
                // 尺寸检测异常
@@ -1103,7 +1103,7 @@
            crnCommand.setDestinationPosX((short) (locMast.getRow1() + slave.getOffset()));     // 目标库位排
            crnCommand.setDestinationPosY((short) (locMast.getBay1() + slave.getOffset()));     // 目标库位列
            crnCommand.setDestinationPosZ((short) (locMast.getLev1() + slave.getOffset()));     // 目标库位层
            crnCommand.setTraySize(locMast.getLocType1() == 2);
//            crnCommand.setTraySize(locMast.getLocType1() == 2);
            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                News.error("" + mark + " - 1" + " - 16" + " - 堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
@@ -1689,8 +1689,8 @@
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        locTypeDto.setLocType1((short) 1);
                        param.setIoType(10);
                        param.setSourceStaNo(emptyInSta.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -602,7 +602,7 @@
//        if (result != null && result.IsSuccess) {
//            Thread.sleep(200);
//            this.readStatus();
////            News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
////            News.info("堆垛机命令下发[{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
//            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
//            return true;
//        } else {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -28,10 +28,7 @@
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -71,12 +68,22 @@
        add(401);add(402);add(403);add(404);
    }};
    public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
        add(1); add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);
    public static final ArrayList<Integer> BarcodeList1 = new ArrayList<Integer>() {{
        add(1); add(2);add(3);add(4);add(5);
    }};
    public static final ArrayList<Integer> BarcodeList2 = new ArrayList<Integer>() {{
        add(6);add(7);add(8);add(9);
        add(10); add(11); add(12); add(13);
    }};
    public static final ArrayList<Integer> staNosErrList = new ArrayList<Integer>() {{
        add(101); add(201);
    public static final ArrayList<Integer> staNosErrList2 = new ArrayList<Integer>() {{
        add(101); add(104);add(106);add(108);
        add(202);add(204);add(207);add(210);
    }};
    public static final ArrayList<Integer> staNosErrList1 = new ArrayList<Integer>() {{
        add(122);
        add(222);add(224);add(227);add(230);
    }};
    private Integer count=0;
@@ -103,6 +110,17 @@
        this.slave = slave;
    }
    private ArrayList<Integer> getStaNoErr() {
        switch (slave.getId()) {
            case 1:
                return staNosErrList1;
            case 2:
                return staNosErrList2;
            default:
                throw new CoolException("服务器异常");
        }
    }
    private ArrayList<Integer> getStaNo() {
        switch (slave.getId()) {
            case 1:
@@ -111,6 +129,16 @@
                return staNos2;
            default:
                throw new CoolException("服务器异常");
        }
    }
    private ArrayList<Integer> getBarcodeList() {
        switch (slave.getId()) {
            case 1:
                return BarcodeList1;
            case 2:
                return BarcodeList2;
            default:
                throw new CoolException("获取站点失败!");
        }
    }
@@ -198,6 +226,20 @@
        return result;
    }
    public static int getOffsetFromSiteId(int siteId) {
        if (siteId < 100 || siteId > 450) {
            throw new IllegalArgumentException("siteId 超出有效范围: " + siteId);
        }
        return (siteId - 100) * 8;
    }
    public static int getOffsetFromSiteId2(int siteId) {
        if (siteId < 100 || siteId > 450) {
            throw new IllegalArgumentException("siteId 超出有效范围: " + siteId);
        }
        return (siteId - 100) * 6;
    }
    /**
     * 读取状态 ====> 整块plc
     */
@@ -205,9 +247,10 @@
//        // 更新入出库模式
//        updateIoMode();
        ArrayList<Integer> staNos = getStaNo();
        ArrayList<Integer> staNosErrList = getStaNoErr();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize*8));
        OperateResultExOne<byte[]> result200 = siemensS7Net.Read("DB101.800", (short) (staNoSize*8));
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -218,19 +261,13 @@
                    station.put(siteId, staProtocol);
                }
                boolean[] status = null;
                if(i < 24){
                    staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*8));     // 工作号
                int offset = getOffsetFromSiteId(siteId);//取余获得对应db块数据
                    staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4));   // 目标站
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, offset));     // 工作号
                    status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2);
                }else {
                    staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result200.Content, (i-24)*8));     // 工作号
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, offset+ 4));   // 目标站
                    staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result200.Content, (i-24)*8 + 4));   // 目标站
                    status = siemensS7Net.getByteTransform().TransBool(result200.Content, (i-24)*8 + 6, 2);
                }
                status = siemensS7Net.getByteTransform().TransBool(result.Content, offset+ 6, 2);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
@@ -248,8 +285,8 @@
        }
        //条码扫描器
        ArrayList<Integer> barcodeList = BarcodeList;
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1648", (short) (barcodeList.size() * 8));
            ArrayList<Integer> barcodeList = getBarcodeList();
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.2848", (short) (barcodeList.size() * 8));
        if (result2.IsSuccess) {
            for (int i = 0; i < barcodeList.size(); i++) {
                Integer barcodeId = barcodeList.get(i);
@@ -263,9 +300,9 @@
        //外形检测
        ArrayList<Integer> staNoErrs = staNosErrList;
        int staNoErrsSize = staNoErrs.size();
        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.1608", (short) (staNoErrsSize*8));
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.2808", (short) (staNoErrsSize * 4));
        if (resultErr.IsSuccess){
            for (int i = 0;i<2;i++){
                for (int i = 0; i < staNoErrsSize; i++) {
                Integer siteId = staNoErrs.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*4+2, 1);
                StaProtocol staProtocol = station.get(siteId);
@@ -279,51 +316,51 @@
            }
        }
        //plc故障
        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
        if (resultErr2.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
            }
        }
        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
        if (resultErr3.IsSuccess) {
            if (staError1 == null){
                staError1 = new StaError1();
            }
            boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
            staError1.setEMERGENCY_Stop_Core(status[0]);
            staError1.setEMERGENCY_STOP1(status[1]);
            staError1.setEMERGENCY_STOP2(status[2]);
            staError1.setEMERGENCY_STOP3(status[3]);
            staError1.setEMERGENCY_STOP4(status[4]);
            staError1.setDoor_EMERGENCY_STOP1(status[5]);
            staError1.setDoor_EMERGENCY_STOP2(status[6]);
            staError1.setDoor_EMERGENCY_STOP3(status[7]);
            staError1.setDoor_EMERGENCY_STOP4(status[8]);
            staError1.setDoor_EMERGENCY_STOP5(status[9]);
            staError1.setDoor_EMERGENCY_STOP6(status[10]);
            staError1.setDoor_Open_Err1(status[11]);
            staError1.setDoor_Open_Err1(status[12]);
            staError1.setDoor_Open_Err1(status[13]);
            staError1.setDoor_Open_Err1(status[14]);
            staError1.setDoor_Open_Err1(status[15]);
            staError1.setDoor_Open_Err1(status[16]);
        }
//        //plc故障
//        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
//        if (resultErr2.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                Integer siteId = staNos.get(i); // 站点编号
//                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*4, 1);
//                StaProtocol staProtocol = station.get(siteId);
//                staProtocol.setBreakerErr(status[0]);
//                staProtocol.setInfraredErr(status[1]);
//                staProtocol.setOutTimeErr(status[2]);
//                staProtocol.setSeizeSeatErr(status[3]);
//                staProtocol.setWrkYgoodsN(status[4]);
//                staProtocol.setInverterErr(status[5]);
//                staProtocol.setContactErr(status[6]);
//                staProtocol.setUpcontactErr(status[7]);
//
//            }
//        }
//        OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
//        if (resultErr3.IsSuccess) {
//            if (staError1 == null){
//                staError1 = new StaError1();
//            }
//            boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
//            staError1.setEMERGENCY_Stop_Core(status[0]);
//            staError1.setEMERGENCY_STOP1(status[1]);
//            staError1.setEMERGENCY_STOP2(status[2]);
//            staError1.setEMERGENCY_STOP3(status[3]);
//            staError1.setEMERGENCY_STOP4(status[4]);
//
//            staError1.setDoor_EMERGENCY_STOP1(status[5]);
//            staError1.setDoor_EMERGENCY_STOP2(status[6]);
//            staError1.setDoor_EMERGENCY_STOP3(status[7]);
//            staError1.setDoor_EMERGENCY_STOP4(status[8]);
//            staError1.setDoor_EMERGENCY_STOP5(status[9]);
//            staError1.setDoor_EMERGENCY_STOP6(status[10]);
//
//            staError1.setDoor_Open_Err1(status[11]);
//            staError1.setDoor_Open_Err1(status[12]);
//            staError1.setDoor_Open_Err1(status[13]);
//            staError1.setDoor_Open_Err1(status[14]);
//            staError1.setDoor_Open_Err1(status[15]);
//            staError1.setDoor_Open_Err1(status[16]);
//
//        }
        if (result.IsSuccess) {
@@ -355,6 +392,7 @@
        }
    }
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
@@ -363,20 +401,17 @@
            return;
        }
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        if(index >= 24){
            index = 76 + index;
        }
//        int index = staNos.indexOf(staProtocol.getSiteId());
        int offset = getOffsetFromSiteId2(staProtocol.getSiteId());//取余获得对应db块数据
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo());    // 工作号
            write = siemensS7Net.Write("DB100." + offset, staProtocol.getWorkNo());    // 工作号
            Thread.sleep(200);
            write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue());    // 目标站
            write1 = siemensS7Net.Write("DB100." + (offset+4), staProtocol.getStaNo().shortValue());    // 目标站
            if(write.IsSuccess && write1.IsSuccess){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
@@ -394,21 +429,22 @@
            }
            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/tzglwms
  url: 127.0.0.1:8080/tzglasrs
# 下位机配置
wcs-slave:
@@ -72,14 +72,14 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 121
      row: 1
      bay: 1
      bay: 121
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 123
      row: 2
      bay: 1
      bay: 121
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
@@ -94,70 +94,70 @@
      staNo: 203
      row: 2
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机入库站点
    crnInStn[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 223
      row: 2
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 201
      row: 1
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 221
      row: 1
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 223
      row: 2
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[5]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 203
      row: 2
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[6]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 401
      row: 1
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机入库站点
    crnInStn[4]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 401
      row: 1
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机出库站点
    crnOutStn[7]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 411
      row: 1
      bay: 1
      lev: 1
      bay: 121
      lev: 4
    # 堆垛机入库站点
    crnInStn[5]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 411
      row: 1
      bay: 1
      lev: 1
      bay: 121
      lev: 4
  # 堆垛机2
  crn[1]:
    id: 2
@@ -180,7 +180,7 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 124
      row: 3
      bay: 1
      bay: 121
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
@@ -188,56 +188,56 @@
      staNo: 205
      row: 3
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机入库站点
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 225
      row: 3
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 205
      row: 3
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 225
      row: 3
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机入库站点
    crnInStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 402
      row: 3
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机出库站点
    crnOutStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 402
      row: 3
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机入库站点
    crnInStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 412
      row: 3
      bay: 1
      lev: 1
      bay: 121
      lev: 4
    # 堆垛机出库站点
    crnOutStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 412
      row: 3
      bay: 1
      lev: 1
      bay: 121
      lev: 4
  # 堆垛机3
  crn[2]:
    id: 3
@@ -260,7 +260,7 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 125
      row: 5
      bay: 1
      bay: 121
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
@@ -268,84 +268,84 @@
      staNo: 206
      row: 5
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 226
      row: 5
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机入库站点
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 226
      row: 5
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 206
      row: 5
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机入库站点
    crnInStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 208
      row: 6
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 208
      row: 6
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机入库站点
    crnInStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 228
      row: 6
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 228
      row: 6
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机入库站点
    crnInStn[5]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 403
      row: 5
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机出库站点
    crnOutStn[5]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 403
      row: 5
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机入库站点
    crnInStn[6]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 413
      row: 5
      bay: 1
      lev: 1
      bay: 121
      lev: 4
    # 堆垛机出库站点
    crnOutStn[6]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 413
      row: 5
      bay: 1
      lev: 1
      bay: 121
      lev: 4
  # 堆垛机4
  crn[3]:
    id: 4
@@ -368,7 +368,7 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 126
      row: 7
      bay: 1
      bay: 121
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
@@ -376,84 +376,84 @@
      staNo: 209
      row: 7
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 209
      row: 7
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机入库站点
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 229
      row: 7
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 229
      row: 7
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机入库站点
    crnInStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 211
      row: 8
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机出库站点
    crnOutStn[3]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 211
      row: 8
      bay: 1
      lev: 1
      lev: 2
    # 堆垛机入库站点
    crnInStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 231
      row: 8
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机出库站点
    crnOutStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 231
      row: 8
      bay: 1
      lev: 1
      bay: 121
      lev: 2
    # 堆垛机入库站点
    crnInStn[5]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 403
      row: 7
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机出库站点
    crnOutStn[5]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 403
      row: 7
      bay: 1
      lev: 1
      lev: 4
    # 堆垛机入库站点
    crnInStn[6]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 414
      row: 7
      bay: 1
      lev: 1
      bay: 121
      lev: 4
    # 堆垛机出库站点
    crnOutStn[6]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 414
      row: 7
      bay: 1
      lev: 1
      bay: 121
      lev: 4
  # 东楼plc
  devp[0]:
    id: 1
@@ -799,98 +799,98 @@
    ip: 10.10.10.51
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 121
  # LED2
  led[1]:
    id: 2
    ip: 10.10.10.52
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 200
    staArr: 122
  led[2]:
    id: 3
    ip: 10.10.10.53
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 124
  led[3]:
    id: 4
    ip: 10.10.10.54
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 125
  led[4]:
    id: 5
    ip: 10.10.10.55
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 126
  led[5]:
    id: 6
    ip: 10.10.10.56
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 221
  led[6]:
    id: 7
    ip: 10.10.10.57
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 222
  led[7]:
    id: 8
    ip: 10.10.10.58
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 224
  led[8]:
    id: 9
    ip: 10.10.10.59
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 226
  led[9]:
    id: 10
    ip: 10.10.10.60
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 227
  led[10]:
    id: 11
    ip: 10.10.10.61
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 229
  led[11]:
    id: 12
    ip: 10.10.10.62
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 230
  led[12]:
    id: 13
    ip: 10.10.10.63
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 411
  led[13]:
    id: 14
    ip: 10.10.10.64
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 412
  led[14]:
    id: 15
    ip: 10.10.10.65
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 413
  led[15]:
    id: 16
    ip: 10.10.10.66
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 101
    staArr: 414
  led[16]:
    id: 17
    ip: 10.10.10.67
@@ -902,92 +902,89 @@
    ip: 10.10.10.68
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 103
  led[18]:
    id: 19
    ip: 10.10.10.69
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 104
  led[19]:
    id: 20
    ip: 10.10.10.70
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 106
  led[20]:
    id: 21
    ip: 10.10.10.71
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 108
  led[21]:
    id: 22
    ip: 10.10.10.72
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 201
  led[22]:
    id: 23
    ip: 10.10.10.73
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 202
  led[23]:
    id: 24
    ip: 10.10.10.74
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 204
  led[24]:
    id: 25
    ip: 10.10.10.75
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 206
  led[25]:
    id: 26
    ip: 10.10.10.76
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 207
  led[26]:
    id: 27
    ip: 10.10.10.77
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 209
  led[27]:
    id: 28
    ip: 10.10.10.78
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 210
  led[28]:
    id: 29
    ip: 10.10.10.79
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 401
  led[29]:
    id: 30
    ip: 10.10.10.80
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 402
  led[30]:
    id: 31
    ip: 10.10.10.81
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 403
  led[31]:
    id: 32
    ip: 10.10.10.82
    port: 5005
    devpPlcId: ${wcs-slave.devp[1].id}
    staArr: 101
    staArr: 404
src/main/webapp/views/console.html
@@ -595,7 +595,7 @@
                        // crns[i].bay = 15;
                        var offSet = 0;
                        unit = 15;
                        unit = 13;
                        offSet = 140;