程序結構設計_第1頁
程序結構設計_第2頁
程序結構設計_第3頁
程序結構設計_第4頁
程序結構設計_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

智能儀器技術應用程序框架和設計模式什么是設計模式?一種LabVIEW程序模板與架構

軟件實踐中通用的程序架構,其本質是對很多十分類似的問題進行總結歸納的基礎上提煉出的一些具有代表性的軟件開發(fā)規(guī)范具有靈活的配置功能被廣泛使用使用設計模式的益處簡化整個開發(fā)過程更容易理解程序代碼代碼可重用可靠性被使用多年,被證明其“可用并可靠”大量技術資源與例程使用設計模式注意事項1、不是一成不變的定律,既要知道有哪些設計模式,還要知道每種模式解決實際應用中的哪些問題,是如何解決的,效果如何?2、文本式編程語言中廣泛使用的設計模式在圖形化數據流編程中的應用問題。注意!有些時候你沒有必要選用最復雜的設計模式不要忘記最常見的設計模式——數據流!通用型:狀態(tài)機模式、

消息隊列模式、

用戶界面事件模式專用型:主從線程模式、

生產/消費模式、

后臺服務模式、 應用程序啟動模式、

代理模式LabVIEW設計模式

本講內容應用程序框架和設計模式1.2.3.4.基于循環(huán)和分支結構的程序框架基于事件結構的程序框架標準狀態(tài)機生產者/消費者設計模式本講內容本講討論的問題如何建立一個具有一定規(guī)模的完整應用程序?

應用程序框架和設計模式應用程序框架(ApplicationFramework)?

供軟件開發(fā)者使用的用以實現特定編程環(huán)境下應用程序標準結構的軟件框架;例如微軟VisualC++中包含的MFC框架(不僅僅是函數庫,還包含程序框架);

應用程序框架是根據大量的研發(fā)經驗總結出的一套切實可行的應用程序建立模型。降低開發(fā)難度,提高程序的健壯性;需要投入一定的時間學習其使用方法;

編寫小程序時不需要對程序框架有很清楚的概念;編寫具有一定規(guī)模的程序時,使用一個好的程序框架顯得非常重要。?

應用程序框架和設計模式設計模式(DesignPattern)?

設計模式是針對軟件設計中經常發(fā)生的問題的通用的和可重用的解決方案。它是對如何解決一個問題的描述或模板,可以在多種不同場合下使用。 在LabVIEW中,設計模式是解決常見軟件設計問題的VI結構。設計模式一般以模板的形式出現,其目的為提高重用性、編程效率和質量。 (LabVIEWStyleBook)?

應用程序框架和設計模式設計模式?

設計模式促進了好的編程樣式。如果一個應用程序中的所有VI都應用了常用的設計模式,那么開發(fā)者們就可以很容易地識別、理解、維護和重用彼此的程序代碼。設計模式容易制作成模板,構建程序時經常可以從模板開始,按照自己的需求修改模板,而不是總是從頭建立程序。這樣將節(jié)約很多開發(fā)時間,并且確保所開發(fā)的所有VI結構一致。在一個多個開發(fā)者協作的組織中,設計模式和模板有助于建立統一的標準,以確保整個組織的所有成員所研發(fā)軟件具有一致的高質量。?

應用程序框架和設計模式應用程序框架vs.設計模式

設計模式包括解決各種軟件問題的通用方案,其范圍廣闊;應用程序框架僅針對“應用程序如何架構”這一具體問題。

設計模式程序框架設計模式解決其他問題的設計模式

1.基于循環(huán)和分支結構的程序框架輪詢(Polling)

在循環(huán)結構中不斷查詢控件的狀態(tài),一旦判定發(fā)生用戶事件(例如按下一個按鈕)則執(zhí)行相應的代碼。輪詢常用于按鈕按下操作的響應。例1:響應按下按鈕操作(輪詢)用戶界面事件模式“我需要輪詢用戶的操作,但是這樣會降低我程序的運行速度,并且有時我還檢測不到……”1.基于循環(huán)和分支結構的程序框架

