版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LabVIEW 高級(jí)編程技巧高級(jí)編程技巧內(nèi)容概要內(nèi)容概要 National Instruments 公司簡(jiǎn)介 LabVIEW 高級(jí)編程技巧 用戶定義的調(diào)試指示器 定時(shí)循環(huán) 基于事件觸發(fā)的編程 改善VI的性能1. 調(diào)用動(dòng)態(tài)鏈接庫(kù)National Instruments: 虛擬儀器倡導(dǎo)者虛擬儀器倡導(dǎo)者 建立于1976年 超過(guò)1,000種測(cè)試測(cè)量產(chǎn)品 在40個(gè)國(guó)家設(shè)有直屬分支機(jī)構(gòu),600家系統(tǒng)聯(lián)盟商 中國(guó): 研發(fā), 區(qū)域咨詢, 技術(shù)支持, 市場(chǎng)NI HQNI 客戶的分布客戶的分布超過(guò)超過(guò)25,000個(gè)客戶分布在多達(dá)個(gè)客戶分布在多達(dá)80個(gè)國(guó)家個(gè)國(guó)家 財(cái)富財(cái)富500強(qiáng)中強(qiáng)中95的制造型企業(yè)的制造型企業(yè)1
2、. 調(diào)試指示器調(diào)試指示器 靈活的調(diào)試工具,可詳細(xì)顯示數(shù)據(jù)線上通過(guò)的數(shù)據(jù) 指示器的操作可以體現(xiàn) VI 的靈活性和強(qiáng)大功能 傳統(tǒng)的調(diào)試指示器存在一些缺點(diǎn),如只能顯示數(shù)組中的一個(gè)元素用戶定義的調(diào)試指示器用戶定義的調(diào)試指示器 能顯示各種數(shù)據(jù)類型 可定制指示器外觀 可定制指示器處理功能 設(shè)置條件斷點(diǎn)定制你的需求定制你的需求指示器不僅僅可以顯示數(shù)據(jù) 將數(shù)據(jù)錄入文件 對(duì)兩個(gè)指示器之間的執(zhí)行進(jìn)行定時(shí) 計(jì)算總的調(diào)用次數(shù)或是每秒的調(diào)用次數(shù)內(nèi)建的定制指示器內(nèi)建的定制指示器 在數(shù)據(jù)連線上點(diǎn)擊鼠標(biāo)右鍵 菜單顯示所有相關(guān)的指示器 指示器存放在目錄 vi.lib_probesdefault下Keep graphics be
3、low the text and to the right客戶指示器的結(jié)構(gòu)客戶指示器的結(jié)構(gòu)包含一個(gè)控件控件的數(shù)據(jù)類型就是所指示的數(shù)據(jù)線包含一個(gè)指示器Boolean, 類似條件斷點(diǎn) True = 暫停執(zhí)行 False = 繼續(xù)執(zhí)行Keep graphics below the text and to the right2. 定時(shí)循環(huán)定時(shí)循環(huán) 精確的定時(shí) while 循環(huán) 多個(gè)時(shí)鐘頻率的定時(shí) 反饋, 動(dòng)態(tài)定時(shí)特性 多達(dá)128個(gè)循環(huán)優(yōu)先級(jí) examplesgeneraltimedloop.llb定時(shí)循環(huán)的配置定時(shí)循環(huán)的配置定時(shí)循環(huán)定時(shí)循環(huán)3. 基于事件的編程基于事件的編程 管理用戶界面,通常采用的方
4、法有中斷響應(yīng)和事件驅(qū)動(dòng) 中斷響應(yīng)采用輪詢機(jī)制處理,非常占用CPU資源,還可能會(huì)丟失用戶界面的響應(yīng) 事件驅(qū)動(dòng)無(wú)需輪詢即可捕捉到相關(guān)事件,順序處理捕捉到的所有事件,不會(huì)丟失也不會(huì)顛倒順序事件舉例事件舉例事件結(jié)構(gòu)不需要輪詢就可以捕捉到自定義菜單上的用戶選擇ItemTag 返回菜單條目MenuRef 返回菜單的 refnumVirtual Instrument事件類型事件類型 Application 事件舉例: 退出應(yīng)用程序 超時(shí)Control事件舉例: 關(guān)閉前面板 VI 上的鼠標(biāo)移動(dòng)事件舉例: 改變控件數(shù)值 特定控件上的鼠標(biāo)移動(dòng)通知事件和可濾除事件通知事件和可濾除事件通知事件通知 LabVIEW 發(fā)
5、生了一個(gè)用戶行為; 只能在 Event Data Node中使用可濾除事件在用戶界面處理之前驗(yàn)證或改變事件數(shù)據(jù),避免影響 VI; 可在 Event Filter Node 和 Event Data Node 中使用LabVIEW 7 新事件新事件更多的用戶界面事件動(dòng)態(tài)注冊(cè)的事件用戶定義的事件ActiveX 事件事件結(jié)構(gòu)的組成部分事件結(jié)構(gòu)的組成部分 Event Selector Label 確定觀察的事件 Timeout 等待事件的毫秒數(shù); 缺省值 1 (無(wú)限期) Defaulted Tunnels 新型tunnel, 允許未連線的事件案例提供缺省值 Dynamic Event Terminal
6、s 用于動(dòng)態(tài)事件的注冊(cè)事件結(jié)構(gòu)的組成部分事件結(jié)構(gòu)的組成部分 Event Data Node 確定事件發(fā)生時(shí) LV 提供的數(shù)據(jù),與 Unbundle By Name 函數(shù)類似 Event Filter Node 確定Event Data Node 中可提供的數(shù)據(jù)子集,可供事件案例修改事件結(jié)構(gòu)的基本使用事件結(jié)構(gòu)的基本使用 通常在 While 循環(huán)中使用 每次循環(huán)只處理一次事件,其它時(shí)間休眠 在事件結(jié)構(gòu)的左側(cè)邊框端口上可獲得事件數(shù)據(jù)事件結(jié)構(gòu)的配置事件結(jié)構(gòu)的配置通過(guò)對(duì)話框來(lái)配置事件,右擊事件結(jié)構(gòu)的邊框 ,選擇 “Edit Events Handled by This Case”事件注冊(cè)和面板鎖定事件注
7、冊(cè)和面板鎖定 包含事件結(jié)構(gòu)的 VI 被預(yù)留以后,事件就成為已注冊(cè)的 已注冊(cè)事件發(fā)生后, 會(huì)進(jìn)入隊(duì)列等待直到相應(yīng)的事件結(jié)構(gòu)開(kāi)始執(zhí)行,事件不會(huì)丟失也不會(huì)出現(xiàn)順序混亂 默認(rèn)情況下, 前面板被鎖定直到事件被處理完可以關(guān)閉鎖定,但只針對(duì)過(guò)濾事件 VI 變成空閑后,事件被注銷3.1 動(dòng)態(tài)事件動(dòng)態(tài)事件下列情況時(shí),需要?jiǎng)討B(tài)注冊(cè)事件:下列情況時(shí),需要?jiǎng)討B(tài)注冊(cè)事件:事件注冊(cè)只能發(fā)生在應(yīng)用程序的某些部分在程序運(yùn)行過(guò)程中需要改變哪些 VIs 或控件可以發(fā)生事件在 subVI 中處理事件,而不是僅在注冊(cè)事件的 VI 中動(dòng)態(tài)事件動(dòng)態(tài)事件Register For EventsEvent StructureUnregiste
8、r For EventsCreate User EventGenerate User EventDestroy User Event編程模型編程模型注冊(cè)注冊(cè)事件事件連接到連接到事件結(jié)構(gòu)事件結(jié)構(gòu)選擇選擇動(dòng)態(tài)事件動(dòng)態(tài)事件注銷注銷事件事件3.2 程序產(chǎn)生的程序產(chǎn)生的 (用戶用戶) 事件事件Register For EventsEvent StructureUnregister For EventsCreate User EventGenerate User EventDestroy User Event用戶事件編程模型用戶事件編程模型創(chuàng)建并注冊(cè)創(chuàng)建并注冊(cè)用戶事件用戶事件產(chǎn)生產(chǎn)生用戶事件用戶事件注銷注
9、銷用戶事件用戶事件消滅消滅用戶事件用戶事件用戶事件舉例用戶事件舉例3.3 ActiveX 事件事件Register Event CallbackActiveX 編程模型編程模型注冊(cè)注冊(cè)ActiveX 事件事件選擇事件選擇事件創(chuàng)建和編輯創(chuàng)建和編輯Callback VI總結(jié):事件處理結(jié)構(gòu)總結(jié):事件處理結(jié)構(gòu) 允許在subvi中處理事件代碼 提供統(tǒng)一的,簡(jiǎn)化的事件處理機(jī)制用戶界面接口控制外部代碼硬件觸發(fā)用戶定義事件注冊(cè)和非注冊(cè)事件4. 改善改善VI 的性能的性能 改進(jìn)內(nèi)存使用 使用高效數(shù)組函數(shù) 謹(jǐn)慎處理字符串和數(shù)組 避免不必要的復(fù)雜數(shù)據(jù)結(jié)構(gòu) 減少 I/O 開(kāi)銷 減少 I/O 調(diào)用的次數(shù) 減少開(kāi)啟和關(guān)閉
10、資源的次數(shù) 減少屏幕更新4.1 改進(jìn)內(nèi)存使用改進(jìn)內(nèi)存使用 LabVIEW 處理了大部分內(nèi)存管理的細(xì)節(jié) 資源分配, 復(fù)制, 釋放, 溢出 減少程序框圖的大小 提高可讀性和穩(wěn)定性 內(nèi)存管理自動(dòng)進(jìn)行,你不需要過(guò)多的干預(yù) 理解 LabVIEW 是何時(shí)并如何為你“代勞”內(nèi)存管理的可以大大提高 對(duì)內(nèi)存使用的效率VI 在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu) Front Panel Block Diagram Code 框圖編譯成機(jī)器碼 Data Space Control/indicator 數(shù)值 Block diagram 常量 動(dòng)態(tài)定義的數(shù)據(jù)FrontPanelBlockDiagramCodeDataSp
11、aceVI 何時(shí)加載到內(nèi)存中何時(shí)加載到內(nèi)存中 始終載入 data 平臺(tái)符合時(shí)載入Code (Mac OS, Windows, Sun, Linux) Panel 和 Diagram 在必要時(shí)載入 (recompiling)Main VISubVIAlways in memoryResident sometimesFrontPanelBlockDiagramCodeDataSpaceFrontPanelBlockDiagramCodeDataSpace內(nèi)存使用情況內(nèi)存使用情況 Tools Advanced Profile VIs 勾選 “Profile Memory Usage” & “Memo
12、ry Usage” 在執(zhí)行應(yīng)用程序之前點(diǎn)擊“Start” 狀態(tài)只在程序執(zhí)行完成后更新 程序執(zhí)行過(guò)程中內(nèi)存使用情況不能被查看監(jiān)測(cè)內(nèi)存使用監(jiān)測(cè)內(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 不要濫用全局和局部變量 只在必要時(shí)打開(kāi) subVI 前面板
13、高效地創(chuàng)建和處理數(shù)組 不使用大的、復(fù)雜的數(shù)據(jù)類型coercion dots構(gòu)建和處理數(shù)組構(gòu)建和處理數(shù)組使用具有 inplaceness 特點(diǎn)的數(shù)組函數(shù) Inplaceness 是指函數(shù) in place 操作數(shù)據(jù),而不會(huì)另外建立一個(gè)數(shù)據(jù)備份。Reuses BuffersMay Allocate New BuffersAllocates New Buffers子數(shù)組子數(shù)組 LabVIEW 盡可能的重用內(nèi)存緩沖 子數(shù)組不存儲(chǔ)實(shí)際的數(shù)據(jù) 子數(shù)組在必要時(shí)會(huì)生成真實(shí)的數(shù)組 由于子數(shù)組不要對(duì)數(shù)據(jù)進(jìn)行拷貝,因此提高了程序的執(zhí)行速度子數(shù)組子數(shù)組子數(shù)組函數(shù)返回一個(gè) 7499x2 的子數(shù)組這個(gè)例子程序需要執(zhí)行2秒
14、鐘2 GHz Pentium 4子數(shù)組子數(shù)組在函數(shù) Array Subset之前引線執(zhí)行只需5毫秒子數(shù)組到真實(shí)數(shù)組的生成發(fā)生在循環(huán)之前4.2 減少減少 I/O 開(kāi)銷開(kāi)銷 I/O VIs 比計(jì)算操作多花很多時(shí)間 把 I/O 調(diào)用降低到最少 每次調(diào)用傳遞盡可能多的數(shù)據(jù) 使用多點(diǎn) DAQ VIs 而不是單點(diǎn) VIsSlow Method(many I/O calls)Fast Method(One I/O call)減少開(kāi)啟和關(guān)閉資源減少開(kāi)啟和關(guān)閉資源Slow MethodFast Method 使用底層 VIs 來(lái)減少開(kāi)啟和關(guān)閉資源的次數(shù) Slow Method中,文件被打開(kāi)和關(guān)閉100次Fast
15、 Method中,文件只打開(kāi)和關(guān)閉1次保持資源的打開(kāi)狀態(tài)保持資源的打開(kāi)狀態(tài) 使用底層的文件打開(kāi)和關(guān)閉函數(shù) 連接文件讀寫(xiě)函數(shù)open,read / write的引用 提高讀速度提高讀速度 操作系統(tǒng)不需檢查權(quán)限、分配新的文件描述符等 提高寫(xiě)文件的速度提高寫(xiě)文件的速度 允許操作系統(tǒng)緩沖寫(xiě)操作標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化 LabVIEW 以“大字端”形式讀寫(xiě)數(shù)據(jù) X86 機(jī)器采用“小字端”形式存儲(chǔ)數(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ù)的時(shí)候會(huì)重新畫(huà)圖,從而影響執(zhí)行速度 設(shè)計(jì)subVI 的前面板在執(zhí)行中保持關(guān)閉來(lái)減少顯示開(kāi)銷 使用多點(diǎn)更新的畫(huà)圖方法 最小化 chart 更新的次數(shù) 獲得最高的數(shù)據(jù)顯示速率屏幕顯示實(shí)例屏幕顯示實(shí)例Slow Method(每次更新一點(diǎn))Fast Method(每次更新100點(diǎn))減少循環(huán)中不必要的計(jì)算減少循環(huán)中不必要的計(jì)算 避免將產(chǎn)生相同結(jié)果的運(yùn)算放在循環(huán)內(nèi) 避免在循環(huán)中不必要的訪問(wèn)全局變量減少減少 SubVI 開(kāi)銷開(kāi)銷 每個(gè)subVI 都會(huì)有一些開(kāi)銷 (大概幾十微秒); 雖然看起來(lái)
17、不大,但如果是在一個(gè)循環(huán)結(jié)構(gòu)中,就會(huì)累加出一個(gè)很大結(jié)果。 在高速運(yùn)行的循環(huán)結(jié)構(gòu)中,不要顯示 subVI 的前面板 如果可能,將循環(huán)結(jié)構(gòu)移到 subVI 中完成。全局和局部變量全局和局部變量 每一次變量的讀操作都會(huì)給數(shù)據(jù)生成一個(gè)新的緩沖區(qū) 在使用大數(shù)組、字符串或復(fù)雜數(shù)據(jù)結(jié)構(gòu)時(shí)會(huì)帶來(lái)很大影響 從內(nèi)存使用和執(zhí)行速度來(lái)看,使用數(shù)據(jù)線永遠(yuǎn)是更有效的方法屬性節(jié)點(diǎn)屬性節(jié)點(diǎn) 使用屬性節(jié)點(diǎn)會(huì)引起線程間的交換,從而降低效率 如果只是為了更新控件的值,不要使用屬性節(jié)點(diǎn) 如果同時(shí)改變其它屬性,更新數(shù)值不會(huì)造成更大損失,因?yàn)榫€程交換已經(jīng)發(fā)生了更新前面板控件更新前面板控件GoodBetterBest創(chuàng)建高效的平行框圖創(chuàng)建
18、高效的平行框圖 LabVIEW 周期性地在平行循環(huán)間切換 使用 Wait (ms) function 確保不太重要的循環(huán)占用較少的處理器時(shí)間5. 共享庫(kù)函數(shù)共享庫(kù)函數(shù)What?Windows 中的 .dll, UNIX/Linux 中的 .so, 等等Why?降低磁盤(pán)空間和內(nèi)存占用How? 應(yīng)用程序只在需要的時(shí)候調(diào)用庫(kù)函數(shù) 程序開(kāi)始執(zhí)行以后,由運(yùn)行鏈接編輯器來(lái)處理所有調(diào)用 動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù) (DLL)Microsoft Windows 中的一種軟件模塊包含可執(zhí)行代碼和可被Windows應(yīng)用程序或其它 DLL 調(diào)用的數(shù)據(jù) 函數(shù)和數(shù)據(jù)只有在運(yùn)行狀態(tài)下,被Windows 應(yīng)用程序或其它DLL調(diào)用
19、時(shí)才被加載和鏈接一個(gè) DLL 包括:-一個(gè)特殊函數(shù) (DllMain) -幾個(gè)編程者自定義來(lái)完成常用任務(wù)的函數(shù)DLL 特性特性 不能單獨(dú)運(yùn)行的可執(zhí)行文件 應(yīng)用程序要求時(shí),由操作系統(tǒng)加載 應(yīng)用程序把 DLL 代碼作為自己二進(jìn)制文件的一部分來(lái)使用 應(yīng)用程序不需要知道原始DLL是由什么語(yǔ)言編寫(xiě)的,也不需要清楚這些功能是如何實(shí)現(xiàn)的。 DLL就像一個(gè)有輸出函數(shù)的黑盒子LabVIEW 中調(diào)用中調(diào)用 Shared Library/DLLAdvanced Call Library Function Node右擊 Call Library Function Node,選擇 Configure 來(lái)調(diào)用DLL中的特
20、定函數(shù)Call Library Function 的配置的配置指定需調(diào)用的 DLL 函數(shù)和函數(shù)參數(shù) 選擇 dll 的調(diào)用規(guī)則; 對(duì)于 Win32 dll 來(lái)說(shuō),可以是缺省 (stdcall) 或 C.Call Library Function 和和 Win32 DLLs函數(shù)參數(shù)可以是以下類型:Void數(shù)字型 有符號(hào)/無(wú)符號(hào) 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 實(shí)例實(shí)例: MessageBoxA 函數(shù)函數(shù)回傳類型回傳類型函
21、數(shù)名函數(shù)名int MessageBoxA (hWnd, lpText, lpCaption, uType)參數(shù)參數(shù)參數(shù)參數(shù):HWNDhWnd 32-bit 無(wú)符號(hào)整數(shù). 確定 parent window. 此時(shí)為 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í)行或者導(dǎo)致死機(jī), 檢查下列可能: DLL的路徑名是否正確 如果錯(cuò)誤信息是 function not found in library, 檢查函數(shù)名的拼寫(xiě)、語(yǔ)法和大小寫(xiě) 傳遞給 DLL函數(shù)的所有參數(shù)都有數(shù)據(jù)線連接到 Call Library Function 圖標(biāo)的輸入端口上. 檢查數(shù)據(jù)類型和參數(shù)順序 使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師年度考核個(gè)人述職報(bào)告范文(19篇)
- 班主任教師工作簡(jiǎn)述7篇
- 智慧安全政務(wù)云數(shù)據(jù)中心整體解決方案
- 某文旅景區(qū)概念性策略-策劃案例
- 《治安管理處罰法》知識(shí)競(jìng)賽參考試題庫(kù)150題(含答案)
- 2025年武漢鐵路職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年無(wú)錫城市職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年曹妃甸職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 特種材料供應(yīng)合同
- 二手設(shè)備的買賣合同范本
- 2025年度廚師職業(yè)培訓(xùn)學(xué)院合作辦學(xué)合同4篇
- 《組織行為學(xué)》第1章-組織行為學(xué)概述
- 市場(chǎng)營(yíng)銷試題(含參考答案)
- 2024年山東省泰安市高考物理一模試卷(含詳細(xì)答案解析)
- 護(hù)理指南手術(shù)器械臺(tái)擺放
- 腫瘤患者管理
- 四川省成都市高新區(qū)2024年七年級(jí)上學(xué)期語(yǔ)文期末試卷【含答案】
- 2025年中國(guó)航空部附件維修行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局、行業(yè)政策及需求規(guī)模預(yù)測(cè)報(bào)告
- 《應(yīng)收培訓(xùn)》課件
- 國(guó)土空間生態(tài)修復(fù)規(guī)劃
- 2024年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論