【LabVIEW面向对象】ActorFrame操作者架构可重写VI的使用方法

       本文介绍Actor Framework(下文简称“AF”)中可重写方法的主要作用和使用方法,即这些方法什么情况下需要重写,重写的他们能干什么。

       以LabVIEW2020为例,AF支持7个可重写的VI:

Pre Launch Init.vi[启动前初始化]:

AF保证Pre Launch Init在Actor启动后首先执行,一般用于初始化私有数据。Pre Launch Init.vi[启动前初始化] 与 Stop Core.vi[停止核心] 这两个方法一般成对重写。

重写此VI应注意以下几点:

A、此方法内不可以启动其他操作者,否则会造成程序锁死。

B、此方法可以使用“获取当前类带入队列”函数给自己发消息。发送的消息会存在自己的消息队列中,因为此时Actor Core还没有执行,无法处理你发送的消息,待本VI运行完毕,Actor Core执行后会有限处理这里发送的消息。注意,这里不能发送需要答复的消息,否则会锁死。

C、可以把启动其他操作者的程序写在VI里并创建消息,在Pre Launch Init.vi中发送此消息到自身消息队列。

Stop Core.vi[停止核心]:

AF架构确保Stop Core在Actor即将关闭时最后执行,一般用于释放私有数据引用。

Receive Message.vi[接收消息]

这个方法在每次Actor执行消息时的前和后执行。举个例子,我们的Actor私有数据里添加一个“当前消息”的私有数据,我们希望这个当前消息用于存储当前正在运行的消息本身。

再举个不是很恰当的例子,我们想让Actor的所有错误无效,直接断开error out,错误就传不出去了。(应用中不要这么做,这回导致Actor关不掉)

Handle Error.vi[错误处理]

当消息执行时有“error out”输出时执行此VI。这里要注意,Actor默认的方法,所有error只要发生,Actor就会停止。如果某个错误你不想停止Actor,则Stop actor?和error out的值都要修改。但是不能直接断开error out和stop actor?,因为Actor停止也是通过一个特定的error实现的,断开这两个接端会导致Actor无法停止。

Handle Last Ack Core.vi[处理最近一次确认_核心]

这个方法用的比较少,也比较难理解。简单的解释,当Actor A使用“启动嵌套操作者”这个函数调用了另一个Actor B,如果Actor B自己停止了(此时Actor A还没停止),在“临死”之前最后一口气的时候会触发Actor A的这个方法。

 

这里来个延伸解释,LabVIEW的Actor面板里有两个停止函数,分别是标准定制和紧急停止。这两个函数有什么区别呢?

比如,Actor A调用Actor B,Actor B调用 Actor C。

对B标准停止:只停止自己和自己下层的Actor。B和C都停止。

对B紧急停止:会把上层的所有Actor一起停止。A B C都停止。

这里面紧急停止之所以可以把A也停止掉,就是靠Handle Last Ack Core.vi[处理最近一次确认_核心]实现的。感兴趣的可以看一下AF的源码。

 

Substitute Actor.vi[替换操作者]

额…新出的,没用过。

Actor Core.vi[操作者核心]

这个方法不多讲,是AF最常用的核心。这里只强调一点,大家好好体会。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值