首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

急VB串口操作有关问题,为什么取不到数

2012-02-19 
急,求助:VB串口操作问题,为什么取不到数有二台电子秤:一台:9600,N,8,1,另一台:1200,N,7,1“9600,N,8,1”这台

急,求助:VB串口操作问题,为什么取不到数
有二台电子秤:一台: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


[解决办法]
http://download.csdn.net/source/1262066
[解决办法]
把On Error GoTo f_Error去掉,看看哪里错了
On Error GoTo f_Error害人不浅啊

热点排行
Bad Request.