发 帖  
原厂入驻New
[文章]

荣小菜补钙记第42期:基于LabVIEW Actor Framework的连续测量和记录系统6(Part1 End)

2021-8-15 09:49:35  3285 labview ActorFramework
分享
4
荣小菜补钙记第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中。
Function Actor 项目树.JPG
                              
项目树
2.     Parent Function Actor
我们Parent Function Actor(PFA)作为其它Function Actor(FA)的父类来提供一些公共的方法实现,PFA的工程树与私有数据如下图所示,其中Message Trans.class就是我们上一期讲解的用来组织发送Msg的专用类。
Parent Function工程树和数据结构.JPG

PFA工程树和私有数据
可以看到,PFA主要实现的方法有4个”clear”、”Init”、“PreLaunch Init”和”Stop Core”,前两个是我们自己创建的,后两个本质是继承于Actor类重写的。需要注意的是,PFA没有重写Actor Core,因为PFA本身没有任何具体商业功能。至于Accessor中都是一些私有数据的读写方法,方便后续使用。
首先我们看Pre Launch Init,被调用的Actor将首先执行该函数。程序框图如下,代码主要获取调用方和本身的消息队列,并创建一个用于停止Actor的Stop用户事件(顺利停止的关键)。很明显,本Vi本质上是其它子Function用来继承使用的。
PFA_Pre Init.JPG
PFA PreLaunch Init
再来看PFA的Stop Core,代码如下,整体比较简单,核心就是Clear(也就是项目树里的那个Clear),主要负责发送停止用户事件和停止Msg(Exited Event.vi在41期已经讲解过),前者用来停止Actor,后者通知调用方Actor已经停止。当然,这种写法不严密,但对于简单的无条件停止Function已经足够。
PFA_Stop Core.JPG
PFAStop Core和Clear
最后来看PFA的Init函数,主要功能就是通过Loaded Event通知调用方本Actor已经启动,通知需要指定Actor Vi Ref、ID Num、Sender、Receiver。Init.vi一般直接在各FA的Actor Core中调用,各FA可重写它来增加新初始化功能。
PFA_Init.JPG

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工程树.JPG
FA2工程树
FA2的Init和Clear函数如下,其中Init里直接调用了父方法(即PFA的Init),而Clear则进行了完全重写(参考PFA的Clear),体现两种重写方式。
FA2_Init和Clear.JPG
FA2Init和Clear
FA2的Actor Core框架代码如下,从左往右看,首先调用FA2的Init函数(通知调用方已经启动),之后读取调用方、自身消息队列(两者在PreLaunch Init中已经获得)和Stop用户事件。最后进入While循环,等待用户操作。
FA2_Actor Core.JPG
FA2 ActorCore
4.     Function Actor 1
FA1相比于FA2则多了更多的功能代码,其UI也经过了一些设计。前后面板如下所示,主要使用分隔栏和一些控件进行了布局,增加了菜单效果(具体实现参考第36,37期)。不过整个框架和FA2类似,就不再多讲。
FA1_ActorCore前面板.JPG
FA1 Actor Core前面板
FA1_Actor Core.JPG
FA1Actor Core后面板
需要注意的是,由于增加了菜单功能,FA1的Clear重写时需要记得添加菜单Clear代码。如下图所示。我们今后增加任何功能都可以在该函数中进行扫尾工作。
FA1_Clear.JPG
FA1 Clear
5.     总结
本期详细讲解了PFA和各FA的代码实现,截至本期,”基于LabVIEW Actor Framework的连续测量和记录系统“系列的第一部分就结束了(应该~)。很明显,第一部分主要还是讲解AF的基础使用方法,还未涉及任何”系统”具体功能。
可以预计,本系列将成为”长长长篇小说”,我们将点面结合,逐步讲解测量、记录系统中遇到的各个问题点和解决办法。可以肯定的是,这将不但包含通讯方式、数据结构、执行速度优化、内存优化,数据解析、报表生成、UI美化等一系列技术难点,还将包含需求分析、可复用性、可扩展性设计思路、研制规范、源代码管理规范等一系列开发和管理思想。个人能力有限,欢迎大家共同讨论,不吝赐教。
源代码:
TOP Level设计(AF)2016 New.rar (2.01 MB, 下载次数: 27 )
Actor Framework,期望各位大神分享更多实用资料^_^

荣琪 2021-8-15 11:09:38
我是荣小菜,很荣幸获得LabVIEW版块社区之星荣誉(https://bbs.elecfans.com/jishu_2142119_1_1.html),非常感谢电子发烧友论坛给与我这个机会,也期望论坛能越来越好,期望大家互相学习,共同进步。
回复

举报

蜡笔阿小新 2021-8-15 12:09:27
666,向楼主学习
回复

举报

Jackliu 2021-8-15 22:09:54
好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊好啊
回复

举报

赵宏 2021-8-16 19:55:56
挺好的资料,谢谢分享了       
         
回复

举报

张艺潇 2021-8-27 09:23:48
挺好的资料,谢谢分享了     
回复

举报

程子 2021-9-1 10:37:56
楼主厉害!
回复

举报

评论

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

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

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