通过modbus连续发送命令出现的有关问题
通过modbus连续发送命令出现的问题
不好意思!我又有问题来了!
我是在timer事件中,写了轮询指令,通过Modbus协议实时读取智能仪表上的数值和表上的状态!
但是我现在需要通过手动发送命令,来控制只能仪表的动作,又出现发送命令冲突问题。
用什么方法,可以保证手动发送的命令和timer时间中的发送的命令不发生冲突呢!
------解决方案--------------------
简单,你定义一个布尔变量,当手动需要设置时将其置为True
------解决方案--------------------
Private Sub TimerRead_Timer()
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
If Test Then
vModbusBSbill.AggControl (4)
Test = False
End If
End If
我是要发送2个轮询指令的。
按照你的方式这么写对么??还是没有得到想要的结果!!!
------解决方案--------------------
http://topic.****.net/u/20110829/07/af1a1422-bd14-453a-a982-8efaa3abada4.html?1992813楼.
不好意思!我又有问题来了!
我是在timer事件中,写了轮询指令,通过Modbus协议实时读取智能仪表上的数值和表上的状态!
但是我现在需要通过手动发送命令,来控制只能仪表的动作,又出现发送命令冲突问题。
用什么方法,可以保证手动发送的命令和timer时间中的发送的命令不发生冲突呢!
------解决方案--------------------
简单,你定义一个布尔变量,当手动需要设置时将其置为True
Option Explicit
Dim bolManual As Boolean
Dim intComm As Integer
Private Sub Command1_Click()
bolManual = True '标记手动操作
End Sub
Private Sub Form_Load()
Timer1.Interval = 100 '之所以把这个值设置为100,是为了让手动操作得到及时响应
End Sub
Private Sub Timer1_Timer()
If intComm = 0 Then
'轮询通信
End If
intComm = (intComm + 1) Mod 5 '控制轮询执行时间间隔,Timer执行5次,读一次,也就是大约间隔500ms
If bolManual Then
'手动操作
bolManual = False
End If
End Sub
------解决方案--------------------
Private Sub TimerRead_Timer()
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
If Test Then
vModbusBSbill.AggControl (4)
Test = False
End If
End If
我是要发送2个轮询指令的。
按照你的方式这么写对么??还是没有得到想要的结果!!!
------解决方案--------------------
http://topic.****.net/u/20110829/07/af1a1422-bd14-453a-a982-8efaa3abada4.html?1992813楼.