From 0dd91ac18d829df0166d72ad33d66abc81fe54fa Mon Sep 17 00:00:00 2001 From: Penknife Date: Mon, 18 Aug 2025 15:28:24 +0800 Subject: [PATCH] =?UTF-8?q?feat():OPC=20UA=20=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OPC/MessageReceiveSchedule.java} | 25 ++++++----- .../comm/OPC/MessageSubscriptionRunner.java | 44 +++++++++++++++++++ .../business/comm/OPC/OpcMessageSend.java | 33 ++++++++++++++ .../RabbitMQ/RabbitQueueListener.java | 2 +- .../business/controller/TrackController.java | 2 +- .../fizz/business/domain/msg/PdiSetup.java | 12 +++++ .../service/manager/OpcMessageIdsManager.java | 43 ++++++++++++++++++ 7 files changed, 148 insertions(+), 13 deletions(-) rename business/src/main/java/com/fizz/business/{scheduled/LineMeasureSchedule.java => comm/OPC/MessageReceiveSchedule.java} (50%) create mode 100644 business/src/main/java/com/fizz/business/comm/OPC/MessageSubscriptionRunner.java create mode 100644 business/src/main/java/com/fizz/business/comm/OPC/OpcMessageSend.java rename business/src/main/java/com/fizz/business/{mq => comm}/RabbitMQ/RabbitQueueListener.java (98%) create mode 100644 business/src/main/java/com/fizz/business/domain/msg/PdiSetup.java create mode 100644 business/src/main/java/com/fizz/business/service/manager/OpcMessageIdsManager.java diff --git a/business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java b/business/src/main/java/com/fizz/business/comm/OPC/MessageReceiveSchedule.java similarity index 50% rename from business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java rename to business/src/main/java/com/fizz/business/comm/OPC/MessageReceiveSchedule.java index 454c960..48c1753 100644 --- a/business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java +++ b/business/src/main/java/com/fizz/business/comm/OPC/MessageReceiveSchedule.java @@ -1,33 +1,36 @@ -package com.fizz.business.scheduled; +package com.fizz.business.comm.OPC; -import cn.hutool.json.JSONUtil; +import com.fizz.business.constants.enums.OpcMessageType; +import com.fizz.business.domain.msg.AppMeasureMessage; +import com.fizz.business.scheduled.BaseSchedule; +import com.fizz.business.service.hanle.OpcReceiverHandler; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; -import jdk.nashorn.internal.runtime.Debug; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Map; @Slf4j //@Component -@AllArgsConstructor -public class LineMeasureSchedule extends BaseSchedule{ +public class MessageReceiveSchedule extends BaseSchedule { @Resource MiloService miloService; + + @Resource + OpcReceiverHandler opcReceiverHandler; @Scheduled(fixedDelay = 200) public void L1L2LineMeasure() { try { ReadWriteEntity node = miloService.readFromOpcUa("ns=2;s=通道 2.LockStautsRead.lockStauts1"); log.debug(node.toString()); - node.getValue(); + + AppMeasureMessage msg = new AppMeasureMessage(); + opcReceiverHandler.onMessageReceived(OpcMessageType.APP_MEASURE,msg); } catch (Exception e) { - throw new RuntimeException(e); + log.error("读取测量值失败:{0}",e.getMessage()); } } -} +} \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/comm/OPC/MessageSubscriptionRunner.java b/business/src/main/java/com/fizz/business/comm/OPC/MessageSubscriptionRunner.java new file mode 100644 index 0000000..9b2ae7c --- /dev/null +++ b/business/src/main/java/com/fizz/business/comm/OPC/MessageSubscriptionRunner.java @@ -0,0 +1,44 @@ +package com.fizz.business.comm.OPC; + +import com.fizz.business.constants.enums.OpcMessageType; +import com.fizz.business.domain.msg.AppMeasureMessage; +import com.kangaroohy.milo.model.ReadWriteEntity; +import com.kangaroohy.milo.service.MiloService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +//@Component +@Slf4j +public class MessageSubscriptionRunner implements ApplicationRunner { + + @Resource + private MiloService miloService; + + @Override + public void run(ApplicationArguments args) { + subEntryMove(); + } + + private void subEntryMove() { + + try { + List ids = Lists.newArrayList(); + ids.add("GA.T1.T1001R"); + ids.add("GA.T1.String"); + miloService.subscriptionFromOpcUa(ids, (id, value) -> { + log.info("subscription 点位:{} 订阅到消息:{}", id, value); + }); + } catch (Exception e) { + log.error("EntryMove 订阅失败:{0}",e.getMessage()); + } + + + } +} \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/comm/OPC/OpcMessageSend.java b/business/src/main/java/com/fizz/business/comm/OPC/OpcMessageSend.java new file mode 100644 index 0000000..b573116 --- /dev/null +++ b/business/src/main/java/com/fizz/business/comm/OPC/OpcMessageSend.java @@ -0,0 +1,33 @@ +package com.fizz.business.comm.OPC; + +import com.fizz.business.domain.msg.PdiSetup; +import com.kangaroohy.milo.model.ReadWriteEntity; +import com.kangaroohy.milo.service.MiloService; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.compress.utils.Lists; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +@Service +@Log4j2 +public class OpcMessageSend { + + @Resource + private MiloService miloService; + + private void sendPdiSetup(PdiSetup pdiSetup) throws Exception { + try { + List entities = new ArrayList<>(); + miloService.writeToOpcUa(entities); + + + } catch (Exception e) { + log.error("发送设定失败:{0}",e.getMessage()); + } + + + } +} diff --git a/business/src/main/java/com/fizz/business/mq/RabbitMQ/RabbitQueueListener.java b/business/src/main/java/com/fizz/business/comm/RabbitMQ/RabbitQueueListener.java similarity index 98% rename from business/src/main/java/com/fizz/business/mq/RabbitMQ/RabbitQueueListener.java rename to business/src/main/java/com/fizz/business/comm/RabbitMQ/RabbitQueueListener.java index ca129e8..53a7484 100644 --- a/business/src/main/java/com/fizz/business/mq/RabbitMQ/RabbitQueueListener.java +++ b/business/src/main/java/com/fizz/business/comm/RabbitMQ/RabbitQueueListener.java @@ -1,4 +1,4 @@ -package com.fizz.business.mq.RabbitMQ; +package com.fizz.business.comm.RabbitMQ; import cn.hutool.json.JSONUtil; import com.fizz.business.constants.CommonConstants; diff --git a/business/src/main/java/com/fizz/business/controller/TrackController.java b/business/src/main/java/com/fizz/business/controller/TrackController.java index 96b7201..7816819 100644 --- a/business/src/main/java/com/fizz/business/controller/TrackController.java +++ b/business/src/main/java/com/fizz/business/controller/TrackController.java @@ -2,7 +2,7 @@ package com.fizz.business.controller; import com.fizz.business.form.WebOperateMatForm; -import com.fizz.business.mq.RabbitMQ.RabbitQueueListener; +import com.fizz.business.comm.RabbitMQ.RabbitQueueListener; import com.fizz.business.service.TrackService; import com.ruoyi.common.core.domain.R; import io.swagger.v3.oas.annotations.Operation; diff --git a/business/src/main/java/com/fizz/business/domain/msg/PdiSetup.java b/business/src/main/java/com/fizz/business/domain/msg/PdiSetup.java new file mode 100644 index 0000000..f953189 --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/msg/PdiSetup.java @@ -0,0 +1,12 @@ +package com.fizz.business.domain.msg; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@Schema(description = "设定电文") +public class PdiSetup { + @Schema(description = "钢卷号") + private String coilNo; +} diff --git a/business/src/main/java/com/fizz/business/service/manager/OpcMessageIdsManager.java b/business/src/main/java/com/fizz/business/service/manager/OpcMessageIdsManager.java new file mode 100644 index 0000000..e988abb --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/manager/OpcMessageIdsManager.java @@ -0,0 +1,43 @@ +package com.fizz.business.service.manager; + +import com.google.common.collect.Maps; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.Map; + +@Component +public class OpcMessageIdsManager { + private static Map lineMeasureIds = Maps.newHashMap(); + private static Map entryMoveIds = Maps.newHashMap(); + private static Map exitCutIds = Maps.newHashMap(); + private static Map exitMeasureIds = Maps.newHashMap(); + private static Map exitMoveIds = Maps.newHashMap(); + + @PostConstruct + public static void init() { + + //TODO load from database + loadEntryMoveIds(); + loadExitCutIds(); + loadExitMeasureIds(); + loadExitMoveIds(); + } + + public static void loadEntryMoveIds(){ + entryMoveIds.put("ns=2;s=通道 2.LockStautsRead.lockStauts1","materialPlaceSource"); + entryMoveIds.put("ns=2;s=通道 2.LockStautsRead.lockStauts1","materialPlaceDestination"); + } + + public static void loadExitCutIds(){ + + } + + public static void loadExitMeasureIds(){ + + } + + public static void loadExitMoveIds(){ + + } +}