VB 串口接收不定长数据的实现

PC机接收下位机传送的不定长的ASCII码数据,为什么单步调试的时候数据接收和显示成功,但一自动运行就会在文本框内闪一下就不见了,但长度稍长点的数据会显示最后几位?是不是... PC机接收下位机传送的不定长的ASCII码数据,为什么单步调试的时候数据接收和显示成功,但一自动运行就会在文本框内闪一下就不见了,但长度稍长点的数据会显示最后几位?是不是缓冲数据暂存来不及造成的?或者后来的数据把前面的数据刷新了?
MSComm1.Settings = "9600,n,8,1" '
MSComm1.InputMode = comInputModeText
MSComm1.InputLen = 0
MSComm1.InBufferSize = 64
MSComm1.OutBufferSize = 64
MSComm1.RThreshold = 1 '
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.PortOpen = True

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive

Text1.Text = MSComm1.input

End Select
End Sub
展开
 我来答
zheng0823
2007-06-28 · TA获得超过975个赞
知道小有建树答主
回答量:1117
采纳率:0%
帮助的人:993万
展开全部
错误有几个:
1, Text1.Text = MSComm1.input 写到End Select后面
2, 不定长数据的接收用UBound函数截取长度
3,给你一个 例子,是接受3组信号的,分别为温度,深度,速度
On Error Resume Next
Dim i&, sum, SS, dd, vv, Xx, Yy, ww
Dim lk As Long
Dim an As Integer
Dim nn As Integer
Dim Buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
Buffer = MSComm1.Input
a = Len(Buffer)
If a <= 2 Then
rc = InStr(Buffer, "Y")

If rc <> 1 Then
MSComm1.Output = Chr("88") '& Chr("33")
ElseIf rc = 1 Then
MSComm1.InputLen = 0
RightCom = MSComm1.CommPort
Form9.Show '显示连接成功

End If
Else
For lk = 0 To UBound(Buffer)
data = data & Buffer
Next lk
an = Len(data)
SS = InStr(data, "T")
dd = InStr(data, "H")
vv = InStr(data, "V")
If vv = 0 Then
x0 = 0
y0 = Picture1.Height
x1 = 0
y1 = Picture1.Height
x2 = 0
y2 = Picture1.Height
Exit Sub
End If
ww = Mid(data, SS + 1, dd - SS - 1)
Xx = Mid(data, dd + 1, vv - dd - 1)
Yy = Mid(data, vv + 1, an - vv)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式