mdc-parent/mdc-collect/pom.xml
@@ -20,12 +20,8 @@ <commons-codec.version>1.10</commons-codec.version> <mysql-connector.version>8.0.17</mysql-connector.version> <jedis.version>3.1.0</jedis.version> <nekohtml.version>1.9.22</nekohtml.version> <commons-pool2.version>2.6.2</commons-pool2.version> <jna.version>5.14.0</jna.version> <poi.version>4.1.2</poi.version> <poi-ooxml.version>4.1.2</poi-ooxml.version> <poi-ooxml-schemas.version>4.1.2</poi-ooxml-schemas.version> <skipTests>false</skipTests> <localLibPath>D:/yangys/mdm/locallib</localLibPath> @@ -65,24 +61,12 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <!-- spring boot end --> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!--json--> @@ -96,7 +80,6 @@ <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <!--mysql--> @@ -111,13 +94,7 @@ <groupId>io.github.lmlx66</groupId> <artifactId>yitter-idgenerator-spring-boot-starter</artifactId> </dependency> <!--nekohtml--> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>${nekohtml.version}</version> </dependency> <!-- <dependency> <groupId>org.opcfoundation</groupId> <artifactId>opc-ua</artifactId> @@ -135,22 +112,6 @@ <version>${jna.version}</version> </dependency> <!--poi--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi-ooxml.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>${poi-ooxml-schemas.version}</version> </dependency> <dependency> <groupId>com.github.zengfr</groupId> @@ -225,7 +186,7 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.qianwen.mdc.MdcApplication</mainClass> <mainClass>com.qianwen.mdc.MdcCollectApplication</mainClass> <layout>ZIP</layout> <includes> <!-- æå æ¶å 嫿 ¸å¿æ¨¡åä¾èµå ï¼éæå¨æå® --> mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasClientTest.java
@@ -1,11 +1,12 @@ package com.qianwen.mdc.service.focas; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import com.alibaba.fastjson.JSONObject; import com.sun.jna.Native; import com.sun.jna.ptr.ShortByReference; @Disabled public class FocasClientTest { public static String IP = "192.168.1.8"; public static short port = 8193; mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasJavaClientTest.java
@@ -2,12 +2,13 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import com.qianwen.mdc.service.focas.types.ODBST; import com.sun.jna.Platform; import com.sun.jna.ptr.ShortByReference; @Disabled public class FocasJavaClientTest { public static String IP = "192.168.1.8"; public static short port = 8193; mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocas.java
ÎļþÒÑɾ³ý mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocasTest.java
ÎļþÒÑɾ³ý mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/opcua/MyOpcuaClientTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,40 @@ package com.qianwen.mdc.service.opcua; import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem; import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem.ValueConsumer; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; import org.junit.jupiter.api.Test; public class MyOpcuaClientTest { @Test public void t() { ValueConsumer vc = new ValueConsumer() { @Override public void onValueArrived(UaMonitoredItem item, DataValue value) { //å¤çæ°æ® System.out.println(value); } }; MyOpcuaClilent mc = new MyOpcuaClilent(); try { OpcUaClient client = mc.connect("yangys-HW", 53530, "/OPCUA/SimulationServer"); mc.setValueConsumer(vc); //mc.subscribe("1001"); //Object val = mc.readValue(3, 1001); //System.out.println(val); NodeId nodeId = new NodeId(3, "abcd"); mc.readNodeValue(client,nodeId); }catch(Exception e) { e.printStackTrace(); } } } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/opcua/MyOpcuaClilent.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,238 @@ package com.qianwen.mdc.service.opcua; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import java.nio.file.Files; import java.nio.file.Path; import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider; import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem.ValueConsumer; import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem; import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem.DataValueListener; import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedSubscription; import org.eclipse.milo.opcua.stack.core.AttributeId; import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger; import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort; import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode; import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn; import org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest; import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters; import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyOpcuaClilent { /** * namespace */ private int ns = 3; private static AtomicInteger atomic = new AtomicInteger(1); private OpcUaClient client; // æ¹é订é namespaceIndexé»è®¤ä¸º2 private int batchNamespaceIndex = 2; // æ¹éè®¢é æ¶çidentifiers private List<String> batchIdentifiers; private ValueConsumer valueConsumer; DataValueListener valueListener; public ValueConsumer getValueConsumer() { return valueConsumer; } public void setValueConsumer(ValueConsumer valueConsumer) { this.valueConsumer = valueConsumer; } private static final Logger logger = LoggerFactory.getLogger(MyOpcuaClilent.class); /** * è¿æ¥opcuaæå¡å¨ * @param ip * @param port * @param suffix * @return * @throws Exception */ public OpcUaClient connect(String ip, int port, String suffix) throws Exception { String endPointUrl = "opc.tcp://" + ip + ":" + port + suffix; Path securityTempDir = Paths.get(System.getProperty("java.io.tmpdir"), "security"); Files.createDirectories(securityTempDir); if (!Files.exists(securityTempDir)) { throw new RuntimeException("å建 security 失败: " + securityTempDir); } OpcUaClient opcUaClient = OpcUaClient.create(endPointUrl, endpoints -> endpoints.stream() .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri())) .findFirst(), configBuilder -> configBuilder .setApplicationName(LocalizedText.english("eclipse milo opc-ua client")) .setApplicationUri("urn:eclipse:milo:examples:client") //è®¿é®æ¹å¼ï¼å¿å .setIdentityProvider(new AnonymousProvider()) .setRequestTimeout(UInteger.valueOf(5000)) .build() ); opcUaClient.connect().get(); Thread.sleep(2000); // 线ç¨ä¼ç ä¸ä¸åè¿å对象ï¼ç»å建è¿ç¨ä¸ä¸ªæ¶é´ã this.client = opcUaClient; return opcUaClient; } /** * 读åèç¹æ°æ® * @param client * @param namespaceIndex * @param identifier * @throws Exception */ public Object readValue(int ns, int identifier) throws Exception { //èç¹ NodeId nodeId = new NodeId(ns, identifier); try { //读åèç¹æ°æ® DataValue value = client.readValue(0.0, TimestampsToReturn.Neither, nodeId).get(); Object val = value.getValue().getValue(); // ç¶æ System.out.println("Status: " + value.getStatusCode()); if (val instanceof UShort) { val = ((UShort) val).intValue(); } else if (val instanceof Boolean) { if (val.equals(true)) { val = 1; } else { val = 0; } } return val; //æ è¯ç¬¦ //String id = String.valueOf(nodeId.getIdentifier()); //System.out.println(id + ": " + value.getValue().getValue()); }catch(Exception e) { logger.info("读åèç¹æ°æ®å¼å¸¸ identifier: {}", identifier,e); return null; } } public void readNodeValue(OpcUaClient client, NodeId nodeId) throws Exception { //读åèç¹æ°æ® DataValue value = client.readValue(0.0, TimestampsToReturn.Neither, nodeId).get(); // ç¶æ System.out.println("Status: " + value.getStatusCode()); //æ è¯ç¬¦ String id = String.valueOf(nodeId.getIdentifier()); System.out.println(id + ": " + value.getValue().getValue()); } /** * 订é * @param identifier */ public void subscribe(String identifier) { try { client .getSubscriptionManager() .createSubscription(1000.0) .thenAccept(t -> { NodeId nodeId = new NodeId(this.ns, identifier); ReadValueId readValueId = new ReadValueId(nodeId, AttributeId.Value.uid(), null, null); //åå»ºçæ§çåæ° MonitoringParameters parameters = new MonitoringParameters(UInteger.valueOf(atomic.getAndIncrement()), 1000.0, null, UInteger.valueOf(10), true); //åå»ºçæ§é¡¹è¯·æ± //è¯¥è¯·æ±æåç¨äºå建订é ã MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(readValueId, MonitoringMode.Reporting, parameters); List<MonitoredItemCreateRequest> requests = new ArrayList<>(); requests.add(request); //åå»ºçæ§é¡¹ï¼å¹¶ä¸æ³¨ååé弿¹åæ¶åçåè°å½æ°ã t.createMonitoredItems( TimestampsToReturn.Both, requests, (item, id) -> item.setValueConsumer(valueConsumer) ); }).get(); //æç»è®¢é Thread.sleep(Long.MAX_VALUE); }catch(Exception e) { } } /** * æ¹é订é * * @param client * @throws Exception */ public void subscribeBatch(OpcUaClient client) throws Exception { final CountDownLatch eventLatch = new CountDownLatch(1); //å¤ç订é ä¸å¡ handlerMultipleNode(); //æç»çå¬ eventLatch.await(); } /** * å¤ç订é ä¸å¡ * * @param client OPC UA客æ·ç«¯ */ private void handlerMultipleNode() { try { //å建订é ManagedSubscription subscription = ManagedSubscription.create(client); List<NodeId> nodeIdList = new ArrayList<>(); for (String id : batchIdentifiers) { nodeIdList.add(new NodeId(batchNamespaceIndex, id)); } //çå¬ List<ManagedDataItem> dataItemList = subscription.createDataItems(nodeIdList); for (ManagedDataItem managedDataItem : dataItemList) { DataValueListener l; managedDataItem.addDataValueListener(valueListener); /* managedDataItem.addDataValueListener((t) -> { System.out.println(managedDataItem.getNodeId().getIdentifier().toString() + ":" + t.getValue().getValue().toString()); }); */ } } catch (Exception e) { e.printStackTrace(); } } public int getBatchNamespaceIndex() { return batchNamespaceIndex; } public void setBatchNamespaceIndex(int batchNamespaceIndex) { this.batchNamespaceIndex = batchNamespaceIndex; } public List<String> getBatchIdentifiers() { return batchIdentifiers; } public void setBatchIdentifiers(List<String> batchIdentifiers) { this.batchIdentifiers = batchIdentifiers; } public void setValueListener(DataValueListener valueListener) { this.valueListener = valueListener; } } mdc-parent/mdc-show/pom.xml
@@ -22,7 +22,6 @@ <commons-codec.version>1.10</commons-codec.version> <jedis.version>3.1.0</jedis.version> <nekohtml.version>1.9.22</nekohtml.version> <commons-pool2.version>2.6.2</commons-pool2.version> <poi.version>4.1.2</poi.version> <poi-ooxml.version>4.1.2</poi-ooxml.version> @@ -88,12 +87,6 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- commons-io --> <dependency> @@ -135,12 +128,7 @@ <version>${pagehelper.version}</version> </dependency> --> <!--nekohtml--> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>${nekohtml.version}</version> </dependency> <!-- <dependency> <groupId>org.opcfoundation</groupId> mdc-parent/mdc-show/src/main/java/com/qianwen/mdc/service/MdcDataArchiveService.java
@@ -29,12 +29,10 @@ import com.qianwen.mdc.mapper.WorkshopMapper; import com.qianwen.mdc.utils.TimestampUtil; import lombok.extern.slf4j.Slf4j; /** * æ°æ®å½æ¡£æå¡,å° machine_status æ°æ®å¯¼å ¥machine_status_history表,å¹¶å å ¥ææ°çmachine_statusæ°æ® */ @Slf4j @Component @Async public class MdcDataArchiveService { mdc-parent/mdc-showdb-mysql/src/main/resources/mapper/MachineMaintainMapper.xml
@@ -46,7 +46,7 @@ <select id="queryPage" resultMap="FullResultMap"> SELECT mm.id,mm.machine_id,ma.machine_name,mm.user_id,u.name user_name,style,mm.department,ud.name department_name,ma.uuid,ma.type, ma.specification ma.specification, start_date_from,start_date_to,complete_date_from,complete_date_to,is_qualified,mm.status,mm.detail FROM machine_maintain mm left join machine m on mm.machine_id=m.id left join sys_account u on mm.user_id=u.id left join machine_account ma on m.id=ma.machine_id