• ベストアンサー

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

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

  • R360
  • お礼率69% (365/524)

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

  • ベストアンサー
  • 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
質問者

補足

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

関連するQ&A

  • COMポートについて

    WINDOWS98での通信COMポートについて教えてください。 使用したいと考えているモバイルノートPCにはRS232C用のポート がついていません。そこで、USB接続の変換ケーブルを使用 することにしました。 (1)変換ケーブルを接続した状態で、PCを立ち上げ、プラグアンドプレイで  ドライバのインストールを行いました。 (2)USB接続の変換ケーブルはCOM4ポートに自動で割り当てられました。 ある理由(ソフトのテストのため)によりこの自動で割り当てられたCOM4ポートを強制的に COM1ポートにしたいと考えています。 そのようなことは可能でしょうか? ちなみに現在COM1ポートには何も割り当てられていない状態です。 宜しくお願い致します。

  • RS232C(COMポート)で通信するには?

    RS232C(COMポート)で通信するにはどうしたらよいでしょうか? 別のRS232C端子を持つ機器とデータをやり取りしたいのですが。 こちらのPC側は、ネットワーク接続の設定で、着信接続のタグでデバイスの許可にレ印はつけました。ユーザー、ネットワークのタグ内も全項目にレ印をつけました。 あと何を設定すれば、よいでしょうか? どなたか教えてください。

  • COM1ポート IRQが変わる

    RS232Cを使ってPCと制御機器の通信プログラムを作成しています。 使用言語はVC++6.0です。 CreateFile関数でCOM1ポートをOpenして使用したいのですが オープン出来ずエラーになります。 コントロールパネルのデバイスマネージャから COM1ポートのIRQを見ると4となっています。 (通常そうだと思いますが。) そこで、一度、COM1ポートを無効してPC再起動 再起動後、COM1ポートを削除してハードウエアをスキャン。 その後、COM1ポートが出ますが、その時IRQは7になっています。 その状態ではCreateFile関数を使ったCOM1ポートのオープンは 出来ます。 しかし、再度、PCを再起動するとIRQが4に戻って ポートが開けない状態になります。 また、ポートを削除して・・・IRQを7にするとポートが開ける。 再起動する度に変更したIRQが4になり、上手く使いこなせません この現象について、アドバイスいただける方いましたら よろしくおねがいします。

  • RS232C通信ポート(COM1)が開かない

    カテゴリー <その他>でアップした質問を <Windows2000、NT>のカテゴリーに 再アップさせていただきます。 Windows2000をシステムとする、旧型 IBM Think Padを使って通信ポート(9ピン)に、RS232C クロスケーブルで、 富士電機プロコン(シーケンサー)と接続し、ONLINEにしたいのですが、<通信ポートをオープンできません>というメッセージが表示され、接続されません。 それで、Windowsのデバイスマネイジャーで、パソコン側の通信ポート(COM1)のプロバティをみると、<このデバイスは正常に作動しています。>とあります。 富士電機のサポートセンターに状況を問い合わせた所、パソコン本体側にエラーと思われるとの回答でした。 通信ポートのパラメータが変わったのか、それとも別の理由なのか、復旧の仕方がわかりません。 どなたさまかご教示くだされたく、お願い申しあげます。 <ThikPadパソコン使用状態> システム : Windows 2000 Service Pack4 ウィルスチェッカー:ESET Smart Security 4 インストール。 インターネットはドコモFomaのデータ通信アダプタを、USBに接続してアクセス。 RS232C通信ポートは、富士プロコンのみで使用しています。 <プロコン PLC 通信設定>  1.アプリケーションソフトの<通信ポート設定>       PCとのポート(P): COM 1     ポートの設定(M): ビット/秒(B) 19200  データビット(D): 8    パリティ(P): なし  ストップビット(S): 1   フロー制御(F): なし    2.ローダアダプタのディップSW設定 ⇒ 1,2,3,4,5,6 OFF 7,8 ON      即ち ☆パソコンローダモード     ☆データビット: 8   ☆パリティビット有無: 無       ☆パリティビット奇偶: 奇数  ☆ボーレート: 19200 <ケーブル>   パソコン~ローダアダプタ : 9ピン、25ピン RS232Cクロスケーブル、                   富士からは市販クロスケーブル使用のこととされ、通信データの接続                   ピン番号のみ公開。    ローダアダプタ~PLC  : 富士電機提供 専用ケーブル <PLCアプリ 使い勝手>   2ヶ月前までは、今回不具合のパソコン、RS232Cケーブル接続で、問題なくPLCとオンラインにな  っていた。

  • RS232C通信ポート(COM1)が開かない

    Windows2000をシステムとする、旧型 IBM Think Padを使って通信ポート(9ピン)に、RS232C クロスケーブルで 富士電機プロコン(シーケンサー)と接続し、ONLINEにしたいのですが、<通信ポートをオープンできません>というメッセージが表示され、接続されません。 それで、Windowsのデバイスマネイジャーで、パソコン側の通信ポート(COM1)のプロバティをみると、<このデバイスは正常に作動しています。>とあります。 富士電機のサポートセンターに状況を問い合わせた所、パソコン本体側にエラーと思われるとの回答でした。 復旧の仕方がわかりません。 どなたさまかご教示くだされたく、お願い申しあげます。 使用状態 パソコンの使用状況、ウィルスチェッカー:ESET Smart Security 4 インストール。インターネットは、ドコモFomaの データ通信をUSBに接続してアクセス。 RS232C通信ポートは、富士プロコンのみで使用しています。 その他設定  1.アプリケーションソフトの<通信ポート設定>     PCとのポート(P): COM 1    ポートの設定(M): ビット/秒(B) 19200   データビット(D): 8     パリティ(P): なし               ストップビット(S): 1    フロー制御(F): なし    2.ローダアダプタのディップSW設定 ⇒ 1,2,3,4,5,6 OFF 7,8 ON 即ち ☆パソコンローダモード     ☆データビット: 8   ☆パリティビット有無: 無           ☆パリティビット奇偶: 奇数  ☆ボーレート: 19200    

  • .net を用いて RS232C通信を行うことは可能?

    (1)VC++ を用いて RS232C通信のDLLファイルを作成している のですが、.net(VC++) を用いて、RS232C通信のDLL ファイルを作成することは可能でしょうか? (2) また、現状使用している VC++ のソース(プロジェクト) は、そのままで .net でコンパイルすれば使用可能なので しょうか? (3) 可能であるが、変更,対策が必要な場合、どのように すればいいのでしょうか? 以上、よろしくお願いいたします

  • COMポートが表示されない

    デバイスマネージャーでポート(COMとLPT)を開くと、「LPT1」は表示されるのですが、「COM1」や「COM2」といったCOMポートが表示されません。 因みに接続している機器(自作品)につけているLEDはRS-232Cに接続すると点灯するようです。 今の時点ではRS-232Cで制御できるはずの機器を制御できないので、制御できるよう正常に戻す方法と「デバイスマネージャー」にCOMを表示させる方法をどなたかお教えください。

  • VC++でのRS232C通信をサポートしてくれるソフトは?

    VC++6.0を仕事で使うことになったのですが、 VC++でのRS232C通信をサポートしてくれるソフトがあれば教えてください。 VBAのEasyCommのようなソフトはあるのでしょうか?

  • COMポート通信をモニターしたい

    現在、PCと組み込み系の端末との間でRS-232C通信をさせています。このRS-232C通信のTXとRXのデータのタイミングなどをモニターできるソフトはありませんでしょうか? 現在RS-232C通信をさせているのですが、組み込み系の端末側にはTCP-RS232C通信変換のモジュールを取り付けていて、PC側もTCP-RS232C変換させるソフトを使用しています。 TCP-RS232C通信変換のモジュールはWIZNET社製のWIZ110SRというのを使用しています。 PC側ではTCP-RS232C通信変換ソフトでWIZNET社製のWIZ VSPというソフトを使用して、TCPで受けたデータをRS-232Cに変換して受信プログラムソフトに転送しています。 このPC側の受信ソフトとTCPへ変換する間のCOMポートの通信をモニターできるようなソフトというものはありませんでしょうか? どうぞ、ご教授頂きますようお願い致します。

  • VC++.NETを使用したRS232c通信プログラム

    RS232c通信をVC++.NETを用いてPSoCマイコンと通信を行うGUIを作成しようとしています。PSoCとハイパーターミナルを用いた送受信の通信は成功しました。そこで受信ボタンをクリックすると、PSoCから送られてくる文字列を受信してエディットコントロールに表示させるという、ダイアログボックスベースで作成したアプリケーションを作っているんですが、文字列をうまく受信してくれません.現状は「・・・」といった文字をエディットコントローラに表示しており、実際は「welcome」という文字列をPSoCより受信しなければならないんですが・・・。 RS232c通信用のAPIは以下のサイトより使わせてもらっています↓http://7ujm.net/C++/Rs232c.h.html 自分が作成したプログラムはボタンをクリックすることで発生するイベントハンドラ関数内に以下のプログラムを書いているだけです。↓ void CMy090630Dlg::OnBnClickedButton1() { RS232c rs; rs.Connect();//ポートcom5と接続を開始する char w[100]; rs.Read_CRLF(w,100);//PSoCより文字列を受信 m_edit1.SetWindowText(w);//エディットコントロールに  受信文字列を表示させる } VC++をはじめたばかりの初心者で、言葉の間違いなどあるかもしれませんが、教えてください。