Excelからシリアル通信を実現してみようという連載の8回目です。前回の記事はこちらになります。
前回までで、LoopBackTestTool(以下、本ツール)に記述しているコードについて解説しました。 これでひととおりの解説も済んで、ツールも完成しました。
更なる改善
でも完成したツールは一応通信ができるものの、追加勝手は今ひとつですね。改善したいのですが、実装している標準モジュールがイケていないのが原因だと思います。どういったところがいけてないのでしょうか。
通信1回ごとに接続が切れる
このモジュールは送受信を1回実行するごとに接続を設定して、終了すると切断します。Arduinoのシリアルモニターの様にリアルタイムで送受信を継続したいですね。連続したデータ送信も対応したいです。
細かい設定ができない
シリアル通信には他にも設定があるのですが、このツールで設定できるのはポート番号のみです。その他の設定もできるようにしたいです。ボーレート、パリティー、ビット長、ストップビットなどですね。
複数ポートでの通信ができない
1つのモジュールで1つのポートしか使えません。場合によっては複数の機器とシリアル通信したい事もあります。現状では複数のポートと通信するには、複数の標準モジュールが必要になってしまいます。モジュールは増やさずに複数の通信を実現したいですね。
いずれも標準モジュールを改良してごり押しすれば、できないと言う訳でもないのですが、余りスマートな方法ではないようです。 そして、クラスモジュールを作成すればこれらの問題を解決できると思います。
クラスモジュールを使った解決方法
クラスモジュールを使って、これらの問題をどのように解決するのでしょうか。
連続した通信
クラスモジュールからオブジェクトを作成。作成した際に接続の確立と、諸々の設定を済ませてしまえば、後は通信を終了するまで接続を維持できますね。
細かい設定
設定はプロパティを使用すれば、柔軟に実現できると思います。オブジェクト作成後に設定すればいいですね。一度設定すれば、オブジェクトが破棄されるまで有効です。デフォルトの設定機能も欲しいです。
複数の接続
クラスモジュールにすれば、複数のオブジェクトが作成できますので複数の接続も簡単に実現すると思います。
クラスモジュールの構成
次に、作成するモジュールの構成について考えてみましょう。
ダイナミック リンク ライブラリ (DLL) の参照、その他の宣言
この部分については今まで作成した標準モジュールの内容でいいと思います。
コンストラクター
コンストラクターでポート番号を指定したいところですが、VBAのクラスモジュールはコンストラクターに引数で値を渡すことができないのです。ですので、コンストラクターに設定できる項目はほとんどありません。
プロパティー
次にプロパティーです。以下の項目が考えられます。
ポート番号
ポート番号の設定は、この部分で行います。ここが指定されないと、他の項目も設定できないので一番最初に設定します。逆に、他のプロパティーはポート番号が設定されていない場合には設定できないようにしなければいけません。
また、ポート番号が設定された際に、その他のプロパティーもデフォルト値を設定しておきましょう。
バッファー
続いてバッファーです。サイズを設定するのですが、この際に内容のクリアもしてしまいましょう。
通信設定
通信設定は複数の項目があるので、文字列形式で設定できるようにしたいですね。DOSプロンプトで動作確認したときのような感じです。
「BAUD=9600 PARITY=N DATA=8 STOP=1」みたいな感じでどうでしょうか。確認する場合もこの形で返ってくればわかりやすいですね。
こんな感じです。勿論それぞれの設定値は確認できるようにしておきます。
メソッド
続いてメソッドです。コチラは簡単ですね。
データの送信
データを引数で渡して送信します。
データの受信
受信バッファーの内容を確認して、テータがあればデータを受信します。
デストラクター
デストラクターはポートのクローズだけです。
以上で大体の構成の目途がついて来たと思います。
次回からコーディング
いかがでしょうか。設計前に、こうして全体の構成を考えてみると整理されていいと思います。次回からはクラスモジュールのコーディングに取り組みます。お楽しみに!!