From 038634540d95d4a5787b80a1fbab131df4d99823 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期一, 13 四月 2026 17:11:09 +0800
Subject: [PATCH] 1
---
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java | 72 ++++++++++++++++++++++++++++++++++++
1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java
index a677866..1db417c 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java
@@ -5,7 +5,9 @@
import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.conveyor.core.constant.PlcConstant;
+import com.zy.acs.conveyor.core.constant.SafeSignalField;
import com.zy.acs.conveyor.core.constant.TaskField;
+import com.zy.acs.conveyor.core.model.SafeSignal;
import com.zy.acs.conveyor.core.model.StaProtocol;
import com.zy.acs.conveyor.core.properties.DevpSlave;
import com.zy.acs.conveyor.core.properties.OutputQueue;
@@ -36,7 +38,77 @@
public void read(StaProtocol staProtocol, SiemensS7Net siemensS7Net) {
}
+ public void writeSafe(StaProtocol staProtocol) throws InterruptedException {
+ if (staProtocol == null) {
+ log.warn("鍐欏叆鏁版嵁涓虹┖锛岃烦杩� [id:{}]", JSON.toJSONString(staProtocol));
+ return;
+ }
+ SiemensS7Net siemensS7Net = devpS7Service.get(staProtocol.getPlcId());
+ if (siemensS7Net == null) {
+ log.error("PLC鏈繛鎺ワ紝鏃犳硶鍐欏叆 [id:{}]", JSON.toJSONString(staProtocol));
+ return;
+ }
+
+ List<DevpSlave> devp = slaveProperties.getDevp();
+ DevpSlave devpSlave = devp.stream().filter(slave -> slave.getId().equals(staProtocol.getPlcId())).findFirst().orElse(null);
+ if (devpSlave == null) {
+ log.error("PLC鏈厤缃紝鏃犳硶鍐欏叆 [id:{}]", JSON.toJSONString(staProtocol));
+ return;
+ }
+ int index = devpSlave.getStaNos().indexOf(staProtocol.getSiteId());
+ if (index < 0) {
+ log.error("绔欑偣缂栧彿涓嶅瓨鍦ㄤ簬閰嶇疆涓� [id:{}] [siteId:{}]", staProtocol.getPlcId(), staProtocol.getSiteId());
+ return;
+ }
+ SafeSignal safeSignal = staProtocol.getSafeSignal();
+
+ int baseOffset = SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getOffset() + safeSignal.getIndex() * SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getByteLength();
+ String workNoAddr = TaskField.TASK_NUMBER.getAddressPattern() + PlcConstant.ADDRESS_CONCATENATION
+ + (baseOffset + TaskField.TASK_NUMBER.getOffset());
+ String destStaAddr = TaskField.DEST_STATION.getAddressPattern() + PlcConstant.ADDRESS_CONCATENATION
+ + (baseOffset + TaskField.DEST_STATION.getOffset());
+
+ // 浠诲姟涓嬪彂閲嶈瘯鏈哄埗
+ int writeCount = 0;
+ boolean success = false;
+
+ while (writeCount < WRITE_RETRY_MAX) {
+ OperateResult writeResult = siemensS7Net.Write(workNoAddr, staProtocol.getWorkNo());
+ Thread.sleep(WRITE_RETRY_INTERVAL_MS);
+
+ OperateResult writeResult1 = siemensS7Net.Write(destStaAddr, staProtocol.getStaNo().shortValue());
+
+ if (writeResult.IsSuccess && writeResult1.IsSuccess) {
+ log.info("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛 [id:{}] [siteId:{}] [workNo:{}] [destSta:{}] [retry:{}]",
+ staProtocol.getPlcId(), staProtocol.getSiteId(), staProtocol.getWorkNo(),
+ staProtocol.getStaNo(), writeCount);
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鎴愬姛銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}",
+ staProtocol.getPlcId(), JSON.toJSON(staProtocol)));
+ success = true;
+ break;
+ }
+
+ writeCount++;
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触 [id:{}] [siteId:{}] [retry:{}] [workErr:{}] [destErr:{}]",
+ staProtocol.getPlcId(), staProtocol.getSiteId(), writeCount,
+ writeResult.Message, writeResult1.Message);
+
+ if (writeCount < WRITE_RETRY_MAX) {
+ Thread.sleep(WRITE_RETRY_INTERVAL_MS);
+ }
+ }
+
+ if (!success) {
+ String errorMsg = MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}",
+ staProtocol.getPlcId(), JSON.toJSON(staProtocol));
+ OutputQueue.DEVP.offer(errorMsg);
+ News.error("SiemensDevp - 4 - 鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}",
+ staProtocol.getPlcId(), JSON.toJSON(staProtocol));
+ log.error(errorMsg);
+ }
+
+ }
public void write(StaProtocol staProtocol) throws InterruptedException {
if (staProtocol == null) {
--
Gitblit v1.9.1