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

概要

Visual Basicから.NET FrameworkのSerialPortコントロールを使用してシリアルポートからデータの送受信を行うサンプルコードです。

文字列の送受信を行います。

SerialPortクラスの使い方はC#でシリアル通信を行うときと同じです。

サンプルプログラムの仕様

作成するサンプルプログラムは以下の仕様にします。

  • ウインドウ・スタイルはダイアログにする。
  • シリアルポートはユーザーが選択できる。
  • ボーレートは、4800bps/9600bps/19200bps/115200bpsからユーザーが選択できる。
  • フロー制御をユーザーが選択できる。
  • その他の通信設定は固定値とする。
  • [接続]ボタンを押すとシリアルポートをオープンし、ボタン表示を[切断]にする。
  • [切断]ボタンを押すとシリアルポートをクローズし、ボタン表示を[接続]にする。
  • [送信]ボタンを押すと、送信データのテキストボックスから送信する文字列を取得してシリアルポートに送信する。
  • シリアルポートから受信したデータは、受信データのテキストボックスに追記する。

サンプルプログラムの外観は以下のようにします。

プロパティとメソッド

SerialPortクラスの主なメソッドとプロパティは以下のとおりです。

クラス名System.IO.Ports.SerialPort
基本型

Component

メソッド名説明
GetPortNames

利用可能なシリアルポート名の配列を取得します。

Open

シリアルポートを接続します。

Close

接続中のシリアルポートを切断します。

Read

シリアルポートの受信バッファから受信データを読み込みます。

ReadByte

受信バッファから、受信データを1バイト読み込みます。

ReadChar

受信バッファから、受信データを1文字読み込みます。

ReadExisting

データ受信待ちをせずに、現在受信バッファにある読込み可能なデータを読み込みます。

ReadLine

受信バッファから1行分(改行コードまで)の文字列を読み込みます。

ReadTo

受信バッファから指定した値までの文字列を読み込みます。

Write

シリアルポートの送信バッファに送信データを書き込みます。

WriteLine

文字列と改行コード(NewLine値)を送信バッファに書き込みます。

プロパティ名説明
PortName

オープンするシリアルポートの名称を設定します。

BaudRate

通信速度(ボーレート)を設定します。

DataBits

1バイトのデータビット数を設定します。

Parity

パリティビットを設定します。

StopBits

ストップビットを設定します。

Handshake

フロー制御を設定します。

Encoding

送信する文字列の文字コードを設定します。

NewLine

改行コードを設定します。

ReadBufferSize

受信バッファのサイズを設定します。

WriteBufferSize

送信バッファのサイズを設定します。

ReceivedBytesThreshold

データ受信イベントが発生する、受信バッファのバイト数を設定します。

ReadTimeout

受信待ちタイムアウトを設定します。(ms単位)

WriteTimeout

送信完了タイムアウトを設定します。(ms単位)

BreakState

ブレーク シグナルを設定します。

DiscardNull

受信した null バイトを無視するかどうかを設定します。

ParityReplace

パリティエラーの発生したデータを置き換えるデータを設定します。

IsOpen

シリアルポートがオープンしているかどうかを調べます。

BytesToRead

受信バッファ内にある受信データのバイト数を取得します。

BytesToWrite

送信バッファ内にある未送信データのバイト数を取得します。

RtsEnable

RTS(Request To Send)信号を設定します。

DtrEnable

DTR(Data Terminal Ready)信号を設定します。

DsrHolding

DSR(Data Set Ready) シグナルの状態を取得します。

CtsHolding

CTS(Clear To Send)信号の状態を取得します。

CDHolding

CD(キャリア検出)信号の状態を取得します。

イベント名説明
DataReceived

シリアルポートでデータ受信が発生したときのイベントを処理するメソッド。

ErrorReceived

シリアルポートで受信エラーが発生したときのイベントを処理するメソッド。

PinChanged

シリアルポートの信号線の状態が変化したときのイベントを処理するメソッド。

ダイアログの初期処理

ダイアログのLoad()メソッドでダイアログの初期処理を行います。

ダイアログの初期処理では、シリアルポート名と通信設定値のコンボボックスを作成します。

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


'****************************************************************************'
'*
'*  @brief  ダイアログの初期処理.
'*
'*  @param  [in]    sender  イベントの送信元のオブジェクト.
'*  @param  [in]    e       イベント情報.
'*
'*  @retval なし.
'*
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    '利用可能なシリアルポート名の配列を取得する.
    Dim PortList As String()
    PortList = SerialPort.GetPortNames()

    cmbPortName.Items.Clear()

    'シリアルポート名をコンボボックスにセットする.
    Dim PortName As String
    For Each PortName In PortList
        cmbPortName.Items.Add(PortName)
    Next PortName

    If cmbPortName.Items.Count > 0 Then
        cmbPortName.SelectedIndex = 0
    End If

    cmbBaudRate.Items.Clear()

    'ボーレート選択コンボボックスに選択項目をセットする.
    Dim baud As BuadRateItem
    baud          = New BuadRateItem
    baud.NAME     = "4800bps"
    baud.BAUDRATE = 4800
    cmbBaudRate.Items.Add(baud)

    baud          = New BuadRateItem
    baud.NAME     = "9600bps"
    baud.BAUDRATE = 9600
    cmbBaudRate.Items.Add(baud)

    baud          = New BuadRateItem
    baud.NAME     = "19200bps"
    baud.BAUDRATE = 19200
    cmbBaudRate.Items.Add(baud)

    baud          = New BuadRateItem
    baud.NAME     = "115200bps"
    baud.BAUDRATE = 115200
    cmbBaudRate.Items.Add(baud)
    cmbBaudRate.SelectedIndex = 1

    cmbHandShake.Items.Clear()

    'フロー制御選択コンボボックスに選択項目をセットする.
    Dim ctrl As HandShakeItem
    ctrl           = New HandShakeItem
    ctrl.NAME      = "なし"
    ctrl.HANDSHAKE = Handshake.None
    cmbHandShake.Items.Add(ctrl)

    ctrl           = New HandShakeItem
    ctrl.NAME      = "XON/XOFF制御"
    ctrl.HANDSHAKE = Handshake.XOnXOff
    cmbHandShake.Items.Add(ctrl)

    ctrl           = New HandShakeItem
    ctrl.NAME      = "RTS/CTS制御"
    ctrl.HANDSHAKE = Handshake.RequestToSend
    cmbHandShake.Items.Add(ctrl)

    ctrl           = New HandShakeItem
    ctrl.NAME      = "XON/XOFF + RTS/CTS制御"
    ctrl.HANDSHAKE = Handshake.RequestToSendXOnXOff
    cmbHandShake.Items.Add(ctrl)
    cmbHandShake.SelectedIndex = 0

    '送受信用のテキストボックスをクリアする.
    SndTextBox.Clear()
    RcvTextBox.Clear()

End Sub
	

利用可能なシリアルポート名をリストアップする

使用するシリアルポートをユーザーが選択できるように、利用可能なシリアルポートの名称をSerialPortクラスのGetPortNamesメソッドを利用してコンボボックスにリストアップします。


    Public Shared Function GetPortNames As String()
	

戻り値として利用可能なシリアルポート名のString型の配列を取得します。

設定可能な通信設定としてボーレートとフロー制御のコンボボックスを作成します。



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