LabVIEW数据流控制方法研究

最新更新时间:2012-03-22来源: 互联网关键字:LabVIEW  数据  流控制 手机看文章 扫描二维码
随时随地手机看文章
引言

  LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是虚拟仪器概念的首创者,是世界上最优秀的虚拟仪器软件开发平台。它使用图形化数据流编程语言,这种新兴的编程方式给编程人员带来了新的困难,主要体现于对数据流的控制上。

  本文剖析了LabVIEW数据流语言的特点,提供了其若干有效控制方法,指出LabVIEW本身即可解决数据流控制上的变量冲突、响应时序控制、初始状态自适应调整等问题并保证其通用性,而不必求助于其它代码语言(如C语言),这样,既减轻了程序的复杂性,提高了效率,还丰富了LabVIEW的应用。文中以单选功能按钮设计实例详述了变量冲突、响应时序控制、初始状态自适应调整等问题的具体解决方案,在某型装备测试系统的实际运行中验证了该方法可行有效。

  1 数据流编程的特点

  数据流语言的每个节点在执行之前需要提供其所有输入端口的有效数据,LabVIEW允许用户在一个图表上拥有任意数量的不同节点,所有的节点可以并行执行。LabVIEW环境还支持多个VI并行执行,而不管操作系统或者计算机的功能如何。这些功能使得用户无须做任何特殊编程工作就可以非常自由地同步执行各种不同的任务。

  LabVIEW数据流编程克服了文本语言编程内存管理中的许多困难。在LabVIEW中,不必给变量分配内存,也不必为变量赋值或者从变量取值,只需创建一个带有描述数据转换关系的内部联系的框图程序。产生数据的函数可以精心地为数据分配内存,当数据不再使用时,相应的内存被释放。当向数组或字符串添加新数据时,管理新数据的足够内存资源会自动进行分配,这种自动的内存分配操作是LabVIEW的主要优势之一。

  2 数据流编程的难点及若干解决方案

  LabVIEW程序的内存管理是自动进行的,中间状态的捕捉和控制十分困难。例如,实时显示现场采集数据串的最大值问题、通过按钮手动控制现场采集数据串某一时刻数据作为比较对象的问题以及单选功能按钮的实现问题等等,似简实难。经编程实践,总结方案如下:

  (1)结构控制

  循环结构,如For循环和while循环结构;顺序(Sequence)结构,适当使用Sequence结构能提高程序可读性,让数据清晰流动;分支结构(case Structure);事件结构(Event Structure),允许用户在前面板的直接干预或程序不同部分之间的交流影响程序的执行;定时循环(Timed Loop)结构,可创建多采样率(multi-rate)的、对时间要求严格(time-critical)的数据采集应用程序,并定义不同优先级的循环。

  (2)移位寄存器(Shift Register)控制

  移位寄存器与While或For循环结合能够保存各种状态信息,未初始化的移位寄存器则保留着以前的内容。

  (3)变量控制

  变量在这里指局部变量和全局变量。局部变量用来在一个VI程序内部传递数据,它不仅可以解决连线的困难,而且可以对同一个控件多次写入和读出数据。全局变量则可用于在不同程序之间传递数据,全局变量也是用一个控件的形式存放数据,但是这个控件独立于调用它的VI,以一个特殊的VI作为自己的容器。

  (4)通告(Notifier)和队列(Queue)控制

  通告和队列的方式有时可代替变量方式来传递数据。使用通告方式传递数据时,只有写入数据并告知后才能读取数据。通告以广播的方式发布,收到广播的用户都可以去读数据。队列方式传递数据是最先去读数据的用户读完数据就将它擦掉,只有一个接收数据的用户。

  单一使用上述某种方案往往力不从心,综合灵活运用才能在编程中产生较好的效果。

  3 实例分析

  单选功能按钮的设计是许多综合测试系统设计中的一部分。它要求完成的功能是:

  ⑴ 某一个按钮按下去时,其余按钮全部处于无效的工作状态。

  ⑵ 按下去的按钮要求能无误地启动系统的该项功能。

  设计中需要解决以下问题:

  ⑴ 变量冲突。程序包含按钮间的相互控制,其控件及局部变量间的冲突问题十分突出;

  ⑵ 响应时序控制。按钮操作和读按钮状态的先后次序需进行适应控制,否则容易产生空档(按钮按下却不启动系统的功能)和几个按钮同时被按下等异常情况,导致程序紊乱;

  ⑶ 初始状态自适应调整问题。

  用LabVIEW设计流程图及流程图示说明如下所示:

  BUTTON ARRAY :按钮合在一起的数组;

  SEARCH 1D ARRAY:比较两数组的不同,返回不同元素的序号;

  INDEX ARRAY(INDEX,ELEM):数组ARRAY, INDEX是序号,ELEM是元素。此函数是找出数组ARRAY中序号为INDEX的元素;

  NULL:空操作;

  DIFFERENCES:差异信息;

  D.B.:Digital buttons数字化按钮,即用编号表示不同按钮。

  总流程为将框图1所示流程循环两次!再进行框图2所示流程,具体步骤详述如下:

  针对问题⑴,程序遵循“对操作的按钮不操作”的原则。如框图1,用SEARCH 1D ARRAY分辨出被操作的按钮,对其它按钮置“假”。这样,按钮间就可不发生冲突。

  框图1

  框图2

