VB串口數(shù)據(jù)采集_第1頁
VB串口數(shù)據(jù)采集_第2頁
VB串口數(shù)據(jù)采集_第3頁
VB串口數(shù)據(jù)采集_第4頁
VB串口數(shù)據(jù)采集_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、用 VB 進(jìn)行串口實(shí)時數(shù)據(jù)采集長沙交通學(xué)院信息與計(jì)算科學(xué)系(410077)李湘江- -本文介紹 VB6.0 利用 MSComm 信控件,開發(fā)微機(jī)通過串口對工業(yè)儀表進(jìn)行實(shí)時數(shù)據(jù)采集的編程技術(shù)。給出的程序代碼具有通用性,并有詳細(xì)的注釋,可以直接或稍加改動后用于其他數(shù)據(jù)采集或?qū)崟r控制程序中。- -一臺工業(yè)專用實(shí)時檢測儀表,接高精度位移傳感器,用于測量微小形變或微量位移,儀表測量精度為 0.01 毫米,測量范圍最大值為 50 毫米。該儀表帶有一個 9 針的 RS-232C 串口,能與微機(jī)進(jìn)行串口數(shù)據(jù)通信,實(shí)時傳送檢測數(shù)據(jù),通過微機(jī)軟件處理可實(shí)現(xiàn)工業(yè)實(shí)時監(jiān)控。- -該儀表的串口數(shù)據(jù)通信協(xié)議是:數(shù)據(jù)傳輸速

2、率為 9600bps,1 位開始位,8 位數(shù)據(jù)位,1 位停止位,無奇偶校驗(yàn)位。儀表每秒發(fā)送 50 幀檢測數(shù)據(jù),每幀數(shù)據(jù)由 4 個字節(jié)組成。第一個字節(jié)定義為二進(jìn)制常數(shù)0F0H,是每幀數(shù)據(jù)開始的標(biāo)志字節(jié);后面連續(xù) 2 個字節(jié)為數(shù)據(jù)字節(jié),采用壓縮的 BCD 碼編碼方式,高位在前,低位在后,即一個字節(jié)表示兩位十進(jìn)制數(shù),則兩個字節(jié)表示四位十進(jìn)制數(shù),小數(shù)點(diǎn)采用固定形式,定義在兩字節(jié)中間;第四個字節(jié)為符號字節(jié),該字節(jié)第八位為 1,即:1xxx!xxxx1j- -則為負(fù)數(shù);第八位為 0,即:- -則為正數(shù)。- -例如:0F0H26H87H80H0F0H34H62H00H 表示-26.8734.62。- -通信

3、傳輸速率為 9600bps,則最快速度 1.04ms 發(fā)送一個字節(jié),儀表每秒發(fā)送 50 幀數(shù)據(jù),每幀數(shù)據(jù)有4 個字節(jié),即每秒發(fā)送 200 個字節(jié),平均 5.0ms 發(fā)送一個字節(jié),連續(xù)讀取串口數(shù)據(jù)時要在程序中添加循環(huán)等待程序。-為了實(shí)現(xiàn)實(shí)時監(jiān)測功能,接收數(shù)據(jù)的讀取要盡可能的快速,則設(shè)置 MSComm1 屬性如下:RThreshold=1接收緩沖區(qū)收到一個字節(jié)產(chǎn)生OnComm|:件InputLen=1每次讀取一個字節(jié)-儀表每秒發(fā)送 50 幀數(shù)據(jù),微機(jī)收到一幀完整數(shù)據(jù)至少需要 20ms 時間,然后再進(jìn)行數(shù)據(jù)處理。如果微機(jī)在下一幀數(shù)據(jù)接收前即 20ms 內(nèi)能將數(shù)據(jù)計(jì)算處理完畢,則接收緩沖區(qū)內(nèi)只會保存有

4、一幀數(shù)據(jù),不會存有兩幀以上數(shù)據(jù),接收緩沖區(qū)的大小不會影響實(shí)時監(jiān)測效果(接收緩沖區(qū)4 字節(jié)),這時完全可以實(shí)現(xiàn)實(shí)時監(jiān)測或?qū)崟r控制;如果微機(jī)在 20ms 內(nèi)不能將數(shù)據(jù)計(jì)算處理完畢,接收緩沖區(qū)設(shè)置得又很大,在數(shù)據(jù)計(jì)算處理完畢前,接收緩沖區(qū)內(nèi)就會保存有兩幀以上數(shù)據(jù),而且一次工作時間越長,緩沖區(qū)內(nèi)滯留數(shù)據(jù)幀就越多,數(shù)據(jù)采集和數(shù)據(jù)處理之間產(chǎn)生逐漸增大的額外時間差,當(dāng)接收緩沖區(qū)充滿后,時間差不再增大,固定在某一值,部分?jǐn)?shù)據(jù)因不能及時采集到接收緩沖區(qū)中,數(shù)據(jù)產(chǎn)生丟失現(xiàn)象,真實(shí)工作情況就會和微機(jī)處理結(jié)果產(chǎn)生較大的時間差,對實(shí)時監(jiān)測和實(shí)時控制很不利,這種情況下接收緩沖區(qū)的大小就會影響實(shí)時監(jiān)測效果,所以接收緩沖區(qū)設(shè)

5、置不能過大,以保證數(shù)據(jù)處理的實(shí)時性。-設(shè)置接收數(shù)據(jù)模式采用二進(jìn)制形式,即 InputMode=comInputModeBinary,但用 Input 屬性讀取數(shù)據(jù)時,不能直接賦值給 Byte 類型變量,只能通過先賦值給一個 Variant 類型變量,返回一個二進(jìn)制數(shù)據(jù)的數(shù)組,再轉(zhuǎn)換保存到 Byte 類型數(shù)變量中。-VB 中有 Byte 類型變量,但沒有字節(jié)的位處理語句,符號字節(jié)的位處理要判斷符號字節(jié)的值是否大于 127,大于127 則為負(fù)數(shù);壓縮的 BCM 存入 Byte 類型變量,VB 系統(tǒng)只按十進(jìn)制數(shù)處理,這要通過一個簡單算法換算,解壓BCM 才能還原成十進(jìn)制表示數(shù)值。假如 a 是 Byt

6、e 類型變量,D 是 Single 類型變量,將一個壓縮的 BCD 碼存入 a 中,則算法是:D=(a16)*10+a(a16)*16則口=2(a16)*6程序清單:-在通用聲明中定義程序所用變量:Dimab(4)AsByte字節(jié)數(shù)據(jù)類型數(shù)組,用來存儲接收到的一組字節(jié)數(shù)據(jù)DimavAsVariant用來從接收緩沖區(qū)讀取數(shù)據(jù)DimiAsIntegerDimjAsIntegerDimwAsIntegerDimb1AsSingleDimb2AsSingleDimWWAsSingleDimMaxWAsSingleDimMinWAsSingle-在窗體中添加名為 Command 的 開始按鈕和名為 MS

7、Comm 的 MSCommE 件。-開始按鈕的 Click 事件處理程序主要是對 MSComm1 制的參數(shù)初始化設(shè)置,程序中大部分參數(shù)在設(shè)計(jì)時可在MSComm1 制的屬性窗口中設(shè)置:接收數(shù)據(jù)個數(shù)計(jì)數(shù)器十進(jìn)制檢測值最大值最小值PrivateSubCommand1_Click()開始按鈕WithMSComml.InBufferSize=40設(shè)置MSComm接收緩沖區(qū)為40字節(jié).OutBufferSize=2設(shè)置MSComm發(fā)送緩沖區(qū)為2字節(jié).InputMode=comInputModeBinary設(shè)置接收數(shù)據(jù)模式為二進(jìn)制形式.InputLen=1設(shè)置Input一次從接收緩沖讀取字節(jié)數(shù)為1.SThr

8、eshold=1設(shè)置Output一次從發(fā)送緩沖讀取字節(jié)數(shù)為1.InBufferCount=0清除接收緩沖區(qū).OutBufferCount=0清除發(fā)送緩沖區(qū)MaxW=-99最大值賦初值MinW=99最小值賦初值數(shù)據(jù)個數(shù)計(jì)數(shù)器清零.RThreshold=1設(shè)置接收一個字節(jié)產(chǎn)生OnComni件If.PortOpen=FalseThen判斷通信口是否打開.PortOpen=True打開通信口IfErrThen錯誤處理MsgBox“串口通信無效”ExitSubEndIfEndIfEndWithEndSub-為了達(dá)到實(shí)時數(shù)據(jù)采集目的,實(shí)時數(shù)據(jù)采集處理程序采用 MSComm 件驅(qū)動方式。-MSComm1_O

9、nCo 的編件處理程序只處理 comEvReceive 事件,首先判斷幀數(shù)據(jù)的開始字節(jié),關(guān)閉OnCommi 收事件,然后接收數(shù)據(jù)字節(jié),將壓縮 BCD行還原轉(zhuǎn)換,再接收符號字節(jié),判斷數(shù)據(jù)符號,判斷數(shù)據(jù)最大最小值,最后打開 OnCommi 收事件,等待下一次 OnComi件產(chǎn)生:PrivateSubMSComm1_OnComm()WithMSComm1SelectCase.CommEvent判斷MSComm通信事件CasecomEvReceive.CommPort=2.Setting=9600,N,8,1”使用COM2設(shè)置通信口參數(shù)收到Rthreshold個字節(jié)產(chǎn)生的接收事件av=.Input讀取

10、一個接收字節(jié)ab(1)=av(0)轉(zhuǎn)換保存到字節(jié)數(shù)據(jù)類型數(shù)組Ifab(1)=&HF0Then判斷是否為數(shù)據(jù)開始標(biāo)志RThreshold=0關(guān)閉OnComri件接收DoDoEventsLoopUntil.InBufferCount=3循環(huán)等待MSComm接收緩沖區(qū)=3個字節(jié)w=w+1計(jì)數(shù)器累加計(jì)數(shù)av=.Input讀取第二個數(shù)據(jù)字節(jié)(BC酗高位字節(jié))ab(2)=av(0)轉(zhuǎn)換保存到字節(jié)數(shù)據(jù)類型數(shù)組av=.Input讀取第三個數(shù)據(jù)字節(jié)(BC酗低位字節(jié))ab(3)=av(0)轉(zhuǎn)換保存到字節(jié)數(shù)據(jù)類型數(shù)組av=.Input讀取第四個數(shù)據(jù)字節(jié)(符號位字節(jié))ab(4)=av(0)轉(zhuǎn)換保存到字節(jié)數(shù)據(jù)類

11、型數(shù)組bl=ab(2)6*(ab(2)16)高位字節(jié)壓縮BC幽轉(zhuǎn)換為實(shí)數(shù)b2=ab(3)6*(ab(3)16)低位字節(jié)壓縮BC幽轉(zhuǎn)換為實(shí)數(shù)WW=bl+b2/100數(shù)值組合,標(biāo)定小數(shù)點(diǎn)Ifab(4)127ThenWW=WW判斷數(shù)據(jù)符號位Label1(0)=Format(WW,0.00)顯示毫米單位數(shù)值,2位小數(shù)Label1(1)=Format(WW/25.4,0.000)顯示英寸單位數(shù)值,3位小數(shù)IfWWMaxWAndWW51Then-判斷最大值,儀表在剛開始工作時有干擾,會傳導(dǎo)一些亂碼,位移傳感器有參數(shù)偏差,最大值一般都略大于 50 毫米,所以取 51 為極限最大值,取51 為極限最小值。MaxW=WWLabel1(2)=Format(MaxW,0.00)顯示毫米單位最大值,2位小數(shù)Label1(3)=Format(MaxW/25.4,0.000)顯示英寸單位最大值,3位小數(shù)En

溫馨提示

  • 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

提交評論