From a9e8a91fd4c8c504d7df9ef921f32d832390e77d Mon Sep 17 00:00:00 2001 From: whycq <10027870+whycq@user.noreply.gitee.com> Date: 星期五, 15 九月 2023 13:42:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/zjfnwcs' into zjfnwcs --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 160 +++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 123 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index 94dfa29..e3ca63f 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -45,7 +45,7 @@ add(101);add(102);add(103);add(104); add(201);add(202);add(203);add(204);add(205);add(206); add(207);add(208);add(209);add(210);add(211);add(212); - add(213);add(105); + add(213);add(105);add(1000); }}; /** @@ -54,7 +54,7 @@ private int barcodeSize = 2; public IoModeType ioMode = IoModeType.NONE; - public int[][] startSignal = new int[48][2]; + public int[][] startSignal = new int[48][3]; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; @@ -80,47 +80,62 @@ case 2: write((StaProtocol)task.getData()); break; + // 鍐欐暟鎹� 103绔欑偣鍐欏叆PACK鐮� + case 4: + write103((String)task.getData()); + break; + // 鐏淇″彿 + case 5: + StaProtocol staProtocol2 = (StaProtocol)task.getData(); + siemensS7Net.Write("DB108.0" + staProtocol2.getSiteId(), staProtocol2.getStaNo()==1); + break; + //娴嬭瘯搴撳嚭搴擄紝搴撲綅鐘舵�佹敼涓�8 + case 6: + String data = task.getData()+""; + Byte coun=8; + siemensS7Net.Write("DB38.0" + data, coun); + break; //澶嶄綅娴嬭瘯淇″彿 case 3: - StaProtocol staProtocol = (StaProtocol)task.getData(); + StaProtocol staProtocol = (StaProtocol) task.getData(); siemensS7Net.Write("DB102.0" + staProtocol.getSiteId(), staProtocol.getStaNo()); break; default: break; - } - // 蹇冭烦 + } + // 蹇冭烦 // heartbeat(); Thread.sleep(400); - } catch (Exception e) { - e.printStackTrace(); - } +} catch (Exception e) { + e.printStackTrace(); + } } - } + } - @Override - public boolean connect() { +@Override +public boolean connect() { boolean result = false; siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); siemensS7Net.setRack(slave.getRack().byteValue()); siemensS7Net.setSlot(slave.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); if(connect.IsSuccess){ - result = true; - OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); - log.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + result = true; + OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + log.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } else { - OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); - log.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + log.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } siemensS7Net.ConnectClose(); return result; - } + } - /** - * 璇诲彇鐘舵�� ====> 鏁村潡plc - */ - private void read() throws InterruptedException { +/** + * 璇诲彇鐘舵�� ====> 鏁村潡plc + */ +private void read() throws InterruptedException { // // 鏇存柊鍏ュ嚭搴撴ā寮� // updateIoMode(); int staNoSize = staNos.size(); @@ -196,12 +211,17 @@ } Thread.sleep(200); - OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB102.0", (short) 96); - OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB102.0", (short) 96); + //娴嬭瘯鏌滅姸鎬佽幏鍙� + OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB38.0", (short) 48); + //鍚姩绉诲簱鎸夐挳 + OperateResultExOne<byte[]> result6 = siemensS7Net.Read("DB102.0", (short) 96); + //娑堥槻鎶ヨ + OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB108.0", (short) 48); if(result3.IsSuccess) { for(int i=0; i<48; i++){ - startSignal[i][0] = siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2); - startSignal[i][1] = siemensS7Net.getByteTransform().TransInt16(result4.Content, i*2); + startSignal[i][0] = siemensS7Net.getByteTransform().TransByte(result3.Content, i);//娴嬭瘯鏌滅姸鎬� + startSignal[i][1] = siemensS7Net.getByteTransform().TransBool(result4.Content, i)?1:0;//娑堥槻鐘舵�� + startSignal[i][2] = siemensS7Net.getByteTransform().TransInt16(result6.Content, i*2);//鍚姩鎸夐挳鐘舵�� } } // OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0"); @@ -238,33 +258,99 @@ } /** + * 鍐欏叆 pack鐮� =====> 鍗曠珯鐐瑰啓鍏� + */ + private void write103(String packNo){ + try{ + + OperateResult write = siemensS7Net.Write("DB109.0", packNo); + if (!write.IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(packNo))); + log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(packNo)); + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(packNo))); + log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(packNo)); + } + }catch (Exception e){ + log.error("103绔欑偣鍐欏叆鏁版嵁澶辫触锛岃緭閫佺嚎绾跨▼write103"); + } + } + + /** * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� */ private void write(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; } + int staNoSize = staNos.size(); int index = staNos.indexOf(staProtocol.getSiteId()); short[] array = new short[2]; array[0] = staProtocol.getWorkNo(); array[1] = staProtocol.getStaNo(); - OperateResult write = siemensS7Net.Write("DB100." + index*4, array); + + //浠诲姟ID涓嬪彂娆℃暟 + int idCount = 0; + boolean idFlag = false; + OperateResult write; + while(idCount < 5){ + + write = siemensS7Net.Write("DB100." + index*4, array); // 鍐� + if(write.IsSuccess){ + Thread.sleep(200); + OperateResultExOne<byte[]> readId = siemensS7Net.Read("DB100." + index*4, (short) (staNoSize*2)); + if(readId.IsSuccess){ + if(staProtocol.getWorkNo()!=0&&staProtocol.getWorkNo()!=9999){ + if(!staProtocol.isInEnable()&&(staProtocol.getSiteId()==201||staProtocol.getSiteId()==206)){ + break; + } + } + short workNo = siemensS7Net.getByteTransform().TransInt16(readId.Content, 0); + if(staProtocol.getWorkNo().equals(workNo)){ + //宸ヤ綔鍙峰啓鍏ユ垚鍔� + idFlag = true; + break; + } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 + idCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎宸ヤ綔鍙峰悗杩斿洖鎴愬姛锛屼絾鏄鍙栧伐浣滃彿鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),idCount)); + log.error("鍐欏叆杈撻�佺嚎宸ヤ綔鍙峰悗杩斿洖鎴愬姛锛屼絾鏄鍙栧伐浣滃彿鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), idCount); + } + } else { + idCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎宸ヤ綔鍙峰悗璇诲彇宸ヤ綔鍙峰け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), idCount)); + log.error("鍐欏叆杈撻�佺嚎宸ヤ綔鍙峰悗璇诲彇宸ヤ綔鍙峰け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), idCount); + } + } else { + idCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎宸ヤ綔鍙峰け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),idCount)); + log.error("鍐欏叆杈撻�佺嚎宸ヤ綔鍙峰け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), idCount); + } + Thread.sleep(200); + } + //鍐橧D灏濊瘯浜�5娆¤繕鏄け璐ヤ簡 + if(!idFlag){ + staProtocol = station.get(staProtocol.getSiteId()); + if (staProtocol.getWorkNo() == 9999 && 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(2, staProtocol)); + read();//璇诲彇1娆¤澶囩姸鎬� + return; + } // OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙� // Thread.sleep(500); // OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 鐩爣绔� - if (!write.IsSuccess) { - staProtocol = station.get(staProtocol.getSiteId()); - if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { - staProtocol.setPakMk(true); - } - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol))); - log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); - } 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)); - } + 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)); } // 鏇存柊鍏ュ嚭搴撴ā寮� -- Gitblit v1.9.1