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

解決済みの質問

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

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

投稿日時 - 2007-03-05 20:59:10

QNo.2805955

すぐに回答ほしいです

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

> この段階ではまだCOMポートに何かしらの電気信号は出ないのでしょうか?

オープンに失敗している以上出ないはずです.
(他のアプリケーションが使用していなければ.)

端末ソフトでオープンすることはできましたか?


> 外付けCOMポート

ということは USB 接続とか,PCMCIA カードとかですか?
それだと内蔵ポートと少し事情が異なるかもしれないので,
まず内蔵ポートがオープンできるか確認してください.

(RS-232C ではありませんが,以前 USB 接続の仮想 COM ポートを使った時,
 どの USB コネクタに挿すかでポート番号が変わったことがありました.)

投稿日時 - 2007-03-06 20:50:01

補足

>ということは USB 接続とか,PCMCIA カードとかですか?
はい。Interface社のCSIシリーズを使っています。

端末ソフトはただいま試しております。内蔵ポートと異なるところがあるかは、メーカにも聞いて見ます。

アクセスが拒否されるということは、具体的にどういうことなのでしょうか、教えていただけますか?たとえば「他のソフトがそのポートを使用しているため拒否されている」なら、他にCOMポートを使うソフトが立ち上げてなければ拒否されないような・・・という風に考えてしまうのですが・・・。

投稿日時 - 2007-03-06 21:11:50

ANo.5

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(5件中 1~5件目)

ANo.6

> 他にCOMポートを使うソフトが立ち上げてなければ拒否されないような・・・
> という風に考えてしまうのですが・・・。

そのはずなのですが….


> Interface社のCSIシリーズを使っています。

↓これですか? 参考のために型番を教えていただけますか?
http://www.interface.co.jp/catalog/selection/com/com_csi.asp?btn=1

投稿日時 - 2007-03-07 10:20:47

補足

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

投稿日時 - 2007-03-07 12:20:08

お礼

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

投稿日時 - 2007-03-15 18:24:18

ANo.4

> アクセスが拒否されました

・そのポートを他のアプリケーションが使用していませんか?
 端末ソフト (ハイパーターミナルなど) を使って,
 そのポートを開けるかどうか確認してください.

・CreateFile() の引数はどうなってますか? ソースを示してください.
 使用例↓
  hComm = CreateFile(devName, GENERIC_READ | GENERIC_WRITE, 0, NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

投稿日時 - 2007-03-06 19:47:38

補足

ありがとうございます。
引数は下記の通りです。
この段階ではまだCOMポートに何かしらの電気信号は出ないのでしょうか?

hComm = CreateFile(g.sp.comNo,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

投稿日時 - 2007-03-06 19:54:34

ANo.3

> GetLastError()で調べたら、「指定されたファイルが見つかりません。」でした。

ファイル名 (ポート番号) は正しく設定していますか?
正しいポート番号がわからなければ,ファイル名として
"COM1",…,"COM9" を順番に試してみてください.(笑)

投稿日時 - 2007-03-06 13:19:01

補足

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

投稿日時 - 2007-03-06 18:21:22

ANo.2

> 原因や対策などのノウハウがあるページなども紹介いただけると助かります。

┌これに書いたリンク先が参考になるのでは?

QNo.2614807:Win32でシリアル通信
http://okwave.jp/qa2614807.html

あと,FormatMessage() を簡単に使えるようにしたエラーメッセージ取得関数は↓こちら.
Windows のエラーメッセージ文字列を取得する.
http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html#ErrorMessage

投稿日時 - 2007-03-06 00:21:16

補足

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

投稿日時 - 2007-03-06 11:28:34

ANo.1

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

投稿日時 - 2007-03-05 21:34:10

補足

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

投稿日時 - 2007-03-05 22:17:37

あわせてチェックしたい
  • VC++.NETを使用したRS232c通信プログラム ...
  • RS232C通信ポート(COM1)が開かない ...
  • RS232C(COMポート)で通信するには? ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら