C# の仮想シリアル ポートに問題があります。Write 関数を呼び出すと、TimeOutException が自動的にスローされますが、クライアントはデータを受信します。
仮想ポートでのみ発生します(ブリッジCOM12 <-> COM13で、HDDSoftwareの無料仮想シリアルポートを使用しています)。Visual Studio で COM12 を開き、Hercules で COM13 を開きます。アプリケーションはタイムアウト例外をスローしますが、Hercules はメッセージを受け取ります。
読み取り/書き込みポートのタイムアウトを 1000ms に設定するか 1000000ms に設定するかは問題ではありません。
ありがとう!!
using (SerialPort port = new SerialPort("COM13"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
port.ReadTimeout = 10000;
byte[] buffer = Encoding.ASCII.GetBytes("HELLO WORLD");
try
{
port.Write(buffer, 0, buffer.Length);
}
catch(TimeoutException)
{
Console.WriteLine("Write timeout");
}
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
try
{
byte[] buf = new byte[100];
port.Read(buf, 0, 1);
}
catch(IOException)
{
Console.WriteLine("Read timeout");
}
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
}
いくつかのテスト (Write を try-catch に入れる) の後、Read 操作も即座に TimeOutException をスローします。
これは、テストを実行したときに得られるものです。12:16:06 (読み取りタイムアウト) 12:16:16