自动化立体仓库 - WCS系统
#
zjj
2025-03-29 432aa30874196937f6250b34c7ef6fb62dbaf984
#
1个文件已添加
12个文件已修改
451 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SiteController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/images/logo-dark.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.js 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.map.js 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pipeline.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -67,6 +67,11 @@
    @Autowired
    private BasRgvService basRgvService;
    public static final ArrayList<Integer> barcodeNos = new ArrayList<Integer>() {{
        add(1112);add(1114);add(1122);add(1124);
    }};
    @PostMapping("/system/running/status")
    @ManagerAuth(memo = "系统运行状态")
    public R systemRunningStatus(){
@@ -107,17 +112,12 @@
                stations.putAll(devpThread.getStation());
            }
        }
        List<BasRgv> basRgvs = basRgvService.selectList(new EntityWrapper<BasRgv>());
        for (Map.Entry<Integer, StaProtocol> entry : stations.entrySet()) {
            SiteLatestDataVo vo = new SiteLatestDataVo();
            StaProtocol staProtocol = entry.getValue();
            vo.setSiteId(String.valueOf(entry.getKey())); // 站点编号
            for (BasRgv basRgv: basRgvs){
                if (basRgv.getRgvNo().equals(entry.getKey()) ){
                    staProtocol.setWorkNo(basRgv.getWrkNo1());
                }
            }
            vo.setWorkNo(staProtocol.getWorkNo()); // 工作号
            vo.setWorkNo(staProtocol.getWorkNo().intValue()); // 工作号
            vo.setSiteStatus(SiteStatusType.process(staProtocol));  // 状态
            vo.setNearbySta(staProtocol.getNearbySta());
            vos.add(vo);
@@ -173,16 +173,26 @@
    @ManagerAuth(memo = "条码扫描仪实时数据")
    public R barcodeLatestData(){
        List<BarcodeDataVo> list = new ArrayList<>();
        for (Slave barcode : slaveProperties.getBarcode()) {
            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcode.getId());
            if (null == barcodeThread) {
        List<SiteLatestDataVo> vos = new ArrayList<>();
        Map<Integer, StaProtocol> stations = new HashMap<>();
        for (DevpSlave devp : slaveProperties.getDevp()) {
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            if (null != devpThread) {
                stations.putAll(devpThread.getStation());
            }
        }
        for (Map.Entry<Integer, StaProtocol> entry : stations.entrySet()) {
            int index = barcodeNos.indexOf(entry.getValue().getSiteId());
            if (index == -1) {
                continue;
            }
            BarcodeDataVo vo = new BarcodeDataVo();
            vo.setBarcodeId(barcode.getId());
            vo.setCodeValue(barcodeThread.getBarcode());
            vo.setBarcodeId(index);
            vo.setCodeValue(entry.getValue().getBarcode());
            list.add(vo);
        }
        return R.ok().add(list);
    }
@@ -224,7 +234,7 @@
                        return R.error("数据库维护异常");
                    }
                    vo.setSiteId(siteId);   // 站点编号
                    vo.setWorkNo(staProtocol.getWorkNo());   // 工作号
                    vo.setWorkNo(staProtocol.getWorkNo().intValue());   // 工作号
                    if (staProtocol.getWorkNo() > 0) {
                        WrkMast wrkMast = wrkMastService.selectById(staProtocol.getWorkNo());
src/main/java/com/zy/asrs/controller/SiteController.java
@@ -77,6 +77,7 @@
            list.add(vo);
            StaProtocol staProtocol = station.get(devp.getDevNo());
            if (null == staProtocol) { continue; }
            vo.setWorkNo(staProtocol.getWorkNo().intValue());
            vo.setAutoing(staProtocol.isAutoing()?"Y":"N");     //  自动
            vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 有物
            vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 可入
@@ -86,6 +87,10 @@
            vo.setStaNo(staProtocol.getStaNo());                // 目标站
//            vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "低" : "高");     //高低库位
            vo.setLocType1(devp.getDevNo()==102 ? "高" : "低");
            vo.setIn(staProtocol.isIn()?"Y":"N");
            vo.setOut(staProtocol.isOut()?"Y":"N");
            vo.setIdle(staProtocol.isIdle()?"Y":"N");
            vo.setFinishWorkNo(staProtocol.getFinishWorkNo().toString());
        }
        return R.ok().add(list);
@@ -136,7 +141,7 @@
                if (siteId.equals(entry.getKey())) {
                    StaProtocol staProtocol = entry.getValue();
                    vo.setDevNo(entry.getKey());    // 站点编号
                    vo.setWorkNo(staProtocol.getWorkNo());   //  工作号
                    vo.setWorkNo(staProtocol.getWorkNo().intValue());   //  工作号
                    vo.setAutoing(staProtocol.isAutoing()?"Y":"N");     //  自动
                    vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 有物
                    vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 可入
@@ -170,7 +175,7 @@
                        staProtocol = staProtocol.clone();
                    }
                    if (workNo != null) {
                        staProtocol.setWorkNo(workNo);
                        staProtocol.setWorkNo(workNo.shortValue());
                    }
                    if (staNo != null) {
                        staProtocol.setStaNo(staNo);
src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
@@ -37,4 +37,12 @@
    //高低库位
    private String locType1 = "-";
    //入库模式
    private String in = "-";
    //出库模式
    private String out = "-";
    //空闲
    private String idle = "-";
    //已完成工作号
    private String finishWorkNo = "-";
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -122,17 +122,6 @@
                    staProtocol = staProtocol.clone();
                }
                if (barcodeThread == null) {
                    continue;
                }
                if (barcodeThreadMat == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
                String barcodeMat = barcodeThreadMat.getBarcode();
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
@@ -167,9 +156,6 @@
                }
                // 退回
                if (back) {
//                        News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg);
                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                    if (!staProtocol.isLoading()){
                        continue;
                    }
@@ -180,13 +166,6 @@
                    if (ledThread != null) {
                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                    }
                    staProtocol.setWorkNo(wrkNo);
                    News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                    wrkNo++;
                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
                }
                // 判断是否满足入库条件
@@ -195,6 +174,7 @@
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                        && staProtocol.isPakMk()) {
                    String barcode = staProtocol.getBarcode();
                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
                        News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        // led 异常显示
@@ -202,28 +182,7 @@
                            String errorMsg = "扫码失败,请重试";
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                        }
                        staProtocol.setWorkNo(wrkNo);
                        News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                        wrkNo++;
                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
                        continue;
                    }
                    if (staProtocol.getSiteId()!= 159){
                        if( Cools.isEmpty(barcodeMat) || "NG".endsWith(barcodeMat) || "NoRead".equals(barcodeMat) || "00000000".equals(barcodeMat)) {
                            News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcodeMat(), barcodeMat);
                            staProtocol.setWorkNo(wrkNo);
                            News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                            wrkNo++;
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
                            continue;
                        }
                    }
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
@@ -279,7 +238,6 @@
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
                            staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -294,45 +252,11 @@
                                throw new CoolException("更新plc站点信息失败");
                            }
                        } else if (jsonObject.getInteger("code").equals(700)) {
                            SearchLocParam param2 = new SearchLocParam();
                            param2.setBarcode(barcode);
                            param2.setBarcodeMat(barcodeMat);
                            param2.setSourceStaNo(inSta.getStaNo());
                            param2.setLocType1(locTypeDto.getLocType1());
                            String response2 = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath("/rpc/pakin/yk/loc/v33")
                                    .setJson(JSON.toJSONString(param2))
                                    .build()
                                    .doPost();
                            JSONObject jsonObject2 = JSON.parseObject(response2);
                            if (jsonObject2.getInteger("code").equals(200)) {
                                log.info("自动组托成功!!");
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "自动组托成功"));
                            } else {
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "自动组托失败!!!barcodeMat==>"+barcodeMat));
                                News.error(methodName + "==>组托失败:请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/yk/loc/v33", JSON.toJSONString(param), response2);
                        }else {
                            String errorMsg = jsonObject.getString("msg");
                            if (!Cools.isEmpty(errorMsg)) {
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                            }
                            try{
                                Thread.sleep(500);
                            } catch (Exception e){
                            }
                        } else {
                            staProtocol.setWorkNo(wrkNo);
                            wrkNo++;
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//
//                            if (ledThread != null) {
                                String errorMsg = jsonObject.getString("msg");
                                if (!Cools.isEmpty(errorMsg)) {
                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                                }
//                            }
//                            News.error(methodName + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                        }
@@ -1029,7 +953,7 @@
            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
            crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排
            crnCommand.setDestinationPosX((short) (locMast.getRow1().shortValue()-13));     // 目标库位排
            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
            crnCommand.setTraySize(locMast.getLocType1() == 2);
@@ -1196,7 +1120,7 @@
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
                    crnCommand.setSourcePosX((short) (sourceSta.getRow1().shortValue()-13));     // 源库位排
                    crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
                    crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
                    crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排
@@ -1395,10 +1319,10 @@
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
        crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
        crnCommand.setSourcePosX((short) (sourceSta.getRow1().shortValue()-13));     // 源库位排
        crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
        crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
        crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排
        crnCommand.setDestinationPosX((short) (sta.getRow1().shortValue()-13));     // 目标库位排
        crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列
        crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层
        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -70,6 +70,10 @@
    //lfd入库印记  当stamp>=2时才入库
    private Integer stamp = 0;
    private boolean in = false;
    private boolean out = false;
    // 外形检测 ------------------------------------------------------------------------
    // 前超限
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -56,6 +56,11 @@
        add(1131);add(1132);add(1133);add(1134);add(1135);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(1112);add(1114);add(1122);add(1124);add(1131);
    }};
    public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
        add(1112); add(1122);
    }};
