先接一个温湿度探头,地址设为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
再接上第二个探头,地址设为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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货