版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1天津大學精儀學院精講LabVIEW設計模式天津大學精儀學院陳世利2天津大學精儀學院 LabVIEW 設計模式 LabVIEW 定時結(jié)構(gòu)優(yōu)化LabVIEW程序內(nèi)存管理調(diào)用動態(tài)鏈接庫LabVIEW與多線程3天津大學精儀學院什么是設計模式?什么是設計模式? 一種LabVIEW程序模板與架構(gòu) 軟件實踐中通用的程序架構(gòu),其本質(zhì)是對很多十分類似的問題進行總結(jié)歸納的基礎上提煉出的一些具有代表性的軟件開發(fā)規(guī)范 具有靈活的配置功能 被廣泛使用4天津大學精儀學院使用設計模式的益處使用設計模式的益處簡化整個開發(fā)過程 更容易理解程序代碼 代碼可重用可靠性 被使用多年,被證明其“可用并可靠” 大量技術(shù)資源與例程5天津
2、大學精儀學院使用設計模式注意事項使用設計模式注意事項1、不是一成不變的定律,既要知道有哪些設計模式,還要知道每種模式解決實際應用中的哪些問題,是如何解決的,效果如何?2、文本式編程語言中廣泛使用的設計模式在圖形化數(shù)據(jù)流編程中的應用問題。6天津大學精儀學院注意!注意!有些時候你沒有必要選用最復雜的設計模式不要忘記最常見的設計模式數(shù)據(jù)流!數(shù)據(jù)流!7天津大學精儀學院通用型通用型:狀態(tài)機模式、消息隊列模式、用戶界面事件模式專用型:專用型:主從線程模式、生產(chǎn)/消費模式、后臺服務模式、應用程序啟動模式、代理模式LabVIEW設計模式設計模式8天津大學精儀學院基本工具基本工具 循環(huán)結(jié)構(gòu) 移位寄存器 分支結(jié)構(gòu)
3、 枚舉型常量 事件結(jié)構(gòu)9天津大學精儀學院狀態(tài)機模式狀態(tài)機模式“我需要執(zhí)行一系列的事件步驟,但是步驟順序我需要執(zhí)行一系列的事件步驟,但是步驟順序可通過編程決定的??赏ㄟ^編程決定的。”10天津大學精儀學院自動販賣機模型自動販賣機模型InitializeWaitChangeQuarterDimeNickelExitVendNo inputQuarter DepositedTotal = 50Change RequestedDime DepositedNickel DepositedTotal 50Total = 50Total = 50Total 50Total = 5011天津大學精儀學院基本三要
4、素:基本三要素:狀態(tài)、事件、動作狀態(tài)、事件、動作12天津大學精儀學院背景背景動態(tài)結(jié)構(gòu):允許不同的狀態(tài),按通過編程決定的順序進動態(tài)結(jié)構(gòu):允許不同的狀態(tài),按通過編程決定的順序進行執(zhí)行行執(zhí)行靜態(tài)順序結(jié)構(gòu)靜態(tài)順序結(jié)構(gòu)13天津大學精儀學院狀態(tài)機結(jié)構(gòu)狀態(tài)機結(jié)構(gòu)對于一個最簡單的狀態(tài)機結(jié)構(gòu)而言,它是可以用順序結(jié)構(gòu)代替的;而對于相對復雜的狀態(tài)機結(jié)構(gòu)而言,卻可以作為測試流程的組織者和管理者。14天津大學精儀學院在在LabVIEW下實現(xiàn)狀態(tài)機結(jié)構(gòu)下實現(xiàn)狀態(tài)機結(jié)構(gòu) While循環(huán)+Case結(jié)構(gòu) 每一Case即為一個狀態(tài) 當前狀態(tài)中需有決定下一狀態(tài)的判定代碼 使用枚舉常量枚舉常量通過移位寄存器傳遞至下一狀態(tài)15天津大學
5、精儀學院 切換代碼切換代碼工作流程工作流程初始狀態(tài)初始狀態(tài)FIRST STATE下一狀態(tài)下一狀態(tài) 執(zhí)行步驟執(zhí)行步驟移位寄存器用于傳遞狀態(tài)Case結(jié)構(gòu)對每一狀態(tài)都配備一個分支切換代碼根據(jù)執(zhí)行步驟中的結(jié)果來決定下一狀態(tài)枚舉常量枚舉常量16天津大學精儀學院 一個自定義的枚舉類型對應一個狀一個自定義的枚舉類型對應一個狀態(tài)機中的狀態(tài)集合態(tài)機中的狀態(tài)集合枚舉常量枚舉常量 枚舉類型是一種允許程序員自定義枚舉類型是一種允許程序員自定義元素的數(shù)據(jù)類型,它可以顯示數(shù)值對應元素的數(shù)據(jù)類型,它可以顯示數(shù)值對應的具體含義,幫助程序員理解程序中使的具體含義,幫助程序員理解程序中使用的變量值。用的變量值。17天津大學精儀學
6、院枚舉常量舉例枚舉常量舉例 控件選板控件選板“Modern”1、枚舉控件、指示、常量、枚舉控件、指示、常量2、默認、默認U163、修改、修改 Edit Items4、隱式與顯式類型轉(zhuǎn)換、隱式與顯式類型轉(zhuǎn)換18天津大學精儀學院DEMO1順序型狀態(tài)機模式順序型狀態(tài)機模式數(shù)據(jù)傳數(shù)據(jù)傳遞方式遞方式19天津大學精儀學院DEMO2改進的順序型狀態(tài)機模式改進的順序型狀態(tài)機模式1、去掉、去掉i 2、添加一個移位寄存器、添加一個移位寄存器20天津大學精儀學院DEMO3測試流程型狀態(tài)機測試流程型狀態(tài)機1、解決順序型狀態(tài)機不便閱讀和修、解決順序型狀態(tài)機不便閱讀和修改的問題,采用枚舉型常量。改的問題,采用枚舉型常量。
7、2、采用自定義型控件,方便修改。、采用自定義型控件,方便修改。over21天津大學精儀學院消息隊列模式消息隊列模式“我需要執(zhí)行一系列的事件步驟,但是步驟順序可通過我需要執(zhí)行一系列的事件步驟,但是步驟順序可通過編程決定的。編程決定的?!辈襟E是由用戶界面事件決定的,如某個應用程序共要處步驟是由用戶界面事件決定的,如某個應用程序共要處理理4個狀態(tài),分別是個狀態(tài),分別是A,B,C和和D,前面板有,前面板有3個按鈕分別個按鈕分別控制控制3種運行時的狀態(tài)序列種運行時的狀態(tài)序列ABCD、DCAB和和BDCA。引入消息隊列模式,通過建立隊列緩沖區(qū)來解決這個問引入消息隊列模式,通過建立隊列緩沖區(qū)來解決這個問題,
8、這種模式也稱為題,這種模式也稱為“隊列型狀態(tài)機模式隊列型狀態(tài)機模式”。22天津大學精儀學院消息處理過程消息處理過程建立消息隊列加入消息探測消息EXIT?刪除消息接收消息執(zhí)行代碼銷毀消息隊列消息源YesNo23天津大學精儀學院隊列建立方式隊列建立方式隊列函數(shù)和數(shù)組隊列函數(shù)和數(shù)組24天津大學精儀學院隊列函數(shù)隊列函數(shù)最常用的最常用的4個函數(shù)個函數(shù)25天津大學精儀學院數(shù)組數(shù)組1、數(shù)組函數(shù)、數(shù)組函數(shù)2、配合移位寄存器、配合移位寄存器3、無需手動銷毀隊列空間、無需手動銷毀隊列空間26天津大學精儀學院數(shù)組方式數(shù)組方式DEMO27天津大學精儀學院隊列函數(shù)方式隊列函數(shù)方式DEMO28天津大學精儀學院隊列函數(shù)與數(shù)
9、組的不同隊列函數(shù)與數(shù)組的不同1、消息傳遞方式不同、消息傳遞方式不同 移位寄存器移位寄存器 & FIFO2、釋放消息隊列的方式不同、釋放消息隊列的方式不同29天津大學精儀學院用戶界面事件模式用戶界面事件模式“我需要輪詢用戶的操作,但是這樣會降低我程我需要輪詢用戶的操作,但是這樣會降低我程序的運行速度,并且有時我還檢測不到序的運行速度,并且有時我還檢測不到”30天津大學精儀學院LabVIEW中基于事件驅(qū)動的編程中基于事件驅(qū)動的編程LabVIEW事件示例事件示例 按下鼠標 鍵盤按鍵 前面板的用戶交互31天津大學精儀學院LabVIEW 事件結(jié)構(gòu)事件結(jié)構(gòu) 什么是事件結(jié)構(gòu)? 帶有多個子框圖的結(jié)構(gòu)節(jié)點,就像
10、條件結(jié)構(gòu)條件結(jié)構(gòu) 事件結(jié)構(gòu)是如何工作的? 當面板上事件發(fā)生時才被喚醒 自動執(zhí)行相應事件框圖內(nèi)的事件代碼 當處理完成相應事件后便結(jié)束,并不一直循環(huán)等待32天津大學精儀學院為什么要使用事件為什么要使用事件結(jié)構(gòu)結(jié)構(gòu) ? 用更簡單的事件處理替代原來的查詢循環(huán) 最小化 CPU 的使用 不會遺漏用戶界面交互事件 可檢測更多的交互事件 編程生成您自己的事件編程生成您自己的事件33天津大學精儀學院用戶界面事件的兩種類型用戶界面事件的兩種類型通知事件通知事件和和過濾事件過濾事件34天津大學精儀學院事件源:用戶界面事件事件源:用戶界面事件用戶自定義事件用戶自定義事件5個函數(shù)個函數(shù)35天津大學精儀學院用戶自定義事件
11、用戶自定義事件DEMO36天津大學精儀學院事件注冊事件注冊靜態(tài)事件注冊:只有用戶界面事件靜態(tài)事件注冊:只有用戶界面事件 選擇事件源(程序、選擇事件源(程序、VI或控件)、特定事件、編輯或控件)、特定事件、編輯 分支處理事件數(shù)據(jù)。分支處理事件數(shù)據(jù)。Vi運行時自動注冊。運行時自動注冊。動態(tài)事件注冊:何時產(chǎn)生何種事件動態(tài)事件注冊:何時產(chǎn)生何種事件37天津大學精儀學院靜態(tài)事件注冊靜態(tài)事件注冊demo38天津大學精儀學院動態(tài)事件注冊動態(tài)事件注冊4個步驟個步驟1、獲取要處理事件對象的、獲取要處理事件對象的VI服務器引用;服務器引用;2、將、將VI服務器引用連接至服務器引用連接至“注冊事件注冊事件”函數(shù);函
12、數(shù);3、將事件結(jié)構(gòu)放在、將事件結(jié)構(gòu)放在While循環(huán)中,等待處理循環(huán)中,等待處理對象事件直到終止條件出現(xiàn);對象事件直到終止條件出現(xiàn);4、通過取消注冊時間函數(shù)停止事件發(fā)生。、通過取消注冊時間函數(shù)停止事件發(fā)生。39天津大學精儀學院動態(tài)事件注冊動態(tài)事件注冊demo最值器最值器40天津大學精儀學院用戶界面事件用戶界面事件demo一個動態(tài)一個動態(tài)+5個靜態(tài)個靜態(tài)41天津大學精儀學院狀態(tài)機狀態(tài)機用戶界面事件混合用戶界面事件混合demo初始化時不初始化時不再需要用戶再需要用戶自定義事件自定義事件42天津大學精儀學院其他模式其他模式“我希望同一時刻能夠處理多個消息事件,而不我希望同一時刻能夠處理多個消息事件,
13、而不是下一個消息代碼必須等待上一次響應完成后才是下一個消息代碼必須等待上一次響應完成后才能執(zhí)行能執(zhí)行”“我不希望消息排隊,等待很煩的,有時采集數(shù)據(jù)和我不希望消息排隊,等待很煩的,有時采集數(shù)據(jù)和記錄數(shù)據(jù)應該同時進行的記錄數(shù)據(jù)應該同時進行的”。43天津大學精儀學院主從線程模式主從線程模式通常應用于具有多個通常應用于具有多個同時發(fā)生的并且擁有同時發(fā)生的并且擁有不同運行速率的線程不同運行速率的線程的程序中。比如采集的程序中。比如采集電壓同時寫入磁盤,電壓同時寫入磁盤,采集速率采集速率1KHz,記錄,記錄則每則每5秒一次。秒一次。1、數(shù)據(jù)通信采用全局變量、局域變量或共享變量;、數(shù)據(jù)通信采用全局變量、局域
14、變量或共享變量;2、Stop為為Switch模式模式3、有時會用到事件發(fā)生模塊、有時會用到事件發(fā)生模塊Occurrence44天津大學精儀學院生產(chǎn)者生產(chǎn)者/消費者消費者“我需要可以同時間執(zhí)行的兩個過程,并且需保我需要可以同時間執(zhí)行的兩個過程,并且需保證它們不會互相影響執(zhí)行速度。證它們不會互相影響執(zhí)行速度?!?5天津大學精儀學院生產(chǎn)者生產(chǎn)者/消費者消費者全局變量、局域變量或共享變量的每次復制都是原始數(shù)全局變量、局域變量或共享變量的每次復制都是原始數(shù)據(jù)的一個副本,占據(jù)了大量的空間。實際上只需要使用據(jù)的一個副本,占據(jù)了大量的空間。實際上只需要使用一部分緩沖區(qū)作為數(shù)據(jù)存儲的中間部分,這需要借助隊一部分
15、緩沖區(qū)作為數(shù)據(jù)存儲的中間部分,這需要借助隊列技術(shù)。列技術(shù)。存儲單元存儲單元數(shù)據(jù)流入數(shù)據(jù)流入數(shù)據(jù)流出數(shù)據(jù)流出46天津大學精儀學院生產(chǎn)者生產(chǎn)者/消費者具體做法消費者具體做法最簡單模式最簡單模式47天津大學精儀學院在在LabVIEW下實現(xiàn)生產(chǎn)者下實現(xiàn)生產(chǎn)者/消費者消費者 無數(shù)據(jù)相關(guān)的多個循環(huán) 主 / 從關(guān)系 在循環(huán)間實現(xiàn)通訊與同步48天津大學精儀學院工作流程工作流程 主循環(huán)負責通知各個從循環(huán)是否執(zhí)行 允許循環(huán)間異步執(zhí)行 數(shù)據(jù)的非相關(guān)性實現(xiàn)多線程 程序過程分解 從循環(huán)1從循環(huán)2主循環(huán)49天津大學精儀學院實現(xiàn)循環(huán)間的數(shù)據(jù)通訊實現(xiàn)循環(huán)間的數(shù)據(jù)通訊 變量 通知器 隊列 信號量 集合50天津大學精儀學院隊列隊
16、列在隊列中添加元素在隊列中添加元素從隊列中釋放元素從隊列中釋放元素Reference to existing queue in memory選擇隊列中元素的數(shù)據(jù)類型出列操作需要等待數(shù)據(jù)進入或者超時情況51天津大學精儀學院生產(chǎn)者生產(chǎn)者 / 消費者循環(huán)消費者循環(huán)52天津大學精儀學院后臺服務模式后臺服務模式問:問:“我需要程序在后臺運行,不要前面板,不要交互我需要程序在后臺運行,不要前面板,不要交互”答:答:“采用采用VI屬性和方法接口,足以使你控制后臺運行的屬性和方法接口,足以使你控制后臺運行的VI” 例子:一個網(wǎng)絡服務監(jiān)聽程序,程序只需要接收與客戶端例子:一個網(wǎng)絡服務監(jiān)聽程序,程序只需要接收與客
17、戶端Sockets的連接,實現(xiàn)三次握手,連接完成后將引用交給前端應用程序處理,的連接,實現(xiàn)三次握手,連接完成后將引用交給前端應用程序處理,同時繼續(xù)監(jiān)聽。同時繼續(xù)監(jiān)聽。53天津大學精儀學院后臺服務模式后臺服務模式54天津大學精儀學院后臺服務模式后臺服務模式55天津大學精儀學院應用程序啟動模式應用程序啟動模式 “我想設計一個啟動畫面,同時顯示應用程序加載的進度,加載我想設計一個啟動畫面,同時顯示應用程序加載的進度,加載完畢后退出啟動畫面,運行主程序完畢后退出啟動畫面,運行主程序”56天津大學精儀學院應用程序啟動模式應用程序啟動模式1、SubVI目錄目錄2、啟動應用程序、啟動應用程序.vi3、主程序
18、、主程序“網(wǎng)絡實驗系統(tǒng)網(wǎng)絡實驗系統(tǒng).vi”57天津大學精儀學院代理模式代理模式 “我希望頂層我希望頂層VI(主(主VI)需要某個子)需要某個子VI時,才將其載入內(nèi)存時,才將其載入內(nèi)存” “可以在應用程序中引入遲載入技術(shù)可以在應用程序中引入遲載入技術(shù)”58天津大學精儀學院代理模式代理模式59天津大學精儀學院總結(jié)總結(jié) 設計模式 簡化LabVIEW開發(fā)過程 被廣泛使用及證明其可用 常用的LabVIEW設計模式 數(shù)據(jù)流 事件驅(qū)動 狀態(tài)機結(jié)構(gòu) 生產(chǎn)者/消費者60天津大學精儀學院 而功能型全局變量(functional global variable)是為了避免競爭機制而實現(xiàn)的一種非重入型子vi61天津大
19、學精儀學院定時結(jié)構(gòu)定時結(jié)構(gòu) 精確的定時 while 循環(huán) 精確的定時順序結(jié)構(gòu) 多個時鐘頻率的定時 反饋, 動態(tài)定時特性 多優(yōu)先級設置 examplesgeneraltimedloop.llb62天津大學精儀學院定時順序結(jié)構(gòu)定時順序結(jié)構(gòu)類似添加內(nèi)置定時功能的順序結(jié)構(gòu)63天津大學精儀學院定時循環(huán)定時循環(huán)1、優(yōu)先級:相對同一個程序框圖中的多個定時循環(huán)而言,優(yōu)先級數(shù)大的循環(huán)優(yōu)先執(zhí)行。每一個定時循環(huán)都有自己的線程,這里的優(yōu)先級即線程優(yōu)先級。2、循環(huán)名稱,對于可重入子VI中包含定時循環(huán),且該子VI的多個實例出現(xiàn)在同一個程序框圖中,可以將循環(huán)名稱作為子VI的輸入端子。3、Deadline:用于指定完成一個循
20、環(huán)的時間限定,如未在指定的時間內(nèi)完成,則左端數(shù)據(jù)節(jié)點Finished Late?i-1返回真。默認值-1表示Deadline由Period決定。4、如何處理某次循環(huán)使用的時間大于設定的周期?是否丟棄丟失的了的循環(huán)?是否保持原始相位?64天津大學精儀學院定時循環(huán)定時循環(huán)65天津大學精儀學院定時循環(huán)定時循環(huán)66天津大學精儀學院演示:定時循環(huán)演示:定時循環(huán)67天津大學精儀學院演示:定時循環(huán)演示:定時循環(huán)68天津大學精儀學院可具體手動設置定時循環(huán)運行的核可具體手動設置定時循環(huán)運行的核設置定時循環(huán)運設置定時循環(huán)運行的指定核行的指定核NEW!69天津大學精儀學院可具體手動設置定時循環(huán)運行的核可具體手動設置
21、定時循環(huán)運行的核NEW!70天津大學精儀學院定時順序結(jié)構(gòu)定時順序結(jié)構(gòu)Timed Sequence含幀的定式循環(huán)含幀的定式循環(huán)Timed Loop with Frames71天津大學精儀學院為什么要優(yōu)化為什么要優(yōu)化LabVIEW程序內(nèi)存管理程序內(nèi)存管理 LabVIEW的自動管理內(nèi)存特性 方便用戶開發(fā),滿足一般應用需求 LabVIEW應用程序趨向大型化,復雜化 項目規(guī)模大,需求復雜 數(shù)據(jù)處理量大,性能要求高 好的編程風格幫助LabVIEW優(yōu)化內(nèi)存管理 可以顯著提高程序運行效率 需要了解LabVIEW的內(nèi)存分配機制72天津大學精儀學院監(jiān)測監(jiān)測VI內(nèi)存占用和運行時間的工具內(nèi)存占用和運行時間的工具 幫助
22、定位和分析程序中的瓶頸部分工具工具性能分析性能分析性能和內(nèi)存性能和內(nèi)存73天津大學精儀學院顯示顯示VI內(nèi)存分配情況的工具內(nèi)存分配情況的工具 幫助分析程序中各個數(shù)據(jù)變量的內(nèi)存拷貝情況 目標:消除黑點工具工具性能分析性能分析顯示緩存區(qū)分配顯示緩存區(qū)分配74天津大學精儀學院了解程序內(nèi)存的使用了解程序內(nèi)存的使用75天津大學精儀學院演示:監(jiān)測內(nèi)存使用演示:監(jiān)測內(nèi)存使用76天津大學精儀學院優(yōu)化優(yōu)化 LabVIEW程序內(nèi)存管理程序內(nèi)存管理 適時選擇動態(tài)調(diào)用子VI 避免強制類型轉(zhuǎn)換 把復雜VI分解成多個子VI 采用多面板程序 沒必要時不要設置VI的重入特性 合理分配數(shù)組內(nèi)存 靈活使用LabVIEW自帶的VI
23、使用元素同址操作結(jié)構(gòu)In Place Element Structure77天津大學精儀學院在程序中動態(tài)調(diào)用子在程序中動態(tài)調(diào)用子VI321 減少程序占用內(nèi)存以及載入時間打開VI引用通過引用節(jié)點調(diào)用關(guān)閉引用78天津大學精儀學院2配置配置 VI加載加載179天津大學精儀學院數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換 強制點表明連接了兩種不同的數(shù)據(jù)類型 LabVIEW中類型強制轉(zhuǎn)換需要數(shù)據(jù)備份 涉及大數(shù)組的類型強制轉(zhuǎn)換會占用大量內(nèi)存80天津大學精儀學院推薦的類型轉(zhuǎn)換方式推薦的類型轉(zhuǎn)換方式 更好的解決方式是在隨機數(shù)創(chuàng)建時進行轉(zhuǎn)換 避免轉(zhuǎn)換大塊數(shù)據(jù)緩存(14.3 KB)(22.7 KB)81天津大學精儀學院把復雜把復雜V
24、I分解成多個子分解成多個子VI 子vi會增加額外的前面板和框圖的空間,但并不增添額外的代碼和數(shù)據(jù)空間。由于程序運行時只有代碼和數(shù)據(jù)被調(diào)入內(nèi)存,子vi不會占用額外的內(nèi)存。 好處是子vi運行結(jié)束后,LabVIEW可以及時收回子VI的數(shù)據(jù)空間,從而改善內(nèi)存的使用效率。82天津大學精儀學院采用多面板程序采用多面板程序 通過多面板程序?qū)崿F(xiàn)只有在必要時才顯示某些窗口,因為界面顯示是最費內(nèi)存的,因此這樣可以極大降低內(nèi)存的消耗。沒必要時不要設置VI的重入特性 重入型vi每次運行時都會對自己使用的數(shù)據(jù)生成一個副本,這增加了內(nèi)存開銷83天津大學精儀學院合理分配數(shù)組內(nèi)存合理分配數(shù)組內(nèi)存 過多進行內(nèi)存重新分配占用很大
25、開銷 慎用可能導致內(nèi)存重新分配的相關(guān)函數(shù) 創(chuàng)建數(shù)組 連接字符串84天津大學精儀學院演示:編程方法影響程序性能演示:編程方法影響程序性能總在開辟新內(nèi)存,必定時間長總在開辟新內(nèi)存,必定時間長85天津大學精儀學院演示:編程方法影響程序性能演示:編程方法影響程序性能循環(huán)次數(shù)并非事先指定,因此每次循環(huán)也會開循環(huán)次數(shù)并非事先指定,因此每次循環(huán)也會開辟新的內(nèi)存,但節(jié)省了辟新的內(nèi)存,但節(jié)省了Build Array函數(shù)的時間。函數(shù)的時間。86天津大學精儀學院演示:編程方法影響程序性能演示:編程方法影響程序性能循環(huán)無需開辟新的內(nèi)存,時間會明顯減少。循環(huán)無需開辟新的內(nèi)存,時間會明顯減少。87天津大學精儀學院演示:編
26、程方法影響程序性能演示:編程方法影響程序性能88天津大學精儀學院靈活使用靈活使用LabVIEW自帶的自帶的VI 基本線性代數(shù)子程序VI (Basic Linear Algebra Subroutines) 合理歸并基本線性代數(shù)操作 減少不必要的內(nèi)存復制開銷 使程序更加簡潔數(shù)學數(shù)學線性代數(shù)線性代數(shù)BLASNEW!89天津大學精儀學院元素同址操作結(jié)構(gòu)元素同址操作結(jié)構(gòu) 更新數(shù)組或簇中的元素時,避免元素數(shù)據(jù)備份應用控制應用控制內(nèi)存控制內(nèi)存控制NEW!90天津大學精儀學院元素同址操作結(jié)構(gòu)的優(yōu)點元素同址操作結(jié)構(gòu)的優(yōu)點 方便實現(xiàn)多種情況的緩存重用,消除元素復制開銷 數(shù)組索引和替換 簇的綁定和解除綁定 波形的
27、綁定和解除綁定 變體的緩存重用 任意元素的緩存重用91天津大學精儀學院舉例:數(shù)組索引和替換舉例:數(shù)組索引和替換 將數(shù)組第2個元素增大10倍方法一:方法一:方法二:方法二:元素數(shù)據(jù)備份元素數(shù)據(jù)備份92天津大學精儀學院舉例:簇的綁定和解除綁定舉例:簇的綁定和解除綁定 個人納稅信息的更新93天津大學精儀學院演示:嵌套的元素同址操作結(jié)構(gòu)演示:嵌套的元素同址操作結(jié)構(gòu)94天津大學精儀學院LabVIEW 與多線程與多線程程序、進程與線程程序、進程與線程程序是計算機指令的靜態(tài)集合、進程就是正在運行的程序,程序是計算機指令的靜態(tài)集合、進程就是正在運行的程序,是一些所有權(quán)的集合,包括內(nèi)存、是一些所有權(quán)的集合,包括
28、內(nèi)存、CPU運行時間等一系列運行時間等一系列資源,為線程的運行提供一個環(huán)境。線程才是程序的最小資源,為線程的運行提供一個環(huán)境。線程才是程序的最小執(zhí)行單位,是程序的一條執(zhí)行路徑,是操作系統(tǒng)分配執(zhí)行單位,是程序的一條執(zhí)行路徑,是操作系統(tǒng)分配CPU時間的基本實體。一個程序的進程以一個主線程開始,如時間的基本實體。一個程序的進程以一個主線程開始,如果進程的執(zhí)行可以劃分為多個執(zhí)行路徑,則可以創(chuàng)建多個果進程的執(zhí)行可以劃分為多個執(zhí)行路徑,則可以創(chuàng)建多個線程。線程。例:三線程程序,用戶界面線程、數(shù)據(jù)采集線程、儀器控例:三線程程序,用戶界面線程、數(shù)據(jù)采集線程、儀器控制線程。這些線程共享進程內(nèi)的公共資源。制線程。
29、這些線程共享進程內(nèi)的公共資源。95天津大學精儀學院LabVIEW 與多線程與多線程多處理器環(huán)境下的并行編程多處理器環(huán)境下的并行編程1、線程調(diào)度、線程調(diào)度2、線程優(yōu)先級、線程優(yōu)先級3、線程通信與同步、線程通信與同步進程間:環(huán)境變量、命名管道、共享內(nèi)存等進程間:環(huán)境變量、命名管道、共享內(nèi)存等線程間:全局變量、全局數(shù)據(jù)、文件句柄或通信參數(shù)等進程內(nèi)線程間:全局變量、全局數(shù)據(jù)、文件句柄或通信參數(shù)等進程內(nèi)數(shù)據(jù)結(jié)構(gòu)來完成。數(shù)據(jù)結(jié)構(gòu)來完成。同步:數(shù)據(jù)同步、設備同步、任務同步。同步:數(shù)據(jù)同步、設備同步、任務同步。96天津大學精儀學院LabVIEW對多線程程序設計的支持不支持線程的直接創(chuàng)建,從不支持線程的直接創(chuàng)建
30、,從執(zhí)行系統(tǒng)執(zhí)行系統(tǒng)和和數(shù)據(jù)流控制數(shù)據(jù)流控制兩個層兩個層次提供對多線程程序設計的支持次提供對多線程程序設計的支持發(fā)布時需要運行引擎。發(fā)布時需要運行引擎。97天津大學精儀學院執(zhí)行子系統(tǒng)線程數(shù)量配置執(zhí)行子系統(tǒng)線程數(shù)量配置 vi.lib utilities sysinfo.llb 中的中的threadconfig.vi一共有一共有25個具有優(yōu)先級的執(zhí)行子系統(tǒng)。個具有優(yōu)先級的執(zhí)行子系統(tǒng)。98天津大學精儀學院執(zhí)行子執(zhí)行子系統(tǒng)線系統(tǒng)線程數(shù)量程數(shù)量配置配置99天津大學精儀學院線程是一把雙刃劍!線程是一把雙刃劍!100天津大學精儀學院線程優(yōu)先級的設置線程優(yōu)先級的設置1、有時你只要一個不同時間的等待。、有時你只
31、要一個不同時間的等待。2、避免優(yōu)先級倒置或饑餓的發(fā)生。、避免優(yōu)先級倒置或饑餓的發(fā)生。101天津大學精儀學院LabVIEW多線程程序設計多線程程序設計LabVIEW執(zhí)行系統(tǒng)會自動管理線程,但這并不意味著不需執(zhí)行系統(tǒng)會自動管理線程,但這并不意味著不需要用戶的參與。在要用戶的參與。在LabVIEW程序中,從數(shù)據(jù)流的起始點到程序中,從數(shù)據(jù)流的起始點到結(jié)束點的整個流程稱為結(jié)束點的整個流程稱為執(zhí)行路徑執(zhí)行路徑。并行的執(zhí)行路徑是劃分。并行的執(zhí)行路徑是劃分線程任務的依據(jù)。如要充分利用線程的優(yōu)勢,應盡量提高線程任務的依據(jù)。如要充分利用線程的優(yōu)勢,應盡量提高程序的并行度,程序的并行度,避免使用順序結(jié)構(gòu)避免使用順序
32、結(jié)構(gòu)來實現(xiàn)程序架構(gòu)。來實現(xiàn)程序架構(gòu)。102天津大學精儀學院超線程求質(zhì)數(shù)超線程求質(zhì)數(shù)demo103天津大學精儀學院可重入技術(shù)可重入技術(shù)demo104天津大學精儀學院線程通信與同步線程通信與同步 “多個循環(huán)要訪問同一個設備,但該設備任何時候只能同時響多個循環(huán)要訪問同一個設備,但該設備任何時候只能同時響應一個命令應一個命令”105天津大學精儀學院線程通信與同步線程通信與同步1、局部變量、局部變量 創(chuàng)建方法、寫競爭、布爾端子注意機創(chuàng)建方法、寫競爭、布爾端子注意機械動作設置,破壞數(shù)據(jù)流編程模式械動作設置,破壞數(shù)據(jù)流編程模式2、全局變量、全局變量 創(chuàng)建方法、減少創(chuàng)建方法、減少vi之間數(shù)據(jù)傳遞的連線之間數(shù)據(jù)
33、傳遞的連線3、共享變量、共享變量 必須有項目,單進程或網(wǎng)絡發(fā)布必須有項目,單進程或網(wǎng)絡發(fā)布4、功能全局變量、功能全局變量 106天津大學精儀學院共享變量共享變量1、要有項目、要有項目2、使用的文件要位于項目中、使用的文件要位于項目中3、必須部署才能使用、必須部署才能使用4、對于客戶端,需要指定綁定數(shù)據(jù)源、對于客戶端,需要指定綁定數(shù)據(jù)源5、可以拖到前面板,小箭頭變成綠色表示連接成功(紅、可以拖到前面板,小箭頭變成綠色表示連接成功(紅色失?。┥。?、右鍵面板控件,屬性、右鍵面板控件,屬性/數(shù)據(jù)綁定可以將控件于某個共享數(shù)據(jù)綁定可以將控件于某個共享變量綁定。變量綁定。7、共享變量引擎、共享變量引擎
34、Shared Variabled Engine(NI-PSP)SVE107天津大學精儀學院功能全局變量功能全局變量 Functional Global Variables 將一個只執(zhí)行一次的將一個只執(zhí)行一次的For循環(huán)或循環(huán)或While循環(huán)放循環(huán)放在一個子在一個子vi中,并使用中,并使用未初始化的未初始化的移位寄存移位寄存器保存可讀寫的數(shù)據(jù)。與全局變量相比,該器保存可讀寫的數(shù)據(jù)。與全局變量相比,該方法的優(yōu)勢在于可以控制對移位寄存器的訪方法的優(yōu)勢在于可以控制對移位寄存器的訪問。問。108天津大學精儀學院功能全局變量功能全局變量 demo109天津大學精儀學院1、Notification通知技術(shù)通
35、知技術(shù)1一段程序框圖在收到來自于一段程序框圖在收到來自于其它程序框圖或其它程序框圖或vi的通知的通知消息前消息前保持等待狀態(tài)保持等待狀態(tài)。而通知消息可以是任何類型。而通知消息可以是任何類型的數(shù)據(jù),因此可以實現(xiàn)不同框圖不同的數(shù)據(jù),因此可以實現(xiàn)不同框圖不同vi之間的數(shù)據(jù)之間的數(shù)據(jù)傳遞。傳遞。2不同于局部變量和全局變量,不需輪詢。不同于局部變量和全局變量,不需輪詢。3通知器任何時候只能存放一個消息,新消息發(fā)出時,通知器任何時候只能存放一個消息,新消息發(fā)出時,舊消息會被丟棄。消息接收者的數(shù)目沒有限制,新舊消息會被丟棄。消息接收者的數(shù)目沒有限制,新消息發(fā)出之前,該消息一直存在于通知器中,在任消息發(fā)出之前
36、,該消息一直存在于通知器中,在任何時候都可以被任何接收者接收,接收者接收到該何時候都可以被任何接收者接收,接收者接收到該消息后并不刪除通知器中的消息。消息后并不刪除通知器中的消息。110天津大學精儀學院Notification DEMO in LabVIEW注意觀察注意觀察User1-3的延時設置與是否忽略以前的消息的設的延時設置與是否忽略以前的消息的設置對波形的影響置對波形的影響111天津大學精儀學院Queue in LabVIEW Queue結(jié)構(gòu)是一種結(jié)構(gòu)是一種FIFO結(jié)構(gòu),采用結(jié)構(gòu),采用Obtain Queue函數(shù)創(chuàng)函數(shù)創(chuàng)建隊列時需要指定建隊列時需要指定size大小。大小。 數(shù)據(jù)進去后如
37、果沒有程序?qū)⑦@些數(shù)據(jù)讀出,將一直保數(shù)據(jù)進去后如果沒有程序?qū)⑦@些數(shù)據(jù)讀出,將一直保存在隊列中,直到有程序?qū)⑵渥x出并刪除。如果有兩個應存在隊列中,直到有程序?qū)⑵渥x出并刪除。如果有兩個應用程序都在等待同一個隊列中的同一條數(shù)據(jù),只有那個動用程序都在等待同一個隊列中的同一條數(shù)據(jù),只有那個動作快的程序會收到數(shù)據(jù)。作快的程序會收到數(shù)據(jù)。112天津大學精儀學院Queue DEMO in LabVIEW3個子函數(shù)的周期不同個子函數(shù)的周期不同113天津大學精儀學院Semaphore in LabVIEW信號量技術(shù)用于限制同時訪問一個被保護的共享資源的任務數(shù)目,信號量就像一把key。比如兩個獨立運行的vi需要控制同
38、一個機器人,而該機器人任何時候只能被一個vi控制,此時就可以使用信號量技術(shù)。當某個vi正在控制機器人時,通過鎖定該信號量,其他vi只能處于信號量等待狀態(tài),只有該vi釋放信號量后,增等待的vi才能獲得信號量,實現(xiàn)對機器人的控制。114天津大學精儀學院Semaphore demo in LabVIEW115天津大學精儀學院Rendezvous in LabVIEW集合點技術(shù)可以讓若干并行的任務同步執(zhí)行,只有所有的任務到達后,才開始同步執(zhí)行。這就好比一個會議,只有等到參會人員到齊后才開始。1、修改主函數(shù)的集合點數(shù)目為2、3、42、添加集合名稱,并在4的時候運行一個同名集合用戶,解救!116天津大學精
39、儀學院LabVIEW 狀態(tài)圖模塊狀態(tài)圖模塊 LabVIEW Statechart“簡單的狀態(tài)機結(jié)構(gòu)無法實現(xiàn)狀態(tài)簡單的狀態(tài)機結(jié)構(gòu)無法實現(xiàn)狀態(tài)并發(fā)并發(fā)、包含包含與與保存保存功能功能”117天津大學精儀學院LabVIEW狀態(tài)圖模塊狀態(tài)圖模塊 狀態(tài)圖 用直觀的方法來表達基于事件的系統(tǒng)118天津大學精儀學院應用領域應用領域 數(shù)字協(xié)議 控制類應用 時序邏輯 批處理 事件響應 用戶界面的實現(xiàn) 系統(tǒng)建模119天津大學精儀學院設計狀態(tài)和轉(zhuǎn)移設計動作和警戒代碼產(chǎn)生狀態(tài)圖子VI嵌入到 LabVIEW 程序框圖中LabVIEW 狀態(tài)圖開發(fā)的步驟狀態(tài)圖開發(fā)的步驟120天津大學精儀學院動手演示:創(chuàng)建簡單狀態(tài)圖動手演示:創(chuàng)
40、建簡單狀態(tài)圖121天津大學精儀學院DEMOLabVIEW 狀態(tài)圖122天津大學精儀學院添加自定義模板添加自定義模板123天津大學精儀學院更多資源更多資源124天津大學精儀學院議程議程 National Instruments 公司簡介 LabVIEW 高級編程技巧1.用戶定義的調(diào)試指示器2.巧用LabVIEW控件3.定時結(jié)構(gòu)4.基于事件觸發(fā)的編程5.優(yōu)化LabVIEW程序內(nèi)存管理6.調(diào)用動態(tài)鏈接庫調(diào)用動態(tài)鏈接庫125天津大學精儀學院共享庫函數(shù)共享庫函數(shù)What?Windows 中的 .dll, UNIX/Linux 中的 .so, 等等Why?降低磁盤空間和內(nèi)存占用How? 應用程序只在需要的
41、時候調(diào)用庫函數(shù) 程序開始執(zhí)行以后,由運行鏈接編輯器來處理所有調(diào)用 126天津大學精儀學院動態(tài)鏈接庫動態(tài)鏈接庫 (DLL)Microsoft Windows 中的一種軟件模塊包含可執(zhí)行代碼和可被Windows應用程序或其它 DLL 調(diào)用的數(shù)據(jù) 函數(shù)和數(shù)據(jù)只有在運行狀態(tài)下,被Windows 應用程序或其它DLL調(diào)用時才被加載和鏈接一個 DLL 包括:- 一個特殊函數(shù) (DllMain) - 幾個編程者自定義來完成常用任務的函數(shù)127天津大學精儀學院DLL 特性特性 不能單獨運行的可執(zhí)行文件 應用程序要求時,由操作系統(tǒng)加載 應用程序把 DLL 代碼作為自己二進制文件的一部分來使用 應用程序不需要知道
42、原始DLL是由什么語言編寫的,也不需要清楚這些功能是如何實現(xiàn)的。 DLL就像一個有輸出函數(shù)的黑盒子128天津大學精儀學院LabVIEW下調(diào)用下調(diào)用DLL的方法的方法 勿在浮沙筑高臺調(diào)用庫函數(shù)節(jié)點 劍走中鋒導入共享庫工具129天津大學精儀學院LabVIEW 中調(diào)用中調(diào)用 Shared Library/DLLConnectivity Libraries & Executables Call Library Function Node右擊 Call Library Function Node,選擇 Configure 來調(diào)用DLL中的特定函數(shù)130天津大學精儀學院Call Library Funct
43、ion 的配置的配置指定需調(diào)用的 DLL 函數(shù)和函數(shù)參數(shù) 選擇 dll 的調(diào)用規(guī)則; 對于 Win32 dll 來說,可以是缺省 (stdcall) 或 C.131天津大學精儀學院Call Library Function 和和 Win32 DLLs函數(shù)參數(shù)可以是以下類型:Void數(shù)字型 有符號/無符號 8-bit, 16-bit 和 32-bit 整數(shù) 4-byte, 單精度數(shù) 8-byte, 雙精度數(shù)數(shù)組 數(shù)組數(shù)據(jù)指針 數(shù)組句柄字符串 C Pascal G (LabVIEW)Adapt to Type132天津大學精儀學院DLL 實例實例: MessageBoxA 函數(shù)函數(shù)回傳類型回傳類型函數(shù)名函數(shù)名int MessageBoxA (hWnd, lpText, lpCaption, uType)參數(shù)參數(shù)參數(shù)參數(shù):HWNDhWnd 32-bit 無符號整數(shù). 確定 parent window. 此時為 NULL.LPCSTRlpText C-style stringLPCSTRlpCaption C-style stringUINTuType unsigned 32-bit integer value.回傳類型回傳類型:int 32-bit signed integer133天津大學精儀學院調(diào)試調(diào)試 Call Library Function如果 VI不執(zhí)行或者導致死
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第11章 《功和機械能》 單元測試卷( A卷基礎篇)2024-2025學年八年級物理下冊同步單元AB卷(人教版)含答案
- 【+高+中語文】《五代史伶官傳序》課件++統(tǒng)編版高中語文選擇性必修中冊
- 出售機械板車合同模板
- 托管課程合作合同模板
- 糧油進超市合同模板
- 室內(nèi)土方回填合同模板
- 家具租賃商用合同模板
- 房租維修承攬合同模板
- 配送超市合同模板
- 后勤配送合同模板
- 凸輪C語言編程
- 蓋洛普優(yōu)勢識別器測試完整版
- 配網(wǎng)工程管理流程及注意事項
- 電動車證明模板
- 美標鋼材理論重量整理(槽鋼、角鋼、H型鋼-W型鋼、T型鋼)
- 管樁打樁規(guī)范及要求
- 光纖傳感器的八大優(yōu)點和分布式光纖傳感器的六大特點
- 日照市重點支柱產(chǎn)業(yè)情況
- 學生課堂表現(xiàn)評價量表(共8頁)
- 未就業(yè)證明模板村委會
- 《2021國標暖通圖集資料》14K117-3 錐形風帽
評論
0/150
提交評論