アプリケーションノート2036

MxTNIプラットフォームを利用したネットワークオン/オフスイッチの設計

Nov 24, 2011

要約:MxTNI (Maxim Tiny Network Interface)は、ウェブページアプレットから遠隔でオン/オフスイッチを制御するのに使用することができます。遠隔MxTNIで動作する少しの Javaコードで、ネットワークにおけるスイッチ状態の即時フィードバックと制御が提供されます。

IPネットワークリレーを設計するにあたって必要なTCP/IPネットワークスタック、およびローカル制御機能はMxTNIプラットフォームによって提供されています。Javaランタイム環境を追加することによって、ネットワーク上で小型のセンサおよびアクチュエータに遠隔でアクセスと制御ができることにともなう複雑性が大きく低減されます。シンプルなリレー回路とTINIm400検定モジュールで構成されたIPオン/オフスイッチに関する以下の論議は他の遠隔監視、および制御アプリケーションにも拡張できます。Java言語のようなオブジェクト指向プログラミングに関する知識が前提となっています。¹

回路は(多少変更された) TINIWebServerと呼ばれるアプリケーションで制御されており、これは直接MxTNIランタイム環境によって実行されます。ホストワークステーションに役立つアプレットは、コマンドと状況のために双方向通信にMxTNIランタイム環境をオープンにし、リレーの簡単な遠隔制御のためのGUI (グラフィカル・ユーザ・インタフェース)を表示します。

システムソフトウェア概要

com.dalsemi.tininet.http.HTTPServerクラスは遠隔ホストにアプレットを転送することのみがその目的であるシンプルなウェブサーバを実装するためにスイッチ制御アプリケーションを可能にします。アプレットはホストブラウザ内で実行され、MxTNIアプリケーションと共に、コマンドおよび状況を交換するために双方向のTCP接続を確立します。アプレットはまた制御と状況を表示するためのGUIを提供します。図1は全体のソフトウェアシステムを示しています。

図1. MxTNIランタイム環境で実行されているウェブサーバアプリケーションソフトウェアはアプレットをホストに転送するためにHTTP接続を利用し、コマンドと状況データを転送するために双方向接続を確立します。
図1. MxTNIランタイム環境で実行されているウェブサーバアプリケーションソフトウェアはアプレットをホストに転送するためにHTTP接続を利用し、コマンドと状況データを転送するために双方向接続を確立します。

システムハードウェア概要

図2では、オン/オフ制御回路がTINIm400検定モジュールのインタフェースを形成しています。TINIm400はイーサネットネットワーク接続を提供し、ポートピンP5.0 (他のポートピンも同様に機能する)を介してスイッチを制御します。nチャネルパワーMOSFETがリレーからグランドに電流をスイッチすることでリレーを制御します。リレー、およびFETのサイズを変更することで、いろいろな電流と電圧要件を満たすことができます。また、MxTNI検定モジュールの電源電圧から外部回路を絶縁する必要がない場合は、リレーを完全に削除することができます。ダイオードはスイッチの状態変更時にリレーコイルからの電圧スパイクに対して保護を提供します。ネットワークスイッチ制御のような新規サービスを可能にするために、ハードウェアおよびソフトウェアコンポーネントが、標準インターネット技術に対応したMxTNIチップセットリファレンスデザインに統合されています。

図2. MxTNIチップセットリファレンスデザインはスイッチを制御します。このスイッチは利用可能なポートピンを使った保護ダイオード付きの簡単なトランジスタとリレー回路です。
図2. MxTNIチップセットリファレンスデザインはスイッチを制御します。このスイッチは利用可能なポートピンを使った保護ダイオード付きの簡単なトランジスタとリレー回路です。

MxTNIスイッチ制御アプリケーション

4つのクラスがこのアプリケーションのスイッチ制御とウェブサーバインタフェース部分を構成しています。PowerSwitchクラスは、MxTNIクラスcom.dalsemi.system.BitPort APIクラスを使って直接ハードウェアとインタフェースします。WebWorkerクラスは、当社のソフトウェア開発キット(MxTNI SDK)のTINIWebServer例から直接来るもので、入力HTTP接続を提供するためのものです。SwitchWorkerクラスはアプレットとMxTNIアプリケーション間の全てのコマンド、および状況の通信を管理します。TINIWebServerクラスは個別のクラスの動作を結びつけることによってアプリケーションを駆動します。

アプレットはMxTNIアプリケーションでコマンドと状況を交換する双方向TCP通信を確立します。

PowerSwitchクラスはハードウェアとのインタフェースで、ピンP5.0のBitPortオブジェクトをそのコンストラクタ内で作ります。このクラスでは2つのメソッドが実行されます。Onメソッドはリレーコイルに電圧をかけるために使われるポートピンの状態を設定し、Offメソッドはポートピンの状態をクリアすることでコイルから電圧を除去します。図2の単極双投(SPDT)リレーは、ノーマリクローズまたはノーマリオープンのポジションで動作が可能です。またはこの2つのポジション間で外部電圧ソースをスイッチすることもできます。OnおよびOffメソッドは回路がノーマリオープンであることを想定しており、ノーマリクローズ回路に関しては修正を加える必要があります。オン/オフがBitPortセットまたはclearメソッドのどちらに適応しているかを示すためには追加ブール変数(invert)がこのクラスに追加できます。もうひとつのメソッド(setInvert)は変換変数を初期化する必要があります。ハードウェア図はノーマリオープン回路を示しています。

