• ベストアンサー

COM16以上を設定を使用してシリアル通信したい

現在、VB6.0を使用してシリアル通信の制御をしたいのですが、MSCOMMを使用するとCOMポートの番号が16以上のポートを設定しようとするとエラーになってしまいます。(私の設定がおかしいのかもしれませんが・・・。) 通信ポートを16以上のポートも使用できるようにするにはどの様にしたらいいのでしょうか?

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

  • ベストアンサー
回答No.2

マイクロソフトの情報を丸ごと引用します。 [SDK32]COM10 以上のシリアルポートを指定する方法 最終更新日: 1998/03/31 文書番号: J028967 この資料は以下について記述したものです。 次の環境で動作する Microsoft(R) WIN32 Application Programming Interface (API) Microsoft(R) Windows NT(R) Version 3.1, 3.5, 3.51, 4.0 Microsoft(R) Windows(R) 95 Version 4.0 この資料は、米国 Microsoft Corporation から提供されている Knowledge Base の Article ID Q115831 (最終更新日 1997-01-20) をもとに作成したものです。 概要 この資料は COM10 以上のシリアルポートを指定する方法について説明したものです。 詳細 CreateFile() を使用すると、シリアルポートのハンドルを得ることができます。この場合、共有モードパラメータには 0 、クリエイトパラメータには OPEN_EXISTING 、テンプレートパラメータには NULL を設定しなければいけません。詳細は "Win32 Programmer's Reference" の "CreateFile()" を参照してください。 CreateFile() は、ファイル名に "COM1" から "COM9" を使用した場合は、正常に終了しますが、 "COM10" またはそれ以上のポート番号を使用すると、 "INVALID_HANDLE_VALUE" というメッセージが返されます。ポート名が、\\.\COM10 となる場合は、 CreateFile() で以下の様に設定すれば、シリアルポートを正しく設定することができます。 CreateFile( "\\\\.\\COM10", /* 通信デバイスの名前のアドレス */ fdwAccess, /* アクセス (読み取りおよび書き込み) モード */ 0, /* 共有モード */ NULL, /* セキュリティ記述子のアドレス */ OPEN_EXISTING, /* 作成方法 */ 0, /* ファイル属性 */ NULL /* コピーする属性付きファイルのハンドル */ ); 注意 : この構文は COM1 から COM9 でも有効です。ボードによっては、ユーザーが ポート名を選べるものもあります。そのような場合でも、自分で付けた名前 をポート名の箇所に入れ替えれば、この構文は有効となります。

Simanohito
質問者

お礼

早急なご連絡ありがとうございます。 本件、上記やり方で出来る事が確認できました。 ありがとうございました。

その他の回答 (1)

回答No.1

残念ながら、MSCOMMのポート番号はCOM1~COM16までとなっていて変更できません。 私はWin32APIを使っています。 SetCommState()で通信条件を設定する。 CreateFile()でポートを開く。 ReadFile()でポートからデータを読む。 WriteFile()でポートにデータを書き込む。 詳しくは、MSDNやWebで検索してください。(ここには書ききれない)

Simanohito
質問者

補足

ご連絡ありがとうございます。 本件ですが、 CreateFileを使用してポートの設定をしようと思いましたが、 COM10以上のポートを設定すると戻り値で-1が返ってきます。 ポートが2桁以上になった場合設定の方法は異なるのでしょうか? 以下にCreateFileの例を記載します。 hComm = CreateFile("COM10", GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0) よろしくお願い致します。

