loading ...
loading...

2006-10-29 | LabVIEW中的“错误”机制

分享
标签: 错误  程序  LabVIEW 

对于任何一种编程语言或编程环境来说,建立或具有发现错误的机制都是非常必要的,LabVIEW也不例外。特别是LabVIEW面对更多的应用是测试、测量,所以在这方面,程序的设计者更应引起对错误机制的足够重视。

 

     LabVIEW提供了以下提示错误的方法:

1、   LabVIEW编译器

LabVIEW编译器是发现程序错误的第一道关卡。与其它编成语言不一样,LabVIEW编译器是嵌入在LabVIEW开发环境中的即时编译器,我们根本无法察觉到它的运行时间或速度。因为它是在编程的每一步都进行编译的,当程序编制过程中出现错误或必要的参数还没有设定时,LabVIEW开发环境中的“运行”按钮呈现出折断形式。此时双击该按钮会弹出一个“Error List”的对话框,指出错误的数量、位置及可能产生的原因。用鼠标双击任何的一条灰化错误提示,将在程序框图上找到错误的发生地,并用虚线将产生错误的部件提示出。比如:我们在一个空白的程序框图上放置一个“DAQmx Write.vi”就会看到我们上述的现象发生。当我们将相关参数配置完成时,“运行”按钮恢复正常。

由于LabVIEW编译器可以即时发现错误,所以大大的减少了纠正错误的时间提高了编程效率(不必错误成堆才去处理)。这一特点对于初学LabVIEW的人来说体会是非常深刻的。

 

2、   错误簇(Error Cluster

LabVIEW编译器通常是针对程序代码的错误给出提示,这是一种外在的错误机制。并不能保证程序运行时不出现错误。LabVIEW还提供了另一种在程序运行时发现错误,通报错误的内部错误机制,那就是错误簇 (Error Cluster)。

错误簇(Error Cluster)中包含了三种不同数据类型的元素:

Status——布尔型,True表示有错误

Code  ——整数型(32位),给出LabVIEW 定义的错误代码

Source——字符串类型,用来解释、说明错误(可能的)原因。

 

使用者也可以定义自己的错误代码和错误说明。

 

错误簇是LabVIEW中非常好的一个机制,与其它语言编制的应用程序不同,LabVIEW要面对重多的硬件模块来设计应用程序,不可预见的事情太多,它要照顾到的面极为广泛,没有一个好的错误机制是绝对不行的。

 

错误簇的另一个作用就是引导数据流,它是一个很好的公共线程。我们知道LabVIEW 的编程及程序运行都基于数据流的,使用错误簇会提供更加清晰的程序运行流程。

 

假如:我们的程序中使用了5vi,同时它们的错误簇依次串联,如果第一个vi出现错误,那么其它4vi将都不会运行,错误将从第一个viError Out)开始沿着错误簇按数据流的关系依次传递到最终的Error Out。这就是错误簇的运行机理。显然,错误的传递也遵循数据流的原则。

 

建议和忠告:

1、   设计subvi时最好使用VI 模版中的SubVI with Error Handling


                                        图1 subvi 模版

应该有使用这个vi的好习惯,当外部发生错误时,错误直接从入到出(Error case)。否则,错误会按数据流的方式沿着subvi里的错误线传递到erroe out
 

2、 错误处理最终使用Simple Error Handler.vi结束

在这个vi中,将“type of dialog ”参数设定为:“continue/stop + warning”或“continue or stop  message”。见图1Simple Error Handler.vi的用法。

这个用法可以在打包后的程序运行时,出现错误按stop键可以使程序停下来。否则,程序可能处于死循环状态。

3、   错误簇最好不要在For循环中使用(或通过)

因为For循环中没有从循环中跳出的能力,也就是说:指定了For循环的循环次数后,必须完成指定的循环,才能结束程序的执行。由此可见,错误簇也一定按指定的循环数叠代多次才能传递出去。在那些需要使用到循环的地方,为避免此类事情发生最好使用While循环来代替For循环。

而在While循环中,我们可以通过提取错误簇中的status的状态来终止While循环的运行。在使用到While循环时,加入这部分也是一个非常好的习惯。

4、   避免在Express VI Time Delay.vi”中使用错误簇连接

其道理与上面所说的一样,“Time Delay.vi”也不会从延迟中跳出来,一定要等到延迟结束才会将错误传递下去。通过图2的例子可以很清楚的看到这个现象。


2 错误簇在“Time Delay.vi”中的转递试验

在图2中,我们将错误簇中的status状态,先设定为:F,然后运行程序,我们会看到探针[1]显示2000;然后我们将错误簇中的status状态,在设定为:T,然后运行程序,我们会看到探针[1]显示的仍然是2000

我认为这是一个“bug”,如果像我们在前面1讲到的那样,使用vi模版中的SubVI with Error Handling框架就不会有这个问题了。至少,外边的发生的错误是直通的。


分享 分享 |  评论 (0) |  阅读 (?)  |  固定链接 |  类别 (LabVIEW——ABC) |  发表于 21:19  | 最后修改于 2006-12-23 20:50
搜狐博客温馨提示:搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  *中国人爱国心,搜狗输入法爱国主题皮肤下载>>
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复