首页 > 其他分享 >PLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)

PLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)

时间:2024-09-09 14:29:19浏览次数:10  
标签:__ QUERYPOINTER Derived 接口 运算符 FB BOOL

PLC Structured Text Object Oriented Programming

PLC结构化文本(ST)——接口指针转换运算符(__QUERYPOINTER)

__QUERYPOINTER

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

出于兼容性考虑,需要转换的指针的定义必须是基于__SYSTEM.IQueryInterface的扩展。

官方例程

  • 语法结构

__QUERYPOINTER (<ITF_源>, <Pointer_目标>)
第一个操作数是接口引用或具有所需目标类型的 FB 实例,第二个操作数是指针。

  • 代码示例
    定义两个接口,I_Base扩展__System.IQueryInterfaceI_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

标签:__,QUERYPOINTER,Derived,接口,运算符,FB,BOOL
From: https://www.cnblogs.com/JSheng/p/18404471

相关文章

  • Prometheus告警从触发到收到通知延迟在哪
    Prometheus的告警机制涉及多个步骤,从触发到收到通知的过程可能会遇到延迟。这些延迟主要来自以下几个方面:1.规则评估延迟评估周期:Prometheus会在配置的时间间隔内评估告警规则(通常是每1分钟)。如果在这个周期内没有检测到触发条件,告警将不会被触发。数据拉取延迟:Prometheu......
  • 外链建设周期:合理规划周期,确保外链持续有效
    外链建设是提升网站权重与排名的重要手段,外链建设并非一蹴而就的过程。为了确保外链的持续有效性,需要合理规划建设周期。一、什么是外链建设周期外链建设周期是指在一定时间内,针对目标网站进行外链优化的具体规划和实施活动,包括建立外链资源库、外链分析、外链清理、外链发布等......
  • thanos rule组件和prometheus区别
    ThanosRuler和Prometheus在功能上有一些相似之处,但它们在设计目的、功能和使用场景上存在显著区别。以下是对这两个组件的详细比较:1.设计目的ThanosRuler:作为Thanos生态系统的一部分,ThanosRuler旨在提供高可用性和跨多个数据源的规则评估和告警功能。它可以与多......
  • ReentrantLock-可重入锁
    ReentrantLock是Java并发包java.util.concurrent.locks中的一个类,它实现了Lock接口,提供了一种与Synchronized方法和语句相同的基本行为和语义的互斥锁,但具有更多的扩展功能。主要特点可重入性与synchronized关键字一样,ReentrantLock允许同一个线程多次获得锁,而不会发生死锁......
  • 中移ML307A(4G Cat1,C-SDK,OpenCPU)模组学习开发-使用i2c采集sht30温湿度数据
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ML307A_OPEN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  测试1,把文件拷贝到自己工程的 ......
  • 告警架构高可用怎么做
    实现告警架构的高可用性(HighAvailability,HA)是确保监控系统可靠性和稳定性的关键。以下是一些实现Prometheus和Alertmanager高可用性的最佳实践:1.Prometheus高可用性1.1使用多个Prometheus实例部署多个Prometheus实例:可以在不同的服务器上部署多个Prometheus实......
  • 华为笔试0828 元素消除
     第二题题目:元素消除给定一个整数数组nums,同时给定一个整数interval。指定数组nums中的某个元素作为起点,然后以interval为间隔递增,如果递增的数(包含起点)等于nums中的元素,则将数组nums中对应的元素消除,返回消除元素最多的起点元素。如果消除的元素同样多,则返回最小的起点元素。......
  • 告警抑制怎么做
    告警抑制(AlertSuppression)是Prometheus和Alertmanager中的一种机制,用于防止在特定条件下重复发送相同的告警通知,减少干扰和告警疲劳。以下是如何实现告警抑制的几种方法:1.使用告警抑制规则在Alertmanager中,可以使用告警抑制规则来定义何时应该抑制特定的告警。抑制规则......
  • 注意logback的日志配置
    背景是,接手了一个其他项目,结果某天突然测试环境不能启动了。    日志也看不出来内容,结果发现是logback日志没有配控制台打印,结果k8s的pod启动时看不到日志。日志写到文件,但是pod启动成功前又看不了文件。所以,日志加入控制台的配置非常关键。<appendername......
  • 监控四个黄金指标
    监控四个黄金指标(FourGoldenSignals)是用于评估和监控分布式系统性能和健康状况的关键指标。这四个指标是:1.延迟(Latency)定义:延迟是指系统处理请求所需的时间,通常以毫秒或秒为单位衡量。重要性:高延迟可能导致用户体验下降,影响应用的响应能力。监控方法:监测请求的平均响应......