私は、50 ~ 60 台の Modbus サポート デバイス (スレーブ) が、要求応答メカニズムでアプリケーションと通信している Com ポートに接続されていると言うアプリケーションを開発しています。
15分ごとに欲しい。要求はすべてのメーターに送信され、応答はメーターから 1 つずつ受信されます。複数のスレーブとの通信 (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);
}
}
同じことを実装するための最良のアプローチを教えてください。
前もって感謝します。