Advanced LabVIEW Programming Tips and Techniques-高級(jí)編程技巧(清華大學(xué)內(nèi)部資料)_第1頁(yè)
Advanced LabVIEW Programming Tips and Techniques-高級(jí)編程技巧(清華大學(xué)內(nèi)部資料)_第2頁(yè)
Advanced LabVIEW Programming Tips and Techniques-高級(jí)編程技巧(清華大學(xué)內(nèi)部資料)_第3頁(yè)
Advanced LabVIEW Programming Tips and Techniques-高級(jí)編程技巧(清華大學(xué)內(nèi)部資料)_第4頁(yè)
Advanced LabVIEW Programming Tips and Techniques-高級(jí)編程技巧(清華大學(xué)內(nèi)部資料)_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、LabVIEW 高級(jí)編程技巧內(nèi)容概要National Instruments 公司簡(jiǎn)介L(zhǎng)abVIEW 高級(jí)編程技巧用戶定義的調(diào)試指示器定時(shí)循環(huán)基于事件觸發(fā)的編程改善VI的性能調(diào)用動(dòng)態(tài)鏈接庫(kù)National Instruments: 虛擬儀器倡導(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ò)25,000個(gè)客戶分布在多達(dá)80個(gè)國(guó)家 財(cái)富500強(qiáng)中95的制造型企業(yè)1. 調(diào)試指示器靈活的調(diào)試工具,可詳細(xì)顯示數(shù)據(jù)線上通過(guò)的數(shù)據(jù)指示器的操作可以表達(dá) VI 的靈活性和強(qiáng)大功能傳統(tǒng)的調(diào)試指

2、示器存在一些缺點(diǎn),如只能顯示數(shù)組中的一個(gè)元素用戶定義的調(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)建的定制指示器在數(shù)據(jù)連線上點(diǎn)擊鼠標(biāo)右鍵菜單顯示所有相關(guān)的指示器指示器存放在目錄 vi.lib_probesdefault下Keep graphics below the text and to the right客戶指示器的結(jié)構(gòu)包含一個(gè)控件控件的數(shù)據(jù)類型就是所指示的數(shù)據(jù)線包含一個(gè)指示器Boolean, 類似條件斷點(diǎn)True = 暫停執(zhí)行False =

3、繼續(xù)執(zhí)行Keep graphics below the text and to the right2. 定時(shí)循環(huán)精確的定時(shí) while 循環(huán)多個(gè)時(shí)鐘頻率的定時(shí)反響, 動(dòng)態(tài)定時(shí)特性多達(dá)128個(gè)循環(huán)優(yōu)先級(jí)examplesgeneral定時(shí)循環(huán)的配置定時(shí)循環(huán)3. 基于事件的編程管理用戶界面,通常采用的方法有中斷響應(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 返回菜單的 refn

4、umVirtual Instrument事件類型 Application 事件舉例:退出應(yīng)用程序超時(shí)Control事件舉例:關(guān)閉前面板VI 上的鼠標(biāo)移動(dòng)事件舉例:改變控件數(shù)值特定控件上的鼠標(biāo)移動(dòng)通知事件和可濾除事件通知事件通知 LabVIEW 發(fā)生了一個(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)的組成局部Event Selector

5、Label 確定觀察的事件Timeout 等待事件的毫秒數(shù); 缺省值 1 (無(wú)限期)Defaulted Tunnels 新型tunnel, 允許未連線的事件案例提供缺省值Dynamic Event Terminals 用于動(dòng)態(tài)事件的注冊(cè)事件結(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)的根本使用通常在 While 循環(huán)中使用每次循環(huán)只處理一次事件,其它時(shí)間休眠在事件結(jié)構(gòu)的左側(cè)邊框端口上可獲得事件數(shù)據(jù)事

6、件結(jié)構(gòu)的配置通過(guò)對(duì)話框來(lái)配置事件,右擊事件結(jié)構(gòu)的邊框 ,選擇 “Edit Events Handled by This Case事件注冊(cè)和面板鎖定包含事件結(jié)構(gòu)的 VI 被預(yù)留以后,事件就成為已注冊(cè)的 已注冊(cè)事件發(fā)生后, 會(huì)進(jìn)入隊(duì)列等待直到相應(yīng)的事件結(jié)構(gòu)開始執(zhí)行,事件不會(huì)喪失也不會(huì)出現(xiàn)順序混亂默認(rèn)情況下, 前面板被鎖定直到事件被處理完可以關(guān)閉鎖定,但只針對(duì)過(guò)濾事件VI 變成空閑后,事件被注銷3.1 動(dòng)態(tài)事件以下情況時(shí),需要?jiǎng)討B(tài)注冊(cè)事件:事件注冊(cè)只能發(fā)生在應(yīng)用程序的某些局部在程序運(yùn)行過(guò)程中需要改變哪些 VIs 或控件可以發(fā)生事件在 subVI 中處理事件,而不是僅在注冊(cè)事件的 VI 中動(dòng)態(tài)事件Re

