From da4f2304da2646aa0336b492514655e7cc8a494a Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期三, 11 六月 2025 12:49:38 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/jx-gt-crn-wcs' into jx-gt-crn-wcs --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 198 ++++++++++++++++++++++++++++++++++--------------- 1 files changed, 136 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index f107d92..96f6cde 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -45,11 +45,22 @@ private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 1; private StaError1 staError1; + public static boolean is = true; // public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ // // }}; public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ - add(140);add(141); + add(1000); add(1001); add(1002); add(1003); add(1004); add(1005); add(1006); add(1007); add(1008); add(1009); add(1010); + add(1011); add(1012); add(1013); add(1014); add(1015); add(1016); add(1017); add(1018); add(1019); add(1020); add(1021); + add(1022); add(1023); add(1024); add(1025); add(1026); add(1027); add(1028); add(1029); add(1030); + add(2000); add(2001); add(2002); add(2003); add(2004);add(2005); add(2006); add(2007); +// add(200);add(201);add(202); + }}; + public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ + add(1040);add(1041);add(1042);add(1043);add(1044);add(1045);add(1046);add(1047); + add(2010);add(2011);add(2012);add(2013);add(2014);add(2015);add(2016);add(2017); + add(3010);add(3011);add(3012);add(3013);add(3014);add(3015);add(3016);add(3017); + // add(200);add(201);add(202); }}; @@ -91,6 +102,8 @@ switch (slave.getId()) { case 1: return staNos1; + case 2: + return staNos2; default: throw new CoolException("鏈嶅姟鍣ㄥ紓甯�"); } @@ -115,7 +128,7 @@ // 鍐欐暟鎹� ID+鐩爣绔� case 2: writeD((StaProtocol)task.getData(),1); - log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo()); +// log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo()); break; default: break; @@ -135,31 +148,43 @@ private void initSite() { count ++; ArrayList<Integer> staNos = getStaNo(); + if(count > 50) { + // 绔欑偣缂栧彿 + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo(0); // 宸ヤ綔鍙� + staProtocol.setStaNo((short) 0); // 鐩爣绔� + staProtocol.setState((short) 0); // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰 + staProtocol.setWorkIo((short) 0); + staProtocol.setRequestIo((short) 0); + staProtocol.setTrayIo((short) 0); + staProtocol.setLocIo((short) 0); + staProtocol.setBarcode("-"); + staProtocol.setWeightIo(0.0); + staProtocol.setMode((short) 0); - // 绔欑偣缂栧彿 - for (Integer siteId : staNos) { - StaProtocol staProtocol = station.get(siteId); - if (null == staProtocol) { - staProtocol = new StaProtocol(); - staProtocol.setSiteId(siteId); - station.put(siteId, staProtocol); + if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) { + staProtocol.setPakMk(true); + } } - staProtocol.setWorkNo(0); // 宸ヤ綔鍙� - staProtocol.setStaNo((short) 0); // 鐩爣绔� - staProtocol.setState((short) 0); // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰 - staProtocol.setWorkIo((short) 0); - staProtocol.setRequestIo((short) 0); - staProtocol.setTrayIo((short) 0); - staProtocol.setLocIo((short) 0); - staProtocol.setBarcode("-"); - staProtocol.setWeightIo(0.0); - staProtocol.setMode((short) 0); - - if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) { - staProtocol.setPakMk(true); - } + count = 0; } - count = 0; + + + } + + public void initSta(){ + if (is){ + for (int i = 1000; i <= 1300; i++) { + staNos1.add(i); + } + is = false; + } } @@ -198,9 +223,9 @@ StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); - staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } + staProtocol.setSiteId(siteId); staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*66 + 8)); // 宸ヤ綔鍙� staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 12)); // 鐩爣绔� staProtocol.setState(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 14)); // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰 @@ -208,11 +233,11 @@ staProtocol.setRequestIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 18)); staProtocol.setTrayIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 20)); staProtocol.setLocIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 22)); - staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*66 + 24,16, "UTF-8")); + staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*66 + 24,16, "UTF-8").trim()); // staProtocol.setWeightIo(siemensS7Net.getByteTransform().TransDouble(result.Content,i*66 + 40)); staProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 44)); - if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) { + if (!staProtocol.isPakMk() && (staProtocol.workType == DevpWorkType.IDLE || staProtocol.isPakReset())) { staProtocol.setPakMk(true); } } @@ -285,53 +310,102 @@ } private void writeD(StaProtocol staProtocol,Integer count)throws InterruptedException{ + + boolean reset = true; if (null == staProtocol) { return; + } + staProtocol = staProtocol.clone(); + Integer oriWrkNo = staProtocol.getWorkNo(); + short oriStaNo = staProtocol.getStaNo(); + ArrayList<Integer> staNos = getStaNo(); + int index = staNos.indexOf(staProtocol.getSiteId()); + + + if(writeWrk(staProtocol,1)){ + + int whileCount = 0; + OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1); + if (write3.IsSuccess){ + News.info("杈撻�佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+1+"]"); + Thread.sleep(100); + do { + OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2); + short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0); + if (mk == 2){ + OperateResult write5 = siemensS7Net.Write("DB100." + index*66, 0); // 宸ヤ綔鍙� + Thread.sleep(100); + OperateResult write6 = siemensS7Net.Write("DB100." + (index*66+4), (short) 0); // 鐩爣绔� + Thread.sleep(100); + OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), (short) 0); + reset = false; + if (write4.IsSuccess && write5.IsSuccess && write6.IsSuccess){ + News.info("杈撻�佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+"0,0,0"+"]"); + OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100."+(index*66), (short) 8); + Integer wrkNo1 = siemensS7Net.getByteTransform().TransInt32(result1.Content, 0); + short staNo1 = siemensS7Net.getByteTransform().TransInt16(result1.Content, 4); + short mk1 = siemensS7Net.getByteTransform().TransInt16(result1.Content, 6); + if (wrkNo1 != 0 || staNo1 !=0 || mk1 !=0){ + whileCount++; + News.info("澶嶄綅澶辫触,杈撻�佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+"0,0,0"+"]"); + }else { + News.info("杈撻�佺嚎澶嶄綅瀹屾垚"); + break; + } + + } + }else if (reset && mk == 0 ){ + OperateResult write7 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1); + News.info("鍥炶1澶辫触锛岃緭閫佺嚎鍛戒护涓嬪彂[id:"+slave.getId()+"] >>>>>"+"["+"1"+"]"); + Thread.sleep(100); + whileCount++; + }else { + whileCount++; + } + }while (whileCount <10); + } + }else { + log.error("杈撻�佸懡浠や笅鍙戝け璐�"+JSON.toJSONString(staProtocol)); + } + + + + } + + private boolean writeWrk(StaProtocol staProtocol,Integer count)throws InterruptedException { + + if (null == staProtocol) { + return false; } Integer oriWrkNo = staProtocol.getWorkNo(); short oriStaNo = staProtocol.getStaNo(); ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); - - OperateResult write1 = siemensS7Net.Write("DB100." + index*66, staProtocol.getWorkNo()); // 宸ヤ綔鍙� - Thread.sleep(200); - OperateResult write2 = siemensS7Net.Write("DB100." + (index*66+4), staProtocol.getStaNo()); // 鐩爣绔� - if(write1.IsSuccess && write2.IsSuccess){ - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100."+(index*66), (short) 6); - Integer wrkNo = siemensS7Net.getByteTransform().TransInt32(result.Content, 0); - short staNo = siemensS7Net.getByteTransform().TransInt16(result.Content, 4); - if (!oriWrkNo.equals(wrkNo) || oriStaNo != staNo){ - if (count >= 5){ - log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), count); - return; - } - count++; - writeD(staProtocol,count); - } - int whileCount = 0; - OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1); - if (write3.IsSuccess){ - Thread.sleep(200); - do { - OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2); - short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0); - if (mk == 2){ - OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), 0); - if (write4.IsSuccess){ - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); - News.info("SiemensDevp"+" - 5"+" - 杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol)); - break; - } - }else { - whileCount++; + do { + log.info("杈撻�侀�掑綊娆℃暟:" + count); + OperateResult write1 = siemensS7Net.Write("DB100." + index * 66, staProtocol.getWorkNo()); // 宸ヤ綔鍙� + Thread.sleep(100); + OperateResult write2 = siemensS7Net.Write("DB100." + (index * 66 + 4), staProtocol.getStaNo()); // 鐩爣绔� + if (write1.IsSuccess && write2.IsSuccess) { + News.info("杈撻�佺嚎鍛戒护涓嬪彂[id:" + slave.getId() + "] >>>>>" + "[" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "]"); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100." + (index * 66), (short) 6); + Integer wrkNo = siemensS7Net.getByteTransform().TransInt32(result.Content, 0); + short staNo = siemensS7Net.getByteTransform().TransInt16(result.Content, 4); + if (!oriWrkNo.equals(wrkNo) || oriStaNo != staNo) { + if (count >= 5) { + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), count); + return false; } - }while (whileCount <5); + count++; + }else { + return true; + } } - } + }while (count <=5); - + return true; } // 鏇存柊鍏ュ嚭搴撴ā寮� -- Gitblit v1.9.1