本人用mscomm与下位机进行通信,现遇到一个怪现象:
收到的数据一会正常,一会乱码,而且是周期性的
乱码的时候出现?,就是奇偶校验错误,也有其他乱码
我设定的每次收的数据是14字节,但经常会出现28字节乱码一起来,意味着没有收到回车符
这种现象哪位大侠遇到过,急盼指教,谢谢
收到的数据一会正常,一会乱码,而且是周期性的
乱码的时候出现?,就是奇偶校验错误,也有其他乱码
我设定的每次收的数据是14字节,但经常会出现28字节乱码一起来,意味着没有收到回车符
这种现象哪位大侠遇到过,急盼指教,谢谢
解决方案 »
- 脚本文件(.sql)的代码在哪写?
- VB调用SQLServer数据库的系统存储过程
- 关于加快TreeView控件的Clear速度问题
- 怎么样把一个25K的文件用Winsock发送出去,请高手指教(急。。。在线等)……
- 急!如何用VB把数据导出到一个DBF文件中(FoxPro 6)
- 关于ToolHelp
- MsChart的背景能不能改变啊?我发现Mschart的背景与窗体保持一致,但我却不能够改变它
- 水晶报表打印问题
- 请问这段二分法程序代码的问题在哪里
- 如何判断一个word文档为空?
- 关于使用vb进行数据采集后进行数值判断的问题
- 有谁知道VB+ACCESS条件下SQL的编辑器或Browse,提高编程效率!
comInputModeText 0 (缺省)数据通过 Input 属性以文本形式取回。
comInputModeBinary 1 数据通过 Input 属性以二进制形式取回。
IF THEN
ENDIF
语句来判断:
MSComm1.InputMode = comInputModeText '按ASCII接收
intInputLen = MSComm1.InBufferCount
ReDim bytInput(intInputLen)
bytInput = MSComm1.Input
Text1 = bytInput
Text2 = Text1
jscd = Len(Text1)
If Left(Text1, 1) <> Chr(27) Or jscd > 14 Then
frmMain.Label.BackColor = vbRed
frmMain.Label.ForeColor = vbWhite
frmMain.Label.Caption = "接收信号出错!"
ElseIf Left(Text2, 1) = Chr(27) And Mid(Text2, 14, 1) = Chr(13) Then
frmMain.Label.BackColor = vbGreen
frmMain.Label.ForeColor = vbBlack
frmMain.Label.Caption = "接收信号正常!"
If Left(Text2, 1) = Chr(27) And jscd = 14 Then
'插入数据处理代码
End If
End If
将上述代码按你的接收命令格式修改后,放于MSCOMM的MSComm1_OnComm事件的代码中.
data = ""
Do
Do
DoEvents
Loop Until .InBufferCount > 0 '循环等待接收缓冲区>=3个字节
data = data & .Input
buffer = data
Loop Until buffer(UBound(buffer())) = &H2A
BufBound = UBound(buffer())
'sTem1 = ""
For i = 0 To BufBound '这个大家应该清楚吧,最高位,也就是收到的数据的长度赋值给I
'ReDim stem(UBound(buffer)) As String
'stem2 = stem2 & Right("00" & Hex(buffer(i)), 2) '缓存里每两位取出来,并且以“十六进制”的形式加进stem2
'sTem1 = sTem1 & Chr(buffer(i)) '每个字符以字符串的形式加进STEM1
Next i
End WithWhile BufBound >= 9If BufBound >= 8 Then If buffer(BufBound - 8) = &H2 Then
i = buffer(BufBound - 7)
Sampled(i) = True
' Enable(i) = True
MapBuffer = buffer()
BufBound = BufBound - 10
End If
End IfIf BufBound >= 12 Then
If buffer(BufBound - 12) = &H4 Then
For i = 1 To 9
If buffer(BufBound - i) = &HFE Then
Enable(10 - i) = False
Else
Enable(10 - i) = True
End If
Next
MapBuffer = buffer()
Frmjiankong.Draw
BufBound = BufBound - 14
End If
End IfWendLoop Until MSComm1.PortOpen = False
呵呵
这是我接收硬件的数据
因为数据有2中格式。一种是12位16进制书,一种是14位16进制书