[LabVIEW随笔-8] -Actor Framework框架学习2
1.Actor Framework演变
1.1 将之前的MHL进行修改,首先将错误处理修改为单独的子VI,并重命名MHL类为Actor类

1.2 将Actor类的私有数据变为两个队列引用,在Actor.vi当中"创建队列引用"输出的队列引用绑定至私有数据的"自己的消息队列"

1.3 将循环体创建子VI,命名为Actor Core.vi

1.4 将该Actor.vi修改为"可重入"
2、LabVIEW异步调用
若通过子VI节点或通过引用调用节点以标准方式调用一个VI,数据流在被调用节点处暂停直到子VI返回结果。然后数据流从节点的输出端继续。
异步调用VI时,子VI运行的同时数据流仍然在调用方中继续。如调用方VI不是立即需要子VI的执行结果,就可考虑异步调用子VI
2.1 异步调用实现步骤:
2.1.1 准备异步调用的VI引用
使用打开VI引用函数获取VI引用,并通过异步选项标识(0x80, 0x100)作为选项输入的一部分。该步骤是让LabVIEW为异步调用分配资源
“打开VI引用”函数的“类型说明符VI引用句柄”端口,传入的必须是严格类型的VI引用;
“打开VI引用”函数的“选项”端口,需要传入“0x80”选项标签,表明将要开始的是异步调用;
0x80:异步调用不收集结果,开始异步调用节点的目标是开始一个VI调用,但是不等待被调VI执行结束,自然也无法访问其输出
0x100:异步调用收集结果,即等待异步调用结束,然后返回结果。使用“0x100”选项标签时,需要同时使用到如下两个函数(开始异步调用,等待异步调用)
0x40:如需要多次使用“开始异步调用”节点调用可重入子VI的多个副本,并行运行,则可以设置此标签。注意:0x40选项标签调用的子VI 必须是可重入的,且共享同一个副本。
2.1.2 开始异步调用
将VI引用连接至开始异步调用节点,开始调用子VI。当子VI运行时,数据流继续在调用方VI中执行
2.1.3 获取异步VI调用的结果
如应用程序需要异步调用的子VI的输出结果,将VI引用连接至等待异步调用节点以收集结果。等待异步调用节点等待相关子VI执行完毕直到超时。
开始异步调用节点将输入参数传递至目标VI
等待异步调用节点访问目标VI的输出,一个负责输入,一个负责输出;
2.1.4 关闭VI引用
使用关闭引用函数告知LabVIEW使用VI引用已完毕。LabVIEW将释放相关资源。
2.2 异步调用Actor.vi

目前Actor.vi内部的队列引用没办法使用,故需要处理一下
2.2.1 创建数据类型为"队列引用"的队列,并将其嵌套队列引用作为Actor.vi的输入

图1 Message类队列引用入到嵌套队列当中

图2 创建数据类型为队列的队列,并将其作为Actor.vi输入
为使其得到服用,可以将Actor类作为父类输入参数,后续可使用其子类作为输入参数可动态调用VI

2.2.3 测试操作者
发送停止消息:

创建Actor子类,并重写Actor Core:
重写Actor Core.vi


2.4 小结
创建Actor逻辑步骤:
1、创建数据类型为"队列引用"嵌套队列
2、创建数据类型为"Message类"的队列引用,并将其作为数据入嵌套队列当中
3、同时将"Message类"的队列引用绑定至"Actor类.自己的调用队列"当中
4、根据不同的Actor对象选择不同的Actor Core方法
5、Actor Core将"Actor对象.自己的消息队列"出队列(若没有消息则不会出队列)
6、根据不同"Message"对象执行不同Do方法
浙公网安备 33010602011771号