From 116ab17ceb0c77aef99fa10b8a88fc055bb839f0 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期一, 23 六月 2025 19:35:53 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/SiemensDevpThread.java | 73 +++++++++++++++++++++++++++++++++++- 1 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index d731d3a..0fa8c85 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -24,6 +24,7 @@ import com.zy.core.enums.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; +import com.zy.core.model.protocol.Cycle; import com.zy.core.model.protocol.StaProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -132,7 +133,7 @@ break; // 鍐欐暟鎹� ID+鐩爣绔� case 4: - writeAgvOk((StaProtocol)task.getData()); + writeCycle((StaProtocol)task.getData()); read(); break; /* case 3: @@ -544,6 +545,57 @@ handleWriteFailure(staProtocol, writeFlag); } + private void writeCycle(StaProtocol staProtocol) throws InterruptedException { + if (staProtocol == null) { + return; + } + + ArrayList<Integer> staNos = getStaNo(); + int index = staNos.indexOf(staProtocol.getSiteId()); + + if (index == -1) { + log.error("绔欑偣缂栧彿 {} 涓嶅湪宸茬煡鍒楄〃涓紝鏃犳硶鍐欏叆浠诲姟锛�", staProtocol.getSiteId()); + return; + } + + int writeCount = 0; // 浠诲姟涓嬪彂灏濊瘯娆℃暟 + boolean writeFlag = false; // 浠诲姟涓嬪彂鎴愬姛鏍囪 + String plcAddressWorkNo = ""; + String plcAddressStaNo = "" ; + switch (staProtocol.getSiteId()){ + case 105: + plcAddressWorkNo = "DB73." + 0; + plcAddressStaNo = "DB73." + 4; + break; + case 106: + plcAddressWorkNo = "DB73." + 6; + plcAddressStaNo = "DB73." + (6 + 4); + break; + case 108: + plcAddressWorkNo = "DB73." + 2 * 6; + plcAddressStaNo = "DB73." + (2 * 6 + 4); + break; + case 110: + plcAddressWorkNo = "DB73." + 3 * 6; + plcAddressStaNo = "DB73." + (3 * 6 + 4); + break; + case 112: + plcAddressWorkNo = "DB73." + 4 * 6; + plcAddressStaNo = "DB73." + (4 * 6 + 4); + break; + } + + + // **鍐欏叆鏂颁换鍔�** + if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) { + writeFlag = true; + log.info("杈撻�佺嚎鍛戒护鍐欏叆鎴愬姛锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + + // **鍐欏叆澶辫触澶勭悊** + handleWriteFailure(staProtocol, writeFlag); + } + /** * 娓呴浂 PLC 鏁版嵁骞堕獙璇佹竻闆舵槸鍚︽垚鍔� */ @@ -569,8 +621,9 @@ * 鍐欏叆鏂颁换鍔″埌 PLC 骞堕獙璇佹槸鍚︽垚鍔� */ private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, StaProtocol staProtocol) throws InterruptedException { - OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, staProtocol.getWorkNo().intValue()); OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, staProtocol.getStaNo()); + + OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, staProtocol.getWorkNo().intValue()); if (writeResult1.IsSuccess && writeResult2.IsSuccess) { Thread.sleep(200); // 绛夊緟 PLC 璇嗗埆鏂板�� @@ -584,6 +637,22 @@ return false; } + private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, Cycle cycle) throws InterruptedException { + OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, cycle.getWorkNo().intValue()); + OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, cycle.getStaNo()); + + if (writeResult1.IsSuccess && writeResult2.IsSuccess) { + Thread.sleep(200); // 绛夊緟 PLC 璇嗗埆鏂板�� + OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); + if (readResult.IsSuccess) { + int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); + short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); + return workNo == cycle.getWorkNo().intValue() && staNo == cycle.getStaNo(); + } + } + return false; + } + /** * 澶勭悊鍐欏叆澶辫触鐨勬儏鍐� */ -- Gitblit v1.9.1