这个操作不是标准的 IEC 61131-3 提供。
在运行系统中 __QUERYPOINTER 被分配给一个无类型指针的相关实例。操作返回一个 BOOL 类型的结果。如果为 TRUE 表示转化过程成功处理。
提示! 由于兼容性的原因内部接口相关的定义必须是一个基本的 __SYSTEM.IQueryInterface 接口的扩展并且编译器版本必须 >= 3.3.0.20。 |
语法:
__QUERYPOINTER (<ITF_Source>, < Pointer_Dest>)
第一个操作数需要接口参考或者一个内部类型的功能块实例,第二个参数是一个未知类型的指针。经过 __QUERYPOINTER 的处理指针 _Dest 将会指向内部接口相关的接口地址。在这种情况下转化成功处理并且操作的结果返回 TRUE。在其他情况下操作返回 FALSE。 Pointer_Dest 是一个未知类型并且可以被转化为任何类型。当前的类型必须被编程系统允许。例如实例将提供一个方法返回一个类型代码。
一个明确转化的前提是 ITF_Source 是一个 __System.IQueryInterface 接口的扩展。这个接口是内部提供并且不需要函数库支持。
示例
INTERFACE Itf EXTENDS __System.IQueryInterface FUNCTION_BLOCK FBVariant IMPLEMENTS ITF METHOD m1 : BOOL VAR END_VAR m1 := TRUE; END_METHOD
PROGRAMM POU VAR itf1 : Itf; insV : FBVariant; xResult, xTest : BOOL; pVar: POINTER TO FBVariant; END_VAR itf1 := insV; xResult := __QUERYPOINTER(itf1, pVar); IF xResult THEN xTest := pVar.m1(); END_IF