LABVIEW的深入探索之内外有别的条件结构
扫描二维码
随时随地手机看文章
条件结构(CASE)是LV常用结构之一,最为典型的条件结构是含有错误处理的条件结构,常常用于避免使用顺序结构。与C语言的条件结构不同,对于显示控件,所有的CASE分支必须对显示控件传递数据(赋值)或者直接使用默认值,不允许不输出。
在条件结构中,处理显示控件有两种完全不同的方式,这两种方式虽然表明上看差别不大,在具体编程中都可能使用过,但是对于大型数据处理,比如大的数组,运行效率差别极大,可能不经意间造成程序运行缓慢,且不易查错。
方法一:条件结构外处理显示输入控件和显示控件。这种方法中,输入控件和显示控件均位于条件结构分支之外。如下图所示:
方法2:条件结构内处理输入控件和显示控件控件。这种方法中,输入控件和显示控件位于条件结构分支中,从程序框图上看,似乎更为简洁,但却是非常错误的,如下图所示。
方法2中,错误分支中没有进行任何处理,输入控件和显示控件位于无错误分支中。
OUT,VI和IN.VI实现的功能是完全相同的,但是运行效率却是天壤之别,数组越大,区别更为明显。当然不同的计算机上,运行时间会有区别。下面是测试程序框图。
下面是测试结果,二者的运行时间相差20000多倍。
下面引入一个“顶层程序框图”,顶层程序框图常见于LV爱好者的文章中,LV的相关书籍中没有这样的概念。OUT.VI中,输入控件位于左侧,显示控件位于右侧,均位于所有结构之外,所有结构之外称作“顶层程序框图”,类似于C语言中的形参部分。
顶层程序框图中,运行效率是极高的,这是因为在进入子VI之前,LV很容易可以断定,缓存是可以重用的,因此不需要在循环中,每次复制数组。但是输入控件和显示控件位于条件分支内部时,LV可能无法判定缓存是可以重用的,因此采用的值复制的方法,这样牺牲了效率,但是保证了正确的结果。
方法二中,表面上看似乎更为合理,但却是错误的,因此可以得出结论,子VI中的输入控件和显示控件应该位于顶层程序框图中,不应该位于任何结构之中。