我正在开发一个应用程序,让我们说 50-60 个 Modbus 支持设备(从站)连接到一个 Com 端口,这些设备在请求响应机制中与我的应用程序通信。
我想要每 15 分钟后。请求应该发送到每个仪表,并从仪表一个接一个地接收响应。与多个从站通信(基于 Modbus 协议)
为此,我使用 System.Timers.timer 来调用该方法,让我们在每 15 分钟后说 ReadAllSlave()。在 ReadAllSlave() 我使用 For 循环来发送请求并接收响应并使用 thread.sleep 来维持延迟..!但似乎它不工作并且循环以该死的有线方式执行。
private void StartPoll()
{
double txtSampleRate = 15 * 60 * 1000;
timer.Interval = txtSampleRate;
timer.AutoReset = true;
timer.Start();
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
for(int index = 0; index<meterCount; Index++)
{
//Sending request to connected meter..
mb.SendFc3(m_slaveID[0], m_startRegAdd[0], m_noOfReg[0], ref value_meter);
if (mb.modbusStatus == "Read successful")
{
//Some code for writing the values in SQL Express database
}
//Wait for some time so that will not get timeout error for the next
//request..
Thread.Sleep(10000);
}
}
任何人都可以建议我实现相同的最佳方法。
提前致谢。