四、LabVIEW面向对象的编程架构:Actor Framework

Actor Framework是一个软件类库,用以支持编写有多个VI独立运行且相互间可通信的应用程序,在该类型应用程序中,每个VI即代表操作者(Actors)执行独立的系统任务,操作者本身维持着自己的内部状态,并传递消息给其它的操作者,在LabVIEW编程环境中已经有了一些创建此类架构程序的技术存在,而操作者框架则聚焦于容易学习(相对于其它可能强大的工具而言),够降低死锁和竞争条件,并拥有最大限度代码复用的优点。

加载ActorFramework4.1.0,可以看到当前框架的基本结构,主要父类有Actor和Message,及Message队列类、出入队列类、优先级操作类。

Actor:拥有数据状态的模块。

Message:消息在操作者间传递用来触发状态改变。

在NI官方资料中,介绍操作者框架(ActorFramework)是在广泛应用的队列驱动状态机(QDSM)的基础上开发而成,但更优于DSDM的框架。

现在用官网的QDSM和ActorFramework的程序图做一下比较,能够很直观的看出两者的程序简洁性,如下图所示:

QDSMActorFramework

可以看到,使用操作者框架后,整个程序非常简洁,队列驱动状态机的簇和相关代码封装成类和方法,消息和条件结构封装为类和动态匹配。当接收到消息时,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)的更多相关文章

  1. LabVIEW面向对象的ActorFramework(2)

    二.为什么要学习面向编程? 面向对象编程,如果将上文推荐的两本书读完后,基本上也就有了答案.从自我产品开发的经验中,理解为可以迅速解决中大型程序需求变化时,在不影响其他程序功能的情况下,能够实现新增功 ...

  2. LabVIEW面向对象的ActorFramework(1)

    本系列文章主要阐述以下几个问题: (1)什么是面向对象编程? (2)为什么要学习面向编程? (3)LabVIEW面向编程学习为什么有点难? (4)LabVIEW面向对象的编程架构:Actor Fram ...

  3. 用C++写程序的一些感悟

    前言 近期使用C++有了一些心得很感悟,这里整理一下. 心得1 如果只会使用LabVIEW写程序,还想要进一步深入程序设计,一定要学习一门文本语言. 什么是会用LabVIEW 会用是个比较笼统的概念. ...

  4. [LabVIEW架构]ActorFramework(一)

    前言 小黑结婚回来第二周了,每天忙于程序设计,时间比较紧张,所以文章一直没出来,也算憋大招了. 近期小黑将与大家一起认识一下ActorFramework,既是对自己一段时间写AF程序的总结,也是梳理, ...

  5. [LabVIEW架构]ActorFramework(二)

    前言 在上一个文章中,我们介绍了一下LabVIEW中AF的基本概念,本讲将以上一次的例子来讲解LabVIEW中的实现 正文 范例说明 假定两个人,一个作为老师,一个作为学生.学生每天早上给老师发送一封 ...

  6. 【LabVIEW技巧】LabVIEW OOP怎么学

    前言 有很多人对LabVIEW OOP存在比较极端的看法,大致分为两类: 1. 绝对否定派认为LabVIEW OOP只不过是LabVIEW为了追求时髦,在面向过程的基础上用簇做了一些特性,实际上完全不 ...

  7. ActorFramework教程对比及规划

    牢骚太盛防肠断,风物长宜放眼量. 一.引子 昨天的文章,本来就是想写写ActorFramework的教程内容,结果写着写着偏了,变成了吐槽. 首先,声明一下,自己从未参加过任何LabVIEW培训班,也 ...

  8. 有哪些LabVIEW快捷键让你相见恨晚

    前言 任何一门工具,当你使用它到极致的时候,往往都朝着这样子的两个方向发展 1. 具有鼠标操作功能的软件,他的使用的极致就是脱离鼠标,迈向键盘 2. 主要是键盘操作的,他的极致就是脚本自动化,或者说一 ...

  9. LabVIEW类方法浏览器-Class Method Browser

    随着LabVIEW的类编程应用增多,当打开较多的VI进行编辑时候,添加该类对应的VI方法到程序后背板上操作显得繁琐(需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI,然后再拖到程序背 ...

随机推荐

  1. 「USACO08JAN」电话线Telephone Lines

    传送门 Luogu 解题思路 考虑二分,每次把大于二分值的边的权设为1,小于等于的设为0,如果最短路<=k则可行,记得判无解 细节注意事项 咕咕咕 参考代码 #include <algor ...

  2. 「SP1716」GSS3 - Can you answer these queries III

    传送门 Luogu 解题思路 区间最大子段和板子题. 考虑用线段树来做. 对于一个线段树节点所包含区间,它的最大子段和有两种情况,包含中点与不包含. 不包含的情况直接从左右子树转移. 对于包含的情况: ...

  3. ReadyBoost 的应用教程

    一.什么是ReadyBoost 根据百度百科介绍,ReadyBoost是存在于Windows Vista中的一项新技术,在继Vista的下一代操作系统Windows 7中,同样包 含着这项技术,它利用 ...

  4. JuJu团队1月8号工作汇报

    JuJu团队1月8号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 实现三维Dense 将crossentrophy和softmax连接起来 无 婷婷 完善main.jl ...

  5. STM32CubeIDE 编译C/C++程序

    文章转自  https://www.cnblogs.com/skyofbitbit/p/3708216.html STM32CubeIDE 其实就是STM32CubeMx + eclipse 首先,W ...

  6. java.io.IOException: Error: JSP Buffer overflow

    错误 jsp页面报错如下: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java ...

  7. unity基础开发----Unity获取PC,Ios系统的mac地址等信息

    在软件开发中可以会用到mac地址作为,设备的唯一标示,我们也可以通过unity获取,经测试pc,ios都可以但是安卓没有获取到. 代码如下: using UnityEngine; using Syst ...

  8. 从零到Django大牛的的进阶之路01

    搭建 创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3 安装Django pip install django==1.11.11 创建工程 django-a ...

  9. c#使用Socket实现局域网内通信

    服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Da ...

  10. 端口通不通 telnet wget ssh

    如何测试端口通不通(四种方法) 投稿:mrr 一般情况下使用"telnet ip port"判断端口通不通.接下来通过本文给大家分享四种方法测试端口通不通,感兴趣的朋友一起学习吧 ...