From cba1c1abf41605e52e5ca86be7ec756508ae5bad Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Wed, 9 Jul 2025 20:23:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DOPC=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=89=8D=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dialogs/OpcUaImportDialogViewModel.cs | 88 ++----------------- Views/Dialogs/OpcUaImportDialog.xaml | 28 ++++++ 2 files changed, 36 insertions(+), 80 deletions(-) diff --git a/ViewModels/Dialogs/OpcUaImportDialogViewModel.cs b/ViewModels/Dialogs/OpcUaImportDialogViewModel.cs index a1a2fea..f98c70b 100644 --- a/ViewModels/Dialogs/OpcUaImportDialogViewModel.cs +++ b/ViewModels/Dialogs/OpcUaImportDialogViewModel.cs @@ -28,6 +28,9 @@ public partial class OpcUaImportDialogViewModel : ObservableObject [ObservableProperty] private bool _selectAllVariables; + [ObservableProperty] + private bool _isConnected; + private Session _session; public OpcUaImportDialogViewModel() @@ -49,86 +52,9 @@ public partial class OpcUaImportDialogViewModel : ObservableObject _session = null; } - /*ApplicationInstance application = new ApplicationInstance - { - ApplicationName = "PMSWPF OPC UA Client", - ApplicationType = ApplicationType.Client, - ConfigSectionName = "PMSWPF.OpcUaClient" - }; - - ApplicationConfiguration config = await application.LoadApplicationConfiguration(false); - - // var config = new ApplicationConfiguration() - // { - // ApplicationName = application.ApplicationName, - // ApplicationUri = $"urn:{System.Net.Dns.GetHostName()}:OpcUADemoClient", - // ApplicationType = application.ApplicationType, - // SecurityConfiguration = new SecurityConfiguration - // { - // ApplicationCertificate = new CertificateIdentifier { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/MachineDefault", SubjectName = application.ApplicationName }, - // TrustedIssuerCertificates = new CertificateTrustList { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/UA Certificate Authorities" }, - // TrustedPeerCertificates = new CertificateTrustList { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/UA Applications" }, - // RejectedCertificateStore = new CertificateTrustList { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/RejectedCertificates" }, - // AutoAcceptUntrustedCertificates = true // 自动接受不受信任的证书 (仅用于测试) - // }, - // TransportQuotas = new TransportQuotas { OperationTimeout = 15000 }, - // ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }, - // TraceConfiguration = new TraceConfiguration { OutputFilePath = "./Logs/OpcUaClient.log", DeleteOnLoad = true, TraceMasks = Utils.TraceMasks.Error | Utils.TraceMasks.Security } - // }; - // - // bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0); - // if (!haveAppCertificate) - // { - // throw new Exception("Application instance certificate invalid!"); - // } - // - // EndpointDescription selectedEndpoint - // = CoreClientUtils.SelectEndpoint(application.ApplicationConfiguration, EndpointUrl, false); - // EndpointConfiguration endpointConfiguration - // = EndpointConfiguration.Create(application.ApplicationConfiguration); - // ConfiguredEndpoint configuredEndpoint - // = new ConfiguredEndpoint(null, selectedEndpoint, endpointConfiguration); - // var config = new ApplicationConfiguration() - // { - // ApplicationName = application.ApplicationName, - // ApplicationUri = $"urn:{System.Net.Dns.GetHostName()}:OpcUADemoClient", - // ApplicationType = application.ApplicationType, - // SecurityConfiguration = new SecurityConfiguration - // { - // ApplicationCertificate = new CertificateIdentifier { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/MachineDefault", SubjectName = application.ApplicationName }, - // TrustedIssuerCertificates = new CertificateTrustList { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/UA Certificate Authorities" }, - // TrustedPeerCertificates = new CertificateTrustList { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/UA Applications" }, - // RejectedCertificateStore = new CertificateTrustList { StoreType = "Directory", StorePath = "%CommonApplicationData%/OPC Foundation/CertificateStores/RejectedCertificates" }, - // AutoAcceptUntrustedCertificates = true // 自动接受不受信任的证书 (仅用于测试) - // }, - // TransportQuotas = new TransportQuotas { OperationTimeout = 15000 }, - // ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }, - // TraceConfiguration = new TraceConfiguration { OutputFilePath = "./Logs/OpcUaClient.log", DeleteOnLoad = true, TraceMasks = Utils.TraceMasks.Error | Utils.TraceMasks.Security } - // }; - - bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0); - if (!haveAppCertificate) - { - throw new Exception("Application instance certificate invalid!"); - } - - EndpointDescription selectedEndpoint - = CoreClientUtils.SelectEndpoint(application.ApplicationConfiguration, EndpointUrl, false); - EndpointConfiguration endpointConfiguration - = EndpointConfiguration.Create(application.ApplicationConfiguration); - ConfiguredEndpoint configuredEndpoint - = new ConfiguredEndpoint(null, selectedEndpoint, endpointConfiguration); - - _session = await Session.Create( - config, - configuredEndpoint, - false, - "PMSWPF OPC UA Session", - 60000, - new UserIdentity(new AnonymousIdentityToken()), - null); - */ - + IsConnected = false; + OpcUaNodes.Clear(); + SelectedNodeVariables.Clear(); // 1. 创建应用程序配置 var application = new ApplicationInstance @@ -202,12 +128,14 @@ public partial class OpcUaImportDialogViewModel : ObservableObject null); NotificationHelper.ShowSuccess($"已连接到 OPC UA 服务器: {EndpointUrl}"); + IsConnected = true; // 浏览根节点 await BrowseNodes(OpcUaNodes, ObjectIds.ObjectsFolder); } catch (Exception ex) { + IsConnected = false; NlogHelper.Error($"连接 OPC UA 服务器失败: {EndpointUrl} - {ex.Message}", ex); NotificationHelper.ShowError($"连接 OPC UA 服务器失败: {EndpointUrl} - {ex.Message}", ex); } diff --git a/Views/Dialogs/OpcUaImportDialog.xaml b/Views/Dialogs/OpcUaImportDialog.xaml index 3e3756a..ece1ce8 100644 --- a/Views/Dialogs/OpcUaImportDialog.xaml +++ b/Views/Dialogs/OpcUaImportDialog.xaml @@ -45,6 +45,20 @@ ItemsSource="{Binding OpcUaNodes}" Margin="0,0,10,0" SelectedItemChanged="TreeView_SelectedItemChanged"> + + + @@ -59,6 +73,20 @@ SelectionChanged="Selector_OnSelectionChanged" AutoGenerateColumns="False" IsReadOnly="True"> + + +