• ベストアンサー

データ受信ができません

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.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%20zenpan.html ◎Win32API 関数&構造体一覧 http://www.ys-labo.com/pc/2007/070519%20COM%20Function%20Structure.html ◎RS232C通信 (PC - PIC間) http://www.ys-labo.com/pic/pic%20chips/pic%20chips%20contets/2007/070401%20RS232C%20PC_PIC.html ・このページに、C++ Buider Ver.6 + WinAPI を使用したサンプルプログラムが掲載されています。

aoisango
質問者

お礼

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

その他の回答 (1)

回答No.1

デスクトップでUSB-RS232Cケーブルを使用した場合はどうなりますか? おそらくノートと同じ状態になるのではないかと推測しますが。 USB-RS232ケーブルは、シリアルポートの制御を「ある程度」エミュレートしているだけで、DTRやCTSについてはデバイス(に付帯するドライバー)任せです。 その為、CTS等の制御を行っている場合には正常に動作しない場合があります。

aoisango
質問者

補足

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

関連するQ&A

専門家に質問してみよう