NamespaceArray 命名空间具有唯一的名称。在运行系统中创建命名空间时,服务器为每个命名空间分配一个命名空间索引。读取服务器的 “NamespaceArray”时,可访问并评估该命名空间索引。 确定连接的客户端数量 CurrentSessionCo unt (ns=0; i=2277)每个客户端至少创建一个会话。此信息用于确定机器的所有伙伴是否已正确连接。“ServerDiagnosticsSummary”(ns=0; i=2275)(包含“CurrentSessionCount”组件)下的所有节点在 ns=0 时具有固定 NodeId。 检查服务器的整体 状态ServerState (ns=0; i=2259) OPC UA 服务器的整体状态(例如故障、正在运行等)可能与用户程 序相关。会话诊断 SessionDiagnostic sArray (ns=0; i=3707) OPC UA服务器持续跟踪所有会话。可能涉及多个参数,例如 ClientConnectionTime、ClientLastContactTime。对于每个会话,均在 SessionDiagnosticsArray 中创建一个条目。也就是说,该数组的大小可变。必须在用户程序中提供足够大的数组, 或使用 NodeAddInfos 参数访问该数组的子集(参见“使用OPC_UA_ReadList 读取数组范围信息 (页 5803)”)。要确定当前会 话数,可在同一读取作业中读取CurrentSessionCount 节点 (ns=0; i=2277)。这样可确定数组中当前有效值的数量。可通过 TIAPortal 中的设备组态指定Zui大会话数。 另请参见下文的“会话诊断的其它注意事项”。下表列出了一些重要应用案例。 使用以下标识: •ns:OPC UA 服务器中节点的 NamespaceIndex。 • i:节点的数字标识符 • s:节点的字符串标识符OPC UA服务器持续跟踪所有订阅和受监视的对象。可能涉及多个参 数,例如 LateSubscriptions(已过期的订阅)。对于每个订阅,均在 SubscriptionDiagnosticsArray 中创建一个条目。也就是说,该数组的大小可变。必须在用户程序中提供足够大 的数组,或使用 NodeAddInfos 参数访问该数组的子集(参见“使用 OPC_UA_ReadList 读取数组范围信息 (页 5803)”)。要确定当前 订阅数,可在同一读取作业中读取CurrentSubscriptionCount (ns=0; i=2285)。这样可确定数组中当前有效值的数量。如果要在程 序中访问SubscriptionDiagnosticsArray 的单个元素,需要使用订阅 ID,因为它是 NodeId 的一部分,例如ns=1; s=Subscription_.MonitoredItemCount。订阅 ID 在组态时未知。
会话诊断的其它注意事项SessionDiagnosticsArray (ns=0; i=3707) 的 OPC UA 数据类型为“SessionDiagnosticsDataType”。该数据类型包含两个“动态”数组:“LocalIds”和“Client.Description.DiscoveryUrls”。这意味着这些数组的大小在组态时未知。 对于 V2.9及之前的固件版本,程序结构中的数组大小必须完全匹配读取的 OPC UA 数组的 大小。自固件版本 V3.0 起,PLC程序中的数组大小可以大于读取的 OPC UA 数组的大小。此要求适用于对本地 CPU 的 OPC UA 服务器执行读访问,以及对远程OPC UA 服务器上的 OPC UA 客户端执行读访问。建议在执行读操作前完全复位程序中的值,因为 PLC 的固件不执行此操作。如果当前读取的数组小于之前读取的数组,则存在访问程序中的旧值或无效值的风 险。关于兼容性,以下规则适用:到目前为止有效的访问将仍然有效。之前无效的访问现在可返 回值。 如果要在程序中访问SessionDiagnosticsArray (ns=0;i=3707) 的单个元素,需要先确定会话 ID。会话 ID 是NodeId 的一部分,在组态时未知。例如,如果要确定特定会话的 “ClientLastContactTime”,NodeId的形式如下:ns=1; s=Session_.SessionDiagnostic.ClientLastContactTime。确定会话ID 的一种方法 是读取 SessionDiagnosticsArray (ns=0;i=3707),并使用会话名称等确定所查找的会话。会 话名称和会话 ID 均为 OPCUA“SessionDiagnosticsDataType”的组成部分,因此包含在每个会 话的SessionDiagnosticsArray (ns=0; i=3707) 中。方法 (S7-1500)OPC_UA_MethodGetHandleList:获取方法调用句柄 (S7-1500) 有效性“OPC_UA_MethodGetHandleList”指令的以下说明适用于 S7-1500 CPU 固件版本 V2.6 及更高版本。 说明 编程示例说明了如何使用 SCL 指令。该章节假定用户正在为 OPC UA通信创建并组态一个客户端接口;具体参见“AUTOHOTSPOT”。 有效的操作步骤可以确保自动提供客户端指令的大多数参数。在用户程序中使用指令“OPC_UA_MethodGetHandleList”可从服务器中获取其为 OPC UA 客户端提供的方法对应的数值参考(句柄)。OPC_UA_MethodGetHandleList 用于准备方法调用, 请参见下图中的 ①。该指令返回服务器方法对应的句柄。① 用于准备方法调用的指令 ② 方法调用 ③ 完成方法调用后用于进行“清理”的指令“OPC_UA_MethodGetHandleList”的参数 表格 4-83“OPC_UA_MethodGetHandleList”指令的参数 参数 区域中的声明 数据类型 含义 REQ Input BOOL参数中的上升沿 0 → 1 可触发指 令的执行。 ConnectionHdl Input DWORD 已建立连接的唯一标识符。可使用指令“AUTOHOTSPOT”获 取句柄。 NodeIDCount Input UINT ObjectNodeIDs 或MethodeNodeIDs 参数中元素的 数目 ObjectNodeIDs InOut VARIANT 指向包含AUTOHOTSPOT 类型元 素的数组的指针。 该数组包含方法所在对象(文件 夹)的节点 ID(NodeIDs)。MethodNodeIDs InOut VARIANT 指向包含 AUTOHOTSPOT 类型元 素的数组的指针。该数组包含从服务器为其请求句 柄的相应方法的节点 ID (NodeIDs)。 Timeout Input TIME指令执行的Zui长时间(单位为毫 秒)。有关该参数的说明,另请 参见“AUTOHOTSPOT”。 NamespaceIndexCountInput UINT 参数 NamespaceIndexes 中数组 元素的数量。 NamespaceIndexes InOutVARIANT 指向 UINT 类型的数组的指针。 如果 NamespaceIndexCount 参 数(NamespaceIndexCount = 0). 中没有任何元素,则不需要此 参数。 该数组用于为 NodeIDs 参数中的命名空间索引分配新的索引。 示例: 如果 NamespaceIndexes[4] 包 含数值 10,则会为“NodeIDs”参数中之前命名空间索引为 4 的所 有 NodeIds 分配命名空间索引 10。 Done Output BOOL 执行的状态: •0:指令的执行中止、尚未完 成或尚未开始 • 1:指令的执行已完成且未出 错 Busy Output BOOL 执行状态参数: •0:指令未在执行 • 1:指令当前正在执行。