labwindows使用基礎(chǔ)教程.doc_第1頁
labwindows使用基礎(chǔ)教程.doc_第2頁
labwindows使用基礎(chǔ)教程.doc_第3頁
labwindows使用基礎(chǔ)教程.doc_第4頁
labwindows使用基礎(chǔ)教程.doc_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

LabWindows/CVI基礎(chǔ)教程1 LabWindows/CVI是National Instruments公司推出的一套面向測控領(lǐng)域的軟件開發(fā)平臺.它以ANSI C為核心,將功能強大,使用靈活的C語言平臺與數(shù)據(jù)采集,分析和表達(dá)的測控專業(yè)工具有機地接和起來.它的集成化開發(fā)平臺,交互式編程方法,豐富的控件和庫函數(shù)大大增強了C語言的功能,為熟悉C語言的開發(fā)人員建立檢測系統(tǒng),自動測量環(huán)境,數(shù)據(jù)采集系統(tǒng),過程監(jiān)控系統(tǒng)等提供了一個理想的軟件開發(fā)環(huán)境. 本教程面向的是那些從未使用過LabWindows/CVI的讀者,但是假設(shè)讀者以有了C語言的基礎(chǔ)并且熟悉Windows 2000/9x/NT操作系統(tǒng).在每一章節(jié)的學(xué)習(xí)中,作者都是通過一個具體的實例讓讀者迅速的掌握本章的知識點;而不是長篇大論,述及邊枝細(xì)葉,反而使讀者望而卻步,只見樹木,不見森林. 想信通過對本教程的學(xué)習(xí),讀者可迅速掌握LabWindows/CVI編程思想及步驟,為讀者日后進(jìn)一步學(xué)習(xí)打下基礎(chǔ). 本書約定: FilePage SetupOptions File 這一種黑色斜體字是指多級菜單名,按扭名,窗口名或者是關(guān)鍵性詞匯. 是指打開一個多級菜單或?qū)υ捒?如:FilePage SetupOptions是指你首先打開File 菜單,然后選擇Page Setup項,最后從彈出的對話框中選擇Options項. 說明:通過這種方式你可以修改Panel 頂端所顯示的名字. 該種字體所寫的文字是值得讀者注意并記憶的內(nèi)容. 該橢圓形框所框住的內(nèi)容是讀者需修改的地方. 第一部分 CVI快速入門 本部分通過編制一個簡單的LabWindows/CVI程序,使讀者對CVI編程環(huán)境,思想及步驟有一初步的認(rèn)識. 第一章 初步認(rèn)識CVI程序設(shè)計 從一個例子開始 我們的第一個示例將很簡單,我們所要做的是創(chuàng)建一個如下的圖形用戶界面(User Interface). 當(dāng)我們按下Acquire按扭,計算機會自動產(chǎn)生一個正弦波形并畫在圖形顯示區(qū)中;當(dāng)按下Clear按扭后則清除正弦波形;當(dāng)按下Quit按扭后退出該程序. 現(xiàn)在我們就開使創(chuàng)建該程序.首先按下面步驟起動CVI: 開始程序National Instrument CVICVI IDE 或者直接從桌面起動CVI 的快捷方式,雙擊桌面 National Instrument CVI 圖標(biāo) 當(dāng)LabWindows/CVI打開后你就會見到如下所示的一個空的項目(Project)窗: 第一步:創(chuàng)建用戶界面 創(chuàng)建控件元素: 從Project窗中選擇:FileNewUser Interface(*.uir)創(chuàng)建一個用戶接口文件(*.uir),CVI會自動彈出如下所示的窗口: 在該窗中Untitled Panel 的灰色區(qū)域中單擊鼠標(biāo)右鍵,變會彈出一個快捷菜單如下所示: 從該菜單中選擇:Command ButtonSquare Command Button 點擊左鍵后便會創(chuàng)建一個方形的按扭. 由于本程序總共需要三個按扭,所以按照上面的步驟再創(chuàng)建兩個方形按扭.從該菜單中選擇:GraphGraph ,創(chuàng)建一個用于圖形顯示的Graph. 現(xiàn)在我們已經(jīng)建好了用戶界面所需的控件元素,請使用鼠標(biāo)把它們拖到如下圖所示的位置. 修改用戶界面中各控件元素的屬性: 修改Panel的屬性: 在Untitled Panel中雙擊一下,便會彈出Panel的一個Edit Panel窗,如下圖所示: 將Panel Title項中的Untitled Panel 改為 Demo Panel. 說明:通過這種方式你可以修改Panel 頂端所顯示的名字. 將Auto-Center Vertically(when loaded)項 與Auto-Center Horizontally(when loaded)項前的矩形框選中. 說明:當(dāng)選中后,程序運行時,面板會自動居中. 修改后的Edit Panel 應(yīng)如下圖所示: 點擊OK按扭,完成對Panel屬性的修改. 修改Graph的屬性: 在Untitled Control的藍(lán)色區(qū)域中雙擊一下,便會彈出Graph的一個Edit Graph窗,如下圖所示: 將Label項中的Untitled Control改為ShowWave. 說明:通過這種方法可以修改Graph的標(biāo)簽名. 點擊OK按扭,完成對Graph屬性的修改. 3.修改Command按扭的屬性: (1)Acquire 按扭: 雙擊左上方的OK按扭,便會彈出Command的一個Edit Command窗,如下圖所示: 將Constant Name項改為ACQUIRE 說明:Constant Name是程序中用來標(biāo)識該控件元素的常量,在后面的編程中會用到. 將Callback Function項改為AcquireCallback 說明:Callback Function(回調(diào)函數(shù))是程序中用來響應(yīng)界面中的Windows消息, 也就是說:當(dāng) 該按扭被點擊之后,程序會調(diào)用AcquireCallback函數(shù)來作為 對按扭被按下這一消息的響應(yīng). 將Label項改為 Acquire 說明:通過這種方法可以修改按扭名字,Acquire中A字母前有下畫線,是指可 以通過 Alt + A即可達(dá)到按下該按扭的效果(即熱鍵). 修改后的Edit Command Button窗應(yīng)如下圖所示: 點擊OK按扭,完成對Command Button屬性的修改. (2)Clear 按扭: 與以上步驟相同,雙擊左下方的OK按扭,彈出Command的一個Edit Command窗. 將其Constant Name改為CLEAR 將Callback Function項改為ClearCallback 將Label項改為 Clear 修改后的Edit Command Button窗應(yīng)如下圖所示: 點擊OK按扭,完成Command Button屬性的修改. (3)Quit 按扭: 與以上步驟相同,雙擊右方的OK按扭,彈出Command的一個Edit Command窗. a. 將其Constant Name改為QUIT b. 將Callback Function項改為QuitCallback c. 將Label項改為 Quit 修改后的Edit Command Button窗應(yīng)如下圖所示: 點擊OK按扭,完成Command Button屬性的修改. 當(dāng)完成以上工作后,Panel應(yīng)該如下圖所示: 選擇:FileSave 保存UIR文件,命名為FirstSample.uir. 到目前為止我們已經(jīng)完成了用戶界面(user interface)的設(shè)計,當(dāng)程序運行時所顯示的界面就是我們剛才上圖看到的那樣. 下面我們要做的就是真正的程序編制工作,其實CVI可以自動生成許多的代碼以及缺省消息的處理函數(shù),你只需添加一些你自己所需的一些代碼. 第二步:完成程序的編制 產(chǎn)生程序代碼: 現(xiàn)在請你讓圖形用戶界面窗口為當(dāng)前響應(yīng)狀態(tài),如下圖所示: 從用戶圖形界面窗口中選擇:CodeGenerateAll Code 然后會顯示出如下的界面: 請用你的鼠標(biāo)點擊Select QuituserInterface Callback 中的QuitCallk項,確保其前面出現(xiàn)一個小鉤. 說明:1.當(dāng)你想讓你的程序的主函數(shù)為Win Main而不是Main時你可以選擇 Generate WinMian( ) instead of Main( )項前的矩形框. 2.Select panels to load and display at startup 項是指你選擇那一個Panel作為最初 裝入并顯示的Panel,當(dāng)你創(chuàng)建多個Panel時你就需要選擇一個Panel作為最初顯 示的面板.由于本程序只有一個Panel所以該Panel就被缺省的作為最初顯示 的面板而不再需要你去選擇. 3.Select QuituserInterface Callback 項是指你選擇那一個函數(shù)作為退出程序的終 止函數(shù).本程序是讓QuitCallback作為退出函數(shù)的. 點擊OK按扭,便會彈出如下圖所示的源代碼(Code)窗: 其窗中的程序代碼如下所示: #include #include #include FirstSample.h static int panelHandle; int main (int argc, char *argv ) if (InitCVIRTE (0, argv, 0) = 0) return -1; /* out of memory */ if (panelHandle = LoadPanel (0, FirstSample.uir, PANEL) Advanced Analysis 在彈出的對話框中選擇: Signal GenerationSine Pattern 便會彈出如下圖所示的一個函數(shù)面板: 請在Number of Elements項中填上512;把Number of Cycles 項改為3;Sine Pattern 項中填上用來裝正弦信號的數(shù)組Wave,由于Wave是一個數(shù)組變量,故我門需要聲明該變量: 選擇CodeDeclare Variable會彈出一個如下圖所示的對話框: 請在Number of Elements 項中填上512,并選擇了最下面的矩形框, 然后點擊OK按扭完成. 返回到函數(shù)面板后,選擇CodeInsert Function Call完成函數(shù)的插入,這時Code 窗中的AcquireCallback( )函數(shù)應(yīng)如下所示: int CVICALLBACK AcquireCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) double Wave512; switch (event) case EVENT_COMMIT: SinePattern (512, 1.0, 0.0, 3.0, Wave); break; return 0; 我們已經(jīng)的得到了正弦信號,現(xiàn)在需要將該信號畫到Graph上去: 1).請將鼠標(biāo)放在SinePattern( )函數(shù)下面的空白行上,如上面所示那樣. . 請選擇: LibraryUser Interface 在彈出的對話框中選擇: Controls/Graph/Strip ChartGraph and Strip ChartGraph Plotting and DeletingPlot Waveform 把函數(shù)面板中的對應(yīng)各項填寫成如下所示: PanelHandle: panelHandele Control ID : PANEL_GRAPH Y Array: Wave Number of Points: 512 選擇CodeInsert Function Call完成函數(shù)的插入,這時Code 窗中的AcquireCallback( )函數(shù)應(yīng)如下所示: CVICALLBACK AcquireCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) double Wave512; switch (event) case EVENT_COMMIT: SinePattern (512, 1.0, 0.0, 3.0, Wave); PlotWaveform (panelHandle, PANEL_GRAPH, Wave, 512, VAL_DOUBLE, 1.0, 0.0, 0.0, 1.0, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); break; return 0; 到現(xiàn)在為止我們已經(jīng)完成了AcquireCallback( )函數(shù)的的程序代碼. 添加ClearCallback( )函數(shù)的程序代碼: ClearCallback( )函數(shù)完成以下功能:當(dāng)Clear按扭按下后,計算機會清除Graph上所畫的正弦圖形. 現(xiàn)在請將鼠標(biāo)放在ClearCallback( )函數(shù)Event_Commit: 下面的空白行上,如下圖所示: 請選擇: LibraryUser Interface 在彈出的對話框中選擇: Control/Graph/Strip ChartGraph and Strip ChartGraph Plotting and DeletingDelete Graph Plot 把函數(shù)面板中的對應(yīng)各項填寫成如下所示: PanelHandle: panelHandele Control ID : PANEL_GRAPH PlotHandle: -1 選擇CodeInsert Function Call完成函數(shù)的插入,這時Code 窗中的ClearCallback( )函數(shù)應(yīng)如下所示: int CVICALLBACK ClearCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) switch (event) case EVENT_COMMIT: DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW); break; return 0; 到目前為止我們已經(jīng)完成了程序的編制任務(wù).這一個看起來不算簡單的程序,我們編起來并沒有寫多少源代碼,這正是體現(xiàn)了LabWindows/CVI的強大功能所在. 第四步 運行程序完成項目文件 現(xiàn)在請你讓源代碼(Code)窗為當(dāng)前響應(yīng)狀態(tài),選擇: RunDebug FirstSample_dbg.exe 便會彈出一個對話框,詢問你是否在編譯前為該文件命名并添加到工程文件中去.點擊yes按扭,把該文件命名為FirstSample.c.然后計算機詢問你是否把 analysis.h包含到FirstSample.c中去(因為,我們的程序中用到了高級分析庫),點擊yes按扭,同意該選項. 運行后的程序正如我們預(yù)期要求的那樣.退出程序后,從源代碼(Code)窗中選擇: WindowProject 現(xiàn)在項目 (Project)窗為當(dāng)前響應(yīng)狀態(tài),請選擇: EditAdd Files to ProjectAll Files(*.*) 便會彈出如下圖所示的對話框: 請你按住鍵,點擊FirstSample.h ,FirstSample.c , FirstSample.uir.然后點擊Add按扭把這些文件方到Selected Files框中. 點擊OK按扭,把以上文件添加到工程文件中去. 至此為止我們已經(jīng)完成了第一個程序的編制工作,想必大家對 LabWindows/CVI編程已經(jīng)有了一個初步的了解,頭腦里已建起程序編制的基本框架. 通過本部分的學(xué)習(xí),你是否已經(jīng)掌握 LabWindows/CVI 程序編制的基本步驟. 簡單的用戶圖形界面(*.uir)的創(chuàng)建. 能使用函數(shù)面板完成函數(shù)的插入,構(gòu)建源代碼程序. 項目工程文件的基本構(gòu)成. 第二部分 CVI環(huán)境下程序設(shè)計 通過編制第一章的FirstSample程序,讀者已對LabWindows/CVI編程有一定了解.本部分就是在第一部分的基礎(chǔ)上進(jìn)一步講述LabWindows/CVI程序設(shè)計及其編程環(huán)境等細(xì)節(jié)問題.這一章所講內(nèi)容請大家都務(wù)必動手實際操作一下,只有這樣才能使你真正的掌握本章的內(nèi)容.看完本章后請大家結(jié)合第一章把FirstSample重新編制一遍,以鞏固本章所講的加速LabWindows/CVI編程的技巧. 第二章 LabWindows/CVI 程序剖析 通過例程FirstSample的編制,大家已對LabWindows/CVI編程有了初步的認(rèn)識.本章是作者從總體上來談?wù)勛约簩abWindows/CVI程序的理解與認(rèn)識. LabWindos/CVI 編程的步驟基本如下: 制定程序設(shè)計的基本方案 第一步 根據(jù)任務(wù)確定程序的基本框架如: 程序界面,程序中所需的函數(shù)等. 創(chuàng)建用戶圖形界面 第二步 根據(jù)第一步制定的方案 創(chuàng)建用戶圖形界面及回 調(diào)函數(shù)名. 程序源代碼的編制 第三步 讓計算機生成程序代碼及回調(diào)函數(shù) 的基本框架.添加函數(shù)代碼,完成 源代碼的編制工作. 工程項目的完成 第四步 編譯,調(diào)試程序.把頭文件,用戶圖 形界面文件,源代碼文件添加到項目 文件中去,完成整個程序的編制 程序框架及文件間的相互關(guān)系如下圖所示(以FirstSample.prj為例): 項目工程文件 (FirstSample.prj) 用戶圖形界面文件 源代碼文件 頭文件 (FirstSample.uir) (FirstSample.c) (FirstSample.h) panel include FirstSample.h 定義了程序中所需的常 事件消息 量以及函數(shù)原形. Acquire按扭 AcquireCallback( ) 事件消息 Wave512 Clear按扭 ClearCallback( ) 事件消息 Quit按扭 QuitCallback( ) ShowWave 上圖所畫的構(gòu)成一項目工程文件的各文件之間的關(guān)系是非常重要的.如果你能理解上圖所示的內(nèi)容,那么你就基本理解了LabWindos/CVI 程序的運作過程. 請讀者仔細(xì)閱讀以上內(nèi)容并理解,這些都有助于讀者從整體上去把握LabWindows/CVI 程序設(shè)計的核心思想,有益于讀者進(jìn)一步學(xué)習(xí)LabWindows/CVI. 第三章 LabWindows/CVI 編程環(huán)境 LabWindows/CVI開發(fā)環(huán)境有以下三個最主要的窗(window)與函數(shù)面板(Function Panel): 項目工程窗(Project Window) 用戶接口編輯窗(User Interface Editor window) 源代碼窗(Source window) 下面就會對以上三個窗及函數(shù)面板作詳細(xì)的介紹. 項目工程窗(Project Window) 一個項目工程窗(Project Window)如下圖所示: 在項目工程窗中列出了組成該項目工程所有的文件,項目工程窗中的個菜單項功能如下: File : 創(chuàng)建,保存或打開文件.可以打開以下文件:項目工程文 件(*.Prj)源代碼文件(*.c),頭文件(*.h)以及用戶接口 文件(*.uir). Edit: 在項目工程中添加或移去文件. Build: 使用LabWindows/CVI 編譯鏈接器. Run: 運行一個項目工程. Windows: 用來訪問某個已經(jīng)打開的窗,例如:用戶接口編輯窗, 源代碼窗 . Tools: 運行向?qū)?wizard)或者你添加到Tools菜單中的一些 工具. Options: 設(shè)置LabWindows/CVI 的編程環(huán)境. Help: LabWindows/CVI 在線幫助及Windows SDK 的函數(shù)幫 助. 工程項目文件顯示了所列文件的狀態(tài),其各項的含義如下圖所示: 文件名 這個標(biāo)志是指源代碼 最后修改該文件 文件是否是打開的 的日期時間 S是指該文件已經(jīng)修 C是指運行該文件之 O是指你可以讓該文件 I是指這是一個 改過了,請保存該文件 前必須先經(jīng)過編譯 編譯而無需debugging 儀器驅(qū)動程序 如果你想進(jìn)一步了解項目工程窗(Project window)細(xì)節(jié)請使用在線幫助. 請選擇:HelpCVI LibraryRelated HelpOnline Manuals For LabWindows/CVI 請查閱 LabWindows/CVI User Manual Chapter 3 Project window. 第二節(jié) 用戶接口編輯窗(User Interface Edit window) 圖形用戶接口編輯窗是用來創(chuàng)建,編輯GUI(Graph Uer Interface)的.一個用戶接口至少要有一個面板(Panel)以及在面板上的各種控件元素(Control Element).圖形用戶接口編輯窗為你提供了非??旖莸膭?chuàng)建,編輯這些面板和控件元素的方法,可以讓你在短時間里創(chuàng)建出符合你要求的圖形界面. 一個圖形用戶接口編輯窗就如下圖所示,下面我們就詳細(xì)講講圖形用戶接口編輯窗各菜單項的功能: File: 創(chuàng)建,保存或打開文件. Edit: 可用來編輯面板或控件元素. 說明:其實我們直接用鼠標(biāo)雙擊我們想要編輯對象即可(就象編制中修改面板和四個按扭那樣). Creat: 可用來創(chuàng)建面板和各種控件元素. 說明:其實我們只需在 Panel上點擊鼠標(biāo)右鍵,便會彈出一個快捷菜單,選擇 你所想創(chuàng)建的對象即可(就象編制FisrtSample 時創(chuàng)建Graph和四個Button 那樣). View: 當(dāng)創(chuàng)建多個面板后就可用該項來查看想要看的面板. Arrange: 用來調(diào)節(jié)各個控件元素的位置與大小. Code: 產(chǎn)生源代碼,以及選擇你所需的事件消息類型. Run: 運行程序. Library: 函數(shù)庫. 說明:我們將在后面詳細(xì)的介紹LabWindows/CVI的函數(shù)庫. Tools: 一些你可使用的工具項. Windows: 用來訪問某個已經(jīng)打開的窗,例如:項目工程窗,用戶 接口編輯窗,源代碼窗 . Options: 設(shè)置用接口編輯窗的編輯環(huán)境. Help: LabWindows/CVI 在線幫助及Windows SDK 的函數(shù)幫 助. 說明:在用戶接口編輯窗中有一快捷菜單是非常有用的,當(dāng)你把鼠標(biāo)指在某一控 件元素上點擊右鍵后便彈出一快捷菜單,通過該菜單你可以生成回調(diào)函數(shù) 以及查看回調(diào)函數(shù),而無須你再切換到源代碼窗后再查看.這是一個大家 以后在編程中要常用到的技巧,請掌握. 圖形用戶接口編輯窗中還有四個模式選擇按扭,現(xiàn)介紹如下: 當(dāng)該按扭被按下后,你可以操作面板上的控件,同時在圖形用戶接口編輯窗的右上角上來觀察面板上的事件消息. 在這種模式下你可以創(chuàng)建,編輯面板和控件元素以及修改它們的屬性. 在這種模式下你可以直接修改控件元素的名字,標(biāo)簽等文字相關(guān)方面的東西. 在這種模式下你可以直接修改面板,控件元素的顏色.先把鼠標(biāo)方在你所想修改顏色的對象上,點擊右鍵便會彈出一個 選色對話框,選擇你所想要的顏色后點擊后即可. 在圖形用戶接口編輯窗中Panel 的灰色區(qū)域中單擊鼠標(biāo)右鍵,便會彈出一個快捷菜單如下所示: 說明:請讀者用鼠標(biāo)點擊各項自己看一看,在這里就無須作者多言. 如果你想進(jìn)一步了解用戶接口編輯窗(User Interface Edit window)細(xì)節(jié)請使用在線幫助. 請選擇:HelpCVI LibraryRelated HelpOnline Manuals For LabWindows/CVI 請查閱 LabWindows/CVI User Manual Chapter 4 User Interface Edit window 源代碼編輯窗(Sourse window) 你可以在源代碼編輯窗中開發(fā)你的C 語言代碼文件.例如:添加,刪除,插入函數(shù)等編程所需的基本編輯操作.但是LabWindows/CVI 又有其獨特的簡捷快速的開發(fā),編輯工具,可以讓你在短時間內(nèi)完成一個較復(fù)雜的C程序代碼的開發(fā). 一個源代碼編輯窗(Source window)就如下圖所示,下面我們就詳細(xì)講講源代碼編輯窗中各菜單項的功能: File: 創(chuàng)建,保存或打開文件. Edit: 可用來編輯源代碼文件. View: 設(shè)置源代碼編輯窗的風(fēng)格等功能. Build: 編譯文件以及編譯設(shè)置. Run: 運行程序. Instrument: 裝入儀器驅(qū)動程序. Library: 函數(shù)庫. Tools: 一些你可使用的工具項. Windows: 用來訪問某個已經(jīng)打開的窗,例如:項目工程窗,用接 口編輯窗,源代碼窗 . Options: 設(shè)置用接口編輯窗的編輯環(huán)境. Help: LabWindows/CVI 在線幫助及Windows SDK 的函數(shù)幫 助. 說明:在編程中有一快捷菜單是非常有用的,當(dāng)你把鼠標(biāo)指在某一函數(shù)上點擊右鍵后便彈出一快捷菜單,通過該菜單你可以查看回調(diào)函數(shù)以及與該函數(shù)對應(yīng)控件元素.這是一個大家以后在編程中要常用到的技巧,請掌握. 第四節(jié) 函數(shù)面板(Fuction Panel) 在LabWindows/CVI 編程環(huán)境下,當(dāng)你想在源程序某處插入函數(shù)時,你只需從函數(shù)所在的庫中選擇該函數(shù)后便會彈出一個與之對應(yīng)的函數(shù)面板,你所做的就是:填入該函數(shù)所需的參數(shù)后完成插入即可.而且更為方便的是:若參數(shù)是一你以有的常量或變量,你只需點擊常量或變量工具按扭后選擇你所需的量即可;若參數(shù)是一變量,你直接可聲明該變量而無須再切換至源代碼窗. 下面我們就談?wù)勥@些在LabWindows/CVI中可以加快你編程的技巧. 一個函數(shù)面板如下圖所示: 這是FirstSample中產(chǎn)生一個正弦波的函數(shù)其中SinePattern項是用來裝正弦波的數(shù)組,我們在程序中使用數(shù)組Wave512 來裝正弦波的.當(dāng)我們在SinePattern項填入Wave后,由于Wave是一變量,所以我們需要聲明該變量:讓鼠標(biāo)指在Wave上然后點擊工具條中的聲明變量按扭 后, 便彈出一個聲明變量對話框即可聲明該變量為局域變量或為全局變量.當(dāng)你所填參數(shù)是一以有的常量或變量,你只需點擊選擇常量或變量工具按扭后選擇你所需的量即可,下面就介紹該技巧: 上圖是FirstSample中把數(shù)組Wave中的正弦波畫到Graph上去的PlotWaveform函數(shù).其中,Control ID 項所填的是程序中用來標(biāo)識GUI中控件元素的常量,該常量是由LabWindows/CVI自動在頭文件中預(yù)定義的(你可以打開頭文件看看).故當(dāng)我們填入該常量時只需將鼠標(biāo)放在Control ID項的文本框中然后用鼠標(biāo)點擊工具條中的選擇屬性或UIR常量按扭 后, 便彈出一個選擇屬性或UIR常量對話框,選擇你所需的常量或?qū)傩约纯?Panel Handle 是程序運行開始時UIR的句柄,是由LabWindows/CVI 自動生成的是一變量;Number of Points 項需填的是512,這正是我們在聲明Wave時已用過的;Y Array 項所填的是我們已經(jīng)聲明過的變量 數(shù)組Wave;故當(dāng)我們填入以上各項時只需將鼠標(biāo)放在對應(yīng)項下文本框中,然后用鼠標(biāo)點擊工具條中的選擇變量按扭 后, 便彈出一個選擇變量對話框,選擇你所需的變量Wave即可. 當(dāng)你填完函數(shù)的參數(shù)后,點擊插入按扭后即可完成函數(shù)的插入,而無須再選擇菜單中的插入命令. 以上這些都是加快你編程的技巧,這些技巧你以后編程時是會非常頻繁使用的.而這些也正是LabWindows/CVI 開發(fā)環(huán)境所獨具的加快你編程速度的特色. 說明:當(dāng)你的鼠標(biāo)落在工具條按扭上時,計算機會自動的顯示該工具按扭的功能. 請你使用上面所講技巧重新編制FirstSample,我相信你將會有新的收獲. 當(dāng)你對函數(shù)中的某個參數(shù)有不明白的時候,你只須將鼠標(biāo)置于該項的文本框中點擊鼠標(biāo)右鍵后便會出現(xiàn)對此參數(shù)說明的在線幫助,這一技巧在編程中是非常有幫助的. 如果你想進(jìn)一步了函數(shù)面板(Function Panel )細(xì)節(jié)請使用在線幫助. 請選擇:HelpCVI LibraryRelated HelpOnline Manuals For LabWindows/CVI 請查閱 LabWindows/CVI User Manual Chapter 6 Using Function Panels 第四章 LabWindows/CVI 的函數(shù)庫(Library) LabWindows/CVI 其強大功能的所在就是基于其非常豐富的庫函數(shù).LabWindows/CVI 所提供的庫函數(shù)從用戶圖形界面,數(shù)據(jù)采集,數(shù)據(jù)分析,儀器控制 到現(xiàn)在Internet時代的TCP.所以說LabWindows/CVI 在測量領(lǐng)域成為先鋒的同時又與當(dāng)前時代的新科技保持了同步. 下面我們就來談?wù)凩abWindows/CVI 的函數(shù)庫,我們把LabWindows/CVI 的函數(shù)庫分為了五個大的方面,各個方面又分成了不同的小類: 數(shù)據(jù)采集方面(Data Acquisition),7個庫: Instrument Library: 儀器驅(qū)動庫 GPIB/GPIB 488.2 Library: 儀器控制函數(shù)庫 Data Acquisition Library: 數(shù)據(jù)采集函數(shù)庫 Easy I/O for DAQ : 易用的數(shù)據(jù)采集函數(shù)庫 RS 232 Library : RS 232 庫 VISA Library : VISA 庫 VXI Library : VXI庫 數(shù)據(jù)分析方面,兩個庫: Formatting and I/O Library : 格式化以及輸入輸出庫 Analysis Library: 分析庫 或者Advanced Analysis Library: 高級分析庫 數(shù)據(jù)顯示方面: User Interface Library : 用戶接口庫 說明: 用戶接口庫中提供了許多用于與面板上各種控件元素打交道的函數(shù),通 過這些函數(shù)你可以非常容易的把一個采集來的波形畫到Panel 的Graph 上或刪除Graph 上已畫的圖形;得到Panel上某個控件元素的數(shù)值以及 把某個數(shù)值寫到Panel上的某個控件元素上去(亦就是改變該控件元素的 值);修該Panel上控件元素的屬性.總之,你只有熟練掌握了用戶接口 庫函數(shù)后才能使你創(chuàng)建的用戶圖形界面正正的動起來,該庫是初學(xué)者應(yīng)迅 速熟悉的庫. 網(wǎng)絡(luò),通信與數(shù)據(jù)交換方面,四個庫: DDE Library : 動態(tài)數(shù)據(jù)交換庫 TCP Library: TCP庫 Active X Automation Library: Active X自動化庫 DataSocket Library: DataSocket庫 其它方面: ANSI C Library: 標(biāo)準(zhǔn)C 庫 如果你想進(jìn)一步了解LabWindows/CVI 函數(shù)庫(Library)細(xì)節(jié)請使用在線幫助. 請選擇:HelpCVI Library Library Help中你感興趣的庫 通過本部分的學(xué)習(xí),你是否已經(jīng)掌握 LabWindows/CVI 程序設(shè)計步驟及程序的運行機制. 三個主要窗的基本操作. 在用戶接口編輯窗中用快捷方式生成或查看回調(diào)函數(shù),在源代碼窗中用快捷方式返回到函數(shù)面板或?qū)?yīng)控件元素等編程中所需的快捷操作. 在函數(shù)面板上聲明變量,選擇變量或常量,插入函數(shù)等快捷操作. LabWindows/CVI 庫的構(gòu)成及其在編程中適用的方向. 第四部分 CVI 中數(shù)據(jù)采集的應(yīng)用 通過前兩部分的學(xué)習(xí),讀者應(yīng)該已掌握了LabWindows/CVI程序設(shè)計的基本步驟,思路以及編程環(huán)境.本部分將在前兩部分的基礎(chǔ)上講解LabWindows/CVI中的數(shù)據(jù)采集,并在講解的過程中編制一個程序:EeasyIOSample .請讀者確保自己已經(jīng)安裝了Daq驅(qū)動,否則你會找不到例子中要用到的函數(shù). Easy IO 庫中數(shù)采函數(shù)的應(yīng)用 本章我們將使用Easy IO 庫中的數(shù)采函數(shù)來編制一個真正能用于實際工作中的數(shù)據(jù)采集程序 EasyIOSample. 我們程序運行時的界面如下圖所示: 其中各控件元素的功能說明如下: ChannelSrting 項是一字符串控件,我們通過該項來設(shè)置采集數(shù)據(jù)的 通道(數(shù)采路徑).我們把該項缺省設(shè)置為:daq:1!(0) 其意思是指:采集設(shè)備(device)1的0通道(channel). 其中設(shè)備號正是你在Measurement &Automation 中所 看到的對應(yīng)于數(shù)采板的編號.在數(shù)采停止時,該項是 可以修改的.daq:1!(0) 這段字符串是NI 數(shù)采通道的 語法表示,具體說明如下: daq:1!(0,2,5) 是指采集設(shè) 備1的通道0,2,5.daq:1!(2:6)是指采集設(shè)備1的通 道2,3,4,5,6. ScanRate項是一數(shù)字控件,我們通過該項來設(shè)置掃描速率,其缺省 設(shè)置為1000 Acquire/Stop項是一開關(guān)控件,我們通過該開關(guān)來控制數(shù)據(jù)采集的開 始與停止. Clear項是一按扭,當(dāng)我們按下該按扭后即可清除Acquire Wave上所 畫的波形. Quit項是一按扭,當(dāng)我們按下該按扭后,退出程序. Acquire Wave項是一波形顯示控件,我們所采集的數(shù)據(jù)正是通過該 控件來顯示的. 現(xiàn)在我們就開使創(chuàng)建該程序.首先按下面步驟起動CVI: 開始程序National Instrument CVICVI IDE 或者直接從桌面起動CVI 的快捷方式,雙擊桌面 National Instrument CVI 圖標(biāo) 當(dāng)LabWindows/CVI打開后你就會見到如下所示的項目(Project)窗,里面裝的正是我們上次創(chuàng)建的FirstSample.prj: 選擇:FileNewProject(*.prj) 便會彈出一個對話框,如下所示: 詢問你是否移走當(dāng)前的項目工程,點擊OK按扭,確定移走后又會彈出一個對話框如下所示: 詢問你轉(zhuǎn)移該項目的選項,全選之后點擊OK按扭后,便會彈出一個新的項目工程窗. 第一節(jié) 創(chuàng)建圖形用戶界面 從Project窗中選擇:FileNewUser Interface(*.uir)創(chuàng)建一個用戶圖形接口文件(*.uir). 下圖就是本程序應(yīng)該創(chuàng)建的UIR界面: 請按下面步驟創(chuàng)建下列控件元素以及修改其屬性: 創(chuàng)建一個string ,修改其屬性如下圖所示: 創(chuàng)建一個Numeric, 修改其屬性如下圖所示: 創(chuàng)建一個BinarySwitch, 修改其屬性如下圖所示: 創(chuàng)建一個Timer控件, 修改其屬性如下圖所示: 請你確保Control Settings中Enable項前的矩形框是空的,因為我們將AI Timer的初始狀態(tài)設(shè)置為非運行狀態(tài). 說明:Timer控件是一我們在編程時常用到的控件,當(dāng)程序運行時圖形用戶界面上是看 不到Timer控件的.當(dāng)你設(shè)置Timer有回調(diào)函數(shù)時,計算機會每隔固定的時間調(diào) 用一次Timer的回調(diào)函數(shù).該時間間隔你是可以在Edit Timer 窗中Contro Settings 的Inteval(seconds)項中設(shè)定的.本程序設(shè)定時間間隔為0.1秒,也就是說:當(dāng)程 序運行時,每隔0.1 秒AITimerCallback( )函數(shù)就會被調(diào)用一次. 創(chuàng)建一個Graph控件, 修改其屬性如下圖所示: 創(chuàng)建兩個Command控件, 修改它們屬性分別如下兩圖所示: 最后修改Panel的屬性如下圖所示: 創(chuàng)建好各控件元素后,將它們按下圖所示排放好各自的位置: 說明:由于程序運行時,AI Timer 控件并不在界面中顯示,故AI Timer的位置你可以隨 意放置. 選擇:FileSave 保存UIR文件,命名為EasyIOSample.uir. 第二節(jié) 產(chǎn)生程序代碼與添加函數(shù)代碼 從用戶圖形界面窗口中選擇:CodeGenerateAll Code 產(chǎn)生源程序框架. 其源程序代碼中需要你注意的如下:當(dāng)某一行字符是藍(lán)色時是指該行代碼是需要我們添加上去的.為了作者講解函數(shù)功用的方便,作者按照順序把插入的函數(shù)編了號,標(biāo)注在該函數(shù)的頂頭. #include #include #include #include EasyIOSample.h static int panelHandle; static long AiTask; int main (int argc, char *argv) if (InitCVIRTE (0, argv, 0) = 0) return -1; /* out of memory */ if (panelHandle = LoadPanel (0, EasyIOSample.uir, PANEL) User InterfaceControls/Graph/Strip ChartGeneral FunctionsGet Control Value. GetCtrlVal (panelHandle, PANEL_CHANNEL_STRING, ChanString) 使用該函數(shù)我們可以得到字符串ChannelString的值(請在該函數(shù)面板中聲明局部字符串變量ChanString).插入該函數(shù)時請選擇:LibraryUser Interface Controls/Graph/Strip ChartGeneral FunctionsGet Control Value. GetCtrlVal (panelHandle, PANEL_SCANRATE, &ScanRate) 使用該函數(shù)我 們可以得到數(shù)字量ScanRate的值(請在該函數(shù)面板中聲明局部雙精度變量ScanRate).插入該函數(shù)時請選擇:LibraryUser Interface Controls/Graph/Strip ChartGeneral FunctionsGet Control Value. nidaqAICreateTask (ChanString, kNidaqWaveformCapture, &NumChan, &AiTask) 使用該函數(shù)我們可以創(chuàng)建一個模入采樣任務(wù)AITask(請在該函數(shù)面板中聲明全局整型變量AITask), 同時該函數(shù)根據(jù)ChanString可以返回一個表示該采樣任務(wù)共有多少個通道的值NumChan(請在該函數(shù)面板中聲明局部整型變量NumChan).插入該函數(shù)時請選擇:LibraryEasyIO For DAQAnalog Input Intermediate Analog InputAI Creat Task(Required). nidaqAIConfigScanClockRate (AiTask, ScanRate, &ActScanRate) 使用該函數(shù)我們可以設(shè)置采樣的掃描速度ScanRate并且通過 ActScanRate返回采樣的實際掃描速度(請在該函數(shù)面板中聲明局部雙精度變量ActScanRate).插入該函數(shù)時請選擇:LibraryEasyIO For DAQAnalog Input Intermediate Analog InputAI Config TimingAI Config Scan Clock Rate nidaqAIConfigBuffer (AiTask, 2000000, kNidaqContinuous) 使用該函數(shù)我們可以設(shè)置采樣緩沖為2M(即2000000).插入該函數(shù)時請選擇:LibraryEasyIO For DAQAnalog Input Intermediate Analog InputAI Config Buffer nidaqAIStart(AiTask)使用該函數(shù)我們可以啟動數(shù)據(jù)采集任務(wù).插入該函數(shù)時請選擇:LibraryEasyIO For DAQAnalog Input Intermediate Analog InputAI Start (Required) SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED, 1) 我們在UIR 中將AI Timer的屬性設(shè)置為非運行狀態(tài),現(xiàn)在通過該函數(shù)將AI Timer 屬性設(shè)置為 Enable 即從現(xiàn)在開始AI Timer 開始運行,每隔固定的時間間隔調(diào)用一次AITimerCallBack( )函數(shù).插入該函數(shù)時請選擇:LibraryUser Interface Controls/Graph/Strip ChartGeneral FunctionsSet Control Attribute. SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED, 0) 使用該函數(shù)我們可以讓控件AI Timer停止工作.插入該函數(shù)時請選擇:LibraryUser Interface Controls/Graph/Strip ChartGeneral FunctionsSet Control Attribute. nidaqAIStop (AiTask) 使用該函數(shù)我們可以停止采樣任務(wù).插入該函數(shù)時請選擇:LibraryEasyIO For DAQAnalog Input Intermediate Analog InputAI Stop (Required) nidaqAIDestroyTa

溫馨提示

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

最新文檔

評論

0/150

提交評論