




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