【问题标题】:TranslateBrowsePathsToNodeIds() OPC-UA method with Simatic ProcessHistorianTranslateBrowsePathsToNodeIds() OPC-UA 方法与 Simatic ProcessHistorian
【发布时间】:2018-02-01 14:55:43
【问题描述】:

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

当我使用来自 UA-.NET 的 Sample Client 浏览服务器时,我可以在 Objects root 下看到两个节点:

  • 服务器
  • Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd}

对于Server 节点,该方法工作正常,但我不知道如何从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);

生成的状态码是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 章),当未指定 referenceTypeIdRelativePath 的构造函数的第一个参数)时,所有引用都包括在内,并且参数 includeSubtypes 被忽略。所以这个结构应该是最普遍的(如果我理解正确的话)。但这种方法都没有成功。

EDIT2:

为 Process Historian 节点附加视图节点属性:

而我真正需要的是翻译标签的浏览路径。一个示例标签的属性如下图所示。

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

编辑3:

也作为问题提交至GitHub of OPCFoundation

【问题讨论】:

    标签: opc-ua historian


    【解决方案1】:

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

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

    ps。我看到如果你去掉“3:”,服务器会认为你的意思是“0:”

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

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

    尝试读取服务器对象?

    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}");
    

    【讨论】:

    • 尝试过,但在名称前加上斜线没有帮助。我使用 RelativePath 构造函数编辑了我的帖子。
    • 读取服务器属性工作正常(正如我在问题中提到的) - 我验证了所有变体:RelativePath.Parse("/0:Server/0:ServerStatus", session.TypeTree)RelativePath.Parse("0:Server/0:ServerStatus", session.TypeTree)RelativePath.Parse("/0:Server/0:ServerStatus", session.TypeTree, session.NamespaceUris, session.NamespaceUris)RelativePath.Parse("0:Server/0:ServerStatus", session.TypeTree, session.NamespaceUris, session.NamespaceUris) 产生 i=2256。但无论有无前导斜杠,都不适用于节点/3:Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd}
    • 我只是无意中注意到您的编辑,请添加评论或提及我,以便我收到通知。你管理它工作吗?在我的情况下,我什至不知道如果我使用 Process Historian {7a3ea44f-b495-414c-84f9-7498095d43bd} 的 NodeId(从查看节点属性对话框复制)作为 StartingNode 参数,我为什么会得到 BadNodeIdUnknownTranslateBrowsePathsToNodeIds 似乎不支持所有子树
    • 您能否发布一张 Process Historian 的“查看节点属性”对话框的图片?
    • 我觉得这张照片还可以。要转义“/”,请在其前面加上“&”字符。 “/2:Block&.Output” 遵循目标 BrowseName = “2:Block.Output” 的任何前向分层引用。
    【解决方案2】:

    所以最终结果是 Proces Historian 不支持 TranslateBrowsePathsToNodeIds(尽管它适用于 Server 节点)。

    最后我发现 documentation (ch 3.9.5) Process Historian 仅支持来自 View Service Set 的以下功能:

    • Browse
    • BrowseNext

    符合 View Services 的View Basic ConformanceUnit,详见OPC UA Part 7: Profiles

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 2021-04-12
      • 2023-02-09
      • 2016-10-07
      • 1970-01-01
      • 2015-07-06
      • 2017-08-23
      • 2021-03-26
      • 1970-01-01
      相关资源
      最近更新 更多