针对问题⑵,则必须充分考虑程序的数据“流”运行过程。分述如下:

  ① 每次读BUTTON布尔值时,都要考虑外界面是否有对按钮的操作输入,这在框图1、2中都体现得很明显;

  ② 框图1要循环2次很关键。考虑这样一种情况:外界面对按钮的操作在BUTTON ARRAY(1)与BUTTON ARRAY(2)之间,则在循环的第一次对按钮的操作没有起作用,但它以反馈机制把按钮信息传给了始端,由于程序运行的速度远在人工界面上的手动操作速度之上,所以循环的第二次无外界输入,这样对按钮的操作在循环二次后便响应了,没有挂空。同理,当外界面对按钮的操作介于BUTTON ARRAY(2)与框图2的read BUTTONs之间时,外界面对按钮的操作会在下一循环(对实际测试系统肯定是大范围循环操作的)产生作用,由于程序运行得很快,操作者看到的是“实时”的操作。如果在read BUTTONs之后,那就回到框图1的始端了。因此,任何时候按下按钮,程序皆运行正常。

  针对问题⑶,未初始化的移位寄存器能保留原有的状态。在程序运行前,若出现按钮异常现象,由于程序默认一个按钮按下,异常按钮会立即得以纠正。

  对于数字化按钮(见流程图框图2)的实现,将按钮状态转化为0、1,用一个连加运算根据其和的大小便可知道是否同时有多按钮或单按钮或无按钮按下,从而将按钮信号引出。

  图2 部分LabVIEW程序示例

  4 结束语

  单选功能按钮的设计是个很典型的数据流控制实例,文中给出的用LabVIEW本身解决变量冲突、响应时序控制、初始状态自适应调整等问题的方法,没有使用事件驱动结构,避免了在测试系统中并行使用事件驱动结构产生的冲突。

关键字:LabVIEW  数据  流控制 编辑:神话 引用地址:LabVIEW数据流控制方法研究

上一篇:选择合适示波器带宽方法
下一篇:电子管扩音机测试指标的精密调整

推荐阅读最新更新时间:2023-10-12 20:38

如何对待数据采集设备中测量误差问题
我们的日常工作经常要从显示屏幕上读取测量数据,如汽车仪表盘上用数字表示的速度、实验室温度,或者是示波器上所显示的读数。尽管我们很相信这些测量数据,但它们绝对不是百分之百准确的,汽车速度计上所显示的速度很容易出现几公里/小时的误差,温度测试也可能会相差好几度。速度计上的小小误差还不是什么大问题,但当我们建立一个专业的测量和数据采集系统时,认识可能存在的最大误差是非常重要的。任何数字测量系统都存在一个局限,即代表实际测量值的数字是有限的,其最大数量由所使用的位数决定。 例如一个8位二进制数有28=256个可能值,如果某个速度计使用8位来表示0到255公里/小时范围的速度,则速度值将以1公里/小时的间隔进行显示,因此司机总会有约0.5公里
[测试测量]
LabVIEW中使用事件的说明与建议
由于LabVIEW是一个图形化编程界面,因此其事件处理和其它编程语言中的事件处理有所不同。下文列出了在LabVIEW应用程序中使用事件的说明和建议。 避免在循环外使用事件结构。 记得在 值改变 事件分支中读取触发布尔控件的接线端。 条件结构用于处理触发布尔控件的撤消操作。 将一个条件分支配置为处理多个通知事件的操作时,使用警告信息。 不要使用不同的事件数据将一个分支配置为处理多个过滤事件。 如含有事件结构的While循环基于一个触发停止的布尔控件的值而终止,则记得在事件结构中处理该触发停止布尔控件。 如无需通过程序监视特定的前面板对象,考虑使用 等待前面板活动 函数。 用户界面事件
[测试测量]
5月份国内新能源汽车数据分析
在 5 月份整体的燃油车恢复比较好的背景下,新能源汽车怎么卖将成为一个大的课题。目前新能源汽车两级分化比较厉害,特斯拉在中国的加速推进,对于国内的新能源汽车在原有的市场产生了挺大的影响。 01 5 月新能源合格证数据概览 5 月新能源汽车合格证为 7.7 万辆,同比下降 33.1%,前五个月累计 26.5 万辆,同比下降 45.7%。半年过去了,合格数据不是特别理想。在各条战线,随着各级政府的节流措施落实,能客观上帮上新能源汽车兑现销售的主要落实到了限购城市的支持。这里后续会具体根据上牌数据来讨论。 图 1 中国新能源汽车整体的产量 1) 新能源乘用车:新能源乘用车的合格证为 7.1 万辆,同比下降 30.4%
[嵌入式]
5月份国内新能源汽车<font color='red'>数据</font>分析
LabWindows/CVI在风洞数据采集中的应用
  如今在测控领域用于开发软件系统的开发平台主要有:LabVIEW、C++、VB、Agilent VEE、LabWindows/CVI。而LabWindows/CVI由于提供了丰富的函数库和各种方便功能得到了不少使用者的青睐。LabWindows/CVI是National Instrument公司开发的一种基于ANSI C的开发平台,它集成了编译器、连接器和高级编辑、调试工具。内建强大的仪器库,从仪器控制、数据采集到数据分析和图像显示。LabWindows/CVI自带代码生成、交互式函数面板、函数提示、快速控件查找等功能,可以帮助开发者进行快速开发。   风洞数据采集主要包括压力、温度、天平等信号。   系统构成
