| | |
| | | <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> |
| | | <link rel="stylesheet" type="text/css" href="../static/css/normalize.css"> |
| | | <link rel="stylesheet" type="text/css" href="../static/css/common.css"> |
| | | <link rel="stylesheet" type="text/css" href="../static/css/crn.css"> |
| | | <link rel="stylesheet" type="text/css" href="../static/css/rgv.css"> |
| | | <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../static/js/common.js"></script> |
| | | <script type="text/javascript" src="../static/js/layer/layer.js"></script> |
| | |
| | | <!-- 执行命令 --> |
| | | |
| | | <!-- 执行命令 --> |
| | | <div class="command-log"> |
| | | <!--<div class="command-log">--> |
| | | <!-- <h3>执行中的命令</h3>--> |
| | | <!-- <div class="crn-command-item">--> |
| | | <!-- <label>1#</label>--> |
| | |
| | | <!-- <!– <span> </span>–>--> |
| | | <!-- <input id="crn5" disabled="disabled">--> |
| | | <!-- </div>--> |
| | | </div> |
| | | <!-- </div>--> |
| | | <!-- RGV状态位信息 --> |
| | | <div class="crn-state"> |
| | | <div class="rgv-state"> |
| | | <table id="rgv-state-table"> |
| | | <thead> |
| | | <tr> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- RGV状态 --> |
| | | <div class="crn-msg"> |
| | | <div class="rgv-msg"> |
| | | <table id="rgv-msg-table"> |
| | | <thead> |
| | | <tr> |
| | |
| | | </table> |
| | | </div> |
| | | <!-- 手动操作 --> |
| | | <div class="crn-operation"> |
| | | <div class="rgv-operation"> |
| | | |
| | | <!-- 遮罩层 --> |
| | | <div class="crn-operation-shade"> |
| | | <span class="crn-operation-shade-span"> |
| | | <div class="rgv-operation-shade"> |
| | | <span class="rgv-operation-shade-span"> |
| | | WCS 系统运行中,请停止后操作 |
| | | </span> |
| | | </div> |
| | |
| | | <!-- 设备任务选择 --> |
| | | <div class="task-select"> |
| | | <!-- 堆垛机选择 --> |
| | | <div id="crn-select" class="operator-item" style="width: 55%"> |
| | | <div id="rgv-select" class="operator-item" style="width: 55%"> |
| | | <span class="select-title">RGV号</span> |
| | | <div class="select-container" style="padding: 20px 0;"> |
| | | <label><input type="radio" name="crnSelect" value="1" checked> 1号RGV</label> |
| | | <label><input type="radio" name="crnSelect" value="2"> 2号RGV</label> |
| | | <label><input type="radio" name="rgvSelect" value="1" checked> 1号RGV</label> |
| | | <label><input type="radio" name="rgvSelect" value="2"> 2号RGV</label> |
| | | </div> |
| | | </div> |
| | | <!-- 源站/源库位 选择 --> |
| | |
| | | |
| | | </div> |
| | | <!-- 堆垛机日志输出 --> |
| | | <div class="crn-output-board"> |
| | | <textarea id="crn-output"></textarea> |
| | | <div class="rgv-output-board"> |
| | | <textarea id="rgv-output"></textarea> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </body> |
| | | <script> |
| | | // 空白行数 |
| | | var crnStateTableBlankRows = 0; |
| | | var crnMsgTableBlankRows = 0; |
| | | var rgvStateTableBlankRows = 0; |
| | | var rgvMsgTableBlankRows = 0; |
| | | // 实际行数 |
| | | var crnStateTableFullRows = 0; |
| | | var crnMsgTableFullRows = 0; |
| | | var rgvStateTableFullRows = 0; |
| | | var rgvMsgTableFullRows = 0; |
| | | // 初始化 |
| | | var crnOutputDom = document.getElementById("crn-output"); |
| | | var rgvOutputDom = document.getElementById("rgv-output"); |
| | | $(document).ready(function() { |
| | | getCommandLog(); |
| | | initCrnStateTable(); |
| | | getCrnStateInfo(); |
| | | initCrnMsgTable(); |
| | | getCrnMsgInfo(); |
| | | initRgvStateTable(); |
| | | getRgvStateInfo(); |
| | | initRgvMsgTable(); |
| | | getRgvMsgInfo(); |
| | | operatorBlockShow(); |
| | | }); |
| | | // 数据更新 |
| | | setInterval(function () { |
| | | getCrnStateInfo(); |
| | | getCrnMsgInfo(); |
| | | getRgvStateInfo(); |
| | | getRgvMsgInfo(); |
| | | getCommandLog(); |
| | | },1000); |
| | | setInterval(function () { |
| | | getCrnOutput(); |
| | | getRgvOutput(); |
| | | operatorBlockShow(); |
| | | initDemo(); |
| | | },500); |
| | |
| | | // 判断手动操作模块是否可用 |
| | | function operatorBlockShow() { |
| | | if (parent.systemRunning) { |
| | | $('.crn-operation').css("opacity", "0.5"); |
| | | $('.crn-operation-shade').show(); |
| | | $('.crn-operation-shade-span').show(); |
| | | $('.rgv-operation').css("opacity", "0.5"); |
| | | $('.rgv-operation-shade').show(); |
| | | $('.rgv-operation-shade-span').show(); |
| | | } else { |
| | | $('.crn-operation').css("opacity", "1"); |
| | | $('.crn-operation-shade').hide(); |
| | | $('.crn-operation-shade-span').hide(); |
| | | $('.rgv-operation').css("opacity", "1"); |
| | | $('.rgv-operation-shade').hide(); |
| | | $('.rgv-operation-shade-span').hide(); |
| | | } |
| | | } |
| | | |
| | | // 获取堆垛机执行中的命令 |
| | | function getCommandLog() { |
| | | $.ajax({ |
| | | url: baseUrl + "/crn/command/ongoing", |
| | | url: baseUrl + "/rgv/command/ongoing", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200) { |
| | | var commands = res.data; |
| | | for (var i=0; i<commands.length;i++){ |
| | | $("#crn"+commands[i].crnNo).val(commands[i].command); |
| | | $("#rgv"+commands[i].rgvNo).val(commands[i].command); |
| | | } |
| | | } else if (res.code === 403) { |
| | | window.location.href = baseUrl + "/login"; |
| | |
| | | } |
| | | |
| | | // 堆垛机信息表获取 ---- 表一 |
| | | function getCrnStateInfo() { |
| | | function getRgvStateInfo() { |
| | | var tableEl = $('#rgv-state-table'); |
| | | $.ajax({ |
| | | url: baseUrl+ "/crn/table/crn/state", |
| | | url: baseUrl+ "/rgv/table/rgv/state", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | console.log(res) |
| | | if (res.code === 200){ |
| | | var table = res.data; |
| | | if (table.length > crnStateTableBlankRows && table.length !== crnStateTableFullRows) { |
| | | initCrnStateTable(table.length-crnStateTableBlankRows); |
| | | crnStateTableFullRows = table.length; |
| | | if (table.length > rgvStateTableBlankRows && table.length !== rgvStateTableFullRows) { |
| | | initRgvStateTable(table.length-rgvStateTableBlankRows); |
| | | rgvStateTableFullRows = table.length; |
| | | } |
| | | for (var i=1;i<=table.length;i++){ |
| | | var tr = tableEl.find("tr").eq(i); |
| | | setVal(tr.children("td").eq(0), table[i-1].crnNo); |
| | | setVal(tr.children("td").eq(0), table[i-1].rgvNo); |
| | | setVal(tr.children("td").eq(1), table[i-1].statusType); |
| | | setVal(tr.children("td").eq(2), table[i-1].status); |
| | | 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].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); |
| | | setVal(tr.children("td").eq(3), table[i-1].workNo1); |
| | | setVal(tr.children("td").eq(4), table[i-1].status1); |
| | | setVal(tr.children("td").eq(5), table[i-1].loading1); |
| | | setVal(tr.children("td").eq(6), table[i-1].rgvPos); |
| | | setVal(tr.children("td").eq(7), table[i-1].walkPos); |
| | | setVal(tr.children("td").eq(8), table[i-1].workNo2); |
| | | setVal(tr.children("td").eq(9), table[i-1].status2); |
| | | setVal(tr.children("td").eq(10), table[i-1].loading2); |
| | | setVal(tr.children("td").eq(11), table[i-1].warnCode); |
| | | setVal(tr.children("td").eq(12), table[i-1].alarm); |
| | | } |
| | | } else if (res.code === 403){ |
| | | window.location.href = baseUrl+"/login"; |
| | |
| | | } |
| | | |
| | | // 堆垛机数据表获取 ---- 表二 |
| | | function getCrnMsgInfo() { |
| | | function getRgvMsgInfo() { |
| | | var tableEl = $('#rgv-msg-table'); |
| | | $.ajax({ |
| | | url: baseUrl+ "/crn/table/crn/msg", |
| | | url: baseUrl+ "/rgv/table/rgv/msg", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | var table = res.data; |
| | | if (table.length > crnStateTableBlankRows && table.length !== crnMsgTableFullRows) { |
| | | initCrnStateTable(table.length-crnStateTableBlankRows); |
| | | crnMsgTableFullRows = table.length; |
| | | if (table.length > rgvStateTableBlankRows && table.length !== rgvMsgTableFullRows) { |
| | | initRgvStateTable(table.length-rgvStateTableBlankRows); |
| | | rgvMsgTableFullRows = table.length; |
| | | } |
| | | for (var i=1;i<=table.length;i++){ |
| | | var tr = tableEl.find("tr").eq(i); |
| | | setVal(tr.children("td").eq(0), table[i-1].crnNo); |
| | | setVal(tr.children("td").eq(0), table[i-1].rgvNo); |
| | | setVal(tr.children("td").eq(1), table[i-1].workNo); |
| | | setVal(tr.children("td").eq(2), table[i-1].status); |
| | | setVal(tr.children("td").eq(3), table[i-1].sourceStaNo); |
| | |
| | | // 堆垛机手动操作区 ----------------------------------------------------------------------- |
| | | |
| | | function getReqParam() { |
| | | var crnNo = $('input[name="crnSelect"]:checked').val(); |
| | | var rgvNo = $('input[name="rgvSelect"]:checked').val(); |
| | | var sourceStaNo = $('#sourceStaNo').val(); |
| | | var sourceRow = $('#sourceRow').val(); |
| | | var sourceBay = $('#sourceBay').val(); |
| | |
| | | var bay = $('#bay').val(); |
| | | var lev = $('#lev').val(); |
| | | return { |
| | | crnNo: crnNo, |
| | | rgvNo: rgvNo, |
| | | sourceStaNo: sourceStaNo, |
| | | sourceRow: sourceRow, |
| | | sourceBay: sourceBay, |
| | |
| | | |
| | | // 入库 |
| | | function put() { |
| | | http.post(baseUrl+"/crn/operator/put", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/put", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 出库 |
| | | function take() { |
| | | http.post(baseUrl+"/crn/operator/take", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/take", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 库位转移 |
| | | function stockMove() { |
| | | http.post(baseUrl+"/crn/operator/stockMove", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/stockMove", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 站到站 |
| | | function siteMove() { |
| | | http.post(baseUrl+"/crn/operator/siteMove", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/siteMove", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 坐标移动 |
| | | function coorMove() { |
| | | http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/coorMove", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 回原点 |
| | | function bacOrigin() { |
| | | http.post(baseUrl+"/crn/operator/bacOrigin", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/bacOrigin", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 回原点 |
| | | function reverseOrigin() { |
| | | http.post(baseUrl+"/crn/operator/reverseOrigin", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/reverseOrigin", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 任务完成 |
| | | function taskComplete() { |
| | | http.post(baseUrl+"/crn/operator/taskComplete", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/taskComplete", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 暂停 |
| | | function pause() { |
| | | http.post(baseUrl+"/crn/operator/pause", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/pause", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 启动 |
| | | function boot() { |
| | | http.post(baseUrl+"/crn/operator/boot", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/boot", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 清除命令 |
| | | function clearCommand() { |
| | | http.post(baseUrl+"/crn/operator/clearCommand", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/clearCommand", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 手动复位 |
| | | function handleReset() { |
| | | http.post(baseUrl+"/crn/operator/handleReset", getReqParam(), function (res) { |
| | | http.post(baseUrl+"/rgv/operator/handleReset", getReqParam(), function (res) { |
| | | layer.msg(res.msg); |
| | | }); |
| | | } |
| | | |
| | | // 输送设备日志输出 ----------------------------------------------------------------------- |
| | | function getCrnOutput() { |
| | | function getRgvOutput() { |
| | | $.ajax({ |
| | | url: baseUrl + "/crn/output/site", |
| | | url: baseUrl + "/rgv/output/site", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | console.log(res) |
| | | if (res.code === 200) { |
| | | crnOutput(res.data); |
| | | rgvOutput(res.data); |
| | | } else if (res.code === 403) { |
| | | window.location.href = baseUrl + "/login"; |
| | | } else { |
| | |
| | | // ------------------------------------------------------------------------------------------------ |
| | | |
| | | // 堆垛机信息表获取 ----- 表一 |
| | | function initCrnStateTable(row) { |
| | | function initRgvStateTable(row) { |
| | | var line; |
| | | if (row === undefined){ |
| | | var one = $('#rgv-state-table thead').height(); |
| | | var total = $('.crn-state').height(); |
| | | var total = $('.rgv-state').height(); |
| | | var count = total / one; |
| | | count = parseInt(count) - 1; |
| | | crnStateTableBlankRows = count; |
| | | rgvStateTableBlankRows = count; |
| | | line = count; |
| | | } else { |
| | | line = row; |
| | |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " <td></td>\n" + |
| | | " </tr>\n"; |
| | | } |
| | | $('#rgv-state-table tbody').after(html); |
| | | } |
| | | |
| | | // 堆垛机数据表获取 ----- 表二 |
| | | function initCrnMsgTable(row) { |
| | | function initRgvMsgTable(row) { |
| | | var line; |
| | | if (row === undefined){ |
| | | var one = $('#rgv-msg-table thead').height(); |
| | | var total = $('.crn-msg').height(); |
| | | var total = $('.rgv-msg').height(); |
| | | var count = total / one; |
| | | count = parseInt(count) - 1; |
| | | crnMsgTableBlankRows = count; |
| | | rgvMsgTableBlankRows = count; |
| | | line = count; |
| | | } else { |
| | | line = row; |
| | |
| | | } |
| | | |
| | | // 日志输出框 |
| | | function crnOutput(content){ |
| | | crnOutputDom.value += content; |
| | | crnOutputDom.scrollTop = crnOutputDom.scrollHeight; |
| | | function rgvOutput(content){ |
| | | rgvOutputDom.value += content; |
| | | rgvOutputDom.scrollTop = rgvOutputDom.scrollHeight; |
| | | } |
| | | |
| | | |
| | | var crnDemoData; |
| | | var rgvDemoData; |
| | | function initDemo() { |
| | | $.ajax({ |
| | | url: baseUrl+"/crn/demo/status", |
| | | url: baseUrl+"/rgv/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?'停止':'演示'); |
| | | rgvDemoData = res.data; |
| | | rgvDemoData.forEach(function (e) { |
| | | $("#demoBtn-"+e.rgvNo).html(e.demo?'停止':'演示'); |
| | | }) |
| | | } else if (res.code === 403){ |
| | | parent.location.href = baseUrl+"/login"; |
| | |
| | | } |
| | | |
| | | function demoSwitch(el) { |
| | | var crnId = el.split("-")[1]; |
| | | var rgvId = el.split("-")[1]; |
| | | var opt; |
| | | if (crnDemoData == null) { |
| | | if (rgvDemoData == null) { |
| | | initDemo(); |
| | | } |
| | | for (var i = 0; i<crnDemoData.length; i++) { |
| | | if (Number(crnDemoData[i].crnNo) === Number(crnId)) { |
| | | opt = !crnDemoData[i].demo; |
| | | for (var i = 0; i<rgvDemoData.length; i++) { |
| | | if (Number(rgvDemoData[i].rgvNo) === Number(rgvId)) { |
| | | opt = !rgvDemoData[i].demo; |
| | | } |
| | | } |
| | | layer.confirm(crnId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){ |
| | | doDemo(crnId, 'root', opt); // 停止wcs系统 |
| | | layer.confirm(rgvId + ' 号堆垛机确定'+ (opt?'开始':'停止') + '演示吗?', function(){ |
| | | doDemo(rgvId, 'root', opt); // 停止wcs系统 |
| | | }); |
| | | } |
| | | |
| | | function doDemo(crnId, password, opt) { |
| | | function doDemo(rgvId, password, opt) { |
| | | // 加载tips |
| | | var index = layer.load(1, { |
| | | shade: [0.1,'#fff'] |
| | | }); |
| | | $.ajax({ |
| | | url: baseUrl+ "/crn/demo/switch", |
| | | url: baseUrl+ "/rgv/demo/switch", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | // async: false, |
| | | data: { |
| | | crnId: Number(crnId), |
| | | rgvId: Number(rgvId), |
| | | password: password, |
| | | opt: opt |
| | | }, |