<!DOCTYPE html>
|
<html lang="en">
|
<head>
|
<meta charset="UTF-8">
|
<title>穿梭车监控管理</title>
|
<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/layui/css/layui.css">
|
<link rel="stylesheet" href="../static/css/ste.css">
|
<script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
|
<script type="text/javascript" src="../static/js/layer/layer.js"></script>
|
<script type="text/javascript" src="../static/layui/layui.js"></script>
|
<script type="text/javascript" src="../static/js/common.js"></script>
|
</head>
|
<body>
|
<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">
|
<div class="ste-command-item" style="margin-top: 30px">
|
<label>1#</label>
|
<div class="dropdown-menu">
|
<button id="steBtn-1" class="demoBtn" onclick="changePosition(this.id)">修改位置</button>
|
<ul class="dropdown-menu-nav dark" >
|
<div class="dropdown-anchor"></div>
|
<div class="form-item"><span>当前穿梭机:</span><input type="text"></div>
|
<div class="form-item"><span>排:</span><input type="text"></div>
|
<div class="form-item"><span>列:</span><input type="text"></div>
|
<div class="form-item"><span>层:</span><input type="text"></div>
|
</ul>
|
</div>
|
<div class="dropdown-menu">
|
<button class="demoBtn" onclick="">所属堆垛机</button>
|
<ul class="dropdown-menu-nav dark">
|
<div class="dropdown-anchor"></div>
|
<div class="form-item"><span>堆垛机号:</span><input type="text"></div>
|
</ul>
|
</div>
|
</div>
|
<div class="ste-command-item" style="margin-top: 30px">
|
<label>2#</label>
|
<div class="dropdown-menu">
|
<button id="steBtn-2" class="demoBtn" onclick="changePosition(this.id)">修改位置</button>
|
<ul class="dropdown-menu-nav dark" >
|
<div class="dropdown-anchor"></div>
|
<div class="form-item"><span>当前穿梭机:</span><input type="text"></div>
|
<div class="form-item"><span>排:</span><input type="text"></div>
|
<div class="form-item"><span>列:</span><input type="text"></div>
|
<div class="form-item"><span>层:</span><input type="text"></div>
|
</ul>
|
</div>
|
<div class="dropdown-menu">
|
<button class="demoBtn" onclick="">所属堆垛机</button>
|
<ul class="dropdown-menu-nav dark">
|
<div class="dropdown-anchor"></div>
|
<div class="form-item"><span>堆垛机号:</span><input type="text"></div>
|
</ul>
|
</div>
|
</div>
|
<div class="ste-command-item" style="margin-top: 30px">
|
<label>3#</label>
|
<div class="dropdown-menu">
|
<button id="steBtn-3" class="demoBtn" onclick="changePosition(this.id)">修改位置</button>
|
<ul class="dropdown-menu-nav dark" >
|
<div class="dropdown-anchor"></div>
|
<div class="form-item"><span>当前穿梭机:</span><input type="text"></div>
|
<div class="form-item"><span>排:</span><input type="text"></div>
|
<div class="form-item"><span>列:</span><input type="text"></div>
|
<div class="form-item"><span>层:</span><input type="text"></div>
|
</ul>
|
</div>
|
<div class="dropdown-menu">
|
<button class="demoBtn" onclick="">所属堆垛机</button>
|
<ul class="dropdown-menu-nav dark">
|
<div class="dropdown-anchor"></div>
|
<div class="form-item"><span>堆垛机号:</span><input type="text"></div>
|
</ul>
|
</div>
|
</div>
|
</div>
|
<!-- 堆垛机状态位信息 -->
|
<div class="ste-state">
|
<table id="ste-state-table">
|
<thead>
|
<tr>
|
<th>穿梭车</th>
|
<th>模式</th>
|
<th>状态</th>
|
<th>有物</th>
|
<th>在轨</th>
|
<th>电量</th>
|
<th>排</th>
|
<th>列</th>
|
<th>层</th>
|
<th>等待WCS确认</th>
|
<th>定位</th>
|
<th>报警信息1</th>
|
<th>报警信息2</th>
|
</tr>
|
</thead>
|
<tbody>
|
</tbody>
|
</table>
|
</div>
|
</div>
|
<!-- 穿梭车状态 -->
|
<div class="ste-msg">
|
<table id="ste-msg-table">
|
<thead>
|
<tr>
|
<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 class="ste-operation">
|
<!-- 遮罩层 -->
|
<div class="ste-operation-shade">
|
<span class="ste-operation-shade-span">
|
WCS 系统运行中,请停止后操作
|
</span>
|
</div>
|
<!-- 设备任务选择 -->
|
<div class="task-select">
|
<!-- 选择 -->
|
<div id="ste-select" class="operator-item">
|
<span class="select-title">穿梭车号</span>
|
<div class="select-container">
|
<label><input type="radio" name="steSelect" value="1" checked> 1号穿梭车</label>
|
<label><input type="radio" name="steSelect" value="2"> 2号穿梭车</label>
|
<label><input type="radio" name="steSelect" value="3"> 3号穿梭车</label>
|
</div>
|
</div>
|
</div>
|
<!-- 设备任务操作 -->
|
<div class="task-operator">
|
<fieldset>
|
<legend>手动操作</legend>
|
<div class="button-group">
|
<button class="item" onclick="steOperator(1)">左出库</button>
|
<button class="item" onclick="steOperator(2)">右出库</button>
|
<button class="item" onclick="steOperator(3)">左入库</button>
|
<button class="item" onclick="steOperator(4)">右入库</button>
|
<button class="item" onclick="steOperator(5)">左移库</button>
|
<button class="item" onclick="steOperator(6)">右移库</button>
|
<button class="item" onclick="steOperator(7)">原点</button>
|
<button class="item" onclick="steOperator(8)">远点</button>
|
<button class="item" onclick="steOperator(9)">A 点</button>
|
<button class="item" onclick="steOperator(10)">B 点</button>
|
<button class="item" onclick="steOperator(11)">左搬移</button>
|
<button class="item" onclick="steOperator(12)">右搬移</button>
|
<button class="item" onclick="steOperator(13)">充电</button>
|
<button class="item" onclick="steOperator(14)">左盘点</button>
|
<button class="item" onclick="steOperator(15)">右盘点</button>
|
<button class="item" onclick="steOperator(16)">任务完成</button>
|
</div>
|
</fieldset>
|
</div>
|
|
</div>
|
<!-- 穿梭车日志输出 -->
|
<div class="ste-output-board">
|
<textarea id="ste-output"></textarea>
|
</div>
|
</div>
|
</div>
|
</body>
|
</html>
|
<script>
|
layui.config({
|
base: baseUrl + "/static/layui/lay/modules/"
|
}).extend({
|
dropdown: 'dropdown/dropdown',
|
}).use(['dropdown'],function () {
|
var dropdown = layui.dropdown;
|
})
|
</script>
|
<script>
|
// 空白行数
|
var steStateTableBlankRows = 0;
|
var steMsgTableBlankRows = 0;
|
// 实际行数
|
var steStateTableFullRows = 0;
|
var steMsgTableFullRows = 0;
|
// 初始化
|
var steOutputDom = document.getElementById("ste-output");
|
$(document).ready(function() {
|
initSteStateTable();
|
getSteStateInfo();
|
initSteMsgTable();
|
getSteMsgInfo();
|
operatorBlockShow();
|
});
|
|
setInterval(function () {
|
getSteStateInfo()
|
getSteMsgInfo();
|
},1000)
|
setInterval(function () {
|
getSteOutput();
|
operatorBlockShow();
|
},500);
|
|
// 判断手动操作模块是否可用
|
function operatorBlockShow() {
|
if (parent.systemRunning) {
|
$('.ste-operation').css("opacity", "0.5");
|
$('.ste-operation-shade').show();
|
$('.ste-operation-shade-span').show();
|
} else {
|
$('.ste-operation').css("opacity", "1");
|
$('.ste-operation-shade').hide();
|
$('.ste-operation-shade-span').hide();
|
}
|
}
|
|
// 修改穿梭车位置
|
function changePosition(id) {
|
|
}
|
|
// 穿梭车信息表获取 ---- 表一
|
function getSteStateInfo() {
|
let tableEl = $('#ste-state-table');
|
$.ajax({
|
url: baseUrl+ "/ste/table/ste/state",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
if (res.code === 200){
|
let table = res.data;
|
if (table.length > steStateTableBlankRows && table.length !== steStateTableFullRows) {
|
initSteStateTable(table.length-steStateTableBlankRows);
|
steStateTableFullRows = table.length;
|
}
|
for (let i=1;i<=table.length;i++){
|
let tr = tableEl.find("tr").eq(i);
|
setVal(tr.children("td").eq(0), table[i-1].steNo);
|
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].track);
|
setVal(tr.children("td").eq(5), table[i-1].charge);
|
setVal(tr.children("td").eq(6), table[i-1].row);
|
setVal(tr.children("td").eq(7), table[i-1].bay);
|
setVal(tr.children("td").eq(8), table[i-1].lev);
|
setVal(tr.children("td").eq(9), table[i-1].waiting);
|
setVal(tr.children("td").eq(10), table[i-1].loca);
|
setVal(tr.children("td").eq(11), table[i-1].alarm1);
|
setVal(tr.children("td").eq(12), table[i-1].alarm2);
|
}
|
} else if (res.code === 403){
|
window.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 穿梭车数据表获取 ---- 表二
|
function getSteMsgInfo() {
|
let tableEl = $('#ste-msg-table');
|
$.ajax({
|
url: baseUrl+ "/ste/table/ste/msg",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
if (res.code === 200){
|
var table = res.data;
|
if (table.length > steMsgTableBlankRows && table.length !== steMsgTableFullRows) {
|
initSteMsgTable(table.length-steMsgTableBlankRows);
|
steMsgTableFullRows = 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].steNo);
|
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);
|
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].speed);
|
setVal(tr.children("td").eq(8), table[i-1].closer);
|
}
|
} else if (res.code === 403){
|
window.location.href = baseUrl+"/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
});
|
}
|
|
// 穿梭车日志输出 -----------------------------------------------------------------------
|
function getSteOutput() {
|
$.ajax({
|
url: baseUrl + "/ste/output/ste",
|
headers: {'token': localStorage.getItem('token')},
|
method: 'POST',
|
success: function (res) {
|
if (res.code === 200) {
|
steOutput(res.data);
|
} else if (res.code === 403) {
|
window.location.href = baseUrl + "/login";
|
} else {
|
console.log(res.msg);
|
}
|
}
|
})
|
}
|
|
// 任务指令下发
|
function steOperator(steTaskMode) {
|
http.post(baseUrl+"/ste/operator/ste", {
|
steNo: $('input[name="steSelect"]:checked').val(),
|
steTaskMode: steTaskMode
|
}, function (res) {
|
layer.msg(res.msg, {icon: 1});
|
});
|
}
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
// 穿梭车信息表获取 ----- 表一
|
function initSteStateTable(row) {
|
let line;
|
if (row === undefined){
|
let one = $('#ste-state-table thead').height();
|
let total = $('.ste-state').height();
|
let count = total / one;
|
count = parseInt(count) - 1;
|
steStateTableBlankRows = count;
|
line = count;
|
} else {
|
line = row;
|
}
|
let html = "";
|
for (let 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" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" </tr>\n";
|
}
|
$('#ste-state-table tbody').after(html);
|
}
|
|
// 穿梭车数据表获取 ----- 表二
|
function initSteMsgTable(row) {
|
let line;
|
if (row === undefined){
|
let one = $('#ste-msg-table thead').height();
|
let total = $('.ste-msg').height();
|
let count = total / one;
|
count = parseInt(count) - 1;
|
steMsgTableBlankRows = count;
|
line = count;
|
} else {
|
line = row;
|
}
|
let html = "";
|
for (let 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" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" <td></td>\n" +
|
" </tr>\n";
|
}
|
$('#ste-msg-table tbody').after(html);
|
}
|
|
// 日志输出框
|
function steOutput(content){
|
steOutputDom.value += content;
|
steOutputDom.scrollTop = steOutputDom.scrollHeight;
|
}
|
|
|
|
</script>
|