'定义一个数据缓冲池,这里用Collection对象作缓冲池,你也可以用数组或其他东西Dim coldata As CollectionPrivate Sub Form_Load() '初始化数据缓冲池 Set coldata = New Collection '初始化并打开串口 MSComm1.CommPort = 1 MSComm1.Settings = "9600, n, 8, 1" MSComm1.RThreshold = 1 '设置为每收到一个字节数据触发一次Oncomm事件 MSComm1.InputMode = comInputModeBinary MSComm1.PortOpen = TrueEnd SubPrivate Sub MSComm1_OnComm()Dim yy As LongSelect Case MSComm1.CommEventCase comEvReceive Dim xx() As Byte xx = MSComm1.Input For yy = 0 To UBound(xx) - 1 '把串口接收到的所有数据都先保存到数据缓冲池暂时不去处理,因为无法保证数据已经接收完整 coldata.Add xx(yy) Next yyEnd SelectEnd Sub'用Timer控件循环对接收到的数据进行处理,如果你会用多线程的话可以另开一个线程来单独处理Private Sub Timer1_Timer() Dim xx As Long For xx = 1 To coldata.Count '遍历所有串口收到的数据 '代码略,按照通讯协议对串口收到的数据进行分析和处理 '处理完成及时把已处理的数据从缓冲池中移除 Next xxEnd Sub