From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



Labview裡的遞迴(Recursion)



主要軟體:
主要軟體版本: 8.2
主要軟體修正版本:
次要軟體: N/A

問題: Labview有支援遞迴嗎? 我要如何在Labview裡面使用遞迴的VI?

解答:

有,LabVIEW是有支援遞迴的。您可以依循下列步驟建立遞迴的VI。

關於遞迴
一個呼叫自己的VI被稱為遞迴的VI(recursive VI)。 也就是說,如果一個LabVIEW 應用程式(application
)使用了遞迴,為了達到某些特定的目的,它會開啟它自己額外的複本(copy)。舉例來說,其中一個遞迴的熱門應用就是階乘函數的計算(以 ! 表示)。 給定的任意一個正整數的階乘是從1開始往上數到所給定正整數(包含此正整數)的所有正整數的乘積。因此,3!  等於 3*2*1 = 6. 下面所附加的遞迴範例 factorial.vi 是由計算下一個最小的整數乘積而得到最後的計算結果(呼叫自己)。以數學的角度來看,3! = 3*(2!)。 在這個遞迴的階乘函數VI裡,1! 及 0! (一個特例) 被寫定為 1。

可重入VI
有很重要的一點必須注意到的是一個遞迴VI必須開啟它自己的額外複本並儲存在記憶體裡面。 我們也可以稱這個VI為可重入的(reentrant)。也就是說,每一個遞迴VI的實體(instance)都有一個自己本身的資料,這些資料與同一個VI的其他實體的資料是不同的。下列步驟可以確保遞迴 VI 被設定為可重複進入的。

建立遞迴VI的步驟
按照以下步驟,您可以將一個VI設定成可以呼叫自己本身:

  1. 將想要使用控制器(control)與指示器(indicator)的放置在人機介面上(be sure they have the appropriate representation),然後在人機介面右上角的圖示/連接器面板(connector pane)上點滑鼠右鍵做設定,選擇Show Connector Pane.

  2. 將VI設成可重入的,選File»VI Properties»Execution»Reentrant execution.

  3. 在VI的程式區裡,現在所使用 VI 的複本在執行時必須被"Call By Reference Node"呼叫。首先, 開啟functions pallet並且選擇 Application Control»Open VI Reference。 將遞迴 VI 的路徑連起來,並且將options的輸入設定成8這個常數. 這可以使用reference的方式呼叫可重入VI。

  4. 在Open VI Reference 圖示的 type specifier VI refnum 端點上面選滑鼠右鍵,然後選Create»Constant。 在建好的常數上點選右鍵再選Select VI Server Class»Browse。 查看遞迴VI的位置然後選ok。
  5. 將新開啟的VI reference 連接到位在Application Control»Call By Reference Node 裡面的Call By Reference Node。並且將線連接到被使用reference呼叫的VI的輸入端跟輸出端(依照使用定義的功能)。

  6. 使用位於Application Control»Close VI Reference 裡面的Close VI Reference來關閉VI的引用。

  7. 確保你的遞迴VI有跳出遞迴的設定。也就是說,有些情況必須跳出遞迴而且在不呼叫此遞迴VI額外複本的情況下回傳一個數值。這是最後一步,現在的VI已經設定好且可以用在遞迴的應用上了。



相關連結:

附加檔案:


factorial.vi - factorial.vi



報告日期: 02/15/2007
最後更新: 05/09/2008
文件偏號: 46EKS80E