- ベストアンサー
データ受信ができません
現在、Turbo C++を用いてソフトを作っています。WinAPI関数を用いて、RS232Cによって電子回路とPC間でシリアル通信を行っています。デスクトップのパソコンでは通信はうまくできていたのですが、ノートパソコンに、USBとRS232Cの変換ケーブルを用いて同じプログラムを動かしたところ、データ受信が全くされません。CreateFile関数はエラーは出ませんが、ReadFile関数などは受信されずに待機しているような状況です。コムポートの設定も問題はないと思うのですが、他に何か問題はあるでしょうか。 予想できる範囲でわかる方お願いします。
- みんなの回答 (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 を使用したサンプルプログラムが掲載されています。
その他の回答 (1)
- SilverThaw
- ベストアンサー率32% (260/806)
デスクトップでUSB-RS232Cケーブルを使用した場合はどうなりますか? おそらくノートと同じ状態になるのではないかと推測しますが。 USB-RS232ケーブルは、シリアルポートの制御を「ある程度」エミュレートしているだけで、DTRやCTSについてはデバイス(に付帯するドライバー)任せです。 その為、CTS等の制御を行っている場合には正常に動作しない場合があります。
補足
デスクトップのパソコンでケーブルを用いて試してみたところ、おっしゃる通りで、データ受信は行えませんでした。 対処法はないのでしょうか。。
お礼
フロー制御を無効にし、何とか通信できるようになりました。 ありがとうございました!