有二台电子秤:一台: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