【MSCommの実例】
MSCommを使った実際の例として単純なテキストの送受信のプログラムを
Visual Basic .Netを使って作成してみます。
MSCommのイベントを使って他の業務が並行処理できるようなイベントを使った
仕組みで作成します。
まず、機能は、単純で下記のようにします。
(1) 通信の初期設定
COMポート、通信速度、データ長、パリティの有無、ストップビット長、
フロー制御の有無の設定を行います。簡単にするため下記のような一定の
条件を設定するものとします。
COMポート : 2
通信速度 : 9600bps
データ長 : 8ビット
パリティ : 無し
ストップビット: 1ビット長
フロー制御 : 無し
(2) テキストデータの送信
テキストボックスに入力したテキストデータを送信します。
最後にCRコードを負荷して送信します。
(3) テキストデータの受信と表示
相手側から送られて来たテキストデータをそのままマルチラインのテキスト
ボックスに表示します。
【フォームの設定】
まずはフォームを作成します。
外観は下図のようなフォームとし、それぞれの標準コントロールを配置して
各プロパティで下記のような設定をします。
MSCommコントロールはコンポーネントを追加してから配置します。
《プロパティの設定》
FORM Text => MSComm Test
オブジェクト名 => MSCommTest
MSCommコントロール オブジェクト名 => AxMSComm1l
通信開始ボタン オブジェクト名 => cmdOpen
Text => 通信開始
送信ボタン オブジェクト名 => cmdOut
Text => 送信
送信テキストボックス オブジェクト名 => txtOutData
Text => なし
MultiLine => True
受信テキストボックス オブジェクト名 => txtInputData
Text => なし
MultiLine => True
【コードの作成】
次にそれぞれのコードを記述して行きます。コード記述が必要なイベントは下記
となります。
(1) FormのLoadイベント
通信の初期設定を行うためMSCommの設定を行います。
(2) 通信開始ボタンのclickイベント
通信の開始をするためMSCommをオープンします。
(3) 送信ボタンのclickイベント
送信テキストボックスのデータをMSCommで送信します。
(4) MSCommのOnCommイベント
受信により発生するイベントでデータを受信し、受信テキストボックスに
表示します。
【FormのLoadイベントのコード】
Formを開いた時には、まず通信条件を設定して使うCOMポートを設定しておきます。
このあと、通信開始ボタンでOPENするときの条件をあらかじめ設定しておきます。
コードの内容は下記のようにします。ここまではVB6と同じ記述で出来ます。
フロー制御をすると相手側でもその制御を組み込む必要がありますので、簡単に
する目的で、フロー制御は省略します。
MSCommコントロールの送受信のOnCommイベントを発生させるためには、
送信はバッファが空になった時に、受信は、毎回のデータの受信ごとに発生する
ように、スレッショルドを1にセットしておきます。
【通信開始ボタンのclickイベントのコード】
通信開始ボタンを押したときに、MSCommの通信をOpenします。このとき、すでに
Open済みの時にはCloseし、Close中の時にはOpenするという交互の制御とします。
それに対応して、通信開始と通信停止のボタン表示に変更します。
ここでVB.Netになって変更されたのは、プロパティのCaptionで、これはすべてText
という属性に統一されました。
【送信ボタンのclickイベントのコード】
送信をするためにまず、通信回線がOpenしているかを確認してから、送信
テキストボックスにあるはずのデータを送信します。まだオープン中でなければ
何もしません。送信データの最後には改行コードを付加します。
ここのコード内容もVB6とほとんど変わりません。
【OnCommイベントのコード】
MSCommコントロールのOnCommイベントに対応するコードを記述します。
ここでは、イベント発生要因が沢山ありますので、それぞれに対応した処理
を記述するのですが、エラー処理は大幅に省略して、受信イベントの時を主に
記述しています。この受信処理では、受信したデータを順次、受信テキストボックス
に表示しているだけです。
VB.Netになって大きく変更になったのは、この部分で、変数名称のつけ方が
厳しくなり、変数名を集めたオブジェクトが「MSCommLib」として新規に作成され
このオブジェクト名を含めたフル名称で記述する必要があります。