首页 > 其他分享 >PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)

PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)

时间:2024-09-09 15:03:02浏览次数:11  
标签:__ 接口 ST FB QUERYINTERFACE BOOL METHOD

PLC Structured Text Object Oriented Programming

PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)

__QUERYINTERFACE

运算符__QUERYPOINTERIEC61131-3的扩展,该运算符允许在运行时将一个接口引用转换成另一个接口的引用。返回值BOOL类型:True表示转换成功,Flase表示转换失败。

语法格式

__QUERYINTERFACE(<ITF_Source>,<ITF_Dest>);
ITF_Source:接口变量或FB实例;
ITF_Dest :目标类型的接口变量。

显式转换的先决条件是 ITF_SourceITF_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

标签:__,接口,ST,FB,QUERYINTERFACE,BOOL,METHOD
From: https://www.cnblogs.com/JSheng/p/18404597

相关文章

  • IIS 屏蔽Help页面和Swagger
    1、MVC屏蔽HelP页面暴露API接口方法:找到目录下的 Areas\HelpPage\Views\Help的Index.cshtml注释如代码中@[email protected]@usingSystem.Web.Http.Description@[email protected]......
  • LLM面试题汇总
    LLM相关LLM基础zeroshot、oneshot、threeshot是什么zeroshot:零样本学习。对于模型没有见过的图像,通过已有的图像和特征相关联,从而判别新的图片fewshot:少样本学习。通过判断测试样本与训练样本的相似性,来推测测试样本属于什么类bf16和fp16有什么区别LLM微......
  • Acrobat下载-Adobe Acrobat软件下载最佳免费办公软件下载指南
    Acrobat下载-Adobe Acrobat软件下载最佳免费办公软件下载指南Acrobat下载-AdobeAcrobat软件下载最佳免费办公软件下载指南在当今数字化时代,办公软件的选择对于提高工作效率至关重要。AdobeAcrobat作为一款功能强大的PDF编辑和管理工具,广泛应用于各行各业。本文将为您提供一份详......
  • 【原理篇】软件设计原则之里氏代换原则
    文章目录概要理解说明案例--正方形不是长方形PartI--不符合LSP正方形(子类)继承长方形(父类)PartI--结论PartII--符合LSP概要里氏代换原则(LiskovSubstitutionPrinciple,LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。理解说明任何父......
  • 网络安全证书备考--信息收集
    信息收集一、域名信息收集1.1、域名介绍域名【DomainName】一串用点分隔的名字组成的internet上某一台计算机/计算机组的名称,在数据传输时标识计算机电子方位。如:www.baidu.com、www.51cto.com等关于edu.51cto.com以及www.51cto.com是该域名下对应的子域名,前面的[edu]、[www]都是......
  • SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与
    查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模......
  • Adobe lightroom-LR-高速下载绿色安装最佳免费办公软件下载指南
    Adobe lightroom-LR-高速下载绿色安装最佳免费办公软件下载指南AdobeLightroom(LR)高速下载绿色安装最佳免费办公软件下载指南引言AdobeLightroom(简称LR)是一款广受欢迎的图像管理和编辑软件,广泛应用于摄影、设计和其他视觉艺术领域。然而,正版软件的高昂价格和复杂的安装过程常......
  • python中的线程锁的了解与学习
    文章目录前言一、python为什么会有GIL?二、GIL和线程锁有什么联系三、线程安全与锁3.1线程安全3.2Lock(一次放生一个)3.3RLock(一次放生一个)3.4BoundedSemaphore(一次放生定值个)3.5Condition(一次放生任意个,可变化)3.6Event(一次放生所有)四、总结前言       ......
  • 案例分析:如何用设计模式优化性能14
    设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。比如,我们在《02|理论分析:性能优化有章可循,谈谈常用的切入点》中提到,I/O模块使用的是装饰器模式,你就能很容易想到I/O模块的代码组织方式。事实上,大多数设计模式并不能增加程序的性......
  • python中的线程池的了解与学习
    文章目录前言一、线程池的使用二、线程池的工作流程三、线程池的优势四、总结前言       线程池是计算机编程中用于管理一组预先创建的线程的机制,这些线程可以被复用以执行多个任务。线程池的主要目的是提高程序的效率和响应性,通过减少线程创建和销毁的开销,......