发 帖  
原厂入驻New

LabVIEW面向对象的ActorFramework(3)

2020-2-20 18:15:47  785 LVOOP labview Actor Framework labview学习
分享
4
本帖最后由 bollworm 于 2020-2-22 15:26 编辑

四、labview面向对象的编程架构:Actor Framework
Actor Framework是一个软件类库,用以支持编写有多个VI独立运行且相互间可通信的应用程序,在该类型应用程序中,每个VI即代表操作者(Actors)执行独立的系统任务,操作者本身维持着自己的内部状态,并传递消息给其它的操作者,在LabVIEW编程环境中已经有了一些创建此类架构程序的技术存在,而操作者框架则聚焦于容易学习(相对于其它可能强大的工具而言),够降低死锁和竞争条件,并拥有最大限度代码复用的优点。
加载ActoRFramework4.1.0,可以看到当前框架的基本结构,主要父类有Actor和Message,及Message队列类、出入队列类、优先级操作类。
Actor:拥有数据状态的模块。
Message:消息在操作者间传递用来触发状态改变。

1.png
在NI官方资料中,介绍操作者框架(ActorFramework)是在广泛应用的队列驱动状态机(QDSM)的基础上开发而成,但更优于DSDM的框架。现在用官网的QDSM和ActorFramework的程序图做一下比较,能够很直观的看出两者的程序简洁性,如下图所示:
2.png

3.png
可以看到,使用操作者框架后,整个程序非常简洁,队列驱动状态机的簇和相关代码封装成类和方法,消息和条件结构封装为类和动态匹配。当接收到消息时,Actor的方法就自动运行。使用ActorFramework,如果新增加类似功能,只需要继承类后,再进行类方法的修改并重载、新建类的独有方法,而不需要修改主框架,就可以完成新功能的添加。而如果使用QDSM,则需要增加单独队列才能完成。
五、范例一下面以消费者来商店购买东西的场景,完成一个ActorFramework的基本开发过程的演示。
(1)新建一个空白项目。
             4.png   
(2)添加一个Actor,CustomerA
5.png
(3)添加第二个Actor,ShopAssistant
6.png
(4)新建launch.vi,作为调用主程序,添加类启动
7.png
8.png
(5)新建静态VI,保存为AskMessage,程序增加对话框,然后创建消息
   9.png

10.png

11.png
(6)在主程序中添加消息响应函数
12.png
(7)运行Launch.vi,当点击按钮时,弹出的对话框。说明成功调用AskMessage.vi。
13.png
(8)CustomerA询问啤酒价格,ShopAssistant需要有对应的反馈。在ShopAssistant类里面增加函数ShopAssistant,当调用时,弹出对话框。最后,创建消息。   
14.png

15.png


(9)CustomerA询问的消息需要传递给ShopAssistant,需要修改类私有数据的簇的数据引用类型,添加ShopAssistant的队列引用。
16.png
(10)添加数据成员访问函数,将ShopAssistant的消息队列加载进来

17.png
18.png
(11)修改CustomerA类的函数,增加入队队列,调用ShopAssistant消息响应函数
19.png
(12)修改Launch.vi,将ShopAssistant队列传递进去,运行后,弹出两个对话框,即完成了一个Customer与ShopAssistant的对话。


20.png
21.png


(13)如果CustomerA对ShopAssistant的回复再进行回复,我们仅仅需要在CustomerA类里面添加方法CustomerAFeedBack,创建消息。然后,在ShopAssistant类里面添加消息响应。

22.png

23.png
(14)运行Launch.vi,首先弹出两个对话,点击确认时,弹出“非常感谢”,证明程序调用成功。
24.png

25.png


  综上,是一个非常简单的基于ActorFramework编写的购买东西的场景需求。可以看到,在需求增加的过程中,我们对主界面程序Launch.vi很少有变动修改,大部分的需求增加,都是修改增加对应类中的函数完成,这在中、大型程序的编写中会有很高的编码生产效率。
  —————————————————————————————
     最近开始动手写LabVIEW的Actor Framework的文章,主要是看到了李大师的帖子,感动于其无私共享的精神。回想自己早期遍寻Actor Framework资料的种种困难,有时候还要飞到另外一个星球学习,深感学习之不易,现在因为不能复工,有点时间,也可以多写写这方面的文章,与大家共同学习。李大师是个高手,人也是非常无私,他的帖子详尽的介绍了面向对象的资料:
https://zhuanlan.zhihu.com/p/102349876
大家可以去看看,读完应该有所裨益。   


5.png
4.png
3.png
ZHP6666 2020-2-24 14:36:02
讲的很清处明白谢谢分享。
回复

举报

GeorgeSun 2020-2-24 16:33:02
第(11)步中,为啥那个发送消息有两个输入端可以连接,我的只有一个输入端啊
1回复

举报

  • bollworm 2020-2-25 12:57

    查看(10),在ShopAssistant的前面板,队列输入控件添加到接线板上的输入端

wyq95361977 2020-2-24 16:40:48
程序框图太凌乱,只能给3❤
1回复

举报

  • bollworm 2020-2-25 13:00

    没给差评就不错了,多谢手下留情。看帖3分钟,发帖2小时,加上审核、修改,零零碎碎用了3天。论坛的图片处理太麻烦了,不如知乎好用。

雨打花落 2020-3-4 15:01:40
第8步,为什么不能创建基于数据访问的VI,提示无数据成员?
回复

举报

评论

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

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

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

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