From b7cbb2a30125285eade6a26c9f3d39363c65481c Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期一, 18 九月 2023 15:19:19 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 151 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 137 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index f571401..37acf7a 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -43,9 +43,15 @@ private short heartBeatVal = 1; private int barcodeSize = 1; public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ - add(100);add(101);add(102); - add(103);add(104);add(105); - add(106);add(107);add(108); + add(100);add(101); + add(102);add(103); + add(104);add(105); + add(200);add(201); + add(202);add(203); + add(204);add(205); + add(300);add(301); + add(340);add(341); + add(345);add(346); }}; public static final ArrayList<Integer> outInStaNos = new ArrayList<Integer>() {{ @@ -78,12 +84,18 @@ break; // 鍐欐暟鎹� ID+鐩爣绔� case 2: - write((StaProtocol)task.getData()); + write((StaProtocol) task.getData()); + read(); break; // 鍑哄叆搴撴ā寮� case 3: - write3((StaProtocol)task.getData()); + write3((StaProtocol) task.getData()); + read(); break; + //102绔欏洖閫�淇″彿 + case 5: + write5((StaProtocol) task.getData()); + read(); default: break; } @@ -120,7 +132,7 @@ * 璇诲彇鐘舵�� ====> 鏁村潡plc */ private void read() throws InterruptedException { - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNos.size()*4)); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB1000.0", (short) (staNos.size()*4)); if (result.IsSuccess) { for (int i = 0; i < staNos.size(); i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 @@ -135,7 +147,7 @@ } } Thread.sleep(200); - OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) (staNos.size())); + OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB1001.0", (short) (staNos.size())); if (result1.IsSuccess) { for (int i = 0; i < staNos.size(); i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 @@ -287,32 +299,99 @@ if (Cools.isEmpty(staProtocol)) { return; } + OperateResult writeResult = null; + //浠诲姟涓嬪彂娆℃暟 + int writeCount = 0; + //浠诲姟涓嬪彂鎴愬姛鏍囪瘑 + boolean writeFlag = false; + Short outAndIn = staProtocol.getOutInModel(); Integer siteId = staProtocol.getSiteId(); Short run = 0;//鍋滄杞姩 + String address = ""; if (staProtocol.getRotationDire() != null) { run = staProtocol.getRotationDire().shortValue();//杞姩鏂瑰悜 } switch (siteId) { case 102: - siemensS7Net.Write("DB100.300", run); + address = "DB100.300"; break; case 105: - siemensS7Net.Write("DB100.302", run); + address = "DB100.302"; break; case 106: - siemensS7Net.Write("DB100.304", run); + address = "DB100.304"; break; case 107: - siemensS7Net.Write("DB100.306", run); + address = "DB100.306"; break; case 108: - siemensS7Net.Write("DB100.308", run); + address = "DB100.308"; break; } - if (staProtocol.getStaNo() != null && staProtocol.getWorkNo() != null) { - write(staProtocol);//鍐欏叆宸ヤ綔鍙峰拰鐩爣绔� + while(writeCount < 5){ + writeResult = siemensS7Net.Write(address, run); + if (writeResult == null) { + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + continue; + } + + if(writeResult.IsSuccess){ + Thread.sleep(200); + OperateResultExOne<byte[]> readResult = siemensS7Net.Read(address, (short) 2); + if(readResult.IsSuccess){ + short run2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); + if(run.equals(run2)){ + //浠诲姟鍛戒护鍐欏叆鎴愬姛 + writeFlag = true; + if (staProtocol.getStaNo() != null && staProtocol.getWorkNo() != null) { + write(staProtocol);//鍐欏叆宸ヤ綔鍙峰拰鐩爣绔� + } + log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + break; + } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + Thread.sleep(200); + } + + //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡 + if(!writeFlag){ + staProtocol = station.get(staProtocol.getSiteId()); + if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { + staProtocol.setPakMk(true); + } + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol))); + log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); + + //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒� + boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol)); + read();//璇诲彇1娆¤澶囩姸鎬� + return; + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); + log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}", slave.getId(), JSON.toJSON(staProtocol)); + + staProtocol = station.get(siteId); + if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { + staProtocol.setPakMk(true); + } } } @@ -397,6 +476,50 @@ } /** + * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� + */ + private void write5(StaProtocol staProtocol) throws InterruptedException { + if (null == staProtocol) { + return; + } + + OperateResult writeResult; + //浠诲姟涓嬪彂娆℃暟 + int writeCount = 0; + while(writeCount < 5){ + writeResult = siemensS7Net.Write("DB100.310", staProtocol.getRollback102().shortValue()); + if(writeResult.IsSuccess){ + Thread.sleep(200); + OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100.310", (short)2); + if(readResult.IsSuccess){ + short rollback = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); + if (staProtocol.getRollback102() == (int) rollback) { + //浠诲姟鍛戒护鍐欏叆鎴愬姛 + log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + return; + } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + Thread.sleep(200); + } + } + + /** * 蹇冭烦 */ private void heartbeat(){ -- Gitblit v1.9.1