关于MSComm控件的帧错误和中断错误
一不知道接口参数的设备,使用下面程序(未列出的都是默认值)能接收到看起来是正确的数据,但数据到达之前会产生一个“帧错误”和两个“中断错误”,网上搜索,多数文章认为帧错误需要更改波特率,可改为其它波特率后接收到的是乱码,有那位高手知道的言语一声呀,先谢谢了!
程序:
Dim TotalStr As String '接收到的信息串
Private Sub Form_Load()
MSComm1.RTSEnable = True
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim EVMsg$
Dim ERMsg$
Dim i As Long
Dim tmp As String
Select Case MSComm1.CommEvent
Case comEvReceive
Dim Buffer As String
Buffer = MSComm1.Input
TotalStr = TotalStr + Buffer
Case comEvSend
EVMsg$ = "comEvSend"
Case comEvCTS
EVMsg$ = "被检测的 CTS 改变"
Case comEvDSR
EVMsg$ = "被检测的 DSR 改变"
Case comEvCD
EVMsg$ = "被检测的 CD 改变"
Case comEvRing
EVMsg$ = "电话铃响起"
Case comEvEOF
EVMsg$ = "被检测的文件结尾"
Case comBreak
ERMsg$ = "收到中断"
Case comCDTO
ERMsg$ = "运输检测超时"
Case comCTSTO
ERMsg$ = "CTS 超时"
Case comDCB
ERMsg$ = "检索 DCB 错误"
Case comDSRTO
ERMsg$ = "DSR 超时"
Case comFrame
ERMsg$ = "帧错误"
Case comOverrun
ERMsg$ = "超限错误"
Case comRxOver
ERMsg$ = "接收缓冲区溢出"
Case comRxParity
ERMsg$ = "奇偶校验错误"
Case comTxFull
ERMsg$ = "传送缓冲区满"
Case Else
ERMsg$ = "未知的错误或事件"
End Select
If EVMsg$ <> "" Then
Debug.Print Now; "->"; EVMsg$
End If
If ERMsg$ <> "" Then
Debug.Print Now; "->"; ERMsg$
End If
End Sub
[解决办法]
把示波器架上,把波形存起来,慢慢看
有帧错误只能说协议还是没有完全对,只是对了大部分