自动化立体仓库 - WCS系统
#
fyxc
2025-04-10 9f08415ef947905e09e83ab9c8c828dfe5ade399
src/main/webapp/views/crn.html
@@ -41,188 +41,186 @@
    </style>
</head>
<body>
<!-- 日志监控板 -->
<div class="log-board">
    <!-- 执行命令 -->
<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>&nbsp;</span>-->
            <input id="crn1" disabled="disabled">
            <!-- 执行命令 -->
            <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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</span>-->
            <input id="crn4" disabled="disabled">
        </div>
        <div class="crn-command-item">
            <label>5#</label>
            <button id="demoBtn-5" class="demoBtn" onclick="demoSwitch(this.id)"> - </button>
            <!--            <span>&nbsp;</span>-->
            <input id="crn5" 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>走行速度(m/min)</th>
                <th>升降速度(m/min)</th>
                <th>叉牙速度(m/min)</th>
                <th>走行距离(m)</th>
                <th>升降距离(m)</th>
                <th>走行时长(s)</th>
                <th>升降时长(s)</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>&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>
                <label><input type="radio" name="crnSelect" value="4">&nbsp;4号堆垛机</label>
                <label><input type="radio" name="crnSelect" value="5">&nbsp;5号堆垛机</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>&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>-->
<!--                        <label><input type="radio" name="crnSelect" value="4">&nbsp;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>
@@ -310,13 +308,11 @@
                        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].liftPos);
                        setVal(tr.children("td").eq(7), table[i-1].sitePos);
                        setVal(tr.children("td").eq(8), table[i-1].forkOffset);
                        setVal(tr.children("td").eq(9), table[i-1].alarm1);
                        setVal(tr.children("td").eq(10), table[i-1].alarm2);
                        setVal(tr.children("td").eq(11), table[i-1].alarm3);
                        setVal(tr.children("td").eq(12), table[i-1].alarm4);
                        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";
@@ -483,6 +479,7 @@
            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) {
@@ -512,8 +509,6 @@
        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" +