c# - 如何使用 OPCFoundation.NetStandard.Opc.Ua 检索 OPC 项目
问题描述
我尝试使用 NuGet 包OPCFoundation.NetStandard.Opc.Ua从 opc 服务器检索数据。但我无法弄清楚如何通过名称(“Channel1.Device1.Tag1”)直接寻址单个项目以便阅读或订阅。
我已经从 OPCFoundation 的 GitHub 存储库下载并研究了完整的示例代码,但我只找到了检索所有可用项目(通过浏览服务器)然后让用户选择其中一个的代码。
我需要以某种方式直接从它的名称(“Channel1.Device1.Tag1”)中查找一个项目,以获得一个NodeId -instance,然后我可以使用它来阅读或订阅(我知道一旦我有了节点标识)。
如果有人可以发布一个简短的示例或向我指出一些可以完成这项工作的示例代码,我将非常高兴!
解决方案
建立会话后,一种选择是在Objects文件夹中查找_System对象,以获取名称空间索引,因为它似乎可以更改。
ReferenceDescriptionCollection refdescs;
byte[] continuationPoint;
session.Browse(null, null, ObjectIds.ObjectsFolder, 0u, BrowseDirection.Forward, ReferenceTypeIds.HierarchicalReferences, true, (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, out continuationPoint, out refdescs);
foreach (var item in refdescs)
{
if (item.DisplayName.Text == "_System")
{
var nsi = item.NodeId.NamespaceIndex.ToString();
Console.WriteLine($"Namespace Index {nsi}");
}
}
一旦你得到它,你的读/写标识符将采用以下格式
ns=[NamespaceIndex];s=Channel1.Device1.Tag1