ActiveXでシリアルポートアクセス

平成20年11月23日

最新版 トラ技78Kマイコン用ActiveXのインストール

Webで使う78Kマイコン用ターミナルはこちら

ソースコードはトップページからダウンロードできます。


なぜ、ActiveX?

    InternetExplorerを使って、Webページの中から78Kマイコンへアクセスできると嬉しいことがたくさんあります。例を挙げてみると、

    1. 凝ったGUIが簡単に作れる
    2. 操作アプリの開発環境(JavaScript)が無料
    3. 操作アプリをインストール してもらわなくてよい
    4. ネットと連携ができる
    5. ブラウザ上で78Kマイコンの ファームウェアを書き換えられる
    6. 携帯電話、PDAからでも使える

    などがあります。

     最近では、多くの企業では情報セキュリティーのため、EXEベースのプログラムをインストールさせてくれません。そのため、78Kマイコンと通信しながら動くアプリケーションを作っても使ってもらえません。

     それに対して、Webの画面の中ではJavaScriptについては寛容なことが多いでしょう。JavaScriptは、78Kマイコンを操作するアプリケーションを動かすには絶好の環境です。

     しかし、JavaScriptは、基本的にはブラウザの中だけで動くものなので、ローカル資源(ディスク、USB、シリアルポートへのアクセスは、基本的にはできません。

    img1.jpg

     Webアプリ(JavaScript)の中からUSBへアクセスするには、ActiveXを使います。

     ActiveXとは、DLLの上に一枚クラスをかぶせたようなものですが、その実態はただのDLLと同じ権限で動くライブラリなので、ローカルPC上で何でもできます。いつでもどこでも(JavaScriptでもVBでもC++でもC#でも)どこからでも(ローカルでもネットでも)呼び出すことができます。

     そのため、セキュリティー上問題があるとも言われています。

    img1.png

ActiveXの認証と安全マーク

    ActiveXを使うには、通常はデジタル証明書とか署名とかそういう面倒なものが必要です。

    この証明書を得るには、年間5万円〜10万円の登録量と、会社の登記謄本などが必要となります。そのため、個人で趣味で気軽に使うには少々荷が重いといえます。

    なお、自分で自分を証明する「オレオレ証明書」ではWindowsXPはごまかせませんでした。インストールすらさせてもらえません。

    しかし、登録料と登記謄本がないとActiveXが使えないかというとそういうわけではなく、ローカルにインストールしてもらえばよいということがわかりました。

    つまり、Webサイトをみただけで勝手にインストールされて実行されてしまうようなActiveXは証明書が必要なのですが、ユーザが自らの意思で「インストールEXE」を実行してローカルにインストールした場合は、証明書はいらないのです。ただし、ActiveXからローカル資源にアクセスするには、安全マークをつける必要があります。

    ユーザが自らの意思でActiveXをインストールしたら、そのActiveXはWebブラウザの中から使えるようになります。(他人が作ったJavaScriptからも使えてしまうので、すごく危険ですね)

    ローカルのPCにActiveXをインストールするには、regsvr32.exeという、Windowsのコマンドを使います。ActiveXのプログラムは.ocxという拡張子で提供されるので、

    regsvr32 XXX.ocx

    と実行します。すると、ActiveXのGUID(一意の識別番号)とOCXファイルの所在パスがレジストリに登録され、JavaScript中にGUIDを埋め込むことでActiveXが使用できるようになります。

ActiveXの使い方

    トラ技78Kマイコン用に用意したActiveXは、web78k.ocxという名前で配布します。
    現在のバージョンは0.55です。

    Webページの中からActiveXを使うのはとても簡単で、次のような文を埋め込みます。

    <OBJECT

              id = "act1"

              classid="clsid:1F5A2B67-729E-43C9-AB5A-4754E5E75758"

              codebase="web78k.ocx"

              width="81"

              height="25"

              align=left

              hspace=0

              vspace=0>

    </OBJECT>

    1F5A2B67-729E-43C9-AB5A-4754E5E75758というのは、トラ技78K用ActiveXのGUIDです。BorlandC++BuilderでActiveXフォームを作ったときに適当に生成されました。

    id="act1"というのは、このActiveXを使うときのオブジェクト名になります。

    codebase="web78k.ocx"の行は省略してしまったほうがよいでしょう。

    widthとheightは、このActiveXフォームが表示される大きさです。


    このActiveXが呼び出されると、レジストリ(HKEY_LOCAL_MACHINE\HARDWARE\ DEVICEMAP\SERIALCOMM)を検索してローカルPCに存在するシリアルポートを数え上げます。

    そして、見つかった順番に、0,1,2・・の数字を割り当てます。(この数字はCOM1やCOM10の数字とは関係ありません。あくまでも見つかった順番です)

    以下のメソッドを使って仮想COMポートにアクセスしてください。

プロパティ NumOfPorts

    ローカルPC上に見つかったシリアルポートの数を返します。

    例 if(act1.NumOfPorts == 0) alert("シリアルポートがみつかりません");

メソッド GetPortDescr(int N)

    N番目のシリアルポートの説明書きを文字列で返します。

    例 document.write(act1.GetPortDescr(i));

メソッド OpenPort(int N)

    N番目のシリアルポートをオープンします。成功したらTRUEが、失敗したらFALSEが返ります。

    例 act1.ClosePort();

メソッド ClosePort()

    現在開いているシリアルポートを閉じます。

    例 act1.OpenPort(0)

メソッド ReadData()

    現在開いているシリアルポートからデータを読み出します。もしデータがなければ、次にデータが到着するまで待ちます。

    扱うデータはテキスト文字列です。バイナリデータを読み出した場合の動作は保証できません。

    例 rxarea.value += act1.ReadData();

メソッド ReadQuery()

    現在開いているシリアルポートに読み出せるデータがあるかどうか調べます。データがあればそのサイズ(バイト数)を、データがなければ0を返します。

    例 if(act1.ReadQuery() > 0) ・・・

メソッド WriteData()

    現在開いているシリアルポートに文字列を書き込みます。

    扱うデータはテキスト文字列です。バイナリデータを書き込んだ場合の動作は保証できません。

    例 var txarea = document.getElementById("tx") ;
      act1.WriteData(txarea.value);

メソッド IsOpened()

    現在、シリアルポートが開いているかどうか調べます。

    例 if(act1.IsOpened() == false) return;

メソッド DestroyActiveX()

    ActiveXで使用したリソースを解放します。

    例 <BODY onunload = "DestroyActiveX();">

     

ぜひとも、このActiveXを使って操作を自動化してみてください。

chickens_back.gif 戻る

 

 Copyright(C) 2008 NAITOU Ryuji. All rights reserved. 無断転載を禁ず