[测试测量]
LabWindows/CVI在风洞<font color='red'>数据</font>采集中的应用
ARM9平台下的CMOS图像传感器数据采集系统
引言 随着CMOS(互补金属氧化物半导体)技术的发展及市场需求的增加,CMOS图像传感器得以迅速发展。由于采用了CMOS技术,可以将像素阵列与外围支持电路(如图像传感器核心、单一时钟、所有的时序逻辑、可编程功能和A/D转换器)集成在同一块芯片上。与CCD(电容耦合器件)图像传感器相比,CMOS图像传感器将整个图像系统集成在一块芯片上,具有体积小、重量轻、功耗低、编程方便、易于控制等优点,因此,CMOS图像传感器的应用已经变得越来越广泛。 但是,目前市场上的大部分基于CMOS图像传感器的图像采集系统都是采用DSP与图像传感器相连,由DSP来控制图像传感器,然后由DSP采集到图像后再通过USB接口将图像数据传输到PC机进行
[单片机]
ARM9平台下的CMOS图像传感器<font color='red'>数据</font>采集系统
串口发送数据格式
作为单片机入门的我们,在做普通串口通信实验时候,我们发送的都是十六进制数!如U0DBUF = j,默认j为十六进制数,串口调试助手有两种显示格式,当勾选hex时,就是显示字符对应的十六进制数,取消勾选,则显示我们所发的字符!比如: 情景一:void UartTX_Send_String(uchar *Data,int len) { int j; for(j=0;j { U0DBUF = *Data; while(UTX0IF == 0); UTX0IF = 0; Data++; } } UartTX_Send_Strin
[单片机]
基于LabVIEW和ARM嵌入式数据采集与远程传输控制系统
  基于嵌入式网络的远程数据采集系统具有不受地理环境、气候、时间的影响,小型便携,使用灵活方便,交互操作性好,传输速率高,可靠性高,功耗低和移动性好等优点。目前常用的嵌入式CPU中,ARM由于性价比在同类产品中比较突出,目前用得越来越多,尤其是结合开源的嵌入式Linux操作系统以后,更是得到越来越多设计者的青睐。LabVIW作为一种功能强大,简单易用和设计灵活的图形化编程语言,已经广泛地被工业界、学术界和研究实验室所接受,越来越多地应用在虚拟仪器、测试测量、数据分析、信号处理以及远程控制中。本设计中,远程数据采集系统采用基于ARM和嵌入式Linux的方案来实现。采用高性能的ARM嵌入式微处理器Samsung S3C2440作为系统
[嵌入式]
STM32定时器触发DMA数据传输失败的原因如何解决
有人使用STM32的定时器事件触发DMA,让其将内存数据传输到通信外设的数据寄存器进行发送,发现DMA根本就不动作。 比方以基于STM32F411的芯片为例,通过TIM3更新事件触发DMA请求,DMA从内存将数据送到SPI1‍的数据寄存器,从而完成数据发送。 他采用CubeMx进行配置。基本配置如下: ‍ 相关用户实现代码如下: 从配置过程和代码实现来看,似乎都没有问题。那DMA怎么就是不动作呢? 问题出在我们使用上面的函数做DMA传输所关联源端和目标端时,出现了想当然的情况。 我们利用TIMER事件来作为DMA请求源时,而作为数据传输的源端或目的端,都是我们用户指定的。这时就一定要注意源端和目标端是当前DMA
[单片机]
STM32定时器触发DMA<font color='red'>数据</font>传输失败的原因如何解决
小广播
最新模拟电子文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved