“OPC_UA_NamespaceGetIndexList”的参数 表格 4-75“OPC_UA_NamespaceGetIndexList”指令的参数 参数 区域中的声明 数据类型 含义 REQ InputBOOL 参数中的上升沿 0 → 1 可触发指令的执行。 ConnectionHdl Input DWORD 已建立连接的唯一标识符。可使用指令“OPC_UA_Connect:创建连 接 (页 5741)”获取句柄。 NamespaceUrisCou ntInput UINT NamespaceUris 参数中的命名空间数目 NamespaceUris InOut VARIANT 指向STRING 或 WSTRING 类型的数组的指 针。 该数组中包含待请求索引的各个命名空间 的 URIs。 TimeoutInput TIME 指令执行的Zui长时间(单位为毫秒)。 另请参见“OPC_UA_Connect:创建连接(页 5741)”中该参数的具体说明。 StatusList InOut VARIANT 指向 DWORD类型数组的指针(可选)。 该数组中包含各个命名空间的错误代码。 对于各个命名空间,系统指定是否可找到 相应索引。NamespaceIndexes InOut VARIANT 指向 UINT 类型的数组的指针。 该数组包含从 OPC UA服务器请求的各个 命名空间的索引。 Done Output BOOL 执行的状态: • 0:指令的执行中止、尚未完成或尚未 开始 •1:指令的执行已完成且未出错 Busy Output BOOL 执行状态参数: • 0:指令未在执行 •1:指令当前正在执行
在上图中,尚未包含该指令的参数。指令“OPC_UA_NamespaceGetIndexList”用于准备与 OPC UA 服务器的数据交换,请参见下图 中的 ①。要读取或写入 PLC 变量或者调用一个方法,需要确定该 PLC 变量所在命名空间的索引。该索 引是 OPC UA 服务器地址空间中此PLC 变量地址的一部分 (NodeId)。 该指令将返回一个包含 OPC UA 服务器命名空间索引的列表。使用“OPC_UA_NodeGetHandleList”指令发送读取和写入作业时,需要使用该列表请求 NodeID。①准备读取和写入操作的指令 ② 读取和写入指令 ③ 完成读取或写入操作后释放资源的指令OpcUa_BadOutOfMemory 无OPC UA 客户端可用的内 存。 由于 OPC UA 客户端和 OPC UA 服务器共用存储区,应 降低服务器的存储区要求。此时,可执行以下操作: • 为 OPC UA 释放少量 PLC 变量。 • 减少当前连接到服务器 的 OPC UA 客户端的数 量。• 设置更少的订阅。与相应 ConnectionHdl 的连 接处于“ShutDown”状态 (连接终止)。连接/会话无法自动“重新激活”。可能 的原因:会话已从服务器上 删除,例如由于重启或超时 等原因。 在这种情况下,必须通过指令“OPC_UA_Disconnect”明 确关闭连接并释放连接 资源。在用户程序中,必须 复位已对此连接无效的ConnectionHdl。 随后必须与服务器建立新的 连接(参见指令 “OPC_UA_Connect”)。BadInvalidState 与相应 ConnectionHdl 的连 接处于“ConnectinError”状态(临时连接错误,连接中 断)。CPU 尝试“重新激 活”连接。如果在设定的超 时间隔 (OPC UA SessionTimeout) 内未成功激活连 接,连接会进入“Shutdown” 状态。状态转换要求:CPU 可访问 OPC UA 服务器以检查会话是否仍处于活动状 态。 PLCopenUA_Bad_ConnectionInvalidH dl 连接句柄(ConnectionHdl) 无效/未知。 参见 “OPC_UA_ConnectionGetStatus:读取连接状态下文中将介绍如何使用该指令此部分根据程序示例介绍指令“OPC_UA_NamespaceGetIndexList”在与 OPC UA 服务器交换数据的程序中的使用方法。 要求 以下说明假定: • 已创建了一个客户端接口,参见“AUTOHOTSPOT”。 •在该客户端接口的属性中,已组态了一个与 OPC UA 服务器的连接,参见 “AUTOHOTSPOT”。使用“OPC_UA_NamespaceGetIndexList”指令必须满足以下要求: • 提供与 OPC UA服务器建立连接的句柄。 通过调用指令“OPC_UA_Connect:创建连接 (页 5741)”,获取连接句柄。 指令的功能对于数据交换,用户需要命名空间的索引,其中包含要使用程序读取或写入的变量。 还需要包含用于调用方法的方法的命名空间的当前索引。 通过OPC UA 服务器,基于 OPC UA 规范添加新的命名空间或忽略命名空间时,命名空间与 关联索引之间的分配不固定并且可更改。在使用“OPC_UA_NodeGetHandleList”指令获得节点句柄时,需要从 OPC UA 服务器请求获得当前的索引。为此,可使用指令“OPC_UA_NamespaceGetIndexList”。指令会返回哪些信息?该指令返回以下信息: • 各个命名空间的索引的列表(“NamespaceIndexes”参数)。索引顺序对应于“NamespaceUris”参数中的命名空间的顺序。 • 错误消息列表(“StatusList”参数)。此列表中的每条错误消息与“NamespaceUris”参数中的对应命名空间相关。对于各个命名空间,可检查是否可以成功返回相应命名空间的索引。 使用 UaExpert 确定命名空间及其索引要使用该指令,必需确定该命名空间的 URI(统一资源标识符)。通过 UaExpert,可确定命 名空间的 URI以及命名空间的索引,如以下示例所示:如何使用客户端接口? 1. 在“项目树”(Project tree) 区域中,选择作为客户端的CPU。 2. 在“程序块”(Program blocks) 文件夹中,选择将包含客户端指令的函数块。在该示例中,函数块名为“ReadFromProductionline”。 选择的语言:SCL 3.使用拖放功能将“OPC_UA_NamespaceGetIndexList”指令从“指令 > 通信 > OPC UA> OPC UA 客户端”(Instructions > Communication > OPC UA >OPC UA Client) 文件夹移到编辑器。 4. 选择该调用,作为多重实例。 STEP 7创建该指令的实例并将其命名为“OPC_UA_NamespaceGetIndexList_Instance”。 5.在“OPC_UA_NamespaceGetIndexList_Instance”指令中,单击图标“开始组态”(Startconfiguration)。 STEP 7 随即在巡视窗口中打开“组态”(Configuration) 选项卡。 6. 在“选择用于OPC UA 接口的客户端接口”(Select client interface for OPC UA interface) 下,选择要为指令使用的客户端接口。 在该示例中,客户端接口名为“Productionline”,请参见“AUTOHOTSPOT”。 STEP7 现在将自动为指令参数提供已为客户端接口组态的值。 7. 单击“块参数”(Blockparameters),将变量手动分配给剩余参数 REQ、Busy、Done、 Error、Status。 STEP 7会将所选变量添加到函数调用中。