版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
生產(chǎn)者/消費(fèi)者模式⑴_(tái)前言statemice的LabVIEW程序設(shè)計(jì)模式(五)一生產(chǎn)者/消費(fèi)者模式(1)刖言再次回顧“基本狀態(tài)機(jī)模式”的6個(gè)缺點(diǎn),只剩下第6個(gè)缺點(diǎn)無(wú)法在上述的“狀態(tài)機(jī)和事件結(jié)構(gòu)的結(jié)合模式”中被解決。任何時(shí)刻只能有一個(gè)狀態(tài)在運(yùn)行這個(gè)問(wèn)題也許有些多余,但是在實(shí)際的應(yīng)用中彳主彳主又是最常見(jiàn)的。大多數(shù)比較復(fù)雜的應(yīng)用至少應(yīng)該有“菜單”和“采集”兩個(gè)狀態(tài),如果數(shù)據(jù)采集程序在運(yùn)行時(shí)仍然希望系統(tǒng)能夠處理菜單的事件,這是在傳統(tǒng)的狀態(tài)機(jī)或者事件結(jié)構(gòu)中無(wú)法實(shí)現(xiàn)的。因?yàn)闊o(wú)論是狀態(tài)機(jī)結(jié)構(gòu)還是事件結(jié)構(gòu),都是由一個(gè)循環(huán)組成的,不同的狀態(tài)是無(wú)法同時(shí)被響應(yīng)和處理的。解決這個(gè)問(wèn)題的方式也比較簡(jiǎn)單,LabVIEW本身就是一種多線程的程序設(shè)計(jì)語(yǔ)言,可以再加一個(gè)循環(huán)或者另外開(kāi)一個(gè)程序獨(dú)立運(yùn)行。但是這樣也會(huì)帶來(lái)一些新的問(wèn)題,比如:兩個(gè)循環(huán)(程序)之間如何交換和共享數(shù)據(jù)。兩個(gè)循環(huán)(程序)都有著獨(dú)立的錯(cuò)誤處理系統(tǒng),它們之間是如何協(xié)調(diào)的。兩個(gè)循環(huán)如何分工呢?應(yīng)該以哪種方式對(duì)狀態(tài)進(jìn)行分類以將不同的狀態(tài)放置在不同的循環(huán)(程序)中?一個(gè)程序如何控制另一個(gè)程序的運(yùn)行和停止。
在上面提出的4個(gè)問(wèn)題中,對(duì)循環(huán)和程序這兩個(gè)解決方案而言,第(1)~(3)個(gè)問(wèn)題的解決方式是一樣的。只有第4)個(gè)問(wèn)題是專門針對(duì)兩個(gè)程序而言的,在LabVIEW中這種不同程序之間的相互調(diào)用稱為“程序的動(dòng)態(tài)調(diào)用”。生產(chǎn)者/消費(fèi)者模式⑵_VI的可重入性(ReentrantExecution)statemice的LabVIEW程序設(shè)計(jì)模式(五)一生產(chǎn)者/消費(fèi)者模式VI的可重入性(ReentrantExecution)在介紹VI的動(dòng)態(tài)調(diào)用之前有必要對(duì)LabVIEW在執(zhí)行VI過(guò)程中的規(guī)則有個(gè)大致的了解。眾所周知,LabVIEW是通過(guò)VI的文件名卬【Name)來(lái)表示獨(dú)立的VI的,并不是VI的路徑。因此,LabVIEW不允許具有相同名字的VI同時(shí)載入內(nèi)存中,即使這些VI存儲(chǔ)在不同的路徑中。在前面曾經(jīng)提到,LabVIEW本身就是一種多線程設(shè)計(jì)的語(yǔ)言。那么當(dāng)同一背面板中放置兩個(gè)VI的實(shí)例時(shí)代碼應(yīng)該如何執(zhí)行呢?在圖29中,右側(cè)是測(cè)試VI運(yùn)行的時(shí)間,左側(cè)是Wait.vi的具體實(shí)現(xiàn)代碼,僅僅是等待一定的秒數(shù)。那么在右側(cè)的VI中,輸出的Time是多少呢?是3秒還是2秒?
圖29ReentrantExecution打開(kāi)VI的Highlight調(diào)試工具,可以看出兩個(gè)Wait.vi實(shí)例的調(diào)用并不是同時(shí)執(zhí)行的,而是依次按順序執(zhí)行的,至于哪一個(gè)實(shí)例先執(zhí)行是不確定的。這是由于LabVIEW本身是并行設(shè)計(jì)的,從理論上而言,兩個(gè)VI的實(shí)例是同步執(zhí)行的,但是如果兩個(gè)Wait.vi實(shí)例同時(shí)執(zhí)行必定會(huì)產(chǎn)生參數(shù)賦值紊亂,因?yàn)長(zhǎng)abVIEW只允許內(nèi)存中存在一個(gè)名稱的VI。因此,此時(shí)Time的輸出結(jié)果是3秒。如果在實(shí)際使用中需要這樣的應(yīng)用該如何解決呢?LabVIEW提供了VI的可重入技術(shù),打開(kāi)Wait.vi,單擊<Ctrl+I>按鍵,選擇圖30所示的Reentrantexecution選項(xiàng)。此時(shí)再次運(yùn)行Time的輸出結(jié)果是2秒。從Highlight的運(yùn)行過(guò)程來(lái)看,兩個(gè)Wait.vi實(shí)例是同時(shí)執(zhí)行的,因此總的運(yùn)行時(shí)間就是1秒。
圖30VIProperties事實(shí)上,LabVIEW的可重入技術(shù)相當(dāng)于在原有VI的基礎(chǔ)上產(chǎn)生了一個(gè)相同的副本,打開(kāi)Wait.vi從標(biāo)題欄可以看出VI的名稱為Wait.vi:1(clone)。同理這是由于LabVIEW中不允許內(nèi)存中的VI存在同名,VI的可重入技術(shù)相當(dāng)于產(chǎn)生了與原VI具有同樣功能的新VI并且修改了該VI的命名。在實(shí)際應(yīng)用中,需要根據(jù)情況決定是否設(shè)置VI的可重入屬性,靈活使用。并不是需要將所有的VI都設(shè)置為可重入,那將占據(jù)大量的內(nèi)存資源。生產(chǎn)者/消費(fèi)者模式⑶_LabVIEW程序的動(dòng)態(tài)調(diào)用statemice的LabVIEW程序設(shè)計(jì)模式(五)一生產(chǎn)者/消費(fèi)者模式LabVIEW程序的動(dòng)態(tài)調(diào)用簡(jiǎn)單而言,動(dòng)態(tài)調(diào)用指的是通過(guò)程序控制另外一個(gè)程序的運(yùn)行、停止、賦值和獲取值等。LabVIEW提供了多種動(dòng)態(tài)調(diào)用的方式,從底層而言是通過(guò)VIServer技術(shù)實(shí)現(xiàn)的。圖31所示為L(zhǎng)abVIEW中的ApplicationControl選板,動(dòng)態(tài)調(diào)用所使用的節(jié)點(diǎn)都位于這個(gè)選板。當(dāng)調(diào)用一個(gè)在硬盤、內(nèi)存甚至是網(wǎng)
絡(luò)路徑上的vi時(shí),首先要使用OpenVIReference以將該VI載入內(nèi)存并獲取VI的“句柄(Reference)”;然后再使用該句柄進(jìn)行其它的控制操作;最后再關(guān)閉該VI的句柄避免內(nèi)存泄漏,這就完成了一次對(duì)VI的調(diào)用。圖31ApplicationControl選板圖32是一個(gè)動(dòng)態(tài)調(diào)用的具體實(shí)現(xiàn)代碼,首先使用OpenVIReference獲取被動(dòng)態(tài)調(diào)用VI的Reference(例子中是C:\average.vi);再使用CallByReferenceNode節(jié)電動(dòng)態(tài)運(yùn)行該VI;最后關(guān)閉VI的Reference。在使用CallByReferenceNode時(shí)需要事先指定被調(diào)用VI的輸入輸出接口,也就是說(shuō)這種動(dòng)態(tài)調(diào)用的前提是必須知道被調(diào)用VI的輸入輸出接口,否則無(wú)法進(jìn)行動(dòng)態(tài)調(diào)用。
圖32VI的動(dòng)態(tài)調(diào)用OpenVIReference的路徑輸入是一個(gè)多態(tài)的輸入口,也可以使用String輸入,如圖33所示。此時(shí)被調(diào)用的VI必須在內(nèi)存中,且輸入的是被調(diào)用VI的文件名。值得一提的是這種“文件名”調(diào)用方式在可執(zhí)行程序中是無(wú)法被調(diào)用的,因此建議最好采用路徑的調(diào)用方式。Qp£nVIFleierence圖33OpenVIReference的多態(tài)性【應(yīng)用5】本例將使用LabVIEW的動(dòng)態(tài)調(diào)用方式實(shí)現(xiàn)斐波那契數(shù)列(Fibonacci數(shù)列)。斐波那契數(shù)列指的是這樣一個(gè)數(shù)列:1,1,2,3,5,8,13,21……這個(gè)數(shù)列從第三項(xiàng)開(kāi)始,每一項(xiàng)都等于前兩項(xiàng)之和。在數(shù)學(xué)上表述為:f(n)=f(n-1)+f(n-2),其中n>=3,f(1)=f(2)二1。顯然這是一個(gè)比較熟悉的遞歸調(diào)用,但是在LabVIEW中似乎很難實(shí)現(xiàn)。由于LabVIEW不允許同名的VI同時(shí)在內(nèi)存中,因此一個(gè)VI是無(wú)法VI調(diào)用本身的。但是,通過(guò)VI的可重入技術(shù)和動(dòng)態(tài)調(diào)用技術(shù)卻可以實(shí)現(xiàn)VI的遞歸調(diào)用。圖34所示為Fibonacci數(shù)列在LabVIEW中遞歸的實(shí)現(xiàn)方式°case結(jié)構(gòu)有兩個(gè)分支,當(dāng)n<=2時(shí)直接輸出f(n)=1;當(dāng)n>=3時(shí),輸出f(n)=f(n-1)+f(n-2)。此時(shí)需要把VI設(shè)置為可重入狀態(tài)。
圖34Fibonacci數(shù)列同理我們也可以使用這種遞歸的方式實(shí)現(xiàn)f(n)=n!的算法,從數(shù)學(xué)上可以寫(xiě)作f(n)二n*f(n-1),其中n>=1,f(0)二1。具體的實(shí)例將不再詳述。此外,遞歸算法的效率比較低,在實(shí)際應(yīng)用中應(yīng)謹(jǐn)慎使用。打開(kāi)Highlight工具,在CallByReferenceNode運(yùn)行時(shí),程序是處于等待狀態(tài)的,只有被調(diào)用的VI運(yùn)彳丁完畢,主程序才會(huì)繼續(xù)執(zhí)行。這似乎無(wú)法解決在本節(jié)開(kāi)頭提到的問(wèn)題,那么是否存在一種動(dòng)態(tài)調(diào)用方式使被調(diào)用的VI與主VI之間分別獨(dú)立運(yùn)行呢?答案是肯定的。VI本身是有很多的屬性和方法的,如圖35所示。使用這些方法就可以動(dòng)態(tài)控制VI的運(yùn)行、停止和賦值,各個(gè)屬性節(jié)點(diǎn)和方法的具體含義見(jiàn)LabVIEW的幫助文檔。使用這種方式動(dòng)態(tài)調(diào)用VI時(shí),并不需要知道VI的輸入輸出接口。圖35VIMethod
圖36是該使用“屬性節(jié)點(diǎn)和方法”實(shí)現(xiàn)動(dòng)態(tài)調(diào)用的一個(gè)實(shí)例。在大多數(shù)應(yīng)用程序啟動(dòng)時(shí)會(huì)顯示一個(gè)啟動(dòng)畫(huà)面用來(lái)顯示版權(quán)、開(kāi)發(fā)單位、軟件版本等信息,等待2秒之后關(guān)閉啟動(dòng)界面并啟動(dòng)應(yīng)用程序主界面。圖中使用了動(dòng)態(tài)調(diào)用的方式啟動(dòng)主程序fein.vi)并使主程序獨(dú)立運(yùn)行,首先運(yùn)行程序后設(shè)置2秒鐘的延時(shí);其次,將啟動(dòng)畫(huà)面的界面設(shè)置為“隱藏”(并沒(méi)有退出內(nèi)存,只是隱藏了前面板),并且使用OpenVIReference獲取VI的句柄;然后使用FP.Open屬性打開(kāi)主程序的前面板(只是打開(kāi)了前面板并沒(méi)有運(yùn)行);使用RunVI方法運(yùn)行主程序,將WaitUntilDone設(shè)置為false,這樣就可以保證被調(diào)用VI的獨(dú)立運(yùn)行;最后,關(guān)閉當(dāng)前VI的前面板。圖36VI的動(dòng)態(tài)調(diào)用圖36VI的動(dòng)態(tài)調(diào)用通過(guò)Highlight工具看出該VI的運(yùn)行是獨(dú)立的,并沒(méi)有等待Main.vi運(yùn)行結(jié)束才繼續(xù)執(zhí)行。Main.vi運(yùn)行結(jié)束才繼續(xù)執(zhí)行。生產(chǎn)者/消費(fèi)者模式(4)_生產(chǎn)者/消費(fèi)者循環(huán)statemice的LabVIEW程序設(shè)計(jì)模式(五)一生產(chǎn)者/消費(fèi)者模式(4)生產(chǎn)者/消費(fèi)者循環(huán)本節(jié)將使用“多循環(huán)”來(lái)解決程序并行運(yùn)行的問(wèn)題,那么程序中的兩個(gè)循環(huán)如何進(jìn)行數(shù)據(jù)交互和共享呢?最普通的方式是采用全局變量或局域變量,但是當(dāng)兩個(gè)循環(huán)執(zhí)行的速率不相等時(shí),必然會(huì)造成數(shù)據(jù)的丟失或重復(fù)。如前所述,LabVIEW提供了隊(duì)列操作函數(shù),允許數(shù)據(jù)的發(fā)送者和接受者之間建立一條緩沖通道,這樣就避免了循環(huán)不同步帶來(lái)的影響。如圖37所示,將整個(gè)過(guò)程與供水系統(tǒng)進(jìn)行類比,在數(shù)據(jù)產(chǎn)生采集端(供水局)產(chǎn)生數(shù)據(jù)后,并不直接向終端用戶供水,因?yàn)榍罢弋a(chǎn)生水的速率與后者消耗水的速率并不相同。此時(shí)需要建造蓄水池將供水局產(chǎn)生的水放入到蓄水池中,同理獲取的數(shù)據(jù)也放入該緩沖區(qū)中。當(dāng)終端用戶需要用水時(shí),直接從蓄水池中獲取就可以了,同理在進(jìn)行數(shù)據(jù)顯示和分析時(shí)直接從數(shù)據(jù)緩沖區(qū)中獲取就可以了。圖37生產(chǎn)者/消費(fèi)者模型當(dāng)然,上面的模型也會(huì)存在一個(gè)問(wèn)題:數(shù)據(jù)緩沖區(qū)蓄水池的容量?假定供水局不停地產(chǎn)生自來(lái)水,而終端用戶卻不消耗水,這樣便會(huì)導(dǎo)致蓄水池裝滿而溢出。反之當(dāng)終端用戶耗水量太大時(shí),導(dǎo)致沒(méi)有水可用。LabVIEW中的隊(duì)列函數(shù)提供了一種很好的方式規(guī)避了這個(gè)問(wèn)題,由于隊(duì)列中的元素是“先進(jìn)先出”的,因此確保了接收到的數(shù)據(jù)
是有序的。在LabVIEW的隊(duì)列操作中(入列和出列函數(shù)),提供了timeout選項(xiàng)以處理數(shù)據(jù)緩沖區(qū)的溢出或不足。當(dāng)數(shù)據(jù)溢出時(shí),入列函數(shù)(數(shù)據(jù)進(jìn)入隊(duì)列)將停止發(fā)送數(shù)據(jù)(處于等待狀態(tài)),直到緩沖區(qū)存在數(shù)據(jù)空間或者達(dá)到了timeout設(shè)置的時(shí)間;而當(dāng)數(shù)據(jù)不足時(shí),出列函數(shù)(數(shù)據(jù)流出隊(duì)列)將停止接收數(shù)據(jù)(處于等到狀態(tài)),直到緩沖區(qū)進(jìn)入了新的數(shù)據(jù)或者達(dá)到了timeout設(shè)置的時(shí)間?!緫?yīng)用6】本例將演示生產(chǎn)者/消費(fèi)者循環(huán)的一些基本特性和隊(duì)列操作的特點(diǎn)。如圖38所示,生產(chǎn)者與消費(fèi)者之間傳遞的數(shù)據(jù)是一個(gè)連續(xù)的sine波形,二者靠大小為20個(gè)點(diǎn)的緩沖區(qū)連接。右下角是“停止”按鈕,用戶控制程序的停止執(zhí)行。例程提供了操作方式控件控制生產(chǎn)者和消費(fèi)者的數(shù)據(jù)傳遞速率,包含五種狀態(tài):不生產(chǎn),只消費(fèi)生成快于消費(fèi)、生成速率等于消費(fèi)速率、生成慢于消費(fèi)、只生產(chǎn),不消費(fèi)。偷闊?III快,伊匚率w 偷闊?III快,伊匚率w 占虹予皿也坷尚*Ep圖38生產(chǎn)者/消費(fèi)者例程的前面板強(qiáng)作有武生聲原芷等于治畫(huà)甌至觸爆#世30- ■圖39所示為生產(chǎn)者/消費(fèi)者例程的背面板,代碼由3個(gè)循環(huán)組成,依上而下分別是生產(chǎn)者循環(huán)(產(chǎn)生sine數(shù)據(jù))、消費(fèi)者循環(huán)(獲取sine數(shù)據(jù))和狀態(tài)循環(huán)(獲得緩存區(qū)中數(shù)據(jù)的數(shù)據(jù)量)。例程假定正常的數(shù)據(jù)發(fā)送和接收的速率是延時(shí)50ms,當(dāng)需要某一段的速率減慢時(shí)需要將循環(huán)的延時(shí)設(shè)置為100ms。例程將入列和出列函數(shù)的timeout設(shè)置為-1,表示如果沒(méi)有滿足條件進(jìn)行入列和出列操作,循環(huán)將處于持續(xù)等待狀態(tài)。在新建隊(duì)列時(shí),設(shè)置了緩沖區(qū)的大小是20個(gè)元素(圖中的紅色圓圈內(nèi))。最下面的循環(huán)是為了實(shí)時(shí)查看隊(duì)列緩沖區(qū)中存儲(chǔ)的元素?cái)?shù)量。圖39生產(chǎn)者/消費(fèi)者例程的背面板運(yùn)行該VI,默認(rèn)的操作方式是“生產(chǎn)速率等于消費(fèi)速率”,從圖40中可以看出生產(chǎn)者循環(huán)和消費(fèi)者循環(huán)的數(shù)據(jù)是同步的,此時(shí)緩沖區(qū)內(nèi)沒(méi)有數(shù)據(jù),也就是說(shuō)產(chǎn)生的數(shù)據(jù)都被實(shí)時(shí)地消耗了。
圖40生產(chǎn)速率等于消費(fèi)速率如果再將操作方式設(shè)置為“生成快于消費(fèi)”,可以看出數(shù)據(jù)緩沖區(qū)內(nèi)將逐漸變滿并保持為20個(gè)元素。此時(shí)生產(chǎn)者的波形將會(huì)比消費(fèi)者多20個(gè)數(shù)據(jù)點(diǎn)(這些點(diǎn)保存在數(shù)據(jù)緩沖區(qū)中),如圖41所示。圖41生產(chǎn)速率高于消費(fèi)速率
當(dāng)將操作方式變?yōu)椤安簧a(chǎn),只消費(fèi)”時(shí),生產(chǎn)者循環(huán)將停止生產(chǎn),而消費(fèi)者循環(huán)將組件消耗掉緩沖區(qū)中的數(shù)據(jù)直至數(shù)據(jù)全部消耗完(此時(shí)接收到的波形與發(fā)送的波形點(diǎn)一致),如圖42所示。圖42不生產(chǎn),只消費(fèi)再將操作方式變?yōu)椤爸簧a(chǎn),不消費(fèi)”,消費(fèi)者循環(huán)將停止消費(fèi),而生產(chǎn)者循環(huán)將產(chǎn)生數(shù)據(jù)直至數(shù)據(jù)緩沖區(qū)填滿,如圖43所示。圖43只生產(chǎn),不消費(fèi)
從運(yùn)行過(guò)程來(lái)看,借助于timeout的設(shè)置,消費(fèi)者接收的數(shù)據(jù)始終與生產(chǎn)者發(fā)送的數(shù)據(jù)是一致的,避免點(diǎn)數(shù)據(jù)點(diǎn)溢出的問(wèn)題。當(dāng)然,在實(shí)際使用中需要避免由于timeout設(shè)置為-1而導(dǎo)致的無(wú)限等待和死循環(huán)。生產(chǎn)者/消費(fèi)者模式(5)_生產(chǎn)者/消費(fèi)者模式擴(kuò)展引用statemice的LabVIEW程序設(shè)計(jì)模式(五)一生產(chǎn)者/消費(fèi)者模式⑸—生產(chǎn)者/消費(fèi)者模式擴(kuò)展結(jié)合狀態(tài)機(jī)模式、事件結(jié)構(gòu)和動(dòng)態(tài)調(diào)用技術(shù),能夠歸納出針對(duì)較復(fù)雜應(yīng)用程序的通用設(shè)計(jì)模式。對(duì)常見(jiàn)的測(cè)試測(cè)量程序而言,主要由數(shù)據(jù)采集、數(shù)據(jù)分析、外圍菜單項(xiàng)響應(yīng)、報(bào)表生成、數(shù)據(jù)顯示這五個(gè)部分組成。其中數(shù)據(jù)采集是相對(duì)獨(dú)立和長(zhǎng)時(shí)間運(yùn)行的一個(gè)模塊,可以與其它的模塊同時(shí)運(yùn)行。因此,在大多數(shù)持續(xù)采集的程序設(shè)計(jì)中需要將它單獨(dú)作為一個(gè)模塊運(yùn)行。與此同時(shí),子程序也需要一條數(shù)據(jù)通道發(fā)送一些反饋命令給主程序。于是可以構(gòu)成如圖44所示的一個(gè)通訊回路。
主程序 4子程序圖44通訊回路LabVIEW提供了多種主程序與子程序之間的通訊方式,如隊(duì)列、Reference.事件等。為了介紹這些方式的具體使用方法,將結(jié)合最常用的數(shù)據(jù)采集實(shí)例進(jìn)行闡述?!緫?yīng)用7】本例以“計(jì)算機(jī)組件測(cè)試”為應(yīng)用介紹消費(fèi)者和生產(chǎn)者循環(huán)的具體使用方法和數(shù)據(jù)交互過(guò)程。例子并不是為了說(shuō)明計(jì)算機(jī)組件測(cè)試的過(guò)程和方法,而是重在強(qiáng)調(diào)對(duì)該應(yīng)用而言應(yīng)該采用什么樣的程序設(shè)計(jì)模式。因此,例子中使用了多種數(shù)據(jù)交互方式,這些交互方式的選擇并不是唯一的,可以根據(jù)實(shí)際情況選擇合適的數(shù)據(jù)交互方法。假設(shè)計(jì)算機(jī)的整個(gè)測(cè)試過(guò)程由CPU、RAM、CDROM、Power???.等等數(shù)項(xiàng)子測(cè)試項(xiàng)組成,程序需要充分考慮可擴(kuò)展性要求,使得后期增加新的待測(cè)組件時(shí)對(duì)主程序的影響不大或者沒(méi)有影響。測(cè)試過(guò)程應(yīng)能夠?qū)崿F(xiàn)暫停和提前停止的功能,并且測(cè)試過(guò)程不受其它界面操作的影響。根據(jù)以上的測(cè)試要求,可以把整個(gè)測(cè)試程序分為兩個(gè)部分:控制部分和執(zhí)行部分。其中前者是用戶主界面,用來(lái)響應(yīng)用戶界面事件以及控制測(cè)試流程的執(zhí)行;后者是執(zhí)行程序,用來(lái)根據(jù)控制命令運(yùn)行測(cè)試流程并且產(chǎn)生測(cè)試結(jié)果。系統(tǒng)的結(jié)構(gòu)如圖45所示。
執(zhí)行部分隊(duì)列消息響應(yīng)控制部分圖45“計(jì)算機(jī)組件測(cè)試系統(tǒng)”結(jié)構(gòu)隊(duì)列消息響應(yīng)控制部分圖45從上圖可以看出,該應(yīng)用與消費(fèi)者和生產(chǎn)者模式是相符的,不同的是還涉及到消費(fèi)者(執(zhí)行部分)向生產(chǎn)者(控制部分)的數(shù)據(jù)傳輸。本例使用的是隊(duì)列型的生產(chǎn)者和消費(fèi)者模式,而反向的數(shù)據(jù)傳輸使用了“用戶自定義事件”和“Reference”方法。當(dāng)然,也可以使用隊(duì)列等其它的方式。程序的主界面如圖46所示,包括菜單欄,測(cè)試控制按鈕和測(cè)試項(xiàng)列表3大部分。背面板如圖47所示,生產(chǎn)者部分采用狀態(tài)機(jī)和事件結(jié)構(gòu)相結(jié)合的設(shè)計(jì)模式,共包含5大類的狀態(tài)。?PCT&st圖46PCTest前面板圖47PCTest背面板在PInitialize狀態(tài)中,主要實(shí)現(xiàn)前面板控件的初始化以及調(diào)用待測(cè)組件,如圖48所示。為了滿足測(cè)試系統(tǒng)的可擴(kuò)展性要求,將目前的測(cè)試組件統(tǒng)一集中放置到Testitems目錄中。如果后續(xù)需要增加測(cè)試組件項(xiàng),只需要編寫(xiě)相應(yīng)的測(cè)試組件代碼并且放置到Testitems目錄中即可。
;|l.'iTKtllEII15ri寸UjnSyrp;|l.'iTKtllEII15ri寸UjnSyrp■t,r----■■—-dni nhi*&sib!ed圖48PInitialize狀態(tài)在DInitialize、Run、Pause和Stop狀態(tài)中都使用到了PCTest_Execute_Controller.v訝呈序,該VI用來(lái)啟動(dòng)和控制消費(fèi)者循環(huán),如圖49所示。圖中使用了新建隊(duì)列函數(shù),并且將該隊(duì)列和主程序有關(guān)控件的Reference通過(guò)VIServer方法傳遞給了消費(fèi)者循環(huán)。frrcrlnprEi圖49PCTest_Exec
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園衛(wèi)生食品制度
- 街鎮(zhèn)衛(wèi)生院預(yù)檢分診制度
- 廣東省衛(wèi)生工作制度
- 衛(wèi)生殺蟲(chóng)劑使用管理制度
- 衛(wèi)生局清潔管理制度
- 加工廠衛(wèi)生規(guī)章制度
- 環(huán)境衛(wèi)生紅黑旗制度
- 紀(jì)念館衛(wèi)生管理制度
- 新廟衛(wèi)生院規(guī)章制度匯編
- 食品實(shí)驗(yàn)室衛(wèi)生管理制度
- 職業(yè)技能認(rèn)定考評(píng)員考核試題與答案
- 床上運(yùn)動(dòng)及轉(zhuǎn)移技術(shù)課件
- 子宮腺肌癥術(shù)后護(hù)理
- 獨(dú)資股東協(xié)議書(shū)范本
- 2024-2025蘇教版小學(xué)數(shù)學(xué)二年級(jí)上冊(cè)期末考試測(cè)試卷及答案(共3套)
- 光伏發(fā)電項(xiàng)目風(fēng)險(xiǎn)
- 風(fēng)力發(fā)電項(xiàng)目分包合同施工合同
- GB/T 8607-2024專用小麥粉
- 新版外國(guó)人永久居住身份證考試試題
- 2024年中考數(shù)學(xué)復(fù)習(xí):瓜豆原理講解練習(xí)
- 高一歷史期末試題中國(guó)近現(xiàn)代史
評(píng)論
0/150
提交評(píng)論