其主要的模型:

主要從以下幾個方面理解:
1、可重入性
正常的labview是多線程設計語言,而我們在執行VI時的規則是通過VI的命名來分別調用實現的。
打開VI的Highlight調試工具,可以看出兩個Wait.vi實例的調用並不是同時執行的,而是依次按順序執行的,至於哪一個實例先執行是不確定的。這是由於LabVIEW本身是並行設計的,從理論上而言,兩個VI的實例是同步執行的,但是如果兩個Wait.vi實例同時執行必定會產生參數賦值紊亂,因為LabVIEW只允許內存中存在一個名稱的VI。
如果在一個順序結構里要同時進行兩個vi的調用,采用的方法是單擊ctrl+I,在新點出來的對話框中選擇執行框里邊的可重入選擇Reentrant execution,這樣的話再次運行上述實例用時長為並行執行的時間。事實上,LabVIEW的可重入技術相當於在原有VI的基礎上產生了一個相同的副本,打開Wait.vi從標題欄可以看出VI的名稱為Wait.vi:1(clone)。同理這是由於LabVIEW中不允許內存中的VI存在同名,VI的可重入技術相當於產生了與原VI具有同樣功能的新VI並且修改了該VI的命名。
在實際應用中,需要根據情況決定是否設置VI的可重入屬性,靈活使用。並不是需要將所有的VI都設置為可重入,那將占據大量的內存資源。
2、動態調用
通常調用子VI有兩種方法,一種是靜態調用,直接在控制板里選擇子VI的方法,即編譯生成可執行程序后,子VI的代碼將會被靜態鏈接到可執行程序中
另一種就是動態調用,指的是通過程序調用另一個程序的運行、停止、賦值和獲取值。通過程序框圖-查看(菜單)-函數-編程-應用程序控制-通過引用調用,通過VI引用動態調用,可以保證VI在需要時才被裝入內存,與靜態調用相比節約了內存資源。
labview有多種動態調用的方式,從底層而言采用的是VI Server技術來實現的。
如果VI調用程序較大,采用動態加載VI的方式可以節省加載時間和內存,這是因為在調用程序需要運行該VI以前無需將其加載,在操作結束后又可將其從內存中釋放。VI調用配置對話框可用來配置何時加載子VI。
一個簡單的實例:

-
指向嚴格類型引用句柄的VI僅提供連線板信息
-
不要混淆選擇VI連接板與獲取VI引用句柄這兩項的不同操作
我結合可重用性和動態調用的特性,做了以下實例練習,即實現斐波那契數列(Fibonacci數列)。斐波那契數列指的是這樣一個數列:1,1,2,3,5,8,13,21„„ 這個數列從第三項開始,每一項都等於前兩項之和。在數學上表述為:f(n)=f(n-1)+f(n-2),其中n>=3,f(1)=f(2)=1。 n<2,fn=1;n>2 ,fn=f(n-1)+f(n-2);
VI本身是有很多的屬性和方法的,如圖 35所示。使用這些方法就可以動態控制VI的運行、停止和賦值,各個屬性節點和方法的具體含義見LabVIEW的幫助文檔。使用這種方式動態調用VI時,並不需要知道VI的輸入輸出接口。
3、循環
我們可以使用“多循環”來解決程序並行運行的問題,那么程序中的兩個循環如何進行數據交互和共享呢?最普通的方式是采用全局變量或局域變量,但是當兩個循環執行的速率不相等時,必然會造成數據的丟失或重復。如前所述,LabVIEW提供了隊列操作函數,允許數據的發送者和接受者之間建立一條緩沖通道,這樣就避免了循環不同步帶來的影響。這里就用到了我們常說的隊列函數,由於隊列中的元素是“先進先出”的,因此確保了接收到的數據是有序的。
在LabVIEW的隊列操作中(入列和出列函數),提供了timeout選項以處理數據緩沖區的溢出或不足。當數據溢出時,入列函數(數據進入隊列)將停止發送數據(處於等待狀態),直到緩沖區存在數據空間或者達到了timeout設置的時間;而當數據不足時,出列函數(數據流出隊列)將停止接收數據(處於等到狀態),直到緩沖區進入了新的數據或者達到了timeout設置的時間。
實例介紹生產者消費者循環的基本特性以及隊列操作的特點:
例程提供了操作方式控件控制生產者和消費者的數據傳遞速率,包含五種狀態:不生產只消費、生成快於消費、生成速率等於消費速率、生成慢於消費、只生產不消費。
代碼包括三個循環,分別是生產者循環,消費者循環,狀態循環

將生產者的【枚舉+條件結構】改成【枚舉+事件結構】,即變成了消費者生產者(事件模式);
對應的前面板顯示如
實際中應該避免由於timeout(超時)設置為-1而導致的無限等待和死循環。
4、擴展
采用一個計算機組件測試的實例來簡單介紹;
其中的主要思想是:結合狀態機模式、事件結構和動態調用技術,能夠歸納出針對較復雜應用程序的通用設計模式。對常見的測試測量程序而言,主要由數據采集、數據分析、外圍菜單項響應、報表生成、數據顯示這五個部分組成。其中數據采集是相對獨立和長時間運行的一個模塊,可以與其它的模塊同時運行。因此,在大多數持續采集的程序設計中需要將它單獨作為一個模塊運行。與此同時,子程序也需要一條數據通道發送一些反饋命令給主程序。於是可以構成如圖所示的一個通訊回路。

