LabVIEW+高級編程技巧_第1頁
LabVIEW+高級編程技巧_第2頁
LabVIEW+高級編程技巧_第3頁
LabVIEW+高級編程技巧_第4頁
LabVIEW+高級編程技巧_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、LabVIEW 高級編程技巧高級編程技巧內容概要內容概要 National Instruments 公司簡介 LabVIEW 高級編程技巧 用戶定義的調試指示器 定時循環 基于事件觸發的編程 改善VI的性能1. 調用動態鏈接庫National Instruments: 虛擬儀器倡導者虛擬儀器倡導者 建立于1976年 超過1,000種測試測量產品 在40個國家設有直屬分支機構,600家系統聯盟商 中國: 研發, 區域咨詢, 技術支持, 市場NI HQNI 客戶的分布客戶的分布超過超過25,000個客戶分布在多達個客戶分布在多達80個國家個國家 財富財富500強中強中95的制造型企業的制造型企業1

2、. 調試指示器調試指示器 靈活的調試工具,可詳細顯示數據線上通過的數據 指示器的操作可以體現 VI 的靈活性和強大功能 傳統的調試指示器存在一些缺點,如只能顯示數組中的一個元素用戶定義的調試指示器用戶定義的調試指示器 能顯示各種數據類型 可定制指示器外觀 可定制指示器處理功能 設置條件斷點定制你的需求定制你的需求指示器不僅僅可以顯示數據 將數據錄入文件 對兩個指示器之間的執行進行定時 計算總的調用次數或是每秒的調用次數內建的定制指示器內建的定制指示器 在數據連線上點擊鼠標右鍵 菜單顯示所有相關的指示器 指示器存放在目錄 vi.lib_probesdefault下Keep graphics be

3、low the text and to the right客戶指示器的結構客戶指示器的結構包含一個控件控件的數據類型就是所指示的數據線包含一個指示器Boolean, 類似條件斷點 True = 暫停執行 False = 繼續執行Keep graphics below the text and to the right2. 定時循環定時循環 精確的定時 while 循環 多個時鐘頻率的定時 反饋, 動態定時特性 多達128個循環優先級 examplesgeneraltimedloop.llb定時循環的配置定時循環的配置定時循環定時循環3. 基于事件的編程基于事件的編程 管理用戶界面,通常采用的方

4、法有中斷響應和事件驅動 中斷響應采用輪詢機制處理,非常占用CPU資源,還可能會丟失用戶界面的響應 事件驅動無需輪詢即可捕捉到相關事件,順序處理捕捉到的所有事件,不會丟失也不會顛倒順序事件舉例事件舉例事件結構不需要輪詢就可以捕捉到自定義菜單上的用戶選擇ItemTag 返回菜單條目MenuRef 返回菜單的 refnumVirtual Instrument事件類型事件類型 Application 事件舉例: 退出應用程序 超時Control事件舉例: 關閉前面板 VI 上的鼠標移動事件舉例: 改變控件數值 特定控件上的鼠標移動通知事件和可濾除事件通知事件和可濾除事件通知事件通知 LabVIEW 發

5、生了一個用戶行為; 只能在 Event Data Node中使用可濾除事件在用戶界面處理之前驗證或改變事件數據,避免影響 VI; 可在 Event Filter Node 和 Event Data Node 中使用LabVIEW 7 新事件新事件更多的用戶界面事件動態注冊的事件用戶定義的事件ActiveX 事件事件結構的組成部分事件結構的組成部分 Event Selector Label 確定觀察的事件 Timeout 等待事件的毫秒數; 缺省值 1 (無限期) Defaulted Tunnels 新型tunnel, 允許未連線的事件案例提供缺省值 Dynamic Event Terminal

6、s 用于動態事件的注冊事件結構的組成部分事件結構的組成部分 Event Data Node 確定事件發生時 LV 提供的數據,與 Unbundle By Name 函數類似 Event Filter Node 確定Event Data Node 中可提供的數據子集,可供事件案例修改事件結構的基本使用事件結構的基本使用 通常在 While 循環中使用 每次循環只處理一次事件,其它時間休眠 在事件結構的左側邊框端口上可獲得事件數據事件結構的配置事件結構的配置通過對話框來配置事件,右擊事件結構的邊框 ,選擇 “Edit Events Handled by This Case”事件注冊和面板鎖定事件注

