VB的OnComm事件中的疑问。
PrivateSubMSComm1_OnComm()StaticcntAsIntegerDimreceive_cntAsIntegerDimi%,j%DimArr()As...
Private Sub MSComm1_OnComm()
Static cnt As Integer
Dim receive_cnt As Integer
Dim i%, j%
Dim Arr() As Byte
Dim s As String
Select Case MSComm1.CommEvent
Case comEvReceive
receive_cnt = MSComm1.InBufferCount '接收缓冲区的字节数
' 往暂存区存二进位资料
Arr = MSComm1.Input
Rec_num = UBound(Arr)
ReDim Rec_dat(0 To Rec_num) As Byte
For j = 0 To Rec_num
Rec_dat(j) = Arr(j)
Timer1.Enabled = True
Next j
s = ""
For i = 0 To receive_cnt - 1
'报文串显示
If Arr(i) > 15 Then
s = s + Hex(Arr(i)) + " "
Else
s = s + "0" + Hex(Arr(i)) + " "
End If
cnt = cnt + 1
Next i
Text1.Text = Text1.Text & s
If cnt >= 300 Then
Text1.Text = ""
cnt = 0
End If
Case comEvSend
End Select
End Sub
Private Sub Timer1_Timer()
If UBound(Rec_dat) - LBound(Rec_dat) >= 7 Then
MsgBox "1"
Timer1.Enabled = False
End If
End Sub
Text1里显示了有8个数据,但是 为什么If UBound(Rec_dat) - LBound(Rec_dat) >= 7 Then这句经常不成立,数组里Rec_dat应该有8个字符总成立呀,也没看见丢死数据呀。
没财富了,求帮忙呀,非常感谢。
定时器定时20ms 展开
Static cnt As Integer
Dim receive_cnt As Integer
Dim i%, j%
Dim Arr() As Byte
Dim s As String
Select Case MSComm1.CommEvent
Case comEvReceive
receive_cnt = MSComm1.InBufferCount '接收缓冲区的字节数
' 往暂存区存二进位资料
Arr = MSComm1.Input
Rec_num = UBound(Arr)
ReDim Rec_dat(0 To Rec_num) As Byte
For j = 0 To Rec_num
Rec_dat(j) = Arr(j)
Timer1.Enabled = True
Next j
s = ""
For i = 0 To receive_cnt - 1
'报文串显示
If Arr(i) > 15 Then
s = s + Hex(Arr(i)) + " "
Else
s = s + "0" + Hex(Arr(i)) + " "
End If
cnt = cnt + 1
Next i
Text1.Text = Text1.Text & s
If cnt >= 300 Then
Text1.Text = ""
cnt = 0
End If
Case comEvSend
End Select
End Sub
Private Sub Timer1_Timer()
If UBound(Rec_dat) - LBound(Rec_dat) >= 7 Then
MsgBox "1"
Timer1.Enabled = False
End If
End Sub
Text1里显示了有8个数据,但是 为什么If UBound(Rec_dat) - LBound(Rec_dat) >= 7 Then这句经常不成立,数组里Rec_dat应该有8个字符总成立呀,也没看见丢死数据呀。
没财富了,求帮忙呀,非常感谢。
定时器定时20ms 展开
1个回答
展开全部
Rec_dat 你定义的是局部变量。
在一个函数中定义的变量,在另一个函数中是看不到的。
你要定义成全局变量才行。
在Private Sub MSComm1_OnComm()前加句
private Rec_dat(0 To 7) As Byte 试一下。
只是看一下你代码,没调度。原因应该没问题,修改方法不行你再研究下。
在一个函数中定义的变量,在另一个函数中是看不到的。
你要定义成全局变量才行。
在Private Sub MSComm1_OnComm()前加句
private Rec_dat(0 To 7) As Byte 试一下。
只是看一下你代码,没调度。原因应该没问题,修改方法不行你再研究下。
更多追问追答
追问
我试试 ,Dim Rec_dat() As Byte 是定义的全局变量,我看了下,UBound(Rec_dat)-LBound(Rec_dat)多数情况下是等于7,少部分情况是0啊,1啊,5啊,之类的。
我这样写Text2.Text=Text2.Text & Hex(Rec_dat) 也是显示有8个数据的。
追答
那就是由于你是在timer事件中定义的。
这个事件是定期发生的事件。
有可能事件响应时,你正在对Rec_dat进行修改。
比如 如果timer事件响应时,你正在执行ReDim Rec_dat(0 To Rec_num) As Byte这个语句,就会发生问题。
如果你想这个问题不发生,可以在Private Sub MSComm1_OnComm()这个函数的入口关闭timer,出口处开启Timer就行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询