一、引子

在前面对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中的模块化应用概述的更多相关文章

  1. “造轮运动”之 ORM框架系列(二)~ 说说我心目中的ORM框架

    ORM概念解析 首先梳理一下ORM的概念,ORM的全拼是Object Relation Mapping (对象关系映射),其中Object就是面向对象语言中的对象,本文使用的是c#语言,所以就是.ne ...

  2. Quartz.NET开源作业调度框架系列

    Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...

  3. 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  4. 二十七、EFW框架BS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  5. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  6. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)

    转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...

  7. Labview 中的类

    一.创建一个空的类 在 LabVIEW 工程窗口里,鼠标右键菜单的新建栏中有一项,是创建类.类的结构和 LabVIEW 工程库是比较相近的:类的名字也作为名字空间:也可以为类中的 VI 设置访问权限等 ...

  8. Google C++测试框架系列:入门

    Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...

  9. Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...

随机推荐

  1. js实现图片轮播图

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. C#堆和栈的入门理解

    声明:以下内容从网络整理,非原创,适当待入个人理解. 解释1.栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义:堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定 ...

  3. 使用docker踩过的坑(二)

    关于docker的部署,我这里不多说了 下面写一些最近经常用到的命令: docker下载镜像: docker pull 镜像名 docker查看已下载的所有镜像: docker images dock ...

  4. C语言 time、rand、srand

    C语言 time.rand.srand #include <time.h> time_t time(time_t *t); 功能:获取当前系统时间 参数:常设置为NULL 返回值:当前系统 ...

  5. Linux - curl 基本使用

    1. 概述 我接触过的很多服务端调试, 接口测试, 最终都落到了这个地方 简答介绍 curl 的使用 尽量循序渐进, 因为我也不太熟悉 大概会提到的命令 curl curl -v curl -s cu ...

  6. 每天进步一点点------DE2-70-TV例子说明

    module Reset_Delay(iCLK,iRST,oRST_0,oRST_1,oRST_2); input iCLK; input iRST; output reg oRST_0; outpu ...

  7. CentOS: 网络连接故障排除

    yum不能正常动作,惯性认为是需要替换BaseURL,结果后来才发现是Gateway不知什么时候被错误设定了,memo如下. 现象表现于yum不能正常动作,确认ping的操作,发现是不能解析DNS [ ...

  8. windows10 -- mysql5.5 + python3.4 + django1.11 +pycharm2016.2 + PyMySQL(DB DRIVER) 环境搭建

    环境介绍 2016-07-2513:32:26 name value comment OS win10 操作系统 python python3.4 python主程序 IDE pycharm:  20 ...

  9. 关于ActiveMq的Exception occurred while processing this request, check the log for more information!问题

    错误原因:jsp渲染的时候报错了.根本原因在于jdk版本和activemq版本的问题. 两种解决方案: 1.把jdk版本改为jdk1.7 2.activeMQ采用5.15,它依赖于jdk1.8

  10. java 实现一段文字中,出现次数最多的字

    代码如下: public static void main(String[] args) { String str = "大批量,之前都没怎么注意过,这个问题确实不会,网上参考了下别人的,大 ...