@@ -205,8 +210,8 @@
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setIdle(status[1]); //空闲
                staProtocol.setLoading(status[2]);  // 有物
//                staProtocol.setInEnable(status[2]); // 可入
//                staProtocol.setOutEnable(status[3]);// 可出
                staProtocol.setIn(status[3]);
                staProtocol.setOut(status[4]);
                staProtocol.setBackErr(status[5]);
                staProtocol.setLeftErr(status[6]);
                staProtocol.setRightErr(status[7]);
@@ -214,6 +219,9 @@
                staProtocol.setWeightErr(status[9]);
                staProtocol.setLow(status[10]);
                staProtocol.setHigh(status[11]);
                staProtocol.setInEnable(status[13]); // 可入
                staProtocol.setOutEnable(status[14]);// 可出
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*26+2));     // 工作号
@@ -267,14 +275,13 @@
        if (null == staProtocol) {
            return;
        }
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        int index = staNos2.indexOf(staProtocol.getSiteId());
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB83." + index*8+6, staProtocol.getWorkNo());    // 工作号
            write = siemensS7Net.Write("DB83." + (index*8+6), staProtocol.getWorkNo());    // 工作号
            Thread.sleep(200);
            write1 = siemensS7Net.Write("DB83." + (index*8+4), staProtocol.getStaNo());    // 目标站
            if(write.IsSuccess && write1.IsSuccess){
src/main/resources/application.yml
@@ -34,20 +34,20 @@
  enable: false
wms:
  url: 127.0.0.1:9090/ykwms
  url: 127.0.0.1:8080/fyxcwms
# 下位机配置
wcs-slave:
  # 双深
  doubleDeep: true
  # 双深库位排号
  doubleLocs: 1,4
  doubleLocs: 14,16
  # 一个堆垛机负责的货架排数
  groupCount: 4
  # 堆垛机1
  crn[0]:
    id: 1
    ip: 10.10.10.10
    ip: 192.168.10.10
    port: 102
    rack: 0
    slot: 0
@@ -61,27 +61,6 @@
      row: 2
      bay: 2
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1114
      row: 2
      bay: 2
      lev: 1
    # 堆垛机入库站点
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1122
      row: 2
      bay: 2
      lev: 1
    # 堆垛机入库站点
    crnInStn[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1124
      row: 2
      bay: 2
      lev: 1
    # 堆垛机出库站点
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
@@ -89,37 +68,104 @@
      row: 2
      bay: 2
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1114
      row: 3
      bay: 30
      lev: 1
    # 堆垛机出库站点
    crnOutStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1114
      row: 3
      bay: 30
      lev: 1
    # 堆垛机入库站点
    crnInStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1122
      row: 2
      bay: 2
      lev: 1
      lev: 4
    # 堆垛机出库站点
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1122
      row: 2
      bay: 2
      lev: 1
      lev: 4
    # 堆垛机入库站点
    crnInStn[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1124
      row: 3
      bay: 30
      lev: 4
    # 堆垛机出库站点
    crnOutStn[3]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1124
      row: 2
      bay: 2
      lev: 1
      row: 3
      bay: 30
      lev: 4
    # 堆垛机入库站点
    crnInStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1131
      row: 3
      bay: 30
      lev: 8
    # 堆垛机出库站点
    crnOutStn[4]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 1131
      row: 3
      bay: 30
      lev: 8
  # 输送线1
  devp[0]:
    id: 1
    ip: 10.10.10.50
    ip: 192.168.10.66
    port: 102
    rack: 0
    slot: 0
    # 入库口1
    inSta[0]:
      staNo: 106
      staNo: 1112
      barcode: ${wcs-slave.barcode[0].id}
      barcodeMat: ${wcs-slave.barcode[3].id}
      backSta: 105
      backSta: 1111
      led: ${wcs-slave.led[1].id}
    # 入库口1
    inSta[1]:
      staNo: 1114
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 1113
      led: ${wcs-slave.led[1].id}
    # 入库口1
    inSta[2]:
      staNo: 1122
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 1121
      led: ${wcs-slave.led[1].id}
    # 入库口1
    inSta[3]:
      staNo: 1124
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 1123
      led: ${wcs-slave.led[1].id}
    outSta[0]:
      staNo: 1111
      led: ${wcs-slave.led[1].id}
    outSta[1]:
      staNo: 1121
      led: ${wcs-slave.led[1].id}
    outSta[2]:
      staNo: 1113
      led: ${wcs-slave.led[1].id}
    outSta[3]:
      staNo: 1123
      led: ${wcs-slave.led[1].id}
src/main/webapp/static/images/logo-dark.png
src/main/webapp/static/js/console.js
@@ -9,10 +9,12 @@
    track = '',
    tracks = '',
    stn = '',
    stns = '',
    barcode = '',
    barcodeArr = [],
    hoist = '',
    stns = '',
    stnArr = [],
    barcodeArr = [],
    hoistArr = [],
    floorBtn = '',
    floorBtns = '',
    floorBtnss = '',
@@ -141,8 +143,9 @@
        var index = i
        var n = 1
        stnArr[index] = ''
        total[index] = ''
        barcodeArr[index] = ''
        hoistArr[index] = ''
        total[index] = ''
        for (let j = 0; j < stnss.length; j++) {
            if (stnss[j].type == "stn") {
                stn = "<div class='site' id='" + stnss[j].id +
@@ -164,7 +167,6 @@
                    "px'>" + stnss[j].text  + "</div>"
                stnArr[i] = stnArr[i] + stn
            }
        }
        for (let k = 0; k < barcodes.length; k++) {
            barcode = "<div class='barcode' id='" + barcodes[k].id +
@@ -175,9 +177,8 @@
                "px;left: "+ barcodes[k].left + "px'>" + "</div>"
            barcodeArr[i] = barcodeArr[i] + barcode
        }
    }
    floorInfo = racks + rackDescs + tracks + crns + stnArr[0] + floorBtnss+ barcodeArr[0]
    floorInfo = racks + rackDescs + tracks + crns + stnArr[0] + floorBtnss + barcodeArr[0]
    $(".main-part").append(floorInfo)
    $("#line-total").html(total[0])
@@ -186,7 +187,7 @@
}
function changFloor(e) {
    $(".main-part").empty()  // 清空节点
    floorInfo = racks  + stnArr[e] +rackDescs + crns + tracks + floorBtnss+ barcodeArr[0]
    floorInfo = racks  + stnArr[e] +rackDescs + crns + tracks + floorBtnss + barcodeArr[e]
    $(".main-part").append(floorInfo)
    $("#line-total").empty()
    $("#line-total").html(total[e])
src/main/webapp/static/js/console.map.js
@@ -13,8 +13,8 @@
        "left": 529,
        "width": 1280,
        "height": 22,
        "minBayNo": 2,
        "maxBayNo": 56
        "minBayNo": 1,
        "maxBayNo": 31
    }, {
        "type": "rack",
        "id": "rack11",
@@ -22,8 +22,8 @@
        "left": 529,
        "width": 1280,
        "height": 22,
        "minBayNo": 2,
        "maxBayNo": 56
        "minBayNo": 1,
        "maxBayNo": 31
    }, {
        "type": "rack",
        "id": "rack10",
@@ -31,8 +31,8 @@
        "left": 529,
        "width": 1280,
        "height": 22,
        "minBayNo": 2,
        "maxBayNo": 56
        "minBayNo": 1,
        "maxBayNo": 31
    }, {
        "type": "rack",
        "id": "rack9",
@@ -40,8 +40,8 @@
        "left": 529,
        "width": 1280,
        "height": 22,
        "minBayNo": 2,
        "maxBayNo": 56
        "minBayNo": 1,
        "maxBayNo": 31
    }],
    "rackDescs": [{
        "type": "rackDescs",
@@ -50,7 +50,7 @@
        "top": 167,
        "left": 1810,
        "width": 30,
        "height": 23
        "height": 0
    }, {
        "type": "rackDescs",
        "id": "lb_desc2",
@@ -58,7 +58,7 @@
        "top": 596,
        "left": 1810,
        "width": 30,
        "height": 23
        "height": 0
    }],
    "crns": [{
        "type": "track",
@@ -70,8 +70,8 @@
        "height": 2
    }, {
        "type": "crane",
        "id": "crn-3",
        "text": "3",
        "id": "crn-1",
        "text": "1",
        "top": 325,
        "left": 490,
        "width": 93,
@@ -95,59 +95,115 @@
            "height": 668,
            "stns": [{
                "type": "stn",
                "id": "site-144",
                "text": "144",
                "top": 239,
                "left": 468,
                "id": "site-1112",
                "text": "1112",
                "top": 280,
                "left": 580,
                "width": 60,
                "height": 19
                "height": 40
            },{
                "type": "stn",
                "id": "site-1111",
                "text": "1111",
                "top": 238,
                "left": 580,
                "width": 60,
                "height": 40
            },{
                "type": "stn",
                "id": "site-1114",
                "text": "1114",
                "top": 352,
                "left": 1740,
                "width": 60,
                "height": 40
            },{
                "type": "stn",
                "id": "site-1113",
                "text": "1113",
                "top": 394,
                "left": 1740,
                "width": 60,
                "height": 40
            }],
            "barcode":[
                {
                    "type": "barcode",
                    "id": "barcode-1",
                    "id": "barcode-0",
                    "text": "",
                    "top": 749,
                    "left": 470,
                    "top": 210,
                    "left": 570,
                    "width": 80,
                    "height": 20
                },
                {
                    "type": "barcode",
                    "id": "barcode-2",
                    "id": "barcode-1",
                    "text": "",
                    "top": 684,
                    "left": 470,
                    "top": 436,
                    "left": 1730,
                    "width": 80,
                    "height": 20
                } ,
                }
            ]
        },{
            "type": "floor",
            "id": "page_floor2",
            "text": "2库",
            "top": 4,
            "left": 22,
            "width": 1819,
            "height": 668,
            "stns": [{
                "type": "stn",
                "id": "site-1122",
                "text": "1122",
                "top": 280,
                "left": 580,
                "width": 60,
                "height": 40
            },{
                "type": "stn",
                "id": "site-1121",
                "text": "1121",
                "top": 238,
                "left": 580,
                "width": 60,
                "height": 40
            },{
                "type": "stn",
                "id": "site-1124",
                "text": "1124",
                "top": 352,
                "left": 1740,
                "width": 60,
                "height": 40
            },{
                "type": "stn",
                "id": "site-1123",
                "text": "1123",
                "top": 394,
                "left": 1740,
                "width": 60,
                "height": 40
            }],
            "barcode":[
                {
                    "type": "barcode",
                    "id": "barcode-2",
                    "text": "",
                    "top": 210,
                    "left": 570,
                    "width": 80,
                    "height": 20
                },
                {
                    "type": "barcode",
                    "id": "barcode-3",
                    "text": "",
                    "top": 64.5,
                    "left": 470,
                    "top": 436,
                    "left": 1730,
                    "width": 80,
                    "height": 20
                }
                ,
                {
                    "type": "barcode",
                    "id": "barcode-4",
                    "text": "",
                    "top": 749,
                    "left": 560,
                    "width": 150,
                    "height": 20
                }
                ,
                {
                    "type": "barcode",
                    "id": "barcode-5",
                    "text": "",
                    "top": 684,
                    "left": 560,
                    "width": 150,
                    "height": 20
                }
            ]
src/main/webapp/views/console.html
@@ -21,7 +21,7 @@
                <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6>
            </div>
            <div class="head-right">
                <img src="../static/images/zy-logo.png" alt="中扬" height="44" width="80">
                <img src="../static/images/logo-dark.png" alt="中扬" height="44">
            </div>
        </div>
        <!-- 货架 + 堆垛机 + 入库站点 -->
src/main/webapp/views/index.html
@@ -24,7 +24,7 @@
            <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主控图</a></li>
            <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">输送设备</a></li>
            <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">堆垛机</a></li>
            <li><a id="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>
<!--            <li><a id="rgv" onclick="nav(this.id)" class="nav-unselect" href="#">RGV</a></li>-->
        </ul>
    </div>
</div>
src/main/webapp/views/pipeline.html
@@ -114,7 +114,7 @@
                        <th>可出</th>
                        <th>入库标记</th>
                        <th>空板信号</th>
                        <th>目标站</th>
                        <th>已完成任务</th>
                        <th>高低库位</th>
                    </tr>
                    </thead>
@@ -302,7 +302,7 @@
                        setVal(tr.children("td").eq(5), table[i-1].outEnable);
                        setVal(tr.children("td").eq(6), table[i-1].pakMk);
                        setVal(tr.children("td").eq(7), table[i-1].emptyMk);
                        setVal(tr.children("td").eq(8), table[i-1].staNo);
                        setVal(tr.children("td").eq(8), table[i-1].finishWorkNo);
                        setVal(tr.children("td").eq(9), table[i-1].locType1);
                    }
                } else if (res.code === 403){