863
社区成员
发帖
与我相关
我的任务
分享
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 17
MSComm1.InputLen = 0
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
'定义一个数据缓冲池,这里用Collection对象作缓冲池,你也可以用数组或其他东西
Dim coldata As Collection
Private 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 = True
End Sub
Private Sub MSComm1_OnComm()
Dim yy As Long
Select Case MSComm1.CommEvent
Case comEvReceive
Dim xx() As Byte
xx = MSComm1.Input
For yy = 0 To UBound(xx) - 1 '把串口接收到的所有数据都先保存到数据缓冲池暂时不去处理,因为无法保证数据已经接收完整
coldata.Add xx(yy)
Next yy
End Select
End Sub
'用Timer控件循环对接收到的数据进行处理,如果你会用多线程的话可以另开一个线程来单独处理
Private Sub Timer1_Timer()
Dim xx As Long
For xx = 1 To coldata.Count '遍历所有串口收到的数据
'代码略,按照通讯协议对串口收到的数据进行分析和处理
'处理完成及时把已处理的数据从缓冲池中移除
Next xx
End Sub