掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
シリアル通信でタイムアウト処理を行うには? (ID:146307)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Windows XP、VB.NET2003でAPI関数によるシリアル通信プログラムを作っています。(コンソールアプリケーションです) データ受信時にタイムアウトが発生した場合には、エラー処理(「受信失敗」と表示)を行いたいのですが、タイムアウトが発生してもReadFile関数がTrueを返すため、エラー処理を行えません。 タイムアウト発生を捕まえて「受信失敗」と表示できるようにするにはどのようにしたらよいのでしょうか? 初歩的な質問ですいませんが、よろしくお願いします。 <コード(一部)> '取得したCOMMTIMEOUTS構造体のプロパティの値を修正する MyCommTimeouts.ReadIntervalTimeout = 0 MyCommTimeouts.ReadTotalTimeoutConstant = 500 MyCommTimeouts.ReadTotalTimeoutMultiplier = 0 MyCommTimeouts.WriteTotalTimeoutConstant = 0 MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 '修正したCOMMTIMEOUTS構造体のプロパティを基にタイムアウトを設定する Success = SetCommTimeouts(hSerialPort, MyCommTimeouts) If Success = False Then Throw New CommException("タイムアウトの設定に失敗") End If 'データ送信 Buffer(0) = &H5 Success = WriteFile(hSerialPort, Buffer, 1, BytesWritten, IntPtr.Zero) If Success = False Then Throw New CommException("送信失敗") Else Console.WriteLine("ENQ送信") End If 'データ受信 Success = ReadFile(hSerialPort, Buffer, 1, BytesRead, IntPtr.Zero) If Success = False Then Throw New CommException("受信失敗") ElseIf Buffer(0) = &H6 Then Console.WriteLine("ACK受信") End If
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.