whycq
2022-08-30 8a73235a41b25c4d90fd90b0c1521f0e7d4b5368
Merge remote-tracking branch 'origin/hylywcs' into hylywcs
10个文件已修改
893 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/LedThread.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/crn.css 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/pipeline.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.js 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/console.map.js 656 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/crn.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pipeline.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1426,12 +1426,22 @@
            }
            // 命令下发 -------------------------------------------------------------------------------
            if (!commands.isEmpty()) {
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                    log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    continue;
                if (led.getId() == 7) {
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                        continue;
                    } else {
                        ledThread.setLedMk(false);
                    }
                } else {
                    ledThread.setLedMk(false);
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                        continue;
                    } else {
                        ledThread.setLedMk(false);
                    }
                }
            }
            try {
@@ -1507,11 +1517,20 @@
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // led显示默认内容
            if (reset && !ledThread.isLedMk()) {
                ledThread.setLedMk(true);
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                    log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                } else {
                if (led.getId() == 7) {
                    ledThread.setLedMk(true);
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    } else {
                    }
                } else {
                    ledThread.setLedMk(true);
                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                        log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    } else {
                    }
                }
            }
        }
@@ -1893,6 +1912,24 @@
                                devpThread.ioModeOf2F = IoModeType.PAKIN_MODE;
                            }
                            break;
                        case 401://1F
                            if (pakout != null) {
                                if (devpThread.ioModeOf4F != IoModeType.PAKOUT_MODE) {
                                    // 出库切换中
                                    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) {
                                        // 出库模式
                                        devpThread.ioModeOf4F = IoModeType.PAKOUT_MODE;
                                    }
                                }
                            } else {
                                // 入库模式
                                devpThread.ioModeOf4F = IoModeType.PAKIN_MODE;
                            }
                            break;
                    }
                }
src/main/java/com/zy/core/thread/LedThread.java
@@ -43,6 +43,12 @@
    private boolean ledMk = false;
    private boolean resetStatus = false;    // 复位状态
    // 显示器
    private StringBuffer stringBuffer = new StringBuffer();
    private List<LedCommand> commandList;
    private StringBuffer errorMsg = new StringBuffer();
    public LedThread(Slave slave) {
        this.slave = slave;
        try {
@@ -71,6 +77,20 @@
                        // 复位
                        case 2:
                            reset();
                            break;
                        // 写数据 液晶
                        case 3:
                            write7((List<LedCommand>)task.getData());
                            break;
                        // 复位 液晶
                        case 4:
                            reset7();
                            break;
                        case 5:
                            error((String) task.getData());
                            break;
                        case 6:
                            errorReset();
                            break;
                        default:
                            break;
@@ -181,6 +201,44 @@
        }
        close();
    }
    private void write7(List<LedCommand> list) {
        commandList = list;
        StringBuilder sb = new StringBuilder();
        for (LedCommand command : list) {
            sb.append(command.getTitle()).append("(").append(command.getWorkNo()).append(")").append("\n");
            sb.append("源库位:").append(command.getSourceLocNo()).append("\n");
            sb.append("目标站:").append(command.getStaNo()).append("\n");
            if (!command.isEmptyMk()) {
                for (MatDto matDto : command.getMatDtos()) {
                    sb.append("物料编码:").append(matDto.getMatNo()).append("\n");
                    sb.append("数量:").append(matDto.getCount()).append("\n");
                }
            }
            sb.append("\n");
        }
        stringBuffer.delete(0, stringBuffer.length());
        stringBuffer.append(sb.toString());
        errorReset();
    }
    private void reset7() {
        commandList = null;
        stringBuffer.delete(0, stringBuffer.length());
    }
    private void error(String msg) {
        errorMsg.delete(0, errorMsg.length());
        errorMsg.append(msg);
    }
    public void errorReset() {
        this.errorMsg.delete(0, errorMsg.length());
    }
    @Override
    public boolean connect() {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -44,7 +44,7 @@
    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
        add(101);add(102);add(103);add(104);
        add(201);add(202);add(203);add(204);
        add(301);add(302);add(303);add(304);add(305);add(306);
        add(301);add(302);add(303);add(304);add(305);add(306);add(401);add(402);
    }};
    /**
@@ -62,6 +62,8 @@
     */
    public IoModeType ioModeOf2F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    public IoModeType ioModeOf4F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
