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