PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)
1.PLC结构化文本(ST)——类(Class)2.PLC结构化文本(ST)——方法(Method)3.PLC结构化文本(ST)——接口(Interface)4.PLC结构化文本(ST)——特殊指针(This&Super)5.PLC结构化文本(ST)——继承(inheritance)6.PLC结构化文本(ST)——属性(Property)7.PLC结构化文本(ST)——指针和引用(Pointer&Reference)8.PLC结构化文本(ST)——访问修饰符9.PLC结构化文本(ST)——构造函数(FB_init)10.PLC结构化文本(ST)——变量类型和变量属性11.PLC结构化文本(ST)——临时&静态&实例-变量(TEMP&STAT&INST)12.PLC结构化文本(ST)——数组越界与PLC异常(CheckBounds)13.PLC结构化文本(ST)——异常捕获(__TRY__CATCH)14.PLC结构化文本(ST)——接口指针转换(__QUERYPOINTER)
15.PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)
16.PLC结构化文本(ST)——区域代码折叠(Region)17.PLC结构化文本(ST)——枚举_to_string(to_string)18.PLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)19.PLC结构化文本(ST)——结构体属性外部调用(Issue)20.PLC结构化文本(ST)——AND_THEN & OR_ELSE21.PLC结构化文本(ST)——实例路径属性(attribute 'instance-path')22.PLC结构化文本(ST)——隐式枚举(implicit enum)23.PLC结构化文本(ST)——泛型常量(Generic Constatnt)PLC Structured Text Object Oriented Programming
PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)
__QUERYINTERFACE
运算符__QUERYPOINTER
是IEC61131-3
的扩展,该运算符允许在运行时将一个接口引用转换成另一个接口的引用。返回值BOOL
类型:True
表示转换成功,Flase
表示转换失败。
语法格式
__QUERYINTERFACE(<ITF_Source>,<ITF_Dest>);
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;
Main
主程序调用
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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验