求教win7下使用mscomm控件的问题

lang135230 2012-09-26 03:26:34
win7下使用mscomm的控件总,一次接收一个数据没问题,但是一次接收6个字节的数据的时候,把接收的数据先放到一个string里,然后存入一个byte的数组,但是数组总是运行提示下标越界。但是我机子是win7的,而且程序的编译生成都是在win7的环境下进行的,别的的win7下用自带串口就出下标越界的错误。是不是win7下的mscomm的使用时候接收的数据个数有问题??
...全文
286 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
王二.麻子 2013-12-04
  • 打赏
  • 举报
回复
如果MSComm.RThreshold = 6,那么产生onComm时间,必然缓冲区有6个字符,或者更多。 经过等待,缓冲区可以有超过6个字符的。 ReDim recbuf(0 To inlen - 1) 这样定义就已经限制了接收去的数量了。如果mscomm缓冲区超过inlen会。。。在慢机器上存在一种可能,执行到下面读取缓冲区的时候,缓冲区是超过6个字符的。 recbuf = MSComm.Input 后面的部分,本来可以一次读取缓冲区的,你偏偏要一个字节一个字节读,你也不累。 你如果就想读6个字节,就设置mscomm.inputlen属性为6好了。
lang135230 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
是这台机器更快了。几句代码运行的时间,不足以让串口传输 6 字节。
[/Quote]不是的,那个事件是接收6个字节才会触发的,怎么你总是说接收不足6个字节?我一直不理解,
rivate Sub Form_load()
f1 = False '先置开关的标记位为关
f2 = False
f3 = False
f4 = False
Dim i As Integer
MSComm.Settings = "9600,n,8,1" '串口的初始化设置,9600第一位代表波特率
MSComm.InputMode = comInputModeBinary
MSComm.RThreshold = 6
MSComm.InputLen = 6
MSComm.OutBufferCount = 0
MSComm.InBufferCount = 0
,这是串口的初始化,设置了接收6个字节触发on_comm的事件,不同意你的说法
of123 2012-09-28
  • 打赏
  • 举报
回复

是这台机器更快了。几句代码运行的时间,不足以让串口传输 6 字节。
贝隆 2012-09-27
  • 打赏
  • 举报
回复
我不认为是系统的问题,应该是程序对接受数据处理有略为不妥的地方。建议你把代码贴上来
lang135230 2012-09-27
  • 打赏
  • 举报
回复
Private Sub MSComm_OnComm()
Dim a&
Dim buffer As String
Dim recbuf(0 To 5) As Byte
Dim inlen As Integer
Dim i As Integer
Dim x As Variant
Dim c As Variant
On Error GoTo error1
Select Case MSComm.CommEvent
Case comEvReceive
inlen = MSComm.InBufferCount
Do Until inlen >= 6
DoEvents
inlen = MSComm.InBufferCount
Loop
i = 0
For Each c In MSComm.Input
recbuf(i) = c
i = i + 1
Next c
Case comFrame
x = MsgBox("帧错误!", vbCritical, "接受数据错误!!")
Exit Sub
Case comEventOverrun
新代码,问题已解决,谢谢一楼
lang135230 2012-09-27
  • 打赏
  • 举报
回复
嗯,贴代码。
Private Sub MSComm_OnComm()
Dim a&
Dim recbuf() As Byte
Dim inlen As Integer
Dim i As Integer
Dim x As Variant
'On Error GoTo error1
Select Case MSComm.CommEvent
Case comEvReceive
inlen = MSComm.InBufferCount
Do Until inlen >= 6
DoEvents
inlen = MSComm.InBufferCount
Loop
ReDim recbuf(0 To inlen - 1)
recbuf = MSComm.Input
Case comFrame
x = MsgBox("帧错误!", vbCritical, "接受数据错误!!")
Exit Sub
Case comEventOverrun
x = MsgBox("数据丢失", vbCritical, "接受数据错误!!")
Exit Sub
End Select
Select Case recbuf(1)
问题在于我一调用recbuf数组中的任意元素都会出现下标越界

7,762

社区成员

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

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