SerialPortコントロールについて

タグの編集
投稿者 VB初心者  (社会人) 投稿日時 2014/10/30 18:18:36



SerialPortコントロールを使用して通信を行っています。
VB-FT245AM(USB-パラレル変換IC)間の通信を行うことができましたが、根本的な質問です。

VB(PC)とFT245AM(USB-パラレル変換IC)との間は、USB接続しています。

SerialPortコントロールで、USB通信も行えるということでしょうか?
元々、SerialPortコントロールで行えるのは、RS-232C規格の通信だと思っていましたので、
USB通信ができていることが信じられません。

通信の接続は、次のコードで実現できていますが、
コードの中で、特に通信規格に準じた設定をしている訳でもありません。
このSerialPortコントロールというのは、色々な通信規格に自動的に対応できるのでしょうか?

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            SerialPort1.PortName = TextBox1.Text
            If SerialPort1.IsOpen = True Then
                MessageBox.Show("すでに" & SerialPort1.PortName & "は接続されています。", "エラー",
                MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

            SerialPort1.DtrEnable = True
            SerialPort1.Open()

            Timer1.Enabled = True
            Button1.Enabled = False
            Button2.Enabled = True

        Catch ex As Exception
            MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/10/30 19:44:10
そっちの方面には詳しくないのですが、D2XX ドライバを用いて
USB-パラレル+シリアル変換している、ということでしょうか。

だとしたら、.NET 側から見えているのは、あくまでも「シリアルポート」であって、
その物理的接続が USB なのか RS-232C なのかは関係無いのだと思います。

USB ポートにマウスが繋がれていれば、ポインティングデバイスと認識され、
USB ポートに HDD が繋がれていれば、マスストレージと認識され、
USB ポートにプリンターが繋がれていれば、プリンターだと認識されますが、
それと同じような話のように思えましたが…そういうことではないのかな。
投稿者 VB初心者  (社会人) 投稿日時 2014/10/31 09:23:27
 魔界の仮面弁士様

回答ありがとうございます。

VBで用意されているSerialPortコントロールは、Serialポートの通信しか対応できないと考えていました。
正しくは、VBで用意されているSerialPortコントロールは、COMポートを利用した通信ができる…という理解が正しいのでしょうか?

私の理解は、次の通りです。
RS232C通信を行う場合、次の概要構成で接続が確立されると思います。
COMポート  ---   シリアルポート   ---  RS232C

USBやマウスなどの接続は、
COMポート  ---   仮想シリアルポート   ---  USB機器やマウスなどのデバイス, etc

この仮想シリアルポートが、ドライバ(D2XXドライバ)であると理解しました。

コントロール名がSerialPortコントロールなので、勝手にRS-232やRS422通信しかできないと考えてしまいました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/10/31 15:51:23
> 正しくは、VBで用意されているSerialPortコントロールは、

細かいことですが、SerialPort はコントロールではなく、コンポーネントです。

System.Windows.Forms.Control 継承クラスではなく、
System.ComponentModel.Component 継承クラスなので。


> COMポートを利用した通信ができる…という理解が正しいのでしょうか?

COMポートの指定は必須ですよね。そしてその上で、
「シリアル通信」を行うための代物かと思います。


指定した COMポートが VCP なのか物理なのかは関係ないですし、
物理だとして、その結線が DSub-9 なのか DSub-25 なのか、
あるいは PCMCIA、IEEE1394、USB、IrDA などであったのかなどは
特に意識する必要はありません。"COM1"、"COM3" などといった
マッピングさえ行われるのであれば。


> USBやマウスなどの接続は、
「USB」と「マウス」を同列に持ってきてしまうと、粒度が違いすぎて語れない気が。


「マウス」には、USB接続、PS/2接続、RS-232C接続、Bluetooth接続などがありますが、いずれも OS 上からみれば、特に区別せずに使われますね。

一方「USB機器」には、マウスもあれば、シリアルやLANへの変換ケーブルなどもあります。
あるいは、一つの機器が複数の役目を持っているケースもありますよね。携帯電話を接続した場合、モデムとして認識/カメラとして認識/ストレージとして認識されるなど。
投稿者 VB初心者  (社会人) 投稿日時 2014/10/31 18:32:12
魔界の仮面弁士様

ありがとうございました。理解できました。