LabVIEW中的错误处理
贝xxx-errors.txt文件了。
好了,到这里为止。基础知识我们介绍完了,接下来我们介绍对于可预见的错误,是否可以选择直接忽略,或者前几次尝试忽略直到该特定错误出现很多次后才通知用户需要纠正该错误了;是否可以对重要的错误进行存档;当主VI中多个线程时,如果某一个线程出错,如何保证其它线程进行适当的收尾后同样优雅的退出,避免一错再错。这里我编写了一个参考VI,我们将详细介绍:
图4.项目文件概览
打开Error Handling in LabVIEW.vi的程序框图,其包含三个循环,分别是Producer loop,Consumer loop,Display Loop。Producer loop用于响应用户事件,并通过队列通知Consumer loop执行相应的操作;Display loop用于对前面板显示控件进行更新。
图5.项目原理图
Error Handling in LabVIEW.vi中关于错误处理部分最核心的VI是Error Module.vi。它其实是一个功能全局变量,包含Initialize,Handle Errors和Report Errors三个分支。Initialize分支中定义好哪些错误代码是直接被忽略的,哪些错误代码是允许出现若干次,并且为了实现在主VI Error Handling in LabVIEW.vi的任何一个循环出现错误时,所有的其它循环也能够退出,在Initialize分支中将分别获取三个循环中的相应队列引用或用户事件引用。
图6.Error Module模块
图7. Initialize分支
先介绍一下Error Handling Info簇控件,它包含两个数组。数组Ignore中定义的Error Code即我们希望Error Module.vi直接忽略的;Retry是簇数组,每个簇中包含三个元素:Code即我们希望出错后重试的代码,Retry times为允许出错的次数,Current Iteration记录了该特定错误已经发生的次数(在主VI中不要设置,让它为0)。我们希望当Current Iteration < Retry times时,如果该错误出现,我们可以忽略该错误,但是Current Iteration值加1。对于本次测试,主VI给Error Module.vi的传递的参数如下,我们将在后面看到,5556的错误将被直接忽略,而5557的错误第三次出现时程序将弹出对话框提示出错。
图8. Error Handling Info簇控件信息
Error Module.vi中最重要的是Handle Errors分支,简单的说,它其实是包含两层条件结构嵌套,三种处理情况。1)错误直接被忽略;2)错误符号Retry的条件;3)错误不能被预处理,将错误存档。
图9. Handle Errors分支
当错误不能被预处理时,将错误存档后,我们调用General Error Handler函数,这样就会弹出错误对话框,对话框中包含xxx-errors.txt文件中定义好的描述信息。除了将错误存档,在程序中同时通过元素入队列、产生用户事件使得主VI中的Consumer loop,Display loop和Producer loop都能够优雅的退出。
接下来我们来看一下程序的测试:
图10.主VI前面板
1.点击Acquire按钮,将获取波形;
2.点击Generate error for consumer,将使得Consumer loop产生error 5555,由于5555不包含在预处理的情况中,Error Module.vi的Handle Errors分支将该错误存档并弹出错误对话框,同时其它循环通过元素入队列,产生用户事件而退出,整个程序停止运行;
3.重新运行程序,点击Generate error for Ignore按钮,可以看到,程序将继续正常运行,完全忽略该错误;
4.点击Generate error for Retry按钮,当点击第三次时,才弹出错误对话框,程序停止运行。如下图所示:
图11. 错误代码5557重复出现3次
LabVIEW错误处 相关文章:
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)
- 泰克全新VM6000视频测试仪助力数字电视等产品测试 (10-06)