COM1に割り当てたUSB接続のRS-232C 1ポートタイプ COM-1(USB)H で、テキストボックスに入力した文字列データをデフォルトデリミタを含めて送信します。
使用COMポート |
COM1 |
通信速度 |
9600bps |
パリティ設定 |
なし(None) |
データビット長 |
8ビット |
ストップビット |
1ビット |
ハンドシェイク |
使用しない |
RTSライン |
無効 |
デリミタコード |
LF(Line Feed) |
画面の作成とプロパティ設定
Visual Basic 2005を立ち上げ、新しいプロジェクトを作成し、左図のような画面を作成します。SerialPortコンポーネントを画面に貼り付けます。SerialPortコンポーネントのプロパティの内容を確認します(ボーレートなどの通信設定)。
オブジェクト |
TextBox1 |
COM1 |
オブジェクト |
Button1 |
接続 |
オブジェクト |
Button2 |
切断 |
オブジェクト |
TextBox2 |
|
オブジェクト |
Button3 |
送信 |
NewLine(デリミタコード)について
デリミタコードとは、データの区切り文字、区切り記号を意味します。シリアルポートクラスのデフォルトデリミタコードは「LF」ですが、接続する機器に合わせて、設定する必要があります。接続機器の仕様書に沿って、適切なデリミタコードを使用します。
- 連続したデータの区切りを、データにデリミタコードを付加することで判断します。
- ここでのデリミタコードとは、Visual Basicヘルプ記載のNewLine値と同義とします。
- WriteLineメソッドを使用すると、送信バッファに格納した送信データに、NewLine値を付加して送信します。NewLine値のデフォルトはLF(Line Feed)です。
- デリミタコードには、CR(Carriage Return)、LF(Line Feed)、CR+LFなどが使用されることが多いです。
プログラム記述例
接続ボタン、切断ボタンクリック時の処理を追加します。Form1.vbに以下のコードを記述します。各オブジェクト(ボタンなど)をダブルクリックすると、ボタンならば、ボタンが押された時の処理を記述するプロシージャが開きます。そこに行いたい処理を記述していきます。
Private Sub Button1_Click(… → 接続ボタンが押されたときの処理
Try '例外処理のはじまり
If SerialPort1.IsOpen = True Then 'ポートはオープン済み
MessageBox.Show("エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
SerialPort1.PortName = TextBox1.Text 'オープンするポート名を格納
SerialPort1.Open() 'ポートオープン
Catch ex As Exception '例外処理
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK,MessageBoxIcon.Error)
End Try
End Sub
Private Sub Button2_Click(… → 切断ボタンが押されたときの処理
If SerialPort1.IsOpen = True Then 'ポートオープン済み
SerialPort1.Close() 'ポートクローズ
End If
End Sub
Private Sub Button3_Click(… → 送信ボタンが押されたときの処理
If TextBox2.Text.Length = 0 Then '送信データが無ければエラー
MessageBox.Show("文字列入力エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub '処理を抜ける
End If
Try
SerialPort1.WriteLine(TextBox2.Text) '送信バッファにデータ書き込み
Catch ex As Exception '例外処理
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK,MessageBoxIcon.Error)
End Try
End Sub
コードの記述でデリミタコードを変更して、データを送信する場合は、以下のように記述します。
Dim strSend As String 'NewLine格納用文字列変数
strSend = SerialPort1.NewLine 'NewLineを取得
strSend = strSend.Replace(vbLf, vbCr) '文字中のLFをCRに置換する場合
SerialPort1.NewLine = strSend '置換したデリミタをNewLineに格納
Try
SerialPort1.WriteLine(TextBox2.Text) '送信バッファにデータ書き込み
Catch ex As Exception '例外処理
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Try - Catch - End Try構文については、Visual Basic 2005のリファレンスで確認ください。