发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名

如何使用LabVIEW中的Actor Framework结构控制DAQ的连续采集的(以QMH结构为基础,可参见自带项目例程)?

2020-1-18 00:03:53  1217 Actor Framework QMH
分享
7
本帖最后由 shuzhu 于 2020-1-19 15:26 编辑

  程序在借鉴了电子发烧友论坛sushu(如同评论中有提议使用属性来暂停采集,或者使用清空Msg来暂停(AF类中没有提供清空Msg,可以自己编写一个)),本质上与QMH相似。sushu大神的地址参见:http://bbs.elecfans.com/jishu_550049_1_1.html
其次为了更好的理解Actor,有两个文档可以推荐给大家:
(1)TS8445 labview 2012 Advanced Design Templates and Sample Project.pdf(推荐第P13来理解Actor和QMH的相似与不同之处,本例的目的也是在于此);
(2)https://www.docin.com/p-2113014263.html(这篇文章的作者在全网都没有找到);
1、程序整体结构
Launch.vi为程序的入口,这也是一般AF结构的启用方式(个人认为目的是为了启用第一个Actor的根操作者);
UIEvent.lvlib是前面板事件响应操作者,在三级框架中作为事件的收集与分发,此处为了简便只有事件收集循环,没有UI的分发循环(如果以后有时间可以整理一下在QMH中使用的模式);
ConDAQActor.lvlib是模拟连续数采,此处仅用一列作为表示,扩展配置相似此处的各;
1.png
2、程序中两个操作者的动作和响应关系
(1)初始换控件值,恢复为默认值;
(2)点击Initial,进行DAQ采集信息配置;正确为Initial,错误为Initial:Error;
(3)点击Start,DAQ开始,并进入DAQRead;正确为Start,错误为Start:Error;
(4)进入DAQRead循环执行;正确为Read,错误为Read:Error;
(5)点击Pause,DAQ采集任务暂停,方法为清除DAQActor中的所有Msg;正确为Pause,错误为Pause:Error;
(6)点击Stop,DAQ采集任务停止并清除(需要确认是否将DAQStop执行完毕,或者使用StopCore来处理结束时的任务,如清除队列);正确为Stop,错误为Stop:Error。
1.png
3、部分细节介绍
(1)虚拟一个电压采集卡(红色框中替换为自己虚拟的)
1.png
(2)DAQStart-->DAQRead的方法(故先将DAQRead的消息生成,然后再拖入这个循环,DAQRead中给自己发送是相似的)
1.png
(3)DAQRead通过给自己发送消息保证循环下去
1.png
(4)暂停数据采集(与QMH相似,清除队列中的元素,FlushQueue(自带没有,可自己创建,里面的Flush是已有的))
1.png
1.png
(5)其他细节可调试着看,此处不再赘述。
4、一点内容
(1)当时为了解决QMH实现并行循环时,在一个Diagram中有14个并行循环,看起来很麻烦,但毫无疑问的使用QMH调试方便,可跟踪;其次是当UI界面中的控件太多,需要赋值时,使用引用的方式虽然很方便,但要是有所改动或调整,其实会非常麻烦。
(2)基于以上才去找更加合适的框架,故了解了基于OOP的AF框架。
(3)找遍了中文社区的资料,很少,在NI的AF社区中也是集中在2011-2013年之间的资料,最近NIWeek对AF的解释文档很少(其实看AF子vi放置的位置,也可见NI对AF的重视程度)。
(4)如果能通过AF结构实现对DAQ的连续采集控制,那其他的应用也可以进行相应的扩展(与sushu的理解是一致的),其实国外的一些开发者也对如何控制DAQ连续采集有疑问,见https://ekerry.wordpress.com/2013/03/28/designing-a-labview-measurement-system-with-multiple-abstraction-layers/中的评论。
(5)其实我对上面这种操作结构还是有一些介意的,还是倾向与任务分发与任务消息回收的方式来处理。在这个版本前写的一个是每个Actor都采用自己的QMH,来接收来自于UIEvent的信息,做相应的处理,更深一步,UIEvent只需要给其他的Actor发送需要的消息就行,Acto的各Case的执行仍是自己来控制。这种好处在于,离开UIEvent后,各Actor也可以自己执行。
(6)对于AF中类的继承等特点还是建议在具体编写程序时进行提炼和规整。
(7)关于Actor的停止问题,可以参见:
(8)关于LabVIEW自带的两个例程,有自己的使用特点,但对于一些场景的使用还要具体的对待,我对TimedLoop.lvclass尤其的不解。
5、写在最后
   本例只在于如何理解Actor,一点点,AF的其他特性和细节可以到NI的AF社区查找更多的资源。编写程序时,有时是我们不知道有这个功能或者还可以这样用,希望都可以在遇到问题时不懈努力。
在最后找资料的时候,竟然有这个(以前没发现):https://zhuanlan.zhihu.com/p/100469957(粗览一下,作者很厉害),原来是最近才整理的。
有写的不恰当的地方还请批评指正。

1.png

TS8445 LabVIEW 2012 Advanced Design Templates and Sample Project.pdf

下载积分: 积分 -1 分

1.45 MB, 下载次数: 21, 下载积分: 积分 -1 分

类练习9.rar

下载积分: 积分 -1 分

1017.05 KB, 下载次数: 14, 下载积分: 积分 -1 分

评分

参与人数 1积分 +5 收起 理由
Elecfans管家 + 5 您的帖子很精彩,期待您分享的下一个帖子!

查看全部评分

shuzhu 2020-1-18 00:09:24
LV版本:2016
NI官网上有一个如何停止Actor的解释文档,居然找不到了。
回复

举报

GeorgeSun 2020-1-18 11:19:51
支持作者。AF国内的资料还是少,有能力的朋友们多去英文论坛逛逛。
回复

举报

weizuqiang 2020-1-18 17:17:26
作者厉害,只是图片看不到
1回复

举报

  • shuzhu 2020-1-19 15:16

    抱歉,我还以为我的浏览器有问题刷不出图片,已更新,等待审核后应该就可以看了。

weizuqiang 2020-1-19 20:37:09
谢谢  认真研读吸收营养。
回复

举报

yk8356993 2020-1-20 16:50:10
6666666666666666666666666
回复

举报

shemin1992 5 天前
厉害了,感谢分享
回复

举报

iyanggui 4 天前
厉害了,感谢分享
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /6 下一条

快速回复 返回顶部 返回列表