您的位置:首页 > 其它

LabVIEW之调用含while循环的子VI

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

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


下面是调用者VI:



采用了相同的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);
}
}

这张图是这段程序执行的结果,可以看到不会输出任何值:



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


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

图形化的编程的确节省了很多浪费在细节上面的精力,却在很多时候却使新手陷入细节的陷阱之中,但是只要勤于思考求知,问题一定会被解决。在此与众位Coder共勉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LabView 子VI C