您好、欢迎来到现金彩票网!
当前位置:秒速快3 > 数据流语言 >

LabVIEW数据流控制方法研究

发布时间:2019-06-12 00:00 来源:未知 编辑:admin

  0 引言 LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是虚拟仪器概念的首创者,是世界上最优秀的虚拟仪器软件开发平台[1][2]。它使用图形化数据流编程语言,这种新兴的编程方式给编 程人员带来了新的困难,主要体现于对数据流的控制上。LabVIEW编程人员遇到困难往往求助于C语言[3]。随着虚拟仪器的广泛应用,为提高编程

  LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是虚拟仪器概念的首创者,是世界上最优秀的虚拟仪器软件开发平台[1][2]。它使用图形化数据流编程语言,这种新兴的编程方式给编 程人员带来了新的困难,主要体现于对数据流的控制上。LabVIEW编程人员遇到困难往往求助于C语言[3]。随着虚拟仪器的广泛应用,为提高编程效率, 真正理解并灵活掌握LabVIEW数据流语言是必要的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  我们之所以广泛调用C及其他文本语言来解决LabVIEW难题,正是我们对这种数据流控制的编程方式认识不深的缘故。本文提供若干 LabVIEW数据流控制方法,强调灵活运用便能解决实际编程中遇到的难题。单选功能按钮的设计是个很典型的数据流控制实例,文中给出的用LabVIEW 本身解决变量冲突、响应时序控制、初始状态自适应调整等问题的方法,没有使用事件驱动结构,避免了在测试系统中并行使用事件驱动结构产生的冲突,具有程序 和版本的通用性,在实际操作运行中证明确实可行有效。

  本文作者创新点: 本文剖析了LabVIEW数据流语言的特点,提供了其若干有效控制方法,文中给出的用LabVIEW本身解决变量冲突、响应时序控制、初始状态自适应调整 等问题的方法,没有使用事件驱动结构,避免了在测试系统中并行使用事件驱动结构产生的冲突,具有程序和版本的通用性,而不必求助于其它代码语言(如C语 言),这样,既减轻了程序的复杂性,提高了效率,还丰富了LabVIEW的应用。

  [1] 杨乐平,李海涛,赵勇等VIEW高级程序设计[M].北京:清华大学出版社,2003

  [3] 周广清,陈光杰. LabVIEW环境下单选功能键的设计[J].医疗卫生装备,2003(5):9-11

  [6] 冯劲梅,连之伟.对LabVIEW使用中若干问题的探讨[J].中国制造业信息化,2003(9):121-124

  [7] 李扬,郑莹娜,朱铮涛.图形化编程语言LabVIEW环境及其开放性[J].计算机工程,1999(4):63-65

http://istighcomputing.com/shujuliuyuyan/298.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有