回 帖 发 新 帖 刷新版面

主题:timer 事件中,为什么两次发送和两次接收不对?

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
    
    
    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


调试的结果是 如果timer事件中只写 查询一次的通讯,那么均能正常通讯。

但是 如果timer事件中有两个通讯 则程序到第二个 就过不去了。

请指教 该如何处理


我现在的界面中 还需要通讯多次,因为不同的查询参数,对应的变量都要读回来。

我感觉在 timer事件中应该可以 做到 多个通讯的发送和接收,我这儿怎么过不去呢。

另外我把timer.interval 已经设置的时间很长了 1000ms

回复列表 (共3个回复)

沙发

1、会不会超时?
2、如果两个查询之间无必须的先后执行关系,可以分开处理,两个Timer.(如果不能在一个Timer里处理的话)

仅供参考

板凳

找到原因了 ,

在 第一次 发送命令后,由于发送完毕,对方接收需要时间,处理也需要时间。所以我接收的那段程序就不满足条件,直接被跳过。

于是 我第二次 的发送命令执行,而此时,刚才发送命令的接收数据开始传给我这边。而此时 我一边发送,一边接收刚才发送的应答数据。

数据发送和接收造成重叠 所以 程序死了。

解决的办法  在 第一次发送数据之后 加上 sleep 时间值  (这个时间值由发送和接收数据的时间 大概而定)

3 楼

但是 中间加上的 
sleep 时间值
只是根据波特率和传输数据的个数  大概估计的时间 ,肯定这个估计的时间要比实际所需用的时间 长一些 

这样 因为我的一个 timer 事件中 有许多个查询命令 势必造成 资源的浪费 

有没有这样一种方法  

  当 发送查询命令后,等待 一直到 接收到数据为止  这样 就可以很好地利用时间,而且节省了资源。

现在的疑问是 ;1  如何检测到 接收到了数据,mscomm 控件 有没有检测这一状态的 属性?

              2  这个等待函数 是什么?


请指教

我来回复

您尚未登录,请登录后再回复。点此登录或注册