荣小菜补钙记第42期:基于labview Actor Framework的 连续测量和记录系统6(Part1 End)
同步更新于 WeChat:荣小菜在补钙
欢迎关注 内容更丰富
大家好,我是荣小菜,上一期讲解了作为桥梁的Message Trans.class.,本期继续讲解Function Actor,建议阅读本期前先回顾一下前面的33~35和40~41期。 1. 简介-Function Actor
首先,再次回顾一下调用关系。
Top Actor算是一个顶层调用框架,而Function Actor就属于被调用方了,它可以对应到各大功能项。当然,FunctionActor还可以继续细分至小功能项及组件。项目树如下图所示,主要有Msg、Parent Function、Function1和Function2共4个部分。其中,Msg类设计是为了将一些通用的消息封装复用,Parent Function继承于Actor类,没有具体功能,主要是为了将Pre Init和Stop的一些通用功能封装复用。而具体的Function X继承于Parent Function,将实现一些更具体的功能。它们最终将被Top Actor调用并展现在UI中。
项目树
2. Parent Function Actor
我们Parent Function Actor(PFA)作为其它Function Actor(FA)的父类来提供一些公共的方法实现,PFA的工程树与私有数据如下图所示,其中Message Trans.class就是我们上一期讲解的用来组织发送Msg的专用类。
PFA工程树和私有数据
可以看到,PFA主要实现的方法有4个”clear”、”Init”、“PreLaunch Init”和”Stop Core”,前两个是我们自己创建的,后两个本质是继承于Actor类重写的。需要注意的是,PFA没有重写Actor Core,因为PFA本身没有任何具体商业功能。至于Accessor中都是一些私有数据的读写方法,方便后续使用。
首先我们看Pre Launch Init,被调用的Actor将首先执行该函数。程序框图如下,代码主要获取调用方和本身的消息队列,并创建一个用于停止Actor的Stop用户事件(顺利停止的关键)。很明显,本Vi本质上是其它子Function用来继承使用的。
PFA PreLaunch Init
再来看PFA的Stop Core,代码如下,整体比较简单,核心就是Clear(也就是项目树里的那个Clear),主要负责发送停止用户事件和停止Msg(Exited Event.vi在41期已经讲解过),前者用来停止Actor,后者通知调用方Actor已经停止。当然,这种写法不严密,但对于简单的无条件停止Function已经足够。
PFAStop Core和Clear
最后来看PFA的Init函数,主要功能就是通过Loaded Event通知调用方本Actor已经启动,通知需要指定Actor Vi Ref、ID Num、Sender、Receiver。Init.vi一般直接在各FA的Actor Core中调用,各FA可重写它来增加新初始化功能。
PFA Init
3. Function Actor
FA继承于PFA,是实现具体功能的核心,其Actor Core中可包含各种功能代码和GUI。本Demo中含有FA1、FA2,我们先讲解FA2,FA2没有涉及太多功能,比较简单。FA2的工程树如下,主要包含3个Vi,其中Clear和Init是我们重写的。需要注意的是这里虽然没有Pre Launch Init和Stop Core,但这只说明我们没有重写它们,它们依旧会执行父类PFA的代码。
FA2工程树
FA2的Init和Clear函数如下,其中Init里直接调用了父方法(即PFA的Init),而Clear则进行了完全重写(参考PFA的Clear),体现两种重写方式。
FA2Init和Clear
FA2的Actor Core框架代码如下,从左往右看,首先调用FA2的Init函数(通知调用方已经启动),之后读取调用方、自身消息队列(两者在PreLaunch Init中已经获得)和Stop用户事件。最后进入While循环,等待用户操作。
FA2 ActorCore
4. Function Actor 1
FA1相比于FA2则多了更多的功能代码,其UI也经过了一些设计。前后面板如下所示,主要使用分隔栏和一些控件进行了布局,增加了菜单效果(具体实现参考第36,37期)。不过整个框架和FA2类似,就不再多讲。
FA1 Actor Core前面板
FA1Actor Core后面板
需要注意的是,由于增加了菜单功能,FA1的Clear重写时需要记得添加菜单Clear代码。如下图所示。我们今后增加任何功能都可以在该函数中进行扫尾工作。
FA1 Clear
5. 总结
本期详细讲解了PFA和各FA的代码实现,截至本期,”基于LabVIEW Actor Framework的连续测量和记录系统“系列的第一部分就结束了(应该~)。很明显,第一部分主要还是讲解AF的基础使用方法,还未涉及任何”系统”具体功能。
可以预计,本系列将成为”长长长篇小说”,我们将点面结合,逐步讲解测量、记录系统中遇到的各个问题点和解决办法。可以肯定的是,这将不但包含通讯方式、数据结构、执行速度优化、内存优化,数据解析、报表生成、UI美化等一系列技术难点,还将包含需求分析、可复用性、可扩展性设计思路、研制规范、源代码管理规范等一系列开发和管理思想。个人能力有限,欢迎大家共同讨论,不吝赐教。
Actor Framework,期望各位大神分享更多实用资料^_^