データ送信 - Visual Basic 2005 シリアル通信プログラム

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のリファレンスで確認ください。