| | |
| | | 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; |
| | |
| | | // 判断目标站点是否可用 |
| | | 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任务完成确认位 |