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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論