编写一串行口接收下位机(单片机)数据的程序.现以确定下位机程序无问题,并且利用串口调试精灵接收下位机数据无异常. 但通过VB6.0中的MSCOMM控件接收数据时,出现不能及时响应此事件(MSComm1_OnComm()),导致数据不能实时接收,从而失去实时监控的功能,只有下位机发N次数据之后,上位机才响应此事件(MSComm1_OnComm())MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"Private Sub MSComm1_OnComm()
Debug.Print MSComm1.Input
end sub
MSComm1.Settings = "9600,n,8,1"Private Sub MSComm1_OnComm()
Debug.Print MSComm1.Input
end sub
解决方案 »
- vb中,一个文本文件aaa.txt的第一行是标题,第二行是空格,第三行以后都是内容
- VB中如何将EXCEL数据存为dbf数据格式
- 高分,简单问题
- winsock 多线程
- 请教一个简单问题!
- 如何用VB写一个读取第一个硬盘物理序列号来实现软件注册的注册器和注册码生成器 看清 是第一个硬盘的,普通读硬盘的在双硬盘的机器上就失效的
- 如何设置文件属性,比如设c;\autoexec.bat 为只读
- 看到CSDN的问题,小弟(午夜黎明)想建立一个VB论坛,帖子+实时聊天回答,免得一个回复等老半天.赞成和有建议的朋友请跟贴!!
- 救命呀!我在VB中对数据库操作时出现了不可思议的事!!!!!
- 关于控制左右声道(MCI命令和MCIWND控件不能实现)请见详情
- 用data控件操作SQL数据库出错!~
- http代理
intputmode=..text还需要其它的参数吗?
2)串口的属性InputMode 是否作正确设置。文本接收设置为comInputModeText,二进制接收设置为comInputModeBinary
3)使用MSComm1_OnComm需对串口的属性RThreshold初始化为1或需接收的字节长。
还需注意MsComm_OnComm事件中需正确选择comEvReceive(接收事件),你不作选择,则串口任何事件都会触发OnComm事件,而导致接收代码受干扰,下面给出按二进制接收的代码
Private Sub MSComm1_OnComm()
On Error Resume Next
Dim BytesReceived() As Byte
Dim buffer As String
Dim HData As String
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '接收十六进制数据。并以十六进制显示
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary '设置当前以二进制数接收数据
buffer = MSComm1.Input '接收数据至字符串中
BytesReceived() = buffer '将数据转入BYTE中
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
If Len(Hex(BytesReceived(i))) = 1 Then
HData = HData & "0" & Hex(BytesReceived(i))
Else
HData = HData & Hex(BytesReceived(i))
End If
txtReceive.Text = HData
'最后将结果后入txtreceive中
MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
Next
End Select
End Sub
则所收到的数据,就会包含那五次没有响应的数据,一次接收回来。2.当InputLen 设为1时,下位机连续几次发送数据,上位机同样不响应其事件,如果发5次数据才响应此事件的话,那么,这5次的数据只为第一次发送的数据
RThreshold = 1就OK了