与多个从站通信(基于Modbus协议)

时间:2013-03-02 14:13:23

标签: c# .net modbus

我正在开发一个应用程序,其中Lets说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);

  }
}

任何人都可以建议我实施相同的最佳方法。

提前致谢。

1 个答案:

答案 0 :(得分:1)

看起来你的问题很简单......你总是在审问同一个奴隶! “index”从未在您的代码中使用过......

这样的事情:

mb.SendFc3(m_slaveID[index], m_startRegAdd[index], m_noOfReg[index], ref value_meter);