读书人

vb串口怎么定时读取串口数据

发布时间: 2012-08-27 21:21:57 作者: rapoo

vb串口如何定时读取串口数据?
请问如何用串口定时读取串口数据?
用了oncomm好像不能定时读取。用timer控件如何定时读取串口数据呢?
比如,每1s读取一次串口的数据。
谢谢大家

[解决办法]
不使用OnComm通信,将通信放到Timer中,发送了通信命令后就等待其返回。类似于这个:

VB code
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

大致思路如此,应该能调通。

读书人网 >VB

热点推荐