VB:如何让程序等待串口反馈信息,而不至于使用循环导致死机?

baiyongming 2008-10-30 03:54:23

MSComm1.InputLen = 1
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 1
strDataReadedT = MSComm1.Input

我原来用上述代码等待串口反馈数据,似乎也能解决部分问题,但总感觉不是很好,有没有什么办法来代替?
当然也可以用Timer,但似乎也不好。
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxrwan 2008-11-13
  • 打赏
  • 举报
回复
MSComm控件有OnComm事件
xredhat 2008-11-13
  • 打赏
  • 举报
回复
RThreshold 属性


在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。

语法

object.Rthreshold [ = value ]

Rthreshold 属性语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。


说明

当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。

例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。

数据类型

Integer

不要接受数据的时候,设置Rthreshold=1不就行了。
baiyongming 2008-11-13
  • 打赏
  • 举报
回复
有一个问题,我的程序是间断接收数据,比如先执行一段程序,执行完后接收数据,接收完后再执行下面的程序,诸如此类,要怎么办?
zdingyun 2008-11-08
  • 打赏
  • 举报
回复
如1楼3楼的建议使用MSCOMM控件的OMCOMM事件接收,注意设置
MSComm1.RThreshold = 1,产生OMCOMM事件

Option Explicit
Dim strData As String

Private Sub MSComm1_OnComm()
Dim strSj As String
Dim nineng As Integer, huada As String
Select Case Me.MSComm1.CommEvent
Case comEvReceive
strSj = Me.MSComm1.Input
strData = strData & strSj
Text1 = strData

End Select
End Sub

Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeText
MSComm1.PortOpen = True
End Sub
嗷嗷叫的老马 2008-10-30
  • 打赏
  • 举报
回复
MSComm控件有OnComm事件通知,只需要把你的处理代码放在此事件里就行了:

'引用于MSDN:
OnComm 事件


无论何时当 CommEvent 属性的值变化时,就产生 OnComm 事件,标志发生了一个通讯事件或一个错误。

语法

Private Sub object_OnComm ()

OnComm 事件语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。


说明

CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为 0,分别使捕获 comEvReceive 和 comEvSend 事件无效。
闲情漫步 2008-10-30
  • 打赏
  • 举报
回复
我用sleep()来控制反馈信息时间
用户 昵称 2008-10-30
  • 打赏
  • 举报
回复
串口控件应该有事件吧。不用死循环。

7,764

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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