![LabWindowsCVI入門之第三章:計算機外設開發(fā)_第1頁](http://file4.renrendoc.com/view/7c3b403f360e6f001505335d54d4044a/7c3b403f360e6f001505335d54d4044a1.gif)
![LabWindowsCVI入門之第三章:計算機外設開發(fā)_第2頁](http://file4.renrendoc.com/view/7c3b403f360e6f001505335d54d4044a/7c3b403f360e6f001505335d54d4044a2.gif)
![LabWindowsCVI入門之第三章:計算機外設開發(fā)_第3頁](http://file4.renrendoc.com/view/7c3b403f360e6f001505335d54d4044a/7c3b403f360e6f001505335d54d4044a3.gif)
![LabWindowsCVI入門之第三章:計算機外設開發(fā)_第4頁](http://file4.renrendoc.com/view/7c3b403f360e6f001505335d54d4044a/7c3b403f360e6f001505335d54d4044a4.gif)
![LabWindowsCVI入門之第三章:計算機外設開發(fā)_第5頁](http://file4.renrendoc.com/view/7c3b403f360e6f001505335d54d4044a/7c3b403f360e6f001505335d54d4044a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、LabWindows/CVI入門之第三章:計算機外設開發(fā)通過上一章節(jié)的學習,大家已經(jīng)掌握了在CVI下開發(fā)GUI應用程序的基本步驟和基本方法。CVI的重要應用是工業(yè)接口通信、復雜的數(shù)據(jù)采集和儀器控制系統(tǒng)的開發(fā),所以對于學習CVI來說僅僅掌握GUI程序的開發(fā)還遠遠不夠。實際生產(chǎn)生活中,有些設備要求能夠滿足軍用或工業(yè)領(lǐng)域惡劣環(huán)境或極端天氣下對于可靠性的要求,有些設備要求能夠滿足快速大容量數(shù)據(jù)的持續(xù)傳輸?shù)囊?,有些設備要求能夠滿足防塵防水防暴防震防撬的要求,有些設備要求滿足低成本的要求,紛繁的要求導致了不同的接口標準以及接口協(xié)議的誕生。僅僅掌握了CVI下GUI的編程只能說是對CVI入門,卻沒有充分的體
2、會到CVI的精華。在紛繁的接口與個性化的需求下,開發(fā)簡捷高效、穩(wěn)定易用、用戶體驗良好的程序才是我們學習CVI的終極目標。3.1 計算機組件編程在本節(jié)中,我們將會接觸到在CVI下進行文件操作、音頻播放、OpenGL操作、SQL數(shù)據(jù)庫查詢、剪貼板操作、動態(tài)數(shù)據(jù)交換、ActiveX控件操作、調(diào)用.Net操作等相關(guān)內(nèi)容。在介紹相關(guān)內(nèi)容時,我們只介紹原理與CVI對應的函數(shù)功能,具體使用方法需要大家查詢CVI的幫助文檔。3.1.1 在CVI中進行文件操作在程序運行時,常常需要將一些數(shù)據(jù)(運行的最終結(jié)果或中間數(shù)據(jù))輸出到磁盤上存放起來,以后需要時再從磁盤中輸入到計算機內(nèi)存。這樣就需要對文件進行讀寫操作,La
3、bWindows/CVI中對文件讀寫操作的常用函數(shù)如下:(1) OpenFile 打開一個文件用以讀或者寫,函數(shù)返回文件句柄;(2) CloseFile 關(guān)閉指定的文件;(3) ReadFile 從文件中讀取指定字節(jié)數(shù)的內(nèi)容到字符串緩沖區(qū);(4) WriteFile 將字符串緩沖區(qū)中指定字節(jié)數(shù)的內(nèi)容寫到文件中;(5) ArrayToFile 將數(shù)組內(nèi)容保存到文件中;(6) FileToArray 從文件中讀取數(shù)據(jù)存儲到數(shù)組中。(7) ReadLine 從文件讀取字節(jié)直到換行。(8) WriteLine 將緩沖區(qū)中指定的字節(jié)數(shù)寫入文件中,同時換行。(9) DeleteFile 刪除文件(10)
4、RenameFile 重命名文件(11) CopyFile 復制文件下面給出了一個簡單的新建test.txt文件,并且向文本文件中寫入字符并讀出來的例子。該函數(shù)運行之后,將在工程文件夾下新建一test.txt的文本文件,文件內(nèi)容如圖 31所示。程序運行結(jié)果如圖 32所示。圖31 文本文件內(nèi)容圖32 程序運行結(jié)果與文件讀寫有關(guān)的函數(shù)可以在Formatting and I/O Library的File I/O中找到,與文件操作有關(guān)的函數(shù)可以在Utility Library的File Utilities中找到,與文件夾有關(guān)的函數(shù)可以在Utility Library的Directory Utiliti
5、es中找到。另外,ANSI C中對文件的操作的函數(shù)如fopen、fread、fputs等函數(shù)在CVI中仍然可以使用。3.1.2網(wǎng)絡通信:在CVI中調(diào)用TCP庫在測控領(lǐng)域,隨著網(wǎng)絡計算、遠程監(jiān)控與遠程診斷等在儀器儀表領(lǐng)域的應用與發(fā)展,網(wǎng)絡通信已經(jīng)成為儀器的基本功能。CVI也提供了Internet庫、TCP庫、DataSocket庫以供用戶使用。Internet庫主要提供了FTP協(xié)議、Telnet協(xié)議以及POP3協(xié)議的客戶端的函數(shù)支持。TCP庫主要提供了基于TCP協(xié)議的網(wǎng)絡數(shù)據(jù)收發(fā)函數(shù)。DataSocket庫提供了比TCP更加方便有效的NI推出的DataSocket的操作函數(shù)。在本小節(jié)的介紹之前,
6、我們假設大家已經(jīng)知道了TCP/IP協(xié)議、FTP協(xié)議、POP3協(xié)議、HTTP協(xié)議、Telnet協(xié)議以及他們之間的相互關(guān)系,知道了IP地址、子網(wǎng)掩碼、DNS、網(wǎng)關(guān)是什么。若對以上問題有含糊之處,建議立即通過Google等手段理解這些概念。本節(jié)主要介紹TCP通信的相關(guān)內(nèi)容。利用TCP函數(shù)庫進行網(wǎng)絡傳輸都要涉及服務器端和客戶端。TCP服務器可以通過網(wǎng)絡向用戶應用程序發(fā)送數(shù)據(jù)和從客戶應用程序接收數(shù)據(jù)。TCP客戶可以向TCP服務應用程序發(fā)送連接請求,并從服務器接收數(shù)據(jù)和向服務器發(fā)送數(shù)據(jù)。服務器需要注冊,注冊以后等待客戶向它發(fā)送連接請求,而客戶只能向已經(jīng)存在的服務器發(fā)送連接請求。運行TCP服務器應用程序的計
7、算機一般叫做主機。服務器端的傳輸控制函數(shù)如下:(1) RegisterTCPServer 注冊TCP服務器(2) ServerTCPRead 從客戶端讀取數(shù)據(jù)(3) ServerTCPWrite 向客戶端發(fā)送數(shù)據(jù)(4) UnregisterTCPServer 注銷TCP服務器(5) DisconnectTCPClient 斷開與客戶端的連接要是程序成為TCP服務器,必須要運行RegisterTCPServer函數(shù)。客戶端的傳輸控制函數(shù)如下:(1) ConnectToTCPServer 連接到TCP服務器(2) ClientTCPServer 從服務器讀取數(shù)據(jù)(3) ClientTCPWrite
8、 向服務器寫數(shù)據(jù)(4) DisconnectFromTCPServer 斷開與TCP服務器的連接另外CVI的TCP庫還提供了TCP的回調(diào)函數(shù),并提供了連接開始(TCO_CONNECT)、斷開連接(TCP_DISCONNECT)以及數(shù)據(jù)有效(TCP_DATAREADY)3種消息。下面給出了一個簡單的建立TCP服務器,并通過客戶端連接TCP服務器的例子。在該示例程序中,TCP服務器運行后客戶端向服務器發(fā)送“Hello,Im client.”的文本信息,服務器向客戶端返回“OK”信息。TCP服務器代碼如下:TCP客戶端的代碼如下:TCP服務器與TCP客戶端的程序分別保存在兩個不同的工程中。運行時,先
9、運行TCP服務器程序,再運行TCP客戶端程序,運行效果如所示。圖 33 TCP示例程序運行結(jié)果3.1.3 網(wǎng)絡通信:在CVI中調(diào)用Internet庫Internet庫主要提供了FTP協(xié)議、Telnet協(xié)議以及POP3協(xié)議的客戶端的函數(shù)支持。FTP是應用層的協(xié)議,它基于TCP協(xié)議,負責進行文件的傳輸。CVI通過封裝隱藏了一些底層的FTP操作 ,提供了兩個方便的FTP操作函數(shù):(1) InetFTPAutoSend 將本地的文件傳輸?shù)街付ǖ倪h程服務器主機上(2) InetFTPAutoRetrieve 將指定遠程服務器上的文件傳輸?shù)奖緳C上。Telnet協(xié)議也是應用層的協(xié)議,同樣基于TCP協(xié)議,是I
10、nternet遠程登陸服務的標準協(xié)議和主要方式。CVI提供了對Telnet操作的以下函數(shù):(1) InetTelnetOpen 建立Telnet連接(2) InetTelnetRead 從Telnet服務器中讀取數(shù)據(jù)(3) InetTelnetWrite 向Telnet服務器寫數(shù)據(jù)(4) InetTelnetClose 關(guān)閉Telnet連接(5) InetTelnetReadUntil 從Telnet服務器中讀取數(shù)據(jù),直到遇到指定字符或達到指定字節(jié)數(shù)或者超時(6)InetTelnetRunScript 在Telnet服務器上執(zhí)行指定的腳本POP3也是應用層的協(xié)議,基于TCP協(xié)議,規(guī)定個人計算機
11、如何連接到互聯(lián)網(wǎng)上的郵件服務器進行收發(fā)郵件。POP3協(xié)議允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時根據(jù)客戶端的操作刪除或保存在郵件服務器上的郵件。CVI提供了對POP3操作的以下函數(shù):(1) InetPop3Open 連接POP3服務器(2) InetPop3Close 關(guān)閉與POP3服務器的連接(3) InetPop3GetNumMessages 獲取POP3服務器上的消息數(shù)量(4) InetPop3GetMessageSize 獲取POP3服務器上消息的大?。?) InetPop3GetMessageInfo 獲取POP3服務器上郵件的具體信息(6) InetPop3
12、DeleteMessage 刪除POP3服務器上的消息(7) InetPop3GetMessage 獲取POP3電子郵件消息頭與內(nèi)容(8) InetPop3ParseMessageHeader 解析POP3郵件的消息頭3.1.4 網(wǎng)絡通信:在CVI中調(diào)用DataSocket庫DataSocket技術(shù)是NI公司推出的面向測控領(lǐng)域的網(wǎng)絡通信技術(shù)。DataSocket技術(shù)基于Microsoft的COM和ActiveX技術(shù),對TCP/IP協(xié)議進行高度封裝,面向測量和自動化應用,用于共享和發(fā)布實時數(shù)據(jù)DamSockd能有效地支持本地計算機上不同應用程序?qū)μ囟〝?shù)據(jù)的同時應用,以及網(wǎng)絡和不同計算機的多個應用
13、程序之間的數(shù)據(jù)交互,實現(xiàn)跨機器、跨語言、跨進程實時數(shù)據(jù)共享。在測試測量過程中,用戶只需要知道數(shù)據(jù)源和數(shù)據(jù)庫及需要交換的數(shù)據(jù)就可以直接進行高層應用程序的開發(fā),實現(xiàn)高速數(shù)據(jù)傳輸,而不必關(guān)心 底層的實現(xiàn)細節(jié),從而簡化通信程序的編寫過程、提高編程效率。DataSocket包括DataSocket Server Manager(以下簡稱Manager),DataSocket Server和DataSocket API一部分。Manager是一個獨立運行的程序,主要功能有:設置DataSocket Server連接的客戶端程序的最大數(shù)目和創(chuàng)建數(shù)據(jù)項的最大數(shù)目:創(chuàng)建用戶組和用戶;設置用戶創(chuàng)建和讀寫數(shù)據(jù)項的權(quán)
14、限;限制身份不明的客戶對服務器進行訪問和攻擊。例如,將Manager中的Default Reader設置為everyhost,則網(wǎng)中的每臺客戶計算機都可以讀取服務器上的數(shù)據(jù)。Manager對DataSocket Server 的配置必須在本地計算機上進行,而不能遠程配置或通過運行程序來配置。DataSocket Server 是一個必須運行在服務器端的程序,負責監(jiān)管Manager中所設定的具有各種權(quán)限的用戶組和客戶端程序之間的數(shù)據(jù)交換。DataSocket Server通過內(nèi)部數(shù)據(jù)自描述格式對TCP/IP進行優(yōu)化和管理,簡化Internet通信方式,提供自由的數(shù)據(jù)傳輸,可以直接傳送虛擬儀器程序
15、所采集到的布爾型、數(shù)字型、字符串型、數(shù)組型和波形等常用類型的數(shù)據(jù)。它可以和測控應用程序安裝在同一臺計算機上,也可以分裝在不同的計算機上,以便用防火墻進行隔離來增加整個系統(tǒng)的安全性。DataSocket Server不會占用測控計算機CPU的工作時間,測控應用程序可以運行得更快。使用DataSocket技術(shù)進行通信時服務器和客戶端得計算機上筆形都進行DataSocket Server。DataSocket API提供獨立的接口,用于不同的語言平臺內(nèi)部多種數(shù)據(jù)類型的通讀。在LabVIEW中,DataSocket API被制作成ActiveX控件和一系列功能VI(Virtual Instrument
16、),用戶可以方便地使用。一般由服務器進行數(shù)據(jù)采集,根據(jù)需要將測量地數(shù)據(jù)寫入DataSocket 數(shù)據(jù)公共區(qū),然后客戶端通過網(wǎng)絡從數(shù)據(jù)公共區(qū)讀取所需地測量數(shù)據(jù)。DataSocket 庫函數(shù)介紹如下。(1) DS_Open創(chuàng)建 DataSocket 對象并連接到數(shù)據(jù)源(2) DS_DiscardObjHandle 釋放 DataSocket 句柄和它占用的相關(guān)資源(3) DS_GetDataType 獲取 DataSocket 對象的數(shù)據(jù)類型(4) DS_GetDataValue 獲取 DataSocket 對象相關(guān)的數(shù)據(jù)值(5) DS_SetDataValue 設置 DataSocket 對象相
17、關(guān)的數(shù)據(jù)值(6)DS_Update在寫連接,把 DataSocket 對象的屬性和數(shù)據(jù)寫到 DataSocket 服務器;在讀連接,從 DataSocket 服務器讀取 DataSocket 對象的屬性和數(shù)據(jù)(7) DS_SelectURL 允許終端用戶選擇連接的 DataSocket URL(8) DS_FreeMemory 釋放 DataSocket 庫函數(shù)占用的內(nèi)存(9) DS_GetLibraryErrorString 返回描述庫錯誤的字符串DataSocket是一個獨立于平臺的解決方案,限于篇幅,此處不再給出DataSocket的示例程序,感興趣的同學可以通過CVI安裝目錄下的sam
18、ples中datasocket相關(guān)部分自行學習。3.1.5在CVI中使用音頻動畫在許多測控系統(tǒng)中,常常需要加入音頻、圖像、動畫或具有互動功能的3D模型。在本節(jié)中,我們將會詳細介紹如何向應用程序中添加這些控件。圖像在程序中添加圖像相對比較簡單,CVI中直接提供了圖像控件,通過控件的幫助文檔很容易掌握在GUI中添加圖像以及通過程序更改圖像的方法。動畫動畫控件是由Picture Ring(圖像列表)控件轉(zhuǎn)化而來,在編輯界面添加PictureRing之后,通過菜單-File-Open-Function Tree(*.fp),打開CVI安裝目錄下toolslibcustctrlanimate.fp文件,
19、在CVI窗口的左下角即出現(xiàn)Animation Control的庫。庫中提供了如下四個函數(shù):(1) AnimateCtrl_Create 直接創(chuàng)建動畫控件(此函數(shù)會自動在編輯界面添加Picture Ring控件,但不會自動給Picture Ring添加圖片)(2) AnimateCtrl_ConvertFromPictRing 將Picture Ring控件轉(zhuǎn)換為動畫控件(3) AnimateCtrl_SetAttribute 設置動畫控件的屬性(4) AnimateCtrl_GetAttribute 獲取動畫控件的屬性另外在最新版的CVI中,Picture控件提供了gif的支持,用戶可以直接添
20、加gif動畫。音頻同樣CVI也提供了對音頻播放功能的支持。CVI只提供了對wav文件播放的支持,若需要支持其他格式的文件需要調(diào)用其他的dll文件完成。函數(shù)為:sndPlaySound 播放指定文件路徑的wav文件OpenGLCVI默認提供對OpenGL的支持,函數(shù)庫文件為cviogl.fp,位于CVI安裝目錄的toolslibcustctrlcviogl.fp。該函數(shù)庫文件包含了控件與作圖兩個子類的函數(shù),可以完成創(chuàng)建、更新、刪除OpenGL控件以及獲取OpenGL控件屬性等功能。尤其需要注意的是,我們不僅可以使用cviogl.fp中提供的函數(shù),OpenGL中通用的glau.lib、glu32.
21、lib、opengl32.lib庫中的所有函數(shù)都可以使用。也就是說,OpenGL強大的功能也可以在CVI環(huán)境下發(fā)揮的淋漓盡致。OpenGL本身就是一個功能強大的庫,目前很多3D游戲都是基于OpenGL設計,此處篇幅所限不再展開,感興趣的讀者可以將以前寫的OpenGL代碼移植到CVI環(huán)境下。3.1.6在CVI中使用SQL ToolKitLabWindows/CVI SQLToolkit是一個用來訪問數(shù)據(jù)庫的軟件工具包。工具包里包含了一個用來完成一般數(shù)據(jù)庫任務的高級函數(shù)集。在其基礎上,可實現(xiàn)定制任務等高級功能的開發(fā)。LabWindows/CVI SQL工具包提供若干ODBC數(shù)據(jù)庫驅(qū)動器,工具包符合
22、ODBC標準,因此對任何符合ODBC數(shù)據(jù)庫驅(qū)動器均可使用。常見的Microsoft Office Access支持的.accdb、.mdb文件都可以通過ODBC數(shù)據(jù)庫驅(qū)動器使用。SQL Toolkit并不隨CVI的安裝發(fā)行包一起安裝,用戶若想使用CVI開發(fā)數(shù)據(jù)庫需要額外從NI的官方網(wǎng)站下載:/evaluation/cvi/pc/toolkits/NILWCVISQL220.exe利用CVI SQL Toolkit進行數(shù)據(jù)庫操作通常由以下五步完成:連接數(shù)據(jù)庫-激活SQL連接-處理SQL語句-斷開SQL連接-斷開數(shù)據(jù)庫。圖 35提供了使用SQL Toolkit實現(xiàn)數(shù)據(jù)庫操作的流程圖,一般對ODBC
23、數(shù)據(jù)庫進行操作都是根據(jù)圖 35的說明依次調(diào)用內(nèi)部的函數(shù)實現(xiàn)的。連接數(shù)據(jù)庫CVI提供的連接數(shù)據(jù)庫的函數(shù)只有一個:DBConnect。DBConnect的參數(shù)為ODBC連接字符串。ODBC連接字符串可以在ODBC數(shù)據(jù)源管理器(在“開始菜單”-“程序”-“管理工具”-“數(shù)據(jù)源 (ODBC)”中打開)的系統(tǒng)DSN中添加。如圖 34所示的第一個數(shù)據(jù)庫的連接字符串應該為:DSN=CVI SQL Samples激活SQL連接CVI提供了兩種激活SQL連接的方式:自動SQL和顯式SQL。自動SQL對應圖 35的DBBeginMap及下面的系列函數(shù),只能構(gòu)造簡單的SELECT語句和CREATE TABLE語句。
24、顯式SQL對應圖 35的DBActivateSQL及下方的系列函數(shù),可以執(zhí)行更復雜的SELECT語句以及其他語句。處理SQL語句使用SELECT語句必須將選擇的字段綁定到程序中的變量上。接著用取值函數(shù)獲取所選記錄。每次調(diào)用取值函數(shù),工具包將列變量拷貝到在程序中綁定的變量。更新行或創(chuàng)建行時還可用綁定的變量,即更新行或創(chuàng)建行時將新值拷貝到綁定的變量并隨后調(diào)用適當?shù)暮瘮?shù),將程序中的數(shù)據(jù)添加到數(shù)據(jù)庫對應的字段。CVI SQL Toolkit提供了DBMapColumnTo函數(shù)以及DBBindCol函數(shù)(如圖 35),幫助用戶綁定數(shù)據(jù)庫的對應數(shù)據(jù)到變量中。斷開SQL連接SQL操作后,應該斷開SQL連接來
25、釋放系統(tǒng)資源。對于自動SQL連接,使用DBDeactivateMap函數(shù),對于顯式SQL連接,使用DBDeactivateSQL函數(shù)。斷開數(shù)據(jù)庫連接數(shù)據(jù)庫操作結(jié)束后,應該斷開數(shù)據(jù)庫連接來釋放系統(tǒng)資源。CVI提供了DEDisconnect斷開連接。具體的函數(shù)使用說明參見CVI安裝目錄中bincvisqlref.chm的幫助文件。圖34 ODBC數(shù)據(jù)源管理器圖35 CVI SQL Toolkit函數(shù)庫使用流程圖從上面的圖 35可以看出,若不需要綁定變量,則可使用DBImmediateSQL執(zhí)行一個SQL語句,更加方便快捷。下面的例子給出了從數(shù)據(jù)庫的USERS表中查找用戶ID為2的用戶名與用戶年齡的
26、完整代碼。USER表數(shù)據(jù)庫參見圖 36。其中ID為自動編號類型,UserName為文本類型,Age為數(shù)字類型。運行代碼前,需要實現(xiàn)在數(shù)據(jù)源ODBC管理器中添加數(shù)據(jù)源名為“CVI SQL Samples”的mdf文件。圖36 數(shù)據(jù)庫USERS表3.1.7在CVI中使用剪貼板與動態(tài)數(shù)據(jù)交換(DDE)剪貼板(ClipBoard)與動態(tài)數(shù)據(jù)交換(DDE,Dynamic Data Exchange)都是用于用于應用程序交換數(shù)據(jù)共享信息的工具和途徑,廣泛應用于Windows操作系統(tǒng)中。CVI對于剪貼板提供了四個函數(shù),分別提供了向剪貼板中寫入文本、圖像以及從剪貼板中讀出文本、圖像的功能。(1) Clipbo
27、ardPutText 向剪貼板拷貝文本格式的數(shù)據(jù)(2) ClipboardPutBitmap 向剪貼板拷貝位圖格式的數(shù)據(jù)(3) ClipboardGetText 從剪貼板中讀取文本格式的數(shù)據(jù)(4) ClipboardGetBitmap 從剪貼板中讀取位圖格式的數(shù)據(jù)使用DDE通訊需要兩個Windows應用程序,其中一個作為服務器處理信息,另外一個作為客戶機從服務器獲得信息??蛻魴C應用程序向當前所激活的服務器應用程序發(fā)送一條消息請求信息,服務器應用程序根據(jù)該信息作出應答,從而實現(xiàn)兩個程序之間的數(shù)據(jù)交換。DDE最早是隨著Windows3.1由微軟公司提出的,雖然目前很多軟件支持DDE,但是目前諸多公
28、司已經(jīng)停止了對DDE的支持。DDE通常用來在程序中實現(xiàn)導出數(shù)據(jù)保存為Excel或者Word中,但是CVI提供了效率更高更易用的ActiveX控件的功能,可以達到同樣的目的。3.1.8在CVI中進行ActiveX控件操作ActiveX是Microsoft對于一系列策略性面向?qū)ο蟪绦蚣夹g(shù)和工具的稱呼,其中主要的技術(shù)是組件對象模型(COM),可被其他應用程序編程驅(qū)動,實現(xiàn)特殊的程序間調(diào)用功能。COM組件(ActiveX控件)可由不同語言的開發(fā)工具開發(fā),VC、PowerBuilder等編程開發(fā)工具均可開發(fā)ActiveX控件。ActiveX在廣義上是指微軟公司的整個COM架構(gòu),但是現(xiàn)在通常用來稱呼基于標
29、準COM接口來實現(xiàn)對象連接與嵌入的ActiveX控件,常常用于在IE中增加豐富的擴展功能。而在本教程中,我們提到的ActiveX控件均指的廣義上的ActiveX控件,即基于COM模型的開發(fā)組件。點擊CVI菜單Tools-Create ActiveXController,打開創(chuàng)建ActiveX Controller Wizard,點擊Next即可發(fā)現(xiàn)有大量可供我們使用的ActiveX控件。通過添加適當?shù)腁ctiveX控件,我們不僅可以從常用的Office軟件中寫入、讀取數(shù)據(jù),操作數(shù)據(jù)庫,獲取與Matlab的接口以使用Matlab進行數(shù)據(jù)處理,還可以利用AutoCAD、QQ、IE、PowerDes
30、igner、SolidWorks等諸多領(lǐng)域主流的軟件的組件進行相關(guān)程序的編寫。限于篇幅,本節(jié)只以一個實例向大家介紹使用ActiveX控件開發(fā)應用程序的基本過程與方法。在這個實例中,我們將通過Microsoft Excel 9.0 Object Lib這個ActiveX控件打開Excel文件并向其中寫入099這100個數(shù)據(jù)并將Excel文件保存在指定位置。假設我們計算機上安裝了Office2000。單擊CVI菜單Tools-Create ActiveXController,點擊下一步,在ActiveX Server選項中找到Microsoft Excel 9.0,點擊下一步,選擇函數(shù)庫.fp文件
31、保存的位置之后,CVI即在當前工程中添加了Microsoft Excel 9.0 Object Lib的相關(guān)庫文件。若在計算機上安裝的Office版本不是2000,那也沒關(guān)系,從CVI安裝目錄中的“samplesactivexexcel”中找到excel2000.fp、excel2000.h、excel2000.obj和excel2000.sub文件,將此四個文件復制到工程目錄下,將fp文件添加到當前工程中之后同樣可以達到添加Microsoft Excel 9.0 Object Lib庫的功能。在工程的C語言文件中輸入以下代碼:上面的例子運行后,將會在系統(tǒng)的D盤根目錄下多出一份叫做123.xl
32、s的Excel文件。打開Excel文件之后,發(fā)現(xiàn)Excel中數(shù)據(jù)如所示。圖 37 ActiveX控件示例程序運行結(jié)果在上面的例子中,我們依次通過獲取Excel的程序句柄、獲取Excel的工作簿組句柄、獲取Excel的工作簿句柄、獲取Excel的工作表組句柄、獲取Excel的工作表句柄、獲取Excel第一個工作表句柄,最終獲取Excel工作表的范圍句柄。獲取了Excel工作表句柄之后便可對工作表指定區(qū)域內(nèi)的內(nèi)容進行操作了。操作結(jié)束之后,務必將獲取的句柄逐個銷毀,否則會導致系統(tǒng)資源被占用,生成的文件被占用,無法進行后續(xù)操作。利用ActiveX控件在CVI下可以實現(xiàn)諸多有用的功能,但是仍然不可避免的
33、存在有的ActiveX控件無法找到的問題。在Windows下可以“開始菜單”-“運行”中輸入regsvr32命令以注冊Active控件。詳細信息可自行通過幫助文檔或者Google查找。3.2 自動化測試接口編程3.2.1 綜述自動化測試系統(tǒng)(ATS,Automatic Test System)是指測試儀器在計算機的控制下,向被測對象按照一定的時序和順序提供激勵,同時對被測對象在該激勵下的響應進行測量的系統(tǒng)。自從20世紀70年代惠普正式推出了第一種測試總線GPIB以來,先后出現(xiàn)了GPIB、VXI、PXI以及LXI等大量測試總線。此外,在PC接口方面,PCI、ISA、RS232、USB、1394、
34、CAN等總線也得到了廣泛的發(fā)展和利用,也有不少總線如ISA總線因為帶寬難以滿足當今大部分的需求而逐漸退出歷史舞臺。GPIB總線是在美國 HP公司一種1965年推出的的儀器接口系統(tǒng) (HP-IB)發(fā)展起來的。GPIB接口具有以下基本特性:測試系統(tǒng)所使用的全部儀器和計算機均通過一組標準母線相互連接,儀器“并聯(lián)”在系統(tǒng)內(nèi)部,同時儀器之間可以直接 “通話”。 GPIB總線的母線由16條信號線構(gòu)成,其器件容量為15臺,在GPIB 系統(tǒng)中,GPIB接口共定義了10種接口功能:控者功能、講者功能、聽者功能,源方掛鉤功能、受方掛鉤功能,服務請求功能、并行查詢功能、遠程控制本功能、器件觸發(fā)功能、器件清除功能。在
35、2007年的第三季度,由測試與測量領(lǐng)導廠商發(fā)布的新型儀器中,超過80%含有GPIB接口。VXI總線(VMEbus Extensions For Instrumentation)是于 1987年推出的總線規(guī)范 ,根據(jù)器件支持的通信協(xié)議,VXI器件分成4類:消息基器件、寄存器基器件、存儲器器件、擴展器件。一個VXI機箱具有13個擴展槽 (1個系統(tǒng)槽和 12個儀器模塊槽)。PXI總線(PCI Extensions for Instrumentation)是 1997年發(fā)布的總線規(guī)范。 PXI是 PCI總線在儀器領(lǐng)域的擴展,與 CompactPCI兼容,可提供同步、觸發(fā)和時鐘等方面的信號,一個 PXI
36、機箱具有 8個擴展槽 (1個系統(tǒng)槽和7個儀器模塊槽)。LXI總線((LAN Extension for Instrument)是由國際LXI聯(lián)盟(LXI Consortium)針對GPIB傳輸速率低、VXI機箱昂貴并且需要零槽控制器、PXI尺寸電源以及EMI方面等問題而提出的一種低成本小體積的靈活的自動化測試總線技術(shù)。LXI在以太網(wǎng)的物理標準下,基于以太網(wǎng)的基礎,提供了網(wǎng)絡界面,并且具有可選擇的觸發(fā)方式(LAN,IEEE1588,Trigger Bus)。VXI、PXI、PXIe、LXI都是VME、PCI、PCIe、LAN 等PC接口在自動化測試系統(tǒng)總線領(lǐng)域的延伸。不管是VME-VXI、PCI
37、-PXI、PCIe-PXIe還是LAN-LXI,基本的物理傳輸層都沒有改變或僅加入了測試系統(tǒng)需要的時鐘同步、觸發(fā)等信號線,在上層的協(xié)議中也很少發(fā)生改變,僅某些接口的機械構(gòu)造發(fā)生了相應的改變。所以,PC上的接口驅(qū)動技術(shù)同樣可以運用到自動化測試系統(tǒng)中。世界上沒有任何一種總線是萬能的,每一種總線都具有不同的帶寬、時延、性能、軟件支持、魯棒性、體積、傳輸距離乃至成本等特性,通過了解系統(tǒng)需求選用最合適的總線技術(shù)才最重要。圖 38列出了常用的測試總線技術(shù)的帶寬與延時的性能的比較。圖38 常用測試總線技術(shù)帶寬與時延比較3.2.2 GPIB接口GPIB是一種在業(yè)界已經(jīng)得到證明的專為儀器控制應用設計的總線。GP
38、IB在過去30年來一直是魯棒的、可靠的通信總線,由于其低時延和可接受的帶寬的特點,GPIB目前仍然是儀器控制中最常見的選擇。GPIB的優(yōu)勢在于為業(yè)界廣泛采納,并有超過10,000種儀器模型帶有GPIB接口。由于其最大帶寬為1.8 MB/s,GPIB最為適合與分立儀器通信,并對分立儀器進行控制。最新的高速版HS488將帶寬提高到8 MB/s。GPIB中的數(shù)據(jù)傳遞采用基于信息的通信模式,并最常使用ASCII字符。多個GPIB儀器可以通過電纜連接,其總距為20米,帶寬為總線上的所有儀器共享。雖然GPIB的帶寬相對較低,但其時延要比USB尤其比以太網(wǎng)低得多(即性能好)。盡管GPIB有目前最好的軟件,而
39、且穩(wěn)定的線纜和連接器也能適合最惡劣的物理環(huán)境,但GPIB儀器在連接到系統(tǒng)時,并不能自動檢測或自動配置。對于現(xiàn)有儀器的自動化或要求高度專業(yè)化儀器的系統(tǒng),GPIB是理想的選擇。圖 39 GPIB接口外觀圖 310 GPIB接口引腳圖除了地線外,GPIB接口一共具有16條信號線,分別為8條信號線(D1D8)、3條掛鉤線(DAV、NRED、NDAC)以及5條管理線(ATN、IFC、REN、EOI、SRQ)。各條線纜的作用如下:(1) D1D8:8條數(shù)據(jù)線,既可做輸入又可做輸出(2) DAV(Data Valid):數(shù)據(jù)有效線,用于源方向受方發(fā)出通知可以從數(shù)據(jù)線上拉取數(shù)據(jù)(3) NRED(Not Rea
40、dy For Data):數(shù)據(jù)沒有準備好,用于受方向源方發(fā)出通知以告知源方不能在數(shù)據(jù)線上傳遞消息(4) NDAC(No Data Accepted):數(shù)據(jù)未接受:用于受方向源方通知至少還有一個器件尚未從數(shù)據(jù)線上拉取數(shù)據(jù)(5) ATN(Attention):注意線,表示數(shù)據(jù)線上的數(shù)據(jù)是由現(xiàn)在總線上的主控器件發(fā)出的(6) IFC(Interface Clear):接口清除線,用于現(xiàn)在總線上的主控器件要求其他器件的接口回到指定的初始狀態(tài)(7) REN(Remote Enable):遠控可能線,用于現(xiàn)在總線上的主控器件發(fā)送REN消息,以使得接收者進入遠地程控狀態(tài)(8) EOI(End Or Ident
41、ify):結(jié)束或識別線,用于現(xiàn)在總線上的主控器件或者源方發(fā)送END(結(jié)束)消息或者IDY(識別)消息。(9) SRQ(Service Request):服務請求線,由由服務請求的各器件共同使用,是各器件的邏輯或。CVI對GPIB提供了函數(shù)庫并提供了諸多強大的函數(shù):(1) OpenDev 尋找一個未使用的GPIB設備并打開設備(2) ibdev 打開設備同時設置GPIB參數(shù)(3) ibfind 通過設備名稱獲取設備的唯一描述符(4) Ibpad 設置GPIB板主地址(5) Ibsad 設置GPIB板輔助地址(6) Ibbna 設置訪問的GPIB板(7) Ibtmo 設置超時限制(8) Ibeos
42、 設置字符串結(jié)束標志(9) Ibeot 設置傳輸結(jié)束后是否發(fā)送消息(10) Ibdma 設置是否啟動直接內(nèi)存訪問模式(11) Ibrsc 設置GPIB請求或者放棄系統(tǒng)控制(12) Ibconfig 設置配置參數(shù)(13) Ibask 獲得配置參數(shù)(14) ibrd 從設備中讀出指定長度的數(shù)據(jù)(15) ibrda 從設備中一部讀出指定長度的數(shù)據(jù)(16) ibrdf 從設備中讀出數(shù)據(jù)并儲存在指定的文件中(17) ibwrt 向設備寫入指定長度的數(shù)據(jù)(18) ibwrta 向設備異步寫入指定長度的數(shù)據(jù)(19) ibwrtf 從指定文件中向設備寫入數(shù)據(jù)(20) ibstop 終止指定設備的異步I/O操作
43、(21) ibInstallCallback 安裝GPIB回調(diào)函數(shù)以上函數(shù)的詳細使用說明參見CVI幫助文檔,限于篇幅,此處不再做具體的示例與說明。3.2.3 RS232接口RS-232標準是美國電子工業(yè)協(xié)會(EIA)等于1969年開發(fā)并公布的通信協(xié)議,適用于傳輸速率在020kb/s的異步數(shù)據(jù)傳輸。串行接口是計算機通信必不可少的標準配置,幾乎每一臺計算機、外設、智能儀器都配有標準串行接口。采用標準串行接口后,各種計算機、外部設備、智能儀器就能有機的連接起來進行串行通信。為方便用戶進行 RS-232 編程,LabWindows/CVI 提供了RS-232函數(shù)庫。RS-232C 的機械指標規(guī)定: R
44、S-232C接口通向外部的連接器 (插針插座) 是一種 “D”型 25 針插頭。由于 25 芯中有許多是不常用的,IBM-PC 對其進行了簡化,取了其中的常用的 9 芯,構(gòu)成了 9 芯 RS-232C 串行接口,使其成為一種事實上的串行接口標準配置。RS-232C 的“D”型 9 針插頭引腳定義如圖 311所示。圖311 “D”型9針插頭引腳定義圖RS-232C 標準接口中的主要信號是“發(fā)送數(shù)據(jù)”和“接收數(shù)據(jù)” ,它們用來在兩個系統(tǒng)或設備之間傳送串行信息。對于異步通信,傳輸?shù)拇形粩?shù)據(jù)信息的單位是字符。圖 312示出了 RS-232C以位串行方式傳輸數(shù)據(jù)的格式,這是微機系統(tǒng)中最通用的格式。7
45、位 ASCII 碼數(shù)據(jù)的連續(xù)傳送由最低有效數(shù)字位開始,而以奇偶校驗位結(jié)束。應當指出,RS-232C 標準接口并不限于 ASCII 數(shù)據(jù),事實上還可有 5 到 8 個數(shù)據(jù)位,后加一奇偶校驗位,并有 1 或 2 位停止位。圖312 串行數(shù)據(jù)傳輸格式在電性能方面,這一標準使用負邏輯。邏輯 1電平是在-15V 到-5V范圍內(nèi),邏輯 0電平則在+5V到+15V范圍內(nèi)。 它要求 RS-232C接收器必須能識別低至+3V的信號作為邏輯 0,而識別高至-3V的信號作為邏輯 1,這意味著有 2V的噪聲容限。RS-232C 進行數(shù)據(jù)傳輸?shù)淖罡咚俾蕿?20KB/S,通信距離最長為 15m。作為PC上最常用的工業(yè)接口
46、之一,CVI提供的RS-232庫同樣具有強大的功能。常用的RS-232庫函數(shù)如下:(1) OpenComConfig 打開一個串行并進行相關(guān)的參數(shù)設置(2) CloseCom 關(guān)閉一個串行口(3) ComRd 從指定串行口的輸入隊列讀取若干字節(jié)的信息(4) ComRdByte 從指定串行口的輸入隊列讀取一個字節(jié)的信息(5) ComWrt 向指定串行口的輸出隊列寫若干字節(jié)的信息(6) ComWrtByte 向指定串行口的輸出隊列寫一個字節(jié)的信息(7) FlushInQ 清空指定串行口的輸入隊列(8) FlushOutQ 清空指定串行口的輸出隊列(9) GetInQLen 獲取指定串行口輸入隊列內(nèi)
47、的字符數(shù)(10) GetOutQLen 獲取指定串行口輸出隊列內(nèi)的字符數(shù)(11) InstallComCallback 為指定串行口設置一個回調(diào)函數(shù)下面即是一個向環(huán)境參數(shù)測量的單片機發(fā)送“gettemp”命令獲取當前的溫度值并且讀取返回的值的例子。編譯以上代碼,假設編譯生成的exe程序名稱為ComTest_dbg.exe,在命令行中輸入“ComTest_dbg.exe gettemp”,則程序運行結(jié)果如圖 313所示。圖313 獲取溫度值運行結(jié)果3.2.4 VXI、PXI通信(VISA)VXI、PXI作為應用最為廣泛的自動化測試總線之一,在工業(yè)及自動化測試領(lǐng)域得到了廣泛的應用。為此類設備開發(fā)驅(qū)
48、動程序可以使用微軟公司的WDM(Win32 Driver Model)模型進行開發(fā),但由于自動化測試總線的高速發(fā)展,這樣的驅(qū)動開發(fā)方法工作量相對較大且上層代碼不具備通用性,因此CVI并沒有直接提供VXI或者PXI的函數(shù)庫。VXI設備、PXI設備都遵從VPP(VXI Plug and Play)規(guī)范,其驅(qū)動程序都使用單一的標準結(jié)構(gòu)。因此,NI等公司提出來了虛擬儀器軟件架構(gòu)(VISA,Virtual Instrumentation Software Architecture)給符合VPP硬件規(guī)范的接口設備提供了軟件規(guī)范與統(tǒng)一的驅(qū)動。全世界虛擬儀器廠家以該接口軟件作為底層函數(shù)庫來開發(fā)虛擬儀器程序,可以使不同廠商的軟件在同一平臺上協(xié)調(diào)運行。這大大減少了軟件的重復開發(fā),縮短了測試應用程序的開發(fā)周期。對于驅(qū)動程序、應用程序開發(fā)者而言,VISA 庫函數(shù)是一套可方便調(diào)用的函數(shù),其中核心函數(shù)可控制各種類型設備,而不用考慮設備的接口類型。用戶可以用同一套函數(shù)為GPIB設備、VXI 設備等各種類型設備編寫軟件,不必再學習不同廠家、不同接口類型的不同 I/O接口軟件的使用方法。而且因為 VISA 可工作在各廠商的多種平臺上,可以對不同接口類型的設備調(diào)用相同的 VISA 函數(shù),用戶利用 VISA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 45185-2024眼視光產(chǎn)品成品眼鏡安全技術(shù)規(guī)范
- SMARCA2-ligand-13-生命科學試劑-MCE-7252
- Nonanoylcarnitine-C9-carnitine-生命科學試劑-MCE-3656
- CP-LC-1254-生命科學試劑-MCE-4991
- 3-Hydroxy-desalkylflurazepam-生命科學試劑-MCE-8942
- 二零二五年度瓷磚產(chǎn)品出口退稅代理服務合同
- 二零二五年度泳池水上運動項目推廣合作合同
- 二零二五年度環(huán)境污染責任賠償調(diào)解協(xié)議
- 質(zhì)量控制在提高實驗室效率中的作用
- 城市隧道工程施工質(zhì)量驗收規(guī)范
- 2025年湖南高速鐵路職業(yè)技術(shù)學院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 2025江蘇太倉水務集團招聘18人高頻重點提升(共500題)附帶答案詳解
- 2024-2025學年人教新版高二(上)英語寒假作業(yè)(五)
- 2025脫貧攻堅工作計劃
- 借款人解除合同通知書(2024年版)
- 《血小板及其功能》課件
- 江蘇省泰州市靖江市2024屆九年級下學期中考一模數(shù)學試卷(含答案)
- 沐足店長合同范例
- 《旅游資料翻譯》課件
- 《既有軌道交通盾構(gòu)隧道結(jié)構(gòu)安全保護技術(shù)規(guī)程》
評論
0/150
提交評論