首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

求教win7上使用mscomm控件的有关问题

2012-12-17 
求教win7下使用mscomm控件的问题win7下使用mscomm的控件总,一次接收一个数据没问题,但是一次接收6个字节的

求教win7下使用mscomm控件的问题
win7下使用mscomm的控件总,一次接收一个数据没问题,但是一次接收6个字节的数据的时候,把接收的数据先放到一个string里,然后存入一个byte的数组,但是数组总是运行提示下标越界。但是我机子是win7的,而且程序的编译生成都是在win7的环境下进行的,别的的win7下用自带串口就出下标越界的错误。是不是win7下的mscomm的使用时候接收的数据个数有问题??
[解决办法]
我不认为是系统的问题,应该是程序对接受数据处理有略为不妥的地方。建议你把代码贴上来
[解决办法]
嗯,贴代码。
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数组中的任意元素都会出现下标越界
[解决办法]
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
新代码,问题已解决,谢谢一楼
[解决办法]

是这台机器更快了。几句代码运行的时间,不足以让串口传输 6 字节。

[解决办法]
该回复于2012-09-28 09:19:40被版主删除
[解决办法]

引用:
是这台机器更快了。几句代码运行的时间,不足以让串口传输 6 字节。
不是的,那个事件是接收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的事件,不同意你的说法

热点排行