LabVIEW程序設計模式(五)—生產(chǎn)者/消費者模式(5)
圖 44 通訊回路
LabVIEW提供了多種主程序與子程序之間的通訊方式,如隊列、Reference、事件等。為了介紹這些方式的具體使用方法,將結(jié)合最常用的數(shù)據(jù)采集實例進行闡述。
【應用7】
本例以“計算機組件測試”為應用介紹消費者和生產(chǎn)者循環(huán)的具體使用方法和數(shù)據(jù)交互過程。例子并不是為了說明計算機組件測試的過程和方法,而是重在強調(diào)對該應用而言應該采用什么樣的程序設計模式。因此,例子中使用了多種數(shù)據(jù)交互方式,這些交互方式的選擇并不是唯一的,可以根據(jù)實際情況選擇合適的數(shù)據(jù)交互方法。
假設計算機的整個測試過程由CPU、RAM、CDROM、Power….等等數(shù)項子測試項組成,程序需要充分考慮可擴展性要求,使得后期增加新的待測組件時對主程序的影響不大或者沒有影響。測試過程應能夠?qū)崿F(xiàn)暫停和提前停止的功能,并且測試過程不受其它界面操作的影響。
根據(jù)以上的測試要求,可以把整個測試程序分為兩個部分:控制部分和執(zhí)行部分。其中前者是用戶主界面,用來響應用戶界面事件以及控制測試流程的執(zhí)行;后者是執(zhí)行程序,用來根據(jù)控制命令運行測試流程并且產(chǎn)生測試結(jié)果。系統(tǒng)的結(jié)構(gòu)如圖 45所示。
假設計算機的整個測試過程由CPU、RAM、CDROM、Power….等等數(shù)項子測試項組成,程序需要充分考慮可擴展性要求,使得后期增加新的待測組件時對主程序的影響不大或者沒有影響。測試過程應能夠?qū)崿F(xiàn)暫停和提前停止的功能,并且測試過程不受其它界面操作的影響。
根據(jù)以上的測試要求,可以把整個測試程序分為兩個部分:控制部分和執(zhí)行部分。其中前者是用戶主界面,用來響應用戶界面事件以及控制測試流程的執(zhí)行;后者是執(zhí)行程序,用來根據(jù)控制命令運行測試流程并且產(chǎn)生測試結(jié)果。系統(tǒng)的結(jié)構(gòu)如圖 45所示。
圖 45 “計算機組件測試系統(tǒng)”結(jié)構(gòu)
從上圖可以看出,該應用與消費者和生產(chǎn)者模式是相符的,不同的是還涉及到消費者(執(zhí)行部分)向生產(chǎn)者(控制部分)的數(shù)據(jù)傳輸。本例使用的是隊列型的生產(chǎn)者和消費者模式,而反向的數(shù)據(jù)傳輸使用了“用戶自定義事件”和“Reference”方法。當然,也可以使用隊列等其它的方式。
程序的主界面如圖 46所示,包括菜單欄,測試控制按鈕和測試項列表3大部分。背面板如圖 47所示,生產(chǎn)者部分采用狀態(tài)機和事件結(jié)構(gòu)相結(jié)合的設計模式,共包含5大類的狀態(tài)。
圖 46 PC Test前面板
圖 47 PC Test背面板
在PInitialize狀態(tài)中,主要實現(xiàn)前面板控件的初始化以及調(diào)用待測組件,如圖 48所示。為了滿足測試系統(tǒng)的可擴展性要求,將目前的測試組件統(tǒng)一集中放置到TestItems目錄中。如果后續(xù)需要增加測試組件項,只需要編寫相應的測試組件代碼并且放置到TestItems目錄中即可。
圖 48 PInitialize狀態(tài)
在DInitialize、Run、Pause和Stop狀態(tài)中都使用到了PCTest_Execute_Controller.vi程序,該VI用來啟動和控制消費者循環(huán),如圖 49所示。圖中使用了新建隊列函數(shù),并且將該隊列和主程序有關(guān)控件的Reference通過VI Server方法傳遞給了消費者循環(huán)。
評論