opc-ua - TranslateBrowsePathsToNodeIds() 使用 Simatic ProcessHistorian 的 OPC-UA 方法

标签 opc-ua historian

我正在尝试调用TranslateBrowsePathsToNodeIds方法(在 OPC-UA 标准的 View 服务集上定义)使用 OPC-UA 客户端针对 Simatic ProcessHistorian(Simatic PCS 7 版本 8.1)。

当我使用来自 UA-.NET 的示例客户端浏览服务器时我可以在对象根下看到两个节点:

  • 服务器
  • 流程历史记录 {7a3ea44f-b495-414c-84f9-7498095d43bd}

对于Server node 该方法工作正常,但我无法找出如何从 Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd} 开始获取树下的节点的方法。 (这实际上是数据模型)。​​

代码如下(C#):

var startNodeId = new NodeId(Objects.ObjectsFolder);
var browsePaths = new BrowsePathCollection
{
    new BrowsePath
    {
        RelativePath = RelativePath.Parse(relativePath, session.TypeTree, session.NamespaceUris, session.NamespaceUris),
        StartingNode = startNodeId
    }
};

var responseHeader = session.TranslateBrowsePathsToNodeIds(
    null,
    browsePaths,
    out var results,
    out var diagnosticInfos);

生成的 StatusCode 为 BadNoMatch .

relativePath参数为3:Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd} (示例客户端显示为该节点的 BrowseName 的值)。我也尝试过没有 3: namespaceId 前缀没有区别。

如果我尝试使用 Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd} 的 NodeId节点为startNodeId参数,结果 StatusCode 为 BadNodeIdUnknown .

相同的代码可以很好地与其他 OPC-UA 服务器(例如 KEPServerEX 或 Aspen InfoPlus21)配合使用。我不确定代码是否应该不同或者 ProcessHistorian 是否不支持它。任何帮助表示赞赏。

编辑: 正如 @AndrewCullen 指出的,有几种方法可以获取 RelativePath实例。我检查了 UA-.NET 中的代码并尝试创建 RelativePath使用它的构造函数,它控制对象的各个方面:

var qn = new QualifiedName("Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd}", 3);
var rp = new RelativePath(null, false, true, qn);

browsePaths.AddRange(relativePaths.Select(relativePath => new BrowsePath
{
    RelativePath = rp,
    StartingNode = startNodeId
}));

根据OPC UA Part 04 - Services (第 7.26 章)当 referenceTypeId未指定( RelativePath 构造函数的第一个参数),则包含所有引用并忽略参数 includeSubtypes 。所以这个结构应该是最通用的(如果我理解正确的话)。但这种方法都没有成功。

编辑2:

附加 Process Historian 节点的 View 节点属性:

View Node Attributes for Process Historian node

我真正需要的是翻译标签的浏览路径。下一张图片中显示了一个示例标签的属性。

所以我需要解析如下路径:3:Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd}/3:CMC/3:OSS1/3:OSS1_OSS1/3:ZAKLADAC/POC_VRSTEV.V到它的 NodeId。可能还有另一个问题 - 名称中的斜杠 - 我需要以某种方式转义它吗?

Tag attributes

编辑3:

也作为问题提交于 GitHub of OPCFoundation

最佳答案

我发现RelativePath.Parse遵循第4部分-服务附件A.2中的字符串格式。

尝试使用正斜杠作为前缀,例如“/3:Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd}”

ps。我发现如果您省略“3:”,服务器会假设您的意思是“0:”

pps。使用仅带有参数字符串的 Parse 版本,ITypeTable。在这种情况下,您不需要翻译命名空间。

ppps:我看到的大多数浏览名称都没有空格。我想知道为什么?

Browse Name

尝试读取服务器对象?

var browsePaths = new [] { new BrowsePath { StartingNode= ObjectIds.ObjectsFolder, RelativePath=RelativePath.Parse("/0:Server/0:ServerStatus", session.TypeTree) } };

session.TranslateBrowsePathsToNodeIds(null, browsePaths, out BrowsePathResultCollection results1, out DiagnosticInfoCollection infos1);

Console.WriteLine($"Expecting 'i=2256', read {results1[0].Targets[0].TargetId}");

关于opc-ua - TranslateBrowsePathsToNodeIds() 使用 Simatic ProcessHistorian 的 OPC-UA 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565658/

相关文章:

java - Milo OPC UA 服务器推送服务器逻辑中的值

opc-ua - 使用 eclipse milo 构建用于历史数据访问的 OPC UA 服务器

mqtt - OPC UA数据包格式

node.js - 如何在使用 hyperledger-composer 实现的区 block 链中查找 Assets 的交易历史记录?

odbc - 如何从 AspenTech IP21 Historian 查询数据?

将 OPC-UA-AnsiC 编译为 DLL

python - freeopcua c++客户端和python opcua的组合在getChild()上引发错误

android - docker : Battery historian - Pull access denied or require docker login

python - 我如何使用 python 轻松地从 historian 中提取数据?

database - 如何通过 java 连接到 Historian 数据库?