编写的读取串行通信数据,在接收数据时不稳定,在正确的数据和零之间不停跳动。代码如下:(用了一个定时器):
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
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
If MSC.InBufferCount < 7 Then Exit Sub
k = MSC.Input
i = 1 推荐采用事件驱动,不要用 Timer。