在C#中實現OPC UA客戶端,可以使用OPC Foundation提供的開源庫UA-.NETStandard。下面是一個簡單的示例代碼,演示如何創建一個OPC UA客戶端并連接到服務器。
首先,你需要在項目中安裝UA-.NETStandard庫。可以通過NuGet包管理器搜索并安裝"Opc.Ua"包。
接下來,創建一個OPC UA客戶端類,并實現連接到服務器的方法:
using Opc.Ua;
using Opc.Ua.Client;
public class OpcUaClient
{
private Session session;
public async Task Connect(string endpointUrl)
{
var endpoint = new ConfiguredEndpoint(null, new EndpointDescription
{
EndpointUrl = endpointUrl
});
var endpointConfiguration = EndpointConfiguration.Create();
var endpointConfiguration.SecurityConfiguration = new SecurityConfiguration
{
ApplicationCertificate = new CertificateIdentifier(),
TrustedPeerCertificates = new CertificateTrustList(),
RejectSHA1SignedCertificates = false
};
session = await Session.Create(
configuration: endpointConfiguration,
endpoint: endpoint,
updateBeforeConnect: false,
checkDomain: false,
sessionName: "OPC UA Client",
sessionTimeout: 60000,
identity: null,
preferredLocales: null
);
session.KeepAliveInterval = 10000;
session.KeepAlive += Session_KeepAlive;
}
private void Session_KeepAlive(Session session, KeepAliveEventArgs e)
{
Console.WriteLine("KeepAlive received: " + e.CurrentState.ToString());
}
public void Disconnect()
{
session?.Close();
session?.Dispose();
}
}
在上面的示例代碼中,Connect方法用于連接到指定的OPC UA服務器,Disconnect方法用于斷開連接。在Connect方法中,首先創建一個ConfiguredEndpoint對象,指定服務器的地址;然后創建一個Session對象,連接到服務器,并設置一些參數,如會話名稱和保持活動間隔。
接著,可以使用上面的OPC UA客戶端類來實現對服務器的讀寫操作。例如,讀取服務器上的變量值:
public async Task ReadValue(string nodeId)
{
var nodeToRead = new ReadValueId
{
NodeId = nodeId,
AttributeId = Attributes.Value
};
var nodesToRead = new List<ReadValueId> { nodeToRead };
var response = await session.ReadValues(null, nodesToRead);
foreach (var result in response)
{
Console.WriteLine($"Node {result.Value.Source.ToString()} value: {result.Value.Value}");
}
}
以上是一個簡單的示例,演示了如何使用OPC UA-.NETStandard庫在C#中實現OPC UA客戶端。在實際應用中,你可能需要根據服務器的具體配置和要求進行更多的定制。