![用VB實現(xiàn)實時數(shù)據(jù)采集_第1頁](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6461.gif)
![用VB實現(xiàn)實時數(shù)據(jù)采集_第2頁](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6462.gif)
![用VB實現(xiàn)實時數(shù)據(jù)采集_第3頁](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6463.gif)
![用VB實現(xiàn)實時數(shù)據(jù)采集_第4頁](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6464.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、用VB實現(xiàn)高精度實時數(shù)據(jù)采集發(fā)布時間:2006.08.15 22:49 來源:plwww 作者:Visual Basic (以下簡稱VB)是Windows環(huán)境下簡單、易學(xué)的可視化編程語言開發(fā)系統(tǒng),以 其所見即所得的可視化界面設(shè)計風(fēng)格和面向?qū)ο蟮某绦蛟O(shè)計等特點,已廣泛地應(yīng)用于各個領(lǐng) 域。采用VB開發(fā)數(shù)據(jù)采集和工業(yè)控制應(yīng)用軟件十分方便,尤其軟件界面設(shè)計非常便捷,編程 工作量較小,開發(fā)周期短,特別適合非計算機專業(yè)的工程技術(shù)人員掌握和使用。但VB有自身 的不足,不能直接訪問機器的底層硬件。在控制系統(tǒng)中對計算機的底層硬件進行訪問以及利 用各種數(shù)模轉(zhuǎn)換接口板進行數(shù)據(jù)采集和控制等方面,僅靠VB是無法實現(xiàn)的。
2、為此,VB提供 了調(diào)用動態(tài)鏈接庫DLL(Dynamic Link Library)的接口,可以通過Visual C+ (以下簡稱 VC)提供的訪問機器底層硬件I/O接口的函數(shù)實現(xiàn)DLL,完成各種控制系統(tǒng)。由于直接訪問 機器底層硬件I/O接口的函數(shù)只適用于Windows 9x(95、98、Me)系統(tǒng),所以采用本方法開 發(fā)的應(yīng)用程序只能在Windows 9x操作系統(tǒng)下運行。本方法已應(yīng)用在兩個微機實時數(shù)據(jù)采集系 統(tǒng)項目中,取得了較好的效果。動態(tài)鏈接庫(DLL)的編寫動態(tài)鏈接庫雖然是一個可執(zhí)行模塊,但它并不能直接運行,它只是提供一組函數(shù)供Windows 應(yīng)用程序或其他動態(tài)鏈接庫調(diào)用,以完成其特殊任務(wù)。
3、動態(tài)鏈接庫只有在被調(diào)用了它的某個 函數(shù)以后才發(fā)生作用。Windows 9x下VB編寫的程序是32位的,因此編寫供VB調(diào)用的動態(tài) 鏈接庫也應(yīng)是32位的。一個32位的動態(tài)鏈接庫應(yīng)包括兩個基本部分:其一是DllMain函數(shù),它是Win32 DLL的入口和出口點。在每次裝入或卸載DLL時,Windows 9x調(diào)用該函數(shù),主要用來完成一些初始化任務(wù),或在DLL卸載之前,Windows調(diào)用該函數(shù)做 一些必要的釋放資源等清除工作。其二是自己的功能函數(shù)。每一個供VB調(diào)用的功能函數(shù)必須在模塊定義文件(*.DEF)中輸出 或直接在函數(shù)定義處輸出。供VB調(diào)用的DLL功能函數(shù)與普通DLL功能函數(shù)相比有一個重要的 不同
4、之處,就是函數(shù)必須定義成WINAPI類型,即函數(shù)定義采用如下格式: WINAPI函數(shù)名(函數(shù)參數(shù)表);下面的DLL例子定義了兩個讀寫I/O端口的函數(shù)供VB使用, 使得VB能夠訪問硬件I/O端口:/ DLL 源文件 VBIO.CPP#include #include /功能函數(shù)1: I/O端口輸出int FAR WINAPI outport (unsigned short port) return (_inp(prot);/功能函數(shù)2: I/O端口輸入int FAR WINAPI inport (unsigned short port, int databyte) return (_outp (
5、port, databyte);/ DLL入/出口函數(shù)BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) switch( ul_reason_for_call ) case DLL_PROCESS_ATTACH: break;case DLL_PROCESS_DETACH: break;return TRUE;/模塊定義文件VBIO.DEFCODE PRELOAD MOVEABLE DISCARDABLEDATA PRELOAD SINGLEEXPORTS inport outpo
6、rtDLL函數(shù)或過程必須在全局模塊(*.BAS)中正確說明才有效。必須使用Declare語句把一個 DLL函數(shù)引入VB中,它告訴VB在哪里找到DLL函數(shù),并且讓VB知道DLL函數(shù)的參數(shù)類型和 返回值類型。當(dāng)某個DLL函數(shù)用Declare語句正確聲明以后,就可以像使用其他VB函數(shù)一樣 使用這個DLL函數(shù)。VB聲明DLL函數(shù)的格式如下:聲明過程的格式為:Public | Private Declare Sub name Lib “l(fā)ibname” Alias “aliasname” (arglist)聲明函數(shù)的格式為:Public | Private Declare Function name L
7、ib “l(fā)ibname” Alias “aliasname” (arglist)As type其中name是DLL函數(shù)或過程的名字,libname是動態(tài)鏈接庫DLL的文件名,aliasname是DLL 函數(shù)的別名,arglist是參數(shù)表,type是DLL函數(shù)的返回類型。對于函數(shù)調(diào)用參數(shù)的聲明要 注意:非指針類參數(shù)采用傳值方式(ByVal)聲明,指針類參數(shù)采用引用方式(ByRef)聲明。要注意的是VB的數(shù)據(jù)類型與VC的數(shù)據(jù)類型有些差別,在聲明DLL函數(shù)時要特別注意參數(shù)的 數(shù)據(jù)類型應(yīng)匹配,否則返回的結(jié)果會是錯誤的。使用上面的DLL函數(shù)(假設(shè)DLL文件名為VBIO.DLL)的VB聲明如下:Decla
8、re Function inport Lib “vbio.d11” (ByVal prot As Integer) As LongDeclare Function outport Lib “vbio.d11” (ByVal port As Integer, ByVal databyte As Long) As Long這樣,在VB中就可以像使用標(biāo)準(zhǔn)VB函數(shù)一樣使用inport和outport函數(shù)了。實現(xiàn)高精度實時數(shù)據(jù)采集對于實時數(shù)據(jù)采集,要求在一定的時間間隔內(nèi)周期性地讀取數(shù)模轉(zhuǎn)換接口板的數(shù)據(jù),這就要 用到系統(tǒng)定時器。為了提高定時器采集效率,定時器的編程也應(yīng)使用VC在動態(tài)鏈接庫DLL 中實現(xiàn)。在
9、Windows系統(tǒng)中,基于WM_TIMER消息的定時器是低精度的,它最小可以精確到 54.9毫秒,大約每秒18.2次,并且WM_TIMER消息的優(yōu)先級比較低,它可能造成WM_TIMER 消息的延遲,從而丟失數(shù)模轉(zhuǎn)換接口板中的數(shù)據(jù)。從精度和優(yōu)先級考慮,高精度實時數(shù)據(jù)采 集不能使用該定時器完成任務(wù),應(yīng)使用Windows多媒體服務(wù)中提供的多媒體定時器。多媒體 定時器的精度非常高,能精確到毫秒級,而且優(yōu)先級也很高,基本上沒有延遲,非常適合高 精度實時數(shù)據(jù)采集使用。使用多媒體定時器應(yīng)遵循以下3個步驟:確定最大和最小周期可以用timeGetDevCaps函數(shù)確定多媒體定時器服務(wù)提供的最大和最小定時器事件周
10、期,這些 數(shù)值對不同的計算機是不同的,也與Windows運行方式有關(guān)。建立最小定時器精度在啟動定時器事件前,應(yīng)用程序必須建立想要使用的最小定時器精度,在定時器服務(wù)事件結(jié) 束之后,還必須清除該精度。(上接第C20版)最小定時器精度可以根據(jù)第一步返回的結(jié)果確定??梢允褂?timeBeginPeriod和timeEndPeriod函數(shù)來設(shè)置和清除最小定時器精度,每個 timeBeginPeriod調(diào)用都必須有一個timeEndPeriod與之對應(yīng),而且兩個函數(shù)必須指定相同 的最小精度。啟動定時器事件與該步驟相關(guān)的兩個函數(shù)為timeSetEvent和timeKillEvent,詳細(xì)細(xì)節(jié)可以查閱MSDN
11、中這 兩個函數(shù)的定義。有三個要注意的地方:一是一旦啟動定時器就一定不要忘記把它關(guān)閉,因 為小于100毫秒的定時器對CPU的消耗是非常大的,而且下次啟動定時器會造成多個定時器 同時運行,使得數(shù)據(jù)采集的結(jié)果是錯誤的;二是在timeSetEvent調(diào)用中設(shè)置定時器回調(diào)函數(shù) 時要遵循其規(guī)則,即回調(diào)函數(shù)的定義要嚴(yán)格遵照MSDN中的格式,而且在回調(diào)函數(shù)中除了PostMessage、 timeGetSystemTime、 timeGetTime、 timeSetEvent、 timeKillEvent、 midiOutShortMsg、midiOutLongMsg、OutputDebugString 幾個函數(shù)外,不能調(diào)用其他 Windows API函數(shù),否則易造成系統(tǒng)出錯甚至崩潰;三是回調(diào)函數(shù)應(yīng)編寫得短小精悍,因為定時器事 件發(fā)生的周期非常短,程序很長會造成延時,影響數(shù)據(jù)采集的實時性。結(jié)束語以上介紹了編寫適
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)借款合同書
- 二零二五年度爆破拆除施工現(xiàn)場管理包清工施工合同
- 債務(wù)擔(dān)保合同
- 二手房買賣合同標(biāo)準(zhǔn)
- 建筑工程水電消防安裝合同
- 企業(yè)向個人租賃車輛協(xié)議書
- 建設(shè)工程監(jiān)理合同書
- 合同合同終止協(xié)議書
- 建筑施工分包合同
- 湖北健康職業(yè)學(xué)院《史學(xué)論文寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 2022注冊電氣工程師專業(yè)考試規(guī)范清單匯總
- 一年級寫字下學(xué)期課件(PPT 38頁)
- 怎樣處理課堂突發(fā)事件
- 桂花-作文ppt-PPT課件(共14張)
- 高一數(shù)學(xué)概率部分知識點總結(jié)及典型例題解析 新課標(biāo) 人教版 必修
- 鐵路運費計算方法
- 《小腦梗死護理查房》
- 免疫及炎癥相關(guān)信號通路
- 某風(fēng)電場設(shè)備材料設(shè)備清單
- —橋梁專業(yè)施工圖設(shè)計審查要(終)
- 德龍自卸車合格證掃描件(原圖)
評論
0/150
提交評論