- PR -

COMポート番号設定

1
投稿者投稿内容
ダイエット
会議室デビュー日: 2007/04/20
投稿数: 13
投稿日時: 2007-05-21 05:40
COMポート番号の設定に失敗します。原因をご存知のかたおられましたら
お教えください

----------------------------------
環境 WindowsXPPro sp2 VisualStudio.NET2005(vb)
----------------------------------
Dim ports As String() = IO.Ports.SerialPort.GetPortNames()
Dim port As Object
Try
AxMSComm1.Settings = "38400,E,8,1"
(ほかHandShakingなど設定)
For Each port In ports
If port.Length > 3 Then
AxMSComm1.CommPort = CShort(port.Substring(3)) ← ●
End If
Next port
Catch e As Exception

End Try
----------------------------------
実行結果
 ports の値 "COM3","COM4","COM5" の配列
 for内のportには一番最初に COM3 → ポート番号3 を割り当て
  二度目のループでportにはCOM → ポート番号4 
 と続きますが 一回目の上記●の箇所では問題なく、2回目に
 ●の箇所でCOMExceptionが発生します
---------------------------------
現象 COMポート番号に4,5が割り当てられない
----------------------------------

その原因と対策をご存知の方おられましたらよろしくお願いいたします。
ダイエット
会議室デビュー日: 2007/04/20
投稿数: 13
投稿日時: 2007-05-21 08:21
追記です

AxMSComm は AxMSCommLib.AxMSComm です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-21 10:05
コード:

    Private Shared Sub MosaMosaAA()
        Try 
            Me.AxMSComm1.Settings = "38400,E,8,1"
            Dim portNames As String() = System.IO.Ports.SerialPort.GetPortNames() 

            For Each portName As String In portNames
                If portName.Length >= 4 Then
                    Dim portNumber As Short

                    If Short.TryParse(portName.Chars(3), portNumber) Then
                        Me.AxMSComm1.CommPort = portNumber
                    End If
                End If
            Next
        Catch ex As System.Exception
            MessageBox.Show(ex.ToString())
            Throw
        End Try
    End Sub


このように試してみましたが、再現しませんでした。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ダイエット
会議室デビュー日: 2007/04/20
投稿数: 13
投稿日時: 2007-05-21 10:28
じゃんぬねっとさん 試していただいたようでありがとうございます。

キャストする部分を、ご提示のように変更し実行したところCOMExceptionが発生したので、stackTraceをとってみました。以下のとおりです。

場所 MSCommLib.IMSComm.set_CommPort(Int16 psCommPort)
場所 AxMSCommLib.AxMSComm.set_CommPort(Int16 value)
場所 (AxMSComm1.CommPort に ポート番号をセットしている行)

この質問を投稿する前にも、この部分のソースを変更しない状態で実行しても
同じExceptionが発生しないときもあり、困っています。





[ メッセージ編集済み 編集者: ひまわり 編集日時 2007-05-21 10:31 ]
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-05-21 11:43
引用:

ひまわりさんの書き込み (2007-05-21 10:28) より:
キャストする部分を、ご提示のように変更し実行したところCOMExceptionが発生したので、stackTraceをとってみました。以下のとおりです。

場所 MSCommLib.IMSComm.set_CommPort(Int16 psCommPort)
場所 AxMSCommLib.AxMSComm.set_CommPort(Int16 value)
場所 (AxMSComm1.CommPort に ポート番号をセットしている行)

この質問を投稿する前にも、この部分のソースを変更しない状態で実行しても
同じExceptionが発生しないときもあり、困っています。



PortOpenプロパティをTrueにした状態で、
すでに使用されているポートを設定とすると、COMExceptionがスローされます。

というか…SerialPortクラスを使いつつ、わざわざMSComm OCXを使う理由ってなんなんでしょう?
ダイエット
会議室デビュー日: 2007/04/20
投稿数: 13
投稿日時: 2007-05-21 11:58
質問内容と関係あるかわかりませんが、同じプロジェクトの
違うメソッドで

Dim Buffer as object
Buffer = ap.AxMSComm1.Input

この2行目でやはりCOMExceptionが発生します。
2行目実行直後に
'System.InvalidCastException' の初回例外が Microsoft.VisualBasic.dll で発生しました。"
が発生し、それから、最後にはCOMExceptionというエラーがかえってきます。

関連あるのでしょうか?


1

スキルアップ/キャリアアップ(JOB@IT)