VB程序中能接收数据,但是不能显示针对数据得计算结果

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:10:55
程序要求在发送数据包同时接收对方自动回传得数据包,并对数据处理后显示在相应得text中,调试结果是能发送和接收,但是不能分别显示,请各位指点
Private Sub Command1_Click()
Dim s0(7) As Byte
s0(0) = &HAA
s0(1) = &H82
s0(2) = &H2
s0(3) = &H0
s0(4) = &H0
s0(5) = &H0
s0(6) = &H2E
s0(7) = &H55
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1"
MSComm1.PortOpen = True
MSComm1.InputLen = 1
MSComm1.RThreshold = 8
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.Output = s0
End Sub

Private Sub MSComm1_OnComm()
Timer1.Interval = 300
End Sub

Private Sub Timer1_Timer()
Dim jsdata() As Byte
Dim qdata As Single
jsdata = MSComm1.Input
Text1.Text = Text1 & Hex(jsdata(i))
Text2.Text = Text2 & qdata(0) / 2
End Sub
其中s0是发送的数据,接收的内容和s0一样,text1里面显示全部的数据,text2里的数据结果是对的,虽然我指定显示接收的第一个数据,但是却是一个一个覆盖显示,既不是全显示,也不是显示指定数据,text2为什么会出现这种情况,另外,&和+有什么区别

产生Oncomm事件的条件是MSComm1控件的属性RThreshold 大于或等于1。同时注意MSComm1控件的属性InputMode 设置:
MSComm1.InputMode = comInputModeBinary '采用二进制接收

MSComm1.InputMode = comInputModeText '采用ASCII码接收
补充:
请将接收代码及数据处理代码放上,以便分析.
补充1:
你提供的代码看上去较难理解。按MSComm1.RThreshold = 52
你接收地数据包字节长52,且是按二进制接收,一般应将接收的数据逐字节接收数据放Byte数组进行数据处理。通常将接收的Byte类型数据逐字节转为16进制数的字符形式,由VB的代码转为10进制数显示。
然后按通信协议按需(由MID函数)取出各自数据赋值给变量或TEXT控件及保存于数据库,然后再按你要求处理数据和显示。
用16位二进制数表示(16进制为BYTE2字节),范围为-32768 到32767间。
补充2:请参考下列修改后代码:
Option Explicit
Dim i As Integer
Dim j As Integer
Dim strdata As String
Dim jsdata() As Byte
Private Sub Command1_Click()
Dim s0(7) As Byte
s0(0) = &HAA
s0(1) = &H82
s0(2) = &H2
s0(3) = &H0
s0(4) = &H0
s0(5) = &H0
s0(6) = &H2E
s0(7) = &H55
MSComm1.Output = s0
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1"
MSCo