要使用C#和OPC UA實(shí)現(xiàn)數(shù)據(jù)歷史記錄查詢,你需要遵循以下步驟:
安裝OPC UA庫(kù):首先,你需要一個(gè)支持OPC UA的庫(kù)。有幾個(gè)流行的庫(kù)可供選擇,例如OPC Foundation的OPC UA .NET Standard庫(kù)或者Unified Automation的UaNetStandard庫(kù)。在本示例中,我們將使用OPC Foundation的庫(kù)。
添加庫(kù)引用:在你的C#項(xiàng)目中,通過NuGet包管理器添加對(duì)OPC Foundation的OPC UA .NET Standard庫(kù)的引用。在Visual Studio中,右鍵單擊項(xiàng)目,然后選擇“Manage NuGet Packages”。搜索并安裝“OPC UA .NET Standard”庫(kù)。
創(chuàng)建一個(gè)OpcClient實(shí)例:為了與OPC UA服務(wù)器進(jìn)行通信,你需要?jiǎng)?chuàng)建一個(gè)OpcClient實(shí)例。這個(gè)實(shí)例將負(fù)責(zé)處理連接、請(qǐng)求和響應(yīng)。
using Opc.Ua;
using Opc.Ua.Client;
namespace OpcUaHistoricalDataQuery
{
class Program
{
static async Task Main(string[] args)
{
// 創(chuàng)建一個(gè)OpcClient實(shí)例
OpcClient client = new OpcClient();
// 連接到OPC UA服務(wù)器
await client.ConnectAsync("opc.tcp://localhost:4840");
// ...
}
}
}
// 查詢歷史數(shù)據(jù)
NodeId nodeId = new NodeId("ns=2;s=MyVariable"); // 替換為你的變量節(jié)點(diǎn)ID
DateTime startTime = DateTime.UtcNow.AddHours(-1);
DateTime endTime = DateTime.UtcNow;
HistoryReadResult result = await client.ReadHistoryAsync(nodeId, startTime, endTime);
if (result.StatusCode == StatusCodes.Good)
{
foreach (var dataValue in result.HistoryData.DataValues)
{
Console.WriteLine($"Timestamp: {dataValue.SourceTimestamp}, Value: {dataValue.Value}");
}
}
else
{
Console.WriteLine($"Error reading history data: {result.StatusCode}");
}
// 斷開連接
await client.DisconnectAsync();
將上述代碼片段組合在一起,你將得到一個(gè)完整的C#程序,用于查詢OPC UA服務(wù)器上特定節(jié)點(diǎn)的歷史數(shù)據(jù)。請(qǐng)確保使用正確的OPC UA服務(wù)器URL和節(jié)點(diǎn)ID。