先接一个温湿度探头,地址设为1,可以正常的收到数据。
再接上第二个探头,地址设为2,如果我只查询地址1的数据,可以正常,同样,如果我只查询地址2的数据,可以正常。
但是我如果循环查询,就不能正常,而且现象很奇怪,如果单步执行,可以看到发送查询探头1的命令,收到探头1的返回命令,显示在界面上,发送查询探头2的命令,无法收到探头2的返回命令。如果直接执行,探头1和探头2都没有收到返回命令。我是用VB写的代码,有谁能帮我一下,本周就要交了,谢谢!
发送和接收代码如下
Private Sub Timer1_Timer() '发送查询温湿度命令
ReDim send_data(7) As Byte
Dim j As Integer
Dim a As IntegeruchCRCHi = &HFF
uchCRCLo = &HFF
For a = 1 To 2
       number = a
       send_data(0) = number
       send_data(1) = &H3
       send_data(2) = &H0
       send_data(3) = &H0
       send_data(4) = &H0
       send_data(5) = &H2
       For j = 0 To 5
           data = send_data(j)
           uIndex = uchCRCHi Xor data
           uchCRCHi = uchCRCLo Xor CByte(auchCRCHi(uIndex))
           uchCRCLo = CByte(auchCRCLo(uIndex))
       Next j
       send_data(6) = uchCRCHi
       send_data(7) = uchCRCLo
       
MDIFrmMain.MSComm1.PortOpen = True
       
       MDIFrmMain.MSComm1.Output = send_data
       MDIFrmMain.MSComm1.InputMode = 1       Timer2.Enabled = True
       Timer2_Timer
       Timer1.Enabled = False
End SubPrivate Sub Timer2_Timer() '接收温湿度数据
uchCRCHi = &HFF
uchCRCLo = &HFF
If MDIFrmMain.MSComm1.InBufferCount = 9 Then '如果接收到字符
   e = MDIFrmMain.MSComm1.Input
   For j = 0 To 8
       data = e(j)
       uIndex = uchCRCHi Xor data
       uchCRCHi = uchCRCLo Xor CByte(auchCRCHi(uIndex))
       uchCRCLo = CByte(auchCRCLo(uIndex))
   Next j
   If (uchCRCHi Or uchCRCLo = 0) Then
          If e(3) * 256 + e(4) > 32767 Then
             temp = Format(str(Val((e(3) * 256 + e(4) - 65536) / 10)), "#####.0")
          Else
             temp = Format(str(e(3) * 256 + e(4)) / 10, "#####.0")
          End If
             humi = Format(str(e(5) * 256 + e(6)) / 10, "#####.0")      
          Select Case e(0) '收到字节中的地址码
                 Case "1":
                       t1 = temp
                       frmtest.Text1.Text = t1
                       h1 = humi
                       frmtest.Text2.Text = h1
                 Case "2":
                       t2 = temp
                       frmtest.Text3.Text = t2
                       h2 = humi
                       frmtest.Text4.Text = h2
                 End Select     
       
       avgt1 = (t1 + t2 ) / 2'取得平均值  
       avgh1 = (h1 + h2) / 2
 
       txtTempNow1.Text = avgt1 '在界面上显示温湿度平均值      
       txtHumiNow1.Text = avgh1      
       End If    
 Else
    lblMonitorStart.Caption = "CRC check error!" '校验出错
    txtTempNow1.Text = "invalid"
    txtTempNow2.Text = "invalid"    txtHumiNow1.Text = "invalid"
    txtHumiNow2.Text = "invalid"
End If
Else    lblMonitorStart.Caption = "无应答,请确认该号是否存在,并检查供电或网络连接故障" '返回信息出错
    txtTempNow1.Text = "none"
    txtTempNow2.Text = "none"
    
    txtHumiNow1.Text = "none"
    txtHumiNow2.Text = "none"
 
End If
MDIFrmMain.MSComm1.PortOpen = False
End Sub