src/main/resources/application.yml
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://10.10.10.210:1433;databasename=hylyasrs
    url: jdbc:sqlserver://localhost:1433;databasename=hylyasrs
    username: sa
    password: sa@123
  mvc:
@@ -143,7 +143,37 @@
      row: 10
      bay: 1
      lev: 1
  # 堆垛机4
  crn[3]:
    id: 4
    ip: 10.10.10.121
    port: 102
    rack: 0
    slot: 0
    # 偏移量,当堆垛机站点列号=1时,偏移量=2
    offset: 2
    demo: false
    # 堆垛机入库站点
    crnInStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 401
      row: 14
      bay: 1
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 401
      row: 14
      bay: 1
      lev: 1
    # 堆垛机出库站点
    crnOutStn[0]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 401
      row: 14
      bay: 1
      lev: 1
  # 输送线
  devp[0]:
    id: 1
@@ -163,6 +193,10 @@
    inSta[2]:
      staNo: 305
      barcode: ${wcs-slave.barcode[2].id}
    # 入库口4
    inSta[3]:
      staNo: 401
      barcode: ${wcs-slave.barcode[3].id}
    # 空板入库口1
    emptyInSta[0]:
      staNo: 103
@@ -172,6 +206,9 @@
    # 空板入库口3
    emptyInSta[2]:
      staNo: 305
    # 空板入库口4
    emptyInSta[3]:
      staNo: 401
    # 出库口1
    outSta[0]:
      staNo: 102
@@ -181,6 +218,9 @@
    # 出库口3
    outSta[2]:
      staNo: 303
    # 出库口4
    outSta[3]:
      staNo: 402
    # 拣料入库口1
    pickSta[0]:
      staNo: 102
@@ -193,6 +233,10 @@
    pickSta[2]:
      staNo: 303
      barcode: ${wcs-slave.barcode[2].id}
    # 拣料入库口4
    pickSta[3]:
      staNo: 402
      barcode: ${wcs-slave.barcode[3].id}
  # 条码扫描仪
  barcode[0]:
    id: 1
@@ -204,6 +248,10 @@
    port: 51236
  barcode[2]:
    id: 3
    ip: 10.10.10.52
    port: 51236
  barcode[3]:
    id: 4
    ip: 10.10.10.52
    port: 51236
   # LED1
