针对这个用doevents在 VB怎么解决啊 ?

qiangshou2301 2009-06-28 05:15:25
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 可以解决
...全文
72 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiangshou2301 2009-06-30
  • 打赏
  • 举报
回复
这个已经差不多解决了
贝隆 2009-06-29
  • 打赏
  • 举报
回复
怎么样了?lngP是Long类型的变量,你需要添加定义
qiangshou2301 2009-06-29
  • 打赏
  • 举报
回复
自己顶
kevenquwei 2009-06-29
  • 打赏
  • 举报
回复
up
qiangshou2301 2009-06-29
  • 打赏
  • 举报
回复
恩 好的
一笑拔剑 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qiangshou2301 的回复:]
我编译的时候lngP找不到
[/Quote]

他没有定义

你自己定义一个就好
qiangshou2301 2009-06-28
  • 打赏
  • 举报
回复
我编译的时候lngP找不到
qiangshou2301 2009-06-28
  • 打赏
  • 举报
回复
巫师,你的 lngP是哪儿来的?
qiangshou2301 2009-06-28
  • 打赏
  • 举报
回复
恩 好的 谢谢2位 我加进去试试
贝隆 2009-06-28
  • 打赏
  • 举报
回复
一般情况下,串口通信在你发出命令后都需要等待一小段时间(一般以毫秒计数,具体看通信量和波特率来定),再执行读串口命令,以确保下位机把数据全部传送上来。
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
supergreenbean 2009-06-28
  • 打赏
  • 举报
回复
Else
MSComm1.Output = buff_out7
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0


Label1.Caption = ""
End If

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