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

在NI官方资料中,介绍操作者框架(ActorFramework)是在广泛应用的队列驱动状态机(QDSM)的基础上开发而成,但更优于DSDM的框架。
现在用官网的QDSM和ActorFramework的程序图做一下比较,能够很直观的看出两者的程序简洁性,如下图所示:
QDSM
ActorFramework
可以看到,使用操作者框架后,整个程序非常简洁,队列驱动状态机的簇和相关代码封装成类和方法,消息和条件结构封装为类和动态匹配。当接收到消息时,Actor的方法就自动运行。
使用ActorFramework,如果新增加类似功能,只需要继承类后,再进行类方法的修改并重载、新建类的独有方法,而不需要修改主框架,就可以完成新功能的添加。而如果使用QDSM,则需要增加单独队列才能完成。
五、范例一
下面以消费者来商店购买东西的场景,完成一个ActorFramework的基本开发过程的演示。
(1)新建一个空白项目。

(2)添加一个Actor,CustomerA

(3)添加第二个Actor,ShopAssistant

(4)新建launch.vi,作为调用主程序,添加类启动


(5)新建静态VI,保存为AskMessage,程序增加对话框,然后创建消息



(6)在主程序中添加消息响应函数

(7)运行Launch.vi,当点击按钮时,弹出的对话框。说明成功调用AskMessage.vi。

(8)CustomerA询问啤酒价格,ShopAssistant需要有对应的反馈。在ShopAssistant类里面增加函数ShopAssistant,当调用时,弹出对话框。最后,创建消息。


(9)CustomerA询问的消息需要传递给ShopAssistant,需要修改类私有数据的簇的数据引用类型,添加ShopAssistant的队列引用。

(10)添加数据成员访问函数,将ShopAssistant的消息队列加载进来


(11)修改CustomerA类的函数,增加入队队列,调用ShopAssistant消息响应函数

(12)修改Launch.vi,将ShopAssistant队列传递进去,运行后,弹出两个对话框,即完成了一个Customer与ShopAssistant的对话。


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


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


综上,是一个非常简单的基于ActorFramework编写的购买东西的场景需求。可以看到,在需求增加的过程中,我们对主界面程序Launch.vi很少有变动修改,大部分的需求增加,都是修改增加对应类中的函数完成,这在中、大型程序的编写中会有很高的编码生产效率。
LabVIEW面向对象的ActorFramework(3)的更多相关文章
- LabVIEW面向对象的ActorFramework(2)
二.为什么要学习面向编程? 面向对象编程,如果将上文推荐的两本书读完后,基本上也就有了答案.从自我产品开发的经验中,理解为可以迅速解决中大型程序需求变化时,在不影响其他程序功能的情况下,能够实现新增功 ...
- LabVIEW面向对象的ActorFramework(1)
本系列文章主要阐述以下几个问题: (1)什么是面向对象编程? (2)为什么要学习面向编程? (3)LabVIEW面向编程学习为什么有点难? (4)LabVIEW面向对象的编程架构:Actor Fram ...
- 用C++写程序的一些感悟
前言 近期使用C++有了一些心得很感悟,这里整理一下. 心得1 如果只会使用LabVIEW写程序,还想要进一步深入程序设计,一定要学习一门文本语言. 什么是会用LabVIEW 会用是个比较笼统的概念. ...
- [LabVIEW架构]ActorFramework(一)
前言 小黑结婚回来第二周了,每天忙于程序设计,时间比较紧张,所以文章一直没出来,也算憋大招了. 近期小黑将与大家一起认识一下ActorFramework,既是对自己一段时间写AF程序的总结,也是梳理, ...
- [LabVIEW架构]ActorFramework(二)
前言 在上一个文章中,我们介绍了一下LabVIEW中AF的基本概念,本讲将以上一次的例子来讲解LabVIEW中的实现 正文 范例说明 假定两个人,一个作为老师,一个作为学生.学生每天早上给老师发送一封 ...
- 【LabVIEW技巧】LabVIEW OOP怎么学
前言 有很多人对LabVIEW OOP存在比较极端的看法,大致分为两类: 1. 绝对否定派认为LabVIEW OOP只不过是LabVIEW为了追求时髦,在面向过程的基础上用簇做了一些特性,实际上完全不 ...
- ActorFramework教程对比及规划
牢骚太盛防肠断,风物长宜放眼量. 一.引子 昨天的文章,本来就是想写写ActorFramework的教程内容,结果写着写着偏了,变成了吐槽. 首先,声明一下,自己从未参加过任何LabVIEW培训班,也 ...
- 有哪些LabVIEW快捷键让你相见恨晚
前言 任何一门工具,当你使用它到极致的时候,往往都朝着这样子的两个方向发展 1. 具有鼠标操作功能的软件,他的使用的极致就是脱离鼠标,迈向键盘 2. 主要是键盘操作的,他的极致就是脚本自动化,或者说一 ...
- LabVIEW类方法浏览器-Class Method Browser
随着LabVIEW的类编程应用增多,当打开较多的VI进行编辑时候,添加该类对应的VI方法到程序后背板上操作显得繁琐(需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI,然后再拖到程序背 ...
随机推荐
- 大数据萌新的Python学习之路(三)
笔记内容: 一.集合及其运算 在之列表中我们可以存储数据,并且对数据进行各种各样的操作.但是如果我们想要对数据进行去重时是十分麻烦的,需要使用循环,要建立新的列表,还要 进行对比,十分的麻烦,还消耗 ...
- Lesson 2 Spare that spider
How much of each year do spiders killing insects? Why, you may wonder, should spiders be our friends ...
- SIAMATIC S7-1200 中通过 Modbus RTU 如何读取地址范围 9999 到 65535 的输入字
原文地址 说明 除了需要 STEP 7 >= V13 SP1 (TIA Portal) 的软件,还需要 S7-1200 CPU 固件版本 >= V4 (文章编号: 6ES721x-1xx4 ...
- Uboot 命令行 介绍
背景 基本上,本文转载自:<ARM板移植Linux系统启动(五)Uboot命令行> 上次说到uboot的启动方式,最后会使用autoboot(自主模式)尝试引导kernel,如果失败或者被 ...
- PLCsim 软件模拟OB86故障
用上一节 组态DP主站与标准从站的方法 组态了网络 实现了 将profibus –dp 标准从站 ET200M 下 输入地址为IW2 接口的状态 读取到 主机 DP-315-2DP 的QW0 变量以来 ...
- mac搭建nginx
0.介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler ...
- Java中数组的创建
Java中数组的使用 1.普通数组变量的定义: //数组 //1.数组是Java中很重要的一部分,今天对数组进行了大致的了解,Java中的数组和C中数组还是有一定的区别的 //以下是总结的几种方法 p ...
- validate表单验证-单独验证
今天编写一个表单验证程序,我来说一下今天遇到的坑:程序不是通过submit按钮提交验证的,是在自己写的一个方法中提交的,出现了表单无法验证的情况.然后我就了解了一下jquery validate的验证 ...
- created a ThreadLocal with key of type [oracle.jdbc.driver.AutoKeyInfo$1]
环境: spring4.3, mybatis3.5.2, ojdbc8_8c(oracle 18c jdbc) 调试状态下退出时,提示: 严重 [main] org.apache.catalina.l ...
- WTL之VS2013环境搭建
新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 从国外回来,在老家入职了新公司,做c++开发,刚到新公司要熟悉公司的项目代码,目前公司在做一个主播聚合平台,界面采 ...