原创 LabVIEW的核心要素——数据流

2008-5-15 23:52 4353 7 5 分类: 测试测量
学习过LabVIEW的朋友都知道:LabVIEW是一个图形化软件开发环境,它所使用的编程语言是G语言,也称为图形化编程语言。由于LabVIEWG语言中开发的比较早、且开发的最成功的,所以人们还是习惯上用LabVIEW来指代G语言。当然,还有其它的G语言,比如像Agilent VEE等。

    传统文本编程语言根据指令的先后顺序决定应用程序执行顺序,也称为:“控制流”;而LabVIEW则按照“数据流”的模式运行VI。所谓数据流也就是说:当所有的输入端都具备了必要的输入数据时,程序框图节点将运行。节点在运行时产生输出数据并将该数据传送给数据流路径中的下一个节点。数据流经节点的动作决定了程序框图上VI和函数的执行顺序。


    使用LabVIEW进行编程则必须按数据流的方式进行程序设计。所以,养成良好的数据流编程习惯是非常必要的。那么根据数据流的特点,编程时要注意哪些问题呢?

1、根据自然的数据的依赖关系,从左向右进行程序设计


1数据依赖关系



    图1 可以清晰的表明数据流是依据数据依赖关系从左向右流动的。“差”只有在“和”完成后才能得到;以此类推,“积”必须在“差”完成后获得;而“商”也必须在得到“积”后获得。所以,这里是利用数据依赖关系实现数据流的。


    图1中的下图比较好的呈现出数据流的关系,所以我们称之为“好的习惯”,建议大家习惯用这种方式来进行程序设计。


    2 是一个数据采集任务设计的实例(良好的数据流概念)。



2 数据采集任务设计


我们上面谈到利用数据依赖关系很容易满足数据流的要求(自然的数据依赖关系)。那么,当数据依赖关系不存在或不明显时,怎么办?


2、 利用强制数据依赖关系之一:顺序结构

    如果我们想要知道一个vi的运行时间可以通过下面的实例程序进行测试,程序如图3所示。这     里我们利用强制数据依赖关系“顺序结构”来满足数据流的要求。这里待测vi我们用一个“等   待”函数来代替。


3强制人工数据依赖关系“顺序结构”


顺序结构确保:第一帧:开始计时,第二帧:运行“等待”函数或待测vi,第三帧:停止计时并显示结果。


这里要注意两点:


第一:Windows操作系统的定时精度为:1mS。所以,测量结果会出现100±1mS


第二:如果vi的运行时间很短小于1mS,可在第二帧内的vi外面加个N次的for循环增加运行时间。然后,在结果中再除个N


现在,我们用“等待下一个整数倍毫秒”(定时选板)函数来替代“等待”函数,运行后会发生什么情况?这应该对理解这两个函数的不同会有所帮助。


3、  利用人工数据依赖关系之二:错误簇


2中各个函数之间的错误簇连接就实现了利用人工数据依赖关系,与上面连接的任务I/O起的作用是一致的(它们应该成对出现)。有关“错误簇”的机制和数据流的作用,敬请看我的另一篇博客:LabVIEW中的“错误机制


4、  利用人工数据依赖关系之三:引用句柄


对于引用句柄LabVIEW的帮助文档是这样介绍的:引用句柄可作为对象(例如,文件、设备或网络连接)的唯一标识。可使用不同类型的引用句柄控件将引用句柄输入或输出VI


 由于引用句柄是一个打开对象的临时指针,因此它仅在对象打开期间有效。如关闭对象,LabVIEW会将引用句柄与对象分开,引用句柄随即失效。如再次打开对象,LabVIEW将创建一个与第一个引用句柄不同的新引用句柄。LabVIEW将为引用句柄指向的对象分配内存空间。关闭引用句柄,该对象就会从内存中释放。

由于LabVIEW可以记住每个引用句柄所指的信息,如读取或写入的对象的当前地址和用户访问情况,因此可以对单一对象执行并行但相互独立的操作。如一个VI多次打开同一个对象,那么每次的打开操作都将返回一个不同的引用句柄。VI结束运行时LabVIEW会自动关闭引用句柄,如果用户在结束使用引用句柄时就立即将其关闭,可最有效地利用内存空间和其它资源,这是一个良好的编程习惯。关闭引用句柄的顺序与打开时相反。例如,如果获得了对象A的一个引用句柄,然后对对象A调用方法使获得对象B的引用句柄,请先关闭对象B的引用句柄然后再关闭对象A的引用句柄。


4引用句柄的几个示例


关于引用句柄我们要注意的是:“引用句柄”是有“生命周期“的。从我们打开引用句柄开始,它就进入新的“生命周期”,直道关闭“引用句柄”后它的“生命周期”结束。如果一个引用句柄的生命周期无限长,那么就意味着发生了“内存泄露”。所以使用时必须注意“打开”与“关闭”必须是成双成对出现的。


    对于本地变量和全局变量来讲,因无法保证数据按数据流的方式工作,所以要尽量避免大量使用。由于顺序结构是强制数据流也尽量甚用。


    上面我们分别介绍了实现或确保数据流编程的几个方法,供大家参考,希望对大家能有一定的帮助。


http://labview7i.blog.sohu.com/81747558.html

文章评论2条评论)

登录后参与讨论

jizzll_617398179 2008-5-18 23:52

图片怎么啦

用户394922 2008-5-17 20:51

不错,怎么图片?
相关推荐阅读
jizzll_617398179 2010-02-08 10:53
正确理解A/D转换器的输入
http://www.freescale.com.cn/tech_ariticles/2005/1102_1.asp 许多嵌入式应用都会用到A/D转换器。然而,如果错误连接了A/D转换器输入端的电路,...
jizzll_617398179 2010-01-12 13:37
好久没来,都长草了
好久没来,都长草了,呵呵。整天忙得很,不过估计再过两个月会轻松点~\(≧▽≦)/~啦啦啦...
jizzll_617398179 2009-03-16 21:57
很奇怪,我收到站内信,但是却找不到发信人呢
发信人是个[],点击就跳到我自己的主页了。只好在这里给那位朋友留言了。 我不知道你说的哪篇文章,还有我也不知道你的EDN的ID。你可以在博客上面留言的。...
jizzll_617398179 2009-03-14 13:08
如何在EXCEL中使用16进制数
最近需要计算串口发送的数据,太多而且比较麻烦。知道EXECL功能强大,所以网上找了找,刚好,不错,很方便。网上找到的http://hi.bccn.net/space-99452-do-blog-id-...
jizzll_617398179 2009-03-05 14:37
〖常识〗不同晶振的最大波特率及其误差
最近犯了个错误,呵呵,晶振和波特率的问题,特查了记在这里,O(∩_∩)O~〖常识〗不同晶振的最大波特率及其误差http://www.aoxue.org/bbs/read.php?tid=65585不同...
jizzll_617398179 2009-02-11 14:30
大端模式和小端模式
转载http://www.cnblogs.com/TsuiLei/archive/2008/10/29/1322504.html大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则...
我要评论
2
7
关闭 站长推荐上一条 /2 下一条