LabVIEW程序设计模式(五)—生产者消费者模式(3)_LabVIEW程序的动态调用
LabVIEW开发环境及程序设计基础LabVIEW基础入门课件
基本单元 - VI前面板 – 仪器的交互程序框图 – 仪器的功能工具栏
LabVIEW程序设计基础
基本数据类型1
数值型整型有些数据类型的本质也是整形,如枚举型浮点型可以更改数据表达方式决定其占用的存储字节数及数值表达方式
强制数据类型转换
通常,函数返回占用字节数较多的数据类型为提高程序执行效率, 尽量避免自动强制转换
强制转换点
基本数据类型2
布尔型注意: 前面板对应的布尔控件有六种机械动作可选可通过范例区别六种机械动作的不同
基本数据类型3
字符串前面板控件可现实不同的显示方式Normal, ‘\’ Codes, Password 以及 Hex字符串操作函数选板
基本数据类型4
枚举型本质上也可以认为是整型,不过取值范围有限常与条件结构共同使用
理解数据流
哪个节点先执行?A) 加法B) 减法C) 随机数D) 除法E) 正弦
理解数据流 (没有固定答案)
哪个节点先执行?A) 加法 – 可能 B) 减法 – 不可能C) 随机数 – 可能D) 除法 – 可能E) 正弦 – 不可能
一个简单的VI:采集、分析、表达
LabVIEW中的“采集”Express VI
LabVIEW作为编程语言的优势
LabVIEW``Real-Time
LabVIEW Desktop
LabVIEWFPGA
LabVIEWMPU/MCU
支持连接各种硬件,而且支持发布到多种Target
基于数据流的自然思维方式,但同时也支持调用文本语言的代码
一个简单而典型的LabVIEW应用
采集
分析
表达
LabVIEW的出现推动了测试技术的发展
从手工测试迈向自动化测试使仪器和PC得以有效连接有效降低了仪器控制的复杂程度从此以后,软件在测控系统中发挥的作用越来越大
labview生产者消费者
生产者/消费者模式(1)_前言statemice的LabVIEW程序设计模式(五)—生产者/消费者模式(1)_前言再次回顾“基本状态机模式”的6个缺点,只剩下第6个缺点无法在上述的“状态机和事件结构的结合模式”中被解决。
(1) 任何时刻只能有一个状态在运行这个问题也许有些多余,但是在实际的应用中往往又是最常见的。
大多数比较复杂的应用至少应该有“菜单”和“采集”两个状态,如果数据采集程序在运行时仍然希望系统能够处理菜单的事件,这是在传统的状态机或者事件结构中无法实现的。
因为无论是状态机结构还是事件结构,都是由一个循环组成的,不同的状态是无法同时被响应和处理的。
解决这个问题的方式也比较简单,LabVIEW本身就是一种多线程的程序设计语言,可以再加一个循环或者另外开一个程序独立运行。
但是这样也会带来一些新的问题,比如:(1) 两个循环(程序)之间如何交换和共享数据。
(2) 两个循环(程序)都有着独立的错误处理系统,它们之间是如何协调的。
(3) 两个循环如何分工呢?应该以哪种方式对状态进行分类以将不同的状态放置在不同的循环(程序)中?(4) 一个程序如何控制另一个程序的运行和停止。
在上面提出的4个问题中,对循环和程序这两个解决方案而言,第(1)~(3)个问题的解决方式是一样的。
只有第(4)个问题是专门针对两个程序而言的,在LabVIEW中这种不同程序之间的相互调用称为“程序的动态调用”。
生产者/消费者模式(2)_VI的可重入性(Reentrant Execution)statemice的LabVIEW程序设计模式(五)—生产者/消费者模式(2)_VI的可重入性(Reentrant Execution)在介绍VI的动态调用之前有必要对LabVIEW在执行VI过程中的规则有个大致的了解。
众所周知,LabVIEW是通过VI的文件名(VI Name)来表示独立的VI的,并不是VI的路径。
因此,LabVIEW不允许具有相同名字的VI同时载入内存中,即使这些VI存储在不同的路径中。
LabVIEW教程PPT课件
ln(x)
说明 绝对值 反余弦,x弧度 反双曲余弦,x弧度 反正弦 反双曲正弦 反正切函数 反双曲正切 返回大于1的最小整数 余弦积分,x为非负实数 余弦函数 双曲余弦 余切函数 余割函数 指数函数
exp(x)-1 返回小于x的最大整数 返回距x最近的整数 返回0-x间最近的整数
自然对数函数
这对于实现有多个变量的公式来说很有用。否 则需要使用复杂的框图模型。
通过在框中直接键人公式代码来代替创建框图 部分。
2021/3/9
17
公式节点的输入、输出变量
❖ 从公式节点边框上弹出快捷菜单,从中选择Add Input 或 Add Output。
❖ Change to Output可将输入改变为输出,Change to Input可将输出改变为输入。
2021/3/9
23
局部变量的创建和使用方法
❖ 局部变量的创建既可以通过图示右键弹出菜 单获得,也可以在功能模板上选择 Function/Structures/Local Variable将其拖到 框图上,得到一个代“?”的图标,再将其 与框图中已有的变量建立关联。
2021/3/9
24
4.8 局部变量和全局变量
1. 掌握循环结构的自动索引功能和函数 的多态性操作方法。
2021/3/9
32
5.1 LabVIEW的数据类型
整形数 浮点数 逻辑量 字符串 文件路径
2021/3/9
兰色 橙色 绿色 粉色 青色
33
5.2 数值类型
❖ 最基本的数据类型是数值类型,这是一种标量值, 通常包括一个整型值或实型数值(浮点)。
2021/3/9
9
建立循环结Leabharlann 演示2021/3/910
LabVIEW编程还可以这么简单?五大总结助你事半功倍!
LabVIEW编程还可以这么简单?五大总结助你事半功倍!虽然NI LabVIEW软件长期以来一直帮助工程师和科学家们快速开发功能测量和控制应用,但不是所有的新用户都会遵循LabVIEW编程的最佳方法。
LabVIEW图形化编程比较独特,因为只需看一眼用户的应用程序,就马上可以发现用户是否遵循编码的最佳方法。
有些用户会犯这些错误是因为他们没有真正理解LabVIEW框图数据流背后的原理,而有些用户则是不知道哪些特性可提高LabVIEW编程质量。
小编辛苦总结了经验欠缺的LabVIEW程序员最经常犯的一些编程错误,同时也提供了采用正确LabVIEW编程方法的建议。
LabVIEW新手典型“杰作”01过度使用平铺式顺序结构许多LabVIEW新手并不完全了解“数据流”执行背后的概念,而这些概念却是LabVIEW 编程的基础。
其中一个现象是用户往往在程序框图中过度使用平铺式顺序结构。
用户经常依赖平铺式顺序结构来实现程序框图的代码串行执行,而不是使用数据流和节点之间的连线。
用户往往过度依赖平铺式顺序结构,而没有充分理解数据流编程概念。
数据流编程是指只有在所需的数据输入全部到达时,框图上的节点(子VI、本原、结构等)才开始执行。
这对于使用LabVIEW的程序员来说非常有用,因为独立的进程本身就可以实现并行运行,而命令式语言却需要额外的设置才能实行并行执行。
随着计算机CPU的不断增多,LabVIEW可自动分解并行流程,提高代码性能,而无需用户编写任何额外代码。
而强行使用平铺式顺序结构来执行程序框图不仅会限制并行运行,还会丧失这一优势。
限制程序框图中不必要的结构有助于提高整体可读性和保持更简洁的框图。
错误连线可以有效地实现程序框图上的数据流,而不需要依靠平铺式顺序结构,此外错误。
2023修正版Labview简易程序设计
Labview简易程序设计Labview简易程序设计概述Labview(Laboratory Virtual Instrument Engineering Workbench)是一种用于虚拟仪器设计和控制系统的开发环境和语言。
它的特点是图形化的编程方式,使得用户无需编写繁琐的代码,就能够完成复杂的测量和控制任务。
本文将介绍Labview的简易程序设计方法。
Labview程序结构Labview程序由多个虚拟仪器(VI)组成,每个VI由输入、处理和输出三个核心部分组成。
输入部分负责从外部设备或传感器中获取数据,处理部分对输入数据进行计算和逻辑处理,输出部分将处理结果发送给外部设备或在界面中显示。
Labview程序的整体架构通常是基于数据流图(Block Diagram)的,其中各个VI之间通过数据流连接进行数据传递。
数据流连接将结果从一个VI的输出端传递到另一个VI的输入端,从而实现整个程序的协同工作。
Labview程序设计步骤1. 创建新的Labview程序打开Labview软件,“新建”按钮创建一个新的项目。
选择适当的模板或空项目来开始新的程序设计。
2. 添加VI在新建的项目中,右键“当前程序”文件夹,选择“新建”->“虚拟仪器”。
给新建的VI命名,并双击打开它。
3. 添加输入在VI的数据流图上,选择需要的输入控件或函数。
例如,可以添加一个“数字输入框”来接受用户输入的数值,或者添加一个“传感器读取”函数来获取外部设备的数据。
4. 添加处理在VI的数据流图上,选择需要的处理函数或操作。
例如,可以添加一个“加法”函数来对输入的两个数值进行求和,或者添加一个“循环结构”来进行重复计算。
5. 添加输出在VI的数据流图上,选择需要的输出控件或函数。
例如,可以添加一个“数字显示”控件来显示处理结果的数值,或者添加一个“数据保存”函数来将结果保存到文件中。
6. 连接数据流将输入、处理和输出部分通过数据流连接连起来,确保数据能够流动并得到正确的处理。
labview主/从设计模式和生产者/消费者设计模式
5.2LabVIEW设计模式——主/从设计模式和生产者/消费者设计模式在上一节中曾经谈到过,NI LabVIEW中提供了六种最基本的设计模式。
本节首先介绍其中的两种:主/从设计模式与生产者/消费者设计模式(Master/Slave design pattern and Producer/Consumer design pattern)。
这是由于这两种设计模式在结构上极为相似(使用的内置函数不同),所以我们在这里将一起来讨论(基本结构参见图5.2-1、图5.2-2)。
图5.2-1主/从设计模式图5.2-2生产者/消费者设计模式5.2.1主/从设计模式(Master/Slave design pattern)与主/从设计模式的相关内置函数(Notifier_通知)参见下图所示。
图5.2.1-1主/从设计模式内置函数(通知)关于这些内置函数的定义和使用方法请参考LabVIEW Help文件,这里就不再进行讨论了。
对于绝大多数LabVIEW的学习者来讲,仅仅依据这些主/从操作提供的内置函数(通知),即便是借助于帮助文件也很难理解和设计出正确的应用程序代码或基本架构。
因为这些内置函数的内部程序代码是不对外开放的、不公开的,所以我们也就很难理解的更准确或更全面。
那么如何正确的使用它们呢?通常有两个最简单、最直接的方法可以解决这个问题:一是,查看NI给出的设计模式或例程;二是,查看其它使用者所提供的实用例程。
其实,这里也再次间接的告诉大家,更多查看和理解其它LabVIEW开好者所提供的实用例程是学习LabVIEW的最好方法之一。
通过图5.2-1,就可以初略地领会到NI基于数据流的图形化代码主/从设计模式的表达形式或架构。
从图5.2-1中,可以看到主/从设计模式的基本构成是:包括了两个While循环(上面为主循环、下面的为从循环)和若干个“通知”内置函数(Notifier)构成。
主循环中的Case结构用来确定是否向从循环发出通知。
LabVIEW虚拟仪器程序设计及应用教学设计
LabVIEW虚拟仪器程序设计及应用教学设计前言LabVIEW(Laboratory Virtual Instrument Engineering Workbench),俗称“拉伯维”,是一款基于图形化编程的虚拟仪器开发平台。
该软件可以将传感器、运动控制器等硬件系统与计算机进行连接,开发出各种虚拟仪器。
本篇文档从实际案例出发,介绍LabVIEW虚拟仪器程序的设计方法及其在教学中的应用。
设计案例我们以一个简单的LED灯控制为例,介绍如何使用LabVIEW进行虚拟仪器程序设计。
实验目的了解LabVIEW虚拟仪器程序设计方法,能够完成简单的LED灯控制功能。
实验原理LED灯是一种常见的电子元件,其控制原理是通过改变LED灯两端的电压差来控制其亮度状态。
为了控制LED灯的电压差,我们需要使用开关控制电路。
在虚拟仪器程序中,我们可以使用按钮控制开关状态,通过控制电流通断的方式来控制LED灯的亮灭状态。
实验步骤1.打开LabVIEW软件,新建一个虚拟仪器程序。
点击菜单栏中的“NewVI”按钮。
2.在弹出的窗口中选择“Blank VI”,单击“Finish”按钮。
3.在虚拟仪器的界面中,选择“Controls Palette”面板中的“Boolean”选项,拖拽“Boolean”控件到虚拟仪器界面中。
4.在“Boolean”控件的属性配置中,将“Caption”属性设置为“开关”,将“True Text”属性设置为“开”,将“False Text”属性设置为“关”。
5.在“Functions Palette”面板中选择“Structures”选项,选择“Case Structure”控件,并拖拽到虚拟仪器的界面中。
6.将“Boolean”控件的上下两端连接到“Case Structure”控件的输入端口中。
7.将“LED灯”控件从“Controls Palette”面板中拖拽到虚拟仪器的界面中。
8.将“LED灯”控件的属性配置中,将“Caption”属性设置为“LED灯”。
labview高级程序设计
LabVIEW高级程序设计1. 简介LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化程序设计环境,主要用于快速开发和部署数据采集、控制系统和测试系统等应用。
LabVIEW具有丰富的工具和功能,可以帮助工程师和科学家高效地进行系统设计和开发。
本文将介绍LabVIEW高级程序设计的一些常用技巧和技术。
2. 高级数据处理2.1 数据滤波LabVIEW提供了多种滤波器函数和工具,用于对实时采集的数据进行滤波处理。
可以使用FIR滤波器或IIR滤波器对数据进行平滑处理或去除噪声。
滤波器函数可以灵活地应用于不同的应用场景,并且可以自定义滤波器参数。
// 示例:使用FIR滤波器对数据进行平滑处理double[] data = GetSensorData();double[] filteredData = Filter.FIR(data, filterCoefficients);2.2 数据拟合LabVIEW提供了多种数据拟合函数和工具,用于对实验数据进行曲线拟合。
可以根据实验数据的特点选择适当的拟合函数,例如线性拟合、多项式拟合、指数拟合等。
数据拟合功能可以帮助用户分析数据并找出趋势和规律。
// 示例:使用线性拟合函数对数据进行拟合double[] xData = GetXData();double[] yData = GetYData();double[] coefficients = Fit.Linear(xData, yData);2.3 数据分析LabVIEW提供了丰富的数据分析函数和工具,用于对实验数据进行统计分析和趋势分析。
可以计算数据的平均值、标准差、最大值、最小值等统计指标,还可以绘制直方图、散点图、曲线图等图表。
数据分析功能可以帮助用户理解数据的特性和分布。
// 示例:计算数据的平均值和标准差double[] data = GetExperimentalData();double mean = Analysis.Mean(data);double std = Analysis.StandardDeviation(data);3. 高级界面设计3.1 自定义控件LabVIEW允许用户自定义控件,以满足特定需求和界面设计的要求。
第五章LabVIEW介绍5
(1)调用 • 由函数模板中的Select a VI…子模板打开选择用户 程序对话框,选择已经保存的全局变量声明VI程序 ,此时将在框图程序中显示全局变量数据端口。 • 如果在全局变量声明VI中建立多个控件,可以用操 作工具在全局变量的图标上单击,在列出的所有变 量对象中选择所需的对象。
–(2)使用示例 • 利用全局变量在不同VI中传递数据。 • 创建一个全局变量声明Ⅵ,其中包含一个数值型控件和布 尔型控件,保存为“GV.vi”。 • 新建一个VI命名为“采集信息.vi”,前面板中有一个旋钮 开关和按键开关,将它们的值送到全局变量中。由函数模 板中的选择VI子模板打开选择用户程序对话框,选择 “GV.vi”,调用两次全局变量声明Ⅵ,选择全局变量的不 同数据类型,对端口连线并保存VI。如图
2019/1/18 32
强度图表的应用
本程序中,先由正弦函数在for循环的边框通道上形成一个 一维数组,然后通过“创建数组”函数形成一个列数为1的 二维数组,送到强度图表控件。因为强度图表所需的数据类
型为二维数组。
2019/1/18 33
5.7.5 数字波形图
数字数据类型
在数字电路设计中经常要分析数字电路的逻辑, 因此通常需要分析时序图。LabVIEW提供了数 数字数据 字波形图解决了此类问题。
4、特点 (1)以独立文件的形式存在 (2)一个全局变量中可以包含多个对象,拥有多种数 据库类型 (3)与子VI不同,不能进行编程,只能用于简单的数 据存储。 (4)速度快 (5)其中的数据可以分别访问
(四)慎用局部变量与全局变量
理由: 1、占用大量内存 2、使程序可读性差 3、在多线程并行运行的程序中,局部变量也可能引 起竞态条件。
二维数组
5.7.7 三维图形
什么是LabVIEW
LabVIEW: 图形化、数据流编程LabVIEW与其他大多数通用编程语言存在两点主要差异。
首先,进行G编程需要将程序框图上的图标连接在一起,之后程序框图被直接编译为计算机处理器能够加以执行的机器码。
采用图形而非文本代表自身的G,包含与最传统语言相同的编程概念。
例如,G包含所有标准构造,如:数据类型、循环、事件处理、变量、递归、面向对象的编程。
图1. G中的While循环由图形化循环直观代表,它会一直执行到停止条件获得满足为止。
第二项主要区别在于:由LabVIEW开发的G代码,其执行时遵照的规则是数据流,而不是大多数基于文本的编程语言(如:C和C++)中更传统的过程化方式(即,被执行的命令序列)。
G等数据流语言(以及Agilent VEE、Microsoft Visual Programming Language、Apple Quartz Composer)将数据作为支持各类程序的主要概念。
而数据流执行模式是由数据驱动的,或者说是依赖于数据的。
是程序内节点间的数据流动,而非文本的顺序行,决定着执行顺序。
这种差别起初也许不大,影响却是非凡的,因为它让程序组件间的数据路径成为开发者关注的重点。
LabVIEW程序中的节点(即:函数、循环等结构、子程序……)获取输入数据、处理数据并生成输出数据。
一旦所有给定节点的输入都包含有效数据,该节点就会执行其逻辑、产生输出数据并将该数据传递至数据流路径中的下一个节点。
从别的节点接收数据的节点只在别的节点执行完以后才开始执行。
G编程的优势直观的图形化编程与大多数人一样,工程师和科学家可通过查看和处理图像来学习,根本无需有意识的冥想。
许多工程师和科学家还会被描述成“视觉型思考者”,这表示他们尤其擅长通过视觉处理组织信息。
换句话说,他们最擅长图像化思考。
这往往在高校中得到强化,那里的学生被鼓励使用流程框图的形式来构建问题的解决方案。
然而,大多数通用编程语言需要您花大量时间学习与该语言相关的特定文本语法,再将语言的结构映射至正被解决的问题。
labview的介绍
虚拟仪器系统及其开发程序LabVIEW介绍引言虚拟仪器是将仪器装入计算机,通过计算机的开发软件来实现仪器的功能的一种仪器测试测量系统。
目前开发虚拟仪器的软件程序为LabVIEW,用户只需通过软件技术和相应数值算法,就能实时、直接地对测试数据进行各种分析与处理,透明地操作仪器硬件,方便地构建出模块化仪器。
从目前虚拟仪器的发展方向和广泛应用来看,不久的将来,虚拟仪器将广泛应用在气象观测和气象科普中,因此有必要对该系统作一番介绍。
一、电子测量仪器的发展电子测量仪器发展至今,大体可分为四代:模拟仪器、数字化仪器、智能仪器和虚拟仪器。
第一代模拟仪器,如指针式万用表、晶体管电压表等。
第二代数字化仪器,这类仪器目前相当普及,如数字电压表、数字频率计等。
这类仪器将模拟信号的测量转化为数字信号测量,并以数字方式输出最终结果,适用于快速响应和较高准确度的测量。
第三代智能仪器,这类仪器内置微处理器,既能进行自动测试又具有一定的数据处理能力,可取代部分脑力劳动,习惯上称为智能仪器。
它的功能块全部都是以硬件(或固化的软件)的形式存在,相对虚拟仪器而言,无论是开发还是应用,都缺乏灵活性。
第四代虚拟仪器,它是现代计算机技术、通信技术和测量技术相结合的产物,是传统仪器观念的一次巨大变革,是将来仪器产业发展一个重要方向。
二、虚拟仪器概述及其特点虚拟仪器(virtual instrumention)是基于计算机的仪器,是美国国家仪器公司(National Instruments Corp. 简称NI)于1986年提出的。
计算机和仪器的密切结合是目前仪器发展的一个重要方向。
粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。
随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。
另一种方式是将仪器装入计算机。
以通用的计算机硬件及操作系统为依托,实现各种仪器功能。
虚拟仪器-第4章 LabVIEW的程序结构
数据隧道
条件结构内部与外部之间的数据也是通过隧道来交换传递的。 向条件结构边框内输入数据时,各个子程序框图连接或不连接这个数 据的隧道都可以。从条件结构边框向外输出数据时,各个子程序框图都必 须为这个隧道连接数据,否则隧道图标是空的,程序也不能运行。 如果允许没有连线的子程序框图输出默认值,可以在数据隧道上右击, 在弹出的快捷菜单中选择“未连线时使用默认”命令,在这种情况下,程 序执行到没有为输出隧道连线的子程序框图时,就输出相应数据类型的默 认值。
【实训练习】
用条件结构来实现两个数的加、减、乘、除四则运算,要 求用组合框作为条件结构的选择器。
4.3 顺序结构
LabVIEW作为一种图形化的编程语言,有其独特的程序执行顺序——数据 流执行方式,数据流经节点的动作决定了程序框图上VI和函数的执行顺序。 但在实际中希望节点按一定的次序执行,这就需要引入顺序结构执行。 LabVIEW顺序结构的功能是强制程序按一定的顺序执行。
种变量的操作方法
第4章 LabVIEW的程序结构
程序结构对任何一种计算机编程语言来说都是十分重要的,它控制整 个程序语言的执行过程,一个好的程序结构,可以大大提高程序的执行效率。 LabVIEW作为一种图形化的高级程序开发语言,执行的是数据流驱动机制, 在程序结构方面除支持循环、顺序、条件等通用编程语言支持的结构外,还 包含一些特殊的程序结构,如事件结构、使能结构、公式节点等等。
条件接线端是一个布尔变量,接入布尔 值用于控制循环执行。条件接线端有两种 使用状态。
循环框架 为真时停止
计数接线端 条件接线端
为真时继续
与For循环是在执行前检查是否符合条件不同,While循环是在执行后再检查条 件端子,因此,在While循环的执行流程中,循环框架中的代码至少执行一次。
LabVIEW程序设计步骤
LabVIEW 程序设计步骤下面通过一个设计实例来详细介绍虚拟仪器软件LabVIEW 的程序设计步骤。
设计目标:假设有一台仪器,需要调整其输入电压,当调整电压超过某一设定电压值时,需通过指示灯颜色变化发出警告。
1 建立新VI启动LabVIEW 程序,单击VI 按钮,建立一个新VI 程序。
这时将同时打开LabVIEW 的前面板和后面板(框图程序面板)。
在前面板中显示控件选板,在后面板中显示函数选板。
在两个面板中都显示工具选板。
如果选板没有被显示出来,可以通过菜单查看(View )/工具选板(Tools Palette )来显示工具选板,通过查看(View )/控件选板(Controls Palette )显示控件选板,通过查看(View )/函数选板(Functions Palette )显示函数选板。
也可以在前面板的空白处,单击鼠标右键,以弹出控件选板。
2 前面板设计输入控制和输出显示可以从控件选板的各个子选板中选取。
本例中,程序前面板中应有1个调压旋钮,1个仪表,1个指示灯,1个关闭按钮共4个控件。
1)往前面板添加1个旋钮控件:控件(Controls )→ 新式(Modern ) → 数值(Numeric ) → 旋钮(Knob ),如图2-14所示,标签改为“调压旋钮”;2)往前面板添加1个仪表控件:控件(Controls )→ 新式(Modern ) → 数值(Numeric ) → 仪表(Meter ),如图2-14所示,标签改为“电压表”。
3)往前面板添加1个指示灯控件:控件(Controls )→ 新式(Modern )→ 布尔(Boolean ) → 圆形指示灯(Round LED ),如图2-15所示,将标签改为“上限灯”。
4)往前面板添加1个停止按钮控件:控件(Controls )→ 新式(Modern )→ 布尔(Boolean ) 图2-15 添加指示灯、按钮控件图2-14 添加旋钮、仪表控件→ 停止按钮(Stop Button ),如图2-15所示,将标签改为“关闭”。
labview程序设计模式(五)—生产者消费者模式(4)_生产者消费者循环
LabVIEW程序设计模式(五)—生产者/消费者模式(4)_生产者/消费者循环本节将使用“多循环”来解决程序并行运行的问题,那么程序中的两个循环如何进行数据交互和共享呢?最普通的方式是采用全局变量或局域变量,但是当两个循环执行的速率不相等时,必然会造成数据的丢失或重复。
如前所述,LabVIEW提供了队列操作函数,允许数据的发送者和接受者之间建立一条缓冲通道,这样就避免了循环不同步带来的影响。
如图37所示,将整个过程与供水系统进行类比,在数据产生/采集端(供水局)产生数据后,并不直接向终端用户供水,因为前者产生水的速率与后者消耗水的速率并不相同。
此时需要建造蓄水池将供水局产生的水放入到蓄水池中,同理获取的数据也放入该缓冲区中。
当终端用户需要用水时,直接从蓄水池中获取就可以了,同理在进行数据显示和分析时直接从数据缓冲区中获取就可以了。
图37 生产者/消费者模型当然,上面的模型也会存在一个问题:数据缓冲区/蓄水池的容量?假定供水局不停地产生自来水,而终端用户却不消耗水,这样便会导致蓄水池装满而溢出。
反之当终端用户耗水量太大时,导致没有水可用。
LabVIEW中的队列函数提供了一种很好的方式规避了这个问题,由于队列中的元素是“先进先出”的,因此确保了接收到的数据是有序的。
在LabVIEW的队列操作中(入列和出列函数),提供了timeout选项以处理数据缓冲区的溢出或不足。
当数据溢出时,入列函数(数据进入队列)将停止发送数据(处于等待状态),直到缓冲区存在数据空间或者达到了timeout设置的时间;而当数据不足时,出列函数(数据流出队列)将停止接收数据(处于等到状态),直到缓冲区进入了新的数据或者达到了timeout设置的时间。
【应用6】所示,生产者与消费者之间传递的数据是一个连续的sine波形,二者靠大小为20个点的缓冲区连接。
右下角是“停止”按钮,用户控制程序的停止执行。
例程提供了操作方式控件控制生产者和消费者的数据传递速率,包含五种状态:不生产,只消费、生成快于消费、生成速率等于消费速率、生成慢于消费、只生产,不消费。
LabVIEW编程中的面向对象设计与开发方法
LabVIEW编程中的面向对象设计与开发方法LabVIEW是一种流程式编程语言,广泛应用于数据采集、仪器控制以及测试和测量领域。
面向对象设计和开发方法在LabVIEW编程中起着重要的作用,可以提高代码的可维护性和重用性。
本文将探讨LabVIEW编程中的面向对象设计与开发方法。
一、面向对象编程简介面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范型,主要思想是将现实世界的概念抽象成为对象,并通过对象之间的交互来实现程序的功能。
面向对象编程具有封装、继承和多态等特性,能够提高代码的可读性和可维护性。
二、LabVIEW中的面向对象设计原则在LabVIEW中,可以通过使用面向对象的设计原则来提高程序的可维护性和灵活性。
1. 封装性(Encapsulation):将数据和操作封装在对象中,通过公共接口进行访问。
在LabVIEW中,可以使用类(Class)来实现封装性,将数据和方法封装在类中。
2. 继承性(Inheritance):通过继承机制,可以实现代码的重用,并且方便对代码进行扩展。
在LabVIEW中,可以使用继承关系来实现类之间的关联。
3. 多态性(Polymorphism):通过多态机制,可以实现接口的统一,提高代码的灵活性。
在LabVIEW中,可以使用虚方法(Virtual Method)和动态派生(Dynamic Dispatch)来实现多态性。
三、LabVIEW中的面向对象开发方法1. 创建类(Class):在LabVIEW中,可以通过面向对象的方式创建类。
首先,需要创建一个新的面板,并在控件栏中选择"新增类"。
然后,可以根据需要添加属性和方法,并设置访问权限。
2. 定义类的继承关系:在LabVIEW中,可以通过继承关系来实现代码的重用。
在创建类时,可以选择继承已有的类。
通过继承,子类可以继承父类的属性和方法,并根据需要进行扩展。
LabVIEW程序设计从入门到精通PPT课件
.
24
3.2.1 LabVIEW 8.2 启动界面
VI程序和工程 创建栏
新近打开的 工程和VI程 序列表栏
.
帮助资源列 表栏
25
3.2.2 前面板和程序框图
• LabVIEW程序被称为VI,扩展名默认为.vi
框图窗口 前面板窗口 .
图标 26
3.2.3 控件选板
.
27
3.2.3 控件选板
.
12
.
13
1.4 LabVIEW的发展历程
.
14
1.5 如何学好LabVIEW
• 1、多学习实例,本书以及LabVIEW都提供 了大量的实例。
• 2、大胆尝试,尝试编写自己的程序。
“I hear…I forget. I see…I remember. I do…I understand.”
.
D ROM
5
1.1 虚拟仪器的概念
• 虚拟仪器系统是由计算机、应用软件 和仪器硬件三大要素构成的。计算机 与仪器硬件又称为VI的通用仪器硬件 平台。
.
6
1.1 虚拟仪器的概念
• 软件技术是虚拟仪器的核心技术。常用 的仪器用开发软件有LabVIEW、 LabWindows/CVI、VEE等等,其中以 LabVIEW应用最为广泛。
.
7
1.2 什么是LabVIEW?
• LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文 本行创建应用程序的图形化编程语言。
• 传统文本编程语言根据语句和指令的先后顺序决 定程序执行顺序,而LabVIEW 则采用数据流编 程方式,程序框图中节点之间的数据流向决定了 程序的执行顺序。它用图标表示函数,用连线表 示数据流向。
LabVIEW程序界面的布局
俗话说:“人靠衣装,佛靠金装”,应用程序的界面是提供给使用者的第一印象,直接影响到应用程序的用户体验。
因此,有效、合理的界面能够为程序增色不少。
LabVIEW 提供了丰富的界面控件供开发者选择,有经验的程序员往往能够利用这些控件做出令人称赞的界面效果。
在《LabVIEW Development Guidelines》(下载)和《The LabVIEW Style book》(介绍)书中都有专门的章节来论述LabVIEW程序界面设计规范和方法。
本文主要从应用应用开发的角度描述一些通用的界面设计的方法。
1.1控件的分类和排列在LabVIEW中,控件通常被笼统地分为控制型控件(Control)和显示型控件(Indicator)。
而对某一个具体的应用而言,更需要把Control和Indicator进行细分,使得具有同样功能的控件排放在一起,甚至组成若干个Group组。
LabVIEW提供了一系列工具供程序员排列和分布控件的位置以及调整控件的大小,如图1所示。
图(a)是排列对齐工具,其中的图标可以很清楚地知道各个按钮的作用。
使用Ctrl+Shift+A可以重复上一次的排列方式。
图(b)是位置分布工具,可以快速地分布各个控件之间的位置。
图(c)是大小调整工具,可以快速地调整多个不同控件的大小(注意:部分控件的大小是不允许被调整的)。
图(d)是组合和叠放次序工具,Group表示把当前选择的控件组合起来形成一个整体;Ungroup与Group相反,表示分散已经整合起来的各个控件;Lock 表示锁定当前选择的控件,此时控件将无法被编辑(包括移动控件的位置,调整控件的大小等);Unlock是解锁指令;Move Forward、Move Backward、Move to Front和Move to Back 表示修改当前选择控件的排放次序。
1 控件排列和分布工具图2是某个测试界面的控件摆放实例,尽管这些控件都是Indicator控件,但是仍然根据显示功能和内容的不同将控件进行了分类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabVIEW程序设计模式(五)—生产者/消费者模式(3)_LabVIEW程序的动态调用
LabVIEW程序设计2009-05-19 17:11:09 阅读696 评论0 字号:大中小订阅
简单而言,动态调用指的是通过程序控制另外一个程序的运行、停止、赋值和获取值等。
LabVIEW提供了多种动态调用的方式,从底层而言是通过VI Server 技术实现的。
图31所示为LabVIEW中的Application Control选板,动态调用所使用的节点都位于这个选板。
当调用一个在硬盘、内存甚至是网络路径上的vi时,首先要使用Open VI Reference以将该VI载入内存并获取VI的“句柄(Reference)”;然后再使用该句柄进行其它的控制操作;最后再关闭该VI的句柄避免内存泄漏,这就完成了一次对VI的调用。
图31 Application Control选板
图32是一个动态调用的具体实现代码,首先使用Open VI Reference获取被动态调用VI的Reference(例子中是C:\average.vi);再使用Call By Reference Node 节电动态运行该VI;最后关闭VI的Reference。
在使用Call By Reference Node 时需要事先指定被调用VI的输入输出接口,也就是说这种动态调用的前提是必须知道被调用VI的输入输出接口,否则无法进行动态调用。
图32 VI的动态调用
Open VI Reference的路径输入是一个多态的输入口,也可以使用String输入,如图33所示。
此时被调用的VI必须在内存中,且输入的是被调用VI的文件名。
值得一提的是这种“文件名”调用方式在可执行程序中是无法被调用的,因此建议最好采用路径的调用方式。
图33 Open VI Reference的多态性
【应用5】
本例将使用LabVIEW的动态调用方式实现斐波那契数列(Fibonacci数列)。
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。
在数学上表述为:f(n)=f(n-1)+f(n-2),其中n>=3,f(1)=f(2)=1。
显然这是一个比较熟悉的递归调用,但是在LabVIEW中似乎很难实现。
由于LabVIEW不允许同名的VI同时在内存中,因此一个VI是无法VI调用本身的。
但是,通过VI的可重入技术和动态调用技术却可以实现VI的递归调用。
图34所示为Fibonacci数列在LabVIEW中递归的实现方式。
case结构有两个分支,当n<=2时直接输出f(n)=1;当n>=3时,输出f(n)=f(n-1)+f(n-2)。
此时需要把VI设置为可重入状态。
图34 Fibonacci数列
同理我们也可以使用这种递归的方式实现f(n)=n!的算法,从数学上可以写作f(n)=n*f(n-1),其中n>=1,f(0)=1。
具体的实例将不再详述。
此外,递归算法的效率比较低,在实际应用中应谨慎使用。
打开Highlight工具,在Call By Reference Node运行时,程序是处于等待状态的,只有被调用的VI运行完毕,主程序才会继续执行。
这似乎无法解决在本节开头提到的问题,那么是否存在一种动态调用方式使被调用的VI与主VI之间分别独立运行呢?答案是肯定的。
VI本身是有很多的属性和方法的,如图35所示。
使用这些方法就可以动态控制VI的运行、停止和赋值,各个属性节点和方法的具体含义见LabVIEW的帮助文档。
使用这种方式动态调用VI时,并不需要知道VI的输入输出接口。
图35 VI Method
图36是该使用“属性节点和方法”实现动态调用的一个实例。
在大多数应用程序启动时会显示一个启动画面用来显示版权、开发单位、软件版本等信息,等待2秒之后关闭启动界面并启动应用程序主界面。
图中使用了动态调用的方式启动主程序(Main.vi)并使主程序独立运行,首先运行程序后设置2秒钟的延时;其次,将启动画面的界面设置为“隐藏”(并没有退出内存,只是隐藏了前面板),并且使用Open VI Reference获取VI的句柄;然后使用FP.Open属性打开主程序的前面板(只是打开了前面板并没有运行);使用Run VI方法运行主程序,将Wait Until Done设置为false,这样就可以保证被调用VI的独立运行;最后,关闭当前VI的前面板。
图36 VI的动态调用
通过Highlight工具看出该VI的运行是独立的,并没有等待Main.vi运行结束才继续执行。
评论这张
转发至微博
0人 | 分享到:
阅读(696)| 评论(0)| 引用(1) |举报。