




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
5.2 LabVIEW設(shè)計模式主從設(shè)計模式和生產(chǎn)者消費者設(shè)計模式 在上一節(jié)中曾經(jīng)談到過,NI LabVIEW 中提供了六種最基本的設(shè)計模式。本節(jié)首先介紹其中的兩種: 主從設(shè)計模式與生產(chǎn)者消費者設(shè)計模式(Master/Slave design pattern and Producer/Consumer design pattern)。這是由于這兩種設(shè)計模式在結(jié)構(gòu)上極為相似(使用的內(nèi)置函數(shù)不同),所以我們在這里將一起來討論(基本結(jié)構(gòu)參見圖 5.2-1、圖 5.2-2)。 圖 5.2-1 主從設(shè)計模式 圖 5.2-2 生產(chǎn)者消費者設(shè)計模式5.2.1 主從設(shè)計模式(Master/Slave design pattern) 與主從設(shè)計模式的相關(guān)內(nèi)置函數(shù)(Notifier_通知)參見下圖所示。 圖 5.2.1-1 主從設(shè)計模式內(nèi)置函數(shù)(通知) 關(guān)于這些內(nèi)置函數(shù)的定義和使用方法請參考LabVIEW Help文件,這里就不再進(jìn)行討論了。 對于絕大多數(shù)LabVIEW的學(xué)習(xí)者來講,僅僅依據(jù)這些主從操作提供的內(nèi)置函數(shù)(通知),即便是借助于幫助文件也很難理解和設(shè)計出正確的應(yīng)用程序代碼或基本架構(gòu)。因為 這些內(nèi)置函數(shù)的內(nèi)部程序代碼是不對外開放的、不公開的,所以我們也就很難理解的更準(zhǔn)確或更全面。 那么如何正確的使用它們呢? 通常有兩個最簡單、最直接的方法可以解決這個問題:一是,查看NI給出的設(shè)計模式或例程;二是,查看其它使用者所提供的實用例程。 其實,這里也再次間接的告訴大家,更多查看和理解其它LabVIEW開好者所提供的實用例程是學(xué)習(xí)LabVIEW的最好方法之一。 通過圖 5.2-1,就可以初略地領(lǐng)會到NI 基于數(shù)據(jù)流的圖形化代碼主從設(shè)計模式的表達(dá)形式或架構(gòu)。 從圖 5.2-1中,可以看到主從設(shè)計模式的基本構(gòu)成是:包括了兩個While循環(huán)(上面為主循環(huán)、下面的為從循環(huán))和若干個“通知”內(nèi)置函數(shù)(Notifier)構(gòu)成。主 循環(huán)中的Case結(jié)構(gòu)用來確定是否向從循環(huán)發(fā)出通知。 該設(shè)計模式支持圖形化代碼的多種數(shù)據(jù)類型的數(shù)據(jù)輸入(圖 5.2-1中的數(shù)據(jù)類型為:字符串);并且用一個Stop按鍵來控制這兩個While循環(huán)的停止。 如果用“高亮執(zhí)行”方式來查看它的數(shù)據(jù)流運行狀態(tài)時,我們會發(fā)現(xiàn):當(dāng)主循環(huán)中的Case結(jié)構(gòu)的條件輸入端為:F時,主循環(huán)不會發(fā)出通知,從循環(huán)也不執(zhí)行任何操作; 當(dāng)主循環(huán)中的Case結(jié)構(gòu)的條件輸入端為:T時,主循環(huán)發(fā)出通知,從循環(huán)執(zhí)行相應(yīng)的操作。當(dāng)我們按下“Stop”鍵時,主循環(huán)停止并利用錯誤簇(表現(xiàn)為:出現(xiàn)錯誤)通知 從循環(huán)也停止。 主從設(shè)計模式工作時,數(shù)據(jù)(元素)傳遞是發(fā)生在兩個While之間,依據(jù)While循環(huán)的數(shù)據(jù)流工作原理,我們的確很難理解數(shù)據(jù)是如何在兩個While循環(huán)之間傳遞的 。這使得這種結(jié)構(gòu)的兩個While循環(huán)之間傳遞數(shù)據(jù)的關(guān)系看起來有點象全局變量(或本地變量)。 其實,它與全局變量功能上是相近的,但還是有些區(qū)別。其中最主要區(qū)別在于:負(fù)責(zé)產(chǎn)生信息的主循環(huán)必須保持循環(huán)查詢數(shù)據(jù)是否發(fā)生變化。在數(shù)據(jù)沒有發(fā)生改變的時候,從循環(huán)結(jié) 構(gòu)則完全停止執(zhí)行,只有當(dāng)新數(shù)據(jù)可用時才重新啟動(通知)。這就會使計算機(jī)減少浪費在無止境的輪詢中的時間。另外,全局變量破壞了數(shù)據(jù)流的關(guān)系,而這里則完全保證了數(shù)據(jù)流 的關(guān)系。 主從設(shè)計模式主要用來解決兩個或多于兩個的同時發(fā)生的并且擁有不同運行速率的線程的通信應(yīng)用中或者在運行于同一臺機(jī)器的兩個VI之間通信的工具。這種方式一般用來同步 兩個獨立的進(jìn)程,所以它的這些內(nèi)置函數(shù)是分類在函數(shù)選板的同步模版中。 其實,在數(shù)據(jù)采集和處理中,更需要這種主從構(gòu)架的應(yīng)用。比如,在連續(xù)數(shù)據(jù)采集和分析、處理中,我們可能會將采集、分析、處理放在一個While循環(huán)內(nèi)。那么While 循環(huán)運行一次的時間就是采集、分析、處理這三部分運行時間之和。如果任務(wù)中需要快速采集和實時處理,顯然這種在采集、分析、處理同放在一個While循環(huán)中的方式很不好, 很可能導(dǎo)致數(shù)據(jù)采集的不連續(xù)性(數(shù)據(jù)時間上出現(xiàn)間斷點),也就是采集完后將等待分析、處理完成后才能再次進(jìn)行采集。 如果真的不希望這種情況發(fā)生,那就可以通過采用主從設(shè)計模式來解決這樣類似的問題。比如,將數(shù)據(jù)采集放到主循環(huán)中,分析和處理放置到從循環(huán)中。 由于我們不是LabVIEW內(nèi)置函數(shù)的設(shè)計者,所以不清楚主從設(shè)計模式的數(shù)據(jù)存儲方式,所以我們只能認(rèn)定:這種工作方式當(dāng)Send Notification有效時,元素被存儲,當(dāng)Wait on Notification有效時,元素被讀取,從而實現(xiàn)主從結(jié)構(gòu)間的數(shù)據(jù)傳遞。 這樣做就會高枕無憂了嗎?其實不然! 這種構(gòu)架的缺點是:如果取走元素的速度慢,而發(fā)送元素的速度快,則會發(fā)生元素漏掉的情形。 為了驗證這樣的說法,我們做一個簡單的驗證程序。例 5.2.1-1 主從結(jié)構(gòu)數(shù)據(jù)傳遞試驗 圖5.2.1-2 是該程序的程序框圖。 圖 5.2.1-2 主從模式數(shù)據(jù)傳輸試驗程序框圖 主循環(huán)產(chǎn)生一個隨機(jī)數(shù)并發(fā)送到從循環(huán),在每個循環(huán)中各放置一個Chat圖形顯示器來觀察隨機(jī)數(shù)發(fā)送和接收的情況。主從循環(huán)各放置一個定時器,選擇不同的定時時間來驗證 數(shù)據(jù)傳輸?shù)恼_性。1、主循環(huán)定時:150ms,從循環(huán)定時:150ms 圖 5.2.1-3 主循環(huán)、從循環(huán)定時均為150ms 從圖 5.2.1-3可以看出數(shù)據(jù)傳遞是準(zhǔn)確可靠的。2、主循環(huán)定時:200ms,從循環(huán)定時:150ms 圖 5.2.1-4 主循環(huán)定時200ms、從循環(huán)定時為150ms 從圖 5.2.1-4也可以看出數(shù)據(jù)傳遞是準(zhǔn)確可靠的。3、主循環(huán)定時:150ms,從循環(huán)定時:200ms 圖 5.2.1-5 主循環(huán)定時150ms、從循環(huán)定時為200ms 從圖 5.2.1-5可以看出數(shù)據(jù)傳遞明顯出現(xiàn)丟失數(shù)據(jù)的現(xiàn)象。數(shù)據(jù)沒有傳遞完是由于我們終止了運行。 還有一個問題,從循環(huán)的停止是來自于主循環(huán)提供的錯誤信息,那么如果從循環(huán)內(nèi)發(fā)生錯誤如何報錯? 鑒于這些原因存在,這也是主從循環(huán)設(shè)計模式被使用的比較少的原因之一。那么有沒有更好的解決方法呢?這就是我們下節(jié)所要介紹的“生產(chǎn)者、消費者設(shè)計模式”。5.2.2 生產(chǎn)者消費者設(shè)計模式(Producer/Consumer design pattern) 可以說:生產(chǎn)者、消費者設(shè)計模式是圖形化程序設(shè)計中最廣泛使用的設(shè)計模式。 與生產(chǎn)者、消費者設(shè)計模式的相關(guān)內(nèi)置函數(shù)(Queue_隊列)參見下圖所示。 圖 5.2.2-1 生產(chǎn)者消費者設(shè)計模式內(nèi)置函數(shù)(隊列) 在圖 5.2-2中,就是基于數(shù)據(jù)流的圖形化代碼生產(chǎn)者消費者設(shè)計模式的表達(dá)形式或架構(gòu)。 它的構(gòu)成與上面所討論的主從設(shè)計模式基本相同,只是使用的內(nèi)置函數(shù)不同。同樣我們也不介紹內(nèi)置函數(shù)的定義和使用方式。同時,生產(chǎn)者消費者設(shè)計模式的基本工作原理也就 不多介紹了。 下面主要介紹它們之間的不同之處。 它們之間最大的不同就是數(shù)據(jù)存儲和傳輸方式的不同。生產(chǎn)者消費者設(shè)計模式采用了隊列的數(shù)據(jù)存儲方式(FIFO)。隊列的數(shù)據(jù)存儲是開辟一個緩存區(qū),依據(jù)先進(jìn)先出的原則 進(jìn)行的。新來的元素總是被加入隊尾(即不允許加塞),每次離開的元素總是隊列頭上的(即不允許中途離隊),當(dāng)前最老的元素離隊。這樣就保證了數(shù)據(jù)傳遞過程中基本上 不會發(fā)生數(shù)據(jù)丟失的現(xiàn)象。 為了驗證這樣的說法,我們還是同樣做一個簡單的驗證程序。例 5.2.2-1 生產(chǎn)者消費者結(jié)構(gòu)數(shù)據(jù)傳遞試驗 圖5.2.2-2 是該程序的程序框圖。 圖 5.2.2-2 生產(chǎn)者消費者模式數(shù)據(jù)傳輸試驗 生產(chǎn)者循環(huán)產(chǎn)生一個隨機(jī)數(shù)并發(fā)送到消費者循環(huán),在每個循環(huán)中各放置一個Chat圖形顯示器來觀察隨機(jī)數(shù)發(fā)送和接收的情況。生產(chǎn)者消費者循環(huán)各放置一個定時器,選擇不同 的定時時間來驗證數(shù)據(jù)傳輸?shù)恼_性。1、生產(chǎn)者循環(huán)定時:150ms,消費者循環(huán)定時:150ms 圖 5.2.2-3 生產(chǎn)者循環(huán)、消費者循環(huán)定時均為150ms 從圖 5.2.2-3可以看出數(shù)據(jù)傳遞是準(zhǔn)確可靠的。2、生產(chǎn)者循環(huán)定時:200ms,消費者循環(huán)定時:150ms 圖 5.2.2-4 生產(chǎn)者循環(huán)定時200ms、消費者循環(huán)定時為150ms 從圖 5.2.2-4可以看出數(shù)據(jù)傳遞也是準(zhǔn)確可靠的。3、生產(chǎn)者循環(huán)定時:150ms,消費者循環(huán)定時:200ms 圖 5.2.2-5 主循環(huán)定時150ms、從循環(huán)定時為200ms 從圖 5.2.2-5 可以看出數(shù)據(jù)傳遞也沒有出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象。實際上,由于數(shù)據(jù)傳遞被強(qiáng)行停止,所以后面的數(shù)據(jù)沒有被全部完全傳遞出來。解決這個問題的方法是在程序設(shè)計中添加一些處理程 序,這部分內(nèi)容可參考:LabVIEW網(wǎng)絡(luò)講壇系列第三季運籌帷幄生產(chǎn)者/消費者循環(huán)。 還是那個問題,從循環(huán)的停止是來自于主循環(huán)提供的錯誤信息,從循環(huán)內(nèi)如果發(fā)生錯誤如何報錯? 下面給出一個使用Mac版LabVIEW編寫的DAQmxBase的實例(僅用于Mac數(shù)據(jù)采集應(yīng)用)。 圖 5.2.2-6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能醫(yī)療設(shè)備研發(fā)制造協(xié)議
- 建筑結(jié)構(gòu)設(shè)計與施工技術(shù)知識小結(jié)卷
- 農(nóng)戶與農(nóng)場主合作協(xié)議
- 市場營銷消費者行為學(xué)模擬題卷設(shè)計思路解析
- 銷售代理委托協(xié)議及傭金支付
- 軟件開發(fā)測試與驗收交付協(xié)議
- 低空經(jīng)濟(jì)時代的商業(yè)廣告與傳播方式創(chuàng)新
- DB14-T 3411-2025 草種質(zhì)資源普查技術(shù)規(guī)程
- 互聯(lián)網(wǎng)游戲服務(wù)合同
- DB13(J)-T 8496-2022 城市污水處理廠提標(biāo)改造技術(shù)標(biāo)準(zhǔn)
- 地鐵保安服務(wù)應(yīng)急預(yù)案
- 建筑施工臨時用電安全教育培訓(xùn)課件
- 早產(chǎn)兒腸內(nèi)營養(yǎng)管理專家共識2024年解讀
- 隔音砂漿銷售合同協(xié)議
- 2025-2030全球及中國GPON技術(shù)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024年浙江高考化學(xué)真題(1月)試題試卷原卷答案解析
- 二年級下冊數(shù)學(xué)-認(rèn)識鐘表練習(xí)題合集
- 2025-2030中國IDC行業(yè)發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 房車租賃合同協(xié)議
- 2025年普通高等學(xué)校招生全國統(tǒng)一考試語文試卷答案
評論
0/150
提交評論