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

针对这个用doevents在 VB如何解决啊

2012-01-16 
针对这个用doevents在 VB怎么解决啊 ?Private Sub Command20_Click()Dim Temp As StringDim buff_out7() A

针对这个用doevents在 VB怎么解决啊 ?
Private Sub Command20_Click()  
  Dim Temp As String  
  Dim buff_out7() As Byte  
  ReDim buff_out7(8)  
  Dim u As Long  
  MSComm1.Settings = "9600,N,8,1" ' 9600 波特,无奇偶校验,8 位数据,一个停止位。  
  MSComm1.InputLen = 0 ' 当输入占用时,告诉控件读入整个缓冲区。  
  buff_out7(0) = &HAA  
  buff_out7(1) = &HAA  
  buff_out7(2) = &HFF  
  buff_out7(3) = &H1  
  Open App.Path & "\2.txt" For Input As #2  
  Line Input #2, Temp  
  Close #2  
  u = Val(Temp)  
  If u > 0 And u < 65536 Then  
  buff_out7(5) = u Mod 256  
  buff_out7(4) = u \ 256  
  buff_out7(6) = &H0  
  buff_out7(7) = &H0  
  buff_out7(8) = &HFF  
  If MSComm1.PortOpen = False Then  
  Label1.Caption = "您的串口现在是关闭状态,请先打开串口"  
  Else  
  MSComm1.Output = buff_out7  
  Label1.Caption = ""  
  End If  
  End If  
End Sub  



针对这个用doevents 怎么解决啊 ?有的说用doevents 可以解决

[解决办法]
一般情况下,串口通信在你发出命令后都需要等待一小段时间(一般以毫秒计数,具体看通信量和波特率来定),再执行读串口命令,以确保下位机把数据全部传送上来。
Private Sub Command20_Click()
Dim Temp As String
Dim buff_out7() As Byte
ReDim buff_out7(8)
Dim u As Long
MSComm1.Settings = "9600,N,8,1" ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.InputLen = 0 ' 当输入占用时,告诉控件读入整个缓冲区。
buff_out7(0) = &HAA
buff_out7(1) = &HAA
buff_out7(2) = &HFF
buff_out7(3) = &H1
Open App.Path & "\2.txt" For Input As #2
Line Input #2, Temp
Close #2
u = Val(Temp)
If u > 0 And u < 65536 Then
buff_out7(5) = u Mod 256
buff_out7(4) = u \ 256
buff_out7(6) = &H0
buff_out7(7) = &H0
buff_out7(8) = &HFF
If MSComm1.PortOpen = False Then
Label1.Caption = "您的串口现在是关闭状态,请先打开串口"
Else
MSComm1.Output = buff_out7
lngP=Gettickcount
do
doevents
loop until gettickcount-lngP>100 or mscomm1.inbuffercount>8
Label1.Caption = ""
End If
End If

特别说明:
1、GetTickCount:API函数
2、gettickcount-lngP>100 or mscomm1.inbuffercount>8:举例说明,当等待时间超过100毫秒或串口接受缓冲区的数据达到8个字节时退出等待循环,这就是一个通信等待的过程。
End Sub

热点排行