@@ -247,4 +295,11 @@
    ip: 10.10.10.206
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 305
    staArr: 305
  # LED7
  led[6]:
    id: 7
    ip: 10.10.10.207
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 402
src/main/webapp/static/css/crn.css
@@ -130,10 +130,11 @@
.operator-item {
    display: inline-block;
    height: 100%;
    width: 20%;
    text-align: center;
    position: relative;
    vertical-align: middle;
    padding: 0 20px;
    padding: 10px 0px 10px 50px;
}
.operator-item .select-title {
    display: inline-block;
@@ -150,7 +151,7 @@
    z-index: 999;
}
.operator-item .select-container {
    padding: 30px 0;
    padding: 10px 0;
    height: 100%;
    border: 1px solid #8d8d8d;
    border-radius: 5px;
@@ -168,7 +169,8 @@
}
.select-container-item {
    display: inline-block;
    padding: 0 10px;
    margin: 0px auto;
    padding: 0;
}
.select-container-item input {
    height: 20px;
src/main/webapp/static/css/pipeline.css
@@ -30,13 +30,31 @@
/* 表格 */
.plc-log-header {
    height: 05%;
    height: 15%;
}
.plc-log-body {
    height: 95%;
    height: 85%;
    overflow: auto;
}
/* 入出库模式 */
.io-mode-oper {
    height: 100%;
    /*overflow: hidden;*/
    padding: 10px 20px;
}
.io-mode-oper fieldset {
    padding: 15px 0 10px 0;
    border-width: 1px;
    border-style: solid;
    height: 100%;
}
.io-mode-oper legend {
    text-align: center;
    padding: 0 10px;
    font-size: 16px;
    font-weight: 300;
}
/* 站点表格 */
#site-table {
src/main/webapp/static/js/console.js
@@ -39,13 +39,22 @@
                bNum = bNum - minBayNo;
            }
        }else {
            bNum = minBayNo
            for (let j = 0; j < bLen; j++) {
                bay = "<button class='item' style='width: "+ bayWidth +"px'>" + bNum + "</button>"
                bays = bays + bay
                bNum = bNum + minBayNo;
            if (minBayNo % 2 == 0) {
                bNum = minBayNo
                for (let j = 0; j < bLen; j++) {
                    bay = "<button class='item' style='width: "+ bayWidth +"px'>" + bNum + "</button>"
                    bays = bays + bay
                    bNum = bNum + minBayNo;
                }
            } else {
                bNum = minBayNo + 1
                for (let j = 0; j < bLen; j++) {
                    bay = "<button class='item' style='width: "+ bayWidth +"px'>" + bNum + "</button>"
                    bays = bays + bay
                    bNum = bNum + minBayNo;
                }
            }
        }
        rack = "<div class='rack' id='" + rackss[i].id +
src/main/webapp/static/js/console.map.js
@@ -6,261 +6,389 @@
    "hpPosition": 0,
    "minBayNo": 2,
    "floors": 1,
    "racks": [{
        "type": "rack",
        "id": "rack12",
        "top": 484,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 2,
        "maxBayNo": 64
    }, {
        "type": "rack",
        "id": "rack11",
        "top": 458,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 2,
        "maxBayNo": 64
    }, {
        "type": "rack",
        "id": "rack10",
        "top": 399,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 2,
        "maxBayNo": 64
    }, {
        "type": "rack",
        "id": "rack9",
        "top": 373,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 2,
        "maxBayNo": 64
    }, {
        "type": "rack",
        "id": "rack8",
        "top": 344,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 16
    }, {
        "type": "rack",
        "id": "rack7",
        "top": 318,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 16
    }, {
        "type": "rack",
        "id": "rack6",
        "top": 263,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 16
    }, {
        "type": "rack",
        "id": "rack5",
        "top": 237,
        "left": 430,
        "width": 1088,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 16
    }, {
        "type": "rack",
        "id": "rack3",
        "top": 180,
        "left": 430,
        "width": 1020,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 30
    }, {
        "type": "rack",
        "id": "rack1",
        "top": 97,
        "left": 430,
        "width": 1020,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 30
    }, {
        "type": "rack",
        "id": "rack4",
        "top": 207,
        "left": 430,
        "width": 1020,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 30
    }, {
        "type": "rack",
        "id": "rack2",
        "top": 123,
        "left": 430,
        "width": 1020,
        "height": 24,
        "minBayNo": 1,
        "maxBayNo": 30
    }],
    "rackDescs": [{
        "type": "rackDescs",
        "id": "lb_desc12",
        "text": "#12",
        "top": 485,
        "left": 1530,
        "width": 41,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc11",
        "text": "#11",
        "top": 460,
        "left": 1530,
        "width": 38,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc10",
        "text": "#10",
        "top": 399,
        "left": 1530,
        "width": 42,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc9",
        "text": "#9",
        "top": 375,
        "left": 1530,
        "width": 33,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc8",
        "text": "#8",
        "top": 349,
        "left": 1530,
        "width": 33,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc7",
        "text": "#7",
        "top": 321,
        "left": 1530,
        "width": 32,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc6",
        "text": "#6",
        "top": 264,
        "left": 1530,
        "width": 33,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc5",
        "text": "#5",
        "top": 235,
        "left": 1530,
        "width": 32,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc4",
        "text": "#4",
        "top": 206,
        "left": 1460,
        "width": 33,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc3",
        "text": "#3",
        "top": 179,
        "left": 1460,
        "width": 32,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc2",
        "text": "#2",
        "top": 123,
        "left": 1460,
        "width": 33,
        "height": 23
    }, {
        "type": "rackDescs",
        "id": "lb_desc1",
        "text": "#1",
        "top": 95,
        "left": 1460,
        "width": 30,
        "height": 23
    }],
    "crns": [{
        "type": "crane",
        "id": "crn-1",
        "text": "1",
        "top": 153,
        "left": 500,
        "width": 93,
        "height": 22
    }, {
        "type": "crane",
        "id": "crn-2",
        "text": "2",
        "top": 291,
        "left": 500,
        "width": 93,
        "height": 22
    }, {
        "type": "crane",
        "id": "crn-3",
        "text": "3",
        "top": 428,
        "left": 500,
        "width": 93,
        "height": 22
    }, {
        "type": "track",
        "id": "lb_track2",
        "text": "",
        "top": 300,
        "left": 405,
        "width": 1130,
        "height": 2
    }, {
        "type": "track",
        "id": "lb_track3",
        "text": "",
        "top": 438,
        "left": 405,
        "width": 1130,
        "height": 2
    }, {
        "type": "track",
        "id": "lb_track1",
        "text": "",
        "top": 164,
        "left": 405,
        "width": 1060,
        "height": 2
    }],
    "racks": [
        {
            "type": "rack",
            "id": "rack1",
            "top": 97,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 30
        },
        {
            "type": "rack",
            "id": "rack2",
            "top": 123,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 30
        },
        {
            "type": "rack",
            "id": "rack3",
            "top": 180,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 30
        },
        {
            "type": "rack",
            "id": "rack4",
            "top": 207,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 30
        },
        {
            "type": "rack",
            "id": "rack5",
            "top": 237,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 16
        },
        {
            "type": "rack",
            "id": "rack6",
            "top": 263,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 16
        },
        {
            "type": "rack",
            "id": "rack7",
            "top": 318,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 16
        },
        {
            "type": "rack",
            "id": "rack8",
            "top": 344,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 16
        },
        {
            "type": "rack",
            "id": "rack9",
            "top": 373,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 2,
            "maxBayNo": 64
        },
        {
            "type": "rack",
            "id": "rack10",
            "top": 399,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 2,
            "maxBayNo": 64
        },
        {
            "type": "rack",
            "id": "rack11",
            "top": 458,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 2,
            "maxBayNo": 64
        },
        {
            "type": "rack",
            "id": "rack12",
            "top": 484,
            "left": 430,
            "width": 1088,
            "height": 24,
            "minBayNo": 2,
            "maxBayNo": 64
        },
        {
            "type": "rack",
            "id": "rack13",
            "top": 512,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 23
        },
        {
            "type": "rack",
            "id": "rack14",
            "top": 538,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 23
        },
        {
            "type": "rack",
            "id": "rack15",
            "top": 610,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 23
        },
        {
            "type": "rack",
            "id": "rack16",
            "top": 636,
            "left": 430,
            "width": 1020,
            "height": 24,
            "minBayNo": 1,
            "maxBayNo": 23
        },
    ],
    "rackDescs": [
        {
            "type": "rackDescs",
            "id": "lb_desc1",
            "text": "#1",
            "top": 95,
            "left": 1460,
            "width": 30,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc2",
            "text": "#2",
            "top": 123,
            "left": 1460,
            "width": 33,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc3",
            "text": "#3",
            "top": 179,
            "left": 1460,
            "width": 32,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc4",
            "text": "#4",
            "top": 206,
            "left": 1460,
            "width": 33,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc5",
            "text": "#5",
            "top": 235,
            "left": 1530,
            "width": 32,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc6",
            "text": "#6",
            "top": 264,
            "left": 1530,
            "width": 33,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc7",
            "text": "#7",
            "top": 321,
            "left": 1530,
            "width": 32,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc8",
            "text": "#8",
            "top": 349,
            "left": 1530,
            "width": 33,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc9",
            "text": "#9",
            "top": 375,
            "left": 1530,
            "width": 33,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc10",
            "text": "#10",
            "top": 399,
            "left": 1530,
            "width": 42,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc11",
            "text": "#11",
            "top": 460,
            "left": 1530,
            "width": 38,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc12",
            "text": "#12",
            "top": 485,
            "left": 1530,
            "width": 41,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc13",
            "text": "#13",
            "top": 514,
            "left": 1460,
            "width": 41,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc14",
            "text": "#14",
            "top": 540,
            "left": 1460,
            "width": 41,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc15",
            "text": "#15",
            "top": 610,
            "left": 1460,
            "width": 41,
            "height": 23
        },
        {
            "type": "rackDescs",
            "id": "lb_desc16",
            "text": "#16",
            "top": 636,
            "left": 1460,
            "width": 41,
            "height": 23
        },
    ],
    "crns": [
        {
            "type": "crane",
            "id": "crn-1",
            "text": "1",
            "top": 153,
            "left": 500,
            "width": 93,
            "height": 22
        },
        {
            "type": "crane",
            "id": "crn-2",
            "text": "2",
            "top": 291,
            "left": 500,
            "width": 93,
            "height": 22
        },
        {
            "type": "crane",
            "id": "crn-3",
            "text": "3",
            "top": 428,
            "left": 500,
            "width": 93,
            "height": 22
        },
        {
            "type": "crane",
            "id": "crn-4",
            "text": "4",
            "top": 574,
            "left": 500,
            "width": 93,
            "height": 22
        },
        {
            "type": "track",
            "id": "lb_track1",
            "text": "",
            "top": 164,
            "left": 405,
            "width": 1060,
            "height": 2
        },
        {
            "type": "track",
            "id": "lb_track2",
            "text": "",
            "top": 300,
            "left": 405,
            "width": 1130,
            "height": 2
        },
        {
            "type": "track",
            "id": "lb_track3",
            "text": "",
            "top": 438,
            "left": 405,
            "width": 1130,
            "height": 2
        },
        {
            "type": "track",
            "id": "lb_track4",
            "text": "",
            "top": 586,
            "left": 405,
            "width": 1130,
            "height": 2
        },
        ],
    "stns": [{
        "type": "stn",
        "id": "site-306",
@@ -505,6 +633,24 @@
                            "left": 225,
                            "width": 100,
                            "height": 24
                        },
                        {
                            "type": "stn",
                            "id": "site-401",
                            "text": "401",
                            "top": 538,
                            "left": 326,
                            "width": 100,
                            "height": 24
                        },
                        {
                            "type": "stn",
                            "id": "site-402",
                            "text": "402",
                            "top": 538,
                            "left": 224,
                            "width": 100,
                            "height": 24
                        }
                    ]
                }
