VB.NETでシリアル通信を行う
(その2)

シリアルポートのオープン/クローズを行う

ダイアログの[接続]ボタンを押されたときに、シリアルポートをオープンします。

シリアルポートのオープンを行う前に、接続するシリアルポートの通信条件を設定します。

ダイアログの[切断]ボタンを押されたときに、オープン中のシリアルポートをクローズします。

サンプルプログラムでは、[接続]ボタンと[切断]ボタンが共有のボタンなので、SerialPortクラスのIsOpen()プロパティでシリアルポートがオープンされていた場合、Close()メソッドを呼び出しています。

サンプルコードを以下に示します。


'****************************************************************************'
'*
'*  @brief  [接続]/[切断]ボタンを押したときにシリアルポートのオープン/クローズを行う.
'*
'*  @param  [in]    sender  イベントの送信元のオブジェクト.
'*  @param  [in]    e       イベント情報.
'*
'*  @retval なし.
'*
Private Sub ConnectButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectButton.Click

    If SerialPort1.IsOpen = True Then

        'シリアルポートをクローズする.
        SerialPort1.Close()

        'ボタンの表示を[切断]から[接続]に変える.
        ConnectButton.Text = "接続"
    Else

        'オープンするシリアルポートをコンボボックスから取り出す.
        SerialPort1.PortName = cmbPortName.SelectedItem.ToString()

        'ボーレートをコンボボックスから取り出す.
        Dim baud As BuadRateItem
        baud = cmbBaudRate.SelectedItem
        SerialPort1.BaudRate = baud.BAUDRATE

        'データビットをセットする. (データビット = 8ビット)
        SerialPort1.DataBits = 8

        'パリティビットをセットする. (パリティビット = なし)
        SerialPort1.Parity = Parity.None

        'ストップビットをセットする. (ストップビット = 1ビット)
        SerialPort1.StopBits = StopBits.One

        'フロー制御をコンボボックスから取り出す.
        Dim ctrl As HandShakeItem
        ctrl = cmbHandShake.SelectedItem
        SerialPort1.Handshake = ctrl.HANDSHAKE

        '文字コードをセットする.
        SerialPort1.Encoding = Encoding.Unicode

        Try
            'シリアルポートをオープンする.
            SerialPort1.Open()

            'ボタンの表示を[接続]から[切断]に変える.
            ConnectButton.Text = "切断"
        Catch ex As Exception
            MsgBox( ex.Message )
        End Try

    End If

End Sub
    

シリアルポートの通信条件を設定する

パリティビットの設定値は以下のとおりです。

データ名Parity
説明
None

パリティチェックをを行いません。

Even

バイトデータの「1」の個数が偶数になるようにパリティビットをセットします。

Odd

バイトデータの「1」の個数が奇数になるようにパリティビットをセットします。

Mark

パリティビットが常に「1」になるようにします。

Space

パリティビットが常に「0」になるようにします。

ストップビットの設定値は以下のとおりです。

データ名StopBits
説明
None

ストップビットなし。

One

ストップビット = 1ビット。

OnePointFive

ストップビット = 1.5ビット。

Two

ストップビット = 2ビット。

フロー制御の設定値は以下のとおりです。

データ名Handshake
説明
None

フロー制御を行いません。

RequestToSend

RTS/CTSによるハードウェア制御を行います。
(通常バイナリデータの送受信を行う場合、ハードウェア制御を使用します。)

XOnXOff

XON(&H11)/XOFF(&H13)によるソフトウェア制御を行います。

RequestToSendXOnXOff

XON/XOFFによるソフトウェア制御とRTS/CTSによるハードウェア制御の両方を行います。

シリアルポートをオープンする

SerialPortクラスのOpen()メソッドを呼び出して、シリアルポートの通信を接続します。


    Public Sub Open()
	

Open()は、常に成功するとは限らないので、TryCatchでオープンエラーを捕捉するようにしておく方がよいでしょう。

シリアルポートをクローズする

SerialPortクラスのClose()メソッドを呼び出して、現在接続中のシリアルポートの通信を切断します。


    Public Sub Close()
	

※サンプルプログラムでは考慮していませんが、Close()メソッドから制御が戻ってきても、すぐにはポートが閉じていないこともあるようなので、再度Open()する場合、少し待機した方が良いそうです。



Windowsは米国Microsoft Corporationの登録商標です。