タイトル | : VB2010のSerialportの受信イベントについて |
記事No | : 10621 |
投稿日 | : 2011/11/24(Thu) 16:51 |
投稿者 | : TANTAN |
お世話になります。VB歴1年半のTANTANといいます。 VB2010のSerialportの受信イベントについての質問です。
今、VB2010の[System.IO.Ports.SerialPort]を使用して バイナリ通信のRAMモニタソフトを設計しています。 基板とPCを繋げて、PCから「コマンド+アドレス+データ+チェックサム」を 送信すると、基板から「コマンド+アドレス+データ+チェックサム」がPCに 返されて、それのデータを表示するソフトを作ろうとしています。
環境は、 OS:XP VB構成:VB2010ExpressEdition,日本語ServicePack1,日本語用の修正プログラム SerialPort.BaudRate:38400bts SerialPort.Parity:Even (後は初期設定) です。
現象を説明しますと、PC側から「メモリ読み出しコマンド」を[.Write]命令で送り [SerialPort.ReceivedBytesThreshold=1]を設定します。 そして、発生した[Serialport]の[DataReceived]イベントの最初に、 [.Read]命令で、基板から返されたデータを読み出そうとするのですが、 特定のアドレスでのRead命令でエラーが起こります。 「IOExeptionはハンドルされませんでした。 スレッドの終了またはアプリケーションの要求によって、I/O 処理は中止されました。」 というエラーです。 自分でした対策として、有効だったのが [Read命令の前にDo While文でSerialport.BytestoRead<>0 になるまで待ってから Read命令に進む] でして、今はとりあえずそれを使っています。(他にRead命令の前で100ms待たせると エラーが出ずに実行できました。)
そして、質問なのですが、上の対策から推測するに、 「特定のアドレスにWriteで送ったコマンドのレスポンスが遅れ、受信イベントが発生した時点では まだRead命令で読み込める状態ではなかったのでエラーが出る」 という状況かと思われますが、自分が知りたいのが
「アドレスによって、受信イベント発生時点で読み込めるデータ量やレスポンス速度に差が出るのか?」 ということです。
どなたか、アドバイスできる方がいましたら、レスの方お願いします。
|