• ベストアンサー

VC++でRS232C(COMポート通信)

VC++でRS232C(COMポート)通信をするソフトを作成していますが、COMポートが開けず通信ができません。ポートが開けない理由を追跡する方法はありますか?

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

  • ベストアンサー
  • noocyte
  • ベストアンサー率58% (171/291)
回答No.5

> この段階ではまだCOMポートに何かしらの電気信号は出ないのでしょうか? オープンに失敗している以上出ないはずです. (他のアプリケーションが使用していなければ.) 端末ソフトでオープンすることはできましたか? > 外付けCOMポート ということは USB 接続とか,PCMCIA カードとかですか? それだと内蔵ポートと少し事情が異なるかもしれないので, まず内蔵ポートがオープンできるか確認してください. (RS-232C ではありませんが,以前 USB 接続の仮想 COM ポートを使った時,  どの USB コネクタに挿すかでポート番号が変わったことがありました.)

R360
質問者

補足

>ということは USB 接続とか,PCMCIA カードとかですか? はい。Interface社のCSIシリーズを使っています。 端末ソフトはただいま試しております。内蔵ポートと異なるところがあるかは、メーカにも聞いて見ます。 アクセスが拒否されるということは、具体的にどういうことなのでしょうか、教えていただけますか?たとえば「他のソフトがそのポートを使用しているため拒否されている」なら、他にCOMポートを使うソフトが立ち上げてなければ拒否されないような・・・という風に考えてしまうのですが・・・。

その他の回答 (5)

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.6

> 他にCOMポートを使うソフトが立ち上げてなければ拒否されないような・・・ > という風に考えてしまうのですが・・・。 そのはずなのですが…. > Interface社のCSIシリーズを使っています。 ↓これですか? 参考のために型番を教えていただけますか? http://www.interface.co.jp/catalog/selection/com/com_csi.asp?btn=1

R360
質問者

お礼

ありがとうございます。とりあえず1Byte通信できるようになりました。

R360
質問者

補足

ありがとうございます。 形式は、CSI-466120です。 強制的にポートを開かせる、または閉じさせる方法があればよいのですが・・・。

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.4

> アクセスが拒否されました ・そのポートを他のアプリケーションが使用していませんか?  端末ソフト (ハイパーターミナルなど) を使って,  そのポートを開けるかどうか確認してください. ・CreateFile() の引数はどうなってますか? ソースを示してください.  使用例↓   hComm = CreateFile(devName, GENERIC_READ | GENERIC_WRITE, 0, NULL,             OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

R360
質問者

補足

ありがとうございます。 引数は下記の通りです。 この段階ではまだCOMポートに何かしらの電気信号は出ないのでしょうか? hComm = CreateFile(g.sp.comNo,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.3

> GetLastError()で調べたら、「指定されたファイルが見つかりません。」でした。 ファイル名 (ポート番号) は正しく設定していますか? 正しいポート番号がわからなければ,ファイル名として "COM1",…,"COM9" を順番に試してみてください.(笑)

R360
質問者

補足

回答ありがとうございました。 外付けCOMポートのドライバを更新してみたら、「指定された・・・」は出なくなりました。 しかし今度は「アクセスが拒否されました」と出てしまいました。 これの原因、回避策はありませんか?

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

> 原因や対策などのノウハウがあるページなども紹介いただけると助かります。 ┌これに書いたリンク先が参考になるのでは? ↓ QNo.2614807:Win32でシリアル通信 http://okwave.jp/qa2614807.html あと,FormatMessage() を簡単に使えるようにしたエラーメッセージ取得関数は↓こちら. Windows のエラーメッセージ文字列を取得する. http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html#ErrorMessage

R360
質問者

補足

GetLastError()で調べたら、「指定されたファイルが見つかりません。」でした。しかし、物理的につながっていて認識もされているポートが開けないのが解せないのですが、対策などありましたら教えてください。

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.1

CreateFile() でエラーになってるんでしょうか? そうであれば,その直後に GetLastError() でエラー番号を取得して, FormatMessage() でそれをエラーメッセージに変換して表示させてみれば 原因がつかめると思います.

R360
質問者

補足

早速の回答ありがとうございます。 原因や対策などのノウハウがあるページなども紹介いただけると助かります。