首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

读取和判断串口数据时,偶尔会提示“下标越界”。望大家指点。解决方案

2012-02-22 
读取和判断串口数据时,偶尔会提示“下标越界”。望大家指点。DimBufferAsVariantDimtemperatureAsLongPrivateS

读取和判断串口数据时,偶尔会提示“下标越界”。望大家指点。
Dim   Buffer   As   Variant
Dim   temperature   As   Long
Private   Sub   MSComm1_OnComm()
Image1(0).Picture   =   Image1(2).Picture

Select   Case   MSComm1.CommEvent
Case   comEvReceive
MSComm1.InputMode   =   comInputModeBinary
MSComm1.InputLen   =   0
Buffer   =   MSComm1.Input

If   Buffer(0)   =   1   And   Buffer(1)   =   1   Then   ‘报错的就是这一条代码!

      Text1.Text   =   Format(Buffer(2)   *   200   /   256,   "###0.00 ")
      temperature   =   Format(Buffer(2)   *   200   /   256,   "###0.00 ")
'       temperature   =   Buffer(2)   /   2
End   If


Case   Else
End   Select


End   Sub

[解决办法]
Option Explicit
Dim Buffer() As Byte
Dim Lbljieshou As String
Dim lenInput As String
Dim strData As String
Dim strDataInteger As String

Private Sub Form_Load()
MSComm1.CommPort = 1 'COM1串口
MSComm1.Settings = "9600,n,8,1 " '串口设置
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.InBufferSize = 512 '接收缓冲区大小
MSComm1.OutBufferSize = 512 '发送缓冲区大小
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.PortOpen = True '开串口
Timer1.Interval = 200 '200ms Timer1使strData清空
End Sub

Private Sub MSComm1_OnComm()
'Dim strBuff As String
Dim intInputLen As Integer
Text1 = " "
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
intInputLen = MSComm1.InBufferCount
ReDim Buffer(intInputLen)
Buffer() = MSComm1.Input
'数据处理代码
Call Receive
If Mid(strData, 1, 4) = "0101 " Then
Text1.Text = Format(Val( "&H " & Mid(strData, 5, 2)) * 200 / 256, "###0.00 ")
'temperature = Format(Buffer(2) * 200 / 256, "###0.00 ")
End If
End Select
End Sub

Public Sub Receive()
Dim i As Integer
For i = 0 To UBound(Buffer)
If Len(Hex(Buffer(i))) = 1 Then
strData = strData & "0 " & Hex(Buffer(i))
Else
strData = strData & Hex(Buffer(i))
End If
Next
Text2 = strData
End Sub

Private Sub Timer1_Timer()
strData = " "
strDataInteger = " "
End Sub

热点排行