按鈕的“機械動作”—“釋放時觸發(fā)”:用戶按下按鈕后控件的值為真,在程序框圖上讀取該控件的真值之后,按鈕控件會自動彈起,恢復值為假,即一次按鈕按下操作只會引起程序讀取到一次真值;

等待函數的作用:決定循環(huán)執(zhí)行頻率/輪詢頻率(100毫秒為典型值);使用Windows的任務管理器,觀察有等待函數和沒有等待函數兩種情況下CPU的占用情況。例2:統計循環(huán)次數和按下按鈕次數(輪詢)如果去掉等待函數則“循環(huán)執(zhí)行次數”控件值很大,占用較多CPU資源1.基于循環(huán)和分支結構的程序框架移位寄存器初始化為0,用于存儲”確定“按鈕按下次數移位寄存器的值每次循環(huán)都送入“確定按鈕按下次數”控件“確定按鈕”按下時移位寄存器值加1存儲循環(huán)執(zhí)行次數

1.基于循環(huán)和分支結構的程序框架例3:生成波形和分析波形(輪詢)

自由游標

按下“生成波形”按鈕生成指定波形,之后按下“分析波形”按鈕求取波形的最大值和對應x索引,將游標移動到最大值點1.基于循環(huán)和分支結構的程序框架2.基于事件結構的程序框架事件結構+While循環(huán)

圖形化操作系統和應用程序采用事件驅動的編程機制。程序開始后進入等待狀態(tài),等待某個事件發(fā)生后進入相應處理代碼,處理結束后回到等待狀態(tài)。以下代碼中,用戶要求結束程序運行(按下“停止”按鈕)時,退出事件結構,結束While循環(huán),停止程序運行。

2.基于事件結構的程序框架例4:響應按下按鈕操作(事件結構)

2.基于事件結構的程序框架例5:統計循環(huán)次數和按下按鈕次數(事件結構)

2.基于事件結構的程序框架例6:生成波形和分析波形(事件結構)兩個按鈕輸入控件置于事件結構內“停止”:值改變事件分支未給出初始化代碼,最先執(zhí)行狀態(tài)機模式“我需要執(zhí)行一系列的事件步驟,但是步驟順序可通過編程決定的?!?.標準狀態(tài)機標準狀態(tài)機(StandardStateMachine)自動販賣機模型InitializeWaitChangeQuarterDimeNickelExitVendNoinputQuarterDepositedTotal<50Total>=50ChangeRequestedDimeDepositedNickelDepositedTotal<50Total<50Total>=50Total>=50Total>50Total=50基本三要素:狀態(tài)、事件、動作背景動態(tài)結構:允許不同的狀態(tài),按通過編程決定的順序進行執(zhí)行靜態(tài)順序結構狀態(tài)機結構對于一個最簡單的狀態(tài)機結構而言,它是可以用順序結構代替的;而對于相對復雜的狀態(tài)機結構而言,卻可以作為測試流程的組織者和管理者。在LabVIEW下實現狀態(tài)機結構While循環(huán)+Case結構每一Case即為一個狀態(tài)當前狀態(tài)中需有決定下一狀態(tài)的判定代碼使用枚舉常量通過移位寄存器傳遞至下一狀態(tài)切換代碼工作流程初始狀態(tài)FIRSTSTATE下一狀態(tài)

執(zhí)行步驟移位寄存器用于傳遞狀態(tài)Case結構對每一狀態(tài)都配備一個分支切換代碼根據執(zhí)行步驟中的結果來決定下一狀態(tài)枚舉常量

一個自定義的枚舉類型對應一個狀態(tài)機中的狀態(tài)集合枚舉常量枚舉類型是一種允許程序員自定義元素的數據類型,它可以顯示數值對應的具體含義,幫助程序員理解程序中使用的變量值。枚舉常量舉例控件選板“Modern”

1、枚舉控件、指示、常量

2、默認U16

3、修改EditItems

