各位大侠:
我通过Modbus协议与一个仪表通信,发送命令格式都正确,返回值也正确。
但是我把这个发送命令的过程,放到timer时间中去执行时,就会出现返回值混乱问题,总是几个数来循环出现。只有当多个timer事件同时发送的时候才出现这个问题。要不就是我做一个按钮一下一下的发送命令,也会偶尔出现数据不匹配的问题!
大家帮我分析一下到底是什么原因:是不是串口冲突的问题还是中断时间太短的原因呢?
我通过Modbus协议与一个仪表通信,发送命令格式都正确,返回值也正确。
但是我把这个发送命令的过程,放到timer时间中去执行时,就会出现返回值混乱问题,总是几个数来循环出现。只有当多个timer事件同时发送的时候才出现这个问题。要不就是我做一个按钮一下一下的发送命令,也会偶尔出现数据不匹配的问题!
大家帮我分析一下到底是什么原因:是不是串口冲突的问题还是中断时间太短的原因呢?
使用1个Timer来控制发送不同指令轮询仪表返回数据.
Private Sub Timer1_Timer()
Static sum As Long
sum = sum + 1
If sum = 1 Then
'写轮询指令1
ElseIf sum = 2 Then
'写轮询指令2
ElseIf sum = 3 Then
sum = 0
'写轮询指令3
End If
End Sub
.ReadBalValue
End WithEnd Sub
Private Sub Tim_ReadState_Timer()""用来不断读取表上的状态
With vModbusBSBill
.ReadBalPanAndState
End With
End Sub
如果同时启用2个timer.会出现相互之间数据混乱现象! 应该显示数值的时候,却显示状态。反正就是循环显示!
Private Sub Timer1_Timer()
Static sum As Long
sum = sum + 1
If sum = 1 Then
With vModbusBSBill
.ReadBalValue
End With
ElseIf sum = 2 Then
With vModbusBSBill
.ReadBalPanAndState
End With
ElseIf sum = 3 Then
sum = 0
'写轮询指令3
End If
End Sub
Static Sum As Long
Sum = Sum + 1
If Sum = 1 Then
With vModbusBSBill
.ReadBalPanAndState
End With '写轮询指令1
ElseIf Sum = 2 Then
Sum = 0
With vModbusBSBill
.ReadBalValue
End With '写轮询指令2' ElseIf Sum = 3 Then
' Sum = 0
' '写轮询指令3
End IfEnd Sub
谢谢你们!我的问题已经解决!!
我是在timer事件中,写了轮询指令,通过Modbus协议实时读取智能仪表上的数值和表上的状态!
但是我现在需要通过手动发送命令,来控制只能仪表的动作,又出现发送命令冲突问题。
用什么方法,可以保证手动发送的命令和timer时间中的发送的命令不发生冲突呢!