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,然后再拖到程序背 ...
随机推荐
- 「CF10D」LCIS
传送门 Luogu 解题思路 首先考虑怎么求方案,这样才可能会输出方案. 考虑 \(\text{DP}\). 设 \(f[i][j]\) 表示在 \(a\) 序列中选择一个 \([1...i]\) 的 ...
- 1-3SpringBoot之Controller使用
Controller的使用 @Controller 处理http请求 @RestController Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controll ...
- HHvm Apache 2.4 Nginx建站环境搭建方法安装运行WordPress博客
HHvm Apache 2.4 Nginx建站环境搭建方法安装运行WordPress博客 VPS主机 2014年06月02日 17:20 评论» 文章目录 Debian上安装 Ce ...
- poj2236 Wireless Network(并查集直接套模板
题目地址:http://poj.org/problem?id=2236 题目大意:n台电脑都坏了,只有距离小于d且被修好的电脑才可以互相联系,联系可传递.输入n和d,n个点的坐标x y.两个操作:O ...
- Jquery动画效果设置大全
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 判断ES数据是否更新成功
参考:https://stackoverflow.com/questions/38928991/how-to-detect-if-a-document-update-in-elasticsearch- ...
- Codeforces Round #624 (Div. 3)(题解)
Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...
- s2010编译C++ 链栈的使用
// CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...
- 从ofo到乐视,变卖资产好过冬靠谱吗?
今年年底,有很多人"被迫"离职.他们为了应对生活压力和找工作的不确定性,尝试在二手平台上卖出自己的奢侈品或心爱之物,以期度过潜在的难关.而对于很多企业来说,这个冬天也非常冷.依靠常 ...
- vue - @click 传参删除
<template> <div id="app"> <div v-for="todo in todos" :key ...