7、gister For EventsEvent StructureUnregister For EventsCreate User EventGenerate User EventDestroy User Event編程模型注冊(cè)事件連接到事件結(jié)構(gòu)選擇動(dòng)態(tài)事件注銷事件3.2 程序產(chǎn)生的 (用戶) 事件Register For EventsEvent StructureUnregister For EventsCreate User EventGenerate User EventDestroy User Event用戶事件編程模型創(chuàng)立并注冊(cè)用戶事件產(chǎn)生用戶事件注銷用戶事件消滅用戶事件用戶事件舉例3

8、.3 ActiveX 事件Register Event CallbackActiveX 編程模型注冊(cè)ActiveX 事件選擇事件創(chuàng)立和編輯Callback VI總結(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 開銷減少 I/O 調(diào)用的次數(shù)減少開啟和關(guān)閉資源的次數(shù)減少屏幕更新4.1 改進(jìn)內(nèi)存使用 LabVIEW 處理了大局部?jī)?nèi)存管理的細(xì)節(jié)資源分配, 復(fù)制, 釋放, 溢出減少程序框圖的大小提高可讀性和穩(wěn)定

9、性內(nèi)存管理自動(dòng)進(jìn)行,你不需要過(guò)多的干預(yù)理解 LabVIEW 是何時(shí)并如何為你“代勞內(nèi)存管理的可以大大提高 對(duì)內(nèi)存使用的效率VI 在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)Front PanelBlock DiagramCode框圖編譯成機(jī)器碼Data Space Control/indicator 數(shù)值Block diagram 常量動(dòng)態(tài)定義的數(shù)據(jù)FrontPanelBlockDiagramCodeDataSpaceVI 何時(shí)加載到內(nèi)存中始終載入 data 平臺(tái)符合時(shí)載入Code (Mac OS, Windows, Sun, Linux)Panel 和 Diagram 在必要時(shí)載入 (recompiling)Main

10、 VISubVIAlways in memoryResident sometimesFrontPanelBlockDiagramCodeDataSpaceFrontPanelBlockDiagramCodeDataSpace內(nèi)存使用情況Tools Advanced Profile VIs勾選 “Profile Memory Usage & “Memory Usage在執(zhí)行應(yīng)用程序之前點(diǎn)擊“Start 狀態(tài)只在程序執(zhí)行完成后更新程序執(zhí)行過(guò)程中內(nèi)存使用情況不能被查看監(jiān)測(cè)內(nèi)存使用顯示內(nèi)存分配File Tools Advanced Show Buffer Allocations內(nèi)存優(yōu)化LabVIEW

11、盡量減少內(nèi)存再分配需要重新分配內(nèi)存的函數(shù)Build ArrayConcatenate StringsHigh Memory Reallocation Low Memory Reallocation最正確內(nèi)存使用盡量使用 subVIs不要濫用全局和局部變量只在必要時(shí)翻開 subVI 前面板高效地創(chuàng)立和處理數(shù)組不使用大的、復(fù)雜的數(shù)據(jù)類型coercion dots構(gòu)建和處理數(shù)組使用具有 inplaceness 特點(diǎn)的數(shù)組函數(shù) Inplaceness 是指函數(shù) in place 操作數(shù)據(jù),而不會(huì)另外建立一個(gè)數(shù)據(jù)備份。Reuses BuffersMay Allocate New BuffersAlloc

12、ates New Buffers子數(shù)組LabVIEW 盡可能的重用內(nèi)存緩沖子數(shù)組不存儲(chǔ)實(shí)際的數(shù)據(jù)子數(shù)組在必要時(shí)會(huì)生成真實(shí)的數(shù)組由于子數(shù)組不要對(duì)數(shù)據(jù)進(jìn)行拷貝,因此提高了程序的執(zhí)行速度子數(shù)組子數(shù)組函數(shù)返回一個(gè) 7499x2 的子數(shù)組這個(gè)例子程序需要執(zhí)行2秒鐘2 GHz Pentium 4子數(shù)組在函數(shù) Array Subset之前引線執(zhí)行只需5毫秒子數(shù)組到真實(shí)數(shù)組的生成發(fā)生在循環(huán)之前4.2 減少 I/O 開銷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)Fas

