编写的读取串行通信数据,在接收数据时不稳定,在正确的数据和零之间不停跳动。代码如下:(用了一个定时器):
Private Sub Timer1_Timer()
On Error GoTo Err
WunCount = 0
Do
    WunCount = WunCount + 1
    MSC.InBufferCount = 0
    Do
        dummy = DoEvents()
        UnConnect = UnConnect + 1
        If UnConnect > 10000 Then
            Exit Do
        End If
        Loop Until MSC.InBufferCount >= 30
        If UnConnect > 10000 And WunCount >= 60 Then
            WeightWindow.Caption = "未联机"
            LLK.Caption = "系统出错,请检查"
            UnConnect = 0
            Exit Sub
        End If
        If UnConnect < 10010 Then
            UnConnect = 0
            k = MSC.Input
            If Len(k) < 7 Then Exit Sub
            i = 1
Rec:
            If MID(k, i, 1) = "=" Then
               Yhh(1) = MID(k, i + 1, 1)
               Yhh(2) = MID(k, i + 2, 1)
               Yhh(3) = MID(k, i + 3, 1)
               Yhh(4) = MID(k, i + 4, 1)
               Yhh(5) = MID(k, i + 5, 1)
               Yhh(6) = MID(k, i + 6, 1)
               Yhh(7) = MID(k, i + 7, 1)
               Jhh = Yhh(7) + Yhh(6) + Yhh(5) + Yhh(4) + Yhh(3) + Yhh(2) + Yhh(1)
               Weight = Val(Jhh)
               Exit Do
            Else
               i = i + 1
               If i >= 20 Then Exit Sub
            End If
               GoTo Rec
      End If
      UnConnect = 0
      Loop Until WunCount > 60
      WeightWindow.Caption = Weight
      If Weight < 500 And Weight > 0 Then
            LLK.Caption = "重量小于最小可记录重量(500Kg)"
      End If
      If Weight > 500 Then
            LLK.Caption = "允许记录称重数据"
      End If
      If Weight = 0 Then
            LLK.Caption = "称量系统允许加载"
      End If
      If Weight > 50000 Then
            LLK.Caption = "秤已过载,请立即卸载!"
      End If
Err:
    Exit Sub
End SubPrivate Sub Form_Load()
On Error GoTo Err1
    i = 0
    bl = False
    KsTime = Now()
    Me.Caption = LgUnit & "称量系统[CQMine.Com]"
    Sett = "9600,n,8,1"
    Timer1.Enabled = True
    Timer1.Interval = 20
    Comk = 1
    MSC.InBufferSize = 50
Comm:
    MSC.Settings = Sett '设置
    MSC.CommPort = Comk '端口设置
    If MSC.PortOpen = False Then
        MSC.PortOpen = True
    End If
    Exit Sub
Err1:
    Comk = Comk + 1
    If Comk > 2 Then GoTo Err2
    GoTo Comm
Err2:
    MsgBox "请检查串口及卡", 48, App.Title
End Sub

解决方案 »

  1.   

                UnConnect = 0 
                If MSC.InBufferCount < 7 Then Exit Sub
                k = MSC.Input 
                i = 1 推荐采用事件驱动,不要用 Timer。
      

  2.   

    你在TIMER的一个时间片内要完成三重循环,并且循环内部还有不少函数调用(你的那个GOTO实际上也是一个循环), 除非你的TIMER触发时间间隔比较长, 否则很容易就会跳过某些东西了.