PLC结构化文本(ST)——接口指针转换(__QUERYPOINTER)
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)——接口指针转换(__QUERYPOINTER)
__QUERYPOINTER
运算符__QUERYPOINTER
是IEC61131-3
的扩展,该运算符允许在运行时将功能块的接口引用转换为指针。返回值BOOL
类型:True
表示转换成功,Flase
表示转换失败。
出于兼容性考虑,需要转换的指针的定义必须是基于
__SYSTEM.IQueryInterface
的扩展。
官方例程
- 语法结构
__QUERYPOINTER (<ITF_源>, <Pointer_目标>)
第一个操作数是接口引用或具有所需目标类型的 FB 实例,第二个操作数是指针。
- 代码示例
定义两个接口,I_Base
扩展__System.IQueryInterface
,I_Derived
扩展I_Base
。
INTERFACE I_Base EXTENDS __System.IQueryInterface
METHOD Base : BOOL
INTERFACE I_Derived EXTENDS I_Base
METHOD Derived : BOOL
定义功能块FB_Variante
实现I_Derived
接口。
FUNCTION_BLOCK FB_Variante IMPLEMENTS I_Derived
METHOD Base : BOOL // 接口方法
METHOD Derived : BOOL // 接口方法
METHOD Run : BOOL // FB_Variante额外添加一个方法
主程序Main
调用。
PROGRAM MAIN
VAR
iDerived : I_Derived;
fbVariante : FB_Variante;
bResult : BOOL;
bTest : BOOL;
pFB : POINTER TO FB_Variante;
END_VAR
//__QUERYPOINTER
iDerived := fbVariante;
bResult := __QUERYPOINTER(iDerived, pFB); // bResult : True
IF bResult THEN
bTest := pFB^.Derived();
pFB^.Run();
END_IF
上述例程中,转换成功之后的指针仍然可以调用FB_Variante
功能块Run
方法,由此可以看出运算符__QUERYPOINTER
应该是将接口iDerived
的实例地址给到了指针pFB
,所以指针可以正常使用接口定义以外的方法。
总结
以上例程改编自倍福在线帮助文档:https://infosys.beckhoff.com/index_en.htm
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验