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
ReadFile APIの、Overlapped使わないと、ReadFileで
エラーが返らなかったはずです。
2003時代のシリアル通信コードを見て・・・
そう書いてましたので。
以上。参考まで・・・
http://www.corradocavalli.cjb.net/
ここでダウンロードできるモジュールが参考に
なるかと・・・(そのもの)
以上。
オショウさん、ご回答ありがとうございます。
教えて頂いたサイトを参考に勉強させていただきます。
(自分の頭の中はVB6.0なので時間がかかるかもしれません)
結果が出れば報告したいと思います。
ダウンロードするリンクが解りにくいかも・・・
http://www.codeworks.it/net/rs232.zip
以上。