我正在开发一个应用程序,在该应用程序中,让我们说50-60 Modbus支持设备(从站)连接到Com Port,该Com Port正在请求响应机制中与我的应用程序进行通信。

我要每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);

  }
}


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

提前致谢。

最佳答案

看来您的问题是个小问题……您总是在询问同一个奴隶!
您的代码中从未使用过“索引” ...

那么这样的事情呢:

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

关于c# - 与多个从站通信(基于Modbus协议(protocol)),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15175461/

10-11 17:33