From a1e94379b115721b2e604070dc48063b8016f72f Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期二, 21 十月 2025 19:32:59 +0800 Subject: [PATCH] 侧面输送线出库码盘信息对接 --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 226 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 196 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index 8a038ff..baec76c 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -159,6 +159,11 @@ write((StaProtocol) task.getData()); read(); break; + // 鍑哄叆搴撳啓鐮佺洏淇℃伅 + case 3: + write3((StaProtocol) task.getData()); + read(); + break; default: break; } @@ -197,6 +202,7 @@ } } + @Override public boolean connect() { boolean result = false; @@ -223,6 +229,8 @@ * 璇诲彇鐘舵�� ====> 鏁村潡plc */ private void read() throws InterruptedException { + // 鏇存柊鍏ュ嚭搴撴ā寮� + updateIoMode(); ArrayList<Integer> staNos = getStaNo(); int staNoSize = staNos.size(); @@ -314,6 +322,12 @@ } StaProtocol staProtocol = station.get(barcodeSite2.get(i)); if (staProtocol != null) { + while (iterator.hasNext()) { + String next = iterator.next(); + if (next.length() < 7 || next.length() > 10 || !next.matches("[0-9]*")) { + iterator.remove(); + } + } staProtocol.setMatIdList(barcodeList); } } @@ -406,11 +420,11 @@ } // 璇绘闈㈡晠闅滃弽棣� - OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (16 * 4)); + OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.2340.0", (short) (16 * 2)); if (resultErr.IsSuccess) { for (int i = 0; i < 16; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 - boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1); + boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 2, 2); StaProtocol staProtocol = station.get(siteId); staProtocol.setBreakerErr(status[0]); staProtocol.setInfraredErr(status[1]); @@ -420,16 +434,20 @@ staProtocol.setInverterErr(status[5]); staProtocol.setContactErr(status[6]); staProtocol.setUpcontactErr(status[7]); - + staProtocol.setPushTheEnvelopeErr(status[8]); + staProtocol.setRaiseTheLowerLimitErr(status[9]); + staProtocol.setLeftProtectionTriggersErr(status[10]); + staProtocol.setRightProtectionTriggersErr(status[11]); + staProtocol.setGratingBlockingErr(status[12]); } } // 璇讳晶闈㈡晠闅滃弽棣� - OperateResultExOne<byte[]> resultErrCM = siemensS7Net.Read("DB101.2540.0", (short) (12 * 4)); + OperateResultExOne<byte[]> resultErrCM = siemensS7Net.Read("DB101.2540.0", (short) (12 * 2)); if (resultErrCM.IsSuccess) { for (int i = 16; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 - boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErrCM.Content, (i - 16) * 4, 1); + boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErrCM.Content, (i - 16) * 2, 1); StaProtocol staProtocol = station.get(siteId); staProtocol.setBreakerErr(status[0]); staProtocol.setInfraredErr(status[1]); @@ -524,10 +542,13 @@ if (index < 16) { workNoAddress = "DB100." + index * 4; staNoAddress = "DB100." + (index * 4 + 2); - heightAddress = "DB104." + (index * 4); } else { workNoAddress = "DB100." + (400 + (index - 16) * 4); staNoAddress = "DB100." + (400 + (index - 16) * 4 + 2); + } + int i = barcodeSite2.indexOf(staProtocol.getSiteId()); + if (i != -1) { + heightAddress = "DB104." + (i * 2); } OperateResult writeResult; @@ -536,18 +557,49 @@ //浠诲姟涓嬪彂鎴愬姛鏍囪瘑 boolean writeFlag = false; while (writeCount < 5) { - OperateResult writeResult1 = siemensS7Net.Write(workNoAddress, staProtocol.getWorkNo()); // 宸ヤ綔鍙� - OperateResult writeResult2 = siemensS7Net.Write(staNoAddress, staProtocol.getStaNo()); // 鐩爣绔� if (!Cools.isEmpty(staProtocol.getHeight()) && heightAddress != null) { - OperateResult writeResult3 = siemensS7Net.Write(heightAddress, staProtocol.getHeight()); // 鐩爣绔� + OperateResult writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + log.info("鍐欏叆楂樺害鍦板潃锛歿},{}", heightAddress, writeResult3); if (!writeResult3.IsSuccess) { //fangzhi xierukushibai,jiu duoxiejici,meixunhuan - writeResult3 = siemensS7Net.Write(heightAddress, staProtocol.getHeight()); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); if (!writeResult3.IsSuccess) { - writeResult3 = siemensS7Net.Write(heightAddress, staProtocol.getHeight()); // 鐩爣绔� + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); // 鐩爣绔� } } } + // 渚ч潰鍑哄簱锛岀粰杈撻�佺嚎鍐欐潯鐮� + Short staNo = staProtocol.getStaNo(); + String barcode = staProtocol.getBarcode(); + if (staNo == 203 || staNo == 207 || staNo == 212) { + if (Cools.isEmpty(barcode)) { + log.error("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛屾潯鐮佸�间负绌猴紝浠诲姟鍙凤細{}", staNo, staProtocol.getWorkNo()); + } else { + + String[] split = barcode.split("#"); + int offset = 48 + (staNo - 201) * 24; + byte[] bytes = new byte[(split.length + 1) * 6]; + for (int j = 0, k = 0; j < split.length; j++) { + String s = split[j]; + for (int m = 0; m < s.length(); m++) { + bytes[k++] = (byte) s.charAt(m); + } + } + + OperateResult writeResult4 = siemensS7Net.Write("DB79" + offset, bytes); + if (writeResult4.IsSuccess) { + log.info("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}鎴愬姛", staNo, barcode); + } else { + log.error("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}澶辫触", staNo, barcode); + } + } + } + + OperateResult writeResult1 = siemensS7Net.Write(workNoAddress, staProtocol.getWorkNo()); // 宸ヤ綔鍙� + OperateResult writeResult2 = siemensS7Net.Write(staNoAddress, staProtocol.getStaNo()); // 鐩爣绔� if (writeResult1.IsSuccess && writeResult2.IsSuccess) { Thread.sleep(200); OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 2); @@ -606,6 +658,48 @@ } + private void write3(StaProtocol staProtocol){ + + int lx = 0,mp = 0,lev = 0; + + switch (staProtocol.getSiteId()) { + case 205: lx = 16;mp = 18;lev=344;break; + case 207: lx = 24;mp = 26;lev=348;break; + case 210: lx = 36;mp = 38;lev=354;break; + case 212: lx = 44;mp = 46;lev=358;break; + default: + log.error("鍐欑爜鐩樹俊鎭珯鐐规湁璇細{}" , staProtocol.getSiteId()); + return; + } + + String addressPre = "DB79."; + + //浠诲姟涓嬪彂娆℃暟 + int writeCount = 0; + //浠诲姟涓嬪彂鎴愬姛鏍囪瘑 + boolean writeFlag = false; + while (writeCount < 5) { + OperateResult writeResult1 = siemensS7Net.Write(addressPre + lx, staProtocol.getLx()); // 宸ヨ绫诲瀷 + OperateResult writeResult2 = siemensS7Net.Write(addressPre + mp, staProtocol.getMp()); // 鏄惁鐮佺洏 + OperateResult writeResult3 = siemensS7Net.Write(addressPre + lev, staProtocol.getLev()); // 鐮佺洏灞傛暟 + if (writeResult1.IsSuccess && writeResult2.IsSuccess && writeResult3.IsSuccess) { + writeFlag = true; + log.info("鐮佺洏淇℃伅鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + break; + } else { + writeCount++; + log.error("鐮佺洏淇℃伅鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } + + //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡 + if (!writeFlag) { + //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒� + MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol)); + log.error("鐮佺洏淇℃伅鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ラ噸鏂版帹閫侀槦鍒椼�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); + } + } + // /** // * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� // */ @@ -619,9 +713,10 @@ // array[1] = staProtocol.getStaNo(); // OperateResult write = siemensS7Net.Write("DB100." + index*4, array); // -//// OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙� -//// Thread.sleep(500); -//// OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 鐩爣绔� + + /// / 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()); @@ -641,7 +736,6 @@ // } // } // } - private void write2(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; @@ -729,27 +823,53 @@ // 鏇存柊鍏ュ嚭搴撴ā寮� private void updateIoMode() throws InterruptedException { if (slave.getId() == 1 && this.ioModeOf1F1 != null) { - if (!siemensS7Net.Write("DB4.2", this.ioModeOf1F1.id).IsSuccess) { - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎21F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={2}", slave.getId())); + if (!siemensS7Net.Write("DB105.0", this.ioModeOf1F1.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎21F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F2 != null) { + if (!siemensS7Net.Write("DB105.2", this.ioModeOf1F2.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F3 != null) { + if (!siemensS7Net.Write("DB105.4", this.ioModeOf1F3.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F4 != null) { + if (!siemensS7Net.Write("DB105.6", this.ioModeOf1F4.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F4鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F5 != null) { + if (!siemensS7Net.Write("DB105.8", this.ioModeOf1F5.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F5鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + + + if (slave.getId() == 1 && this.ioModeOf2F1 != null) { + if (!siemensS7Net.Write("DB105.10", this.ioModeOf2F1.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); log.error("鍐欏叆杈撻�佺嚎2F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); } } - if (slave.getId() == 1 && this.ioModeOf1F2 != null) { - if (!siemensS7Net.Write("DB4.4", this.ioModeOf1F2.id).IsSuccess) { - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={3}", slave.getId())); + if (slave.getId() == 1 && this.ioModeOf2F2 != null) { + if (!siemensS7Net.Write("DB105.12", this.ioModeOf2F2.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); log.error("鍐欏叆杈撻�佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); } } - if (slave.getId() == 1 && this.ioModeOf1F2 != null) { - if (!siemensS7Net.Write("DB4.2", this.ioModeOf1F2.id).IsSuccess) { - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={2}", slave.getId())); - log.error("鍐欏叆杈撻�佺嚎3F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); - } - } - if (slave.getId() == 1 && this.ioModeOf1F2 != null) { - if (!siemensS7Net.Write("DB4.4", this.ioModeOf1F2.id).IsSuccess) { - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={3}", slave.getId())); - log.error("鍐欏叆杈撻�佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + if (slave.getId() == 1 && this.ioModeOf2F3 != null) { + if (!siemensS7Net.Write("DB105.14", this.ioModeOf2F3.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎2F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); } } } @@ -770,6 +890,52 @@ public void close() { siemensS7Net.ConnectClose(); } + public static void main(String[] args) throws Exception { + DevpSlave slave = new DevpSlave(); + slave.setIp("10.49.210.41"); +// SiemensDevpThread devpThread = new SiemensDevpThread(slave); +// devpThread.connect(); + SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); + siemensS7Net.setRack(slave.getRack().byteValue()); + siemensS7Net.setSlot(slave.getSlot().byteValue()); + OperateResult connect = siemensS7Net.ConnectServer(); + // 渚ч潰鍑哄簱锛岀粰杈撻�佺嚎鍐欐潯鐮� + Short staNo = 212; + String barcode = "800001#123456#811112#811113"; + String[] split = barcode.split("#"); + int offset = 48 + (staNo - 201) * 24; + byte[] bytes = new byte[(split.length + 1) * 6]; + for (int j = 0, k = 0; j < split.length; j++) { + String s = split[j]; + for (int m = 0; m < s.length(); m++) { + bytes[k++] = (byte) s.charAt(m); + } + } + + OperateResult writeResult4 = siemensS7Net.Write("DB79" + offset, bytes); + if (writeResult4.IsSuccess) { + log.info("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}鎴愬姛", staNo, barcode); + } else { + log.error("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}澶辫触", staNo, barcode); + } + +// devpThread.write2(0); +// devpThread.read(); +// // 鍐� +// StaProtocol staProtocol = devpThread.getStation().get(1); +// staProtocol.setWorkNo((short) 232); +// staProtocol.setStaNo((short) 6); +// staProtocol.setAutoing(true); +// staProtocol.setEmptyMk(true); +// staProtocol.setInEnable(true); +// devpThread.write(staProtocol); +// System.out.println("----------------------------------------"); +// // 璇� +// devpThread.read(); +// System.out.println(JSON.toJSONString(devpThread.station)); + + } + } -- Gitblit v1.9.1