WebWorkerクラスはネットワークとアプリケーション間のインタフェースを提供します。オブジェクト(com.dalsemi.tininet. http.HTTPServer)を単に設定し、駆動し、順々に各受信HTTP接続を提供するスレッドを生成します。このクラスは基本的に上述のTINIWebServer例と変わりません。ネットワーク上のどこからでもアクセスでき、HTTPServerはパスワードでプロンプト状態にすることが可能です。または、承認ユーザのみにアクセスが制約されたコントロールの他の形式を受け入れます。

TINIWebServerはネットワークとハードウェアのインタフェースを結びつけることによってスイッチの遠隔制御が可能になります(図3)。たとえば、drive()メソッドは、WebWorkerスレッドを作り出し、ウェブページ「index.html」を作成することによって、ウェブサーバを設定します。ウェブページの主な目的はホストワークステーションのアプレットをダウンロードして動作させることです。インデックスページが静止情報のみである場合は、アプリケーションはウェブページを作成する必要はありません。その代わりにインデックスページはアプレットを含むjarファイルと共にウェブサーバのルートに単にコピーすることができます。

図3. TINIWebServerクラスはウェブページを作成し、入力コマンドおよび状況リクエストを提供するためにスイッチサーバを作成する前にウェブサーバを起動します。
図3. TINIWebServerクラスはウェブページを作成し、入力コマンドおよび状況リクエストを提供するためにスイッチサーバを作成する前にウェブサーバを起動します。

全てのMxTNIチップセット設計で変わるウェブページの唯一のパラメータはCODEBASEです。アプレットは別個のサーバソケットでMxTNIアプリケーションに接続を戻すためにその情報を使用します。カスタムウェブページを作成することができ、フィールドにインストールされている各MxTNIチップセットリファレンスデザインにアップロードすることができます。動作させる度にアプリケーションでページを作成するのがより容易なアプローチです。createIndexPageメソッドはファイルindex.htmlを作成し、以下3つを書き込むことでCODEBASEセクションにIPアドレスを挿入します。

1) index.write(indexTop.getBytes(), 0, indexTop.length());
2) index.write(InetAddress.getLocalHost().getHostAddress().getBytes());
3) index.write(indexBottom.getBytes(), 0, indexBottom.length());

1つ目および3つ目の書き込みでウェブページの静止部分をファイルにコピーし、2つ目の書き込みでIPアドレスをファイルのCODEBASE部分にコピーします。アプリケーションがウェブサーバを設定し、ページを作成した後、ウェブサーバを起動します。ダウンロードされたアプレットから入力接続を取り扱うためにサーバソケットを作成し、アプレットがMxTNIアプリケーションと接続するごとにserviceConnectionメソッドを呼び出します。serviceConnectionメソッドはSwitchWorkerの新規インスタンスを作り、ソケットをこのクラスに移行します。SwitchWorkerコンストラクタはホストアプレットとMxTNIアプリケーション間の接続を管理するために新規スレッドを作ります。serviceConnectionメソッドはまた次の受信接続を取り扱い、それから制御をdriveメソッドに移行します。

各MxTNIで変化するウェブページにおける唯一のパラメータはCODEBASEです。

SwitchWorkerクラスはアプレットとウェブサーバ間の全ての接続を管理します(図4)。接続がドロップされるまで継続してループし、以下のステップを行います。
  • read( )にブロックし、アプレットからコマンドバイトを待機します。
  • コマンドバイトが0であれば、スイッチをオフにし、バイトが1であれば、スイッチをオンにします。
  • 現在のスイッチ状態を読み取り、アプレットに返送します。
図4. MxTNIランタイム環境で実行しているSwitchServerはリスナを設定し、無限にループし、コマンドを待ち、スイッチ状況をコマンドに基づいて設定し、全てのリスナに更新状況を送り戻します。
図4. MxTNIランタイム環境で実行しているSwitchServerはリスナを設定し、無限にループし、コマンドを待ち、スイッチ状況をコマンドに基づいて設定し、全てのリスナに更新状況を送り戻します。

アルゴリズムは、個別のスイッチの状況を表すためにコマンドバイトの下位7つのビットをそれぞれ配置することによって複数のスイッチに拡張できます(図5)。最上位ビットは読み取りのみの動作を示すための予備となります。アルゴリズムはまた同時に単一のMxTNIウェブサーバアプリケーションに接続するための複数アプレットを可能にするために拡張できます。SwitchWorkerは単に「リスナのベクトル」を保持します。アプレットがスイッチの状況を変更するためのコマンドを送る度に、ウェブサーバは現在接続されている全てのアプレットに状況を送り返します。

