From 242586527d932f0608c3ddf3e25964a47b0763cc Mon Sep 17 00:00:00 2001 From: zjj <zjj123456> Date: 星期日, 03 十一月 2024 10:12:53 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 671 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 629 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index 173f38b..c7dba53 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -5,14 +5,17 @@ import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; -import com.core.common.Arith; +import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; +import com.core.exception.CoolException; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.IoModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; @@ -39,25 +42,171 @@ private SiemensS7Net siemensS7Net; private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 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(109);add(110);add(111);add(112);add(113);add(114);add(115);add(116);add(117); - add(118);add(119);add(120);add(121);add(122);add(123);add(124);add(125);add(126);add(127);add(128); - add(200);add(201);add(202);add(203);add(204);add(205); + + + public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ + 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); }}; - public static void main(String[] args) { - for (Integer siteId : staNos) { - int divides = (int) Arith.divides(0, siteId, 100); - int remainder = (int) Arith.remainder(siteId, 100); - int index = ((divides - 1) * 50) + remainder; -// System.out.print(siteId + " 浠诲姟鍦板潃 锛� " + index*2); -// System.out.print(" 鐩爣鍦板潃 锛� " + (index*2+200) ); - System.out.println(siteId + " 鐘舵�� 锛� " + (index*2) ); - } - } + public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ + add(2001);add(2002);add(2101);add(2102);add(2301);add(2302); + add(2303);add(2304);add(2305);add(2306);add(2003);add(2004);add(2005); + add(2006);add(2103);add(2104);add(2105);add(2106);add(2107); + }}; + + public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{ + add(5001);add(5002); + }}; + + public static final ArrayList<Integer> staNos4 = new ArrayList<Integer>() {{ + add(4007); + }}; + + public static final ArrayList<Integer> staNos5 = new ArrayList<Integer>() {{ + add(4016); + }}; + + public static final ArrayList<Integer> staNos6 = new ArrayList<Integer>() {{ + add(2007);add(2008);add(2009);add(2010);add(2011);add(2012);add(2013); + add(2108);add(2109);add(2110);add(2111);add(2112);add(2113);add(2114); + add(2401);add(2402);add(2403); + }}; + public static final ArrayList<Integer> staNos7 = new ArrayList<Integer>() {{ + add(3001);add(3002);add(3003);add(3004);add(3005);add(3006);add(3007); + add(3008);add(3009);add(3010);add(3011);add(3012); + }}; + + + public static final ArrayList<Integer> writeStaNos1 = new ArrayList<Integer>() {{ + 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); + }}; + + public static final ArrayList<Integer> writeStaNos2 = new ArrayList<Integer>() {{ + add(2001);add(2002);add(2101);add(2102);add(2301);add(2302); + add(2303);add(2304);add(2305);add(2306);add(2003);add(2004);add(2005); + add(2006);add(2103);add(2104);add(2105);add(2106);add(2107); + }}; + + public static final ArrayList<Integer> writeStaNos3 = new ArrayList<Integer>() {{ + add(5001);add(5002); + }}; + + public static final ArrayList<Integer> writeStaNos4 = new ArrayList<Integer>() {{ + add(4007); + }}; + + public static final ArrayList<Integer> writeStaNos5 = new ArrayList<Integer>() {{ + add(4016); + }}; + + public static final ArrayList<Integer> writeStaNos6 = new ArrayList<Integer>() {{ + add(2007);add(2008);add(2009);add(2010);add(2011);add(2012);add(2013); + add(2108);add(2109);add(2110);add(2111);add(2112);add(2113);add(2114); + add(2401);add(2402);add(2403); + }}; + public static final ArrayList<Integer> writeStaNos7 = new ArrayList<Integer>() {{ + add(3001);add(3002);add(3003);add(3004);add(3005);add(3006);add(3007); + add(3008);add(3009);add(3010);add(3011);add(3012); + }}; + + public static final ArrayList<Integer> errorStaNos1 = new ArrayList<Integer>() {{ + add(1002);add(1012); + }}; + + public static final ArrayList<Integer> errorStaNos2 = new ArrayList<Integer>() {{ + add(2107); + }}; + + public static final ArrayList<Integer> errorStaNos4 = new ArrayList<Integer>() {{ + add(3007);add(3012); + }}; + + public static final ArrayList<Integer> errorStaNos7 = new ArrayList<Integer>() {{ + add(3006);add(3007); + }}; + + /** + * 鏉$爜鏁伴噺 + */ + private int barcodeSize = 2; + + /** + * 鍏ュ嚭搴撴ā寮� + * 0锛氭湭鐭� + * 1锛氬叆搴撳惎鍔ㄤ腑 + * 2.鍏ュ簱妯″紡 + * 3.鍑哄簱鍚姩涓� 锛堜笉鑳界敓鎴愬叆搴撳伐浣滄。锛� + * 4.鍑哄簱妯″紡 + */ + public IoModeType ioModeOf1F1 = IoModeType.NONE; + public IoModeType ioModeOf1F2 = IoModeType.NONE; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; + } + private ArrayList<Integer> getStaNo() { + switch (slave.getId()) { + case 1: + return staNos1; + case 2: + return staNos2; + case 3: + return staNos3; + case 4: + return staNos4; + case 5: + return staNos5; + case 6: + return staNos6; + case 7: + return staNos7; + default: + throw new CoolException("鑾峰彇绔欑偣澶辫触锛�"); + } + } + + private ArrayList<Integer> getWriteStaNo() { + switch (slave.getId()) { + case 1: + return writeStaNos1; + case 2: + return writeStaNos2; + case 3: + return writeStaNos3; + case 4: + return writeStaNos4; + case 5: + return writeStaNos5; + case 6: + return writeStaNos6; + case 7: + return writeStaNos7; + default: + throw new CoolException("鑾峰彇绔欑偣澶辫触锛�"); + } + } + + private ArrayList<Integer> getErrorStaNo() { + switch (slave.getId()) { + case 1: + return errorStaNos1; + case 2: + return errorStaNos2; + case 4: + return errorStaNos4; + case 7: + return errorStaNos7; + default: + throw new CoolException("鑾峰彇绔欑偣澶辫触锛�"); + } } @Override @@ -74,18 +223,42 @@ switch (step) { // 璇绘暟鎹� case 1: - read(); + switch (slave.getId()){ + case 1: + case 6: + case 7: + read();break; + case 2: + read10();break; + case 3: + read30();break; + case 4: + read33();break; + case 5: + read55();break; + } + break; // 鍐欐暟鎹� ID+鐩爣绔� case 2: - write((StaProtocol)task.getData()); + switch (slave.getId()){ + case 1: + case 3: + case 6: + case 7: + write((StaProtocol)task.getData());break; + case 2: + write10((StaProtocol)task.getData());break; + + + } + break; default: break; } - // 蹇冭烦 - heartbeat(); +// heartbeat(); Thread.sleep(400); } catch (Exception e) { e.printStackTrace(); @@ -117,9 +290,11 @@ * 璇诲彇鐘舵�� ====> 鏁村潡plc */ private void read() throws InterruptedException { - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 350); + ArrayList<Integer> staNos = getStaNo(); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); if (result.IsSuccess) { - for (int i = 0; i < staNos.size(); i++) { + for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { @@ -127,22 +302,18 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } - int divides = (int) Arith.divides(0, siteId, 100); - int remainder = (int) Arith.remainder(siteId, 100); - int index = ((divides - 1) * 50) + remainder; - staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, index*2)); // 宸ヤ綔鍙� - staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, index*2 + 200)); // 鐩爣绔� + staProtocol.setSiteId(siteId); + staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8)); // 宸ヤ綔鍙� + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4 )); // 鐩爣绔� } } - Thread.sleep(100); - OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.500", (short) 106); + Thread.sleep(200); + OperateResultExOne<byte[]> result1 = null; + result1 = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); if (result1.IsSuccess) { - for (int i = 0; i < staNos.size(); i++) { + for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 - int divides = (int) Arith.divides(0, siteId, 100); - int remainder = (int) Arith.remainder(siteId, 100); - int index = ((divides - 1) * 100) + remainder; - boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, index, 1); + boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*8+6, 2); StaProtocol staProtocol = station.get(siteId); staProtocol.setAutoing(status[0]); // 鑷姩 staProtocol.setLoading(status[1]); // 鏈夌墿 @@ -152,6 +323,8 @@ staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� staProtocol.setHigh(status[6]); // 楂樺簱浣� staProtocol.setLow(status[7]); // 浣庡簱浣� + staProtocol.setEmptyOutPalletRequire(status[8]); // 绌烘墭鐩樺彲鍑洪渶姹備俊鍙� + staProtocol.setEmptyInPalletRequire(status[9]); // 绌烘墭鐩樺彲鍏ラ渶姹備俊鍙� if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); @@ -159,7 +332,80 @@ } } - if (result.IsSuccess && result1.IsSuccess) { + // 鏉$爜鎵弿鍣� + if(slave.getId() == 1) { + Thread.sleep(200); + OperateResultExOne<byte[]> result2 = null; + result2 = siemensS7Net.Read("DB101.208.0", (short) (barcodeSize * 8)); + if (result2.IsSuccess) { + for (int i = 0; i < barcodeSize; i++) { + String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); + if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); + } + } + } + } else if (slave.getId() == 7) { + Thread.sleep(200); + OperateResultExOne<byte[]> result2 = null; + result2 = siemensS7Net.Read("DB101.104.0", (short) (barcodeSize * 8)); + if (result2.IsSuccess) { + for (int i = 0; i < barcodeSize; i++) { + String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 4); + if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); + } + } + } + } + + if (slave.getId() ==1){ + //鎶ヨ淇℃伅 + Thread.sleep(200); + OperateResultExOne<byte[]> result3 = null; + result3 = siemensS7Net.Read("DB101.200.0", (short) (getErrorStaNo().size() * 4)); + if (result3.IsSuccess) { + for (int i = 0; i < getErrorStaNo().size(); i++) { + Integer siteId = getErrorStaNo().get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); +// staProtocol.setLocType1(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 搴撲綅楂樺害 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1); + 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]); + } + + } + } else if (slave.getId() == 7) { + //鎶ヨ淇℃伅 + Thread.sleep(200); + OperateResultExOne<byte[]> result3 = null; + result3 = siemensS7Net.Read("DB101.96.0", (short) (getErrorStaNo().size() * 4)); + if (result3.IsSuccess) { + for (int i = 0; i < getErrorStaNo().size(); i++) { + Integer siteId = getErrorStaNo().get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); +// staProtocol.setLocType1(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 搴撲綅楂樺害 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1); + 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 && !Cools.isEmpty(result1) && result1.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); @@ -170,18 +416,321 @@ StaProtocol staProtocol = station.get(siteId); basDevps.add(staProtocol.toSqlModel()); } + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); - if (!basDevpService.updateBatchById(basDevps)) { + if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); } } catch (Exception e) { + e.printStackTrace(); OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [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("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } 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("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + } + + private void read10() throws InterruptedException { + ArrayList<Integer> staNos = getStaNo(); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 12)); + if (result.IsSuccess) { + for (int i = 0; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 12)); // 宸ヤ綔鍙� + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*12 + 4 )); // 鐩爣绔� + staProtocol.setMatnr(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 12 + 6)); // 鐩爣绔� + } + } + Thread.sleep(200); + OperateResultExOne<byte[]> result1 = null; + result1 = siemensS7Net.Read("DB101.10", (short) (getStaNo().size() * 12)); + if (result1.IsSuccess) { + for (int i = 0; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*12, 2); + StaProtocol staProtocol = station.get(siteId); + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setOutEnable(status[3]);// 鍙嚭 + staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿 + staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� + staProtocol.setHigh(status[6]); // 楂樺簱浣� + staProtocol.setLow(status[7]); // 浣庡簱浣� + staProtocol.setEmptyOutPalletRequire(status[8]); // 绌烘墭鐩樺彲鍑洪渶姹備俊鍙� + staProtocol.setEmptyInPalletRequire(status[9]); // 绌烘墭鐩樺彲鍏ラ渶姹備俊鍙� + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + OperateResultExOne<byte[]> readBatch = siemensS7Net.Read("DB101.240", (short) 20); + if (readBatch.IsSuccess){ + String batch = siemensS7Net.getByteTransform().TransString(readBatch.Content, 0, 20, "UTF-8"); + for (int i = 0; i < 1; i++) { + StaProtocol staProtocol = station.get(2106); + staProtocol.setBatch(batch); + } + } + + OperateResultExOne<byte[]> readWeight = siemensS7Net.Read("DB101.260", (short) 2); + if (readWeight.IsSuccess){ + Short weight = siemensS7Net.getByteTransform().TransInt16(readWeight.Content,0); + for (int i = 0; i < 1; i++) { + StaProtocol staProtocol = station.get(2102); + staProtocol.setWeight(weight); + } + } + + + + // 鏉$爜鎵弿鍣� + if(slave.getId() == 2) { + Thread.sleep(200); + OperateResultExOne<byte[]> result2 = null; + result2 = siemensS7Net.Read("DB101.232.0", (short) (8)); + if (result2.IsSuccess) { + for (int i = 0; i < 1; i++) { + String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 3); + if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); + } + } + } + } + + + + if (result.IsSuccess && !Cools.isEmpty(result1) && result1.IsSuccess) { + + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + + // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + try { + List<BasDevp> basDevps = new ArrayList<>(); + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + basDevps.add(staProtocol.toSqlModel()); + } + + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { + throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [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("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + + } 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:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + } + + private void read30() throws InterruptedException { + ArrayList<Integer> staNos = getStaNo(); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); + + result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*4)); + if (result.IsSuccess) { + for (int i = 0; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); + short count = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); + + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setOutEnable(status[3]);// 鍙嚭 + staProtocol.setForce(status[4]); + staProtocol.setAmount(count); + staProtocol.setLow(true); + + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + if (result.IsSuccess) { + + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + + // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + try { + List<BasDevp> basDevps = new ArrayList<>(); + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + basDevps.add(staProtocol.toSqlModel()); + } + + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { + throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [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("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + + } 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:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + } + + private void read33() throws InterruptedException { + ArrayList<Integer> staNos = getStaNo(); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); + + result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*30)); + if (result.IsSuccess) { + for (int i = 0; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); + short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); + Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 4); + short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 8); + String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+10, 20, "UTF-8"); + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setEmptyOutPalletRequire(status[3]); + staProtocol.setMatnr(matnr); + staProtocol.setTongType(tongType); + staProtocol.setBatch(batch); + staProtocol.setAmount(amount); + staProtocol.setLow(true); + + + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + if (result.IsSuccess) { + + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + + // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + try { + List<BasDevp> basDevps = new ArrayList<>(); + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + basDevps.add(staProtocol.toSqlModel()); + } + + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { + throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [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("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + + } 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:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + } + + private void read55() throws InterruptedException { + ArrayList<Integer> staNos = getStaNo(); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); + + result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*28)); + if (result.IsSuccess) { + for (int i = 0; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); +// short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); + Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 2); + short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 6); + String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+8, 20, "UTF-8"); + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setEmptyOutPalletRequire(status[3]); + staProtocol.setMatnr(matnr); + staProtocol.setAmount(amount); + staProtocol.setBatch(batch); + staProtocol.setLow(true); + + + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + if (result.IsSuccess) { + + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + + // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + try { + List<BasDevp> basDevps = new ArrayList<>(); + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + basDevps.add(staProtocol.toSqlModel()); + } + + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { + throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [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("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + + } 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:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } @@ -192,14 +741,39 @@ if (null == staProtocol) { return; } - int divides = (int) Arith.divides(0, staProtocol.getSiteId(), 100); - int remainder = (int) Arith.remainder(staProtocol.getSiteId(), 100); - int index = ((divides - 1) * 50) + remainder; + ArrayList<Integer> staNos = getWriteStaNo(); + int index = staNos.indexOf(staProtocol.getSiteId()); + OperateResult write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo().intValue()); // 宸ヤ綔鍙� + Thread.sleep(500); + OperateResult write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo()); // 鐩爣绔� - OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙� - Thread.sleep(300); - OperateResult write1 = siemensS7Net.Write("DB100." + (index*2 + 200), staProtocol.getStaNo()); // 鐩爣绔� if (!write.IsSuccess || !write1.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)); + } + } + + /** + * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� + */ + private void write10(StaProtocol staProtocol) throws InterruptedException { + if (null == staProtocol) { + return; + } + ArrayList<Integer> staNos = getWriteStaNo(); + int index = staNos.indexOf(staProtocol.getSiteId()); + OperateResult write = siemensS7Net.Write("DB100." + index*10, staProtocol.getWorkNo().intValue()); // 宸ヤ綔鍙� + OperateResult write1 = siemensS7Net.Write("DB100." + (index*10+4), staProtocol.getStaNo()); // 鐩爣绔� + OperateResult write2 = siemensS7Net.Write("DB100." + (index*10+6), staProtocol.getMatnr()); // 鐩爣绔� + + if (!write.IsSuccess || !write1.IsSuccess || !write2.IsSuccess) { staProtocol = station.get(staProtocol.getSiteId()); if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { staProtocol.setPakMk(true); @@ -243,6 +817,19 @@ siemensS7Net.ConnectClose(); } + 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++) { +//// 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); + } + // public static void main(String[] args) throws Exception { // DevpSlave slave = new DevpSlave(); // slave.setIp("192.168.2.125"); -- Gitblit v1.9.1