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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

20、定函數(shù)Call Library Function 的配置的配置指定需調(diào)用的 DLL 函數(shù)和函數(shù)參數(shù) 選擇 dll 的調(diào)用規(guī)則; 對于 Win32 dll 來說,可以是缺省 (stdcall) 或 C.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 TypeDLL 實例實例: MessageBoxA 函數(shù)函數(shù)回傳類型回傳類型函

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

溫馨提示

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

評論

0/150

提交評論