0

200ms ごとに PLC からレジスタを読み取るアプリケーションを作成する必要があります。そのために、次のようなものを使用しています:

SerialPort port = new SerialPort();

private void Form1_Load(object sender, EventArgs e)
{
   port.ReceivedBytesThreshold = 21;
   timer1.Interval = 200;
   timer1.Start();
}

private void ProcessTimer_Tick(object sender, EventArgs e)
{
   if (dataReceived)
   {
        dataReceived = false;
        port.Read(buffer_rx, 0, 21);
        TranslateValues();
   }

   if (port.IsOpen && connectected)
   {  
      // sends command for a new reading
      port.Write(buffer_tx, 0, length);
   }
}

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   Invoke(new EventHandler(DoUpdate));
}

void DoUpdate(object sender, EventArgs e)
{
   dataReceived = true;
}

問題は、アプリケーションが時々フリーズすることです。これをデバッグすると、デバッガーは port.Read() を示しますが、例外はスローしません。

try-catch ブロックを使用してみましたが、何もキャッチされず、 も作成されましたtime1.Interval = 2000が、どちらも機能しませんでした。

私の質問は、アプリケーションが port.Read() でフリーズするのに、例外をキャッチしないのはなぜですか? どうすればこれを修正できますか?

4

0 に答える 0