src/main/webapp/views/crn.html
@@ -145,9 +145,9 @@
            <!-- 设备任务选择 -->
            <div class="task-select">
                <!-- 堆垛机选择 -->
                <div id="crn-select" class="operator-item">
                <div id="crn-select" class="operator-item" style="width: 55%">
                    <span class="select-title">堆垛机号</span>
                    <div class="select-container">
                    <div class="select-container" style="padding: 20px 0;">
                        <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1号堆垛机</label>
                        <label><input type="radio" name="crnSelect" value="2">&nbsp;2号堆垛机</label>
                        <label><input type="radio" name="crnSelect" value="3">&nbsp;3号堆垛机</label>
src/main/webapp/views/pipeline.html
@@ -59,9 +59,13 @@
                        <fieldset>
                            <legend>入出库模式(IO-Mode)</legend>
                            <div class="io-mode-box">
                                <label>2F</label>
                                <label>F2</label>
                                <button id="io-mode-2" class="ioModeBtn" onclick="ioModeSwitch(this.id)"> - </button>
                            </div>
                            <div class="io-mode-box">
                                <label>F4</label>
                                <button id="io-mode-4" class="ioModeBtn" onclick="ioModeSwitch(this.id)"> - </button>
                            </div>
                        </fieldset>
                    </div>
                    <!--            <div style="height: 40%">-->