関連するQ&A

  • VB6でのシリアル通信について質問です。

    VB6でのシリアル通信について質問です。 現在、VB6で開発したラベル印刷のシステムを引き受けたのですが、以下のような状況に陥り困っております。 ・プリンタからPCへの接続はシリアル通信のみ。 ・現在使用しようとしているPCにはシリアル通信のポートがなく、USB接続のみしかできない。 ・RS232CからUSBへの変換コネクタを使ってPCとプリンタを接続しようとしているが、印刷実行時に実行時エラー 8015が発生する。 ・VBからプリンタへの通信はMSCommを使用している。 ・プログラム自体は客先にソースのみが残っていたもので、仕様書等はまったくない。 ネットで調べたところ、MicrosoftのサイトではUSBポートからMSCommを使って通信をする事はできないというような事が記載されておりました。 ただ、他のサイトを色々と調べたところ、普通に通信できるとの意見も記載されておりました。 実際のところ、VB6でRS232C-USB変換コネクタを使用してプリンタへのシリアル通信は可能なのでしょうか。 可能な場合、今回発生したエラーの原因になりそうなものとはなんなのでしょうか。 また、通信が不可能な場合、代替策としてどのような方法を取るのが一番ベストなのでしょうか。 どなたか何卒ご教授よろしくお願い致します。

  • VB.NETでのシリアル通信

    .NET初心者です。 VB.NETでシリアル通信をしようとしています。 参照設定のところに Microsoft MSCOMM CONTROLというのがあったので 選択しました。 すると、MSLib.MSCommというのがでてきたので Vb6の Dim test As mscomm のように宣言して使えるかと思い Dim test As MSLib.MSComm test.PortOpen と書いてみたところ、 オブジェクト参照・・・インスタンス化されていません。と、エラーがでました。 ブレイクしてみたところ、test = Nothingでした。 testが無いのでインスタンス化されていないという エラーがでるのだなということは分かったのですが なぜこのエラーがでるのか、 どうしたらこのエラーを回避し、 .NETでシリアル通信ができるのか教えてください。 よろしくお願いします。

  • シリアル通信について

    質問です。 仕事でシリアルプリンタをMSCommで制御しています。 開発環境はVB6(SP5),XPです。 MSCommにて印字データを一度に沢山送ると情報落ち(?)した印字内容になってしまいます。多分プリンタ内のバッファ(みたいなもの)が一杯になるかして、プリンタの処理能力が限界なのかと勝手に思ったりもしています。 ちなみに10秒間隔くらいで送れば大丈夫です。 一方、シリアル通信の実験としてTera Termを使用しています。Tera Termだと一度に沢山のデータを送っても問題ないです。Tera Termはそこらへんを制御しているのでしょうか? また、MSCommにもそのようなことができるのでしょうか? よくわからない質問かもしれませんが、どんな些細なことでも結構ですのでご教授願います。

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • VirtualBoxでのシリアル通信設定について

    VirtualBoxを使用したシリアル通信の設定方法について教えて下さい。 以下、やりたいこと及び、環境(設定)です。 【やりたいこと】 ホストOSとゲストOS間でシリアル通信を使用して、 データの送受信等をやりたいです。 【環境・設定】 ・VirtualBox ver.4.0.10 ・ホストOS WindowsXP SP2   通信ポート設定     COM1 有効     IRQ   04     I/O範囲 03F8~03FF   使用ソフト  ハイパーターミナル、SeriaDdebug ・ゲストOS Fedora8   通信ポート設定(VirtualBoxの設定→シリアル)     ポート1     シリアルを有効化にチェック     ポート番号 COM1(※COM2もやってみましたが、結果は変わりませんでした。)     IRQ     4     I/Oポート 0x3F8     ポートモード ホストデバイス     ポート/ファイルパス COM1     ※ポート2は設定していません。   使用ソフト minicom、自作アプリ ※上記条件でVirtualBoxのfedoraを立ち上げて、ホスト側でシリアル用ターミナルを 起動すると、ポートが開けません等のエラーログ(ポップアップ)が出ます。 設定方法、そもそものできる出来ない等のアドバイス、回答をお願い致します。 よろしくお願いします。

  • 通信ポートCOM5以上のモニタ方法

    COM5以上の番号で認識される通信ポートをモニタする方法についての質問です。 使用しているパソコンは、富士通FMV-680MC4 標準でCOMポートが搭載されていないので、USB-シリアル変換器(USB-RSAQ3)を使用します。 変換器は正しく認識しますが、COM5で認識されてしまいます。テラターム等の通信ツールでモニタしたいのですが、テラタームはCOM1~COM4までしか選択出来ないのです。 そこで、質問が2つ(2通り)あります。 (1)COM5以降の大きな番号を選択できるラインモニタツールがあれば教えて下さい。バイナリではなく、アスキーで表示する事と、ロギング出来る事が条件です。 (2)ポート番号をCOM1~4に変更する方法を教えて下さい ちなみに、デバイスマネージャーを開いて、該当するCOMポートのプロパティ→詳細設定を開き、COMポート番号を変更しようとすると、COM1~COM4までは使用中と表示されています。 ・・・これは無理と言う事でしょうか? よろしくお願いします。

  • シリアル通信エラー

    VBのMSCommにてシリアル通信アプリを作成しました。 デスクトップPC(Win2000)では正常に動作するにも関わらず、 ノートPC(WinMe)ではデータ受信時にとりこぼしが発生する様です。 とりあえず、MSCommのOnCommイベントプロシージャ内でCommEventプロパティにて エラーコードを引っ掛けると、1006(ポート オーバーランです。ハードウェアから 1 文字が読み取られる前に、次の文字が受信されたため、先の文字は失われました。)というエラーが返却されます。 デスクトップPCでは何日か継続して通信させておいても、全くこのエラーが出ないのに ノートPCでは数秒~数分で頻繁に発生します。 このエラーの意味について調査したのですが、様々なHPを見ると、FIFOバッファ(通常16バイト)のエリアが一杯になり、前にかかれていたデータが上書き されたという事ではないかという所に辿り着きました。そこで、デバイスのポート設定の詳細 にて受信バッファを低レベル(1バイト受信毎にCPU割り込みを発生)にする事により、なるべく FIFOバッファの余裕を持たせる設定にすれば、問題は解決あるいは頻度の減少を期待出きる と思い、設定したのですが、結果は全く変わりませんでした。そこで質問です。 1)このエラーの意味は本当にFIFOバッファのオーバーランなのでしょうか。 2)もし、そうであるならば、解決策はあるのでしょうか?  フロー制御で回避出きる問題ではありませんよね? 3)このFIFOバッファあたりの調査が可能なツールはありますでしょうか?出きれば、本当にFIFOバッファが一杯になる現象がデータとして取得出きればうれしいのですが。 現在、MSCommの設定としては以下の通りです。 Settings=115200,N,8,1 InBufferSize=3000 Handshaking=2 以上、1)~3)すべてでなくても構いません、よろしくお願いします。

  • シリアル通信のイベント受信について

    現在VB6.0を使用してシリアル通信のプログラムを MsCommを使用せず、CreateFileを使用して行っておりますが、 データの受信を受信したタイミングでテキストボックスに表示したいのですが どの様にすると受信したタイミングでデータを取得できるのかわからず困っております。

  • シリアル通信(タブレット、シーケンサー)

    現在、WindowsXP + VB6 + MSComm <ー> FXn2-16MR(RS232Cユニット)を シリアル通信で制御しています。これをWindows8.1(タブレット) + VB2013で全面的に 書き換えを行っています。テスト用のパソコンとは何の問題間無く通信は通りますが、 対シーケンサーだと送信はしているようだが、受信が全くできない状態です。 制御パラメータは、SerialPort1.Handshake=None, DtrEnable=True, RtsEnable=True 送信時のプロトコルは、<ENQ> + データ(ASCコード) 受信時のプロトコルは、<STX> + データ(ASCコード)+ <ETX> VB6は、この設定で動作しています。 VB2013では、制御パラメータは同じし送受信では普通に SerialPort1.Write、SerialPort1.ReadLineを使っています。 宜しくお願いします。

  • VBでシリアル制御

    VB4でシリアル制御したいのですが、どの様にして良いのかわかりません。 しかも、MSCommというのが必要だと言うところまではわかったのですが、 VB4のスタンダードではこれが入っていません。 これが無いとシリアル制御は無理なのでしょうか? それとも、別の方法が有るのでしょうか? すみませんがよろしくお願いします。

専門家に質問してみよう