对于任何一种编程语言或编程环境来说,建立或具有发现错误的机制都是非常必要的,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 的编程及程序运行都基于数据流的,使用错误簇会提供更加清晰的程序运行流程。
假如:我们的程序中使用了5个vi,同时它们的错误簇依次串联,如果第一个vi出现错误,那么其它4个vi将都不会运行,错误将从第一个vi(Error 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”。见图1中Simple 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框架就不会有这个问题了。至少,外边的发生的错误是直通的。


档案
日志
相册
视频



评论
想第一时间抢沙发么?