| | |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <!-- 日志监控板 --> |
| | | <div class="log-board"> |
| | | <!-- 执行命令 --> |
| | | <div class="command-log"> |
| | | <h2>执行中的命令</h2> |
| | | <div class="crn-command-item"> |
| | | <label>1#</label> |
| | | <!-- <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)">演示</button>--> |
| | | <span> </span> |
| | | <input id="crn1" disabled="disabled"> |
| | | <div style="padding: 10px;height: 100%;float: left;width: 6%"> |
| | | <div class="button-window"></div> |
| | | </div> |
| | | <div style="height: 100%;padding-left: 6%"> |
| | | <div style="padding: 10px;height: 100%"> |
| | | <!-- 日志监控板 --> |
| | | <div class="log-board"> |
| | | <!-- 执行命令 --> |
| | | |
| | | <!-- 执行命令 --> |
| | | <div class="command-log"> |
| | | <h3>执行中的命令</h3> |
| | | <div class="crn-command-item"> |
| | | <label>1#</label> |
| | | <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> |
| | | <!-- <span> </span>--> |
| | | <input id="crn1" disabled="disabled"> |
| | | </div> |
| | | <div class="crn-command-item"> |
| | | <label>2#</label> |
| | | <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> |
| | | <!-- <span> </span>--> |
| | | <input id="crn2" disabled="disabled"> |
| | | </div> |
| | | <div class="crn-command-item"> |
| | | <label>3#</label> |
| | | <button id="demoBtn-3" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> |
| | | <!-- <span> </span>--> |
| | | <input id="crn3" disabled="disabled"> |
| | | </div> |
| | | <div class="crn-command-item"> |
| | | <label>4#</label> |
| | | <button id="demoBtn-4" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> |
| | | <!-- <span> </span>--> |
| | | <input id="crn4" disabled="disabled"> |
| | | </div> |
| | | </div> |
| | | <!-- 堆垛机状态位信息 --> |
| | | <div class="crn-state"> |
| | | <table id="crn-state-table"> |
| | | <thead> |
| | | <tr> |
| | | <th>堆垛机</th> |
| | | <th>模式</th> |
| | | <th>状态</th> |
| | | <th>有物</th> |
| | | <th>列</th> |
| | | <th>层</th> |
| | | <th>货叉定位</th> |
| | | <th>载货台定位</th> |
| | | <th>走行在定位</th> |
| | | <th>故障代码</th> |
| | | <th>故障描述</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | <div class="crn-command-item"> |
| | | <label>2#</label> |
| | | <!-- <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)">演示</button>--> |
| | | <span> </span> |
| | | <input id="crn2" disabled="disabled"> |
| | | </div> |
| | | </div> |
| | | <!-- 堆垛机状态位信息 --> |
| | | <div class="crn-state"> |
| | | <table id="crn-state-table"> |
| | | <thead> |
| | | <!-- 堆垛机状态 --> |
| | | <div class="crn-msg"> |
| | | <table id="crn-msg-table"> |
| | | <thead> |
| | | <tr> |
| | | <th>堆垛机</th> |
| | | <th>模式</th> |
| | | <th>工作号</th> |
| | | <th>状态</th> |
| | | <th>有物</th> |
| | | <th>列</th> |
| | | <th>层</th> |
| | | <th>走行原点</th> |
| | | <th>升降原点</th> |
| | | <th>货叉位置</th> |
| | | <th>走行定位</th> |
| | | <th>升降定位</th> |
| | | <th>急停</th> |
| | | <th>异常码</th> |
| | | <th>源站</th> |
| | | <th>目标站</th> |
| | | <th>源库位</th> |
| | | <th>目标库位</th> |
| | | <th>走行速度(m/min)</th> |
| | | <th>升降速度(m/min)</th> |
| | | <th>叉牙速度(m/min)</th> |
| | | <th>走行距离(Km)</th> |
| | | <th>升降距离(Km)</th> |
| | | <th>走行时长(H)</th> |
| | | <th>升降时长(H)</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | <!-- 堆垛机状态 --> |
| | | <div class="crn-msg"> |
| | | <table id="crn-msg-table"> |
| | | <thead> |
| | | <tr> |
| | | <th>堆垛机</th> |
| | | <th>工作号</th> |
| | | <th>状态</th> |
| | | <th>源站</th> |
| | | <th>目标站</th> |
| | | <th>源库位</th> |
| | | <th>目标库位</th> |
| | | <th>异常</th> |
| | | <th>走行速度(m/min)</th> |
| | | <th>升降速度(m/min)</th> |
| | | <th>叉牙速度(m/min)</th> |
| | | <th>走行距离(Km)</th> |
| | | <th>升降距离(Km)</th> |
| | | <th>走行时长(H)</th> |
| | | <th>升降时长(H)</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | <!-- 手动操作 --> |
| | | <div class="crn-operation"> |
| | | </thead> |
| | | <tbody> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | <!-- 手动操作 --> |
| | | <div class="crn-operation"> |
| | | |
| | | <!-- 遮罩层 --> |
| | | <div class="crn-operation-shade"> |
| | | <!-- 遮罩层 --> |
| | | <div class="crn-operation-shade"> |
| | | <span class="crn-operation-shade-span"> |
| | | WCS 系统运行中,请停止后操作 |
| | | </span> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 设备任务选择 --> |
| | | <div class="task-select"> |
| | | <!-- 堆垛机选择 --> |
| | | <div id="crn-select" class="operator-item"> |
| | | <span class="select-title">堆垛机号</span> |
| | | <div class="select-container"> |
| | | <label><input type="radio" name="crnSelect" value="1" checked> 1号堆垛机</label> |
| | | <label><input type="radio" name="crnSelect" value="2"> 2号堆垛机</label> |
| | | <!-- 设备任务选择 --> |
| | | <div class="task-select"> |
| | | <!-- 堆垛机选择 --> |
| | | <div id="crn-select" class="operator-item" style="width: 55%"> |
| | | <span class="select-title">堆垛机号</span> |
| | | <div class="select-container" style="padding: 20px 0;"> |
| | | <label><input type="radio" name="crnSelect" value="1" checked> 1号堆垛机</label> |
| | | <!-- <label><input type="radio" name="crnSelect" value="2"> 2号堆垛机</label>--> |
| | | <!-- <label><input type="radio" name="crnSelect" value="3"> 3号堆垛机</label>--> |
| | | <!-- <label><input type="radio" name="crnSelect" value="4"> 4号堆垛机</label>--> |
| | | </div> |
| | | </div> |
| | | <!-- 源站/源库位 选择 --> |
| | | <div id="source-select" class="operator-item"> |
| | | <span class="select-title">源站/源库位</span> |
| | | <div class="select-container"> |
| | | <div class="select-container-item"> |
| | | <span>站</span> |
| | | <label><input id="sourceStaNo" type="number" name="points" min="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>排</span> |
| | | <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>列</span> |
| | | <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>层</span> |
| | | <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 目标站/目标库位 选择 --> |
| | | <div id="target-select" class="operator-item"> |
| | | <span class="select-title">目标站/目标库位</span> |
| | | <div class="select-container"> |
| | | <div class="select-container-item"> |
| | | <span>站</span> |
| | | <label><input id="staNo" type="number" name="points" min="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>排</span> |
| | | <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>列</span> |
| | | <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>层</span> |
| | | <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 设备任务操作 --> |
| | | <div class="task-operator"> |
| | | <fieldset> |
| | | <legend>手动操作</legend> |
| | | <div class="button-group"> |
| | | <!-- <button class="item" onclick="put()">入库</button>--> |
| | | <!-- <button class="item" onclick="take()">出库</button>--> |
| | | <button class="item" onclick="stockMove()">库位转移</button> |
| | | <!-- <button class="item" onclick="siteMove()">站到站</button>--> |
| | | <!-- <button class="item" onclick="bacOrigin()">回原点</button>--> |
| | | <!-- <button class="item" onclick="reverseOrigin()">反原点</button>--> |
| | | <!-- <button class="item" onclick="coorMove()">坐标移行</button>--> |
| | | <button class="item" onclick="taskComplete()">任务完成</button> |
| | | <!-- <button class="item" onclick="pause()">暂停</button>--> |
| | | <!-- <button class="item" onclick="boot()">启动</button>--> |
| | | <!-- <button class="item" onclick="clearCommand()">清除命令</button>--> |
| | | <!-- <button class="item" onclick="handleReset()">复位</button>--> |
| | | </div> |
| | | </fieldset> |
| | | </div> |
| | | |
| | | </div> |
| | | <!-- 源站/源库位 选择 --> |
| | | <div id="source-select" class="operator-item"> |
| | | <span class="select-title">源站/源库位</span> |
| | | <div class="select-container"> |
| | | <div class="select-container-item"> |
| | | <span>站</span> |
| | | <label><input id="sourceStaNo" type="number" name="points" min="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>排</span> |
| | | <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>列</span> |
| | | <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>层</span> |
| | | <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 目标站/目标库位 选择 --> |
| | | <div id="target-select" class="operator-item"> |
| | | <span class="select-title">目标站/目标库位</span> |
| | | <div class="select-container"> |
| | | <div class="select-container-item"> |
| | | <span>站</span> |
| | | <label><input id="staNo" type="number" name="points" min="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>排</span> |
| | | <label><input id="row" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>列</span> |
| | | <label><input id="bay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label> |
| | | </div> |
| | | <div class="select-container-item"> |
| | | <span>层</span> |
| | | <label><input id="lev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label> |
| | | </div> |
| | | </div> |
| | | <!-- 堆垛机日志输出 --> |
| | | <div class="crn-output-board"> |
| | | <textarea id="crn-output"></textarea> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 设备任务操作 --> |
| | | <div class="task-operator"> |
| | | <fieldset> |
| | | <legend>手动操作</legend> |
| | | <div class="button-group"> |
| | | <button class="item" onclick="put()">入库</button> |
| | | <button class="item" onclick="take()">出库</button> |
| | | <button class="item" onclick="stockMove()">库位转移</button> |
| | | <button class="item" onclick="siteMove()">站到站</button> |
| | | <!-- <button class="item" onclick="bacOrigin()">回原点</button>--> |
| | | <!-- <button class="item" onclick="reverseOrigin()">反原点</button>--> |
| | | <!-- <button class="item" onclick="coorMove()">坐标移行</button>--> |
| | | <button class="item" onclick="taskComplete()">任务完成</button> |
| | | <!-- <button class="item" onclick="pause()">暂停</button>--> |
| | | <!-- <button class="item" onclick="boot()">启动</button>--> |
| | | <button class="item" onclick="clearCommand()">清除命令</button> |
| | | <button class="item" onclick="handleReset()">复位</button> |
| | | </div> |
| | | </fieldset> |
| | | </div> |
| | | |
| | | </div> |
| | | <!-- 堆垛机日志输出 --> |
| | | <div class="crn-output-board"> |
| | | <textarea id="crn-output"></textarea> |
| | | </div> |
| | | </body> |
| | | <script> |
| | |
| | | setInterval(function () { |
| | | getCrnOutput(); |
| | | operatorBlockShow(); |
| | | initDemo(); |
| | | },500); |
| | | |
| | | // 判断手动操作模块是否可用 |
| | |
| | | setVal(tr.children("td").eq(3), table[i-1].loading); |
| | | setVal(tr.children("td").eq(4), table[i-1].bay); |
| | | setVal(tr.children("td").eq(5), table[i-1].lev); |
| | | setVal(tr.children("td").eq(6), table[i-1].xorigin); |
| | | setVal(tr.children("td").eq(7), table[i-1].yorigin); |
| | | setVal(tr.children("td").eq(8), table[i-1].forkOffset); |
| | | setVal(tr.children("td").eq(9), table[i-1].xlocation); |
| | | setVal(tr.children("td").eq(10), table[i-1].ylocation); |
| | | setVal(tr.children("td").eq(11), table[i-1].stop); |
| | | setVal(tr.children("td").eq(12), table[i-1].warnCode); |
| | | setVal(tr.children("td").eq(6), table[i-1].forkOffset); |
| | | setVal(tr.children("td").eq(7), table[i-1].liftPos); |
| | | setVal(tr.children("td").eq(8), table[i-1].walkPos); |
| | | setVal(tr.children("td").eq(9), table[i-1].warnCode); |
| | | setVal(tr.children("td").eq(10), table[i-1].alarm); |
| | | } |
| | | } else if (res.code === 403){ |
| | | window.location.href = baseUrl+"/login"; |
| | |
| | | setVal(tr.children("td").eq(4), table[i-1].staNo); |
| | | setVal(tr.children("td").eq(5), table[i-1].sourceLocNo); |
| | | setVal(tr.children("td").eq(6), table[i-1].locNo); |
| | | setVal(tr.children("td").eq(7), table[i-1].error); |
| | | setVal(tr.children("td").eq(8), table[i-1].xspeed); |
| | | setVal(tr.children("td").eq(9), table[i-1].yspeed); |
| | | setVal(tr.children("td").eq(10), table[i-1].zspeed); |
| | | setVal(tr.children("td").eq(11), table[i-1].xdistance); |
| | | setVal(tr.children("td").eq(12), table[i-1].ydistance); |
| | | setVal(tr.children("td").eq(13), table[i-1].xduration); |
| | | setVal(tr.children("td").eq(14), table[i-1].yduration); |
| | | setVal(tr.children("td").eq(7), table[i-1].xspeed); |
| | | setVal(tr.children("td").eq(8), table[i-1].yspeed); |
| | | setVal(tr.children("td").eq(9), table[i-1].zspeed); |
| | | setVal(tr.children("td").eq(10), table[i-1].xdistance); |
| | | setVal(tr.children("td").eq(11), table[i-1].ydistance); |
| | | setVal(tr.children("td").eq(12), table[i-1].xduration); |
| | | setVal(tr.children("td").eq(13), table[i-1].yduration); |
| | | } |
| | | } else if (res.code === 403){ |
| | | window.location.href = baseUrl+"/login"; |
| | |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | console.log(res) |
| | | if (res.code === 200) { |
| | | crnOutput(res.data); |
| | | } else if (res.code === 403) { |
| | |
| | | var html = ""; |
| | | for (var i = 0; i < line; i ++){ |
| | | html += " <tr>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " </tr>\n"; |
| | | } |
| | | $('#crn-msg-table tbody').after(html); |
| | |
| | | crnOutputDom.scrollTop = crnOutputDom.scrollHeight; |
| | | } |
| | | |
| | | // function demoSwitch(el) { |
| | | // var crnId = el.split("-")[1]; |
| | | // layer.prompt({title: '请输入口令,并开始'+crnId+"号堆垛机演示", formType: 1, shadeClose: true}, function (pass, idx) { |
| | | // layer.close(idx); |
| | | // doDemo(crnId, pass); // 停止wcs系统 |
| | | // }); |
| | | // } |
| | | |
| | | var crnDemoData; |
| | | function initDemo() { |
| | | $.ajax({ |
| | | url: baseUrl+"/crn/demo/status", |
| | | async: false, |
| | | method: 'GET', |
| | | success: function (res) { |
| | | if (res.code === 200) { |
| | | crnDemoData = res.data; |
| | | crnDemoData.forEach(function (e) { |
| | | $("#demoBtn-"+e.crnNo).html(e.demo?'停止':'演示'); |
| | | }) |
| | | } else if (res.code === 403){ |
| | | parent.location.href = baseUrl+"/login"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | function demoSwitch(el) { |
| | | var crnId = el.split("-")[1]; |
| | | layer.confirm(crnId + ' 号堆垛机确定开始演示吗?', function(){ |
| | | doDemo(crnId, 'root'); // 停止wcs系统 |
| | | var opt; |
| | | if (crnDemoData == null) { |
| | | initDemo(); |
| | | } |
| | | for (var i = 0; i<crnDemoData.length; i++) { |
| | | if (Number(crnDemoData[i].crnNo) === Number(crnId)) { |
| | | opt = !crnDemoData[i].demo; |
| | | } |
| | | } |
| | | layer.confirm(crnId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){ |
| | | doDemo(crnId, 'root', opt); // 停止wcs系统 |
| | | }); |
| | | } |
| | | |
| | | function doDemo(crnId, password) { |
| | | function doDemo(crnId, password, opt) { |
| | | // 加载tips |
| | | var index = layer.load(1, { |
| | | shade: [0.1,'#fff'] |
| | |
| | | // async: false, |
| | | data: { |
| | | crnId: Number(crnId), |
| | | password: password |
| | | password: password, |
| | | opt: opt |
| | | }, |
| | | method: 'POST', |
| | | success: function (res) { |
| | |
| | | } |
| | | |
| | | </script> |
| | | </html> |
| | | </html> |