From 19b3cd8d64af08e5c0b3bd680c699e46a07e13d3 Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期五, 18 七月 2025 15:50:44 +0800 Subject: [PATCH] #预调度生成任务 --- src/main/java/com/zy/core/model/protocol/StaProtocol.java | 2 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 106 ++++++++++++++++++++------ src/main/java/com/zy/core/thread/SiemensDevpThread.java | 77 ++++++++++++++++++ 3 files changed, 155 insertions(+), 30 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 fc27a46..0c9f582 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -49,6 +49,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; +import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -125,16 +126,90 @@ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1); + if (staProtocolIn == null) { + continue; + } else { + staProtocolIn = staProtocolIn.clone(); + } + if (barcodeThread == null) { + continue; + } + String barcode = barcodeThread.getBarcode(); + if(staProtocolIn.getStamp() == 1) { + WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() + .eq("barcode", barcode) + .in("io_type", 107, 103, 57)); + if (!Cools.isEmpty(checkPick)) { + continue; + } + try { + LocTypeDto locTypeDto = new LocTypeDto(staProtocol); + + SearchLocParam param = new SearchLocParam(); + locTypeDto.setLocType1((short) 1); + param.setBarcode(barcode); + param.setIoType(1); + param.setSourceStaNo(inSta.getStaNo()); + param.setLocType1(locTypeDto.getLocType1()); + param.setWeight(staProtocol.getWeight()); + String response = new HttpHandler.Builder() + .setTimeout(30, TimeUnit.SECONDS) + .setUri(wmsUrl) + .setPath("/rpc/pakin/loc/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + StartupDto dto = jsonObject.getObject("data", StartupDto.class); + barcodeThread.setBarcode(""); + staProtocol.setWorkNo(dto.getWorkNo()); + //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); + staProtocol.setStaNo(dto.getStaNo().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); + log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo()); + + ledThread.errorReset(); + log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎"); + + if (!result) { + News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); + + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + } else { + if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) { + continue; + } + staProtocol.setWorkNo(wrkNo); + wrkNo++; + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo()); + +// if (ledThread != null) { + String errorMsg = jsonObject.getString("msg"); + if (!Cools.isEmpty(errorMsg)) { + MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); + } +// } +// News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } + if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } - if (barcodeThread == null) { - continue; - } - String barcode = barcodeThread.getBarcode(); // 灏哄妫�娴嬪紓甯� boolean back = false; String errMsg = ""; @@ -226,7 +301,7 @@ // // } News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo()); - MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo())); +// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo())); continue; // barcodeThread.setBarcode(""); // staProtocol.setWorkNo(wrkMast.getWrkNo()); @@ -291,27 +366,6 @@ } } else { if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) { - - //宸ヤ綔妗e凡瀛樺湪 鍐嶆杩涘幓 -// wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode); -// if (wrkMast != null) { -// barcodeThread.setBarcode(""); -// staProtocol.setWorkNo(9999); -// //staProtocol.setWorkNo(wrkMast.getWrkNo()); -// //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); -// staProtocol.setStaNo(inSta.getBackSta().shortValue()); -// devpThread.setPakMk(staProtocol.getSiteId(), false); -// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// log.error("杈撻�佺嚎涓嬪彂2锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo()); -// ledThread.errorReset(); -// log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎"); -// if (!result) { -// News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); -// -// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -// } -// } - continue; } staProtocol.setWorkNo(wrkNo); diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java index 090619e..5395af5 100644 --- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java @@ -58,7 +58,7 @@ // 闅斿绔欑偣锛堝彴杞︿綅缃級 private String nearbySta; - //lfd鍏ュ簱鍗拌 褰搒tamp>=2鏃舵墠鍏ュ簱 + //gl蹇�熺敓鎴愪换鍔� stamp=1鏃剁洿鎺ョ敓鎴愪换鍔� private Integer stamp = 0; // 澶栧舰妫�娴� ------------------------------------------------------------------------ diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index 4055c3b..627bb17 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -95,6 +95,16 @@ add(203);add(205);add(208);add(211); }}; + public static final ArrayList<Integer> staNosInList1 = new ArrayList<Integer>() {{ + add(122); + add(222);add(224);add(227);add(230); + }}; + + public static final ArrayList<Integer> staNosInList2 = new ArrayList<Integer>() {{ + add(101); add(104);add(106);add(108); + add(202);add(204);add(207);add(210); + }}; + private Integer count=0; /** @@ -117,6 +127,17 @@ public SiemensDevpThread(DevpSlave slave) { this.slave = slave; + } + + private ArrayList<Integer> getStaNoIn() { + switch (slave.getId()) { + case 1: + return staNosInList1; + case 2: + return staNosInList2; + default: + throw new CoolException("鏈嶅姟鍣ㄥ紓甯�"); + } } private ArrayList<Integer> getStaNoErr() { @@ -182,6 +203,9 @@ case 2: write((StaProtocol)task.getData()); log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo()); + break; + case 3: + write2((StaProtocol)task.getData()); break; default: break; @@ -271,6 +295,7 @@ ArrayList<Integer> staNos = getStaNo(); ArrayList<Integer> staNosErrList = getStaNoErr(); ArrayList<Integer> staNoWeight = getStaNoWeight(); + ArrayList<Integer> staNosInList = getStaNoIn(); int staNoSize = staNos.size(); OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8)); OperateResultExOne<byte[]> resultWeight = null; @@ -355,6 +380,20 @@ } } + //鍏ュ簱婊¤冻 + ArrayList<Integer> staNosIns = staNosInList; + int staNosInSize = staNosIns.size(); + OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6)); + if(resultIn.IsSuccess){ + for (int i = 0; i < staNosInSize; i++) { + Integer siteId = staNosIns.get(i); + StaProtocol staProtocol = station.get(siteId); + staProtocol.setStamp(siemensS7Net.getByteTransform().TransInt32(result.Content, i*6)); + } + } + + + // //plc鏁呴殰 // OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4)); // if (resultErr2.IsSuccess) { @@ -432,9 +471,41 @@ } - /** - * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� - */ + + private void write2(StaProtocol staProtocol) throws InterruptedException { + OperateResult write = null; + int writeCount = 0; + ArrayList<Integer> staNosInList = getStaNoIn(); + + ArrayList<Integer> staNosIns = staNosInList; + int staNosInSize = staNosIns.size(); + OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6)); + int offset = 0; + if(resultIn.IsSuccess){ + for (int i = 0; i < staNosInSize; i++) { + Integer siteId = staNosIns.get(i); + if(staProtocol.getSiteId() == siteId){ + offset = i; + } + } + } + do { + write = siemensS7Net.Write("DB1000." + offset*6 + 2,staProtocol.getWorkNo()); // 宸ヤ綔鍙� + + if(write.IsSuccess ){ + log.error("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + break; + } + else { + writeCount++; + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + }while (writeCount<5); + } + + /** + * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� + */ private void write(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; -- Gitblit v1.9.1