主题:[讨论]mscomm 控件 有没有检测接收状态的属性
Private Sub Timer1_Timer()
Dim Buffer As Variant
Dim Data() As Byte
Dim i%, j%
Dim xu(0) As Byte '发送缓冲
Dim str As String
'查询A参数-----------------------------------------------------------------
buff(0) = &H3B
buff(1) = &H20
buff(2) = &H11
i = CRC_CITT(1)
MSComm1.OutBufferCount = 0 '发送缓冲区的字节数清零
If MSComm1.PortOpen = True Then
For i = 0 To 4
xu(0) = buff(i)
MSComm1.Output = xu
Next i
End If
sleep 40
Buffer = MSComm1.Input
Data() = Buffer
For i = 0 To (UBound(Data) - 19)
'^^^^^处理第一次通讯的数据
Next
'----------------------------------------------------------------------------
'查询 B-----------------------------------------------------------------
buff(0) = &H3B
buff(1) = &H20
buff(2) = &H12
i = CRC_CITT(1)
MSComm1.OutBufferCount = 0 '发送缓冲区的字节数清零
If MSComm1.PortOpen = True Then
For i = 0 To 4
xu(0) = buff(i)
MSComm1.Output = xu
Next i
End If
Buffer = MSComm1.Input
Data() = Buffer
For i = 0 To (UBound(Data) - 9)
'处理第二次通讯的数据
Next
MSComm1.InBufferCount = 0
End Sub
在 第一次 发送命令后,由于发送完毕,对方接收需要时间,处理也需要时间。所以我接收的那段程序就不满足条件,直接被跳过。
于是 我第二次 的发送命令执行,而此时,刚才发送命令的接收数据开始传给我这边。而此时 我一边发送,一边接收刚才发送的应答数据。
数据发送和接收造成重叠 所以 程序死了。
解决的办法 在 第一次发送数据之后 加上 sleep 时间值 (这个时间值由发送和接收数据的时间 大概而定)
但是 中间加上的
sleep 时间值
只是根据波特率和传输数据的个数 大概估计的时间 ,肯定这个估计的时间要比实际所需用的时间 长一些
这样 因为我的一个 timer 事件中 有许多个查询命令 势必造成 资源的浪费
有没有这样一种方法
当 发送查询命令后,等待 一直到 接收到数据为止 这样 就可以很好地利用时间,而且节省了资源。
现在的疑问是 ;1 如何检测到 接收到了数据,mscomm 控件 有没有检测这一状态的 属性?
2 这个等待函数 是什么?
请指教
Dim Buffer As Variant
Dim Data() As Byte
Dim i%, j%
Dim xu(0) As Byte '发送缓冲
Dim str As String
'查询A参数-----------------------------------------------------------------
buff(0) = &H3B
buff(1) = &H20
buff(2) = &H11
i = CRC_CITT(1)
MSComm1.OutBufferCount = 0 '发送缓冲区的字节数清零
If MSComm1.PortOpen = True Then
For i = 0 To 4
xu(0) = buff(i)
MSComm1.Output = xu
Next i
End If
sleep 40
Buffer = MSComm1.Input
Data() = Buffer
For i = 0 To (UBound(Data) - 19)
'^^^^^处理第一次通讯的数据
Next
'----------------------------------------------------------------------------
'查询 B-----------------------------------------------------------------
buff(0) = &H3B
buff(1) = &H20
buff(2) = &H12
i = CRC_CITT(1)
MSComm1.OutBufferCount = 0 '发送缓冲区的字节数清零
If MSComm1.PortOpen = True Then
For i = 0 To 4
xu(0) = buff(i)
MSComm1.Output = xu
Next i
End If
Buffer = MSComm1.Input
Data() = Buffer
For i = 0 To (UBound(Data) - 9)
'处理第二次通讯的数据
Next
MSComm1.InBufferCount = 0
End Sub
在 第一次 发送命令后,由于发送完毕,对方接收需要时间,处理也需要时间。所以我接收的那段程序就不满足条件,直接被跳过。
于是 我第二次 的发送命令执行,而此时,刚才发送命令的接收数据开始传给我这边。而此时 我一边发送,一边接收刚才发送的应答数据。
数据发送和接收造成重叠 所以 程序死了。
解决的办法 在 第一次发送数据之后 加上 sleep 时间值 (这个时间值由发送和接收数据的时间 大概而定)
但是 中间加上的
sleep 时间值
只是根据波特率和传输数据的个数 大概估计的时间 ,肯定这个估计的时间要比实际所需用的时间 长一些
这样 因为我的一个 timer 事件中 有许多个查询命令 势必造成 资源的浪费
有没有这样一种方法
当 发送查询命令后,等待 一直到 接收到数据为止 这样 就可以很好地利用时间,而且节省了资源。
现在的疑问是 ;1 如何检测到 接收到了数据,mscomm 控件 有没有检测这一状态的 属性?
2 这个等待函数 是什么?
请指教