pang.jiabao
2026-04-26 7ed8a3db0115b19349cbdad55c91c353a0e8e300
一楼输送线出入库冲突控制
3个文件已修改
103 ■■■■■ 已修改文件
src/main/java/com/zy/core/MainProcess.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/service/impl/MainServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java
@@ -75,6 +75,11 @@
                    // 堆垛机回原点
                    mainService.originGo();
                    mainService.releasePathIfFree();
                    // rgv搬运一楼
                    mainService.rgvCarryOne();
                    // rgv搬运
                    mainService.rgvCarry();
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -125,6 +125,8 @@
     */
    public IoModeType ioModeOf101 = IoModeType.NONE;
    private int pathStatus  = 0;
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
    }
@@ -348,6 +350,12 @@
        }
    }
    public void updatePathStatus(int status) {
        if (this.pathStatus == status) return;
        this.pathStatus = status;
        siemensS7Net.Write("DB100.1", (short) status);
    }
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -1690,6 +1690,89 @@
        wrkSourceStaNoToRgvStaMap.put(1407,1403);
    }
    // ========================
    // 🔥 通道锁(核心)
    // ========================
    private volatile int pathLock = 0;
    // 0 = 空闲
    // 1 = 入库占用(1106→1105→1114)
    // 2 = 出库占用(1114→RGV→外)
    public synchronized void releasePathIfFree() {
        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, 1);
        RgvProtocol rgv = rgvThread.getRgvProtocol();
        if (rgv == null) return;
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol sta1105 = devpThread.getStation().get(1105);
        StaProtocol sta1114 = devpThread.getStation().get(1114);
        if (sta1105 == null || sta1114 == null) return;
        boolean allFree =
                rgv.getTaskNo1() == 0
                        && rgv.loaded1 == 0
                        && rgv.statusType == RgvStatusType.IDLE
                        && rgv.modeType == RgvModeType.AUTO
                        && rgv.alarm == 0
                        && sta1105.isAutoing()
                        && sta1105.getWorkNo() == 0
                        && !sta1105.isLoading()
                        && sta1114.isAutoing()
                        && sta1114.getWorkNo() == 0
                        && !sta1114.isLoading();
        if (allFree && pathLock != 0) {
            pathLock = 0;
            devpThread.updatePathStatus(0);
        }
    }
    public synchronized void rgvCarryOne() {
        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, 1);
        RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
        if (rgvProtocol == null) {
            return;
        }
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol1106 = devpThread.getStation().get(1106);
        if (staProtocol1106 == null) {
            return;
        }
        StaProtocol staProtocol1105 = devpThread.getStation().get(1105);
        if (staProtocol1105 == null) {
            return;
        }
        StaProtocol staProtocol1114 = devpThread.getStation().get(1114);
        if (staProtocol1114 == null) {
            return;
        }
        if (isIdle(rgvProtocol, staProtocol1105, staProtocol1114) &&  staProtocol1106.isAutoing() && staProtocol1106.isLoading() && staProtocol1106.getWorkNo() != 0 && staProtocol1106.getStaNo() != 1106) {
            applyPath(1, devpThread);
        }
    }
    public synchronized boolean isIdle(RgvProtocol rgvProtocol,StaProtocol staProtocol1105,StaProtocol staProtocol1114) {
        return rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.statusType == RgvStatusType.IDLE && rgvProtocol.loaded1 == 0
                && rgvProtocol.alarm == 0 && rgvProtocol.getTaskNo1() == 0
                && staProtocol1105.isAutoing() && !staProtocol1105.isLoading() && staProtocol1105.getWorkNo() == 0
                && staProtocol1114.isAutoing() && !staProtocol1114.isLoading() && staProtocol1114.getWorkNo() == 0;
    }
    private synchronized boolean applyPath(int newStatus, SiemensDevpThread devpThread) {
        if (pathLock != 0) return false;
        pathLock = newStatus;
        devpThread.updatePathStatus(newStatus);
        return true;
    }
    public synchronized void rgvCarry() {
        for(int i = 1; i <= 4; i ++) {
            List<Integer> rgvCarrySiteList;
@@ -1724,8 +1807,11 @@
                        // 判断目标站点是否可用
                        StaProtocol staProtocol = devpThread.getStation().get(wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()) == null ?
                                wrkMast.getStaNo() : wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()));
                        if (staProtocol != null && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
                        if (staProtocol != null && (staProtocol.getSiteId() != 1114 || isIdle(rgvProtocol,devpThread.getStation().get(1105),staProtocol))
                                && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
                            if (staProtocol.getSiteId() == 1114) {
                                applyPath(2, devpThread);
                            }
                            RgvCommand rgvCommand = new RgvCommand();
                            rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
//                            rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位