LabVIEW之调用含while循环的子VI

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

下面请看个人两个很是简单的LabVIEW的VI,Call是调用者,Calc是被调用者,Calc负责生成随机数,而后定义了一个参数返回值接口,就是一个数值显示控件绑定的值(random): dom

下面是调用者VI: 函数

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

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

下面我在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);
	}
}
这张图是这段程序执行的结果,能够看到不会输出任何值:


而后老规矩,单步调试,能够很直观的看出程序在子程序的while循环中跳不出来: 调试


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

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

相关文章
相关标签/搜索