問題是這樣的,因爲工做須要,最近在研究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共勉!
教程