![用VB實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集_第1頁(yè)](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6461.gif)
![用VB實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集_第2頁(yè)](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6462.gif)
![用VB實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集_第3頁(yè)](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6463.gif)
![用VB實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集_第4頁(yè)](http://file4.renrendoc.com/view/4a12e312fac4dbeca6636feef7bda646/4a12e312fac4dbeca6636feef7bda6464.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用VB實(shí)現(xiàn)高精度實(shí)時(shí)數(shù)據(jù)采集發(fā)布時(shí)間:2006.08.15 22:49 來(lái)源:plwww 作者:Visual Basic (以下簡(jiǎn)稱VB)是Windows環(huán)境下簡(jiǎn)單、易學(xué)的可視化編程語(yǔ)言開(kāi)發(fā)系統(tǒng),以 其所見(jiàn)即所得的可視化界面設(shè)計(jì)風(fēng)格和面向?qū)ο蟮某绦蛟O(shè)計(jì)等特點(diǎn),已廣泛地應(yīng)用于各個(gè)領(lǐng) 域。采用VB開(kāi)發(fā)數(shù)據(jù)采集和工業(yè)控制應(yīng)用軟件十分方便,尤其軟件界面設(shè)計(jì)非常便捷,編程 工作量較小,開(kāi)發(fā)周期短,特別適合非計(jì)算機(jī)專業(yè)的工程技術(shù)人員掌握和使用。但VB有自身 的不足,不能直接訪問(wèn)機(jī)器的底層硬件。在控制系統(tǒng)中對(duì)計(jì)算機(jī)的底層硬件進(jìn)行訪問(wèn)以及利 用各種數(shù)模轉(zhuǎn)換接口板進(jìn)行數(shù)據(jù)采集和控制等方面,僅靠VB是無(wú)法實(shí)現(xiàn)的。
2、為此,VB提供 了調(diào)用動(dòng)態(tài)鏈接庫(kù)DLL(Dynamic Link Library)的接口,可以通過(guò)Visual C+ (以下簡(jiǎn)稱 VC)提供的訪問(wèn)機(jī)器底層硬件I/O接口的函數(shù)實(shí)現(xiàn)DLL,完成各種控制系統(tǒng)。由于直接訪問(wèn) 機(jī)器底層硬件I/O接口的函數(shù)只適用于Windows 9x(95、98、Me)系統(tǒng),所以采用本方法開(kāi) 發(fā)的應(yīng)用程序只能在Windows 9x操作系統(tǒng)下運(yùn)行。本方法已應(yīng)用在兩個(gè)微機(jī)實(shí)時(shí)數(shù)據(jù)采集系 統(tǒng)項(xiàng)目中,取得了較好的效果。動(dòng)態(tài)鏈接庫(kù)(DLL)的編寫動(dòng)態(tài)鏈接庫(kù)雖然是一個(gè)可執(zhí)行模塊,但它并不能直接運(yùn)行,它只是提供一組函數(shù)供Windows 應(yīng)用程序或其他動(dòng)態(tài)鏈接庫(kù)調(diào)用,以完成其特殊任務(wù)。
3、動(dòng)態(tài)鏈接庫(kù)只有在被調(diào)用了它的某個(gè) 函數(shù)以后才發(fā)生作用。Windows 9x下VB編寫的程序是32位的,因此編寫供VB調(diào)用的動(dòng)態(tài) 鏈接庫(kù)也應(yīng)是32位的。一個(gè)32位的動(dòng)態(tài)鏈接庫(kù)應(yīng)包括兩個(gè)基本部分:其一是DllMain函數(shù),它是Win32 DLL的入口和出口點(diǎn)。在每次裝入或卸載DLL時(shí),Windows 9x調(diào)用該函數(shù),主要用來(lái)完成一些初始化任務(wù),或在DLL卸載之前,Windows調(diào)用該函數(shù)做 一些必要的釋放資源等清除工作。其二是自己的功能函數(shù)。每一個(gè)供VB調(diào)用的功能函數(shù)必須在模塊定義文件(*.DEF)中輸出 或直接在函數(shù)定義處輸出。供VB調(diào)用的DLL功能函數(shù)與普通DLL功能函數(shù)相比有一個(gè)重要的 不同
4、之處,就是函數(shù)必須定義成WINAPI類型,即函數(shù)定義采用如下格式: WINAPI函數(shù)名(函數(shù)參數(shù)表);下面的DLL例子定義了兩個(gè)讀寫I/O端口的函數(shù)供VB使用, 使得VB能夠訪問(wèn)硬件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ù)或過(guò)程必須在全局模塊(*.BAS)中正確說(shuō)明才有效。必須使用Declare語(yǔ)句把一個(gè) DLL函數(shù)引入VB中,它告訴VB在哪里找到DLL函數(shù),并且讓VB知道DLL函數(shù)的參數(shù)類型和 返回值類型。當(dāng)某個(gè)DLL函數(shù)用Declare語(yǔ)句正確聲明以后,就可以像使用其他VB函數(shù)一樣 使用這個(gè)DLL函數(shù)。VB聲明DLL函數(shù)的格式如下:聲明過(guò)程的格式為: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ù)或過(guò)程的名字,libname是動(dòng)態(tài)鏈接庫(kù)DLL的文件名,aliasname是DLL 函數(shù)的別名,arglist是參數(shù)表,type是DLL函數(shù)的返回類型。對(duì)于函數(shù)調(diào)用參數(shù)的聲明要 注意:非指針類參數(shù)采用傳值方式(ByVal)聲明,指針類參數(shù)采用引用方式(ByRef)聲明。要注意的是VB的數(shù)據(jù)類型與VC的數(shù)據(jù)類型有些差別,在聲明DLL函數(shù)時(shí)要特別注意參數(shù)的 數(shù)據(jù)類型應(yīng)匹配,否則返回的結(jié)果會(huì)是錯(cuò)誤的。使用上面的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ù)了。實(shí)現(xiàn)高精度實(shí)時(shí)數(shù)據(jù)采集對(duì)于實(shí)時(shí)數(shù)據(jù)采集,要求在一定的時(shí)間間隔內(nèi)周期性地讀取數(shù)模轉(zhuǎn)換接口板的數(shù)據(jù),這就要 用到系統(tǒng)定時(shí)器。為了提高定時(shí)器采集效率,定時(shí)器的編程也應(yīng)使用VC在動(dòng)態(tài)鏈接庫(kù)DLL 中實(shí)現(xiàn)。在
9、Windows系統(tǒng)中,基于WM_TIMER消息的定時(shí)器是低精度的,它最小可以精確到 54.9毫秒,大約每秒18.2次,并且WM_TIMER消息的優(yōu)先級(jí)比較低,它可能造成WM_TIMER 消息的延遲,從而丟失數(shù)模轉(zhuǎn)換接口板中的數(shù)據(jù)。從精度和優(yōu)先級(jí)考慮,高精度實(shí)時(shí)數(shù)據(jù)采 集不能使用該定時(shí)器完成任務(wù),應(yīng)使用Windows多媒體服務(wù)中提供的多媒體定時(shí)器。多媒體 定時(shí)器的精度非常高,能精確到毫秒級(jí),而且優(yōu)先級(jí)也很高,基本上沒(méi)有延遲,非常適合高 精度實(shí)時(shí)數(shù)據(jù)采集使用。使用多媒體定時(shí)器應(yīng)遵循以下3個(gè)步驟:確定最大和最小周期可以用timeGetDevCaps函數(shù)確定多媒體定時(shí)器服務(wù)提供的最大和最小定時(shí)器事件周
10、期,這些 數(shù)值對(duì)不同的計(jì)算機(jī)是不同的,也與Windows運(yùn)行方式有關(guān)。建立最小定時(shí)器精度在啟動(dòng)定時(shí)器事件前,應(yīng)用程序必須建立想要使用的最小定時(shí)器精度,在定時(shí)器服務(wù)事件結(jié) 束之后,還必須清除該精度。(上接第C20版)最小定時(shí)器精度可以根據(jù)第一步返回的結(jié)果確定。可以使用 timeBeginPeriod和timeEndPeriod函數(shù)來(lái)設(shè)置和清除最小定時(shí)器精度,每個(gè) timeBeginPeriod調(diào)用都必須有一個(gè)timeEndPeriod與之對(duì)應(yīng),而且兩個(gè)函數(shù)必須指定相同 的最小精度。啟動(dòng)定時(shí)器事件與該步驟相關(guān)的兩個(gè)函數(shù)為timeSetEvent和timeKillEvent,詳細(xì)細(xì)節(jié)可以查閱MSDN
11、中這 兩個(gè)函數(shù)的定義。有三個(gè)要注意的地方:一是一旦啟動(dòng)定時(shí)器就一定不要忘記把它關(guān)閉,因 為小于100毫秒的定時(shí)器對(duì)CPU的消耗是非常大的,而且下次啟動(dòng)定時(shí)器會(huì)造成多個(gè)定時(shí)器 同時(shí)運(yùn)行,使得數(shù)據(jù)采集的結(jié)果是錯(cuò)誤的;二是在timeSetEvent調(diào)用中設(shè)置定時(shí)器回調(diào)函數(shù) 時(shí)要遵循其規(guī)則,即回調(diào)函數(shù)的定義要嚴(yán)格遵照MSDN中的格式,而且在回調(diào)函數(shù)中除了PostMessage、 timeGetSystemTime、 timeGetTime、 timeSetEvent、 timeKillEvent、 midiOutShortMsg、midiOutLongMsg、OutputDebugString 幾個(gè)函數(shù)外,不能調(diào)用其他 Windows API函數(shù),否則易造成系統(tǒng)出錯(cuò)甚至崩潰;三是回調(diào)函數(shù)應(yīng)編寫得短小精悍,因?yàn)槎〞r(shí)器事 件發(fā)生的周期非常短,程序很長(zhǎng)會(huì)造成延時(shí),影響數(shù)據(jù)采集的實(shí)時(shí)性。結(jié)束語(yǔ)以上介紹了編寫適
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年房車露營(yíng)旅行保險(xiǎn)服務(wù)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年房車旅游社交媒體營(yíng)銷行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2025-2030年含乳飲料口感提升行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年可拼接糖果企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025-2030年即食龍蝦肉罐頭行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2025-2030年抽象藝術(shù)畫展行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 帆布在戶外休閑家具的舒適度與環(huán)保性能考核試卷
- 搪瓷杯具的設(shè)計(jì)與個(gè)性化定制考核試卷
- 二零二五年度企業(yè)辦公場(chǎng)地使用權(quán)購(gòu)買協(xié)議
- 零星工程安全文明施工和環(huán)境保護(hù)措施
- GB 1886.114-2015食品安全國(guó)家標(biāo)準(zhǔn)食品添加劑紫膠(又名蟲(chóng)膠)
- 初二上冊(cè)期末數(shù)學(xué)試卷含答案
- envi二次開(kāi)發(fā)素材包-idl培訓(xùn)
- 2022年上海市初中語(yǔ)文課程終結(jié)性評(píng)價(jià)指南
- 西門子starter軟件簡(jiǎn)易使用手冊(cè)
- 2022注冊(cè)電氣工程師專業(yè)考試規(guī)范清單匯總
- 隧道施工監(jiān)控量測(cè)方案及措施
- 桂花-作文ppt-PPT課件(共14張)
- 配電房日常檢查記錄表.docx
- 高一數(shù)學(xué)概率部分知識(shí)點(diǎn)總結(jié)及典型例題解析 新課標(biāo) 人教版 必修
- 鐵路運(yùn)費(fèi)計(jì)算方法
評(píng)論
0/150
提交評(píng)論