7、冊和面板鎖定 包含事件結構的 VI 被預留以后,事件就成為已注冊的 已注冊事件發生后, 會進入隊列等待直到相應的事件結構開始執行,事件不會丟失也不會出現順序混亂 默認情況下, 前面板被鎖定直到事件被處理完可以關閉鎖定,但只針對過濾事件 VI 變成空閑后,事件被注銷3.1 動態事件動態事件下列情況時,需要動態注冊事件:下列情況時,需要動態注冊事件:事件注冊只能發生在應用程序的某些部分在程序運行過程中需要改變哪些 VIs 或控件可以發生事件在 subVI 中處理事件,而不是僅在注冊事件的 VI 中動態事件動態事件Register For EventsEvent StructureUnregiste

8、r For EventsCreate User EventGenerate User EventDestroy User Event編程模型編程模型注冊注冊事件事件連接到連接到事件結構事件結構選擇選擇動態事件動態事件注銷注銷事件事件3.2 程序產生的程序產生的 (用戶用戶) 事件事件Register For EventsEvent StructureUnregister For EventsCreate User EventGenerate User EventDestroy User Event用戶事件編程模型用戶事件編程模型創建并注冊創建并注冊用戶事件用戶事件產生產生用戶事件用戶事件注銷注

9、銷用戶事件用戶事件消滅消滅用戶事件用戶事件用戶事件舉例用戶事件舉例3.3 ActiveX 事件事件Register Event CallbackActiveX 編程模型編程模型注冊注冊ActiveX 事件事件選擇事件選擇事件創建和編輯創建和編輯Callback VI總結:事件處理結構總結:事件處理結構 允許在subvi中處理事件代碼 提供統一的,簡化的事件處理機制用戶界面接口控制外部代碼硬件觸發用戶定義事件注冊和非注冊事件4. 改善改善VI 的性能的性能 改進內存使用 使用高效數組函數 謹慎處理字符串和數組 避免不必要的復雜數據結構 減少 I/O 開銷 減少 I/O 調用的次數 減少開啟和關閉

10、資源的次數 減少屏幕更新4.1 改進內存使用改進內存使用 LabVIEW 處理了大部分內存管理的細節 資源分配, 復制, 釋放, 溢出 減少程序框圖的大小 提高可讀性和穩定性 內存管理自動進行,你不需要過多的干預 理解 LabVIEW 是何時并如何為你“代勞”內存管理的可以大大提高 對內存使用的效率VI 在內存中的數據結構在內存中的數據結構 Front Panel Block Diagram Code 框圖編譯成機器碼 Data Space Control/indicator 數值 Block diagram 常量 動態定義的數據FrontPanelBlockDiagramCodeDataSp

11、aceVI 何時加載到內存中何時加載到內存中 始終載入 data 平臺符合時載入Code (Mac OS, Windows, Sun, Linux) Panel 和 Diagram 在必要時載入 (recompiling)Main VISubVIAlways in memoryResident sometimesFrontPanelBlockDiagramCodeDataSpaceFrontPanelBlockDiagramCodeDataSpace內存使用情況內存使用情況 Tools Advanced Profile VIs 勾選 “Profile Memory Usage” & “

12、Memory Usage” 在執行應用程序之前點擊“Start” 狀態只在程序執行完成后更新 程序執行過程中內存使用情況不能被查看監測內存使用監測內存使用顯示內存分配顯示內存分配 File Tools Advanced Show Buffer Allocations內存優化內存優化LabVIEW 盡量減少內存再分配需要重新分配內存的函數 Build Array Concatenate StringsHigh Memory Reallocation Low Memory Reallocation最佳內存使用最佳內存使用 盡量使用 subVIs 不要濫用全局和局部變量 只在必要時打開 subVI

13、前面板 高效地創建和處理數組 不使用大的、復雜的數據類型coercion dots構建和處理數組構建和處理數組使用具有 inplaceness 特點的數組函數 Inplaceness 是指函數 in place 操作數據,而不會另外建立一個數據備份。Reuses BuffersMay Allocate New BuffersAllocates New Buffers子數組子數組 LabVIEW 盡可能的重用內存緩沖 子數組不存儲實際的數據 子數組在必要時會生成真實的數組 由于子數組不要對數據進行拷貝,因此提高了程序的執行速度子數組子數組子數組函數返回一個 7499x2 的子數組這個例子程序需要

14、執行2秒鐘2 GHz Pentium 4子數組子數組在函數 Array Subset之前引線執行只需5毫秒子數組到真實數組的生成發生在循環之前4.2 減少減少 I/O 開銷開銷 I/O VIs 比計算操作多花很多時間 把 I/O 調用降低到最少 每次調用傳遞盡可能多的數據 使用多點 DAQ VIs 而不是單點 VIsSlow Method(many I/O calls)Fast Method(One I/O call)減少開啟和關閉資源減少開啟和關閉資源Slow MethodFast Method 使用底層 VIs 來減少開啟和關閉資源的次數 Slow Method中,文件被打開和關閉100次

