2013/08/05

動態地讓Array Size增長 - Part 1

在撰寫VI時,若能預先得知計算過程所需陣列(array)的大小並事先進行配置,就運算效率而言是最好的作法。但在某些應用中並無法事先得知array大小,因此需要動態地讓array增長例如以下範例:



圖一

如圖一所示:如果要撰寫一個VI,比較輸入矩陣(Input Array)的各個元素是否大於指定數值(Assigned Value),並將大於的數值輸出,可以運用以下手法實作:




圖二

在for loop內放入一個判斷式,並利用case structure來進行不同的動作;若判斷結果是大於,則利用build array將當前的值加入一個經過初始化的shift register;若是小於或等於,則讓當前shift register的值bypass過去,不進行任何處理。

但是以上的這個應用,其實還有另一個更為簡潔的作法。LabVIEW從2012版開始,對於穿過邊框的陣列(array),提供了一種新的Tunnel mode,叫做Conditional,可以針對啟動auto indexing的輸出tunnel,加入一個判斷式:


圖三

圖三的程式效果,與圖二完全相同,但程式內的case structure不見了,shift register也被一般的auto-indexing tunnel取代,而右邊框上的tunnel,就是Conditional Tunnel;設定方式是先拉出一般的tunnel,然後按右鍵叫出捷徑選單:
圖四

Conditional Tunnel雖然方便,但並不能取代所有shift register + build array的應用場合。下一篇文章〈動態地讓Array Size增長 - Part 2〉將會為各位讀者介紹更多案例。


程式1載點:DynamicallyOutputArrayElement.vi
程式2載點:DynamicallyOutputArrayElement_ConditionalTunnel.vi

沒有留言:

張貼留言