vb串口如何定时读取串口数据?
请问如何用串口定时读取串口数据?
用了oncomm好像不能定时读取。用timer控件如何定时读取串口数据呢?
比如,每1s读取一次串口的数据。
谢谢大家
[解决办法]
不使用OnComm通信,将通信放到Timer中,发送了通信命令后就等待其返回。类似于这个:
Option ExplicitPrivate Declare Function GetTickCount Lib "kernel32" () As LongPrivate Sub Form_Load() 'MSComm1属性设置,以下只是举例,请根据你的实际情况写 With MSComm1 .CommPort = 1 .Settings = "9600,E,7,1" .RThreshold = 0 '这个必须为:0,表示不触发OnComm的接收事件 .InBufferCount = 0 .OutBufferCount = 0 .InBufferSize = 1024 .InputMode = comInputModeText If Not .PortOpen Then .PortOpen = True End With Timer1.Interval = 5000 '设置Timer间隔时间 Timer1.Enabled = TrueEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If MSComm1.PortOpen Then MSComm1.PortOpen = FalseEnd SubPrivate Sub Timer1_Timer() Dim strIn As String Dim strOut As String Dim lngP As Long strOut = "aaaa" '此处输入你的输出内容,如果InputMode是:comInputModeBinary的话,那就要发送数组了 '将命令发出,然后进入等待接收过程,当收到结束字符,或等待时间超过100ms,时退出循环,结束等待。 MSComm1.Output = strOut lngP = GetTickCount Do DoEvents strIn = strIn & MSComm1.Input Loop Until GetTickCount - lngP > 100 Or InStr(1, strIn, "结束字符", vbTextCompare) <> 0 Debug.Print strInEnd Sub
[解决办法]
把关闭定时器和打开定时器两句注释了。
程序中考虑先向串口写数据,再接收返回数据折方法,比如
MSComm1.Output = "字符数据" '根据你和下位机的通信协议写
Do
DoEvents
Loop Until MSComm1.InBufferCount > 10 '此处的10应根据你下位机返回的字符数来调整
ReceivedLen = MSComm1.InBufferCount
大致思路如此,应该能调通。