AF(操作者框架)系列(1)-LabVIEW中的模块化应用概述
一、引子
在前面对LabVIEW介绍的文章中,关于框架开发的内容涉及很少。为了讲解操作者框架(Actor Framework)的优缺点,也只是拿出来QDSM(Queue-Driven State Machine )框架进行了比较。
所以,在写这个开篇之前,其实一直想一篇关于LabVIEW框架开发的文章,讲解一下当前的LabVIEW开发环境中,主要有哪些框架,各自的优缺点、使用情景,以及框架的演变历程。腹稿有了大致的架构,写完这篇文章,准备再找个时间写一下。
二、正文
本系列有13个视频,但是最后一个是基于NXG版本的开发,当前坑比较多,暂不考虑使用。
所以准备写12篇笔记文章。
首先,进入本系列视频文章的解读:
在这个系列中,目的是让大家了解如何使用Actor Framework,在LabVIEW中开发面向操作者的应用程序。操作者框架是LabVIEW中的一个高级概念,也是当前可以使用的官方支持的快速开发框架。
编程人员总希望以稳定可靠的方式,尽可能多地重用代码。而Actor Framework(以下文中简称AF)满足这个需求,它支持代码重用。使用AF还有很多其他好处,当然,也有一些缺点,我们将在这个系列中的后面的文章中介绍这些缺点。
本系列的技术文章讲解,需要技术人员可以熟练使用QMH模式,在LabVIEW中进行模块化软件开发的能力。
首先,我们将使用QMH模式,编写一个基本需求,来演示其如何工作的。然后,再使用AF替代,用以表明这可能是一种更好的软件开发方法。
根据常用的最佳软件设计原则,我们将代码分成具有高内聚性和低内聚性的模块。
为了举例说明这一点,在一个简单的数据显示应用程序中,我们编写一个数据采集模块、一个文件i/o模块、一个用户界面模块和一个控制模块,来组织不同循环之间的所有消息。程序框图如下:
然后将基本的功能模块用QMH框架写出来,如下图:
用户界面模块实际上由两个循环组成,一个是基于事件的循环,另一个是基于键值的循环。
所谓的高内聚性,就是每个模块都应该有一个明确的目的,只负责一件事,例如用户界面模块只负责接收和显示数据或响应用户输入,但它不负责判断文件是不是你的,也不具备做文件i/o的能力。低耦合,意味着一个模块不应该依赖于另一个模块。例如,即使I/O文件没有加载,用户界面也应该运行。
所以,内聚性指的是模块本身如何编写,而耦合指的是模块如何依赖于其他模块。高内聚性的主要好处是它的可读性,如果你在一个模块中有密切相关的函数,那么很清楚该模块做什么的,也使该模块变得可维护。
举个可维护性的例子,假如,在写入一个文件时有一个bug,您知道另一个必须出现在两个文件I/O模块中,因此您可以很快的测试那些特定的函数,来判断问题所在。
因为该模块只有一个明确的用途,该模块也变得高度可重用,。
如果您有其他需要使用文件i/o模块的应用程序,则有一个明确的目的:它们可以在您想要的任意多个应用程序中将其放到您的框图中,因为低耦合的好处是可维护性,因此对特定模块的更改仅限于该单个模块,而不会对其他模块产生连锁反应模块可测试性。因此,单元测试中涉及的模块可以保持在最低限度。如果所有功能都是一个模块的一部分,那么您可以使用同一个模块测试这些功能。
现在我们知道为什么有这些单独的循环,让我们来演示如何在循环之间进行通信。
首先,点击开始按钮,消息依次在“用户接口模块”、“信息处理循环”、“数据采集模块”进行传递,实现了各模块的功能运行。
综上,搭建了整个通信系统,即队列或用户事件,这些队列或用户事件的引用将存储在功能全局变量(FGVs)中,与其他模块共享。在实际运行过程中,并非所有模块都需要实际加载,它们可以在运行时异步动态启动。
虽然,这只是一个模块化软件开发的概况,但基本覆盖了已知的大多数情况,如果您注意到这些“用户界面模块”、“消息处理循环”、“数据采集模块”,它们都是完全相同的代码,但是不得不重复它三次,所以如果使用QMH框架,通过努力,可以将部分的逻辑封装成子程序,放在单独的项目库中,以简化程序,但仍然有些重复。
现在,我们可以使用一种更为结构化的技术,在开发代码时,最大化将代码重用和高效使用。而这正是AF所具备的特性。所以在下一篇文章解读中,要向您展示AF是如何派生的,以便展示它如何解决代码重用的问题,特别是在这样的模块化应用程序中。
原创码字不易,如有收获,希望关注、点赞和喜欢。
AF(操作者框架)系列(1)-LabVIEW中的模块化应用概述的更多相关文章
- “造轮运动”之 ORM框架系列(二)~ 说说我心目中的ORM框架
ORM概念解析 首先梳理一下ORM的概念,ORM的全拼是Object Relation Mapping (对象关系映射),其中Object就是面向对象语言中的对象,本文使用的是c#语言,所以就是.ne ...
- Quartz.NET开源作业调度框架系列
Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...
- 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 二十七、EFW框架BS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 老周的ABP框架系列教程 -》 一、框架理论初步学习
老周的ABP框架系列教程 -- 一.框架理论初步学习 1. ABP框架的来源与作用简介 1.1 简介 1.1.1 ABP框架全称为"ASP.NET Boilerplate ...
- 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...
- Labview 中的类
一.创建一个空的类 在 LabVIEW 工程窗口里,鼠标右键菜单的新建栏中有一项,是创建类.类的结构和 LabVIEW 工程库是比较相近的:类的名字也作为名字空间:也可以为类中的 VI 设置访问权限等 ...
- Google C++测试框架系列:入门
Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...
- Spring框架系列之AOP思想
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...
随机推荐
- kali中网卡、ssh、apache的配置与开启
在Kali-linux中修改网卡文件,启动ssh和apache服务的方法 1.su root //取得root权限 2.shift+字母 //大小写字母切换 3.修改网卡 ...
- CTF_论剑场 名侦探柯南
首先看一下是一个压缩包然后下载 解压后会发现一个图片和另一个压缩包 打开图片 发现是这个 用HxD分析一下这张图片通过搜索 zip jpg...... 然后会发现这张图片里有一个png 图片 所以判断 ...
- 网页链接在QQ内因多人投诉被拦截的解决方案
背景 相信大家经常会遇到一个头疼的问题就是,明明自己的网页没有违规内容(比如线下活动的推广),但链接在QQ内转发分享会被QQ管家拦截,导致用户无法访问. 那么当大家遇到这个问题的时候应该怎么办呢?不用 ...
- Hibernate第三天-Hibernate主配置信息
今天是学习Hibernate的第三天,主要分析一下Hibernate的配置文件中的信息 Hibernate中的配置文件有两种,第一种是主配置文件hibernate.cfg.xml,第二种是映射配置文件 ...
- 逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解
C 语言提供了以下三种逻辑运算符. 一元:!(逻辑非). 二元:&&(逻辑与).||(逻辑或). 以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻 ...
- GM2引擎脚本召唤宝宝说明
功能: 脚本召唤宝宝. 格式: RECALLMOB 怪物名称 宝宝等级(最高为 7) 叛变时间(分钟) 是否自动变色(0.1)固定颜色(1-7) 攻击力受自动变色颜色不同而不同 固定颜色攻击力 ...
- javaScript中的querySelector和querySelectorAll
querySelector和querySelectorAll是W3C提供的 新的查询接口,其主要特点如下: 1.querySelector只返回匹配的第一个元素,如果没有匹配项,返回null. 2.q ...
- 加壳&脱壳 - 前言(4.17更新)
0x00 闲谈 最近打算学习学习加壳脱壳相关的知识,大致会有以下几个部分 1.upx壳的加壳原理及脱壳方法 --UPX压缩壳的工作原理 --脱upx壳--初试--单步追踪 -- 0x01 参考链接 1 ...
- android基础控件的使用
控件在屏幕上位置的确定 通常情况下控件在屏幕上确定至少要连接两条线(一条水平,一条垂直) 如下图连接了四条线 辅助线 辅助线的调出: 水平辅助线:进入activity.xml的设计模式之后如下图 为了 ...
- 如何用纯代码实现图片CSS3
在刷面试题的时候刷到2015阿里巴巴的,如何用代码实现下面的图形. <div class="main"> <h1>图片图标-一个标签实现</h1> ...