プログラミング方法 - Visual Basic シリアルポートクラス使用
Visual Basicでシリアルポートを制御
Visual Basicでシリアルポートの制御を行うには、.NET Framework 2.0 シリアルポートクラスを使用する方法とWin32 APIを使用する方法があります。ここでは、比較的簡単なシリアルポートクラスを使用したデータの送受信のプログラム例を紹介します。
.NET Framework SerialPort(シリアルポートクラス)
.NET Framework は、Ver.2.0 からCOMポート用のクラス(SerialPortコンポーネント)が追加されました。Visual Basic 2005以降は、.NET Framework のSerialPortコンポーネントが使用可能となり、比較的簡単にCOMポートを制御できるようになりました。代わりに、Visual Basic 6 など、これまでのバージョンでよく使用されていた「MSCommコントロール」は使用できなくなっている点に注意してください。
.NET Framework SerialPortの機能
- シリアルポートへの接続設定
- コマンド送出(RTS, CTSなどシリアルインターフェイス各種制御信号制御および状態入力)
- データの送信
- シリアル接続中のさまざまなイベントおよびエラー監視と対処(各種制御信号の状態変化および、通信中にエラーが発生した際、イベントを発生させることが可能)
- シリアルポートへの接続設定
.NET Framework 2.0 SerialPort プログラミングのポイント
- NewLine(以降、便宜上「デリミタコード」(終端コード/区切り記号)と表現します)含むデータの書き込み/読み込みができます。デリミタコードを付加することで、連続したデータの区切りとして自動的に判断します。送信時「WriteLine」を使用する場合は、データ列に指定デリミタコードが自動で付加されます。
- 割込み(イベントドリブン)処理により双方向処理が可能です。「DataReceived」や「PinChanged」イベントにより、制御信号線の変化やデータ受信などのイベントが発生した瞬間に通知を受けることができます。イベントが発生した時点で割り込みが発生するため、必要な処理を迅速に行うことができます。
SerialPortコンポーネントを貼り付けます
Visual Basicの「ツールボックス」からSerialPortコンポーネントを選択し、左クリックでコンポーネントをドラッグ&ドロップでフォームに貼り付けます。貼り付けが完了すると、フォーム下に貼り付けたコンポーネントが現れます。
プロパティを設定します
現れたコンポーネントをクリックすると、このコンポーネントのプロパティウィンドに切り替わります。「PortName」プロパティでは、通信に使用するポート番号を設定します。初期値は「COM1」です。「BaudRate」プロパティでは、通信速度を設定します。初期値は「9600」です。その他、RTSの使用有無などの設定も行えます。
イベントの設定も行うことができます

プロパティウィンドのイベントボタンをクリックすると、このコンポーネントのイベントの一覧が現れます。使用するイベントを選択しダブルクリックすると、該当イベントルーチンが追加されますので、この場所に各種イベントが発生した際の処理を記述します。
イベントの種類
DataReceived 受信イベント
- Chars
- 文字を受信し、受信バッファにデータが格納された場合
- Eof
- EOF(End-of-file)を受信し、これが受信バッファに格納された場合
ErrorReceived エラーイベント
- Frame
- フレーミングエラーを検出
- Overrun
- オーバーランエラーを検出
- RxOver
- バッファオーバーフローを検出
- RxParity
- パリティエラーを検出
- TxFull
- 送信バッファがいっぱいでデータをバッファに格納できない状態
PinChanged シリアルピン変更イベント
- Break
- ブレーク信号を検出
- CDChanged
- CD(Carrier Detect)の状態が変化
- CtsChanged
- CTS(Clear to Send)の状態が変化
- DsrChanged
- DSR(Data Set Ready)の状態が変化
- Ring
- リングインジケータを検出
Win32 APIでシリアルポートを制御
シリアルポートのプログラミングには、Win32 API(Application Program Interface)を呼び出す方法もあります。Win32 APIとプログラミング言語の深い知識が必要となりますが、より高度で柔軟性のあるプログラミングが可能となります。
Win32 APIとは、Windows が標準で提供している機能(関数)セットです。DLL形式で提供され、Windows上で動作するアプリケーションであれば共通して使用することができます。Windowsは、主たる機能を約1000種類のAPI関数として提供しており、アプリケーションソフトはこれらの機能の組み合わせとして構築されています。Visual BasicやVisual Cは、多くの命令を持っていますが、すべてのWindows機能を使えるわけではなく、必要に応じてAPI関数を呼び出して利用することになります。シリアルポートを制御するには以下のAPIなどを使用します。
シリアルポート制御に使用するWin32 API
- ポートのオープン
- CreateFile
- ポートの設定
- SetCommState、SetCommTimeouts
- データの送信
- WriteFile
- データの受信
- ReadFile