4、隱式與顯式類型轉換3.標準態(tài)機新建對話框,VI->基于模板->框架->設計模式->標準狀態(tài)機3.標準狀態(tài)機使用什么數據類型表示狀態(tài)機的狀態(tài)? 分支/條件結構選擇器端子可接受數據類型:布爾(此處不適用),整數,字符串,枚舉……1.整數:不夠直觀,分支選擇器接入的變量意義不清楚;2.字符串:意義明確,但容易出現拼寫錯誤,引起程序執(zhí)行錯誤;解決辦法:建立可容納所有拼寫錯誤字符串的默認分支,彈出對話框警告自己;3.枚舉:意義明確,不易出現錯誤。①在前面板添加枚舉控件,在快“自定義類型”,保存自定義類捷菜單選擇高級->自定義…

3.標準狀態(tài)機建立和使用自定義枚舉類型

②編輯自定義枚舉類型所包含的 枚舉值,“控件類型”列表選擇

型控件(.ctl)在狀態(tài)機中使用自定義枚舉類型,類型定義改變時,所有實例自動更新③在框圖窗口函數選板,“SelectaVI…”,選擇已保存自定義控件④在框圖窗口添加自定義枚舉類型的常量3.標準狀態(tài)機3.標準狀態(tài)機3.標準狀態(tài)機等待狀態(tài)中,檢查三個按鈕控件的值,如果找到真值則進入對應狀態(tài),否則回到等待狀態(tài)

初始化后立刻進入等待狀態(tài)檢查三個按鈕控件值的方法:建立布爾類型1維數組,查找真值,從輸出索引值判斷有(索引≥0)無(索引=-1)真值和有真值時真值的位置。有真值時,索引值+2,之后類型轉化為枚舉值等待函數,降低查詢按鈕值時的CPU負荷

3.標準狀態(tài)機例7:生成波形和分析波形(標準狀態(tài)機)3.標準狀態(tài)機生成波形后,回到等待狀態(tài)分析波形后,回到等待狀態(tài)Stop狀態(tài)下退出循環(huán),結束程序運行

3.標準狀態(tài)機例8:生成波形和分析波形(帶事件結構的狀態(tài)機)

其他模式“我希望同一時刻能夠處理多個消息事件,而不是下一個消息代碼必須等待上一次響應完成后才能執(zhí)行”“我不希望消息排隊,等待很煩的,有時采集數據和記錄數據應該同時進行的”。主從線程模式通常應用于具有多個同時發(fā)生的并且擁有不同運行速率的線程的程序中。比如采集電壓同時寫入磁盤,采集速率1KHz,記錄則每5秒一次。1、數據通信采用全局變量、局域變量或共享變量;2、Stop為Switch模式3、有時會用到事件發(fā)生模塊Occurrence生產者/消費者“我需要可以同時間執(zhí)行的兩個過程,并且需保證它們不會互相影響執(zhí)行速度?!鄙a者/消費者全局變量、局域變量或共享變量的每次復制都是原始數據的一個副本,占據了大量的空間。實際上只需要使用一部分緩沖區(qū)作為數據存儲的中間部分,這需要借助隊列技術。存儲單元數據流入數據流出生產者/消費者具體做法最簡單模式在LabVIEW下實現生產者/消費者無數據相關的多個循環(huán)主/從關系在循環(huán)間實現通訊與同步工作流程主循環(huán)負責通知各個從循環(huán)是否執(zhí)行允許循環(huán)間異步執(zhí)行數據的非相關性實現多線程程序過程分解從循環(huán)1從循環(huán)2主循環(huán)實現循環(huán)間的數據通訊變量通知器隊列信號量集合隊列在隊列中添加元素從隊列中釋放元素Referencetoexistingqueueinmemory選擇隊列中元素的數據類型出列操作需要等待數據進入或者超時情況生產者/消費者循環(huán)后臺服務模式問:“我需要程序在后臺運行,不要前面板,不要交互”答:“采用VI屬性和方法接口,足以使你控制后臺運行的VI”

例子:一個網絡服務監(jiān)聽程序,程序只需要接收與客戶端Sockets的連接,實現三次握手,連接完成后將引用交給前端應用程序處理,同時繼續(xù)監(jiān)聽。后臺服務模式后臺服務模式

4.生產者/消費者設計模式隊列(Queue)

