(57)【特許請求の範囲】
【請求項１】
ハードウェアと、
ホストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、
前記ホストＯＳ上に実現される仮想マシンと、
前記仮想マシン上で動作するゲストＯＳと、
前記ゲストＯＳによって動作し、前記ホストＯＳおよび前記ゲストＯＳそれぞれに割り当てる前記ハードウェアを示すハードウェア割当データに従って前記ゲストＯＳに割り当てられた前記ハードウェアを用いて、外部の制御対象機器の制御処理を実行するゲストプロセス部と、
前記ホストＯＳによって動作し、前記ハードウェア割当データに従って前記ホストＯＳに割り当てられた前記ハードウェアを用いて、前記制御対象機器の制御処理を実行するコントローラプロセス部と、を備え、
前記ハードウェアは、前記ホストＯＳに割り当てられたデバイスメモリと、前記デバイスメモリとは異なりかつ前記ゲストＯＳに割り当てられたゲストＯＳ用記憶領域とを有する共有メモリを含み、
前記コントローラプロセス部は、前記制御対象機器に送信する制御データを前記デバイスメモリに保存し、かつ前記制御データを前記ゲストプロセス部との間で送受信し、
前記ゲストプロセス部は、前記制御データを前記ゲストＯＳ用記憶領域に保存し、かつ前記制御データを前記コントローラプロセス部との間で送受信し、
前記ホストＯＳおよび前記ゲストＯＳは、前記ゲストプロセス部が前記デバイスメモリへのアクセスに用いるドライバを有し、
前記コントローラプロセス部および前記ゲストプロセス部は、前記ホストＯＳと前記ゲストＯＳ間における通信に要する通信パラメータに従って、前記制御データを送受信し、
前記通信パラメータは、前記制御データの送受信によって前記コントローラプロセス部と前記ゲストプロセス部間で前記制御データを共有するか否かを示す伝送情報を含み、
前記コントローラプロセス部および前記ゲストプロセス部は、前記伝送情報が、前記制御データの送受信によって前記コントローラプロセス部と前記ゲストプロセス部間で前記制御データを共有することを示す場合、前記制御データを互いに送受信し、
前記ゲストプロセス部は、前記伝送情報が、前記制御データの送受信によって前記コントローラプロセス部と前記ゲストプロセス部間で共有しないことを示す場合、前記ドライバを介して、前記デバイスメモリへアクセスする、制御装置。
【請求項２】
前記通信パラメータは、さらに、
前記ホストＯＳおよび前記ゲストＯＳが通信に使用するポートのポート番号と、
前記ホストＯＳに割り当てられたＩＰアドレスと、
前記ゲストＯＳに割り当てられたＩＰアドレスと、
前記ホストＯＳおよび前記ゲストＯＳそれぞれの前記ＩＰアドレスのサブネットマスクと、
前記コントローラプロセス部と前記ゲストプロセス部との間で前記制御データを送受信するスキャン周期と、
前記デバイスメモリが有する記憶領域のうち前記コントローラプロセス部から前記ゲストプロセス部に送信する前記制御データの記憶領域の先頭アドレスと、
前記コントローラプロセス部から前記ゲストプロセス部に送信する前記制御データのサイズと、
前記ゲストＯＳ用記憶領域が有する記憶領域のうち前記ゲストプロセス部から前記コントローラプロセス部に送信する前記制御データの記憶領域の先頭アドレスと、
前記ゲストプロセス部から前記コントローラプロセス部に送信する前記制御データのサイズと、
のうち少なくとも１つを含む請求項１に記載の制御装置。
【請求項３】
前記ハードウェアは、前記ハードウェア割当データとなり得る当該ハードウェア割当データの候補を予め設定されることにより記憶する記憶部を有し、
前記コントローラプロセス部は、外部装置から、前記ハードウェア割当データを取得し、前記記憶部に記憶される前記ハードウェア割当データの候補と、前記取得したハードウェア割当データとを比較して、両者が一致しなかった場合に、前記取得したハードウェア割当データに異常があるものとして検出する請求項１に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、制御装置に関する。
【背景技術】
【０００２】
サーバ仮想化という、１台のコンピュータを論理分割して、当該コンピュータで複数のＯＳ（Operating  System）を稼働させる技術がある。この技術を、プラント内のバルブ等の制御対象機器を制御する制御システムに適用することができれば、ＨＭＩ（Human  Machine  Interface）、ツール用ＰＣ、コントローラなど、制御対象機器の制御に関わる複数の装置を１台のコンピュータに集約できる。これによれば、制御システムにおける、設備の導入費用、電力や空調にかかるコストの削減に大きな効果が期待できる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１６／１８９６８９号
【特許文献２】国際公開第２０１５／１３７５０５号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ＨＭＩ、ツール用ＰＣ、コントローラ等のハードウェアを更新する場合、制御システムでは、ＨＭＩ、ツール用ＰＣ、コントローラ等が有する既設の機能をそのまま維持することが求められるが、ゲストＯＳに対するハードウェアの割り当てをどのように管理するかが課題となる。
【課題を解決するための手段】
【０００５】
実施形態の制御装置は、ハードウェアと、ホストＯＳ（Operating  System）と、仮想マシンと、ゲストＯＳと、ゲストプロセス部と、コントローラプロセス部と、を備える。仮想マシンは、ホストＯＳ上に実現される。ゲストＯＳは、仮想マシン上で動作する。ゲストプロセス部は、ゲストＯＳによって動作し、ホストＯＳおよびゲストＯＳそれぞれに割り当てるハードウェアを示すハードウェア割当データに従ってゲストＯＳに割り当てられたハードウェアを用いて、外部の制御対象機器の制御処理を実行する。コントローラプロセス部は、ホストＯＳによって動作し、ハードウェア割当データに従ってホストＯＳに割り当てられたハードウェアを用いて、制御対象機器の制御処理を実行する。ハードウェアは、ホストＯＳに割り当てられたデバイスメモリと、デバイスメモリとは異なりかつゲストＯＳに割り当てられたゲストＯＳ用記憶領域とを有する共有メモリを含む。コントローラプロセス部は、制御対象機器に送信する制御データをデバイスメモリに保存し、かつ制御データをゲストプロセス部との間で送受信する。ゲストプロセス部は、制御データをゲストＯＳ用記憶領域に保存し、かつ制御データをコントローラプロセス部との間で送受信する。ホストＯＳおよびゲストＯＳは、ゲストプロセス部がデバイスメモリへのアクセスに用いるドライバを有する。コントローラプロセス部およびゲストプロセス部は、ホストＯＳとゲストＯＳ間における通信に要する通信パラメータに従って、制御データを送受信する。通信パラメータは、制御データの送受信によってコントローラプロセス部とゲストプロセス部間で制御データを共有するか否かを示す伝送情報を含む。コントローラプロセス部およびゲストプロセス部は、伝送情報が、制御データの送受信によってコントローラプロセス部とゲストプロセス部間で制御データを共有することを示す場合、制御データを互いに送受信する。ゲストプロセス部は、伝送情報が、制御データの送受信によってコントローラプロセス部とゲストプロセス部間で共有しないことを示す場合、ドライバを介して、デバイスメモリへアクセスする。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態にかかる制御システムの機能構成の一例を示す図である。
【図２】図２は、第１の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。
【図３】図３は、第１の実施形態にかかる制御装置がダウンロードするハードウェア割当データの一例を示す図である。
【図４】図４は、従来の制御システム内のコントローラ間において制御データを共有する処理の一例を説明するための図である。
【図５】図５は、第２の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。
【図６】図６は、第２の実施形態にかかるコントローラにおけるホストＯＳとゲストＯＳ間における通信処理の一例を説明するための図である。
【図７】図７は、第２の実施形態にかかるコントローラがダウンロードするハードウェア割当データが含む通信パラメータの一例を示す図である。
【図８】図８は、第２の実施形態にかかる制御システムにおける制御データの共有処理の一例を説明するための図である。
【図９】図９は、第３の実施形態にかかる制御システムにおける制御データの共有処理の一例を説明するための図である。
【図１０】図１０は、第４の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。
【図１１】図１１は、第４の実施形態にかかる制御システムのコントローラプロセス部において制御データを共有する処理の流れの一例を示すフローチャートである。
【図１２】図１２は、第４の実施形態にかかる制御システムのゲストプロセス群における制御データを共有する処理の流れの一例を示すフローチャートである。
【図１３】図１３は、第５の実施形態にかかる制御システムのコントローラにおけるハードウェア割当データの異常を検出する処理の一例を説明するための図である。
【発明を実施するための形態】
【０００７】
以下、添付の図面を用いて、本実施形態にかかる制御装置を適用した制御システムについて説明する。
【０００８】
（第１の実施形態）
図１は、第１の実施形態にかかる制御システムの機能構成の一例を示す図である。図１に示すように、本実施形態にかかる制御システムは、コントローラ１００と、ツール用ＰＣ２００と、を有する。そして、コントローラ１００とツール用ＰＣ２００とは、ＬＡＮ（Local  Area  Network）等のネットワークにより互いに通信可能に接続されている。
【０００９】
ツール用ＰＣ２００は、ベンダまたはエンジニア等により用いられ、ＰＯＵ（Program  Organization  Unit）や後述するハードウェア割当データ（ツールデータ）等を記憶する。ＰＯＵは、制御システム全体の処理を実行するためのプログラムを機能単位にモジュール化したプログラムである。
【００１０】
コントローラ１００には、プラント内のセンサ等から各種の検出結果が入力される。また、コントローラ１００は、ツール用ＰＣ２００において作成されたＰＯＵがダウンロードされる。そして、コントローラ１００は、当該コントローラ１００内のタスク上でＰＯＵを実行する。これにより、コントローラ１００は、入力された検出結果に基づく演算を行い、その演算結果に基づいて、プラント内のバルブ等の制御対象機器を制御する。
【００１１】
また、コントローラ１００は、当該コントローラ１００が有するリソース（ハードウェア）が論理分割され、コントローラ１００で複数のＯＳ（Operating  System）を稼働させて、制御システムが有するＨＭＩ（Human  Machine  Interface）や他のコントローラ等、制御対象機器の制御に関わる外部装置を集約した制御装置の一例として機能する。ＨＭＩは、制御システムのオペレータが、リモートでコントローラ１００において実行されるＰＯＵの状態等を監視したり、コントローラ１００内への変数の書き込みやＰＯＵの実行の変更等の各種操作を行ったりする用途で用いられる。
【００１２】
図２は、第１の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。図２に示すように、コントローラ１００は、ハードウェア１０１と、ホストＯＳ１０２と、ホストプロセス群１０３と、仮想マシン（仮想化層）１０４と、ゲストＯＳ１０５と、ゲストプロセス群１０６と、を有する。ハードウェア１０１は、ＣＰＵ（Central  Processing  Unit）等のプロセッサ、ＲＯＭ（Read  Only  Memory）やＲＡＭ（Random  Access  Memory）等のメモリ、ツール用ＰＣ２００等との通信に用いるＬＡＮポート、ＵＳＢ（Universal  Serial  Bus）ポート、ＰＣＩスロット等である。本実施形態では、コントローラ１００は、複数のＣＰＵコア（例えば、４つのＣＰＵコア）をハードウェア１０１として有し、当該ＣＰＵコア上でソフトウェアを実行するマルチコアプロセッサである。具体的には、コントローラ１００は、複数のＣＰＵコアのうちいずれかにより実行される１つのＯＳ（ホストＯＳ１０２）によって、互いに隔離された複数のコンテナ１１０，１２０を動作させる。その際、コントローラ１００は、各コンテナを、異なるＣＰＵコアによって実行する。本実施形態では、図２に示すように、コントローラ１００は、ホストＯＳ１０２およびホストプロセス群１０３を含むコンテナ１１０と、仮想マシン１０４、ゲストＯＳ１０５およびゲストプロセス群１０６を含むコンテナ１２０と、を異なるＣＰＵコアによって実行する。
【００１３】
ホストＯＳ１０２は、コントローラ１００において仮想化される外部装置（仮想マシン１０４）を実現するＯＳである。ホストプロセス群１０３は、ホストＯＳ１０２上で動作するアプリケーションを有する。仮想マシン１０４は、ホストＯＳ１０２上で実現される。本実施形態では、仮想マシン１０４は、ＨＭＩや他のコントローラ等の外部装置のハードウェアを仮想化したマシンである。ここで、仮想化とは、外部装置のハードウェアをエミュレートすることを含む。ゲストＯＳ１０５は、仮想マシン１０４上で動作し、外部装置のプログラム（後述するゲストプロセス群１０６）を動作させるＯＳである。ゲストプロセス群１０６は、ゲストＯＳ１０５によって動作し、後述するハードウェア割当データに従ってゲストＯＳ１０５に割り当てられるハードウェア１０１を用いて、制御対象機器の制御に関わる処理（以下、制御処理と言う）を実行する。ここで、仮想マシン１０４がＨＭＩを仮想化したマシンである場合、制御処理には、制御システムの監視や当該制御システムにおいて行われるプロセスのリモート操作に関わる処理が含まれる。また、仮想マシン１０４が他のコントローラを仮想化したマシンである場合、制御処理には、制御対象機器に対して制御データを送信する等して、当該制御対象機器を制御する処理が含まれる。
【００１４】
本実施形態では、ホストプロセス群１０３は、コントローラプロセス部１０３ａを有する。コントローラプロセス部１０３ａは、ゲストＯＳ１０５を介さずにホストＯＳ１０２によって動作する。そして、コントローラプロセス部１０３ａは、ツール用ＰＣ２００からＰＯＵがダウンロードされ、当該ＰＯＵを実行する。また、コントローラプロセス部１０３ａは、ツール用ＰＣ２００（外部記憶装置の一例）からハードウェア割当データがダウンロードされ、当該ハードウェア割当データに従ってホストＯＳ１０２に割り当てられたハードウェア１０１によって、制御対象機器の制御に関する制御処理を実行する。ここで、ハードウェア割当データは、ホストＯＳ１０２およびゲストＯＳ１０５それぞれに割り当てるハードウェア１０１を示すデータである。具体的には、コントローラプロセス部１０３ａは、コントローラ１００の電源が投入された場合に、ハードウェア割当データを有効化して、当該ハードウェア割当データが示すホストＯＳ１０２に割り当てられたハードウェア１０１を用いて、制御対象機器を制御する。また、コントローラプロセス部１０３ａは、ダウンロードされたハードウェア割当データを、ハードウェア１０１が有するＨＤＤ（Hard  Disk  Drive）等の不揮発性の記憶部であるハードウェア割当データ記憶部１０１ａに保存する。
【００１５】
ところで、制御システムにおけるエンジニアリングデータの管理上の観点から、ゲストＯＳ１０５に割り当てるハードウェア１０１も、ハードウェア割当データに従って管理することが好ましい。そこで、本実施形態では、ホストプロセス群１０３は、図２に示すように、コントローラプロセス部１０３ａに加えて、ゲスト初期化プロセス部１０３ｂを有する。ゲスト初期化プロセス部１０３ｂは、コントローラ１００の電源が投入された際、ハードウェア割当データを参照して、ゲストＯＳ１０５にハードウェア１０１を割り当てるとともに、外部装置を仮想化（エミュレート、復元）した仮想マシン１０４をホストＯＳ１０２上に設定する。さらに、ゲスト初期化プロセス部１０３ｂは、仮想マシン１０４上でゲストＯＳ１０５を起動させる。これにより、ホストＯＳ１０２に対するハードウェア１０１の設定（割当）と同様の方法で、仮想マシン１０４上で動作するゲストＯＳ１０５に対してもハードウェア１０１を設定（割当）できるので、ＨＭＩや他のコントローラ等の外部装置をコントローラ１００に集約した場合でも、ハードウェア１０１の更新に応じて、ゲストＯＳ１０５に対するハードウェア１０１の設定（割当）を容易に管理可能となる。
【００１６】
図３は、第１の実施形態にかかる制御装置がダウンロードするハードウェア割当データの一例を示す図である。図３に示すように、ハードウェア割当データは、ホストＯＳ１０２およびゲストＯＳ１０５それぞれに対応付けて、ホストＯＳ１０２およびゲストＯＳ１０５それぞれのＯＳに割り当てるＣＰＵコアのコア数（本実施形態では、４つのＣＰＵコアのうち、ホストＯＳ１０２およびゲストＯＳ１０５それぞれに割り当てるＣＰＵコアの数）、各ＯＳに割り当てるメモリの容量、各ＯＳに割り当てる内蔵ＬＡＮポートの用途（「専用」、「共用」、または「−」）、各ＯＳに割り当てる内蔵ＵＳＢポートの用途（「専用」、「共用」、または「−」）、各ＯＳに割り当てる拡張ＰＣＩスロット１，２の用途（「専用」、「共用」、または「−」）を表している。また、図３において、各ＯＳに割り当てる内蔵ＬＡＮポート、内蔵ＵＳＢポート、および拡張ＰＣＩスロット１，２の用途において、「専用」は１つのＯＳにのみ使用されることを示し、「共用」は複数のＯＳで使用されることを示し、「−」はいずれのＯＳによっても使用されないことを示す。
【００１７】
コントローラプロセス部１０３ａは、図３に示すハードウェア割当データをダウンロードした場合、ホストＯＳ１０２に対して割り当てられた、３つのＣＰＵコア、４ＧＢのメモリ、内蔵ＬＡＮポート、および内蔵ＵＳＢポートを用いて、制御処理を実行する。また、ゲスト初期化プロセス部１０３ｂは、図３に示すハードウェア割当データをダウンロードした場合、１つのＣＰＵコア、４ＧＢのメモリ、内蔵ＵＳＢポート、拡張ＰＣＩスロット１，２をゲストＯＳ１０５に割り当てる。次いで、ホストＯＳ１０２は、外部装置を仮想化した仮想マシン１０４を起動させる。さらに、ゲスト初期化プロセス部１０３ｂは、仮想マシン１０４上で、ゲストＯＳ１０５を起動させる。そして、ゲストプロセス群１０６は、ゲストＯＳ１０５に割り当てられた、１つのＣＰＵコア、４ＧＢのメモリ、内蔵ＵＳＢポート、拡張ＰＣＩスロット１，２等のハードウェア１０１を用いて、制御処理を実行する。
【００１８】
このように、第１の実施形態にかかるコントローラ１００によれば、ホストＯＳ１０２に対するハードウェア１０１の割り当てと同様の方法で、ゲストＯＳ１０５に対してもハードウェア１０１を割り当てることができるので、ＨＭＩや他のコントローラ等の外部装置をコントローラ１００に集約した場合でも、当該外部装置をコントローラ１００において容易に復元でき、かつハードウェア１０１の更新に応じて、ゲストＯＳ１０５に対するハードウェア１０１の割り当てを容易に管理可能となる。
【００１９】
（第２の実施形態）
本実施形態は、コントローラと外部装置間において制御データを共有する処理を、コントローラプロセス部とゲストプロセス群間においても実現する例である。以下の説明では、第１の実施形態と同様の構成については説明を省略する。
【００２０】
図４は、従来の制御システム内のコントローラ間において制御データを共有する処理の一例を説明するための図である。図４に示すように、制御システム内のコントローラ１００−１は、当該コントローラ１００−１が有する共有メモリにおいて、当該コントローラ１００−１に割り当てられた記憶領域（コントローラ１００−１用エリア）に記憶された制御データを、ＬＡＮ等のネットワークを介して、他のコントローラ１００−２に対して定期的に送信する。ここで、制御データは、制御対象機器の制御に関するデータである。コントローラ１００−２は、コントローラ１００−１から制御データを受信すると、コントローラ１００−２が有する共有メモリにおいて、コントローラ１００−１に割り当てられた記憶領域（コントローラ１００−１用エリア）に対して、受信した制御データを書き込む。これにより、制御システム全体において、制御データを共有している。
【００２１】
また、図４に示すように、制御システム内のコントローラ１００−２は、当該コントローラ１００−２が有する共有メモリにおいて、当該コントローラ１００−２に割り当てられた記憶領域（コントローラ１００−２用エリア）に記憶された制御データを、ＬＡＮ等のネットワークを介して、他のコントローラ１００−１に対して定期的に送信する。コントローラ１００−１は、コントローラ１００−２から制御データを受信すると、コントローラ１００−１が有する共有メモリにおいて、コントローラ１００−２に割り当てられた記憶領域（コントローラ１００−２用エリア）に対して、受信した制御データを書き込む。これにより、制御システム全体において、制御データを共有している。
【００２２】
図５は、第２の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。本実施形態では、制御対象機器の制御に関わる外部装置をコントローラ５００に集約した場合に、コントローラプロセス部５０４とゲストプロセス群１０６間においても制御データを共有する処理を行う。よって、図５に示すように、ハードウェア５０１は、ホストＯＳ１０２およびゲストＯＳ１０５それぞれに割り当てられ、かつホストＯＳ１０２とゲストＯＳ１０５間で共有する制御データを記憶する複数の記憶領域を含む共有メモリ５０２を有する。具体的には、ハードウェア５０１は、図５に示すように、ホストＯＳ１０２に割り当てられる記憶領域５０２ａ（以下、ホストＯＳ用記憶領域と言う）、およびゲストＯＳ１０５に割り当てられる記憶領域５０２ｂ（以下、ゲストＯＳ用記憶領域と言う）を含む共有メモリ５０２を有する。
【００２３】
また、本実施形態では、ホストＯＳ１０２は、ホストＯＳ１０２とゲストＯＳ１０５間において通信可能とする仮想ブリッジを含む仮想マシン５０３を実現する。これにより、ホストＯＳ１０２とゲストＯＳ１０５とは、仮想マシン５０３が含む仮想ブリッジを介して通信可能となる。そして、コントローラプロセス部５０４は、制御データをホストＯＳ用記憶領域５０２ａに保存し、かつ当該仮想ブリッジを介してゲストプロセス群１０６と制御データを送受信する。また、ゲストプロセス群５０５は、制御データをゲストＯＳ用記憶領域５０２ｂに保存し、かつ当該仮想ブリッジを介してコントローラプロセス部５０４と制御データを送受信する。これにより、ホストＯＳ１０２とゲストＯＳ１０５間においても制御データを共有可能となる。
【００２４】
図６は、第２の実施形態にかかるコントローラにおけるホストＯＳとゲストＯＳ間における通信処理の一例を説明するための図である。図６において、ＬＡＮ０，１は、コントローラ５００が有するハードウェア５０１に含まれる物理的な入出力ポートを表している。本実施形態では、ホストＯＳ１０２は、仮想ブリッジＢ１，Ｂ２，Ｂ３、および仮想ＮＩＣ６０１〜６０６を含む仮想マシン５０３を実現する。仮想ブリッジＢ１，Ｂ２は、ホストＯＳ１０２およびゲストＯＳ１０５によって共用される。仮想ＮＩＣ６０１，６０２，６０３は、ホストＯＳ１０２に割り当てられる。仮想ＮＩＣ６０４，６０５，６０６は、ゲストＯＳ１０５に割り当てられる。
【００２５】
そして、ホストＯＳ１０２は、仮想ＮＩＣ６０１、仮想ブリッジＢ１、およびＬＡＮ０を介して、外部と通信可能である。または、ホストＯＳ１０２は、仮想ＮＩＣ６０２、仮想ブリッジＢ２、およびＬＡＮ１を介して、外部と通信可能である。一方、ゲストＯＳ１０５は、仮想ＮＩＣ６０４、仮想ブリッジＢ１、およびＬＡＮ０を介して、外部と通信可能である。または、ゲストＯＳ１０５は、仮想ＮＩＣ６０５、仮想ブリッジＢ２、およびＬＡＮ１を介して、外部と通信可能である。よって、ホストＯＳ１０２およびゲストＯＳ１０５は、仮想ブリッジＢ１，Ｂ２を介して接続されることにより、互いに通信可能である。
【００２６】
また、ホストＯＳ１０２およびゲストＯＳ１０５は、それぞれに割り当てられた仮想ＮＩＣ６０３，６０６を、仮想ブリッジＢ３を介して接続することによって、互いに通信可能としても良い。ホストＯＳ１０２およびゲストＯＳ１０５は、上述のいずれの通信方法を使用して通信しても良い。
【００２７】
すなわち、本実施形態では、ホストＯＳ１０２は、当該ホストＯＳ１０２に割り当てられる仮想ＮＩＣ６０１〜６０３（仮想的なネットワークカード）を用いて、仮想ブリッジＢ１，Ｂ２，Ｂ３を介してゲストＯＳ１０５を含む外部装置と通信可能である。また、ゲストＯＳ１０５は、当該ゲストＯＳ１０５に割り当てられる仮想ＮＩＣ６０４〜６０６（仮想的なネットワークカード）を用いて、仮想ブリッジＢ１，Ｂ２，Ｂ３を介してホストＯＳ１０２を含む外部装置と通信可能である。
【００２８】
ところで、ホストＯＳ１０２およびゲストＯＳ１０５による外部装置との通信に要するパラメータ（以下、通信パラメータ）も、保守性の観点から、ツール用ＰＣ２００によって管理する必要がある。ここで、ホストＯＳ１０２は、ツール用ＰＣ２００と通信可能であるため、通信パラメータを参照して、外部装置と通信可能である。しかし、ゲストＯＳ１０５は、ツール用ＰＣ２００と通信できない場合、通信パラメータを参照する仕組みが必要となる。
【００２９】
そこで、本実施形態では、コントローラプロセス部５０４は、ツール用ＰＣ２００から、通信パラメータを含むハードウェア割当データをダウンロードする。ゲスト初期化プロセス部１０３ｂは、ダウンロードしたハードウェア割当データが含む通信パラメータを、ゲストＯＳ１０５に割り当てられるハードウェア１０１が含むメモリ等に保存して、ゲストプロセス群１０６によって通信パラメータを参照可能とする。
【００３０】
図７は、第２の実施形態にかかるコントローラがダウンロードするハードウェア割当データが含む通信パラメータの一例を示す図である。図７に示すように、本実施形態では、通信パラメータには、伝送情報、仮想ネットワーク使用情報、ポート番号、ホストＯＳ１０２（コントローラ１００）に割り当てられたＩＰアドレス、ゲストＯＳ１０５に割り当てられたＩＰアドレス、サブネットマスク、スキャン周期、ホスト送信オフセット、ホスト送信データサイズ、ゲスト送信オフセット、およびゲスト送信データサイズを含む。本実施形態では、通信パラメータは、伝送情報および仮想ネットワーク使用情報を含んでいるが、少なくとも、ポート番号、ホストＯＳ１０２に割り当てられたＩＰアドレス、ゲストＯＳ１０５に割り当てられたＩＰアドレス、サブネットマスク、スキャン周期、ホスト送信オフセット、ホスト送信データサイズ、ゲスト送信オフセット、および、ゲスト送信データサイズを含んでいれば良い。
【００３１】
伝送情報は、ホストＯＳ１０２上で動作するコントローラプロセス部５０４とゲストＯＳ１０５上で動作するゲストプロセス群１０６間における制御データ（送受信、伝送）にて当該制御データを共有するか否かを示す。仮想ネットワーク使用情報は、伝送情報が伝送によって制御データを共有することを示している場合に、ホストＯＳ１０２上で動作するコントローラプロセス部５０４とゲストＯＳ１０５上で動作するゲストプロセス群１０６間において仮想ネットワークを用いて制御データを伝送するか否かを示す。ポート番号は、ホストＯＳ１０２およびゲストＯＳ１０５が通信に使用するポートの番号である。サブネットマスクは、ホストＯＳ１０２およびゲストＯＳ１０５それぞれのＩＰアドレスのサブネットマスクである。スキャン周期は、ホストＯＳ１０２上で動作するコントローラプロセス部５０４とゲストＯＳ１０５上で動作するゲストプロセス群１０６間において制御データを送受信する周期である。ホスト送信オフセットは、共有メモリ５０２のホストＯＳ用記憶領域５０２ａが有する記憶領域のうち、コントローラプロセス部５０４からゲストプロセス群１０６に送信する制御データが保存される記憶領域の先頭アドレス（開始アドレス）である。ホスト送信データサイズは、コントローラプロセス部５０４からゲストプロセス群１０６に送信する制御データのサイズである。ゲスト送信オフセットは、共有メモリ５０２のゲストＯＳ用記憶領域５０２ｂが有する記憶領域のうち、ゲストプロセス群１０６からコントローラプロセス部５０４に送信する制御データが保存される記憶領域の先頭アドレス（開始アドレス）である。ゲスト送信データサイズは、ゲストプロセス群１０６からコントローラプロセス部５０４に送信する制御データのサイズである。
【００３２】
ゲスト初期化プロセス部１０３ｂによってゲストプロセス群１０６に対して通信パラメータが参照可能となると、コントローラプロセス部５０４およびゲストプロセス群１０６は、参照可能となった通信パラメータに従って、ホストＯＳ１０２上で動作するコントローラプロセス部５０４とゲストＯＳ１０５上で動作するゲストプロセス群１０６間において制御データを送受信する第１共有処理（第１処理の一例、所謂、共有メモリ通信）を実行する。具体的には、コントローラプロセス部５０４は、制御データをホストＯＳ用記憶領域５０２ａに保存し、かつ通信パラメータに従って制御データをゲストプロセス群１０６との間で送受信する共有メモリ通信を実行する。また、ゲストプロセス群１０６は、制御データをゲストＯＳ用記憶領域５０２ｂに保存し、かつ通信パラメータに従ってコントローラプロセス部５０４との間で制御データを送受信する共有メモリ通信を実行する。これにより、外部装置をコントローラ１００に集約した場合にも、外部装置を仮想化した仮想マシン１０４とコントローラ１００間において制御データを共有できる。
【００３３】
図８は、第２の実施形態にかかる制御システムにおける制御データの共有処理の一例を説明するための図である。図８に示すように、コントローラプロセス部５０４は、ツール用ＰＣ２００からダウンロードされたハードウェア割当データを参照可能である。一方、ゲストプロセス群１０６が、コントローラプロセス部５０４と同様の機能（ハードウェア割当データをダウンロードする機能）を有する場合には、ハードウェア割当データを参照可能であるが、ゲストプロセス群１０６において実行される処理が、ＨＭＩにおいて実行される処理（ＨＭＩプロセス）である場合、ハードウェア割当データを参照することができない。この場合、ゲスト初期化プロセス部１０３ｂは、共有メモリ通信に先立って、ツール用ＰＣ２００からダウンロードされたハードウェア割当データが含む通信パラメータを、ゲストプロセス群１０６に通知する通信パラメータ解決通信を実行する。そして、ゲストプロセス群１０６は、通知された通信パラメータを、ゲストＯＳ１０５に割り当てられるハードウェア５０１が含むメモリ（例えば、ゲストＯＳ用記憶領域５０２ｂ）等に保存することによって、ゲストプロセス群１０６によって通信パラメータを参照可能とする。これにより、ゲストプロセス群１０６は、図８に示すように、通信パラメータを参照することが可能となり、ホストＯＳ１０２上で動作するコントローラプロセス部５０４とゲストＯＳ１０５上で動作するゲストプロセス群１０６間において制御データを送受信する共有メモリ通信を実行できる。
【００３４】
このように、第２の実施形態にかかるコントローラ１００によれば、外部装置をコントローラ１００に集約した場合にも、コントローラプロセス部５０４とゲストプロセス群１０６間において制御データを共有できる。
【００３５】
（第３の実施形態）
本実施形態は、ホストＯＳに割り当てられかつコントローラプロセス部が制御対象機器に送信する制御データを記憶するデバイスメモリと、ゲストプロセス群がデバイスメモリに対してアクセス可能とするドライバと、を備え、ゲストプロセス群は、ドライバを介してデバイスメモリに記憶される制御データにアクセスする例である。以下の説明では、第２の実施形態と同様の構成については説明を省略する。
【００３６】
図９は、第３の実施形態にかかる制御システムにおける制御データの共有処理の一例を説明するための図である。図９に示すように、コントローラ８００のハードウェア５０１は、ホストＯＳ１０２に割り当てられかつコントローラプロセス部５０４が制御対象機器に送信する制御データを記憶するＰＣＩデバイスメモリ（本実施形態では、ホストＯＳ用記憶領域５０２ａ）を有する。また、ホストＯＳ１０２は、ゲストプロセス群１０６（例えば、ＨＭＩにおいて実行されるＨＭＩプロセス）が、ＰＣＩデバイスメモリの一例であるホストＯＳ用記憶領域５０２ａに対してアクセス可能とするドライバ８０２（以下、デバイスドライバと言う）を備える。また、ゲストＯＳ１０５は、ゲストプロセス群１０６が、デバイスドライバ８０２を介して、ホストＯＳ用記憶領域５０２ａに対してアクセス可能とするドライバ８０３（以下、デバイスドライバと言う）を備える。そして、ゲストプロセス群１０６は、デバイスドライバ８０２，８０３を介してＰＣＩデバイスメモリの一例であるホストＯＳ用記憶領域５０２ａへ制御データを保存かつ参照する第２共有処理（第２処理の一例）を実行する。
【００３７】
これにより、第３の実施形態にかかるコントローラ８００によれば、コントローラプロセス部５０４とゲストプロセス群１０６間で制御データを送受信する必要がないので、ネットワーク負荷や通信用のリソースに関する既存機能に影響を及ぼすことなく、コントローラプロセス部５０４とゲストプロセス群１０６間での制御データの共有を実現できる。
【００３８】
（第４の実施形態）
本実施形態は、コントローラプロセス部およびゲストプロセス群は、通信パラメータが含む伝送情報に従って、コントローラプロセス部とゲストプロセス群との間で制御データを共有する方法を切り替える例である。以下の説明では、第２，３の実施形態と同様の構成については説明を省略する。
【００３９】
図１０は、第４の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。本実施形態にかかるコントローラ１０００が有するコントローラプロセス部１００１は、通信パラメータが含む伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する。そして、コントローラプロセス部１００１は、伝送にて制御データを共有すると判断した場合、第２の実施形態と同様にして、制御データをホストＯＳ用記憶領域５０２ａに保存し、かつゲストプロセス群１００２との間で制御データを送受信する共有メモリ通信を実行する。一方、コントローラプロセス部１００１は、伝送にて制御データを共有しないと判断した場合、ホストＯＳ用記憶領域５０２ａへの制御データの保存のみを行う。
【００４０】
また、本実施形態にかかるゲストプロセス群１００２は、通信パラメータが含む伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する。そして、ゲストプロセス群１００２は、伝送にて制御データを共有すると判断した場合、第２の実施形態と同様にして、制御データをゲストＯＳ用記憶領域５０２ｂに保存し、かつコントローラプロセス部１００１との間で制御データを送受信する共有メモリ通信を実行する。一方、ゲストプロセス群１００２は、伝送にて制御データを共有しないと判断した場合、デバイスドライバ８０２を介してホストＯＳ用記憶領域５０２ａへ制御データを保存しかつ当該制御データを参照する。
【００４１】
図１１は、第４の実施形態にかかる制御システムのコントローラプロセス部において制御データを共有する処理の流れの一例を示すフローチャートである。図１０に示すように、コントローラプロセス部１００１は、コントローラプロセス部１００１とゲストプロセス群１００２間において制御データを共有するか否かを判断する（ステップＳ９０１）。本実施形態では、コントローラプロセス部１００１とゲストプロセス群１００２間において制御データを共有するか否かは、予め設定されているものとする。
【００４２】
コントローラプロセス部１００１とゲストプロセス群１００２間において制御データを共有する場合（ステップＳ９０１：Ｙｅｓ）、コントローラプロセス部１００１は、ハードウェア割当データが含む通信パラメータが有する伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する（ステップＳ９０２）。制御データを伝送にて共有すると判断した場合（ステップＳ９０２：Ｎｏ）、コントローラプロセス部１００１は、制御データをホストＯＳ用記憶領域５０２ａに保存し、かつゲストプロセス群１００２との間で制御データを送受信する第１共有処理を実行する（ステップＳ９０３）。
【００４３】
一方、伝送にて制御データを共有しないと判断した場合（ステップＳ９０２：Ｙｅｓ）、コントローラプロセス部１００１は、デバイスドライバ８０２を有するか否かを判断する（ステップＳ９０４）。デバイスドライバ８０２を有する場合（ステップＳ９０４：Ｙｅｓ）、コントローラプロセス部１００１は、制御データをホストＯＳ用記憶領域５０２ａに保存する（ステップＳ９０５）。一方、コントローラ１０００がデバイスドライバ８０２を有しない場合（ステップＳ９０４：Ｎｏ）、コントローラプロセス部１００１は、ゲストプロセス群１００２との間で制御データを共有する処理を行わない。
【００４４】
図１２は、第４の実施形態にかかる制御システムのゲストプロセス群における制御データを共有する処理の流れの一例を示すフローチャートである。図１２に示すように、ゲストプロセス群１００２は、コントローラプロセス部１００１とゲストプロセス群１００２間において制御データを共有するか否かを判断する（ステップＳ１２０１）。
【００４５】
コントローラプロセス部１００１とゲストプロセス群１００２間において制御データを共有する場合（ステップＳ１２０１：Ｙｅｓ）、ゲストプロセス群１００２は、伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する（ステップＳ１２０２）。伝送にて制御データを共有すると判断した場合（ステップＳ１２０２：Ｎｏ）、ゲストプロセス群１００２は、制御データをゲストＯＳ用記憶領域５０２ｂに保存し、かつコントローラプロセス部１００１との間で制御データを送受信する第１共有処理を実行する（ステップＳ１２０３）。
【００４６】
一方、伝送にて制御データを共有しないと判断した場合（ステップＳ１２０２：Ｙｅｓ）、ゲストプロセス群１００２は、デバイスドライバ８０２を有するか否かを判断する（ステップＳ１２０４）。デバイスドライバ８０２を有しないと判断した場合（ステップＳ１２０４：Ｎｏ）、ゲストプロセス群１００２は、コントローラプロセス部１００１との間において制御データを共有する処理を行わない。一方、デバイスドライバ８０２を有すると判断した場合（ステップＳ１２０４：Ｙｅｓ）、ゲストプロセス群１００２は、デバイスドライバ８０２を介してホストＯＳ用記憶領域５０２ａに対して制御データを保存しかつ当該制御データを参照する第２共有処理を実行する（ステップＳ１２０５）。
【００４７】
ここで、第２共有処理を実行するためには、ＰＣＩデバイスメモリの一例であるホストＯＳ用記憶領域５０２ａに記憶される制御データにゲストプロセス群１００２がアクセスするためのデバイスドライバ８０２が必要となる。ホストＯＳ１０２およびゲストＯＳ１０５が、将来的にバージョンアップされる場合、その度に、デバイスドライバ８０２の検証または修正が必要となることが想定され、そのコストによって、デバイスドライバ８０２の修正が断念される可能性がある。そこで、本実施形態では、第１共有処理または第２共有処理を選択的に実行可能とすることで、ホストＯＳ１０２およびゲストＯＳ１０５のバージョンアップに伴いデバイスドライバ８０２を修正できない場合でも、第１共有処理によって、コントローラプロセス部１００１とゲストプロセス群１０６間での制御データの共有を実現することができる。
【００４８】
このように、第４の実施形態にかかるコントローラ８００によれば、デバイスドライバ８０２を介してＰＣＩデバイスメモリの一例であるホストＯＳ用記憶領域５０２ａにアクセス可能であるか否かに関わらず、コントローラプロセス部１００１とゲストプロセス群１０６間での制御データの共有を実現できる。
【００４９】
（第５の実施形態）
本実施形態は、ハードウェアは、ハードウェア割当データの候補を記憶する記憶部を有し、コントローラプロセス部が、外部装置から、ハードウェア割当データを取得し、記憶部に記憶されるハードウェア割当データの候補と、取得したハードウェア割当データとを比較して、取得したハードウェア割当データの異常（誤り）を検出し、その検出結果を通知する例である。以下の説明では、第１の実施形態と同様の構成については説明を省略する。
【００５０】
図１３は、第５の実施形態にかかる制御システムのコントローラにおけるハードウェア割当データの異常を検出する処理の一例を説明するための図である。本実施形態では、ホストプロセス群１０３のコントローラプロセス部１０３ａは、予め設定されるハードウェア割当データの候補（以下、出荷時データと言う）を、ハードウェア１０１が有するＨＤＤ（Hard  Disk  Drive）等の不揮発性の記憶部である出荷時データ記憶部１３０２に保存する。ここで、出荷時データは、ハードウェア割当データがとり得る値または条件（例えば、ホストＯＳ１０２に対して、少なくとも１つのＣＰＵのコアを割り付けること）を示す。そして、コントローラプロセス部１０３ａは、ツール用ＰＣ２００からハードウェア割当データをダウンロードした場合、当該ダウンロードしたハードウェア割当データと出荷時データとを比較する。そして、コントローラプロセス部１０３ａは、ダウンロードしたハードウェア割当データが、出荷時データと一致しない場合、当該ダウンロードしたハードウェア割当データの異常を検出する。例えば、コントローラプロセス部１０３ａは、実際のハードウェア１０１の構成とハードウェア割当データが示すハードウェアの構成とが異なる場合に、ハードウェア割当データの異常を検出する。
【００５１】
ハードウェア割当データに不正な値が誤って設定された場合に、コントローラプロセス部１０３ａおよびゲストプロセス群１０６が、そのハードウェア割当データを参照して制御処理を実行すると、制御システムの動作に深刻な影響を与える可能性がある。そのため、コントローラ１００の出荷時に、ハードウェア割当データがとり得る値を、出荷時データとしてコントローラ１００に対して予め保存しておく。そして、コントローラプロセス部１０３ａは、出荷時データを参照して、ダウンロードしたハードウェア割当データの異常を検出する。また、コントローラプロセス部１０３ａは、ダウンロードしたハードウェア割当データに異常が検出された場合には、ゲスト初期化プロセス部１０３ｂを起動させず、ゲストプロセス群１０６が、ハードウェア割当データに従ってゲストＯＳ１０５に割り当てられたハードウェア１０１を用いて、制御処理を実行しないようにする。
【００５２】
具体的には、コントローラプロセス部１０３ａは、ツール用ＰＣ２００から、ハードウェア割当データを取得（ダウンロード）した際、出荷時データと比較する。そして、コントローラプロセス部１０３ａは、ダウンロードしたハードウェア割当データが、出荷時データと一致しない場合、ハードウェア割当データのアラーム状態（異常または正常）を検出する。そして、コントローラプロセス部１０３ａは、アラーム状態の検出結果を、ハードウェア１０１が有するＨＤＤ（Hard  Disk  Drive）等の不揮発性の記憶部であるアラーム状態記憶部１３０３に保存しておく。これにより、コントローラ１００のユーザは、アラーム状態記憶部１３０３に記憶されるアラーム状態を確認して、ハードウェア割当データに異常がある場合には、ゲスト初期化プロセス部１０３ｂを起動させない。また、コントローラプロセス部１０３ａは、アラーム状態の検出結果を、ツール用ＰＣ２００に送信することで、制御システムの管理者に対して、当該アラーム状態の検出結果を通知しても良い。
【００５３】
このように、第５の実施形態にかかるコントローラ１００によれば、ツール用ＰＣ２００からダウンロードされたハードウェア割当データに異常がある場合に、当該ハードウェア割当データに従ってホストＯＳ１０２およびゲストＯＳ１０５に対して誤ってハードウェア１０１が割り当てられることを防止できるので、ハードウェア割当データが誤って設定されたことによって、制御システムが誤った動作を行うことを防止できる。
【００５４】
以上説明したとおり、第１から第５の実施形態によれば、ＨＭＩや他のコントローラ等の外部装置をコントローラ１００に集約した場合でも、外部装置のハードウェアの更新に応じて、仮想マシン１０４の設定を管理可能となる。
【００５５】
なお、本実施形態のコントローラ１００，８００で実行されるプログラムは、ＲＯＭ（Read  Only  Memory）等に予め組み込まれて提供される。本実施形態のコントローラ１００，８００で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００５６】
さらに、本実施形態のコントローラ１００，８００で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態のコントローラ１００，８００で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【００５７】
本実施形態のコントローラ１００，８００で実行されるプログラムは、上述した各部（ホストＯＳ１０２、ホストプロセス群１０３、仮想マシン１０４、ゲストＯＳ１０５、ゲストプロセス群１０６）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（Central  Processing  Unit）が上記ＲＯＭからプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、ホストＯＳ１０２、ホストプロセス群１０３、仮想マシン１０４、ゲストＯＳ１０５、ゲストプロセス群１０６が主記憶装置上に生成されるようになっている。
【００５８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。  
【図１】
0006776436.tif 000002
【図２】
0006776436.tif 000003
【図３】
0006776436.tif 000004
【図４】
0006776436.tif 000005
【図５】
0006776436.tif 000006
【図６】
0006776436.tif 000007
【図７】
0006776436.tif 000008
【図８】
0006776436.tif 000009
【図９】
0006776436.tif 000010
【図１０】
0006776436.tif 000011
【図１１】
0006776436.tif 000012
【図１２】
0006776436.tif 000013
【図１３】
0006776436.tif 000014