GetInstancePath: 查询块实例的复合全局名称 (S7-1200, S7-1500) 说明 可以使用“GetInstancePath”指令在函数块中读取块实例的组合全局名称。使用多个实例时, 块实例的组合全局名称是完整调用层级的路径。 说明 OB 中的直接调用 在 OB 中,不能直接调用“GetInstancePath”指令。 说明 代码存储器空间需求大幅增加 使用 GetInstancePath 将导致代码存储器空间需求大幅增加。名称越长,则参数编号越大, 所需存储器空间越多。 说明 运行时间延长 由于要准备符号信息,使用“GetInstancePath”会导致程序运行时间显著延长。此外,运行时 间延长在很大程度上取决于调用“GetInstancePath”时调用堆栈上的块数:运行时间延长在很 大程度上取决于调用“GetInstancePath”时调用堆栈上的块数: 因此,强烈建议不要循环调用“GetInstancePath”。可以在发生过程错误时进行错误检测或在 启动例程中进行调用。
在以下示例中,在 FB_Level_3 函数块中调用“GetInstancePath”指令。 • FB_Level_3 函数块将其数据存储在 FB_Level_2 调用函数块中。 • FB_Level_2 函数块将其数据存储在 FB_Level_1 调用函数块中。 • FB_Level_1 函数块将其数据存储在 IDB_LEVEL_1 背景数据块中。通过使用多个实例, FB_Level_1 的背景数据块可包含三个函数块的所有数据。在本示例中,“GetInstancePath”指令将返回以下值: SIZE GetInstancePath 返回 说明 1 '...' • WSTRING 的第一个字符:' • 被截断名称的标识符:... • WSTRING 的Zui后一个字符:' 2 '"...' • WSTRING 的第一个字符:' • 名称的第一个字符和被截断名称的标识符:"... • WSTRING 的Zui后一个字符:' 3 '"I...' • WSTRING 的第一个字符:' • 名称的前两个字符和被截断名称的标识符:"I... • WSTRING 的Zui后一个字符:'SIZE GetInstancePath 返回 说明 6 '"IDB_...' • WSTRING 的第一个字符:' • 名称的前五个字符和被截断名称的标识符:"IDB_... • WSTRING 的Zui后一个字符:' 0 '"IDB_LEVEL_1".Level_2 _ Instance.Level_3_Insta nce' • WSTRING 的第一个字符:' • 该名称的所有字 符:"IDB_LEVEL_1".Level_2_Instance.Level_3_Inst ance • WSTRING 的Zui后一个字符:' 对于多实例数组中的元素,“GetInstancePath”并不返回下标数值,而是返回符号。 说明 将函数块中的“GetInstancePath”与单个实例一起使用 如果用于调用“GetInstancePath”的函数块在其自身的背景数据块中保存数据,单个实例的名 称将作为全局名称输出。此时,参数 OUT 中的结果与“GetInstanceName (页 2748)”指令相 对应。 参数 下表列出了“GetInstancePath”指令的参数: 参数 声明 数据类型 存储区 说明 SIZE Input DINT I、Q、M、D、L 或 常量 OUT 参数处,输出字符数的限值。 • SIZE > 0:GetInstancePath 返回名称 的前 SIZE 个字符。 • SIZE = 0:GetInstancePath 返回整个 名称。 • SIZE < 0:GetInstancePath 返回名称 的Zui后 SIZE 个字符。 OUT Output WSTRING D、L 读取块实例的全局名称。 如果块实例的全局名称比 WSTRING 的Zui 大长度(254 个字符)长,该名称将被截 断。 有关有效数据类型的更多信息,请参见“有效数据类型概述。示例 在以下示例中,将读取块实例的组合全局名称。 在全局数据块中,创建一个用于存储数据的变量。 创建函数块“SLI_FB_GIP_Level4”,并在该函数块中调用指令“GetInstancePath”。 创建函数块“SLI_FB_GIP_Level3”,并在该函数块中调用指令“SLI_FB_GIP_Level4”。 创建函数块“SLI_FB_GIP_Level2”,并在该函数块中调用指令“SLI_FB_GIP_Level3”。 创建函数块“SLI_FB_GIP_Level1”,并在该函数块中调用指令“SLI_FB_GIP_Level2”。在“OB123”中,执行指令“GetInstancePath”。指令“GetInstancePath”将读取所有函数块的实 例,包括函数块“SLI_FB_GIP_Level4”和 OB123 中的指令调用。在指令“GetInstancePath”的输 出参数“OUT” ("outputPath_Level4FB") 中,这些实例的名称将输出为字符串。根据 “GetInstancePath”操作的输入参数 SIZE 值,该字符串的长度将限制为 80 个字符。GetBlockName:读取块名称 (S7-1200, S7-1500) 说明 可以使用“GetBlockName”指令读取在其中调用指令的块的名称。 • 如果要将块名称的长度限制为特定字符数量,则可在参数 SIZE 处指定Zui大长度。如果名 称被截断,则在该名称的末尾处将标识为字符“...”(Unicode 字符 16#2026)。请注意, 该字符的长度为 1。 在以下示例中,说明了 SIZE 参数的含义。将读取以下块名称:"Level1_gbn"(左右双引 号为名称的一部分。) SIZE GetBlockName 返回 说明 1 '...' • WSTRING 的第一个字符:' • 被截断名称的标识符:... • WSTRING 的Zui后一个字符:' 2 '"...' • WSTRING 的第一个字符:' • 名称的第一个字符和被截断名称的标识符:"... • WSTRING 的Zui后一个字符:' 3 '"L...' • WSTRING 的第一个字符:' • 名称的前两个字符和被截断名称的标识 符:"..."L... • WSTRING 的Zui后一个字符:' 6 '"Leve...' • WSTRING 的第一个字符:' • 名称的前五个字符和被截断名称的标识 符:"Leve... • WSTRING 的Zui后一个字符:' 0 '"Level1_gbn"' • WSTRING 的第一个字符:' • 该名称的所有字符:"Level1_gbn" • WSTRING 的Zui后一个字符:' • 在参数 RET_VAL 处,写入块名称。如果块的名称比 WSTRING 的Zui大长度长,该名称将被 截断。下表列出了“GetBlockName”指令的参数: 参数 声明 数据类型 存储区 说明 SIZE Input DINT I、Q、M、D、L 或常量 RET_VAL 参数处,输出字符数的限值。 • SIZE > 0:GetBlockName 返回名称的前 SIZE 个字符。 • SIZE = 0:GetBlockName 返回整个名称。 • SIZE < 0:GetBlockName 返回名称的Zui后 SIZE 个字符。 RET_VAL Output WSTRING D、L 读取程序块名称 有关有效数据类型的更多信息,请参见“有效数据类型概述在以下示例中,读取块名称。 在全局数据块中创建两个用于存储数据的变量。 互连该指令的参数,如下所示: 在块“SLI_FC_GetBlockName”中,执行指令“GetBlockName”。通过指令“GetBlockName”,读 取块“SLI_FC_GetBlockName”的名称,并在输出参数 RET_VAL(“outputBlockName”)中输出 为一个字符串。根据参数 SIZE(“limitSIZE”)的值“0”,字符串的长度不受限制。GetSymbolForReference:确定间接寻址对象的名称 (S7-1500) 说明 使用“GetSymbolForReference”指令来确定间接寻址对象(通过引用数据类型进行寻址)的 名称。 说明 S7-1500-CPU 固件版本 V3.1 中对象的限制 S7-1500 CPU 固件版本 V3.1 中仅支持数据类型为“DB_ANY”的参考对象。 当对象名称的长度超过“symbol”参数所定义的长度时,使用“size”参数来定义该对象名称缩短 后的长度。名称缩短后,将输出字符“…”(Unicode 字符 16#2026)。请注意,此字符的 长度为 1,返回的符号将缩短。 功能描述 “GetSymbolForReference”为异步执行指令,即,作业执行可跨多次调用。在“execute”参数 中创建上升沿来启动作业执行。 输出参数 busy、done、error 和 status 用于指示作业状态。 另请参见“同步指令和异步指令之间的不同之处 (页 715)” 下表说明了 busy、done 和 error 之间的关系。通过该表格,可以确定 “GetSymbolForReference”的当前状态。过程映像 (S7-1500) UPDAT_PI:更新过程映像输入 (S7-1500) 说明 通过该指令,可更新组态中定义的输入的部分映像分区。 如果对于系统侧过程映像更新,已组态反复发送 I/O 访问错误信号,则所选过程映像将始终 更新。 否则,仅当系统不更新选定的过程映像分区时(即,仅当该过程映像分区未分配给中断 OB 时),才进行更新。 说明 根据组态分配给输入过程映像分区的所有逻辑地址都不再属于 OB 1 输入过程映像分区。 使用“UPDAT_PI”更新过程映像分区时,不能同时使用指令“SYNC_PI (页 2766)”进行更新。 OB 1 输入过程映像的系统更新以及指定给中断 OB 的输入过程映像分区的系统更新与 “UPDAT_PI”调用无关。