- ベストアンサー
VC++でRS232C(COMポート通信)
VC++でRS232C(COMポート)通信をするソフトを作成していますが、COMポートが開けず通信ができません。ポートが開けない理由を追跡する方法はありますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> この段階ではまだCOMポートに何かしらの電気信号は出ないのでしょうか? オープンに失敗している以上出ないはずです. (他のアプリケーションが使用していなければ.) 端末ソフトでオープンすることはできましたか? > 外付けCOMポート ということは USB 接続とか,PCMCIA カードとかですか? それだと内蔵ポートと少し事情が異なるかもしれないので, まず内蔵ポートがオープンできるか確認してください. (RS-232C ではありませんが,以前 USB 接続の仮想 COM ポートを使った時, どの USB コネクタに挿すかでポート番号が変わったことがありました.)
その他の回答 (5)
- noocyte
- ベストアンサー率58% (171/291)
> 他にCOMポートを使うソフトが立ち上げてなければ拒否されないような・・・ > という風に考えてしまうのですが・・・。 そのはずなのですが…. > Interface社のCSIシリーズを使っています。 ↓これですか? 参考のために型番を教えていただけますか? http://www.interface.co.jp/catalog/selection/com/com_csi.asp?btn=1
お礼
ありがとうございます。とりあえず1Byte通信できるようになりました。
補足
ありがとうございます。 形式は、CSI-466120です。 強制的にポートを開かせる、または閉じさせる方法があればよいのですが・・・。
- noocyte
- ベストアンサー率58% (171/291)
> アクセスが拒否されました ・そのポートを他のアプリケーションが使用していませんか? 端末ソフト (ハイパーターミナルなど) を使って, そのポートを開けるかどうか確認してください. ・CreateFile() の引数はどうなってますか? ソースを示してください. 使用例↓ hComm = CreateFile(devName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
補足
ありがとうございます。 引数は下記の通りです。 この段階ではまだCOMポートに何かしらの電気信号は出ないのでしょうか? hComm = CreateFile(g.sp.comNo,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
- noocyte
- ベストアンサー率58% (171/291)
> GetLastError()で調べたら、「指定されたファイルが見つかりません。」でした。 ファイル名 (ポート番号) は正しく設定していますか? 正しいポート番号がわからなければ,ファイル名として "COM1",…,"COM9" を順番に試してみてください.(笑)
補足
回答ありがとうございました。 外付けCOMポートのドライバを更新してみたら、「指定された・・・」は出なくなりました。 しかし今度は「アクセスが拒否されました」と出てしまいました。 これの原因、回避策はありませんか?
- noocyte
- ベストアンサー率58% (171/291)
> 原因や対策などのノウハウがあるページなども紹介いただけると助かります。 ┌これに書いたリンク先が参考になるのでは? ↓ QNo.2614807:Win32でシリアル通信 http://okwave.jp/qa2614807.html あと,FormatMessage() を簡単に使えるようにしたエラーメッセージ取得関数は↓こちら. Windows のエラーメッセージ文字列を取得する. http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html#ErrorMessage
補足
GetLastError()で調べたら、「指定されたファイルが見つかりません。」でした。しかし、物理的につながっていて認識もされているポートが開けないのが解せないのですが、対策などありましたら教えてください。
- noocyte
- ベストアンサー率58% (171/291)
CreateFile() でエラーになってるんでしょうか? そうであれば,その直後に GetLastError() でエラー番号を取得して, FormatMessage() でそれをエラーメッセージに変換して表示させてみれば 原因がつかめると思います.
補足
早速の回答ありがとうございます。 原因や対策などのノウハウがあるページなども紹介いただけると助かります。
補足
>ということは USB 接続とか,PCMCIA カードとかですか? はい。Interface社のCSIシリーズを使っています。 端末ソフトはただいま試しております。内蔵ポートと異なるところがあるかは、メーカにも聞いて見ます。 アクセスが拒否されるということは、具体的にどういうことなのでしょうか、教えていただけますか?たとえば「他のソフトがそのポートを使用しているため拒否されている」なら、他にCOMポートを使うソフトが立ち上げてなければ拒否されないような・・・という風に考えてしまうのですが・・・。