図5. コマンドバイトは単に最大7つまでの制御のためにスイッチにつき1ビットを使用し、最後のビットをコマンドから状態リクエストを識別するために保持しています。
図5. コマンドバイトは単に最大7つまでの制御のためにスイッチにつき1ビットを使用し、最後のビットをコマンドから状態リクエストを識別するために保持しています。

ホストアプレット

アプレットは制御、および状況を表示する上で豊かなグラフィックスを提供し、(他にも多くのことがありますが)双方向通信を可能にするのでホスト上で使用されています。MxTNIクラスcom.dalsemi. tininet. http. HTTPServerクラスは高速で小型ですが、HTTP GET動作しかサポートしません。結果としてのデータはMxTNIアプリケーションからホストへと一方向のみにしか流れません。しかし、このアプリケーションは両方向へのデータの流れが必要であり、コマンドはホストからMxTNIウェブサーバへ送られ、状況はウェブサーバから全ての接続されたホストへ送られます。ホストとMxTNIアプリケーション間の通信はプロトコルオーバーヘッドを全く生じません。その1バイトコマンドと1バイト状況によって、非常に高速な制御と状況の応答が可能です。

ホストアプレットには2つのクラスが含まれます。主要クラス(SwitchControl)はホスト側のネットワーク通信を取り扱い、ウェブページに表示される全てのグラフィックスを作成します(図6)。もう1つのクラス(ImageButton)はボタンの状況により2つのビットマップ中1つを表示するグラフィック・トグルボタンを作成します(図7)。トグルボタンはスイッチの制御、および状況に適切なものであるべきですが、アプレットの動作はブラウザごとに変化します。

図6. アプレットのSwitchControlクラスはウェブサーバからの受信状態を読み取り、そしてコントロールを更新するために1つのスレッドを使います。ユーザ入力を検出し、MxTNIウェブサーバにコマンドを送り戻すために2つ目のスレッドを使います。
図6. アプレットのSwitchControlクラスはウェブサーバからの受信状態を読み取り、そしてコントロールを更新するために1つのスレッドを使います。ユーザ入力を検出し、MxTNIウェブサーバにコマンドを送り戻すために2つ目のスレッドを使います。

図7. スイッチコントロールアプレットはオン/オフボタンと状態フィールドを提供し、遠隔制御と物理的スイッチ状態でフィードバックを供給します。
図7. スイッチコントロールアプレットはオン/オフボタンと状態フィールドを提供し、遠隔制御と物理的スイッチ状態でフィードバックを供給します。

従って、簡単なオン/オフボタン、および状態を表すテキストウィンドウが広範囲のブラウザに対応できるように追加されています。ImageButtonおよびオン/オフボタンは同様の制御機能を持っており、同様にビットマップと状況ウィンドウも同じ状態機能を果たしています。グラフィックを作成後、SwitchControlクラスは状態リスナスレッドを作成します。その後、スレッドはスリープ状態となり、読取りでブロックされ、MxTNIアプリケーションからの状況の待機状態となります。スレッドのブロックが解除されると、ImageButtonビットマップおよび状態ウィンドウは更新され、メソッドは次の状態バイトを待機するためにメソッドの最初にループバックします。アプレットイベントスレッドがactionPerformedメソッドを駆動しますが、このメソッドはグラフィックボタンが押されるごとに呼び出されます。呼び出しがImageButtonまたはオン/オフボタンによってトリガされると、現在の状況をトグルし、オンまたはオフコマンドをMxTNIに送ります。オン/オフボタンによってトリガされた場合は、オン/オフコマンドを送ります。ImageButtonクラスは、AWT (アブストラクト・ウィンドウ・ツールキット)構成プログラミングにおける単なる1つの役目です。

結論

MxTNIランタイム環境、Javaアプリケーション、およびシンプルリレー回路を使ってネットワーク上で遠隔オン/オフスイッチ制御を実行することは容易です。回路部品の選択肢が多いため、電球から工業機器にいたるまでのいずれの制御をも提供する(ネットワークアクセスがある場所はどこからでも)幅広いアプリケーションが可能です。

関連ファイル
この記事に関する関連ファイルは以下のウェブ サイトをご覧下さい:http://files.dalsemi.com/tini/appnotes/NetSwitch/NetSwitch.tgz

¹読者は、この文脈の用語、特にクラス、メソッド、オブジェクト、コンストラクタという用語を理解しているべきです。

MxTNIはMaxim Integrated Products, Inc.の商標です。



次のステップ
EE-Mail EE-Mail配信の登録申し込みをして、興味のある分野の最新ドキュメントに関する自動通知を受け取る。
シェア
その他のチャンネル  E-Mailこのページを知り合いに送る。




フィードバックをお寄せください。
内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。—マキシムはお客様からいただく訂正、提案を元に改善していきます。 このページを評価し、フィードバックを送信する。



APP 2036: Nov 24, 2011
アプリケーションノート2036, AN2036, AN 2036, APP2036, Appnote2036, Appnote 2036

シェア



その他




    |         |         |     プライバシーポリシー     |     法的お知らせ
Copyright © 2012 by Maxim Integrated Products