我用Mscomm做了一个串口调试软件,下位机总共发上来77个字节的信文,可是无论我把inputlen属性设多大,却只能最多收到前8个字节的数据,只是为什么呀?我的inbuffersize=1024,已经很大了,谢谢
Private Sub MSComm2_OnComm() 
  Select Case MSComm2.CommEvent
    Case comEvReceive
             Call Rec_disp
    End Select
 MSComm2.PortOpen = False
End SubPublic Sub Rec_disp()
Dim Buffer() As Byte   
Dim Arr() As Byte
Dim Recbuf() As Byte
Dim Recbufsum() As Byte       
Static Intcount As Integer
Static Templen As Integer
Dim P, P1, N As Integer
Static Bufcount As Integer
Dim Chksum() As Byte
Dim Chkresult As Boolean
Dim Recsum() As Byte
Dim N_so_mode(7) As Byte
Dim Status(15) As Boolean    Buffer = MSComm2.Input
    Arr = Buffer
 
 余下的省略了,到这步时,oncomm事件已经触发了,可是数组Arr里只有8个字节的内容,这是为什么呀??谢谢

解决方案 »

  1.   

    你收的时候,下位机还没有发完。MSComm2.Rthreshold = 77
      

  2.   

    MSComm1.InputMode = comInputModeBinary'设为二进制方式接收
      

  3.   

    OnComm 事件发生的时候, 并不是你的下微机77个字节已经发完, 而是在发送的过程中, 被你的上微机监测到通讯数据, 此时你的 Buffer = MSComm2.Input 取得的只是已经接收的部分, 还有一些未接收的需要等待下一轮OnComm事件, 但看你的程序:
    Private Sub MSComm2_OnComm() 
      Select Case MSComm2.CommEvent
        Case comEvReceive
                 Call Rec_disp
        End Select
        MSComm2.PortOpen = False  <--- 一轮接收就关闭了,那自然收不到后边的数据啦
    End Sub需要这样:
    Private Sub MSComm2_OnComm() 
      Select Case MSComm2.CommEvent
        Case comEvReceive
             if MSComm2.InBufferCount>=77 then
                 Call Rec_disp
             End if
        End Select
    End Sub