用VB除錯串列埠通訊 (轉)
現有電子秤一臺,使用串列埠與進行通訊。編寫VB來訪問串列埠,達到讀取電子秤上顯示的資料。該電子秤為BE01型儀表,輸出為RS-232C標準介面,波特率為300-9600、偶校驗、7個資料位、2個停止位。所有字元均傳送11位ASCII碼,一個起始位。在VB中與串列埠通訊需要引入Mmm串列埠通訊控制元件(在 Comm Control 6.0中)。具體程式如下:控制元件簡稱:MSC
Dim Out(12) As Byte '接收var中的值:namespace prefix = o ns = "urn:schemas-microsoft-com::office" />
Dim var As Variant '接收MSC.input中的數值
Dim nRece As Integer '計算MSC.inputbuffer的個數
Dim i As Integer, j As Integer '隨即變數,計算迴圈
****************************************************************************
Private Sub Form_Load()
ClearText
With MSC
.CommPort = 1 '設定Com1為通訊埠
.Settings = "9600,E,7,2" '設定通訊埠引數 9600赫茲、偶校驗、7個資料位、1個停止位.(這裡需要進一步說明的是:.Setting=”BBBB,P,D,S”。
含義是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit)
.InBufferSize = 40 '設定緩衝區接收資料為40位元組
.InputLen = 1 '設定Input一次從接收緩衝讀取位元組數為1
.RThreshold = 1 '設定接收一個位元組就產生OnComm事件
End With
End Sub
****************************************************************************
Private Sub ClearText()
Text3.Text = ""
Text2.Text = "5"
Text1.Text = ""
End Sub
Private Sub Command1_Click()
ClearText
' nRece = 0 '計數器清零
With MSC
.InputMode = comInputModeBinary '設定資料接收為二進位制形式
.InBufferCount = 0 '清除接收緩衝區
If Not .PortOpen Then
.PortOpen = True '開啟通訊埠
End If
End With
End Sub
Private Sub MSC_OnComm()
DelayTime ‘用來延續時間
ClearText
With MSC
Case .CommEvent '判斷通訊事件
Case comEvReceive: '收到Rthreshold個位元組產生的接收事件
SwichVar 1
If Out(1) = 2 Then '判斷是否為資料的開始標誌
.RThreshold = 0 '關閉OnComm事件接收
End If
Do
DoEvents
L Until .InBufferCount >= 3 '迴圈等待接收緩衝區>=3個位元組
' nRece = nRece + 1
For i = 2 To 12
SwichVar i
Text1.Text = Text1.Text & Chr(Out(i))
Next
Text1.Text = LTrim(Text1.Text)
Text2.Text = Text2.Text & CStr(nRece)
.RThreshold = 1 '開啟MSComm事件接收
Case Else
' .PortOpen = False
End Select
End With
End Sub
****************************************************************************
Private Sub DelayTime()
Dim bDT As Boolean
Dim sPrevious As Single, sLast As Single
bDT = True
sPrevious = Timer (Timer可以計算從子夜到現在所經過的秒數,在Microsoft 中,Timer可以返回一秒的小數部分)
Do While bDT
If Timer - sPrevious >= 0.3 Then bDT = False
Loop
bDT = True
End Sub
(通訊傳輸速率為9600bps,則最度1.04ms傳送一個位元組,儀表每秒傳送50幀資料,每幀資料有4個位元組,即每秒傳送200個位元組,平均5.0ms 傳送一個位元組,連續讀取串列埠資料時要在程式中新增迴圈等待程式)
Private Sub SwichVar(ByVal nNum As Integer)
DelayTime
var = Null
var = MSC.Input
Out(nNum) = var(0)
End Sub
(設定接收資料模式採用二進位制形式,即 InputMode=comInputModeBinary,但用Input屬性讀取資料時,不能直接賦值給 Byte 型別變數,只能透過先賦值給一個 Variant 型別變數,返回一個二進位制資料的陣列,再轉換儲存到Byte型別數變數中。)
Private Sub Text1_Change()
Text3.Text = CText(Text1.Text) - CText(Text2.Text)
End Sub
****************************************************************************
Private Function CText(ByVal str As String) As Currency
If str <> "" Then
CText = CCur(Val(str))
Else
CText = 0
End If
End Function
(儀表每秒傳送50幀資料,微機收到一幀完整資料至少需要20 ms時間,然後再進行資料處理。如果微機在下一幀資料接收前即20ms內能將資料計算處理完畢,則接收緩衝區內只會儲存有一幀資料,不會存有兩幀以上資料,接收緩衝區的大小不會影響實時監測效果(接收緩衝區>4位元組),這時完全可以實現實時監測或實時控制;如果微機在20ms內不能將資料計算處理完畢,接收緩衝區設定得又很大,在資料計算處理完畢前,接收緩衝區內就會儲存有兩幀以上資料,而且一次工作時間越長,緩衝區內滯留資料幀就越多,資料採集和資料處理之間產生逐漸增大的額外時間差,當接收緩衝區充滿後,時間差不再增大,固定在某一值,部分資料因不能及時採集到接收緩衝區中,資料產生丟失現象,真實工作情況就會和微機處理結果產生較大的時間差,對實時監測和實時控制很不利,這種情況下接收緩衝區的大小就會影響實時監測效果,所以接收緩衝區設定不能過大,以保證資料處理的實時性。)
小結:本文所用的儀表為梅特勒公司出產的BE01型電子秤,其輸出的每個編碼均為標準的ASCII碼。其他的儀表存在發射的編碼中含有BCD碼,而且分為高低位,需要接收後對其進行解碼換算,之後還要將高位和低位數字進行相加,即可以將其BCD碼換算成實數。另還存在誤差的可能:判斷最大值,儀表在剛開始工作時有干擾,會傳導一些亂碼,位移感測器有引數偏差,最大值一般都略大於50毫米,所以取51為極限最大值,取-51為極限最小值。暫時先寫這些,當然其他的情況可以依此類推!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998950/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 串列埠通訊 (轉)串列埠
- 在VB中利用API進行串列埠通訊API串列埠
- FX-3U PLC串列埠與PC通訊除錯串列埠除錯
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠通訊串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- 串列埠通訊應用程式的解決方案 (轉)串列埠
- 樹莓派已經通過網路連線通過串列埠通訊在串列埠除錯小助手列印與操作樹莓派串列埠除錯
- win10 如何除錯串列埠_win10串列埠除錯怎麼除錯Win10除錯串列埠
- 9針串列埠除錯串列埠除錯
- linux 串列埠通訊Linux串列埠
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- (10)uart串列埠通訊串列埠
- 通過JLINK實現串列埠顯示除錯串列埠除錯
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- VB串列埠使用心得兩則 (轉)串列埠
- serial for mac 串列埠除錯工具Mac串列埠除錯
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- 串列埠無法正常通訊串列埠
- linux串列埠命令列除錯Linux串列埠命令列除錯
- web實現串列埠除錯助手Web串列埠除錯
- 串列埠通訊常見的錯誤和故障排除方法串列埠
- 序列通訊的基本原理及用MFC實現串列埠通訊程式設計 (轉)串列埠程式設計
- Android USB 轉串列埠通訊開發基本流程Android串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- ROS環境下串列埠通訊ROS串列埠
- Android藍芽串列埠通訊Android藍芽串列埠
- 小型plc串列埠通訊簡介串列埠
- 啟用樹莓派3B串列埠通訊能力樹莓派串列埠
- STM32串列埠通訊串列埠