| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:请教串口的问题
只看楼主 加入收藏
hbutwzc
Rank: 1
等 级:新手上路
威 望:2
帖 子:376
专家分:0
注 册:2008-6-17
结帖率:100%
收藏
 问题点数:0 回复次数:2 
请教串口的问题
Private Sub ctrMSComm_OnComm()
    Dim i, nInPutLen As Long
    Dim bytInputByte  As Variant                   '接收帧的变量数组
    Dim arr(1) As Byte
   
    Select Case                '选择通讯事件或错误
        Case comEvReceive                         '接收事件
            If gbRecvFullFrame Then Exit Sub      '接收完整的数据帧,退出接收
            
            nInPutLen = ctrMSComm.InBufferCount   'nInPutLen值为接收缓冲区数据大小
            'ReDim bytRecvByte(nInPutLen) As Byte
           
        While ctrMSComm.InBufferCount > 0
                bytInputByte = ctrMSComm.Input   '接收收缓冲区中的数据写入数组,删除缓冲区里的数据
               
                bytRecvByte(nRecvFrameLen) = bytInputByte(0) 'ctrMSComm.Input
                '判断帧头
                If nRecvFrameLen = 0 And bytRecvByte(nRecvFrameLen) = &H62 Then
                   bHeadFound = True
                End If
               
   
                '判断帧尾
                If bHeadFound And nRecvFrameLen = bytRecvByte(1) + 3 And _
                bytRecvByte(nRecvFrameLen) = &H20 Then
                   bTailFound = True
                End If
               
                '数据区数据求和
                If bHeadFound And bTailFound Then
                    nCheckCount = 0
                    For i = 1 To bytRecvByte(1) + 1
                        nCheckCount = nCheckCount + bytRecvByte(i)
                    Next i
                    '求效验和,CopyMemory函数 去字符组最后两个字节
                    ' M判断是否和效验和一致
                    CopyMemory arr(0), nCheckCount, 2
                     
                    If arr(0) = bytRecvByte(bytRecvByte(1) + 2) Then
                        gbRecvFullFrame = True
                    Else
                        gbRecvFullFrame = False
                    End If
                    
                    bHeadFound = False
                    bTailFound = False
                    nRecvFrameLen = 0
                    Exit Sub
                End If
               
                nRecvFrameLen = nRecvFrameLen + 1
            Wend
         
    End Select
End Sub
 bytRecvByte 是全局变量 大小为 bytRecvByte(4096) 在程序中怎么老 下标溢出
问题出在帧接收错误没有清除错误的帧,请教高手怎么清除错误的帧
搜索更多相关主题的帖子: 串口 
2008-11-27 09:53
meihonganddulon
Rank: 1
来 自:河南郑州
等 级:新手上路
帖 子:54
专家分:4
注 册:2008-7-18
收藏
得分:0 
回复 楼主 hbutwzc 的帖子
只能按帧接受
如果帧有错就清空

个性少个,光剩下性了.............
2008-11-27 10:20
hbutwzc
Rank: 1
等 级:新手上路
威 望:2
帖 子:376
专家分:0
注 册:2008-6-17
收藏
得分:0 
错误帧怎么清空
2008-11-27 10:57
快速回复:请教串口的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024047 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved