代码在下面,底层函数只是发送(1400bytes),pc端的vb只是接收,打大部分都接收不正
确,如果用调试助手是可以接收正确的,波特率只要高于9600肯定又问题。由于51端的发送
是别人负责的,用调试助手也是没问题的,为什么用vb接收就有问题。请xdjm帮帮偶吧,要
郁闷死了,就这几句话在下面!
Dim countertest As LongPrivate Sub Command1_Click()
    End
End SubPrivate Sub Form_Load()
    '串口初始化
    MSComm1.CommPort = 1              '设置串口1
    MSComm1.Settings = "115200,N,8,1" '波特率:115200 无奇校验,8位数据,1位停止

    MSComm1.InputLen = 0              '每次从接收缓冲区中要读的字符数
    MSComm1.InBufferSize = 1024 * 10  '设置接收缓冲区为256字节
    MSComm1.OutBufferSize = 1024      '设置发送缓冲区为256字节
    MSComm1.PortOpen = True           '打开串口1
    MSComm1.SThreshold = 0            '发送数据的时候不产生oncomm事件
    MSComm1.RThreshold = 1            '每1个字符到接收缓冲区时都触发接收事件
    MSComm1.InBufferCount = 0         '清除接收缓冲区数据
    MSComm1.OutBufferCount = 0        '清除发送缓冲区数据End SubPrivate Sub MSComm1_OnComm()        '接收数据触发OnComm()事件
    Dim Buffer As Variant           '接收数据,必须用这种类型的变量
    Dim ReceiveTempArr() As Byte    '接受的临时数组
    Dim Bufcount As Integer         '接收数据包的字符个数
    Select Case MSComm1.CommEvent     '在CommEvent中接收数据
        Case comEvReceive           '已经接收到>=规定的字符个数啦
            Bufcount = MSComm1.InBufferCount
            countertest = countertest + Bufcount
            Buffer = MSComm1.Input
            ReceiveTempArr = Buffer
             
            If countertest > 1300 Then
                Debug.Print countertest
            End If
    End SelectEnd Sub   

解决方案 »

  1.   

    你的INPUTMODE属性是怎么设的??
    跟下位机的协议必须一致,一定要判断停止位。
      

  2.   

    两个问题:
    1。inputmode属性要设成字节方式;
    2。在OnComm事件中的第一条可执行代码前加上
    MSComm1.RThreshold = 0
    End Sub语句前加上
    MSComm1.RThreshold = 0
      

  3.   

    上面的最后一句错了:
    MSComm1.RThreshold = 1
      

  4.   

    1、inputmode属性:设置为二进制
    2、两边的波特率是一样的
    3、一位停止位这些都是初始化时搞定的,