From a05a58973d6dc855bfb203ee16189d48238fea62 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期四, 07 十二月 2023 16:33:58 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 261 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 6a8cc16..db8b0e1 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -27,18 +27,18 @@ import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; -import com.zy.core.model.CrnSlave; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.LedSlave; -import com.zy.core.model.Task; +import com.zy.core.model.*; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.command.LedCommand; +import com.zy.core.model.command.RgvCommand; import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.LedThread; import com.zy.core.thread.SiemensDevpThread; +import com.zy.core.thread.ZyRgvThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -483,8 +483,13 @@ continue; } - // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触 - wrkMast.setWrkSts(14L); + if (crnStn.getStaNo() == 1016 || crnStn.getStaNo() == 1019) { + // 鏇存柊宸ヤ綔妗g姸鎬佷负13.RGV鎼繍涓� + wrkMast.setWrkSts(13L); + }else { + // 鏇存柊宸ヤ綔妗g姸鎬佷负14 + wrkMast.setWrkSts(14L); + } wrkMast.setCrnEndTime(new Date()); if (wrkMastMapper.updateById(wrkMast) != 0) { // 澶嶄綅鍫嗗灈鏈� @@ -1950,16 +1955,259 @@ } - public synchronized void outOfDevp() { - List<WrkMast> wrkMasts = wrkMastMapper.selectPick(); - for (WrkMast wrkMast : wrkMasts) { - if (basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())) == 0) { - wrkMast.setCtnNo("Y"); - if (wrkMastMapper.updateById(wrkMast) == 0) { - log.error("淇敼{}宸ヤ綔妗eけ璐ワ紝ctn_no", wrkMast.getWrkNo()); + //RGV鎼繍 + public synchronized void rgvIoExecute() { + for (RgvSlave slave : slaveProperties.getRgv()) { + ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getId()); + if (rgvThread == null) { + return; + } + + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return; + } + + // 鍒ゆ柇RGV鏄惁绌洪棽 + if (rgvProtocol.getModeType() == RgvModeType.COMPUTER + && rgvProtocol.getStatusType() == RgvStatusType.IDLE) { + // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡锛屽垯浼樺厛鎵弿鍑哄簱绔欑偣 + if (rgvProtocol.getLastIo().equals("I")) { + this.rgvOutExecute(rgvThread, rgvProtocol);//鍑哄簱 + rgvProtocol.setLastIo("O"); + }else { + this.rgvInExecute(rgvThread, rgvProtocol);//鍏ュ簱 + rgvProtocol.setLastIo("I"); + } + + //妫�鏌ユ槸鍚﹀瓨鍦ㄥ伐浣�1浠诲姟瓒呮椂娌′笅鍙� + if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() == 0) { + if (System.currentTimeMillis() - rgvProtocol.getTask1SendTime() > (1000*60)) { + //宸ヤ綅1涓嬪彂鏃堕棿瓒呰繃60s + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV缂栧彿 + rgvCommand.setCommand((short) 1);//宸ヤ綅1纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(4, rgvCommand))) { + log.error("RGV纭鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + return; + } + log.error("RGV纭鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + } + } + } + } + } + + //rgv鍏ュ簱 + public synchronized void rgvInExecute(ZyRgvThread rgvThread, RgvProtocol rgvProtocol) { + for (RgvSlave.Sta sta : rgvThread.getSlave().getInStn()) { + if (rgvProtocol.getTaskNo1() > 0) { + //妫�娴媟gv宸ヤ綅1鏄惁涓哄叆搴撲换鍔� + WrkMast wrkMast1 = wrkMastMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); + if (wrkMast1.getWrkSts() > 100) { + continue;//鍑哄簱浠诲姟璺宠繃 } } + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, sta.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(sta.getSourceStaNo()); + //鍒ゆ柇杈撻�佺嚎鏄惁鑷姩銆佹湁鐗┿�佸彲鍏ャ�佹湁宸ヤ綔鍙� + if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isOutEnable() && (staProtocol.getWorkNo() > 0))) { + continue; + } + + //鎼滅储宸ヤ綔妗� + WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo().intValue()); + if (wrkMast == null) { + continue;//宸ヤ綔妗d笉瀛樺湪 + } + + //鑾峰彇RGV鏀捐揣绔欑偣 + Integer staNo = Utils.getRgvStaNo(rgvProtocol.getRgvNo(), sta.getSourceStaNo(), staProtocol.getStaNo().intValue(), true); + if (staNo == null) { + continue;//RGV鏀捐揣绔欑偣涓嶅瓨鍦� + } + + //鍒ゆ柇鐩爣绔欐槸鍚﹁嚜鍔ㄣ�佸彲鍏ャ�佹棤鐗┿�佹棤宸ヤ綔鍙� + StaProtocol staProtocol1 = devpThread.getStation().get(staNo); + if (!(staProtocol1.isAutoing() && staProtocol1.isInEnable() && !staProtocol1.isLoading() && (staProtocol1.getWorkNo() == 0))) { + continue; + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV缂栧彿 + rgvCommand.setAckFinish((short) 0); + + //鍒ゆ柇rgv宸ヤ綅1鏄惁鍙敤 + if (rgvProtocol.getTaskNo1() == 0) { + rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐� + rgvCommand.setSourceStaNo1(staProtocol.getStaNo());//婧愮珯 + rgvCommand.setDestinationStaNo1(staNo.shortValue());//鐩爣绔� + rgvCommand.setCommand((short) 0);//宸ヤ綅1鏆備笉纭 + } else if (rgvProtocol.getTaskNo2() == 0) {//鍒ゆ柇rgv宸ヤ綅2鏄惁鍙敤 + rgvCommand.setTaskNo2(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐� + rgvCommand.setSourceStaNo2(staProtocol.getStaNo());//婧愮珯 + rgvCommand.setDestinationStaNo2(staNo.shortValue());//鐩爣绔� + rgvCommand.setCommand((short) 1);//宸ヤ綅2纭 + }else { + continue;//娌℃湁鍙敤RGV宸ヤ綅 + } + + if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(2, rgvCommand))) { + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + continue; + } + + log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + } + } + + //rgv鍑哄簱 + public synchronized void rgvOutExecute(ZyRgvThread rgvThread, RgvProtocol rgvProtocol) { + for (RgvSlave.Sta sta : rgvThread.getSlave().getOutStn()) { + if (rgvProtocol.getTaskNo1() > 0) { + //妫�娴媟gv宸ヤ綅1鏄惁涓哄嚭搴撲换鍔� + WrkMast wrkMast1 = wrkMastMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); + if (wrkMast1.getWrkSts() < 100) { + continue;//鍏ュ簱浠诲姟璺宠繃 + } + } + + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, sta.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(sta.getSourceStaNo()); + //鍒ゆ柇杈撻�佺嚎鏄惁鑷姩銆佹湁鐗┿�佸彲鍑恒�佹湁宸ヤ綔鍙� + if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isOutEnable() && (staProtocol.getWorkNo() > 0))) { + continue; + } + + //鎼滅储宸ヤ綔妗� + WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo().intValue()); + if (wrkMast == null) { + continue;//宸ヤ綔妗d笉瀛樺湪 + } + + //鑾峰彇RGV鏀捐揣绔欑偣 + Integer staNo = Utils.getRgvStaNo(rgvProtocol.getRgvNo(), sta.getSourceStaNo(), staProtocol.getStaNo().intValue(), false); + if (staNo == null) { + continue;//RGV鏀捐揣绔欑偣涓嶅瓨鍦� + } + + //鍒ゆ柇鐩爣绔欐槸鍚﹁嚜鍔ㄣ�佸彲鍑恒�佹棤鐗┿�佹棤宸ヤ綔鍙� + StaProtocol staProtocol1 = devpThread.getStation().get(staNo); + if (!(staProtocol1.isAutoing() && staProtocol1.isOutEnable() && !staProtocol1.isLoading() && (staProtocol1.getWorkNo() == 0))) { + continue; + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV缂栧彿 + rgvCommand.setAckFinish((short) 0); + + //鍒ゆ柇rgv宸ヤ綅1鏄惁鍙敤 + if (rgvProtocol.getTaskNo1() == 0) { + rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐� + rgvCommand.setSourceStaNo1(staProtocol.getStaNo());//婧愮珯 + rgvCommand.setDestinationStaNo1(staNo.shortValue());//鐩爣绔� + rgvCommand.setCommand((short) 0);//宸ヤ綅1鏆備笉纭 + } else if (rgvProtocol.getTaskNo2() == 0) {//鍒ゆ柇rgv宸ヤ綅2鏄惁鍙敤 + rgvCommand.setTaskNo2(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐� + rgvCommand.setSourceStaNo2(staProtocol.getStaNo());//婧愮珯 + rgvCommand.setDestinationStaNo2(staNo.shortValue());//鐩爣绔� + rgvCommand.setCommand((short) 1);//宸ヤ綅2纭 + }else { + continue;//娌℃湁鍙敤RGV宸ヤ綅 + } + + if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(2, rgvCommand))) { + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + continue; + } + + log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); + } + } + + //RGV宸ヤ綔瀹屾垚 + public synchronized void rgvFinished() { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + for (RgvSlave slave : slaveProperties.getRgv()) { + ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getId()); + if (rgvThread == null) { + return; + } + + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return; + } + + // 鐘舵�侊細绛夊緟纭 + if (rgvProtocol.getStatusType() == RgvStatusType.WAITING) { + if (rgvProtocol.getTaskNo1() == 9999) { + // RGV澶嶄綅 + rgvThread.setResetFlag1(true); + }else { + // 鑾峰彇寰呯‘璁ゅ伐浣滄。 + WrkMast wrkMast = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); + if (wrkMast == null) { + log.error("RGV澶勪簬绛夊緟纭涓斾换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�俁GV鍙�={}锛屽伐浣滃彿={}", rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1()); + continue; + } + + if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskFinish1() == 1) { + //宸ヤ綅1浠诲姟瀹屾垚 + // RGV澶嶄綅 + rgvThread.setResetFlag1(true); + + //缁欑洰鏍囩珯杈撻�佺嚎鍐欏叆鏁版嵁 + Short destinationPos1 = rgvProtocol.getDestinationPos1();//鑾峰彇宸ヤ綅1鐩爣绔� + StaProtocol staProtocol = devpThread.getStation().get(destinationPos1.intValue()).clone(); + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//鍐欏叆宸ヤ綔鍙� + staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//鍐欏叆鐩爣绔� + if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { + log.info("{}浠诲姟锛孯GV鎼繍鎴愬姛锛屽啓鍏ヨ緭閫佹暟鎹け璐}", wrkMast.getWrkNo(), JSON.toJSONString(staProtocol)); + } + + //2鍙稲GV鍜�3鍙稲GV宸ヤ綔瀹屾垚鍚庨渶瑕佹洿鏂板伐浣滄。鐘舵�� + if (rgvProtocol.getRgvNo() == 2 || rgvProtocol.getRgvNo() == 3) { + if (wrkMast.getWrkSts() == 13) {//13.RGV鎼繍涓� => 14.宸插嚭搴� + wrkMast.setWrkSts(14L); + wrkMast.setModiTime(new Date()); + wrkMastMapper.updateById(wrkMast); + } + } + } + + if (rgvProtocol.getTaskNo2() > 0 && rgvProtocol.getTaskFinish2() == 1) { + //宸ヤ綅2浠诲姟瀹屾垚 + // RGV澶嶄綅 + rgvThread.setResetFlag2(true); + + //缁欑洰鏍囩珯杈撻�佺嚎鍐欏叆鏁版嵁 + Short destinationPos2 = rgvProtocol.getDestinationPos2();//鑾峰彇宸ヤ綅2鐩爣绔� + StaProtocol staProtocol = devpThread.getStation().get(destinationPos2.intValue()).clone(); + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//鍐欏叆宸ヤ綔鍙� + staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//鍐欏叆鐩爣绔� + if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { + log.info("{}浠诲姟锛孯GV鎼繍鎴愬姛锛屽啓鍏ヨ緭閫佹暟鎹け璐}", wrkMast.getWrkNo(), JSON.toJSONString(staProtocol)); + } + + //2鍙稲GV鍜�3鍙稲GV宸ヤ綔瀹屾垚鍚庨渶瑕佹洿鏂板伐浣滄。鐘舵�� + if (rgvProtocol.getRgvNo() == 2 || rgvProtocol.getRgvNo() == 3) { + if (wrkMast.getWrkSts() == 13) {//13.RGV鎼繍涓� => 14.宸插嚭搴� + wrkMast.setWrkSts(14L); + wrkMast.setModiTime(new Date()); + wrkMastMapper.updateById(wrkMast); + } + } + } + } + } } } -- Gitblit v1.9.1