...
MSComm1.Settings = "115200,N,8,1"
MSComm1.InputMode = 1
MSComm1.InputLen = 0
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 512
...
Private Sub MSComm1_OnComm()  
 On Error Resume Next
    Dim BytesReceived() As Byte
    Dim buffer As String
    Dim data(0 To 31) As Byte
    Dim temp(0 To 3) As Byte
    Dim value(0 To 6) As Integer
    Dim vvalue(0 To 6) As Double
    Dim fvalue(0 To 6) As Double
    Select Case MSComm1.CommEvent
           Case comEvCD
           Case comEvCTS
           Case comEvRing
           Case comEvReceive              
            MSComm1.InputLen = 0           
            buffer = MSComm1.Input         
            BytesReceived() = buffer       
                
                For i = 0 To 31
                    data(i) = BytesReceived(i)
                Next        If data(0) = 170 And data(1) = 170 And data(30) = 187 And data(31) =187 Then                          
                        
                        temp(0) = data(2)
                        temp(1) = data(3)
                        temp(2) = data(4)
                        temp(3) = data(5)
                        CopyMemory value(0), temp(0), 4
                        vvalue(0) = Format(value(0), "0.000000 ")
                                                
                        temp(0) = data(6)
                        temp(1) = data(7)
                        temp(2) = data(8)
                        temp(3) = data(9)
                        CopyMemory value(1), temp(0), 4
                        vvalue(1) = Format(value(1), "0.000000 ")
                                                
                        temp(0) = data(10)
                        temp(1) = data(11)
                        temp(2) = data(12)
                        temp(3) = data(13)
                        CopyMemory value(2), temp(0), 4
                        vvalue(2) = Format(value(2), "0.000000 ")
                                                
                        temp(0) = data(14)
                        temp(1) = data(15)
                        temp(2) = data(16)
                        temp(3) = data(17)
                        CopyMemory value(3), temp(0), 4
                        vvalue(3) = Format(value(3), "0.000000 ")
                                                
                        temp(0) = data(18)
                        temp(1) = data(19)
                        temp(2) = data(20)
                        temp(3) = data(21)
                        CopyMemory value(4), temp(0), 4
                        vvalue(4) = Format(value(4), "0.000000 ")
                                                
                        temp(0) = data(22)
                        temp(1) = data(23)
                        temp(2) = data(24)
                        temp(3) = data(25)
                        CopyMemory value(5), temp(0), 4
                        vvalue(5) = Format(value(5), "0.000000 ")
                                                
                        temp(0) = data(26)
                        temp(1) = data(27)
                        temp(2) = data(28)
                        temp(3) = data(29)
                        CopyMemory value(6), temp(0), 4
                        vvalue(6) = Format(value(6), "0.000000 ")                        #####                        For i = 0 To 6
                            fvalue(i) = vvalue(i) * 5 / 419430
                                                   
                            chanel1(i).Text = Format(fvalue(i), "0.000000 ")
                            
                        Next
                        Print #1, Format(fvalue(0), "0.000000 ") & Space(15 - Len("fvalue (0)")) & "" & _
                                  Format(fvalue(1), "0.000000 ") & Space(15 - Len("fvalue (1)")) & "" & _
                                  Format(fvalue(2), "0.000000 ") & Space(15 - Len("fvalue (2)")) & "" & _
                                  Format(fvalue(3), "0.000000 ") & Space(15 - Len("fvalue (3)")) & "" & _
                                  Format(fvalue(4), "0.000000 ") & Space(15 - Len("fvalue (4)")) & "" & _
                                  Format(fvalue(5), "0.000000 ") & Space(15 - Len("fvalue (5)")) & "" & _
                                  Format(fvalue(6), "0.000000 ") & Space(15 - Len("fvalue (6)"))
                   End If
           Case comEvSend
    End Select
End Sub定时器每200ms发送指令EB给下位机,上位机接受到的数据格式如下:
 AA AA FF FF E3 D5 FF FF E3 D5 FF FF E3 D5 FF FF E3 D5 FF FF E3 D5 FF FF E3 D5 FF FF E3 D5 BB BB
起始:AA AA
终止:BB BB
中间的数据需要解析,第一次用VB,对语法不是特别清楚,不知道是哪里出了问题,#####处,十六进制代码都是正确的,但是后面的数据解析出了问题,请高手指教,不胜感激.

解决方案 »

  1.   

    错误在这种地方:CopyMemory value(0), temp(0), 4 
    数组地址及长度的用法都有问题。
      

  2.   

    你temp字节数组4字节,你value元素是integer两字节,怎么放下四字节内容。重新定义你的Dim value(0 To 6) As Integer为dim value(0 to 6) as long试一下CopyMemory value(0), temp(0), 4  
      

  3.   

    问题解决了,chinaboyzyq说的是其中一个问题,还有一个问题是:
      temp(0) = data(5)
      temp(1) = data(4)
      temp(2) = data(3)
      temp(3) = data(2)
    谢谢大家.