From 14763d895151f3ddad09906f2233057b8b967881 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 19 十二月 2025 17:06:18 +0800
Subject: [PATCH] 添加plc通讯协议工厂,支持后续多种plc协议
---
mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java | 73 +++++++++++++++++++++++++++++++-----
1 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java b/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
index 4170ef4..4d25383 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
@@ -39,16 +39,18 @@
@Resource
private PlcDynamicDataService plcDynamicDataService;
+ @Resource
+ private com.mes.plc.factory.PlcClientFactory plcClientFactory;
+
private final ObjectMapper objectMapper = new ObjectMapper();
private static final TypeReference<Map<String, Object>> MAP_TYPE = new TypeReference<Map<String, Object>>() {};
private static final int ON = 1;
private static final int OFF = 0;
- // 缂撳瓨涓嶅悓璁惧鐨凷7Serializer瀹炰緥
+ // 缂撳瓨涓嶅悓璁惧鐨凷7Serializer瀹炰緥锛堜繚鎸佸吋瀹癸紝閫愭杩佺Щ锛�
private final ConcurrentMap<String, EnhancedS7Serializer> serializerCache = new ConcurrentHashMap<>();
- // ==================== 鍩轰簬DeviceConfig鐨勬柊API锛堟帹鑽愪娇鐢級 ====================
/**
* 鏍规嵁璁惧ID妯℃嫙PLC鍙戦�佽姹傚瓧
@@ -63,16 +65,65 @@
return false;
}
try {
+ // 灏濊瘯浣跨敤鏂扮殑PLC瀹㈡埛绔伐鍘�
+ com.mes.plc.client.PlcClient plcClient = plcClientFactory.getClient(device);
+ if (plcClient != null) {
+ // 浣跨敤鏂扮殑PLC瀹㈡埛绔鍙栨暟鎹�
+ Map<String, Object> currentData = plcClient.readAllData();
+ if (currentData != null && !currentData.isEmpty()) {
+ // 妫�鏌ヨ仈鏈虹姸鎬�
+ Integer onlineState = parseInteger(currentData.get("onlineState"));
+ if (onlineState != null && onlineState == OFF) {
+ log.info("褰撳墠PLC鑱旀満妯″紡涓�0锛屽仠姝㈣仈鏈�: deviceId={}", deviceId);
+ return false;
+ }
+
+ // 妫�鏌ユ眹鎶ュ瓧锛屽鏋滀负1鍒欓噸缃负0
+ Integer plcReport = parseInteger(currentData.get("plcReport"));
+ if (plcReport != null && plcReport == ON) {
+ log.info("褰撳墠涓婄墖PLC姹囨姤瀛椾负1锛岄噸缃负0: deviceId={}", deviceId);
+ currentData.put("plcReport", OFF);
+ }
+
+ // 璁剧疆璇锋眰瀛椾负1
+ currentData.put("plcRequest", ON);
+
+ // 浣跨敤鏂扮殑PLC瀹㈡埛绔啓鍏ユ暟鎹�
+ boolean success = plcClient.writeData(currentData);
+ if (success) {
+ log.info("妯℃嫙PLC鍙戦�佽姹傚瓧鎴愬姛锛歱lcRequest=1, deviceId={}", deviceId);
+ return true;
+ }
+ }
+ }
+
+ // 濡傛灉鏂板鎴风澶辫触锛屽洖閫�鍒版棫瀹炵幇锛堜繚鎸佸吋瀹癸級
+ log.warn("鏂癙LC瀹㈡埛绔け璐ワ紝鍥為��鍒版棫瀹炵幇: deviceId={}", deviceId);
+ return simulatePlcRequestByDeviceLegacy(device);
+ } catch (Exception e) {
+ log.error("鏍规嵁璁惧妯℃嫙PLC璇锋眰瀛楀け璐�: deviceId={}", deviceId, e);
+ return false;
+ }
+ }
+
+ /**
+ * 鏃х増瀹炵幇锛氭牴鎹澶嘔D妯℃嫙PLC鍙戦�佽姹傚瓧
+ *
+ * @param device 璁惧閰嶇疆
+ * @return 鏄惁鎴愬姛
+ */
+ private boolean simulatePlcRequestByDeviceLegacy(DeviceConfig device) {
+ try {
EnhancedS7Serializer s7Serializer = getSerializerForDevice(device);
if (s7Serializer == null) {
- log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", deviceId);
+ log.error("鑾峰彇S7Serializer澶辫触: deviceId={}", device.getId());
return false;
}
// 浣跨敤PlcDynamicDataService璇诲彇鏁版嵁锛堟敮鎸乤ddressMapping锛�
Map<String, Object> currentData = plcDynamicDataService.readAllPlcData(device, s7Serializer);
if (currentData == null || currentData.isEmpty()) {
- log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥炵┖: deviceId={}", deviceId);
+ log.error("璇诲彇PLC鏁版嵁澶辫触锛岃繑鍥炵┖: deviceId={}", device.getId());
return false;
}
@@ -89,13 +140,13 @@
onlineState = Integer.parseInt(strValue);
}
} catch (NumberFormatException e) {
- log.warn("瑙f瀽onlineState澶辫触: deviceId={}, value={}", deviceId, onlineStateObj, e);
+ log.warn("瑙f瀽onlineState澶辫触: deviceId={}, value={}", device.getId(), onlineStateObj, e);
}
}
}
if (onlineState != null && onlineState == OFF) {
- log.info("褰撳墠PLC鑱旀満妯″紡涓�0锛屽仠姝㈣仈鏈�: deviceId={}", deviceId);
+ log.info("褰撳墠PLC鑱旀満妯″紡涓�0锛屽仠姝㈣仈鏈�: deviceId={}", device.getId());
return false;
}
@@ -112,13 +163,13 @@
plcReport = Integer.parseInt(strValue);
}
} catch (NumberFormatException e) {
- log.warn("瑙f瀽plcReport澶辫触: deviceId={}, value={}", deviceId, plcReportObj, e);
+ log.warn("瑙f瀽plcReport澶辫触: deviceId={}, value={}", device.getId(), plcReportObj, e);
}
}
}
if (plcReport != null && plcReport == ON) {
- log.info("褰撳墠涓婄墖PLC姹囨姤瀛椾负1锛岄噸缃负0: deviceId={}", deviceId);
+ log.info("褰撳墠涓婄墖PLC姹囨姤瀛椾负1锛岄噸缃负0: deviceId={}", device.getId());
currentData.put("plcReport", OFF);
}
@@ -128,10 +179,10 @@
// 浣跨敤PlcDynamicDataService鍐欏叆鏁版嵁
plcDynamicDataService.writePlcData(device, currentData, s7Serializer);
- log.info("妯℃嫙PLC鍙戦�佽姹傚瓧鎴愬姛锛歱lcRequest=1, deviceId={}", deviceId);
+ log.info("妯℃嫙PLC鍙戦�佽姹傚瓧鎴愬姛锛堟棫鐗堬級锛歱lcRequest=1, deviceId={}", device.getId());
return true;
} catch (Exception e) {
- log.error("鏍规嵁璁惧妯℃嫙PLC璇锋眰瀛楀け璐�: deviceId={}", deviceId, e);
+ log.error("鏍规嵁璁惧妯℃嫙PLC璇锋眰瀛楀け璐ワ紙鏃х増锛�: deviceId={}", device.getId(), e);
return false;
}
}
@@ -329,7 +380,7 @@
EnhancedS7Serializer serializer = EnhancedS7Serializer.newInstance(s7Plc);
if (serializer == null) {
log.error("鍒涘缓EnhancedS7Serializer澶辫触: deviceId={}, plcIp={}, plcType={}",
- device.getId(), plcIp, plcType);
+ device.getId(), plcIp, plcType.name());
}
return serializer;
} catch (Exception e) {
--
Gitblit v1.8.0