新聞中心

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

        LabVIEW程序設計模式(五)—生產者/消費者模式(5)

        作者: 時間:2017-01-09 來源:網絡 收藏
        結合狀態機模式、事件結構和動態調用技術,能夠歸納出針對較復雜應用程序的通用設計模式。對常見的測試測量程序而言,主要由數據采集、數據分析、外圍菜單項響應、報表生成、數據顯示這五個部分組成。其中數據采集是相對獨立和長時間運行的一個模塊,可以與其它的模塊同時運行。因此,在大多數持續采集的程序設計中需要將它單獨作為一個模塊運行。與此同時,子程序也需要一條數據通道發送一些反饋命令給主程序。于是可以構成如圖 44所示的一個通訊回路。


        圖 44 通訊回路
        LabVIEW提供了多種主程序與子程序之間的通訊方式,如隊列、Reference、事件等。為了介紹這些方式的具體使用方法,將結合最常用的數據采集實例進行闡述。
        【應用7】
        本例以“計算機組件測試”為應用介紹消費者和生產者循環的具體使用方法和數據交互過程。例子并不是為了說明計算機組件測試的過程和方法,而是重在強調對該應用而言應該采用什么樣的程序設計模式。因此,例子中使用了多種數據交互方式,這些交互方式的選擇并不是唯一的,可以根據實際情況選擇合適的數據交互方法。
        假設計算機的整個測試過程由CPU、RAM、CDROM、Power….等等數項子測試項組成,程序需要充分考慮可擴展性要求,使得后期增加新的待測組件時對主程序的影響不大或者沒有影響。測試過程應能夠實現暫停和提前停止的功能,并且測試過程不受其它界面操作的影響。
        根據以上的測試要求,可以把整個測試程序分為兩個部分:控制部分和執行部分。其中前者是用戶主界面,用來響應用戶界面事件以及控制測試流程的執行;后者是執行程序,用來根據控制命令運行測試流程并且產生測試結果。系統的結構如圖 45所示。


        圖 45 “計算機組件測試系統”結構
        從上圖可以看出,該應用與消費者和生產者模式是相符的,不同的是還涉及到消費者(執行部分)向生產者(控制部分)的數據傳輸。本例使用的是隊列型的生產者和消費者模式,而反向的數據傳輸使用了“用戶自定義事件”和“Reference”方法。當然,也可以使用隊列等其它的方式。
        程序的主界面如圖 46所示,包括菜單欄,測試控制按鈕和測試項列表3大部分。背面板如圖 47所示,生產者部分采用狀態機和事件結構相結合的設計模式,共包含5大類的狀態。


        圖 46 PC Test前面板

        圖 47 PC Test背面板
        在PInitialize狀態中,主要實現前面板控件的初始化以及調用待測組件,如圖 48所示。為了滿足測試系統的可擴展性要求,將目前的測試組件統一集中放置到TestItems目錄中。如果后續需要增加測試組件項,只需要編寫相應的測試組件代碼并且放置到TestItems目錄中即可。


        圖 48 PInitialize狀態
        在DInitialize、Run、Pause和Stop狀態中都使用到了PCTest_Execute_Controller.vi程序,該VI用來啟動和控制消費者循環,如圖 49所示。圖中使用了新建隊列函數,并且將該隊列和主程序有關控件的Reference通過VI Server方法傳遞給了消費者循環。

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 离岛区| 茌平县| 通江县| 黑水县| 湖口县| 桐城市| 长顺县| 大港区| 绍兴县| 钟山县| 定日县| 寿阳县| 文化| 方正县| 绍兴县| 交城县| 浦江县| 北海市| 大新县| 武冈市| 泗水县| 吉安市| 武汉市| 大丰市| 东光县| 雷山县| 湖南省| 图们市| 桦川县| 宜兰县| 天全县| 桂东县| 岳普湖县| 黔西县| 清流县| 利津县| 丘北县| 乌海市| 密山市| 南昌市| 肇庆市|