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共勉!
教程

相關文章
相關標籤/搜索