解决方案 »

  1.   

    LZ的代码是哪儿搞来拼凑的。代码又不全,依据关键代码调试发现存在许多错误。现将关键部分代码贴上,供LZ参考:
    Option ExplicitPrivate Sub Form_Load()
        MSComm1.CommPort = 1 'comport
        MSComm1.Settings = "9600,n,8,1"   '设置串口1的参数
        MSComm1.InputMode = comInputModeBinary  '接收二进制数据
        MSComm1.InBufferSize = 2048
        MSComm1.RThreshold = 1 '    MSComm1.Input = 0
        MSComm1.InputLen = 0
        MSComm1.OutBufferCount = 0
        MSComm1.InBufferCount = 0
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm()
        Dim J As Long
        Dim I As Integer
        Dim strBuff As Variant
        Dim BytReceived() As Byte
            Select Case MSComm1.CommEvent
               Case 2
                    strBuff = MSComm1.Input
                    BytReceived() = strBuff
                    For I = 0 To UBound(BytReceived)
                        Print BytReceived(I)
                    Next
                    'jieshou
                    '数据处理代码
            End Select
    End Sub
      

  2.   

    可以看到input里面有数据,但是用一个string字符串取出来后就什么都没有了;用的是二进制接收,那就不要用string变量去取缓冲区里面的数据了,也许接收的数据是不可显示的字符。有时 Select Case MSComm1.CommEvent可以看到有数据返回,经过case Input 里面的数据就变为空的,这是怎么回事,要怎么解决;有时候也不触发commevent事件
    CommEvent接收事件的触发,和RThreshold 属相有关,设置为0不会触发CommEvent接收事件,设置为1每接收到一个字节触发一个CommEvent事件。
    RThreshold 属性
          在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。语法object.Rthreshold [ = value ]Rthreshold 属性语法包括下列部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 
    说明当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。数据类型Integer
      

  3.   

    Quote: 引用 1 楼 zdingyun 的回复:

    代码不全还请指出来,我修改
      

  4.   

    Quote: 引用 1 楼 zdingyun 的回复:

    全部代码贴出来很长,这里只是把串口相关的一部分贴出来了,你要用我的贴出来的代码调试肯定会出错
      

  5.   

    Quote: 引用 2 楼 spt_petrolor 的回复:

    我接受的是十六进制的数据,应该用什么类型接收呢?
      

  6.   

    你要用byte型的数组去取数据,不要用字符串去取,ASCII值在128~254之间的字符会被消掉.
      

  7.   


    十六进制是一种数据显示或书写格式。我们说数据传输时,说的是数据编码格式,没有十六进制数据的说法。对于串口通讯,只有二进制数据(自然编码),或字符数据(ASCII 编码)之分。当然,如果你传输的是十六进制字符串,那就是字符数据。
      

  8.   


    Dim iBuf() As Byte
    Dim lnx As String
    Dim i As Long
        ReDim iBuf(bytesTotal - 1)
    '   log每个收到的字节
       i = 0
       lnx = "-->BYTE:" + Right("0000000" + Hex(i), 8) + "-"
       For i = 0 To bytesTotal - 1
           lnx = lnx + " " + Right("0" + Hex(iBuf(i)), 2)
           If i Mod 16 = 15 Then
               debug.print  lnx
               lnx = "-->BYTE:" + Right("0000000" + Hex(i + 1), 8) + "-"
           End If
       Next
       i = bytesTotal - 1
       If i Mod 16 <> 15 Then
           debug.print lnx
       End If