LabVIEW之调用含while循环的子VI

问题是这样的,由于工作需要,最近在研究LabVIEW的应用。由于设备需要使用LabVIEW不停的采集数据,并且还要和其他模块配合使用,于是我就把功能分成了几个子VI用来调用获取值,问题来了,由于我在采集数据的子VI中使用了while循环(采集数据么~),在调用此VI的时候发现数值无法返回,开始以为是调用方式有问题,在单位琢磨了半天未果,于是在家里做了个简单的测试程序,终于发现了问题所在:子VI在含有while循环时,子VI的所有活动结束前,不会返回任何数值,类似于C语言中的子函数中含有while循环~

下面请看我的两个非常简单的LabVIEW的VI,Call是调用者,Calc是被调用者,Calc负责生成随机数,然后定义了一个参数返回值接口,就是一个数值显示控件绑定的值(random):LabVIEW之调用含while循环的子VI_第1张图片

下面是调用者VI:

LabVIEW之调用含while循环的子VI_第2张图片

采用了相同的while循环,按钮终止循环,下面问题来了,当我在调用者VI中启动时,数值显示控件不显示任何值,即:子VI无任何值返回!

于是我单步调试,发现程序总是在Calc中的while循环中跳,不结束过程,也就不返回值咯!

下面我在VS中写了一段C的程序作为上述结论的验证:


#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

BOOL bCalc = TRUE;
BOOL bCall = TRUE;

int Calc(int a, int b)
{
	int nRtn = 0;

	while(bCalc)
	{
		nRtn = a + b;
	}
	return nRtn;
}

int main(int argc, char **argv)
{
	int a = 3;
	int b = 6;
	int nVal;

	while (bCall)
	{
		nVal = Calc(a, b);
		printf("a + b = %d\n", nVal);
	}
}
这张图是这段程序执行的结果,可以看到不会输出任何值: LabVIEW之调用含while循环的子VI_第3张图片


然后老规矩,单步调试,可以很直观的看出程序在子程序的while循环中跳不出来:LabVIEW之调用含while循环的子VI_第4张图片


总结:由于LabVIEW中文文档不如其他流行语言那么多,用户数量和C语言等流行语言也有数量级的差距,所以新手遇到问题的时候如果手头没有成体系的书籍,就只能求助于自带的帮助文档,但是帮助文档很大程度上也无法解决编程遇到的细节问题。以我自身来说,我只有一本《LabVIEW大学实用教程》,实话说,翻译的句子往往让我很费解,但是可选的书籍就那么几本,看原版书籍有很费神费力,所以遇到问题最重要的还是多思考,用其和诸如C语言等熟悉的语言对比一下,用另一种语言解释一下事情的前因后果,就容易想通此类细节问题了。

图形化的编程的确节省了很多浪费在细节上面的精力,却在很多时候却使新手陷入细节的陷阱之中,但是只要勤于思考求知,问题一定会被解决。在此与众位Coder共勉!

你可能感兴趣的:(c,LabVIEW,子VI)