本帖最后由 荣琪 于 2021-7-17 12:07 编辑
荣小菜补钙记第40期:基于labview Actor Framework的连续测量和记录系统4 同步更新于 WeChat:荣小菜在补钙
欢迎关注 内容更丰富
大家好,我是荣小菜,也可以叫我Richie,本期终于回到系列的讲解啦,建议阅读本期前先回顾一下前面的33~35期。
1. 简介
系统的Top Level设计如下,和第28期(非AF无Class,推荐新人学习)类似,简单的插件式架构。增加了项目树,各“Function”启动后将记录在“项目树”中,可在项目树中切换后台运行的Function。Function可重复调用,对于想要同时测试多个同型产品的突发需求,只需要多打开几次Function即可。 TopLevel效果图
UI设计方法和第28期差别不大,都是使用分隔栏进行设计,只是在对话框和控件样式上做了一些优化。
2. Top Level核心1-启动各Function
本系统的核心之一是如何根据按下的控件来启动对应的NActor,这里的逻辑是按下按钮,根据按钮的标题String进行映射,得到对应自定义枚举类型Vi Name(该类型作为条件较为方便),之后根据Vi Name启动对应NActor。
单击对应Function按钮
启动NActor
需要注意的是,这里我们将一个用户事件Msg写入将要启动的NActor中,该Msg主要是方便NActor通知Top Level本身的启停状态。除了用户事件,使用AF架构的Message也是可以的,这里为了以后可能兼容非OOP架构。
3. Top Level核心2-各Function的Msg处理
当NActor启动/退出后,会产生Msg用户事件,将相应的Msg数据上传,我们在Top Level中对其进行处理,Msg Hadle Vi如下图所示,当NActor启动后发送已启动Msg,MsgHandle将对应的Name、ID、VI Ref和 NActor Enqueuer写入,并更新项目树和子面板。
MsgHandle 已启动
同样的,当NActor退出时,我们将其对应的Name、ID、VI Ref和NActor Enqueuer删除并再次更新项目树和前面板。注意,本程序中IDNum是唯一标识,因此我这里我们使用ID Num获得删除索引。
MsgHandle 已退出
4. 项目树更新
在Msg Hadle中我们使用该函数更新项目树,程序很简单,就是清空项目树后按名称重新添加项。通过Glyph Index我们可以选择各种项目符号,我这里默认设为5。
项目树更新
5. 子面板更新
最后介绍一下子面板更新Vi,由于将哪个Vi刷新至子面板中是根据用户在项目树中的选择决定的,因此这里我们通过项目树的值来索引Vi Ref。注意,由第3,4节可知,项目树的各项由名称决定,而名称是由NActor Name(枚举)和ID Num决定的,NActor Name(枚举)和ID Num又与Vi Ref都是按顺序写入或删除。因此,项目树Value所在位置就是该NActor对应的Vi Ref。
子面板更新
6. 总结
本期基本介绍完了Top Level里的TopActor的各项功能。宏观上讲,Top Actor只负责调用各NActor(或者说各功能块)并对其启停Msg进行处理,不具备任何具体功能。具体什么功能,如连续测量和记录,需要在NActor里实现,这保证了Top Actor是一个独立的、可复用的大框架。
庆祝一下,"荣小菜在补钙"公众号的关注人数终于要满100啦。
Actor Framework,期望各位大神分享更多实用资料^_^