PLC Structured Text Object Oriented Programming
PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)
__QUERYINTERFACE
运算符__QUERYPOINTER是IEC61131-3的扩展,该运算符允许在运行时将一个接口引用转换成另一个接口的引用。返回值BOOL类型:True表示转换成功,Flase表示转换失败。
语法格式
__QUERYINTERFACE(,);
ITF_Source:接口变量或FB实例;
ITF_Dest :目标类型的接口变量。
显式转换的先决条件是 ITF_Source 和 ITF_Dest 都是 __System.IQueryInterface 的派生。这与使用运算符__QUERYPOINTER条件类似。
官方例程
- INTERFACE I_Base EXTENDS __System.IQueryInterface
- METHOD BaseMethod : BOOL
复制代码- INTERFACE I_Sub1 EXTENDS I_Base
- METHOD SubMethod1 : BOOL
复制代码- INTERFACE I_Sub2 EXTENDS I_Base
- METHOD SubMethod2 : BOOL
复制代码- INTERFACE I_Sample EXTENDS __System.IQueryInterface
- METHOD SampleMethod : BOOL
复制代码- FUNCTION_BLOCK FB_1 IMPLEMENTS I_Sub1
- METHOD BaseMethod : BOOL
- BaseMethod := TRUE;
- METHOD SubMethod1 : BOOL
- SubMethod1 := TRUE;
复制代码- FUNCTION_BLOCK FB_2 IMPLEMENTS I_Sub2
- METHOD BaseMethod : BOOL
- BaseMethod := FALSE;
- METHOD SubMethod2 : BOOL
- SubMethod2 := TRUE;
复制代码- FUNCTION_BLOCK FB_3 IMPLEMENTS I_Base, I_Sample
- METHOD BaseMethod : BOOL
- BaseMethod := FALSE;
- METHOD SampleMethod : BOOL
- SampleMethod := FALSE;
复制代码- PROGRAM MAIN
- VAR
- fb1 : FB_1;
- fb2 : FB_2;
- fb3 : FB_3;
- iBase1 : I_Base := fb1;
- iBase2 : I_Base := fb2;
- iBase3 : I_Base := fb3;
- iSub1 : I_Sub1 := 0;
- iSub2 : I_Sub2 := 0;
- iSample : I_Sample := 0;
- bResult1 : BOOL;
- bResult2 : BOOL;
- bResult3 : BOOL;
- bResult4 : BOOL;
- bResult5 : BOOL;
- END_VAR
复制代码- // 结果: bResult1 = TRUE 由于转换成功 => iSub1 references fb1
- // 解释: iBase1引用实现接口I_Sub1的FB_1类型的对象fb1
- bResult1 := __QUERYINTERFACE(iBase1, iSub1);
-
- // 结果: bResult2 = FALSE 由于转换不成功 => iSub2 = 0
- // 解释: iBase1引用FB_1类型的对象fb1,该对象不实现接口I_Sub2
- bResult2 := __QUERYINTERFACE(iBase1, iSub2);
-
- // 结果: bResult3 = FALSE 由于转换不成功 => iSub1 = 0
- // 解释: iBase2引用FB_2类型的对象fb2,该对象不实现接口I_Sub1
- bResult3 := __QUERYINTERFACE(iBase2, iSub1);
-
- // 结果: bResult4 = TRUE 由于转换成功 => iSub2 references fb2
- // 解释: iBase2引用实现接口I_Sub2的FB_2类型的对象fb2
- bResult4 := __QUERYINTERFACE(iBase2, iSub2);
-
- // 结果: bResult5 = TRUE 由于转换成功 => iSample references fb3
- // 解释: iBase3引用实现接口I_Sample的FB_3类型的对象fb3
- bResult5 := __QUERYINTERFACE(iBase3, iSample);
复制代码 总结
倍福官方在线帮助助手查看上述例程:https://infosys.beckhoff.com/index_en.htm
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |