VB串口控件固定幀格式通信編程實例-實時數(shù)據(jù)采集_第1頁
VB串口控件固定幀格式通信編程實例-實時數(shù)據(jù)采集_第2頁
VB串口控件固定幀格式通信編程實例-實時數(shù)據(jù)采集_第3頁
VB串口控件固定幀格式通信編程實例-實時數(shù)據(jù)采集_第4頁
VB串口控件固定幀格式通信編程實例-實時數(shù)據(jù)采集_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、/9VBMSCommtxt本文介紹VB6.0利用MSComm通信控件,開發(fā)微機通過串口對工業(yè)儀表進行實時數(shù)據(jù)采集的編程技術(shù)。給出的程序代碼具有通用性,并有詳細的注釋,可以直接或稍加改動后用于其他數(shù)據(jù)采集或?qū)崟r控制程序中。一臺工業(yè)專用實時檢測儀表,接高精度位移傳感器,用于測量微小形變或微量位移,儀表測量精度為0.01毫米,測量范圍最大值為50毫米。該儀表帶有一個9針的RS-232C串口,能與微機進行串口數(shù)據(jù)通信,實時傳送檢測數(shù)據(jù),通過微機軟件處理可實現(xiàn)工業(yè)實時監(jiān)控。該儀表的串口數(shù)據(jù)通信協(xié)議是:數(shù)據(jù)傳輸速率為9600bps,1位開始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗位。儀表每秒發(fā)送50幀檢測數(shù)

2、據(jù),每幀數(shù)據(jù)由4個字節(jié)組成。第一個字節(jié)定義為二進制常數(shù)0F0H,是每幀數(shù)據(jù)開始的標志字節(jié);后面連續(xù)2個字節(jié)為數(shù)據(jù)字節(jié),采用壓縮的BCD碼編碼方式,高位在前,低位在后,即一個字節(jié)表示兩位十進制數(shù),則兩個字節(jié)表示四位十進制數(shù),小數(shù)點采用固定形式,定義在兩字節(jié)中間;第四個字節(jié)為符號字節(jié),該字節(jié)第八位為1,即:1xxxxxxx則為負數(shù);第八位為0,即:0 xxxxxxx則為正數(shù)。例如:0F0H26H87H80H0F0H34H62H00H表示-26.8734.62。通信傳輸速率為9600bps,則最快速度1.04ms發(fā)送一個字節(jié),儀表每秒發(fā)送50幀數(shù)據(jù),每幀數(shù)據(jù)有4個字節(jié),即每秒發(fā)送200個字節(jié),平均5

3、.0ms發(fā)送一個字節(jié),連續(xù)讀取串口數(shù)據(jù)時要在程序中添加循環(huán)等待程序。/9為了實現(xiàn)實時監(jiān)測功能,接收數(shù)據(jù)的讀取要盡可能的快速,則設置MSComml的屬性如下:RThreshold=1接收緩沖區(qū)收到一個字節(jié)產(chǎn)生OnComm事件InputLen=1每次充接收緩沖區(qū)讀取一個字節(jié)儀表每秒發(fā)送50幀數(shù)據(jù),微機收到一幀完整數(shù)據(jù)至少需要20ms時間,然后再進行數(shù)據(jù)處理。如果微機在下一幀數(shù)據(jù)接收前即20ms內(nèi)能將數(shù)據(jù)計算處理完畢,則接收緩沖區(qū)內(nèi)只會保存有一幀數(shù)據(jù),不會存有兩幀以上數(shù)據(jù),接收緩沖區(qū)的大小不會影響實時監(jiān)測效果(接收緩沖區(qū)4字節(jié)),這時完全可以實現(xiàn)實時監(jiān)測或?qū)崟r控制;如果微機在20ms內(nèi)不能將數(shù)據(jù)計算

