MSCOMM控件设计通讯程序,请高手们诊断这段代码有什么问题?
XK3105A称重显示控制器 济南金钟电子衡器
信号格式
类型:EIA-RS232C/20mA电流环
格式:波特率:1200、2400、4800、9600
数据位:7位
停止位:1位
校验位:1位
代码: ASCII
下面是程序中用的代码,取不出数据。请大家提出看法,帮忙修改!
有兴趣者可以qq 探讨,34826075
也可发送邮件: wszxue@sohu.com
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.InBufferCount = 0
MSComm1.InputLen = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.Settings = "9600,E,7,1"
MSComm1.RThreshold = 1
MSComm1.PortOpen = True ' 打开端口
errhandle:
Screen.MousePointer = vbDefault
End Sub
Private Sub MSComm1_OnComm()
Dim Buffer As Variant
Dim strTemp As String
Dim bytTemp(12) As Byte
Dim i As Integer
With MSComm1
Select Case .CommEvent
Case comEvSend
Case comEvReceive
Buffer = .Input
bytTemp(0) = Buffer(0)
If bytTemp(0) = &H2 Then '判断是否为开始标记STX
.RThreshold = 0 '关闭接收事件,接收剩余的重量数据
i = 0
Do
DoEvents
If .InBufferCount > 0 Then
Buffer = .Input
i = i + 1
bytTemp(i) = Buffer(0)
End If
Loop Until i = 12
End If
strTemp = ""
For i = 2 To 12
strTemp = strTemp & Chr(bytTemp(i))
Next i
Select Case Val(bytTemp(1) And &H7)
Case 2
txtRealWeight.Text = Val(strTemp)
Case 3
txtRealWeight.Text = Format(Val(strTemp) / 10, "#0.0")
Case 4
txtRealWeight.Text = Format(Val(strTemp) / 100, "#0.00")
Case 5
txtRealWeight.Text = Format(Val(strTemp) / 1000, "#0.000")
End Select
.RThreshold = 1
Case comEvCTS '3 Clear To Send 线的状态发生变化。
Case comEvDSR '4 Data Set Ready 线的状态发生变化。该事件只在 DST 从 1 变到 0 时才发生。
Case comEvCD '5 Carrier Detect 线的状态发生变化。
Case comEvRing '6 检测到振铃信号。一些 UART(通用异步接收— 传输)可能不支持该事件。
Case comEvEOF '7 收到文件结束(ASCII 字符为 26)字符。
'下面是处理串口错误
Case comEventBreak '1001 接收到一个中断信号。
Case comEventCTSTO '1002 Clear To Send 超时。在系统规定时间内传输一个字符时,Clear To Send 线为低电平。
Case comEventDSRTO '1003 Data Set Ready 超时。在系统规定时间内传输一个字符时,Data Set Ready 线为低电平。
Case comEventFrame '1004 帧错误。硬件检测到一帧错误。
Case comEventOverrun '1006 端口超速。没有在下一个字符到达之前从硬件读取字符,该字符丢失。
Case comEventCDTO '1007 载波检测超时。在系统规定时间内传输一个字符时,Carrier Detect 线为低电平。CarrierDetect 也称为 Receive Line Signal Detect (RLSD)。
Case comEventRxOver '1008 接受缓冲区溢出。接收缓冲区没有空间。
Case comEventRxParity '1009 奇偶校验。硬件检测到奇偶校验错误
Case comEventTxFull '1010 传输缓冲区已满。传输字符时传输缓冲区已满
Case comEventDCB '1011 检索端口的设备控制块 (DCB) 时的意外错误
Case Else
End Select
End With
End Sub