LabVIEW异步调用VI
LabVIEW異步調用VI
如通過子VI節點或通過引用調用節點以標準調用方法調用一個VI,數據流在被調用節點處暫停直到子VI返回結果。然后數據流從節點的輸出端繼續。
與上述方式不同,異步調用VI時,子VI運行的同時數據流仍然在調用方VI中繼續。如調用方VI不是立即需要子VI的執行結果,就可考慮異步調用子VI。在這些情況下,異步調用可使子VI和調用VI并行運行,明顯優化調用方VI的執行時間。關于異步VI調用的優點,請參考下列編程情境范例:
將任務分配給子VI,主VI繼續運行
將一個任務的工作量分散到同一個VI的各個實例,尤其是直到運行時才知道任務需要的VI實例的個數
打開復雜的用戶界面,界面由若干個單獨的VI組成。這些VI必須并行運行,同時收集結果
關于同步和異步調用的比較,請參考labview\examples\ApplicationControl\VI?Server\Asynchronous?Call?By?Reference目錄下的Benchmarking?AsynchronousCalls?VI。
打開范例???查找相關范例
異步VI調用概述
在LabVIEW中,異步VI調用包括下列步驟。
準備異步調用的VI引用—使用打開VI引用函數獲取VI引用,并通過異步選項標識(0x80,?0x100)作為選項輸入的一部分。該步驟是讓LabVIEW為異步調用分配資源。
開始異步VI調用—將VI引用連接至開始異步調用節點,開始調用子VI。當子VI運行時,數據流繼續在調用方VI中執行。
(可選)獲取異步VI調用的結果—如應用程序需要異步調用的子VI的輸出結果,將VI引用連接至等待異步調用節點以收集結果。等待異步調用節點等待相關子VI執行完畢直到超時。
關閉VI引用—使用關閉引用函數告知LabVIEW使用VI引用已完畢。LabVIEW將釋放相關資源。
異步VI調用的類型
要進行異步VI調用,必須根據使用場合決定使用哪種類型的調用方法。關于每種每種的實現,請參考下列主題:
僅調用—調用方VI開始調用子VI,但是不需要子VI的輸出。
調用和收集—調用方VI開始調用子VI,稍后收集子VI的執行結果。
可使用上述類型異步開始對一個VI的多個調用,實現并行執行。
LabVIEW如何管理異步VI調用:異步調用池
使用異步調用VI方法并不需要了解LabVIEW在后臺如何管理這些異步VI調用。但是,了解異步調用池有助于用戶設計確定性應用程序和優化程序的性能。如將異步選項標識作為“打開VI引用”函數選項輸入端的一部分,將VI引用所指的VI異步運行,LabVIEW將創建一個數據空間的池,跟蹤對VI的各個調用。因為LabVIEW將一個數據空間池,而不是一個數據空間,與VI引用關聯,必須通過一個VI引用開始多個異步調用。每次使用“開始異步調用”節點通過VI引用開始異步調用時,LabVIEW都會在池中預留一個數據空間。VI結束運行后,LabVIEW將把輸出放在數據空間中,并將VI調用標識為結束。如“等待異步調用”節點等待被調VI的輸出,LabVIEW將從數據空間中返回結果,將數據空間釋放給同一VI的其他調用。
異步調用池對性能的影響
對于各個VI引用,LabVIEW在終端計算機CPU核的異步調用池中創建一個數據空間。如同時開始的VI調用超過了可用的數據空間,LabVIEW將分配更多的數據空間,以增加調用池的大小。因為分配數據空間的過程所需的時間是不確定的,調用方VI在“開始異步調用”節點觸發空間分配時,會有一個不可預期的時間延遲。
在開始異步調用節點處避免不可預期的延遲
如VI必須在實時操作系統上運行,必須避免不可預期的延遲的話,在調用PopulateAsynchronous?Call?Pool方法開始任何同步之前,應對給定的VI引用預分配相應數量的數據空間。預分配數據空間使時間延遲在程序開始之前,而不是發生在“開始異步調用”節點的位置。
關于異步調用池影響VI執行速度的詳細信息,請參考labview\examples\ApplicationControl\VI?Server\Asynchronous?Call?By?Reference目錄下的Populatingthe?Asynchronous?Call?Pool?VI。
異步調用池對從同一VI的多個調用中收集輸出的影響
如要收集異步VI調用的結果,必須將被調用VI的引用傳遞至“等待異步調用”節點。因為“等待異步調用”節點接收VI的引用,而不是特定數據空間的引用,節點無法收集特定VI調用的輸出。如對特定VI的調用結束,節點返回結束的調用的輸出。詳細信息請參考下列程序框圖。
?
如標簽所示,當多個“等待異步調用”節點使用同一個VI引用時,不能預測哪個節點將返回VI引用的某個調用的輸出。在上面程序框圖中,頂部的“等待異步調用”節點將返回開始異步調用2的輸出,即使它被連線至開始異步調用1。如要對一個VI進行多個調用,還要保持“開始異步調用”節點與特定的“等待異步調用”節點相匹配,可使用下列方法:
為每個異步VI調用創建唯一的VI引用。如“等待異步調用”節點和“開始異步調用節點”共享一個VI引用,則兩個節點就保證能指向同一個VI實例。該解決方案類似于從唯一的VI引用的調用中收集結果。
修改被調用VI,使其接收數字或字符串標識符作為輸入,返回同樣的標識符作為輸出。異步調用VI時,將傳遞至“開始異步調用”節點的標識符與“等待異步調用”節點返回的標識符相比較。如二者一致,就可確定“等待異步調用”節點返回的是哪一個調用。
上文中提到的例子和資料,均在word中的附件里,可點擊下載。
????需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個問題就不用加微信咨詢了。有關LabVIEW編程、LabVIEW開發等相關項目問題,可聯系我們。
?
總結
以上是生活随笔為你收集整理的LabVIEW异步调用VI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 概率的烦恼:量子贝叶斯拯救薛定谔的猫
- 下一篇: 摩拜抽奖扫地机器人_晒抽奖得到的扫地机器