From 801086a215837e9f5923bfe8522c3df4eb8cca89 Mon Sep 17 00:00:00 2001 From: wenjy Date: Wed, 24 Sep 2025 17:21:35 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20UA=20=E6=95=B0=E6=8D=AE=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeviceCollectionBusiness.cs | 8 ++++-- Sln.Imm.Daemon.Opc/Impl/OpcDaService.cs | 28 +++++++++++-------- Sln.Imm.Daemon.Opc/Impl/OpcUaService.cs | 2 +- Sln.Imm.Daemon/Program.cs | 1 + Sln.Imm.Daemon/Sln.Imm.Daemon.csproj | 1 + 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Sln.Imm.Daemon.Business/DeviceCollectionBusiness.cs b/Sln.Imm.Daemon.Business/DeviceCollectionBusiness.cs index f5d798d..9543fde 100644 --- a/Sln.Imm.Daemon.Business/DeviceCollectionBusiness.cs +++ b/Sln.Imm.Daemon.Business/DeviceCollectionBusiness.cs @@ -80,7 +80,7 @@ public class DeviceCollectionBusiness }); } - Task.Delay(1000 * 10).Wait(); + Task.Delay(1000 * 1).Wait(); } } while (isFalg); } @@ -112,6 +112,8 @@ public class DeviceCollectionBusiness //var infos = _opcService.BrowseNodesAsync("ns=2;s=Devices/分厂一/车间一/测试空设备"); + await _opcUaService.DisconnectAsync(); + return infos; } @@ -133,7 +135,7 @@ public class DeviceCollectionBusiness paramValues = deviceParams .GroupJoin(opcItemValues, - param => param.paramName, + param => param.paramAddr, value => value.NodeId, (param, values) => new { Param = param, Values = values }) .SelectMany( @@ -147,7 +149,7 @@ public class DeviceCollectionBusiness paramAddr = x.Param.paramAddr, paramType = x.Param.paramType, isFlag = x.Param.isFlag, - paramValue = value?.Value.ToString(), + paramValue = value.Value.ToString(), }) .ToList(); diff --git a/Sln.Imm.Daemon.Opc/Impl/OpcDaService.cs b/Sln.Imm.Daemon.Opc/Impl/OpcDaService.cs index 9443aa0..4496da4 100644 --- a/Sln.Imm.Daemon.Opc/Impl/OpcDaService.cs +++ b/Sln.Imm.Daemon.Opc/Impl/OpcDaService.cs @@ -111,22 +111,28 @@ public class OpcDaService : IOpcService, IDisposable if (values[0].Error.Failed) throw new Exception($"读取失败: {values[0].Error}"); - //return new OpcNode - //{ - // NodeId = nodeId, - // DisplayName = nodeId, - // Value = values[0].Value, - // SourceTimestamp = values[0].Timestamp, - // DataType = values[0].Value?.GetType().Name ?? "Unknown" - //}; + var indexedNodeIds = nodeId.Select((value, index) => new { Index = index, Value = value }); - return null; + List result = new List(); + + foreach (var item in indexedNodeIds) + { + var dataValue = values[item.Index]; + result.Add(new OpcNode() + { + NodeId = item.Value, + DisplayName = item.Value, + Value = dataValue.Value, + SourceTimestamp = dataValue.Timestamp, + DataType = values[0].Value?.GetType().Name ?? "Unknown" + }); + } + return result; } } catch (Exception ex) { - Console.WriteLine($"读取节点时出错: {ex.Message}"); - throw; + throw new InvalidOperationException($"OPC DA 读取节点时出错:{ex.Message}"); } } diff --git a/Sln.Imm.Daemon.Opc/Impl/OpcUaService.cs b/Sln.Imm.Daemon.Opc/Impl/OpcUaService.cs index 835e5c3..a7dcb20 100644 --- a/Sln.Imm.Daemon.Opc/Impl/OpcUaService.cs +++ b/Sln.Imm.Daemon.Opc/Impl/OpcUaService.cs @@ -163,7 +163,7 @@ public class OpcUaService : IOpcService, IDisposable } catch (Exception ex) { - throw new InvalidOperationException($"读取节点时出错:{ex.Message}"); + throw new InvalidOperationException($"OPC UA 读取节点时出错:{ex.Message}"); } } diff --git a/Sln.Imm.Daemon/Program.cs b/Sln.Imm.Daemon/Program.cs index 8037112..3f2a344 100644 --- a/Sln.Imm.Daemon/Program.cs +++ b/Sln.Imm.Daemon/Program.cs @@ -91,6 +91,7 @@ namespace Sln.Imm.Daemon new SqliteCache(new SqliteCacheOptions { CachePath = "F:\\桌面\\数据缓存\\FusionCache.db" + //CachePath = "/Users/wenxiansheng/Public/WorkSpace/Mesnac/项目资料/澳柯玛注塑车间MES项目/数据缓存/FusionCache.db" })); } } diff --git a/Sln.Imm.Daemon/Sln.Imm.Daemon.csproj b/Sln.Imm.Daemon/Sln.Imm.Daemon.csproj index d8bfc1d..c868551 100644 --- a/Sln.Imm.Daemon/Sln.Imm.Daemon.csproj +++ b/Sln.Imm.Daemon/Sln.Imm.Daemon.csproj @@ -5,6 +5,7 @@ net8.0 enable enable + zh-Hans