我的MSComm控件属性设置如下:
MSComm.PortOpen = True
MSComm.Settings = "9600,N,8,1"
MSComm.OutBufferCount = 0 '清空发送缓冲区
MSComm.InBufferCount = 0
MSComm.RThreshold = 5 '滑空接收缓冲区
MSComm.InputLen = 0
MSComm.InputMode = comInputModeBinary '接收二进制数据
MSComm.SThreshold = 1数据接收函数如下:
Private Sub MSComm_OnComm()
Dim data(5) As Byte
Select Case MSComm.CommEvent
Case comEvReceive
data()= MSComm.Input
End Sub
这个肯定是错误的,请问怎么才能通过MSComm.Input得到多个字节呢?我设置了MSComm.RThreshold = 5
MSComm.PortOpen = True
MSComm.Settings = "9600,N,8,1"
MSComm.OutBufferCount = 0 '清空发送缓冲区
MSComm.InBufferCount = 0
MSComm.RThreshold = 5 '滑空接收缓冲区
MSComm.InputLen = 0
MSComm.InputMode = comInputModeBinary '接收二进制数据
MSComm.SThreshold = 1数据接收函数如下:
Private Sub MSComm_OnComm()
Dim data(5) As Byte
Select Case MSComm.CommEvent
Case comEvReceive
data()= MSComm.Input
End Sub
这个肯定是错误的,请问怎么才能通过MSComm.Input得到多个字节呢?我设置了MSComm.RThreshold = 5
解决方案 »
- 有没有实现里面说的功能的API函数,求达人解决~~
- 如何在程序中动态加载一个新的窗体
- 如何用MCI全屏播放AVI动画
- 初学问题:如何让VB的FORM在运行时不能改变大小?
- 请问各位用mscomm控件+猫怎样在两台机器之间进行文件传输(所有的文件)
- 我想把自己做的几个小软件放在我的网站上,加上超链接后上传,但不能显示软件,请问应怎样操作?具体操作方法是什么???谢谢!!!
- 菜鸟的ACCESS数据库问题,在线等!
- 如何在VB里面用Winsock控件发送较大的EXCEL文件(1-2M)到另一台机器上?
- ISAM错误,高手帮忙呀
- 请问怎么知道一个进程使用了多少内存?
- dim ... as 的问题
- 求openrecordset这个方法的一点知识??
Dim BytReceived() As Byte
Dim strData As StringPrivate Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Text1 = ""
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
If Len(strData) = 10 Then
strData = ""
End If
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
Text1 = strData
End Function
1 延时。进入 OnComm 事件后,等待适当时间再接收。Private Sub MSComm_OnComm()
Dim data(5) As Byte
Select Case MSComm.CommEvent
Case comEvReceive
Sleep 100
data()= MSComm.Input
End Sub2 等待至预定数量的字节数后再接收:
Private Sub MSComm_OnComm()
Dim data(5) As Byte
Select Case MSComm.CommEvent
Case comEvReceive
Do Until MSComm.InBufferCount = myCount
DoEvents
Loop
data()= MSComm.Input
End Sub第二类方法要么是固定长度数据包(也可以用你的 RThreshold 属性设置来处理),要么是数据打包传送,在包头中说明数据长度。
在后一种情况下,先将 RThreshold 和 InputLen 设置成包头长度。事件发生后取一次包头。然后将 InputLen 改为0 或者数据实际长度,并等待数据完全到达。
不知道是否这样
每个机器周期只发送一个字节
发送五个自己就需要5个机器周期
这种情形下VB接收数据需要怎么一种方式呢?
Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Text1 = ""
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
strData = "" '本句依实际情况使用
End Select
End Sub
BytReceived() = strBuff
得到了串口通信过来的数据,那为什么不直接取数组
BytReceived里面的数据呢?
出现类型不匹配的错误
请问这是怎么回事啊?