MSCommによるCOMポートの制御

このQ&Aのポイント
  • W2k+VB6にて開発しております。シリアル通信におけるCOMポート制御についての質問なのですが、ポートをOPENしようとすると「ポートは既に開かれています」というエラーが出てしまいます。
  • if me.comm1.portopen = False then me.comm1.portopen = True end if としているにもかかわらずOPENできません。このような場合どういった要因が考えられるのでしょうか?
  • よろしくお願いします。
回答を見る
  • ベストアンサー

MSCommによるCOMポートの制御

W2k+VB6にて開発しております。 シリアル通信におけるCOMポート制御についての質問なのですが、 ポートをOPENしようとすると「ポートは既に開かれています」というエラーが出てしまいます。 -------------------------------------- if me.comm1.portopen = False then me.comm1.portopen = True end if -------------------------------------- としているにもかかわらずOPENできません。 このような場合どういった要因が考えられるのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • prome
  • ベストアンサー率32% (64/196)
回答No.3

No.1の方の補足です。 mk_jmcさんが書かれたようにプログラムを書いても、 別のアプリが同じ番号のCOMを使用しているときは、 VBはそのようなエラーメッセージを返します。 これは経験があります。 これは想像ですが、上記のようにプログラムを書いた場合、 VBは自分のプログラムがopenしたCOMポートはチェックできても、 他のアプリがopenしたCOMポートまではわからないのではないでしょうか。 もしそれをチェックしようとすると、APIを使うか(やり方までは不明)、 エラー処理で行うかということになります(On Error GoTo文)。 どのアプリがCOMを開いているかは、PC環境によるのでわかりません。 モデムもしくは何らかの常駐ソフトか... 今時シリアルマウスということはないでしょうね。

その他の回答 (2)

  • SUZUYUU
  • ベストアンサー率33% (2/6)
回答No.2

若干参考になると思うサイトです。

参考URL:
http://isweb8.infoseek.co.jp/school/speana_1/vb/vb_menu.htm
  • ponnta
  • ベストアンサー率17% (31/179)
回答No.1

別のアプリがCOMを使っているとか・・・

