请问高手:在VB里面读串口怎样一会读取一个字节一会读取100个字节
请问高手:在VB里面读串口怎样一会读取一个字节一会读取100个字节 --------------------编程问答-------------------- 请LZ完整描述数据帧结构. --------------------编程问答-------------------- 串口不能主动“读”多少字节,而是被动接受数据存放在缓冲区,你只能决定缓冲区内达到多少字节后一次性处理。下面是用 Microsoft Comm Control 6.0 的例子
Option Explicit--------------------编程问答-------------------- 串口通信的特点就是串行,数据并非一次传过来多少个,而是一个一个的接收到串口缓冲区中,你只能选择一次从串口缓冲区中读多少个,这个可以由MSComm控件的RThreshold属性实现,
Private Sub Command1_Click()
'每次处理1字节'
MSComm1.RThreshold = 1
MSComm1.InputLen = 1
End Sub
Private Sub Command2_Click()
'每次处理100字节'
MSComm1.RThreshold = 100
MSComm1.InputLen = 100
End Sub
Private Sub Form_Load()
MSComm1.InputMode = comInputModeBinary
Call Command1_Click '默认方式'
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim a() As Byte
Dim i As Long
Select Case MSComm1.CommEvent
Case comEvReceive
a = MSComm1.Input
'显示数据'
For i = 0 To UBound(a)
If i > 0 Then Debug.Print "-";
Debug.Print Right$("0" & Hex$(a(i)), 2);
Next
Debug.Print
End Select
End Sub
一次接收一个:RThreshold=1
一次接收100个,RThreshold=100
一次读取串口缓冲区中所有的数据,RThreshold=0 --------------------编程问答-------------------- 学习中 --------------------编程问答-------------------- 顶 --------------------编程问答--------------------
红色部分RThreshold=0表示无论多少字节都不会触发OnComm事件 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 2楼说的很明白了 --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- 读COM口的数据也是用这个控件吗??
--------------------编程问答-------------------- 即使设置了RThreshold = REC_LEN,但在实际使用时发现有时并不是REC_LEN个数据时触发事件,有可能大于REC_LEN.所以不能保证接收到的数据是完整的一条记录。
在OnComm事件中
MSComm1.InputLen = (MSComm1.InBufferCount \ REC_LEN) * REC_LEN '读取完整个数的的记录n条
bytReceive = MSComm1(index).Input
MSComm1(index).InputLen = 0
补充:VB , COM/DCOM/COM+