13、t Method(One I/O call)減少開啟和關(guān)閉資源Slow MethodFast Method使用底層 VIs 來(lái)減少開啟和關(guān)閉資源的次數(shù) Slow Method中,文件被翻開和關(guān)閉100次Fast Method中,文件只翻開和關(guān)閉1次保持資源的翻開狀態(tài)使用底層的文件翻開和關(guān)閉函數(shù)連接文件讀寫函數(shù)open,read / write的引用 提高讀速度 操作系統(tǒng)不需檢查權(quán)限、分配新的文件描述符等 提高寫文件的速度 允許操作系統(tǒng)緩沖寫操作標(biāo)準(zhǔn)化LabVIEW 以“大字端形式讀寫數(shù)據(jù)X86 機(jī)器采用“小字端形式存儲(chǔ)數(shù)據(jù)選擇不需要轉(zhuǎn)換的數(shù)據(jù)類型如:U8, I8, String (data),

14、 SGL, DBL可以編程轉(zhuǎn)換Flatten to stringType castManual code4.3 減少屏幕顯示的更新使用高效的 controls 和 indicatorsGraphs 和 charts 在接收新數(shù)據(jù)的時(shí)候會(huì)重新畫圖,從而影響執(zhí)行速度設(shè)計(jì)subVI 的前面板在執(zhí)行中保持關(guān)閉來(lái)減少顯示開銷使用多點(diǎn)更新的畫圖方法最小化 chart 更新的次數(shù)獲得最高的數(shù)據(jù)顯示速率屏幕顯示實(shí)例Slow Method(每次更新一點(diǎn))Fast Method(每次更新100點(diǎn))減少循環(huán)中不必要的計(jì)算防止將產(chǎn)生相同結(jié)果的運(yùn)算放在循環(huán)內(nèi)防止在循環(huán)中不必要的訪問(wèn)全局變量減少 SubVI 開銷每個(gè)su

15、bVI 都會(huì)有一些開銷 (大概幾十微秒); 雖然看起來(lái)不大,但如果是在一個(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)會(huì)引起線程間的交換,從而降低效率如果只是為了更新控件的值,不要使用屬性節(jié)點(diǎn)如果同時(shí)改變其它屬性,更新數(shù)值不會(huì)造成更大損失,因?yàn)榫€程交換已經(jīng)發(fā)生了更新前面板控件GoodBetterBest創(chuàng)立高效的平行框圖L

16、abVIEW 周期性地在平行循環(huán)間切換使用 Wait (ms) function 確保不太重要的循環(huán)占用較少的處理器時(shí)間5. 共享庫(kù)函數(shù)What?Windows 中的 .dll, UNIX/Linux 中的 .so, 等等Why?降低磁盤空間和內(nèi)存占用How?應(yīng)用程序只在需要的時(shí)候調(diào)用庫(kù)函數(shù)程序開始執(zhí)行以后,由運(yùn)行鏈接編輯器來(lái)處理所有調(diào)用 動(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)用時(shí)才被加載和鏈接一個(gè) DLL 包括:一個(gè)特殊

17、函數(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ǔ)言編寫的,也不需要清楚這些功能是如何實(shí)現(xiàn)的。DLL就像一個(gè)有輸出函數(shù)的黑盒子LabVIEW 中調(diào)用 Shared Library/DLLAdvanced Call Library Function Node右擊 Call Library Function Node,選擇 Configure 來(lái)調(diào)用DLL中的特定函數(shù)Call Library Function 的配置指定需調(diào)用的

18、 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ù)組句柄字符串CPascalG (LabVIEW)Adapt to TypeDLL 實(shí)例: MessageBoxA 函數(shù)回傳類型函數(shù)名int MessageBoxA (hWnd, lpText, lpCaption, uType)參數(shù)參

19、數(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)試 Call Library Function如果 VI不執(zhí)行或者導(dǎo)致死機(jī), 檢查以下可能:DLL的路徑名是否正確如果錯(cuò)誤信息是 function not found in library, 檢查函數(shù)名的拼寫、語(yǔ)法和大小寫傳遞給 DLL函數(shù)的所有參數(shù)都有數(shù)據(jù)線連接到 Call Library Function 圖標(biāo)的輸入端口上. 檢查數(shù)據(jù)類型和參數(shù)順序使用了正確的調(diào)用規(guī)那么: C 或者缺省(stdcall);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論