ActiveXコントロールを使うとWebシステムからハードウェアを制御できる
Web技術が普及する前の業務システムは、「クライアントサーバー型システム」で構築されていました。「クライアントサーバー型システム」は、PCにクライアントソフトウェアのインストールが必要なので、PCの管理作業に手間が掛かっていました。
Web技術が普及した今、業務システムは「Webシステム」として構築されるようになっています。「Webシステム」はクライアント上のブラウザを利用します。これによりPCへの個別のソフトウェアインストール作業が不要になりました。
ただし、「Webシステム」はクライアント側のアプリケーションがブラウザで実行されるため、従来は簡単だった「ハードウェアの制御」が難しくなります。これはブラウザにハードウェアの制御機能がないためです。例えば以下のような機能がそれにあたります。
- バーコードリーダーを接続して、会員証や商品のバーコードを読み込む。
- タイムカード用の機器を接続する。
- FeliCaで認証を行う。
ブラウザ上で動作するActiveXコントロールを利用すると、この問題を解決できます。ActiveXコントールは、ブラウザ上で動作するプロ グラムコンポーネントです。ActiveXコントロールは、ハードウェア制御が無理なく行える上、通常のWebシステムのHTML上に配置したJava ScriptやVB Scriptから、その機能を呼び出せます。
このコラムではActiveXコントロールを使って、WebベースのシステムからRS-232Cなどのシリアルポートに接続したハードウェアを制御する方法をご紹介します。
接続方法
最近のPCにはシリアルポートが省略されているため、接続するには変換ケーブルが必要になります。ドライバソフトウェア付きで数千円ほどで購入できます。
ソフトウェアの構成
ブラウザ上で動作するHTMLのobjectタグにActiveXコントロールを指定し、JavaScriptからActiveXのメソッドやプロパティを呼び出して利用します。
ActiveXコントロールとは
ブラウザ上で動作するプログラムコンポーネントです。OSネイティブなコードを実行できるため、ハードウェア制御も無理なく行えます。
HTMLのOBJECTタグにより起動し、JavaScriptやVB Scriptからメソッドを呼び出すことができます。
ActiveXコントロールの実態はDLLファイルです。HTMLや画像ファイルなどと同様にWebサーバーに配置します。ActiveXコント ロールのインストールは、ほぼ自動で行えます。ユーザーがインストールのために行うのは、初回実行時に表示される警告に答えるだけです。
ActiveXコントロールの開発
ActiveXコントロールは、VC++を使いネイティブコードで記述します。MFCかATLのどちらか(または両方)を利用するのが一般的ですが、ATLを利用するほうがコンパクトなモジュールを開発することができます。
開発したモジュールはコードサイニング証明書を利用して署名します。署名の際にはタイムスタンピングサービスを利用して、署名日時の情報を付加することが一般的です。コードサイニング証明書はベリサインやグローバルサインより購入します。
装置からの受信を契機に処理を行う場合
JavaScriptのsetTimeoutを利用して繰り返し処理を実装する方法が簡単です。このsetTimeoutで指定する時間は他の処理(画面の書き換えやシリアルポートへの書き込み)も動作します。
function LoopRead() {
if (quitflg != 0) {
// 終了ボタンなどが押されたときなどのために、
// フラグを使ってループを終了すべきかチェックします。
return;
}
var readdata = SerialPort.GetData();
if (readdata != “”) {
// 受信できたら何か処理を行う。
}
setTimeout(“LoopRead()”, 100); // 100ミリ秒後以降に再実行を予約
}
複数のポートを同時に操作する場合
ActiveXは1個のコントロールを同時に複数起動することができるように設計されている技術です。ActiveXコントロールがアパートメン トモデルと呼ばれるコンポーネントオブジェクトモデルの基本どおりに作成されていれば、OBJECTタグで1つのコントロール(DLL)から複数のインス タンスを生成して同時に利用できます。
関連コラム
ActiveXコントロールを使い、WebシステムからFeliCaへアクセスする方法