関連するQ&A

  • ターミナルサーバーでの通信ポートエラーについて

    始めて質問いたしますので宜しくお願い致します。 ターミナルサーバー(Windows Server 2003 R2 SP2)上でVB5のアプリを動かしています。 FormからMSCommのコマンドにて通信ポート(COM1)のラベルプリンタ(SATO SR412)に 印刷を行うのですが1回目の印刷ではポートも正常に開けて印刷されますが フォームを閉じずにそのまま2回目を印刷した際に8012(デバイスが開けません)のエラーが 発生し印刷できません。 フォームを閉じると印刷は可能となります。 Windows XP SP3上で同じVB5のアプリを動かすとフォームを閉じなくても2回目の印刷が可能 となります。 ターミナルサーバー側の設定をどのように変更すればエラーが発生せず 印刷できるかご教授頂ける方、宜しくお願い致します。 ちなみにマイクロソフトのパッチ:838291は適用しています。 【デバッグを行った状態】 MSCommのコマンドにてデバッグを行った際、1回目の印刷時にはメッセージBOXで 状態を表示致しましたが正常にPortOpen=FALSEとなりポートがクローズされています。 2回目の印刷時にもポートがオープンされている場合にもPortOpen = Falseにて 一度、クローズしたのちPortOpen = Trueにて開こうとしていますがエラーとなります。 実行のコマンドは以下となります。 With X_oMSComm If .PortOpen = True Then .PortOpen = False End If .CommPort = 1 .DTREnable = True .RTSEnable = True .NullDiscard = False .Settings = "9600,N,8,1" .Handshaking = 0 .SThreshold = 0 .RThreshold = 0 .InputLen = 0 .PortOpen = True  ← このコマンドにてエラーとなります。 End With

  • シリアルポートないんですね。

    最近のノートはシリアルがないんですね。 VBを使ってシリアル通信のプログラムを作って社内に配布しようとしたら、シリアルなんかないよって。USBでできないのって。カードは?って。 MS-COMM使ってる場合、どうしようもないですよね。COMポートの制御は。 ささいなことでかまいませんから、教えてくださいませんか?

  • VBからオープン可能なCOMポート数

    VBのアプリケーションを作成して、PCのCOMポートをオープンしてモデム制御などを行おうとしているのですが、17番以降のポートをオープンしたり、アクセスすることができません。何か原因があるのでしょうか。 VBで無理であれば、他に方法はありませんでしょうか。 よろしくお願い致します。

  • VB6.0で音声発信したい

    VB6.0を使って、電話(音声)を自動でかけたいのです。 MSCommを使って、ポートを開いて電話をかけるところまではできたのですが、「ピー」という音がず~~と相手に聞こえてしまいます。 これはプログラムが悪いのでしょうか? それともモデムが悪いのでしょうか??? プログラムは以下の通りです。 MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" If MSComm1.PortOpen = False Then    MSComm1.PortOpen = True End If MSComm1.Output = "ATD" & 電話番号 & Chr(13) 申し訳ありませんが、ご教授ください。

  • VB2005によるRS232C制御

    VB2005でZX-800L(TAKASAGO)を動かしたいのですがポートオープンできません。(オープンできるとREMOTOが点灯するはずなんですが…) 現在MSCommまたは確認の意味でNSPcomを用いています。(シリアルポートもあるんですができれば前者でやりたい) 機器の設定は何度も確認して間違いはないと思われます。(windowsXP使用)プログラムは以下です。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '<RS232C constant> STX = "02" EOT = "04" ENQ = "05" '伝送キャラクタ設定 ACK = "06" NAK = "15" ETX = "03" RTN = "0A" Comport = 1 OP = "9600,n,8,1" 'baud rate,stop bit,data bit,parity ADD = "01" 'RS232Cアドレス BC = "\" & EOT & ADD 'EOT+ADD Call ATH(BC) 'アスキー変換サブルーチンです。 EOTADD = BCH または (MSComm.CommPort = 1 'RS-232Cポート番号 MSComm.PortOpen = True MSComm.Settings = "9600,n,8,1" MSComm.RThreshold = 1 MSComm.SThreshold = 1 MSComm.RTSEnable = False MSComm.InputMode = MSCommLib.InputModeConstants.comInputModeBinary) End Sub この後、クリックイベント ret = Me.NspCom.ComOpen(Comport, OP) If ret = -1 Then MsgBox("miss") End If または (MSComm.PortOpen = true) でオープンさせたいのですが… 機器のHPにもサンプルプログラムもなく困っています。助言&ご指摘お願いします。

  • RS232Cによる定電圧・定電流直流電源ZXシリーズの制御方法

    VB2005によるTAKASAGOのZX-800Lの操作を行いたいのですがRS232Cのポートオープンができません。 MSCommかNspComを用いて何とかしたいのですがどうしたらいいでしょうか??現在のプログラムと設定が以下のものです。 Comport = 1,OP="9600,1,8,1",機器アドレス="01" MSComm.CommPort = 1 'RS-232Cポート番号 MSComm.Settings = "9600,n,8,1" Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click ret = Me.NspCom.ComOpen(Comport, OP) If ret = False Then MsgBox("ポートのオープンに失敗しました") End If End Sub もしくわ、MSComm.PortOpen = TrueをNspComの代わりに入れるかといったところなのですが…[HRESULTからの例外0x800A1F45]というエラーが出たりして通信できません。ポートオープンでき通信できるとZX-800LのREMOTEランプが点灯するはずなのですが点灯せず行き詰っています。アドバイス、解決方法、例になるプログラムありましたら教えてください。 ※拙い文章で申し訳ありません。補足等必要でしたら聞いてください。

  • パソコンのポート(LP1 COM)について

    パソコン素人です。 現在外出持ち歩きに lenovo X60という機種のパソコンを使っています。 どうしても使う必要の有るソフトで、「COMポートを1に設定しろ」と言うのが有ります。 デバイスマネージャーで確認してもどうもこの機種にはCOM1(シリアル)ポートが有りません 調べるとこの機種には元々シリアルのポートは存在していない事が分かりました。 不思議に思っているのですが これは外部通信/制御の為の物なのですがこれのケーブルそのものはUSBです。 でも何故か?ポートをCOM1にしないと動きません。 そのような機種にポート(LP1 COM)を作る事は出来ないでしょうか? そもそも最近の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になり、上手く使いこなせません この現象について、アドバイスいただける方いましたら よろしくおねがいします。

  • 条件判断について教えて下さい。

    VB2008を使用している初心者です。 現在、RichTextBoxとCheckBoxとそれに対応したTextBoxを準備し、CheckBoxがTrueのTextBox.TextをRichTextBoxに代入するプログラムを作成しています。RichTextBoxにはCheckBoxをTrueにした分だけ複数のTextBox.Textを代入させています。ここまでのプログラムは下記コードで問題なく作動しています。 Button1を押す。 RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ If Me.CheckBox20.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox20.Text End If ここで問題なのですが、RichTextBox1への代入完了後、FalseにしたCheckBoxを再度True(代入時に選択したもののみ)にするコードをButton2に作成したいのですが上手くいきません。例えば下記のコードですと、RichTextBoxに1つだけTextBoxが入っている場合しかCheckBoxのTrueが戻りません。 If Me.CheckBox1.Checked = False Then If RichTextBox1.Text = TextBox1.Text Then Me.CheckBox1.Checked = True End If End If ・ ・ ・ If Me.CheckBox20.Checked = False Then If RichTextBox1.Text = TextBox20.Text Then Me.CheckBox2.Checked = True End If End If これはIf RichTextBox1.Text = TextBox1.Text Thenにしてしまっているためだと思いますが、これをどう修正したら良いかわかりません。もしお時間がある方みえましたらご教授お願いいたします。

  • VB2010で、シリアル通信をするには

    VB2010で、シリアル通信をするには シリアルポートをopenしようとすると、エラーで弾かれてしまいます。 どのように対処したら良いですか? 使っているソースコードは、下記の通り。 Private Sub ButtonRsStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRsStart.Click Try '例外処理のはじまり If SerialPort1.IsOpen = True Then 'ポートはオープン済み MessageBox.Show("すでに" & SerialPort1.PortName & "は接続されています。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SerialPort1.PortName = "COM1" 'オープンするポート名を格納 SerialPort1.Open() 'ポートオープン PORT_STATE.Text = "OPEN" Catch ex As Exception '例外処理 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub --------------- エラーが発生する場所は、「Catch 」になります。 エラーメッセージは、「ポート 'COM1' へのアクセスが拒否されました。」です。 何が原因なのか、さっぱり分かりません。 ヒントになりそうな解答を頂けないでしょうか?