+ -
当前位置:首页 → 问答吧 → vb串口如何定时读取串口数据?

vb串口如何定时读取串口数据?

时间:2011-12-08

来源:互联网

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

作者: aciom   发布时间: 2011-12-08

不使用OnComm通信,将通信放到Timer中,发送了通信命令后就等待其返回。类似于这个:
VB code

Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private 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 = True
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If MSComm1.PortOpen Then MSComm1.PortOpen = False
End Sub

Private 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 strIn
End Sub


作者: Veron_04   发布时间: 2011-12-08

读的话,那也要设备那边有数据才行呀.

你先搞清楚设备那边发数据过来的条件是什么,比如是某条指令,还是某个IO脚变化,还是固定周期,才好进行下一步.

作者: myjian   发布时间: 2011-12-08