利用C# OPC UA實(shí)現(xiàn)數(shù)據(jù)歷史記錄查詢

c#
小樊
82
2024-09-04 15:41:58

要使用C#和OPC UA實(shí)現(xiàn)數(shù)據(jù)歷史記錄查詢,你需要遵循以下步驟:

  1. 安裝OPC UA庫(kù):首先,你需要一個(gè)支持OPC UA的庫(kù)。有幾個(gè)流行的庫(kù)可供選擇,例如OPC Foundation的OPC UA .NET Standard庫(kù)或者Unified Automation的UaNetStandard庫(kù)。在本示例中,我們將使用OPC Foundation的庫(kù)。

  2. 添加庫(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ù)。

  3. 創(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");

            // ...
        }
    }
}
  1. 查詢歷史數(shù)據(jù):使用OpcClient實(shí)例,你可以查詢特定節(jié)點(diǎn)的歷史數(shù)據(jù)。你需要提供節(jié)點(diǎn)ID、開始時(shí)間和結(jié)束時(shí)間。
// 查詢歷史數(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}");
}
  1. 斷開連接:完成歷史數(shù)據(jù)查詢后,記得斷開與OPC UA服務(wù)器的連接。
// 斷開連接
await client.DisconnectAsync();

將上述代碼片段組合在一起,你將得到一個(gè)完整的C#程序,用于查詢OPC UA服務(wù)器上特定節(jié)點(diǎn)的歷史數(shù)據(jù)。請(qǐng)確保使用正確的OPC UA服務(wù)器URL和節(jié)點(diǎn)ID。

0