2013年9月6日金曜日

Win32APIによるシリアル通信・その①

  Top  > Win32APIによるシリアル通信 > Windows API によるシリアル通信(RS232C)

特徴:
受信処理を別スレッドで実行している事……くらいです。
(要するに非同期通信なので、受信待機中に他の処理を行う事ができます。)

実験方法:
USB⇔シリアル・変換ケーブルの2番ピンと3番ピンをワニ口クリップでショートさせて、送信したデータを受信する。

環境:
Win7 x64 Visual C++ 2012

「新しいプロジェクト」⇒「空のプロジェクト」
でプロジェクトを作って
「プロジェクト(P)」⇒「新しい項目の追加(W)」⇒「C++ファイル(.cpp)」
で作ったファイルにそのままコピーしてビルドすればたぶん動きます。(環境が同じなら……)

ポート番号"COM7"の部分はデバイスマネージャーから確認して適切な値にセットしてください。USBポートの挿す位置が変わるだけで番号が変わっていくので注意してください。


実行風景


上の行のアンダーバー以降が送信した文字列
下の行が受信した文字列になります。


一応これだけで、非同期シリアル通信が可能ですが、
現実的にはこのコードだと多少問題があります。
例えば、現在終了コードを「\0」としていますが、これを「\r\n」とする事でハイパーターミナルを
返した通信と同じ状況になる(ハズ)ですが、このままだと、
下記のようなデータを送信した場合、
「"□□□□□\r\n△△△△△\r\n\0\0\0……"」
受信したデータが、
「"□□□□□\r\n△△\0\0\0……"」「"△△△\r\n\0\0\0……"」のようにデータが二つの
バッファに分かれてしまう場合があるので、きちんと処理しないとバグ
引き起こします。

この辺りの解決策Win32APIによるシリアル通信。続き。を参照してください。


以下ソースコードです。

余りにも見難いのでサンプルを置いておきます。
http://ux.getuploader.com/ADMIS/download/8/Serial_Communication_Interface_Ver0.7.zip



  Top   > Win32APIによるシリアル通信 > Windows API によるシリアル通信(RS232C)

0 件のコメント:

コメントを投稿