From 01c964b63f8ec9ff6422221c67e72d47b7a685c8 Mon Sep 17 00:00:00 2001 From: 野心家 <1051256694@qq.com> Date: 星期二, 08 四月 2025 12:58:08 +0800 Subject: [PATCH] 初始化 --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 205 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 160 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index ea0e6b9..317f6dc 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -42,9 +42,16 @@ private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 1; public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ - add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109); -// add(201);add(202);add(203);add(204); -// add(301);add(302);add(303);add(304);add(305);add(306); + add(101); + add(102); + add(103); + add(104); + add(201); + add(202); + add(203); + add(204); + add(205); + add(206); }}; /** @@ -53,7 +60,7 @@ private int barcodeSize = 1; public IoModeType ioMode = IoModeType.NONE; - public int[] startSignal = new int[48]; + public int[][] startSignal = new int[48][3]; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; @@ -77,13 +84,28 @@ break; // 鍐欐暟鎹� ID+鐩爣绔� case 2: - write((StaProtocol)task.getData()); + 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(); - siemensS7Net.Write("DB102.0" + staProtocol.getSiteId(), staProtocol.getStaNo()); - break; +// case 3: +// StaProtocol staProtocol = (StaProtocol) task.getData(); +// siemensS7Net.Write("DB102.0" + staProtocol.getSiteId(), staProtocol.getStaNo()); +// break; default: break; } @@ -104,12 +126,12 @@ siemensS7Net.setRack(slave.getRack().byteValue()); siemensS7Net.setSlot(slave.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); - if(connect.IsSuccess){ + 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())); + 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())); + 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(); @@ -123,7 +145,7 @@ // // 鏇存柊鍏ュ嚭搴撴ā寮� // updateIoMode(); int staNoSize = staNos.size(); - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize*4)); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize * 4)); if (result.IsSuccess) { for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 @@ -133,9 +155,9 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } - staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 宸ヤ綔鍙� + staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4)); // 宸ヤ綔鍙� - staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4 + 2)); // 鐩爣绔� + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2)); // 鐩爣绔� } } // Thread.sleep(200); @@ -153,11 +175,11 @@ // } // } Thread.sleep(200); - OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) (staNoSize*2)); + OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) (staNoSize * 2)); if (result1.IsSuccess) { for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 - boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1); + boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i * 2, 1); StaProtocol staProtocol = station.get(siteId); staProtocol.setAutoing(status[0]); // 鑷姩 staProtocol.setLoading(status[1]); // 鏈夌墿 @@ -175,33 +197,60 @@ } Thread.sleep(200); - OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.190",(short)(barcodeSize*12)); + OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.190", (short) 8); +// OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB100.216",(short)(6)); if (result2.IsSuccess) { - for (int i = 0; i < barcodeSize; i++) { - String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*12,12, "UTF-8"); + String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, 0, 8, "UTF-8"); // String barcode=new String(result2.Content,i*12,12); - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); - if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { - barcodeThread.setBarcode(barcode); - } + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 1); + if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); } } +// if (result5.IsSuccess) { +// String barcode =siemensS7Net.getByteTransform().TransString(result5.Content,0,6, "UTF-8"); +//// String barcode=new String(result2.Content,i*12,12); +// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 2); +// if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { +// barcodeThread.setBarcode(barcode); +// } +// } Thread.sleep(200); - OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB102.0", (short) 96); - if(result3.IsSuccess) { - for(int i=0; i<48; i++){ - startSignal[i] = siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2); + //娴嬭瘯鏌滅姸鎬佽幏鍙� + 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().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"); // if (result2.IsSuccess) { // this.ioMode = IoModeType.get(result2.Content); // } + OperateResultExOne<byte[]> result202 = siemensS7Net.Read("DB101.806", (short) 8); + if (result202.IsSuccess) { + //鍑哄叆搴撴ā寮� + boolean[] status = siemensS7Net.getByteTransform().TransBool(result202.Content, 0, 1); + StaProtocol staProtocol = station.get(202); + staProtocol.setFrontErr(status[0]); + staProtocol.setBackErr(status[1]); + staProtocol.setHighErr(status[2]); + staProtocol.setLeftErr(status[3]); + staProtocol.setRightErr(status[4]); + staProtocol.setWeightErr(status[5]); + staProtocol.setBarcodeErr(status[6]); + } if (result.IsSuccess && result1.IsSuccess) { - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId())); // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� try { @@ -228,33 +277,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)); } // 鏇存柊鍏ュ嚭搴撴ā寮� @@ -270,7 +385,7 @@ /** * 蹇冭烦 */ - private void heartbeat(){ + private void heartbeat() { if (heartBeatVal == 1) { heartBeatVal = 2; } else { @@ -301,14 +416,14 @@ public static void main(String[] args) { System.out.println(staNos.indexOf(129)); System.out.println(staNos.size()); - for (int i = 0; i<staNos.size(); i++) { + for (int i = 0; i < staNos.size(); i++) { // System.out.println(i*2); // System.out.println(i*2 + 200); // System.out.println(i); } int index = staNos.indexOf(128); - System.out.println(index*2); - System.out.println(index*2 + 200); + System.out.println(index * 2); + System.out.println(index * 2 + 200); } // public static void main(String[] args) throws Exception { -- Gitblit v1.9.1