【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

現在、Turbo C++を用いてソフトを作っています。WinAPI関数を用いて、RS232Cによって電子回路とPC間でシリアル通信を行っています。デスクトップのパソコンでは通信はうまくできていたのですが、ノートパソコンに、USBとRS232Cの変換ケーブルを用いて同じプログラムを動かしたところ、データ受信が全くされません。CreateFile関数はエラーは出ませんが、ReadFile関数などは受信されずに待機しているような状況です。コムポートの設定も問題はないと思うのですが、他に何か問題はあるでしょうか。

予想できる範囲でわかる方お願いします。

A 回答 (2件)

こんにちは。



ハードウェアフロー制御(CTS/RTS)に起因する障害であれば、WinAPI の SetCommState関数
を使用してハードウェアフロー制御を無効とするような設定にした方が良いかもしれません。

具体的には、SetCommState関数 に渡す DCB構造体 の下記メンバあたりを上手く調整して、
何度か試験してみると良いかもしれません。

  DWORD fOutxCtsFlow :1;      //CTS入力信号監視 有効/無効→ハードウェアCTSフロー制御の有無
  DWORD fOutxDsrFlow :1;      //DSR入力信号監視 有効/無効→ハードウェアDSRフロー制御の有無
  DWORD fDtrControl :2;       //DTR制御方式の指定
  DWORD fDsrSensitivity :1;     //DSRの状態に対する感度設定
  DWORD fTXContinueOnXoff :1;  //通信相手の受信バッファーがFULL状態でXoffCharが送られて
                       //きた時の送信継続/中止設定(ソフトウェアフロー制御時)
  DWORD fOutX :1;          // 送信のソフトウェアフロー制御設定 有効/無効
  DWORD fInX :1;           // 受信のソフトウェアフロー制御設定 有効/無効
  DWORD fRtsControl :2;      //RTS出力信号制御 有/無 及び 制御方式設定

シリアル通信関連の WinAPI に関しては、下記サイトが参考になるかもしれません。

■参考サイト
◎RS232C シリアル通信
http://www.ys-labo.com/BCB/2007/070512%20RS232C% …

◎Win32API 関数&構造体一覧
http://www.ys-labo.com/pc/2007/070519%20COM%20Fu …

◎RS232C通信 (PC - PIC間)
http://www.ys-labo.com/pic/pic%20chips/pic%20chi …
・このページに、C++ Buider Ver.6 + WinAPI を使用したサンプルプログラムが掲載されています。
    • good
    • 0
この回答へのお礼

フロー制御を無効にし、何とか通信できるようになりました。
ありがとうございました!

お礼日時:2009/06/18 09:14

デスクトップでUSB-RS232Cケーブルを使用した場合はどうなりますか?


おそらくノートと同じ状態になるのではないかと推測しますが。

USB-RS232ケーブルは、シリアルポートの制御を「ある程度」エミュレートしているだけで、DTRやCTSについてはデバイス(に付帯するドライバー)任せです。
その為、CTS等の制御を行っている場合には正常に動作しない場合があります。

この回答への補足

デスクトップのパソコンでケーブルを用いて試してみたところ、おっしゃる通りで、データ受信は行えませんでした。

対処法はないのでしょうか。。

補足日時:2009/06/17 14:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報