frmMain.ctrMSComm.InBufferSize = 1024
       frmMain.ctrMSComm.OutBufferSize = 512       frmMain.ctrMSComm.InputLen = 0
       frmMain.ctrMSComm.InBufferCount = 0
       frmMain.ctrMSComm.RThreshold = 1                          
'*****************************************
'此处添加处理接收的代码
'*****************************************      frmMain.ctrMSComm.InputMode = comInputModeBinary
      intInputLen = frmMain.ctrMSComm.InBufferCount
      Debug.Print intInputLen
      ReDim bytInput(intInputLen)
      bytInput = frmMain.ctrMSComm.Input
    发送12组十六进制数据,利用MSComm接收只能收到8组.但发送8组以下的数据,接收正常.请问是为什么?急!再此先谢过各位!

解决方案 »

  1.   

    刚刚看了一楼提供的串口调试代码,代码中MSComm1.Output发送的数据是字节型,MSComm1.Input接收的数据是字符串型,可以这样吗?
    我里面发送和接收的数据类型都是字节型,为什么我把MSComm1.Input接收的数据改为字符串型会提示"类型不匹配"?
    接收的数据不全和数据类型有关系吗?谢谢各位~
      

  2.   

    为防止数据丢失,在接收数据前延时一下看看
    我做过的丢失数据都是延时问题,
    另外你定义的是二进制
    frmMain.ctrMSComm.InputMode = comInputModeBinary
    模式,接收的是字节型的数据所以才类型不匹配
      

  3.   

    延时可以用个循环或者用Sleep函数,另外,LZ没有使用事件吗?接受代码放事件中,接受丢数的可能性大大减少。
      

  4.   

    Private Sub ctrMSComm_OnComm()
           
        Dim bytInput() As Byte
        Dim intInputLen As Integer
        
        Select Case frmMain.ctrMSComm.CommEvent
            Case comEvReceive
                If blnReceiveFlag Then
                    If Not frmMain.ctrMSComm.PortOpen Then
                        frmMain.ctrMSComm.CommPort = intPort
                        frmMain.ctrMSComm.Settings = strSet
                        frmMain.ctrMSComm.PortOpen = True
                    End If
                    
    '*****************************************
    '此处添加处理接收的代码
    '*****************************************      frmMain.ctrMSComm.InputMode = comInputModeBinary
          intInputLen = frmMain.ctrMSComm.InBufferCount
          Debug.Print intInputLen
          ReDim bytInput(intInputLen)
          bytInput = frmMain.ctrMSComm.Input
     
                    If Not blnAutoSendFlag And Not blnReceiveFlag Then
                        frmMain.ctrMSComm.PortOpen = False
                    End If
                End If
                
        End Select这是MSComm段代码,请教高手帮我看看为什么会出现最上面陈述的问题,先谢谢了
      

  5.   

    LZ:你对我提供的代码理解是有错误,发送与接收都是按字节(Byte)方式进行
    MSComm1.InputMode = comInputModeBinary      
    上述设置说明按2进制接收,即按字节(Byte)方式接收,仅是通过jieshou()函数,将接收的字节数据处理为16进制字符串便于在文本显示和阅读.
      

  6.   

    LZ:你的代码源自"邮电出版社"的"VISUAL BASIC 串口通信工程开发实例导航"一书的"第1章  串口编程调试精灵"的代码.没看到你是如何对:
    bytInput进行数据处理的.
    原来代码是:
    Private Sub ctrMSComm_OnComm()
        Dim bytInput() As Byte
        Dim intInputLen As Integer
        Select Case frmMain.ctrMSComm.CommEvent
            Case comEvReceive
                If blnReceiveFlag Then
                    If Not frmMain.ctrMSComm.PortOpen Then
                        frmMain.ctrMSComm.CommPort = intPort
                        frmMain.ctrMSComm.Settings = strSet
                        frmMain.ctrMSComm.PortOpen = True
                    End If
                    '此处添加处理接收的代码
                      frmMain.ctrMSComm.InputMode = comInputModeBinary
                    intInputLen = frmMain.ctrMSComm.InBufferCount
                    ReDim bytInput(intInputLen)
                    bytInput = frmMain.ctrMSComm.Input
                    Call InputManage(bytInput, intInputLen)
                    Call GetDisplayText
                    Call display
                    If Not blnAutoSendFlag And Not blnReceiveFlag Then
                        frmMain.ctrMSComm.PortOpen = False
                    End If
                End If
        End Select
    End Sub
    LZ没有数据处理的关键代码,所以无法提供意见.
      

  7.   

    楼主看看这个:http://download.csdn.net/source/1262066
    这是一个用MSComm控件编写的串口调试器。
      

  8.   

    http://download.csdn.net/source/1498637
    http://download.csdn.net/source/1498644
      

  9.   

    请问下bytInput需要怎么处理,我不是很懂
    现在我不能理解的是运行后代码中intInputLen的取值不能大于8,请问是什么原因
      

  10.   

    LZ:我在1楼提供的链接的串口调试软件你看过吗?它是VB的工程源代码,它能解决你的问题.
      

  11.   


    将这个玩意放在代码的最前面'Sleep
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)然后在oncomm 之后 加上 sleep(这里添加数字)例如 sleep(20)就是延时20毫秒至于为什么要延时?很抱歉 不清楚! 另外告诉你  估计没人清楚
      

  12.   

    用这个工具看是在哪丢数据的,就知道该怎么办了下载地址:
    http://download.cnet.com/ComTrace/3000-2218_4-75156892.html?tag=mncol感觉好别忘了给个review(评论),谢谢!