(57)【特許請求の範囲】
【請求項１】
プラントの状態を表示するパーツが配置されたヒューマンマシンインターフェース（ＨＭＩ）画面を表示するウェブブラウザを実行する複数のＨＭＩクライアントと、
プログラマブルロジックコントローラに接続し、前記プログラマブルロジックコントローラから受信したＰＬＣ信号に応じて前記パーツの状態を更新する表示信号を前記ウェブブラウザへ送信する複数のウェブＨＭＩサーバと、を備え、
前記複数のウェブＨＭＩサーバのうち少なくとも２つは、同一のサーバグループに属する、ＳＣＡＤＡウェブＨＭＩシステムであって、
前記複数のウェブＨＭＩサーバの各ウェブＨＭＩサーバは、
少なくとも１つのプロセッサと、
プログラムを記憶するメモリと、を備え、
前記プログラムは、前記少なくとも１つのプロセッサにより実行されることで、前記少なくとも１つのプロセッサに、
サーバ接続優先順リストテーブルを前記サーバグループに属するすべての前記ウェブＨＭＩサーバ間で共有するテーブル共有処理と、
前記ＨＭＩクライアントからリスト要求信号を受信した場合に、前記サーバ接続優先順リストテーブルに定められた割り当て順に従って、前記サーバグループに属するすべての前記ウェブＨＭＩサーバの接続優先順を定めたサーバ接続優先順リストを送信する接続優先順リスト送信処理と、を含む処理を実行させ、
前記サーバ接続優先順リストテーブルは、複数の前記サーバ接続優先順リストのそれぞれについて、前記サーバグループに属する各前記ウェブＨＭＩサーバに接続する前記ＨＭＩクライアントの数を均等に近づけるように前記割り当て順を定めており、
前記複数のＨＭＩクライアントの各ＨＭＩクライアントは、
少なくとも１つのプロセッサと、
プログラムを記憶するメモリと、を備え、
前記プログラムは、前記少なくとも１つのプロセッサにより実行されることで、前記少なくとも１つのプロセッサに、
前記サーバグループに属するすべての前記ウェブＨＭＩサーバの稼働状態を監視する死活監視処理と、
前記サーバグループに属するいずれか１つの前記ウェブＨＭＩサーバへ、前記サーバ接続優先順リストを要求するための前記リスト要求信号を送信する接続優先順リスト要求処理と、
前記サーバ接続優先順リストを受信した場合に、前記サーバグループに属する少なくとも１つの稼働中の前記ウェブＨＭＩサーバのうち、前記サーバ接続優先順リストに定められた接続優先順位が最も高い前記ウェブＨＭＩサーバとコネクションを確立するサーバ接続処理と、
現在接続中の前記ウェブＨＭＩサーバが非稼働状態となった場合に、前記サーバグループに属する少なくとも１つの稼働中の前記ウェブＨＭＩサーバのうち、前記サーバ接続優先順リストに定められた接続優先順位が最も高い前記ウェブＨＭＩサーバへコネクションを切り替えるフェイルオーバ処理と、を含む処理を実行させること、
を特徴とするＳＣＡＤＡウェブＨＭＩシステム。
【請求項２】
前記複数のウェブＨＭＩサーバは、前記サーバグループに属する第１ウェブＨＭＩサーバと第２ウェブＨＭＩサーバとを含み、
前記サーバ接続優先順リストテーブルは、１番目に接続する前記ＨＭＩクライアントに割り当てられる第１サーバ接続優先順リストと、２番目に接続する前記ＨＭＩクライアントに割り当てられる第２サーバ接続優先順リストとを含み、
前記第１サーバ接続優先順リストは、前記第１ウェブＨＭＩサーバ、前記第２ウェブＨＭＩサーバの順に接続優先順が定められており、
前記第２サーバ接続優先順リストは、前記第２ウェブＨＭＩサーバ、前記第１ウェブＨＭＩサーバの順に接続優先順が定められていること、
を特徴とする請求項１記載のＳＣＡＤＡウェブＨＭＩシステム。
【請求項３】
前記複数のウェブＨＭＩサーバは、前記サーバグループに属する第１ウェブＨＭＩサーバと第２ウェブＨＭＩサーバと第３ウェブＨＭＩサーバとを含み、
前記サーバ接続優先順リストテーブルは、１番目に接続する前記ＨＭＩクライアントに割り当てられる第１サーバ接続優先順リストと、２番目に接続する前記ＨＭＩクライアントに割り当てられる第２サーバ接続優先順リストと、３番目に接続する前記ＨＭＩクライアントに割り当てられる第３サーバ接続優先順リストと、４番目に接続する前記ＨＭＩクライアントに割り当てられる第４サーバ接続優先順リストと、５番目に接続する前記ＨＭＩクライアントに割り当てられる第５サーバ接続優先順リストと、６番目に接続する前記ＨＭＩクライアントに割り当てられる第６サーバ接続優先順リストと、を含み、
前記第１サーバ接続優先順リストは、前記第１ウェブＨＭＩサーバ、前記第２ウェブＨＭＩサーバ、前記第３ウェブＨＭＩサーバの順に接続優先順が定められており、
前記第２サーバ接続優先順リストは、前記第２ウェブＨＭＩサーバ、前記第３ウェブＨＭＩサーバ、前記第１ウェブＨＭＩサーバの順に接続優先順が定められており、
前記第３サーバ接続優先順リストは、前記第３ウェブＨＭＩサーバ、前記第１ウェブＨＭＩサーバ、前記第２ウェブＨＭＩサーバの順に接続優先順が定められており、
前記第４サーバ接続優先順リストは、前記第１ウェブＨＭＩサーバ、前記第３ウェブＨＭＩサーバ、前記第２ウェブＨＭＩサーバの順に接続優先順が定められており、
前記第５サーバ接続優先順リストは、前記第２ウェブＨＭＩサーバ、前記第１ウェブＨＭＩサーバ、前記第３ウェブＨＭＩサーバの順に接続優先順が定められており、
前記第６サーバ接続優先順リストは、前記第３ウェブＨＭＩサーバ、前記第２ウェブＨＭＩサーバ、前記第１ウェブＨＭＩサーバの順に接続優先順が定められていること、
を特徴とする請求項１記載のＳＣＡＤＡウェブＨＭＩシステム。
【請求項４】
前記ＨＭＩクライアントの前記プログラムは、前記少なくとも１つのプロセッサに、
対象サーバ名を含むＵＲＬにより指定された前記ウェブＨＭＩサーバである対象ウェブＨＭＩサーバへ、前記サーバグループが定められたサーバグループ情報を要求するためのサーバグループ情報要求信号を送信するサーバグループ情報要求処理と、
前記ＨＭＩクライアントのアカウント名とパスワードを含むクライアント認証情報を送信するクライアント認証情報送信処理と、
前記対象ウェブＨＭＩサーバから前記ウェブブラウザへ、疑似シンクライアントインストーラをダウンロードし、前記疑似シンクライアントインストーラを実行するための通知バーを表示するインストーラ実行確認処理と、
前記通知バーに対して前記疑似シンクライアントインストーラの実行を許可する操作がされた場合に、前記ＨＭＩクライアントの管理者権限を付与するための権限昇格ダイアログを表示する権限昇格処理と、
前記権限昇格ダイアログに対して権限昇格を許可する操作がされた場合に、前記ウェブＨＭＩサーバから前記クライアント認証情報が入力されることで前記ウェブＨＭＩサーバからアクセス可能な共有フォルダを作成する共有フォルダ作成処理と、
クライアント常駐プログラムを前記ウェブＨＭＩサーバから前記共有フォルダへコピーし、前記共有フォルダに書き込まれた前記クライアント認証情報を用いて前記クライアント常駐プログラムを常駐プロセスとして設定する常駐プロセス設定処理と、を含む処理を実行させ、
前記ウェブＨＭＩサーバの前記プログラムは、前記少なくとも１つのプロセッサに、
前記サーバグループ情報要求信号を受信した場合に、前記対象ウェブＨＭＩサーバが属する前記サーバグループのすべてのサーバ名が定められた前記サーバグループ情報が前記共有フォルダに書き込まれるまで、前記サーバグループ情報の書き込みを繰り返すサーバグループ情報書込処理と、
前記クライアント認証情報を受信した場合に、前記クライアント認証情報が前記共有フォルダに書き込まれるまで、前記クライアント認証情報の書き込みを繰り返すクライアント認証情報書込処理と、を含む処理を実行させること、
を特徴とする請求項１乃至３のいずれか１項に記載のＳＣＡＤＡウェブＨＭＩシステム。
【請求項５】
前記ＨＭＩクライアントの前記プログラムは、前記少なくとも１つのプロセッサに、
現在接続中の前記ウェブＨＭＩサーバよりも高い接続優先順位の前記ウェブＨＭＩサーバが稼働している場合に、前記高い接続優先順位の前記ウェブＨＭＩサーバへコネクションを切り替えるフェイルバック処理、を含む処理を実行させること、
を特徴とする請求項１乃至４のいずれか１項に記載のＳＣＡＤＡウェブＨＭＩシステム。
【請求項６】
前記ＨＭＩクライアントの前記プログラムは、前記少なくとも１つのプロセッサに、
前記フェイルオーバ処理または前記フェイルバック処理を実行した場合に、コネクションを切り替える前に前記ウェブブラウザに表示されていた前記ＨＭＩ画面に配置された前記パーツの状態情報を前記プログラマブルロジックコントローラから収集するように、コネクションを切り替えた後の前記ウェブＨＭＩサーバへ要求するＰＬＣ情報収集処理、を含む処理を実行させること、
を特徴とする請求項５記載のＳＣＡＤＡウェブＨＭＩシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、冗長化構成を備えたＳＣＡＤＡウェブＨＭＩシステムに関する。
【背景技術】
【０００２】
ＳＣＡＤＡ（Ｓｕｐｅｒｖｉｓｏｒｙ Ｃｏｎｔｒｏｌ Ａｎｄ Ｄａｔａ Ａｃｑｕｉｓｉｔｉｏｎ）は、社会インフラシステムを監視制御する仕組みとして知られている。社会インフラシステムは、鉄鋼圧延システム、電力送変電システム、上下水道処理システム、ビル管理システム、道路システムなどである。【０００３】
ＳＣＡＤＡは、産業制御システムの一種であり、コンピュータによるシステム監視とプロセス制御を行う。ＳＣＡＤＡでは、システムの処理性能に合わせた即応性（リアルタイム性）が必要である。【０００４】
ＳＣＡＤＡは一般に次のようなサブシステムから構成される。
（１）ＨＭＩ（Ｈｕｍａｎ Ｍａｃｈｉｎｅ Ｉｎｔｅｒｆａｃｅ）
ＨＭＩは、対象プロセス（監視対象装置）のデータをオペレータに提示し、オペレータがプロセスを監視し制御できるようにする機構である。例えば特許文献１には、ＳＣＡＤＡクライアント上で動作するＨＭＩ画面を備えるＳＣＡＤＡ ＨＭＩが開示されている。
（２）監視制御システム
監視制御システムは、プロセス上の信号データを収集し、プロセスに対して制御コマンドを送る。ＰＬＣ（Ｐｒｏｇｒａｍａｂｌｅ Ｌｏｇｉｃ Ｃｏｎｔｒｏｌｌｅｒ）などによって構成される。
（３）遠方入出力装置（Ｒｅｍｏｔｅ Ｉｎｐｕｔ Ｏｕｔｐｕｔ：ＲＩＯ）
遠方入出力装置は、プロセス内に設置されたセンサと接続し、センサの信号をデジタルのデータに変換し、そのデジタルデータを監視制御システムに送る。
（４）通信基盤
通信基盤は、監視制御システムと遠方入出力装置を接続する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】日本特開２０１７−２７２１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１におけるＨＭＩサブシステムのクライアントプログラムは、マシン環境に依存したプログラムで構築されている。ＳＣＡＤＡ ＨＭＩサブシステムの低コスト化を実現するため、本願発明者は、マシン環境に依存しないブラウザベースのＨＭＩサブシステムを開発するに至った。【０００７】
ＳＣＡＤＡ ＨＭＩサブシステムをウェブブラウザ上で動作するウェブアプリケーションとして構築した場合、以下の利点がある。
（１）ウェブブラウザは、パーソナルコンピュータ、タブレットＰＣなどの多くの端末機器に搭載されているため、様々な端末機器をＳＣＡＤＡ ＨＭＩサブシステムとして利用可能である。
（２）ウェブブラウザは、高機能なレンダリング機能を有しており、アニメーションをはじめとする高度なＧＵＩインタラクション機能を作り込み易い。【０００８】
ところで、ＳＣＡＤＡ ＨＭＩサブシステムでは、高信頼性を実現するために、サーバの冗長化構成が必要である。冗長化構成とは、サーバを多重化して、接続優先順位が高いサーバが故障した場合に、接続優先順位が低いサーバが処理を引き継ぐフェイルオーバを実行して、運用を継続する仕組みである。【０００９】
冗長化構成には、アクティブ／スタンバイ構成とアクティブ／アクティブ構成がある。アクティブ／スタンバイ構成は、稼働系サーバ（プライマリサーバ）と待機系サーバ（セカンダリサーバ）を備え、プライマリサーバが故障した場合に、セカンダリサーバが稼働して処理を引き継ぐ。
アクティブ／アクティブ構成は、すべての系統を常に稼働しておき、処理を分散させて各サーバの負荷を軽減する。クライアントごとに、プライマリサーバとセカンダリサーバが個別に設定される。【００１０】
本発明は、アクティブ／アクティブ構成に関する。この構成の問題点は、クライアントごとにプライマリサーバとセカンダリサーバを設定し、システム全体として、各サーバの負荷が均等になるように管理しなければならない点である。【００１１】
例えば、サーバ２台（Ｓ１、Ｓ２）と、クライアント６台（Ｃ１、Ｃ２、Ｃ３、Ｃ４、Ｃ５、Ｃ６）のシステム構成を例に説明する。Ｃ１、Ｃ２、Ｃ３には、Ｓ１をプライマリサーバ、Ｓ２をセカンダリサーバとして定める設定がされている。Ｃ４、Ｃ５、Ｃ６には、Ｓ２をプライマリサーバ、Ｓ１をセカンダリサーバとして定める設定がされている。サーバ２台、クライアント６台のすべての機器が稼働している場合には、２台のサーバの負荷は、それぞれクライアント３台ずつで均等である。【００１２】
しかしながら、クライアントの一部（Ｃ５、Ｃ６）が運用されない場合もある。この場合には、Ｓ１の負荷はクライアント３台分、Ｓ２の負荷はクライアント１台分となり、サーバの負荷バランスが崩れてしまう。そうかといって、クライアントの運用状況に合わせて、クライアントの設定を毎回変更するのでは、運用コストが増大してしまう。【００１３】
サーバの負荷バランスに合わせて、クライアントの接続先サーバを動的に切り替える方式も考えられる。しかし、フェイルオーバは、負荷の高い動作であり、オペレータの操作も一時的に中断されるという問題がある。そのため、接続先サーバの切り替えは、サーバ故障時に限定して行われるべきである。【００１４】
本発明は、上述の課題を解決するためになされた。本発明の目的は、サーバの冗長化と負荷分散とを図りつつ、クライアント設定に要する運用コストを低減できるＳＣＡＤＡウェブＨＭＩシステムを提供することである。
【課題を解決するための手段】
【００１５】
上記目的の達成のため、本発明に係るＳＣＡＤＡウェブＨＭＩシステムは以下のように構成される。【００１６】
ＳＣＡＤＡウェブＨＭＩシステムは、複数のＨＭＩクライアントと、複数のウェブＨＭＩサーバとを備える。各ＨＭＩクライアントは、プラントの状態を表示するパーツが配置されたヒューマンマシンインターフェース（ＨＭＩ）画面を表示するウェブブラウザを実行する。各ウェブＨＭＩサーバは、プログラマブルロジックコントローラに接続し、前記プログラマブルロジックコントローラから受信したＰＬＣ信号に応じて前記パーツの状態を更新する表示信号を前記ウェブブラウザへ送信する。前記複数のウェブＨＭＩサーバのうち少なくとも２つは、同一のサーバグループに属する。【００１７】
各前記ウェブＨＭＩサーバは、少なくとも一つのプロセッサと、プログラムを記憶するメモリとを備える。前記プログラムは、前記少なくとも一つのプロセッサにより実行されることで、前記少なくとも一つのプロセッサに、以下の処理を含む処理を実行させる。【００１８】
テーブル共有処理は、サーバ接続優先順リストテーブルを前記サーバグループに属するすべての前記ウェブＨＭＩサーバ間で共有する。【００１９】
接続優先順リスト送信処理は、前記ＨＭＩクライアントからリスト要求信号を受信した場合に、前記サーバ接続優先順リストテーブルに定められた割り当て順に従って、前記サーバグループに属するすべての前記ウェブＨＭＩサーバの接続優先順を定めたサーバ接続優先順リストを送信する。【００２０】
前記サーバ接続優先順リストテーブルは、複数の前記サーバ接続優先順リストのそれぞれについて、前記サーバグループに属する各前記ウェブＨＭＩサーバに接続する前記ＨＭＩクライアントの数を均等に近づけるように前記割り当て順を定める。【００２１】
各前記ＨＭＩクライアントは、少なくとも一つのプロセッサと、プログラムを記憶するメモリとを備える。前記プログラムは、前記少なくとも一つのプロセッサにより実行されることで、前記少なくとも一つのプロセッサに、以下の処理を含む処理を実行させる。【００２２】
死活監視処理は、前記サーバグループに属するすべての前記ウェブＨＭＩサーバの稼働状態を監視する。【００２３】
接続優先順リスト要求処理は、前記サーバグループに属するいずれか１つの前記ウェブＨＭＩサーバへ、前記サーバ接続優先順リストを要求するための前記リスト要求信号を送信する。【００２４】
サーバ接続処理は、前記サーバ接続優先順リストを受信した場合に、前記サーバグループに属する少なくとも１つの稼働中の前記ウェブＨＭＩサーバのうち、前記サーバ接続優先順リストに定められた接続優先順位が最も高い前記ウェブＨＭＩサーバとコネクションを確立する。【００２５】
フェイルオーバ処理は、現在接続中の前記ウェブＨＭＩサーバが非稼働状態となった場合に、前記サーバグループに属する少なくとも１つの稼働中の前記ウェブＨＭＩサーバのうち、前記サーバ接続優先順リストに定められた接続優先順位が最も高い前記ウェブＨＭＩサーバへコネクションを切り替える。【００２６】
好ましくは、各前記ＨＭＩクライアントは、さらに以下の処理を実行する。【００２７】
サーバグループ情報要求処理は、対象サーバ名を含むＵＲＬにより指定された前記ウェブＨＭＩサーバである対象ウェブＨＭＩサーバへ、前記サーバグループが定められたサーバグループ情報を要求するためのサーバグループ情報要求信号を送信する。【００２８】
クライアント認証情報送信処理は、前記ＨＭＩクライアントのアカウント名とパスワードを含むクライアント認証情報を送信する。【００２９】
インストーラ実行確認処理は、前記対象ウェブＨＭＩサーバから前記ウェブブラウザへ、疑似シンクライアントインストーラをダウンロードし、前記疑似シンクライアントインストーラを実行するための通知バーを表示する。【００３０】
権限昇格処理は、前記通知バーに対して前記疑似シンクライアントインストーラの実行を許可する操作がされた場合に、前記ＨＭＩクライアントの管理者権限を付与するための権限昇格ダイアログを表示する。【００３１】
共有フォルダ作成処理は、前記権限昇格ダイアログに対して権限昇格を許可する操作がされた場合に、前記ウェブＨＭＩサーバから前記クライアント認証情報が入力されることで前記ウェブＨＭＩサーバからアクセス可能な共有フォルダを作成する。【００３２】
常駐プロセス設定処理は、クライアント常駐プログラムを前記ウェブＨＭＩサーバから前記共有フォルダへコピーし、前記共有フォルダに書き込まれた前記クライアント認証情報を用いて前記クライアント常駐プログラムを常駐プロセスとして設定する。【００３３】
好ましくは、各前記ウェブＨＭＩサーバは、さらに以下の処理を実行する。【００３４】
サーバグループ情報書込処理は、前記サーバグループ情報要求信号を受信した場合に、前記対象ウェブＨＭＩサーバが属する前記サーバグループのすべてのサーバ名が定められた前記サーバグループ情報が前記共有フォルダに書き込まれるまで、前記サーバグループ情報の書き込みを繰り返す。【００３５】
クライアント認証情報書込処理は、前記クライアント認証情報を受信した場合に、前記クライアント認証情報が前記共有フォルダに書き込まれるまで、前記クライアント認証情報の書き込みを繰り返す。
【発明の効果】
【００３６】
本発明によれば、ウェブＨＭＩサーバからＨＭＩクライアントへ、割り当て順に従って、サーバ接続優先順リストが動的に割り当てられる。そのため、ＨＭＩクライアントには予め接続優先順に関する設定が不要である。また、サーバ接続優先順リストは、負荷分散を考慮した割り当て順に従って各ＨＭＩクライアントに割り当てられるため、各ウェブＨＭＩサーバに接続するクライアントの数は均等になり負荷分散が図られる。本発明のＳＣＡＤＡウェブＨＭＩシステムは、サーバの冗長化と負荷分散とを図りつつ、クライアント設定に要する運用コストを低減できる。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施の形態１におけるＳＣＡＤＡのシステム構成を説明するための図である。
【図２】本発明の実施の形態１におけるサーバグループ情報テーブルの一例を示す図である。
【図３】本発明の実施の形態１におけるＨＭＩクライアントおよびウェブＨＭＩサーバにおいて実行される処理について説明するためのブロック図である。
【図４】本発明の実施の形態１における疑似シンクライアントのインストールについて説明するための図である。
【図５】本発明の実施の形態１における疑似シンクライアントのインストール処理の流れについて説明するためのフローチャートである。
【図６】本発明の実施の形態１における疑似シンクライアントのインストール処理の流れについて説明するためのフローチャートである。
【図７】本発明の実施の形態１における疑似シンクライアントをインストールする過程でＨＭＩクライアントのモニタに表示される画面の一例である。
【図８】本発明の実施の形態１における疑似シンクライアントをインストールする過程でＨＭＩクライアントのモニタに表示される画面の一例である。
【図９】本発明の実施の形態１における疑似シンクライアントをインストールする過程でＨＭＩクライアントのモニタに表示される画面の一例である。
【図１０】本発明の実施の形態１におけるサーバ接続優先順リストテーブルの具体例を示す図である。
【図１１】本発明の実施の形態１におけるサーバ接続優先順リストの配信処理の流れについて説明するためのフローチャートである。
【図１２】本発明の実施の形態１におけるサーバ接続優先順リストの割り当て例を説明するための図である。
【図１３】本発明の実施の形態１におけるサーバグループ情報テーブルの一例を示す図である。
【図１４】本発明の実施の形態１におけるフェイルオーバ処理とフェイルバック処理の一例を示す図である。
【図１５】ＨＭＩクライアントおよびウェブＨＭＩサーバが有するハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００３８】
本発明を実施するための形態について添付の図面に従って説明する。なお、各図中、同一または相当する部分には同一の符号が付される。当該部分の重複説明は適宜に簡略化ないし省略される。
【００３９】
実施の形態１．
＜全体構成＞
図１は、ＳＣＡＤＡのシステム構成を説明するための図である。ＳＣＡＤＡは、ヒューマンマシンインターフェース（ＨＭＩ）１、監視制御システムとしてのプログラマブルロジックコントローラ（以下、ＰＬＣ２と記す。）、通信基盤（図示省略）、ＲＩＯ（図示省略）をサブシステムとして備える。ＳＣＡＤＡは、ＰＬＣ２またはＲＩＯを介して監視対象装置（図示省略）に接続する。
【００４０】
ＰＬＣ２（監視制御システム）、通信基盤、ＲＩＯに関する説明は、背景技術で述べた通りであるため省略する。監視対象装置は、監視制御対象のプラントを構成するセンサ、アクチュエータなどである。
【００４１】
ＨＭＩ１（ＳＣＡＤＡウェブＨＭＩシステム）は、複数のＳＣＡＤＡウェブＨＭＩサーバ装置（以下、ウェブＨＭＩサーバと記す。）１０と、複数のＨＭＩクライアント端末（以下、ＨＭＩクライアントと記す。）２０と、を備える。
【００４２】
複数のウェブＨＭＩサーバ１０は、コンピュータネットワークを介して複数のＰＬＣ２に接続する。各ウェブＨＭＩサーバを区別する必要がない場合には単にウェブＨＭＩサーバ１０と記す。複数のウェブＨＭＩサーバ１０は、コンピュータネットワークを介して複数のＨＭＩクライアント２０に接続する。各ＨＭＩクライアントを区別する必要がない場合には単にＨＭＩクライアント２０と記す。ＨＭＩクライアント２０は、ウェブブラウザ２１を実行する。ウェブブラウザ２１は、プラントの状態を表示するパーツが配置されたＨＭＩ画面を表示する。
【００４３】
ウェブＨＭＩサーバ１０は、後述する図１５に示すように、少なくとも一つのプロセッサ１００ａと、ウェブサーバ１１が実行する処理について記載されたプログラムを記憶するメモリ１００ｂと、を備える。プログラムは、プロセッサ１００ａにより実行されることで、プロセッサ１００ａに、プログラムに記載された処理を実行させる。メモリ１００ｂは、ＲＯＭ、ＲＡＭ、ＨＤＤ、ＳＳＤなどを含む。
【００４４】
ウェブＨＭＩサーバ１０は、ＨＭＩサーバアプリケーションとしてのウェブサーバ１１を実行する。ウェブＨＭＩサーバ１０は、ＰＬＣ２から受信したＰＬＣ信号に応じて、ＨＭＩ画面に配置されたパーツの状態を更新するための表示信号をウェブブラウザ２１へ送信する。また、ウェブＨＭＩサーバ１０は、ウェブブラウザ２１から制御コマンドを受信してＰＬＣ２へ送信する。
【００４５】
ＨＭＩクライアント２０は、後述する図１５に示すように、少なくとも一つのプロセッサ２００ａと、ＨＭＩクライアント２０が実行する処理について記載されたプログラムを記憶するメモリ２００ｂと、を備える。プログラムは、プロセッサ２００ａにより実行されることで、プロセッサ２００ａに、プログラムに記載された処理を実行させる。メモリ２００ｂは、ＲＯＭ、ＲＡＭ、ＨＤＤ、ＳＳＤなどを含む。プログラムは、ウェブブラウザ２１、ＨＭＩ制御処理２２、クライアント制御処理２３、ウェブサーバ２４、常駐プロセス２５を実行するためのデータを含む。
【００４６】
＜疑似シンクライアント＞
一般的なウェブアプリケーションでは、ウェブブラウザで動作するウェブコンテンツは、ウェブサーバから動的にロードされ動作する。そのため、クライアントには、ソフトウェアのインストールは不要である。そのため、ウェブアプリケーションのクライアントは、シンクライアントと呼ばれている。しかしながら、本実施形態に係るＳＣＡＤＡ ＨＭＩのウェブアプリケーションでは、シンクライアントで運用することは難しい。以下、具体的に説明する。
【００４７】
ウェブブラウザ２１上で動作するプログラムは、セキュリティの観点から動作制限がある。許される動作は、ウェブサーバとの通信とウェブブラウザ２１上への表示だけである。つまり、メモリ２００ｂ（例えばハードディスク）上のファイルや、クライアントリソース２６（例えばプリンタ）など、ＨＭＩクライアント２０上のデバイスへの直接のアクセスは許可されない。
【００４８】
一方、ＳＣＡＤＡ ＨＭＩは、以下のような機能が必要となる。
（１）保守のため実行ログのディスクファイルへの書き込み
（２）プリンタへのアクセス
（３）実行マシン名の取得
（４）Ｗｉｎｄｏｗｓ（登録商標）アプリケーションの起動
こうしたクライアントデバイスへのアクセスを必要とする機能を実現するために、ＨＭＩクライアント２０は、ウェブサーバ２４上で常駐プロセス２５（Ｗｉｎｄｏｗｓ（登録商標）サービス）を実行する。ウェブブラウザ２１は、常駐プロセス２５経由で、ウェブアプリケーションからは直接実行できないＨＭＩクライアント２０のデバイスにアクセスできる。
【００４９】
ＨＭＩクライアント２０上で動作するウェブブラウザ２１上では、ＨＭＩ制御処理２２とクライアント制御処理２３が実行される。ＨＭＩ制御処理２２は、ＨＭＩ制御プログラムの動作中のインスタンスである。ＨＭＩ制御プログラムは、ウェブＨＭＩサーバ１０のウェブサーバ１１からロードされ、ウェブＨＭＩサーバ１０のウェブサーバ１１のドメインで動作する。クライアント制御処理２３は、クライアント制御プログラムの動作中のインスタンスである。クライアント制御プログラムは、ＨＭＩクライアントのウェブサーバ２４からロードされ、ＨＭＩクライアント２０のウェブサーバ２４のドメインで動作する。
【００５０】
これらのプログラムは、異なるドメインで動作するため、互いに別ドメインのデータを直接アクセスすることはできない。そのため、ドメイン間通信を使ってデータの交換が行われる。ＨＭＩ制御プログラムは、ＰＬＣ２を監視制御するＳＣＡＤＡ ＨＭＩのメインプログラムである。クライアント制御プログラムは、クライアントデバイス（ディスク、プリンタなど）を常駐プロセス２５経由でアクセスするプログラムで、ＨＭＩ制御プログラムの指示により動作する。
【００５１】
常駐プロセス２５とクライアント制御処理２３は、ＨＭＩクライアント２０のストレージ（メモリ２００ｂ）から読み込まれたプログラムのインスタンスである。そのため、ブラウザベースのＨＭＩサブシステムの場合には、ウェブアプリケーションでありながら、一部のプログラムをＨＭＩクライアント２０にインストールする必要がある。そのため、本実施形態に係るクライアントを、インストールが全く不要なシンクライアントと区別するために、疑似シンクライアント（pseudo thin client）と称する。
【００５２】
ＨＭＩクライアント２０の台数はウェブＨＭＩサーバ１０の台数に比べて多い。そのため、疑似シンクライアントのインストールに際して、ＨＭＩクライアント２０ごとの固有の設定作業は無いことが望まれる。
【００５３】
そこで、本実施形態のＳＣＡＤＡウェブＨＭＩシステムでは、サーバの冗長化と負荷分散を実現する上で、クライアント設定に要する運用コストの低減を図ることとした。具体的には、（１）疑似クライアントインストール時のサーバグループ情報の自動配信と、（２）ＨＭＩクライアント起動時のサーバ接続優先順リストの動的な配信と、を実現することとした。
【００５４】
＜（１）疑似シンクライアントインストール時のサーバグループ情報の自動配信＞
まず、サーバグループについて説明する。サーバグループは、サーバ冗長化を実現するためのサーバの集合である。同一のサーバグループに属するサーバ同士は、プライマリサーバとセカンダリサーバの関係を有する。サーバグループは、図２のようなサーバグループ情報テーブルで定義される。
【００５５】
図２において、同じＳＥＲＶＥＲ ＧＲＯＵＰ ＩＤを持つサーバが１つのサーバグループを構成する。ＨＭＩクライアント２０は、いずれか１つのサーバグループに関連付けられる。ＨＭＩクライアント２０は、関連付けられたサーバグループ内のどのウェブＨＭＩサーバ１０にも接続可能である。ＨＭＩクライアント２０は、接続中のウェブＨＭＩサーバ１０が故障した場合に、サーバグループ内の別のサーバに接続を切り替えて運用を継続することが可能である（フェイルオーバ）。
【００５６】
次に、疑似シンクライアントのインストールについて説明する。ブラウザベースのＳＣＡＤＡウェブＨＭＩシステムのクライアントは、シンクライアントではなく、疑似シンクライアントなので、インストール作業が必要である。本実施形態におけるインストール処理は、各ＨＭＩクライアントにサーバグループ情報が自動配信される点に特徴を有する。
【００５７】
本実施形態に係るシステムでは、ウェブブラウザ２１を用いて、疑似シンクライアントをインストールする。疑似シンクライアントがインストールされるマシンとして、例えばＷｉｎｄｏｗｓ（登録商標）のプレインストールマシンを想定する。Ｗｉｎｄｏｗｓ（登録商標）のプレインストールマシンには、ＯＳとウェブブラウザ（Ｉｎｔｅｒｎｅｔ Ｅｘｐｌｏｒｅｒ（登録商標）またはＭｉｃｒｏｓｏｆｔ Ｅｄｇｅ（登録商標）など）がインストールされている。ＨＭＩクライアント２０において、ウェブブラウザ２１が指定ＵＲＬにアクセスすることで疑似シンクライアントのインストール処理が開始される。
【００５８】
図３〜図９を参照して、疑似シンクライアントのインストール処理について説明する。図３は、ＨＭＩクライアント２０およびウェブＨＭＩサーバ１０において実行される処理について説明するためのブロック図である。図４は、疑似シンクライアントのインストールについて説明するための図である。図５および図６は、疑似シンクライアントのインストール処理の流れについて説明するためのフローチャートである。図７乃至図９は、疑似シンクライアントをインストールする過程でＨＭＩクライアントのモニタに表示される画面の一例である。
【００５９】
まず、図５のステップＳ１００において、ユーザは、ウェブブラウザ２１のアドレスバー７１（図７）にＵＲＬ（Uniform Resource Locator）を入力する。このＵＲＬは、対象サーバ名とインストール用ＨＴＭＬファイル１４（図４）の名称「install.html」を含む。図７の例では、対象サーバ名は「ＳＶＲ１」である。ＵＲＬは、対象サーバ名に対応するウェブＨＭＩサーバ１０に送信される。
【００６０】
ステップＳ１０１において、ウェブＨＭＩサーバ１０は、ＨＭＩクライアント２０へ「install.html」ファイルを送信する。
【００６１】
ステップＳ１０２において、ウェブブラウザ２１は「install.html」ファイルを読み込み、図７に示す画面を表示する。
【００６２】
ステップＳ１０３において、ユーザは、クライアント認証情報を入力し、ウェブブラウザ２１に表示された「はい」ボタンを押す。クライアント認証情報は、ＨＭＩクライアント２０のアカウント名とパスワードを含む。
【００６３】
ステップＳ１０４において、ウェブブラウザ２１は、ウェブＨＭＩサーバ１０へサーバグループ情報要求信号を送信する。具体的には、サーバグループ情報要求処理３８（図３）は、対象サーバ名を含むＵＲＬにより指定されたウェブＨＭＩサーバ１０である対象ウェブＨＭＩサーバへ、サーバグループを定めたサーバグループ情報を要求するサーバグループ情報要求信号を送信する。
また、ステップＳ１０４において、クライアント認証情報送信処理４５（図３）は、ウェブＨＭＩサーバ１０へクライアント認証情報を送信する。
【００６４】
ステップＳ１０５において、ウェブＨＭＩサーバ１０は、サーバグループ情報要求信号とクライアント認証情報を受信する。クライアント認証情報２９はメモリ１００ｂに書き込まれる（図４）。サーバグループ情報書込処理３０（図３）は、サーバグループ情報テーブル１６（図４）から、自サーバ（対象ウェブＨＭＩサーバ）が属するサーバグループのすべてのサーバ名が定められたサーバグループ情報を抽出する。
【００６５】
図２はサーバグループ情報テーブル１６の一例である。図７の例のようにＵＲＬに対象ウェブＨＭＩサーバ「ＳＶＲ１」が指定されている場合、サーバグループ情報２８（図４）は、ＳＶＲ１と同一のサーバグループ（ＳＥＲＶＥＲ ＧＲＯＵＰ ＩＤ ＝ １）に属するＳＶＲ１とＳＶＲ２を含む。
【００６６】
ステップＳ１０６において、サーバグループ情報書込処理３０は、ステップＳ１０５で抽出したサーバグループ情報２８をＨＭＩクライアント２０のメモリ２００ｂ（例えばハードディスク）へ書き込む処理を試みる。この書き込み処理が成功するには、ウェブＨＭＩサーバ１０からアクセス可能な共有フォルダがメモリ２００ｂに用意されている必要がある。未だ共有フォルダが用意されておらず、書き込み処理が失敗した場合は、一定時間後に再度ステップＳ１０６の処理を実行する（ステップＳ１０７）。すなわち、サーバグループ情報書込処理３０は、ステップＳ１０５で抽出したサーバグループ情報２８が共有フォルダに書き込まれるまで、サーバグループ情報２８の書き込みを繰り返す。
【００６７】
また、ステップＳ１０７において、クライアント認証情報書込処理４６は、ステップＳ１０５において受信したクライアント認証情報２９が共有フォルダに書き込まれるまで、クライアント認証情報２９の書き込みを繰り返す。
【００６８】
ステップＳ１０４の処理後、ステップＳ１０８において、インストーラ実行確認処理３９（図３）は、対象ウェブＨＭＩサーバからウェブブラウザ２１へ、疑似シンクライアントインストーラ１５（図４）をダウンロードする。その後、インストーラ実行確認処理３９は、疑似シンクライアントインストーラ１５を実行するための通知バー８１（図８）を表示する。ウェブブラウザ２１に表示された通知バー８１には、実行ボタンが配置されている。図８の「clientInstaller.exe」は、疑似シンクライアントインストーラ１５のファイル名である。疑似シンクライアントインストーラ１５は実行ファイル（拡張子「.exe」）である。
【００６９】
ステップＳ１０９において、ユーザは、通知バー８１に表示された実行ボタンを押す。
【００７０】
図５のステップＳ１１０において、疑似シンクライアントインストーラ１５がＨＭＩクライアント２０上で実行される。
【００７１】
ステップＳ１１１において、疑似シンクライアントインストーラ１５が実行されると、図８に示すユーザアカウント制御に関するダイアログボックスが表示される。疑似シンクライアントインストーラ１５は、管理者権限で実行される必要がある。そのため、権限昇格処理４０（図３）は、通知バー８１に対して疑似シンクライアントインストーラ１５の実行を許可する操作がされた場合に、ＨＭＩクライアント２０の管理者権限を付与するための権限昇格ダイアログ９１（図９）を表示する。権限昇格ダイアログ９１に表示された「はい」ボタンが押されると、インストールが実行される。
【００７２】
ステップＳ１１２において、共有フォルダ作成処理４２（図３）は、権限昇格ダイアログ９１において権限昇格を許可する操作がなされた場合に、ウェブＨＭＩサーバ１０からアクセス可能な共有フォルダを作成する。共有フォルダ作成処理４２は、疑似シンクライアントインストーラ１５により実行される。
【００７３】
共有フォルダは、ウェブＨＭＩサーバ１０からクライアント認証情報２９が入力されることにより、ウェブＨＭＩサーバ１０からアクセス可能となる。共有フォルダが設定されると、上述したステップＳ１０６においてサーバグループ情報２８とクライアント認証情報２９とがＨＭＩクライアント２０のメモリ２００ｂへ書き込まれる。これによりステップＳ１０７の判定条件が成立し、サーバグループ情報２８とクライアント認証情報２９を共有フォルダへ書き込む処理は終了する。
【００７４】
ステップＳ１１３において、常駐プロセス設定処理４３（図３）は、クライアント常駐プログラム１７（図４）をウェブＨＭＩサーバ１０から共有フォルダへコピーする。常駐プロセス設定処理４３は、疑似シンクライアントインストーラ１５により実行される。疑似シンクライアントインストーラ１５は、クライアント常駐プログラム１７のインストールを開始する。
【００７５】
ステップＳ１１４において、常駐プロセス設定処理４３は、クライアント常駐プログラム１７を常駐プロセス２５（図１）として設定する。クライアント常駐プログラム１７は、常時バックグラウンドで実行されるＷｉｎｄｏｗｓ（登録商標）サービスとして設定される。ところで、クライアント常駐プログラム１７をＷｉｎｄｏｗｓ（登録商標）サービスとして登録する際には、ＨＭＩクライアント２０のアカウント名とパスワードが必要である。そこで、常駐プロセス設定処理４３は、共有フォルダに書き込まれたクライアント認証情報２９を用いて、クライアント常駐プログラム１７を常駐プロセス２５として設定する。
本実施形態によれば、ステップＳ１０３において入力されたクライアント認証情報は、（１）ウェブＨＭＩサーバ１０がＨＭＩクライアント２０の共有フォルダにアクセスするため、（２）ＨＭＩクライアント２０がクライアント常駐プログラム１７を常駐プロセス２５（図１）として設定するため、の２つの用途に用いられる。すなわち、ステップＳ１１４において、ユーザはクライアント認証情報を再入力しなくてよいため、運用コストを低減できる。
【００７６】
上述した処理フローにより、疑似シンクライアントのインストール作業は完了する。上述したインストール作業では、ＵＲＬに対象サーバ名が含まれる以外に、ＨＭＩクライアント２０は、サーバ固有の設定を一切行っていない。また、疑似シンクライアントインストーラ１５にサーバ固有の情報は含まれていない。本実施形態のシステムでは、サーバ固有の情報（サーバグループ情報）は、ＨＭＩクライアント２０に共有フォルダが設定されるのを見計らって、自動的に配信される。そのため、ＨＭＩクライアント２０毎に異なるサーバグループ情報を組み込んだインストーラを用意する必要がない。
【００７７】
ところで、疑似シンクライアントインストーラ１５が、ウェブＨＭＩサーバ１０からＨＭＩクライアント２０へコピーするファイルは、ウェブＨＭＩサーバ１０に適切に配備されている必要がある。そこで、疑似シンクライアントインストーラ１５が適切に動作するために、サーバインストーラ１９は、必要なファイルをメモリ１００ｂ（例えばハードディスク）に配備する。
【００７８】
サーバインストーラ１９は、メモリ１００ｂに、サーバ情報配信プログラム１３、インストール用ＨＴＭＬファイル１４、疑似シンクライアントインストーラ１５、サーバグループ情報テーブル１６、クライアント常駐プログラム１７、サーバ接続優先順リストテーブル１８を配備する。サーバ情報配信プログラム１３は、ウェブサーバ１１上で図３に示すサーバグループ情報書込処理３０、テーブル共有処理３１、接続優先順リスト送信処理３２、テーブル管理処理４４として実行される。また、サーバ情報配信プログラム１３は、ウェブブラウザ２１にロードされる上述したＨＭＩ制御プログラムを含む。
【００７９】
＜（２）ＨＭＩクライアント起動時のサーバ接続優先順リストの動的な配信＞
次に、インストール後のクライアント−サーバ接続処理と、サーバ接続優先順リストの動的な配信処理について説明する。
【００８０】
まず、サーバ接続優先順リストについて説明する。疑似シンクライアントのインストールが完了した時点で、各クライアントのサーバ接続優先順位は決定しない。つまり、各ＨＭＩクライアント２０に対して、どのウェブＨＭＩサーバ１０がプライマリサーバで、どのウェブＨＭＩサーバ１０がセカンダリサーバか決定していない。サーバ接続優先順位は、ＨＭＩクライアント２０がＨＭＩアプリケーションを起動するときに、サーバ接続優先順リストを取得することで動的に決定される。
【００８１】
テーブル共有処理３１（図３）は、サーバ接続優先順リストテーブル１８をサーバグループに属するすべてのウェブＨＭＩサーバ１０間で共有する。サーバ接続優先順リストテーブル１８（図４）は、複数のサーバ接続優先順リストのそれぞれについて、サーバグループに属する各ウェブＨＭＩサーバ１０に接続するＨＭＩクライアント２０の数を均等に近づけるように割り当て順を定める。サーバ接続優先順リストは、サーバグループに属するすべてのウェブＨＭＩサーバ１０の接続優先順を定める。サーバ接続優先順リストには、ＨＭＩクライアント２０が接続するウェブＨＭＩサーバが優先順に記載されている。
【００８２】
図１０の（Ａ）はサーバ数が２の場合のサーバ接続優先順リストテーブルである。
サーバ接続優先順リストテーブル１８は、割り当て順と、サーバ接続優先順リストと、割り当て先クライアントと、接続中フラグと、最終接続時刻とを関連付けた情報が複数格納されたテーブルである（図１２）。図９では、そのうち、割り当て順とサーバ接続優先順リストのみを表している。
【００８３】
２つのウェブＨＭＩサーバ１０は、第１ウェブＨＭＩサーバ（ＳＶＲ１）と第２ウェブＨＭＩサーバ（ＳＶＲ２）である。サーバ接続優先順リストテーブル１８は、少なくとも１番目に接続するＨＭＩクライアント２０に割り当てられる第１サーバ接続優先順リストと、２番目に接続するＨＭＩクライアント２０に割り当てられる第２サーバ接続優先順リストとを含む。３番目以降に接続するＨＭＩクライアント２０には、第１サーバ接続優先順リストと第２サーバ接続優先順リストとが交互に割り当てられる。
【００８４】
第１サーバ接続優先順リストは、ＳＶＲ１、ＳＶＲ２の順に接続優先順が定められている。第２サーバ接続優先順リストは、ＳＶＲ２、ＳＶＲ１の順に接続優先順が定められている。
【００８５】
図１０の（Ｂ）はサーバ数が３の場合のサーバ接続優先順リストテーブルである。３つのウェブＨＭＩサーバ１０は、第１ウェブＨＭＩサーバ（ＳＶＲ１）と第２ウェブＨＭＩサーバ（ＳＶＲ２）と第３ウェブＨＭＩサーバ（ＳＶＲ３）である。サーバ接続優先順リストテーブル１８は、少なくとも１番目に接続するＨＭＩクライアント２０に割り当てられる第１サーバ接続優先順リストと、２番目に接続するＨＭＩクライアント２０に割り当てられる第２サーバ接続優先順リストと、３番目に接続するＨＭＩクライアント２０に割り当てられる第３サーバ接続優先順リストと、４番目に接続するＨＭＩクライアント２０に割り当てられる第４サーバ接続優先順リストと、５番目に接続するＨＭＩクライアント２０に割り当てられる第５サーバ接続優先順リストと、６番目に接続するＨＭＩクライアント２０に割り当てられる第６サーバ接続優先順リストと、とを含む。７番目以降に接続するＨＭＩクライアント２０には、第１から第６サーバ接続優先順リストまでが順番に割り当てられる。
【００８６】
第１サーバ接続優先順リストは、ＳＶＲ１、ＳＶＲ２、ＳＶＲ３の順に接続優先順が定められている。第２サーバ接続優先順リストは、ＳＶＲ２、ＳＶＲ３、ＳＶＲ１の順に接続優先順が定められている。第３サーバ接続優先順リストは、ＳＶＲ３、ＳＶＲ１、ＳＶＲ２の順に接続優先順が定められている。第４サーバ接続優先順リストは、ＳＶＲ１、ＳＶＲ３、ＳＶＲ２の順に接続優先順が定められている。第５サーバ接続優先順リストは、ＳＶＲ２、ＳＶＲ１、ＳＶＲ３の順に接続優先順が定められている。第６サーバ接続優先順リストは、ＳＶＲ３、ＳＶＲ２、ＳＶＲ１の順に接続優先順が定められている。
【００８７】
サーバ接続優先順リストテーブルを生成するアルゴリズムは次の通りである。
サーバ台数をｎとしたときのサーバをＳＶＲ（ｉ）とする（ｉ＝０，１，・・・，ｎ−１）。
ここでｉをこのサーバのサーバインデックスと呼ぶことにする。サーバＳＶＲのサーバインデックスは、ｉｎｄｅｘ（ＳＶＲ）と表す。
以下の式が成り立つ。
ｉｎｄｅｘ（ＳＶＲ（ｉ））＝ｉ
サーバ台数をｎとしたときのｋ番目のサーバ接続優先順リストのｉ番目のサーバをＳ（ｎ，ｋ，ｉ）とする。
ここで、
ｎ＞＝２
ｋ＝０，１，・・・，ｎ！−１
ｉ＝０，１，・・・，ｎ−１
である。ｋ＜＝ｎ！−１であるのは、ｋがｎ！以上の場合は、ｋがｎ！以下の場合のサーバ接続優先順リストを繰り返し使えばよいからである。
ｍ＝（ｎ！−１）×ｑ＋ｒ  （ｑは０以上の整数、ｒ＝０，１，・・・，ｎ！−１）の場合は、Ｓ（ｎ，ｍ，ｉ）＝Ｓ（ｎ，ｒ，ｉ）ということである。
ｎ＝２の場合は、以下のとおりである。
Ｓ（２，０，０）＝ＳＶＲ（０）
Ｓ（２，０，１）＝ＳＶＲ（１）
Ｓ（２，１，０）＝ＳＶＲ（１）
Ｓ（２，１，１）＝ＳＶＲ（０）
サーバ台数をｎ＋１に拡張するために、Ｐ（ｎ，ｋ，ｉ，ｂ）を考える。これは、サーバ台数ｎ＋１の場合、サーバＳＶＲ（ｂ）を起点にＳ（ｎ，ｋ，ｉ）のサーバインデックス分だけシフトしたサーバを表す。厳密には以下のように定義される。
Ｐ（ｎ，ｋ，ｉ，ｂ）＝ＳＶＲ（（ｂ＋ｉｎｄｅｘ（Ｓ（ｎ，ｋ，ｉ））＋１）％（ｎ＋１））
ここで、ｘ％ｙは、ｙを法としたｘの剰余数を表す。例えば、４％３＝１である。
また、それぞれの変数の範囲は、以下のとおりである。
ｎ＞＝２
ｋ＝０，１，・・・，ｎ！−１
ｉ＝０，１，・・・，ｎ−１
ｂ＝０，１，・・・，ｎ
例えば、ｎ＝２の場合には、以下のとおりである。
Ｐ（２，０，０，０）＝ＳＶＲ（（０＋０＋１）％３）＝ＳＶＲ（１）
Ｐ（２，０，１，０）＝ＳＶＲ（（０＋１＋１）％３）＝ＳＶＲ（２）
Ｐ（２，１，０，０）＝ＳＶＲ（（０＋１＋１）％３）＝ＳＶＲ（２）
Ｐ（２，１，１，０）＝ＳＶＲ（（０＋０＋１）％３）＝ＳＶＲ（１）
Ｐ（２，０，０，１）＝ＳＶＲ（（１＋０＋１）％３）＝ＳＶＲ（２）
Ｐ（２，０，１，１）＝ＳＶＲ（（１＋１＋１）％３）＝ＳＶＲ（０）
Ｐ（２，１，０，１）＝ＳＶＲ（（１＋１＋１）％３）＝ＳＶＲ（０）
Ｐ（２，１，１，１）＝ＳＶＲ（（１＋０＋１）％３）＝ＳＶＲ（２）
Ｐ（２，０，０，２）＝ＳＶＲ（（２＋０＋１）％３）＝ＳＶＲ（０）
Ｐ（２，０，１，２）＝ＳＶＲ（（２＋１＋１）％３）＝ＳＶＲ（１）
Ｐ（２，１，０，２）＝ＳＶＲ（（２＋１＋１）％３）＝ＳＶＲ（１）
Ｐ（２，１，１，２）＝ＳＶＲ（（２＋０＋１）％３）＝ＳＶＲ（０）
Ｓ（ｎ＋１，ｋ，ｉ）は、Ｐ（ｎ，ｋ，ｉ，ｂ）を使って表すことができる。
ここで、ｋの範囲は以下の通りである。
ｋ＝０，１，・・・，（ｎ＋１）！−１
したがって、ｋ＝（ｎ＋１）×ｑ＋ｒと表すことができる。
ここで、ｑ、ｒの範囲は以下の通りである。
ｑ＝０，１，・・・，ｎ！−１
ｒ＝０，１，・・・，ｎ
ｉ＝０の場合、Ｓ（ｎ＋１，ｋ，ｉ）＝ＳＶＲ（ｒ）
ｉ＝１，２，・・・，ｎの場合、Ｓ（ｎ＋１，ｋ，ｉ）＝Ｐ（ｎ，ｑ，ｉ−１，ｒ）
Ｐ（ｎ，ｋ，ｉ，ｂ）の定義から、Ｓ（ｎ＋１，ｋ，ｉ）は、以下の漸化式で表すことができる。
ｎ＞＝２の場合
ｋ＝（ｎ＋１）×ｑ＋ｒとすると、
ｉ＝０の場合、Ｓ（ｎ＋１，ｋ，ｉ）＝ＳＶＲ（ｒ）
ｉ＝１，２，・・・，ｎの場合、Ｓ（ｎ＋１，ｋ，ｉ）＝ＳＶＲ（（ｒ＋ｉｎｄｅｘ（Ｓ（ｎ，ｑ，ｉ−１））＋１）％（ｎ＋１））
ｎ＝１の場合
Ｓ（ｎ＋１，０，０）＝Ｓ（２，０，０）＝ＳＶＲ（０）
Ｓ（ｎ＋１，０，１）＝Ｓ（２，０，１）＝ＳＶＲ（１）
Ｓ（ｎ＋１，１，０）＝Ｓ（２，１，０）＝ＳＶＲ（１）
Ｓ（ｎ＋１，１，１）＝Ｓ（２，１，１）＝ＳＶＲ（０）
この漸化式により、サーバ台数２以上の場合のすべてのサーバ接続優先順リストを求めることができる。
【００８８】
サーバ数ｎの場合のサーバ接続優先順リストテーブルは、サーバ数ｎ−１の場合のサーバ接続優先順リストテーブルを元に生成できるので、サーバ数２の場合のサーバ接続優先順リストテーブルからサーバ数３、４、５、・・・の場合のサーバ接続優先順リストテーブルを順次生成できる。
リストの数ｋがｎ！以上の場合のサーバ接続優先順リストテーブルは、ｋがｎ！の場合のサーバ接続優先順リストテーブルから生成される。ｋがｎ！の場合のサーバ接続優先順リストテーブルを基本優先順リストテーブルと定義する。
基本優先順リストテーブルを一巡使うと、また基本優先順リストテーブルを最初から使い始めることにより、クライアント台数がいくら多くなってもリストを生成できる。
サーバ台数ｎの場合、基本優先順リストの数は、ｎ！である。ｎ＝２の場合は、２！＝２。ｎ＝３の場合は、３！＝６となり、図１０の結果と一致する。
リストの一番目に来るサーバは、サーバ台数ｎの場合、ｎ通りであり、２番目からｎ番目までのサーバは、サーバ台数ｎ−１の場合の基本優先順リストを先述の漸化式を用いてそれぞれ対応させることにより、ｎ×（（ｎ−１）！）＝ｎ！個の基本優先順リストを生成できる。
【００８９】
ところで、サーバグループ内の複数のサーバが、同時にサーバ接続優先順リストテーブル１８にアクセスした場合、異なるＨＭＩクライアント２０に同一のサーバ接続優先順リストを割り当てられてしまう可能性がある。この誤動作を防ぐため、サーバ接続優先順リストテーブル１８の更新権は、サーバグループ内の一つのサーバが所有する。ＨＭＩクライアント２０がサーバ接続優先順リストを要求した場合、そのサーバが、サーバ接続優先順リストテーブルの更新権を持っているときは、ただちに、新たなサーバ接続優先順リストを割り当て、サーバ接続優先順リストをＨＭＩクライアント２０へ送信する。一方、サーバ接続優先順リストテーブルの更新権を持っていないときは、そのサーバは、サーバ接続優先順リストテーブルを持っているサーバにサーバ接続優先順リストテーブルの更新権を要求する。そして、サーバ接続優先順リストテーブルの更新権を得た後に、サーバ接続優先順リストを割り当て、ＨＭＩクライアント２０へ送信する。
【００９０】
図３、図１１乃至図１３を参照して、サーバ接続優先順リストを取得する手順について説明する。図３は、ＨＭＩクライアント２０およびウェブＨＭＩサーバ１０において実行される処理について説明するためのブロック図である。図１１は、サーバ接続優先順リストの配信処理の流れについて説明するためのフローチャートである。図１２は、サーバ接続優先順リストの割り当て例を説明するための図である。図１３は、サーバグループ情報テーブルの一例を示す図である。
【００９１】
ＨＭＩクライアント２０は、起動すると、インストール時に取得したサーバグループ情報２８（図４）に記載されたすべてのウェブＨＭＩサーバ１０の生死確認を行う。死活監視処理３３（図３）は、サーバグループに属するすべてのウェブＨＭＩサーバ１０の稼働状態を監視する。この監視は、コネクションレス型通信（例えば、ＲＥＳＴプロトコル）を用いて行われる。
【００９２】
図１１のステップＳ２００において、接続優先順リスト要求処理３４（図３）は、サーバグループに属するいずれか１つのウェブＨＭＩサーバ１０へ、サーバ接続優先順リストを要求するためのリスト要求信号を送信する。リスト要求信号をいずれのウェブＨＭＩサーバ１０に送信するかは周期的に変更される。リスト要求信号はコネクションレス型通信（例えば、ＲＥＳＴプロトコル）で送信される。
【００９３】
ステップＳ２０１において、ウェブＨＭＩサーバ１０は、要求元クライアントからリスト要求信号を受信する。要求元クライアントは、リスト要求信号を送信したＨＭＩクライアント２０である。
【００９４】
ステップＳ２０２において、ウェブＨＭＩサーバ１０は、自サーバがサーバ接続優先順リストテーブル１８の更新権を有するかを判定する。上述したようにサーバ接続優先順リストテーブル１８は、サーバグループに属するすべてのウェブＨＭＩサーバ１０間で共有されている（テーブル共有処理３１）。
【００９５】
更新権を有する場合は、ステップＳ２０３の処理に進む。更新権を有さない場合は、更新権を有するウェブＨＭＩサーバ１０へ更新権を要求し、更新権を取得した後にステップＳ２０３の処理に進む。
【００９６】
ステップＳ２０３〜ステップＳ２０６において、接続優先順リスト送信処理３２は、サーバ接続優先順リストテーブル１８に定められた割り当て順に従って、サーバ接続優先順リストを送信する。サーバ接続優先順リストは、サーバグループに属するすべてのウェブＨＭＩサーバ１０の接続優先順を定める。
【００９７】
まず、ステップＳ２０３において、接続優先順リスト送信処理３２は、サーバ接続優先順リストテーブル１８に、要求元クライアントに対応するエントリがあるかを判定する。接続優先順リスト送信処理３２は、サーバ接続優先順リストテーブル１８の「割り当て先クライアント」欄に、要求元クライアントが登録されている場合に、エントリがあると判定する。エントリがある場合には、ステップＳ２０４の処理に進む。エントリがない場合には、ステップＳ２０５の処理に進む。
【００９８】
ステップＳ２０４において、接続優先順リスト送信処理３２は、ステップＳ２０３で見つけられたエントリのサーバ接続優先順リストを再利用する。図１３は、サーバ接続優先順リストテーブル１８の一例である。図１３の例では、２ｎｄ ｃｌｉｅｎｔにＣＬＩＥＮＴ Ｅが既に割り当てられている。そのため、要求元クライアントがＣＬＩＥＮＴ Ｅである場合には、２ｎｄ ｃｌｉｎｅｔのサーバ接続優先順リストが再利用される。
【００９９】
ステップＳ２０５において、接続優先順リスト送信処理３２は、アサインされていないエントリのうち割り当て順が最も早いエントリを要求元クライアントに割り当てる。
【０１００】
ステップＳ２０６において、接続優先順リスト送信処理３２は、サーバ接続優先順リストを要求元クライアントへ送信する。送信時刻は、サーバ接続優先順リストテーブル１８の「最終接続時刻」欄に記録される。
【０１０１】
ステップＳ２０７において、要求元クライアントは、サーバ接続優先順リストを受信する。
【０１０２】
ステップＳ２０８において、サーバ接続処理３５は、サーバグループに属する少なくとも１つの稼働中のウェブＨＭＩサーバ１０のうち、サーバ接続優先順リストに定められた接続優先順位が最も高いウェブＨＭＩサーバ１０とコネクションを確立する。なお、ウェブＨＭＩサーバ１０の稼働状態は、サブルーチンである死活監視処理３３により継続的に監視される。
【０１０３】
ステップＳ２０８の処理によりコネクションが確立されたウェブＨＭＩサーバ１０は、サーバ接続優先順リストテーブル１８の「最終接続時刻」欄をクリアする。
【０１０４】
図１２にサーバ接続優先順リストを取得する一例を示す。図１２は、ＳＶＲ１とＳＶＲ２が属するサーバグループに、クライアントＡ〜Ｄが接続する例を表している。破線１２１は、ＳＶＲ１へのリスト要求信号とその応答信号を表す。破線１２２は、ＳＶＲ２へのリスト要求信号とその応答信号を表す。ＨＭＩクライアント２０は、リスト要求信号の送信先サーバを数秒毎に切り替える。そのため、クライアントＡとＢは、ＳＶＲ１へリスト要求信号を送信しているが、クライアントＣとＤは、ＳＶＲ２へリスト要求信号を送信している。
【０１０５】
最初にクライアントＡからリスト要求信号を受信すると、ＳＶＲ１は、１番目の割り当て順に設定されたサーバ接続優先順リストをクライアントＡに割り当てる。クライアントＡは、優先順が最も高いＳＶＲ１との間に双方向通信可能なコネクション（実線１２３）を確立する。プロトコルとして例えばＷｅｂＳｃｏｋｅｔが用いられる。
【０１０６】
次にクライアントＢからリスト要求信号を受信すると、ＳＶＲ１は、２番目の割り当て順に設定されたサーバ接続優先順リストをクライアントＢに割り当てる。クライアントＢは、優先順が最も高いＳＶＲ２との間に双方向通信可能なコネクションを確立する。
【０１０７】
次にクライアントＣからリスト要求信号を受信すると、ＳＶＲ２は、３番目の割り当て順に設定されたサーバ接続優先順リストをクライアントＣに割り当てる。クライアントＣは、優先順が最も高いＳＶＲ１との間に双方向通信可能なコネクションを確立する。
【０１０８】
次にクライアントＤからリスト要求信号を受信すると、ＳＶＲ２は、４番目の割り当て順に設定されたサーバ接続優先順リストをクライアントＤに割り当てる。クライアントＤは、優先順が最も高いＳＶＲ２との間に双方向通信可能なコネクションを確立する。
【０１０９】
以上説明したように、図１１に示すクライアント起動時の処理によれば、ＨＭＩクライアント２０は、ウェブＨＭＩサーバ１０から動的にサーバ接続優先順リストを取得できる。そのため、ＨＭＩクライアント２０にサーバ接続優先順に関する事前設定は不要である。
【０１１０】
また、負荷分散を考慮した割り当て順に従ってサーバ接続優先順リストがＨＭＩクライアント２０に配信されるため、ＨＭＩクライアント２０に冗長化および負荷分散のための事前設定は不要である。また、事前設定が不要であるため、評価端末や一時的な監視のためにモバイル端末を使う場合であっても、本システムに接続可能である。
【０１１１】
また、サーバ接続優先順リストは、ＨＭＩクライアント２０がサーバグループに接続する時に動的に配信されるため、動作を停止しているＨＭＩクライアント２０は負荷分散の対象外となり、システム全体で稼働しているクライアントの総負荷が、サーバ間で均等に分散される。
【０１１２】
なお、ウェブＨＭＩサーバ１０は、サーバ接続優先順リストテーブル１８のエントリを管理するテーブル管理処理４４を実行する。テーブル管理処理４４は、クライアント−サーバ間の接続状態に応じてサーバ接続優先順リストテーブル１８（図１２）の「接続中フラグ」欄と「最終接続時刻」欄を更新する。テーブル管理処理４４は、ＨＭＩクライアント２０がウェブＨＭＩサーバ１０に接続した場合、接続中フラグを「接続中」に設定する。テーブル管理処理４４は、ＨＭＩクライアント２０とウェブＨＭＩサーバ１０との接続が切れると、接続フラグを「未接続」に設定するとともに、「最終接続時刻」を記録する。また、テーブル管理処理４４は、サーバ接続優先順リストテーブル１８の各エントリの最終接続時刻を周期的にチェックし、一定時間が経過しているか確認する。一定時間経過している場合はそのエントリは削除される。具体的には、そのエントリの「割り当て先クライアント」欄と、「接続中フラグ」欄と、「最終接続時刻」欄のデータがクリアされる。
【０１１３】
＜フェイルオーバ処理＞
現在接続中のウェブＨＭＩサーバ１０が故障すると、ＨＭＩクライアント２０はフェイルオーバ処理３６を実行し、他のウェブＨＭＩサーバ１０に接続して運用を継続する。フェイルオーバ処理３６は、現在接続中のウェブＨＭＩサーバ１０が非稼働状態となった場合に、サーバグループに属する少なくとも１つの稼働中のウェブＨＭＩサーバ１０のうち、サーバ接続優先順リストに定められた接続優先順位が最も高いウェブＨＭＩサーバ１０へコネクションを切り替える。ＨＭＩクライアント２０は、死活監視処理３３により、各ウェブＨＭＩサーバ１０の稼働状態を常に把握している。そのため、フェイルオーバ処理３６は、稼働中のサーバへ即座にフェイルオーバすることができ、サーバ故障によるオペレーションへの影響を最小限に抑えることができる。
【０１１４】
＜フェイルバック処理＞
ウェブＨＭＩサーバ１０が復旧した場合には、ＨＭＩクライアント２０はフェイルバック処理３７を実行する。フェイルバック処理３７は、ＨＭＩクライアント２０が現在接続しているウェブＨＭＩサーバ１０よりも高い接続優先順位のウェブＨＭＩサーバ１０が稼働している場合に、高い接続優先順位のウェブＨＭＩサーバ１０へコネクションを切り替える。ＨＭＩクライアント２０は、死活監視処理３３により、各ウェブＨＭＩサーバ１０の稼働状態を常に把握している。そのため、故障していたサーバが復旧したことを認識できる。復旧したサーバが現在接続しているサーバよりも接続優先順位が高い場合、復旧したサーバに即座にフェイルバックすることができる。これにより、サーバが復旧した場合でも最適な負荷分散を維持できる。
【０１１５】
図１４は、フェイルオーバ処理とフェイルバック処理の一例を示す図である。図１４の（Ａ）は、サーバグループに属するすべてのウェブＨＭＩサーバ（Ｓ１、Ｓ２、Ｓ３）が稼働しており、ＨＭＩクライアント（Ｃ１−Ｃ９）がプライマリサーバに接続している状態を示す。図１４の（Ｂ）は、Ｓ２が故障してフェイルオーバ処理３６が実行された状態を示す。Ｃ２はセカンダリサーバであるＳ１に、Ｃ５とＣ８はセカンダリサーバであるＳ３に再接続する。図１４の（Ｃ）は、Ｓ２が復旧してフェイルバック処理３７が実行された状態を示す。Ｃ２、Ｃ５、Ｃ８は、プライマリサーバであるＳ２に再接続する。
【０１１６】
また、ＨＭＩクライアント２０は、フェイルオーバ処理３６またはフェイルバック処理３７を実行した場合に、ＰＬＣ情報収集処理４１を実行する。ＰＬＣ情報収集処理４１は、コネクションを切り替える前にウェブブラウザ２１に表示されていたＨＭＩ画面に配置されたパーツの状態情報をＰＬＣ２から収集するように、コネクションを切り替えた後のウェブＨＭＩサーバ１０へ要求する。これによれば、ウェブブラウザ２１は、フェイルオーバまたはフェイルバック直前にオープンしていたＨＭＩ画面に含まれるＰＬＣ２の信号データを再度取得できる。また、フェイルオーバ中に送信エラーとなったメッセージを再度取得できる。オペレータは、フェイルオーバまたはフェイルバック前の作業を切り替え後も継続して行うことが可能となる。
【０１１７】
以上説明したように、本実施形態に係るＳＣＡＤＡウェブＨＭＩシステムによれば、サーバの冗長化と負荷分散とを図りつつ、クライアント設定に要する運用コストを低減できる。
【０１１８】
＜ハードウェア構成例＞
図１５は、ウェブＨＭＩサーバ１０およびＨＭＩクライアント２０が有するハードウェア構成例を示すブロック図である。
【０１１９】
上述したウェブＨＭＩサーバ１０の各処理は、処理回路により実現される。処理回路は、プロセッサ１００ａと、メモリ１００ｂと、ネットワークインタフェース１００ｃと、入力インタフェース１００ｄと、少なくとも一つのディスプレイ１００ｅが接続して構成されている。プロセッサ１００ａは、メモリ１００ｂに記憶された各種プログラムを実行することにより、ウェブＨＭＩサーバ１０の各機能を実現する。メモリ１００ｂは、ＲＯＭ、ＲＡＭ、ＨＤＤ、ＳＳＤなどを含む。ネットワークインタフェース１００ｃは、コンピュータネットワークを介してＰＬＣ２およびＨＭＩクライアント２０と接続し、ＰＬＣ信号および制御コマンドを送受信可能なデバイスである。入力インタフェース１００ｄは、キーボード、マウス、タッチパネル等の入力デバイスである。
【０１２０】
上述したＨＭＩクライアント２０の各処理は、処理回路により実現される。処理回路は、プロセッサ２００ａと、メモリ２００ｂと、ネットワークインタフェース２００ｃと、入力インタフェース２００ｄと、少なくとも一つのディスプレイ２００ｅとが接続して構成されている。プロセッサ２００ａは、メモリ２００ｂに記憶された各種プログラムを実行することにより、ＨＭＩクライアント２０の各機能を実現する。メモリ２００ｂは、ＲＯＭ、ＲＡＭ、ＨＤＤ、ＳＳＤなどを含む。ネットワークインタフェース２００ｃは、ウェブＨＭＩサーバ１０に接続し、ＰＬＣ信号および制御コマンドを送受信可能なデバイスである。入力インタフェース２００ｄは、キーボード、マウス、タッチパネル等の入力デバイスである。なお、ＨＭＩクライアント２０は、タブレット等の携帯端末であってもよい。
【０１２１】
以上、本発明の実施の形態について説明したが、本発明は、上記の実施の形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【符号の説明】
【０１２２】
１０            ウェブＨＭＩサーバ
１１            ウェブサーバ
１３            サーバ情報配信プログラム
１４            インストール用ＨＴＭＬファイル
１５            疑似シンクライアントインストーラ
１６            サーバグループ情報テーブル
１７            クライアント常駐プログラム
１８            サーバ接続優先順リストテーブル
１９            サーバインストーラ
２０            ＨＭＩクライアント
２１            ウェブブラウザ
２２            ＨＭＩ制御処理
２３            クライアント制御処理
２４            ウェブサーバ
２５            常駐プロセス
２６            クライアントリソース
２８            サーバグループ情報
３０            サーバグループ情報書込処理
３１            テーブル共有処理
３２            接続優先順リスト送信処理
３３            死活監視処理
３４            接続優先順リスト要求処理
３５            サーバ接続処理
３６            フェイルオーバ処理
３７            フェイルバック処理
３８            サーバグループ情報要求処理
３９            インストーラ実行確認処理
４０            権限昇格処理
４１            ＰＬＣ情報収集処理
４２            共有フォルダ作成処理
４３            常駐プロセス設定処理
４４            テーブル管理処理
７１            アドレスバー
８１            通知バー
９１            権限昇格ダイアログ
１００ａ          プロセッサ
１００ｂ          メモリ
１００ｃ          ネットワークインタフェース
１００ｄ          入力インタフェース
１００ｅ          ディスプレイ
２００ａ          プロセッサ
２００ｂ          メモリ
２００ｃ          ネットワークインタフェース
２００ｄ          入力インタフェース
２００ｅ          ディスプレイ
【要約】
ＳＣＡＤＡウェブＨＭＩシステムは、ウェブＨＭＩサーバからＨＭＩクライアントへ、負荷分散を考慮した割り当て順に従って、サーバ接続優先順リストを動的に配信する。そのため、ＨＭＩクライアントには予め接続優先順に関する設定が不要である。また、サーバ接続優先順リストは、負荷分散を考慮した割り当て順に従って各ＨＭＩクライアントに割り当てられるため、各ウェブＨＭＩサーバに接続するクライアントの数が均等になり負荷分散が図られる。ＳＣＡＤＡウェブＨＭＩシステムは、サーバの冗長化と負荷分散とを図りつつ、クライアント設定に要する運用コストを低減できる。【図１】
0006888739.tif 000002
【図２】
0006888739.tif 000003
【図３】
0006888739.tif 000004
【図４】
0006888739.tif 000005
【図５】
0006888739.tif 000006
【図６】
0006888739.tif 000007
【図７】
0006888739.tif 000008
【図８】
0006888739.tif 000009
【図９】
0006888739.tif 000010
【図１０】
0006888739.tif 000011
【図１１】
0006888739.tif 000012
【図１２】
0006888739.tif 000013
【図１３】
0006888739.tif 000014
【図１４】
0006888739.tif 000015
【図１５】
0006888739.tif 000016