<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > LabVIEW程序設計模式(五)—生產(chǎn)者/消費者模式(4)

          LabVIEW程序設計模式(五)—生產(chǎn)者/消費者模式(4)

          作者: 時間:2017-01-09 來源:網(wǎng)絡 收藏
          本節(jié)將使用“多循環(huán)”來解決程序并行運行的問題,那么程序中的兩個循環(huán)如何進行數(shù)據(jù)交互和共享呢?最普通的方式是采用全局變量或局域變量,但是當兩個循環(huán)執(zhí)行的速率不相等時,必然會造成數(shù)據(jù)的丟失或重復。如前所述,LabVIEW提供了隊列操作函數(shù),允許數(shù)據(jù)的發(fā)送者和接受者之間建立一條緩沖通道,這樣就避免了循環(huán)不同步帶來的影響。
          如圖 37所示,將整個過程與供水系統(tǒng)進行類比,在數(shù)據(jù)產(chǎn)生/采集端(供水局)產(chǎn)生數(shù)據(jù)后,并不直接向終端用戶供水,因為前者產(chǎn)生水的速率與后者消耗水的速率并不相同。此時需要建造蓄水池將供水局產(chǎn)生的水放入到蓄水池中,同理獲取的數(shù)據(jù)也放入該緩沖區(qū)中。當終端用戶需要用水時,直接從蓄水池中獲取就可以了,同理在進行數(shù)據(jù)顯示和分析時直接從數(shù)據(jù)緩沖區(qū)中獲取就可以了。


          圖 37 生產(chǎn)者/消費者模型
          當然,上面的模型也會存在一個問題:數(shù)據(jù)緩沖區(qū)/蓄水池的容量?假定供水局不停地產(chǎn)生自來水,而終端用戶卻不消耗水,這樣便會導致蓄水池裝滿而溢出。反之當終端用戶耗水量太大時,導致沒有水可用。LabVIEW中的隊列函數(shù)提供了一種很好的方式規(guī)避了這個問題,由于隊列中的元素是“先進先出”的,因此確保了接收到的數(shù)據(jù)是有序的。在LabVIEW的隊列操作中(入列和出列函數(shù)),提供了timeout選項以處理數(shù)據(jù)緩沖區(qū)的溢出或不足。當數(shù)據(jù)溢出時,入列函數(shù)(數(shù)據(jù)進入隊列)將停止發(fā)送數(shù)據(jù)(處于等待狀態(tài)),直到緩沖區(qū)存在數(shù)據(jù)空間或者達到了timeout設置的時間;而當數(shù)據(jù)不足時,出列函數(shù)(數(shù)據(jù)流出隊列)將停止接收數(shù)據(jù)(處于等到狀態(tài)),直到緩沖區(qū)進入了新的數(shù)據(jù)或者達到了timeout設置的時間。
          【應用6】
          本例將演示生產(chǎn)者/消費者循環(huán)的一些基本特性和隊列操作的特點。如圖 38所示,生產(chǎn)者與消費者之間傳遞的數(shù)據(jù)是一個連續(xù)的sine波形,二者靠大小為20個點的緩沖區(qū)連接。右下角是“停止”按鈕,用戶控制程序的停止執(zhí)行。例程提供了操作方式控件控制生產(chǎn)者和消費者的數(shù)據(jù)傳遞速率,包含五種狀態(tài):不生產(chǎn),只消費、生成快于消費、生成速率等于消費速率、生成慢于消費、只生產(chǎn),不消費。


          圖 38 生產(chǎn)者/消費者例程的前面板
          圖 39所示為生產(chǎn)者/消費者例程的背面板,代碼由3個循環(huán)組成,依上而下分別是生產(chǎn)者循環(huán)(產(chǎn)生sine數(shù)據(jù))、消費者循環(huán)(獲取sine數(shù)據(jù))和狀態(tài)循環(huán)(獲得緩存區(qū)中數(shù)據(jù)的數(shù)據(jù)量)。例程假定正常的數(shù)據(jù)發(fā)送和接收的速率是延時50ms,當需要某一段的速率減慢時需要將循環(huán)的延時設置為100ms。
          例程將入列和出列函數(shù)的timeout設置為-1,表示如果沒有滿足條件進行入列和出列操作,循環(huán)將處于持續(xù)等待狀態(tài)。在新建隊列時,設置了緩沖區(qū)的大小是20個元素(圖中的紅色圓圈內(nèi))。最下面的循環(huán)是為了實時查看隊列緩沖區(qū)中存儲的元素數(shù)量。


          圖 39 生產(chǎn)者/消費者例程的背面板
          運行該VI,默認的操作方式是“生產(chǎn)速率等于消費速率”,從圖 40中可以看出生產(chǎn)者循環(huán)和消費者循環(huán)的數(shù)據(jù)是同步的,此時緩沖區(qū)內(nèi)沒有數(shù)據(jù),也就是說產(chǎn)生的數(shù)據(jù)都被實時地消耗了。


          圖 40 生產(chǎn)速率等于消費速率
          如果再將操作方式設置為“生成快于消費”,可以看出數(shù)據(jù)緩沖區(qū)內(nèi)將逐漸變滿并保持為20個元素。此時生產(chǎn)者的波形將會比消費者多20個數(shù)據(jù)點(這些點保存在數(shù)據(jù)緩沖區(qū)中),如圖 41所示。

          上一頁 1 2 下一頁

          關(guān)鍵詞: LabVIEW程序設計模

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();