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的程序作为上述结论的验证:
这张图是这段程序执行的结果,可以看到不会输出任何值:
然后老规矩,单步调试,可以很直观的看出程序在子程序的while循环中跳不出来:
总结:由于LabVIEW中文文档不如其他流行语言那么多,用户数量和C语言等流行语言也有数量级的差距,所以新手遇到问题的时候如果手头没有成体系的书籍,就只能求助于自带的帮助文档,但是帮助文档很大程度上也无法解决编程遇到的细节问题。以我自身来说,我只有一本《LabVIEW大学实用教程》,实话说,翻译的句子往往让我很费解,但是可选的书籍就那么几本,看原版书籍有很费神费力,所以遇到问题最重要的还是多思考,用其和诸如C语言等熟悉的语言对比一下,用另一种语言解释一下事情的前因后果,就容易想通此类细节问题了。
图形化的编程的确节省了很多浪费在细节上面的精力,却在很多时候却使新手陷入细节的陷阱之中,但是只要勤于思考求知,问题一定会被解决。在此与众位Coder共勉!
下面请看我的两个非常简单的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利用while循环添加移动寄存器倒计时5秒
- shell 函数 参数调用 参数遍历 while循环
- 计算labview一个while循环的运行时间
- Oracle语法温故(for循环、while循环、if else 、方法声明、调用,过程方法声明、调用)
- LabVIEW的引用调用异步调用和子VI的区别
- LabVIEW中的While循环应用示例
- LabVIEW的动态调用子vi出现错误
- labview 在事件结构中嵌套了while循环后,内部while循环无法停止的问题的解决
- Java多线程为什么使用while循环来调用wait方法
- 深入理解LabVIEW中的While循环
- 深入理解LabVIEW中的While循环
- labview中,用相对路径动态调用的子VI,在生成EXE文件后无法调用问题的解决
- java for、while循环调用流程
- 5、网友问答之深入理解WHILE循环-----------labview编程宝典
- dede循环调用指定栏目名称和子栏目名称
- java基础3 循环语句:While 循环语句、do while 循环语句、 for 循环语句 和 break、continue关键字
- Shell脚本编程之While循环
- Shell for&while 循环详细总结
- 跟老齐学Python之用while来循环
- Java自学笔记(第三天)-while循环-do while循环-for循环-函数-函数重载