4、處理完畢,接收緩沖區(qū)設置得又很大,在數(shù)據(jù)計算處理完畢前,接收緩沖區(qū)內(nèi)就會保存有兩幀以上數(shù)據(jù),而且一次工作時間越長,緩沖區(qū)內(nèi)滯留數(shù)據(jù)幀就越多,數(shù)據(jù)采集和數(shù)據(jù)處理之間產(chǎn)生逐漸增大的額外時間差,當接收緩沖區(qū)充滿后,時間差不再增大,固定在某一值,部分數(shù)據(jù)因不能及時采集到接收緩沖區(qū)中,數(shù)據(jù)產(chǎn)生丟失現(xiàn)象,真實工作情況就會和微機處理結(jié)果產(chǎn)生較大的時間差,對實時監(jiān)測和實時控制很不利,這種情況下接收緩沖區(qū)的大小就會影響實時監(jiān)測效果,所以接收緩沖區(qū)設置不能過大,以保證數(shù)據(jù)處理的實時性。D=(a16)*10+a(a16)*16貝UD=a(a16)*6-程序清單:在通用聲明中定義程序所用變量:Dimab(4)AsBy

5、te字節(jié)數(shù)據(jù)類型數(shù)組,用來存儲接收到的一組字節(jié)數(shù)據(jù)DimavAsVariant用來從接收緩沖區(qū)讀取數(shù)據(jù)DimiAsInteger/9DimjAsIntegerDimwAsInteger接收數(shù)據(jù)個數(shù)計數(shù)器Dimb1AsSingleDimb2AsSingleDimWWAsSingle十進制檢測值DimMaxWAsSingle最大值DimMinWAsSingle最小值-在窗體中添加名為Command1的開始按鈕和名為MSComm1的MSComm控件。-開始按鈕的Click事件處理程序主要是對MSComm1控制的參數(shù)初始化設置,程序中大部分參數(shù)在設計時可在MSComm1控制的屬性窗口中設置:Priva

6、teSubCommand1_Click()開始按鈕WithMSComm1.CommPort=2使用COM2.Setting=“9600,N,8,1設置通信口參數(shù).InBufferSize=40設置MSComml接收緩沖區(qū)為40字節(jié).OutBufferSize=2設置MSComml發(fā)送緩沖區(qū)為2字節(jié)設置接收數(shù)據(jù)模式為二進制形式.InputLen=1/9設置Input一次從接收緩沖讀取字節(jié)數(shù)為1.SThreshold=1設置Output一次從發(fā)送緩沖讀取字節(jié)數(shù)為1.InBufferCount=0清除接收緩沖區(qū).OutBufferCount=0清除發(fā)送緩沖區(qū)MaxW=99最大值賦初值MinW=99最

7、小值賦初值w=0數(shù)據(jù)個數(shù)計數(shù)器清零.RThreshold=1設置接收一個字節(jié)產(chǎn)生OnComm事件If.PortOpen=FalseThen判斷通信口是否打開.PortOpen=True打開通信口IfErrThen錯誤處理MsgBox“串口通信無效ExitSubEndIfEndIfEndWith/9EndSub為了達到實時數(shù)據(jù)采集目的,實時數(shù)據(jù)采集處理程序采用MSComm事件驅(qū)動方式。PrivateSubMSComm1_OnComm()WithMSComm1SelectCase.CommEvent判斷MSComml通信事件收到Rthreshold個字節(jié)產(chǎn)生的接收事件av=.Input讀取一個接收

8、字節(jié)ab(1)=av(0)轉(zhuǎn)換保存到字節(jié)數(shù)據(jù)類型數(shù)組Ifab(1)=HF0Then判斷是否為數(shù)據(jù)開始標志RThreshold=0關閉OnComm事件接收Do6/9DoEventsLoopUntil.InBufferCount=3循環(huán)等待MSComml接收緩沖區(qū)=3個字節(jié)w=w+1計數(shù)器累加計數(shù)av=.Input讀取第二個數(shù)據(jù)字節(jié)(BCD碼高位字節(jié))ab(2)=av(0)轉(zhuǎn)換保存到字節(jié)數(shù)據(jù)類型數(shù)組av=.Input讀取第三個數(shù)據(jù)字節(jié)(BCD碼低位字節(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ù)類型數(shù)組

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

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論