From 8a73235a41b25c4d90fd90b0c1521f0e7d4b5368 Mon Sep 17 00:00:00 2001
From: whycq <123456>
Date: 星期二, 30 八月 2022 09:51:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/hylywcs' into hylywcs

---
 src/main/java/com/zy/core/thread/LedThread.java             |   58 +++
 src/main/webapp/views/crn.html                              |    4 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   53 +++
 src/main/webapp/static/css/crn.css                          |    8 
 src/main/webapp/static/css/pipeline.css                     |   22 +
 src/main/webapp/static/js/console.js                        |   21 +
 src/main/webapp/views/pipeline.html                         |    6 
 src/main/webapp/static/js/console.map.js                    |  656 ++++++++++++++++++++++++++-----------------
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |    4 
 src/main/resources/application.yml                          |   61 +++
 10 files changed, 612 insertions(+), 281 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 7402b30..282478b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/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("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕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("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕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("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕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("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕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("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕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("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕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;
                     }
                 }
 
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
index fecbd49..b263a9e 100644
--- a/src/main/java/com/zy/core/thread/LedThread.java
+++ b/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() {
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index bde3131..85da205 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/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;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3153e01..cdd665e 100644
--- a/src/main/resources/application.yml
+++ b/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
     # 鎷f枡鍏ュ簱鍙�1
     pickSta[0]:
       staNo: 102
@@ -193,6 +233,10 @@
     pickSta[2]:
       staNo: 303
       barcode: ${wcs-slave.barcode[2].id}
+    # 鎷f枡鍏ュ簱鍙�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
\ No newline at end of file
+    staArr: 305
+  # LED7
+  led[6]:
+    id: 7
+    ip: 10.10.10.207
+    port: 5005
+    devpPlcId: ${wcs-slave.devp[0].id}
+    staArr: 402
diff --git a/src/main/webapp/static/css/crn.css b/src/main/webapp/static/css/crn.css
index 0fa623e..ded525a 100644
--- a/src/main/webapp/static/css/crn.css
+++ b/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;
diff --git a/src/main/webapp/static/css/pipeline.css b/src/main/webapp/static/css/pipeline.css
index 8fe0e8a..d81d39f 100644
--- a/src/main/webapp/static/css/pipeline.css
+++ b/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 {
diff --git a/src/main/webapp/static/js/console.js b/src/main/webapp/static/js/console.js
index 34af77e..707d1fa 100644
--- a/src/main/webapp/static/js/console.js
+++ b/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 +
diff --git a/src/main/webapp/static/js/console.map.js b/src/main/webapp/static/js/console.map.js
index 1c0847e..a946ae2 100644
--- a/src/main/webapp/static/js/console.map.js
+++ b/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
                         }
                     ]
                 }
diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html
index 3a5ce8f..c1012c7 100644
--- a/src/main/webapp/views/crn.html
+++ b/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>
diff --git a/src/main/webapp/views/pipeline.html b/src/main/webapp/views/pipeline.html
index 11507ba..f5a6f6c 100644
--- a/src/main/webapp/views/pipeline.html
+++ b/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%">-->

--
Gitblit v1.9.1