2

シリアル(COM1)データが送信されないことがあるように見えるC#アプリケーションがあります。以下は私のコードの簡略化されたスニペットです(textBox書き込みの呼び出しは削除されました):

    InitializeComponent()
    {
       // 
       // serialPort1
       // 
       this.serialPort1.BaudRate = 115200;
       this.serialPort1.DiscardNull = true;
       this.serialPort1.ReadTimeout = 500;
       this.serialPort1.ReceivedBytesThreshold = 2;
       this.serialPort1.WriteTimeout = 500;
       this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
    }

        if (radioButtonUart9600.Checked)
        {
           serialPort1.BaudRate = 9600;

           try
           {
              serialPort1.Open();
           }
           catch (SystemException ex)
           {
              /* ... */
           }
        }

        try
        {
           serialPort1.Write("D");
           serialPort1.Write(msg, 0, 512);
           serialPort1.Write("d");
           serialPort1.Write(pCsum, 0, 2);
        }
        catch (SystemException ex)
        {
           /* ... */
        }

奇妙なことに、ポートが115.2Kbpsに設定されている場合、この同じコードが問題なく機能します。ただし、9600bpsで実行している場合、このコードで送信する必要のあるデータは送信されないようです。リモートデバイスの受信フラグを監視して、これを確認しました。tryステートメント内から例外はスローされません。データが確実に送信されるようにするために他にすべきこと(フラッシュなど)はありますか?あなたが持っているかもしれないどんな考えや提案もいただければ幸いです。Microsoft Visual C#2008ExpressEditionを使用しています。ありがとう。

4

1 に答える 1

4

これらのtry/catchブロックを削除します。WriteTimeout値を低く設定しすぎたために、発生したTimeoutExceptionを確認する機会が得られるはずです。9600ボーで516バイトを送信するには、538ミリ秒かかります。

他の設定もトラブルのレシピです。ReceivedBytesThresholdとDiscardNullを取り除きます。

于 2010-05-17T20:53:33.267 に答える