15、Fast Method中,文件只打開和關閉1次保持資源的打開狀態保持資源的打開狀態 使用底層的文件打開和關閉函數 連接文件讀寫函數open,read / write的引用 提高讀速度提高讀速度 操作系統不需檢查權限、分配新的文件描述符等 提高寫文件的速度提高寫文件的速度 允許操作系統緩沖寫操作標準化標準化 LabVIEW 以“大字端”形式讀寫數據 X86 機器采用“小字端”形式存儲數據 選擇不需要轉換的數據類型如:U8, I8, String (data), SGL, DBL 可以編程轉換- Flatten to string- Type cast- Manual code4.3 減少屏幕顯示

16、的更新減少屏幕顯示的更新 使用高效的 controls 和 indicators Graphs 和 charts 在接收新數據的時候會重新畫圖,從而影響執行速度 設計subVI 的前面板在執行中保持關閉來減少顯示開銷 使用多點更新的畫圖方法 最小化 chart 更新的次數 獲得最高的數據顯示速率屏幕顯示實例屏幕顯示實例Slow Method(每次更新一點)Fast Method(每次更新100點)減少循環中不必要的計算減少循環中不必要的計算 避免將產生相同結果的運算放在循環內 避免在循環中不必要的訪問全局變量減少減少 SubVI 開銷開銷 每個subVI 都會有一些開銷 (大概幾十微秒); 雖

17、然看起來不大,但如果是在一個循環結構中,就會累加出一個很大結果。 在高速運行的循環結構中,不要顯示 subVI 的前面板 如果可能,將循環結構移到 subVI 中完成。全局和局部變量全局和局部變量 每一次變量的讀操作都會給數據生成一個新的緩沖區 在使用大數組、字符串或復雜數據結構時會帶來很大影響 從內存使用和執行速度來看,使用數據線永遠是更有效的方法屬性節點屬性節點 使用屬性節點會引起線程間的交換,從而降低效率 如果只是為了更新控件的值,不要使用屬性節點 如果同時改變其它屬性,更新數值不會造成更大損失,因為線程交換已經發生了更新前面板控件更新前面板控件GoodBetterBest創建高效的平行

18、框圖創建高效的平行框圖 LabVIEW 周期性地在平行循環間切換 使用 Wait (ms) function 確保不太重要的循環占用較少的處理器時間5. 共享庫函數共享庫函數What?Windows 中的 .dll, UNIX/Linux 中的 .so, 等等Why?降低磁盤空間和內存占用How? 應用程序只在需要的時候調用庫函數 程序開始執行以后,由運行鏈接編輯器來處理所有調用 動態鏈接庫動態鏈接庫 (DLL)Microsoft Windows 中的一種軟件模塊包含可執行代碼和可被Windows應用程序或其它 DLL 調用的數據 函數和數據只有在運行狀態下,被Windows 應用程序或其它D

19、LL調用時才被加載和鏈接一個 DLL 包括:-一個特殊函數 (DllMain) -幾個編程者自定義來完成常用任務的函數DLL 特性特性 不能單獨運行的可執行文件 應用程序要求時,由操作系統加載 應用程序把 DLL 代碼作為自己二進制文件的一部分來使用 應用程序不需要知道原始DLL是由什么語言編寫的,也不需要清楚這些功能是如何實現的。 DLL就像一個有輸出函數的黑盒子LabVIEW 中調用中調用 Shared Library/DLLAdvanced Call Library Function Node右擊 Call Library Function Node,選擇 Configure 來調用DL

20、L中的特定函數Call Library Function 的配置的配置指定需調用的 DLL 函數和函數參數 選擇 dll 的調用規則; 對于 Win32 dll 來說,可以是缺省 (stdcall) 或 C.Call Library Function 和和 Win32 DLLs函數參數可以是以下類型:Void數字型 有符號/無符號 8-bit, 16-bit 和 32-bit 整數 4-byte, 單精度數 8-byte, 雙精度數數組 數組數據指針 數組句柄字符串 C Pascal G (LabVIEW)Adapt to TypeDLL 實例實例: MessageBoxA 函數函數回傳類型回

21、傳類型函數名函數名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 integer調試調試 Call Library Function如果 VI不執行或者導致死機, 檢查下列可能: DLL的路徑名是否正確 如果錯誤信息是 function not found in library, 檢查函數名的拼寫、語法和大小寫 傳遞給 DLL函數的所有參數都有數據線連接到 Call Library Function 圖標的輸入端口上. 檢查數據類型和參數順序 使

溫馨提示

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

評論

0/150

提交評論