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()は、常に成功するとは限らないので、Try ~ Catchでオープンエラーを捕捉するようにしておく方がよいでしょう。
SerialPortクラスのClose()メソッドを呼び出して、現在接続中のシリアルポートの通信を切断します。
Public Sub Close()
※サンプルプログラムでは考慮していませんが、Close()メソッドから制御が戻ってきても、すぐにはポートが閉じていないこともあるようなので、再度Open()する場合、少し待機した方が良いそうです。