Junjie
2025-11-19 40d95599c1ac6ef89d465e031132d9c627a7f0bc
#增加出入库模式
6个文件已修改
236 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SiteController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/LiftProtocol.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/console.html 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pipeline.html 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -24,15 +24,14 @@
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
import com.zy.core.Slave;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.CrnModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LedSlave;
import com.zy.core.model.RgvSlave;
import com.zy.core.model.*;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.LiftProtocol;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
@@ -410,4 +409,46 @@
        return R.ok();
    }
    @GetMapping("/getIoMode")
    public R getIoMode() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        if (devpThread == null) {
            return R.error("线程不存在");
        }
        LiftProtocol liftProtocol = devpThread.getLiftStatus();
        if (liftProtocol == null) {
            return R.error("线程不存在");
        }
        return R.ok().add(liftProtocol.getIoMode());
    }
    @PostMapping("/switchIoMode")
    public R switchIoMode() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        if (devpThread == null) {
            return R.error("线程不存在");
        }
        LiftProtocol liftProtocol = devpThread.getLiftStatus();
        if (liftProtocol == null) {
            return R.error("线程不存在");
        }
        //检测是否还有任务没做完
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>());
        if (!wrkMasts.isEmpty()) {
            return R.error("系统任务未完成,请完成后再切换模式");
        }
        int switchIoMode = 1;
        if (liftProtocol.getIoMode() == 1) {
            switchIoMode = 2;
        }
        boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, switchIoMode));
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/SiteController.java
@@ -156,7 +156,6 @@
                    vo.setPakMk(staProtocol.isPakMk()?"Y":"N");       // 需求1
                    vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 空板信号
                    vo.setStaNo(staProtocol.getStaNo());                // 目标站
                    vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "低" : "高");     //高低库位
                    return R.ok().add(vo);
                }
            }
src/main/java/com/zy/core/model/protocol/LiftProtocol.java
@@ -16,4 +16,7 @@
    //0未完成 1已完成
    private Short taskStatus = 0;
    //出入库模式 1:入库 2:出库
    private Short ioMode = 0;
}
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -130,6 +130,8 @@
                    case 2:
                        write((LiftCommand) task.getData());
                        break;
                    case 3:
                        writeIoMode((Integer) task.getData());
                    default:
                        break;
                }
@@ -231,6 +233,7 @@
            liftProtocol.setDeviceStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 2));     // 设备状态
            liftProtocol.setTaskStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 4));     // 完成信号
            liftProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6));     // 工作号
            liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 10));     // 出入库模式
        }
        //温湿度信息反馈
