有二台电子秤:一台:9600,N,8,1,另一台:1200,N,7,1“9600,N,8,1”这台使用以下代码可以收到,“1200,N,7,1”却收不到数据,不知道为什么?用串口调试工具也都能取到数。(1)“1200,N,7,1”这台用串口取数的到据如下(187.7kg),这台电子秤会取MSComm1.CommEvent的值为1004
+8 001877000000
+8 001876000000
+8 001876000000
+8 001877000000
+8 001876000000
+0 001876000000
+0 001877000000
+0 001877000000
+0 001876000000
+0 001877000000
+0 001877000000
+0 001876000000
+0 001877000000
(2)“9600,N,8,1”这台用串口取数的到据如下:(2.2kg)
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
(3)VB中的代码:Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1" '或者"1200,N,7,1"
MSComm1.InBufferCount = 0 '清接收缓冲区
MSComm1.InBufferSize = 4096 '接收区大小
MSComm1.RThreshold = 50 '接收缓冲区每收到100个字符都产生OnComm事件
MSComm1.InputLen = 50 '设一次读入的长度,可根据数据格式设置
MSComm1.SThreshold = 1 '缓冲区完全为空时产生Mscomm事件
If Not MSComm1.PortOpen Then '打开串口
MSComm1.PortOpen = True
Else
MsgBox "串口已打开!"
End If
End Sub
Private Sub MSComm1_OnComm()
On Error GoTo f_Error
Dim begin1, end1 As Double
Dim str As String
Dim buffer, temp, Counter As Variant
Dim ERMsg, EVMsg As String
Dim GetStr As String '串口取得到的数据
Select Case MSComm1.CommEvent
Case comEvReceive
buffer = MSComm1.Input
temp = buffer
Call WriteINI(App.Path & "\jintianComTest.ini", "COMtest", "1", temp)
While Len(temp) > 0
begin1 = InStr(temp, "+")
end1 = InStr(temp, Chr(13))
If end1 = 0 Then temp = ""
If end1 > begin1 And (begin1 > 0) And (end1 - begin1 = 15) Then
str = Mid(temp, begin1 + 1, end1 - begin1 - 1)
Call WriteINI(App.Path & "\jintianComTest.ini", "COMtest", "2", str)
GetStr = Trim(Val(Mid(str, 1, Len(str) / 2))) + "." + Trim(Val(Mid(str, Len(str) / 2 + 1)))
GetStr = Trim(Format(GetStr, "0.00"))
Text1.Text = GetStr
flag = flag + 1
End If
temp = Mid(temp, end1 + 1)
Wend
MSComm1.InBufferCount = 0
Counter = Timer + 10
Do While Timer > Counter
DoEvents
Loop
Case comEvEOF
EVMsg = "检测到文件结尾!!!"
MSComm1.InBufferCount = 0
Case comFrame
ERMsg = "帧出错!!!"
MSComm1.InBufferCount = 0
Case comRxParity
ERMsg = "奇偶错!!!"
MSComm1.InBufferCount = 0
End Select
If Len(EVMsg) Then
ElseIf Len(ERMsg) Then
Beep
MSComm1.PortOpen = False
End If
Exit Sub
f_Error:
MsgBox "错误码:" & Err.Number & Chr(13) & Err.Source & ":" & Err.Description & ",通讯口", vbExclamation, "提示"
End Sub
+8 001877000000
+8 001876000000
+8 001876000000
+8 001877000000
+8 001876000000
+0 001876000000
+0 001877000000
+0 001877000000
+0 001876000000
+0 001877000000
+0 001877000000
+0 001876000000
+0 001877000000
(2)“9600,N,8,1”这台用串口取数的到据如下:(2.2kg)
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
+0 22 00
(3)VB中的代码:Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1" '或者"1200,N,7,1"
MSComm1.InBufferCount = 0 '清接收缓冲区
MSComm1.InBufferSize = 4096 '接收区大小
MSComm1.RThreshold = 50 '接收缓冲区每收到100个字符都产生OnComm事件
MSComm1.InputLen = 50 '设一次读入的长度,可根据数据格式设置
MSComm1.SThreshold = 1 '缓冲区完全为空时产生Mscomm事件
If Not MSComm1.PortOpen Then '打开串口
MSComm1.PortOpen = True
Else
MsgBox "串口已打开!"
End If
End Sub
Private Sub MSComm1_OnComm()
On Error GoTo f_Error
Dim begin1, end1 As Double
Dim str As String
Dim buffer, temp, Counter As Variant
Dim ERMsg, EVMsg As String
Dim GetStr As String '串口取得到的数据
Select Case MSComm1.CommEvent
Case comEvReceive
buffer = MSComm1.Input
temp = buffer
Call WriteINI(App.Path & "\jintianComTest.ini", "COMtest", "1", temp)
While Len(temp) > 0
begin1 = InStr(temp, "+")
end1 = InStr(temp, Chr(13))
If end1 = 0 Then temp = ""
If end1 > begin1 And (begin1 > 0) And (end1 - begin1 = 15) Then
str = Mid(temp, begin1 + 1, end1 - begin1 - 1)
Call WriteINI(App.Path & "\jintianComTest.ini", "COMtest", "2", str)
GetStr = Trim(Val(Mid(str, 1, Len(str) / 2))) + "." + Trim(Val(Mid(str, Len(str) / 2 + 1)))
GetStr = Trim(Format(GetStr, "0.00"))
Text1.Text = GetStr
flag = flag + 1
End If
temp = Mid(temp, end1 + 1)
Wend
MSComm1.InBufferCount = 0
Counter = Timer + 10
Do While Timer > Counter
DoEvents
Loop
Case comEvEOF
EVMsg = "检测到文件结尾!!!"
MSComm1.InBufferCount = 0
Case comFrame
ERMsg = "帧出错!!!"
MSComm1.InBufferCount = 0
Case comRxParity
ERMsg = "奇偶错!!!"
MSComm1.InBufferCount = 0
End Select
If Len(EVMsg) Then
ElseIf Len(ERMsg) Then
Beep
MSComm1.PortOpen = False
End If
Exit Sub
f_Error:
MsgBox "错误码:" & Err.Number & Chr(13) & Err.Source & ":" & Err.Description & ",通讯口", vbExclamation, "提示"
End Sub
On Error GoTo f_Error害人不浅啊