一種特殊的數據結構;是按順序存儲的數據的集合,對于集合的主要操作是在集合尾部加入數據和從集合頭部移除數據;FIFO(First-In-First-Out)。

4.生產者/消費者設計模式

4.生產者/消費者設計模式隊列典型函數,函數選板,編程->同步->隊列操作1.獲取隊列引用(ObtainQueue)

功能:獲得隊列的引用。默認情況下,如果指定隊列已存在,獲得該隊列的引用;如果隊列未存在,則創(chuàng)建隊列。可以在程序的不同部分引用同一個隊列,即在兩端代碼之間共享和傳遞數據。

4.生產者/消費者設計模式2.元素入隊列(EnqueueElement)3.元素出隊列(DequeueElement)4.預覽隊列元素(PreviewQueueElement)功能:返回隊列頭元素,但不刪除元素。5.獲取隊列狀態(tài)(GetQueueStatus)功能:返回隊列狀態(tài)信息,如元素個數。-1(默認)時永遠等待4.生產者/消費者設計模式6.隊列最前端插入元素(EnqueueElementAtOppositeEnd)功能:在隊列頭插入元素(非標準操作,用于插入高優(yōu)先級元素)。7.清空隊列(FlushQueue)功能:清空隊列所有元素(并返回這些元素)。8.釋放隊列引用(ReleaseQueue)功能:釋放隊列的一個引用。

4.生產者/消費者設計模式例9:隊列操作示例入隊列兩個元素預覽/觀察隊列頭元素預覽操作不會刪除隊列元素在隊列頭插入元素隊列頭元素出隊列生產者,生產數據消費者,消費/使用數據數據

4.生產者/消費者設計模式什么是生產者/消費者設計模式(Producer/Consumerdesignpattern)?

兩個線程,一個生產數據,另一個消費/使用數據;在線程之間建立緩沖(采用隊列實現),確保消費者以自己的步調使用數據,同時允許生產者將更多的數據添加到隊列中。

緩沖區(qū)(基于隊列,已填充一部分)

4.生產者/消費者設計模式消費者循環(huán),從緩沖取出數據消費者循環(huán),從緩沖取出數據使用隊列建立生產者和消費者之間的數據緩沖

4.生產者/消費者設計模式新建對話框,VI->基于模板->框架->設計模式->生產者/消費者設計模式(數據)

生產者循環(huán), 向緩沖加入數 據,入隊列 通過輪詢決定何時入隊列消費者循環(huán),從緩沖取出數據使用隊列建立生產者和消費者之間的數據緩沖

4.生產者/消費者設計模式新建對話框,VI->基于模板->框架->設計模式->生產者/消費者設計模式(事件)

生產者循環(huán), 向緩沖加入數 據,入隊列 通過事件結構入隊列消費者循環(huán),從緩沖取出數據初始化代碼

4.生產者/消費者設計模式

例10:生成波形和分析波形(生產者/消費者)

用事件結構將動作/

操作入隊列“Initialize”首先入隊列4.生產者/消費者設計模式

用事件結構將動作/

操作入隊列在消費者循環(huán)內,執(zhí)行相應動作

4.生產者/消費者設計模式自定義枚舉類型,包含7個狀態(tài)采用屬性節(jié)點,指示燈位置初始化到(0,0)首先進入初始化狀態(tài)

4.生產者/消費者設計模式每隔100毫秒產生超時事件 入隊列出隊列 人為添加消費者 數據處理延時兩個循環(huán)都結束才釋放隊列/china/labviewtips應用程序啟動模式“我想設計一個啟動畫面,同時顯示應用程序加載的進度,加載完畢后退出啟動畫面,運行主程序”應用程序啟動模式1、SubVI目錄

2、啟動應用程序.vi

3、主程序“網絡實驗系統.vi”代理模式“我希望頂層VI(主VI)需要某個子VI時,才將其載入內存”“可以在應用程序中引入遲載入技術”代理模式總結設計模式簡化LabVIEW開發(fā)過程被廣泛使用及證明其可用常用的LabVIEW設計模式數據流事件驅動狀態(tài)機結構生產者/消費者

屬性節(jié)點屬性節(jié)點(Pr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論