@@ -293,7 +296,7 @@
    /**
     * 写入命令
     */
    private void write(LiftCommand liftCommand) throws InterruptedException {
    private void write(LiftCommand liftCommand) {
        if (null == liftCommand) {
            return;
        }
@@ -314,6 +317,27 @@
    }
    /**
     * 写入命令
     */
    private void writeIoMode(Integer ioMode) {
        if (null == ioMode) {
            return;
        }
        short[] array = new short[1];
        array[0] = ioMode.shortValue();
        OperateResult write = siemensS7Net.Write("DB100.12", array);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入出入库模式数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
            News.error("SiemensDevp"+" - 4"+" - 写入出入库模式数据失败。输送线plc编号={},站点数据={}", slave.getId(), ioMode);
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 出入库模式命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
            News.info("SiemensDevp"+" - 5"+" - 出入库模式命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), ioMode);
        }
    }
    /**
     * 设置入库标记
     */
    @Override
src/main/webapp/views/console.html
@@ -40,47 +40,14 @@
                    </div>
                </div>
            </div>
            <!-- 堆垛机状态 -->
            <div class="machine-status">
                <div class="body-head">堆垛机状态</div>
                <div class="state">
                    <span>堆垛机 1</span>
                    <span class="state-ss machine-put-flag    ">入库</span>
                </div>
                <div class="state">
                    <span>堆垛机 2</span>
                    <span class="state-ss machine-auto-flag    ">自动</span>
                </div>
                <div class="button"><span>所有状态</span></div>
                <div class="button item-group">
                    <span class="machine-put-flag">入库</span>
                    <span class="machine-take-flag">出库</span>
                    <span class="machine-stock-move-flag">库到库</span>
                    <span class="machine-site-move-flag">站到站</span>
                    <span class="machine-p-move-flag">PToP</span>
                    <span class="machine-error-flag">异常</span>
                    <span class="machine-auto-flag">自动</span>
                    <span class="machine-unauto-flag">非自动/手动</span>
                </div>
            </div>
            <div class="line-status">
                <div class="body-head">输送线状态</div>
                <div class="state">
                    <span>运输线总数</span>
                    <span id="line-total" class="line-ss"></span>
                </div>
                <div class="state">
                    <span>输送线任务 <span id="devpTaskStackOver"></span></span>
                    <span id="devpWorkingCount" class="line-ss"></span>
                </div>
                <div class="button"><span>所有状态</span></div>
                <div class="button item-group">
                    <span class="site-auto-run-id">自动+有物+ID</span>
                    <span class="site-auto-run">自动+有物</span>
                    <span class="site-auto-id">自动+ID</span>
                    <span class="site-auto">自动</span>
                    <span class="site-unauto">非自动/手动</span>
                <div class="body-head">出入库模式</div>
                <div class="button" onclick="switchIoMode()"><span class="site-auto-id">点击切换模式</span></div>
                <div class="button" style="margin-top: 10px;">
                    <span>当前模式:</span>
                    <span id="ioMode-in" class="site-auto">入库模式</span>
                    <span id="ioMode-out" class="site-auto-run">出库模式</span>
                    <span id="ioMode-none" class="site-unauto">未知模式</span>
                </div>
            </div>
            <div class="bar-code">
@@ -341,6 +308,7 @@
    setInterval(function () {
        getCodeData();
        renderBarCode();
        getIoModeInfo()
    }, 1000)
    var tData = [],tData1 = [],tData2 = [],tData3 = [];
    function getCodeData() {
@@ -348,7 +316,6 @@
            url: baseUrl + '/console/barcode/output/site',
            method: 'GET',
            success: function (res) {
                console.log(res)
                if (res.code === 200) {
                    tData = eval(res.data);
                    if (tData.length <= 5) {
@@ -372,6 +339,7 @@
            }
        })
    }
    function renderBarCode() {
        for (var i = 0; i < tData1.length; i++) {
            var str1 = '<li><span>' + tData1[i].barcode + '</span><span class="right">' + tData1[i].time + '</span></li>'
@@ -386,6 +354,56 @@
            $('#barcode3').append(str3)
        }
    }
    function getIoModeInfo() {
        $.ajax({
            url: baseUrl + "/console/getIoMode",
            headers: {'token': localStorage.getItem('token')},
            method: 'GET',
            success: function (res) {
                if (res.code === 200){
                    let ioModeData = res.data;
                    if (ioModeData == 1) {
                        $("#ioMode-none").hide()
                        $("#ioMode-in").show()
                        $("#ioMode-out").hide()
                    }else if(ioModeData == 2) {
                        $("#ioMode-none").hide()
                        $("#ioMode-in").hide()
                        $("#ioMode-out").show()
                    }else {
                        $("#ioMode-none").show()
                        $("#ioMode-in").hide()
                        $("#ioMode-out").hide()
                    }
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
                }  else {
                    console.log(res.msg);
                }
            }
        });
    }
    function switchIoMode() {
        $.ajax({
            url: baseUrl + "/console/switchIoMode",
            headers: {
                'token': localStorage.getItem('token')
            },
            data: {},
            method: 'post',
            success: function (res) {
                if (res.code === 200){
                    layer.msg(res.msg)
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
                }  else {
                    layer.msg(res.msg)
                }
            }
        });
    }
</script>
<script type="text/javascript">
    // 弹窗站点信息
src/main/webapp/views/pipeline.html
@@ -180,7 +180,6 @@
    var siteTableFullRows = 0;
    var outputDom = document.getElementById("output");
    $(document).ready(function() {
        getIoModeInfo();
        initPlcErrorTable();
        getPlcError();
        initSiteTable();
@@ -190,7 +189,6 @@
    setInterval(function () {
        getPlcError();
        starGetSite();
        getIoModeInfo();
    }, 1000);
    setInterval(function () {
        getSiteOutput();
@@ -201,61 +199,6 @@
        } else {
            getSite();
        }
    }
    var ioModeData;
    function getIoModeInfo() {
        $.ajax({
            url: baseUrl+ "/site/io/mode/info/site",
            headers: {'token': localStorage.getItem('token')},
            method: 'GET',
            success: function (res) {
                if (res.code === 200){
                    ioModeData = res.data;
                    ioModeData.forEach(function (e) {
                        $("#io-mode-"+e.floor).html(e.modeDesc);
                    })
                } else if (res.code === 403){
                    window.location.href = baseUrl+"/login";
                }  else {
                    console.log(res.msg);
                }
            }
        });
    }
    /**
     * 强制切换入出库模式
     */
    function ioModeSwitch(el) {
        var floor = el.split("-")[2];
        if (ioModeData != null && ioModeData.length > 1) {
            ioModeData.forEach(function(e) {
                if (e.floor === Number(floor)) {
                    if (e.modeVal === 3 || e.modeVal === 4) {
                        layer.confirm('确定切换为入库模式吗?',function () {
                            $.ajax({
                                url: baseUrl+ "/site/io/mode/action/site",
                                headers: {'token': localStorage.getItem('token')},
                                data: {floor: e.floor},
                                method: 'POST',
                                success: function (res) {
                                    if (res.code === 200){
                                        layer.msg("暂时不能切换!", {icon: 1})
                                    } else if (res.code === 403){
                                        window.location.href = baseUrl+"/login";
                                    }  else {
                                        console.log(res.msg);
                                    }
                                }
                            });
                            layer.closeAll();
                        })
                    }
                }
            });
        }
    }
    // plc异常信息表获取