(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0007】
以下、添付の図面を用いて、本実施形態にかかる制御装置を適用した制御システムについて説明する。
【0008】
(第1の実施形態)
図1は、第1の実施形態にかかる制御システムの機能構成の一例を示す図である。
図1に示すように、本実施形態にかかる制御システムは、コントローラ100と、ツール用PC200と、を有する。そして、コントローラ100とツール用PC200とは、LAN(Local Area Network)等のネットワークにより互いに通信可能に接続されている。
【0009】
ツール用PC200は、ベンダまたはエンジニア等により用いられ、POU(Program Organization Unit)や後述するハードウェア割当データ(ツールデータ)等を記憶する。POUは、制御システム全体の処理を実行するためのプログラムを機能単位にモジュール化したプログラムである。
【0010】
コントローラ100には、プラント内のセンサ等から各種の検出結果が入力される。また、コントローラ100は、ツール用PC200において作成されたPOUがダウンロードされる。そして、コントローラ100は、当該コントローラ100内のタスク上でPOUを実行する。これにより、コントローラ100は、入力された検出結果に基づく演算を行い、その演算結果に基づいて、プラント内のバルブ等の制御対象機器を制御する。
【0011】
また、コントローラ100は、当該コントローラ100が有するリソース(ハードウェア)が論理分割され、コントローラ100で複数のOS(Operating System)を稼働させて、制御システムが有するHMI(Human Machine Interface)や他のコントローラ等、制御対象機器の制御に関わる外部装置を集約した制御装置の一例として機能する。HMIは、制御システムのオペレータが、リモートでコントローラ100において実行されるPOUの状態等を監視したり、コントローラ100内への変数の書き込みやPOUの実行の変更等の各種操作を行ったりする用途で用いられる。
【0012】
図2は、第1の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。
図2に示すように、コントローラ100は、ハードウェア101と、ホストOS102と、ホストプロセス群103と、仮想マシン(仮想化層)104と、ゲストOS105と、ゲストプロセス群106と、を有する。ハードウェア101は、CPU(Central Processing Unit)等のプロセッサ、ROM(Read Only Memory)やRAM(Random Access Memory)等のメモリ、ツール用PC200等との通信に用いるLANポート、USB(Universal Serial Bus)ポート、PCIスロット等である。本実施形態では、コントローラ100は、複数のCPUコア(例えば、4つのCPUコア)をハードウェア101として有し、当該CPUコア上でソフトウェアを実行するマルチコアプロセッサである。具体的には、コントローラ100は、複数のCPUコアのうちいずれかにより実行される1つのOS(ホストOS102)によって、互いに隔離された複数のコンテナ110,120を動作させる。その際、コントローラ100は、各コンテナを、異なるCPUコアによって実行する。本実施形態では、
図2に示すように、コントローラ100は、ホストOS102およびホストプロセス群103を含むコンテナ110と、仮想マシン104、ゲストOS105およびゲストプロセス群106を含むコンテナ120と、を異なるCPUコアによって実行する。
【0013】
ホストOS102は、コントローラ100において仮想化される外部装置(仮想マシン104)を実現するOSである。ホストプロセス群103は、ホストOS102上で動作するアプリケーションを有する。仮想マシン104は、ホストOS102上で実現される。本実施形態では、仮想マシン104は、HMIや他のコントローラ等の外部装置のハードウェアを仮想化したマシンである。ここで、仮想化とは、外部装置のハードウェアをエミュレートすることを含む。ゲストOS105は、仮想マシン104上で動作し、外部装置のプログラム(後述するゲストプロセス群106)を動作させるOSである。ゲストプロセス群106は、ゲストOS105によって動作し、後述するハードウェア割当データに従ってゲストOS105に割り当てられるハードウェア101を用いて、制御対象機器の制御に関わる処理(以下、制御処理と言う)を実行する。ここで、仮想マシン104がHMIを仮想化したマシンである場合、制御処理には、制御システムの監視や当該制御システムにおいて行われるプロセスのリモート操作に関わる処理が含まれる。また、仮想マシン104が他のコントローラを仮想化したマシンである場合、制御処理には、制御対象機器に対して制御データを送信する等して、当該制御対象機器を制御する処理が含まれる。
【0014】
本実施形態では、ホストプロセス群103は、コントローラプロセス部103aを有する。コントローラプロセス部103aは、ゲストOS105を介さずにホストOS102によって動作する。そして、コントローラプロセス部103aは、ツール用PC200からPOUがダウンロードされ、当該POUを実行する。また、コントローラプロセス部103aは、ツール用PC200(外部記憶装置の一例)からハードウェア割当データがダウンロードされ、当該ハードウェア割当データに従ってホストOS102に割り当てられたハードウェア101によって、制御対象機器の制御に関する制御処理を実行する。ここで、ハードウェア割当データは、ホストOS102およびゲストOS105それぞれに割り当てるハードウェア101を示すデータである。具体的には、コントローラプロセス部103aは、コントローラ100の電源が投入された場合に、ハードウェア割当データを有効化して、当該ハードウェア割当データが示すホストOS102に割り当てられたハードウェア101を用いて、制御対象機器を制御する。また、コントローラプロセス部103aは、ダウンロードされたハードウェア割当データを、ハードウェア101が有するHDD(Hard Disk Drive)等の不揮発性の記憶部であるハードウェア割当データ記憶部101aに保存する。
【0015】
ところで、制御システムにおけるエンジニアリングデータの管理上の観点から、ゲストOS105に割り当てるハードウェア101も、ハードウェア割当データに従って管理することが好ましい。そこで、本実施形態では、ホストプロセス群103は、
図2に示すように、コントローラプロセス部103aに加えて、ゲスト初期化プロセス部103bを有する。ゲスト初期化プロセス部103bは、コントローラ100の電源が投入された際、ハードウェア割当データを参照して、ゲストOS105にハードウェア101を割り当てるとともに、外部装置を仮想化(エミュレート、復元)した仮想マシン104をホストOS102上に設定する。さらに、ゲスト初期化プロセス部103bは、仮想マシン104上でゲストOS105を起動させる。これにより、ホストOS102に対するハードウェア101の設定(割当)と同様の方法で、仮想マシン104上で動作するゲストOS105に対してもハードウェア101を設定(割当)できるので、HMIや他のコントローラ等の外部装置をコントローラ100に集約した場合でも、ハードウェア101の更新に応じて、ゲストOS105に対するハードウェア101の設定(割当)を容易に管理可能となる。
【0016】
図3は、第1の実施形態にかかる制御装置がダウンロードするハードウェア割当データの一例を示す図である。
図3に示すように、ハードウェア割当データは、ホストOS102およびゲストOS105それぞれに対応付けて、ホストOS102およびゲストOS105それぞれのOSに割り当てるCPUコアのコア数(本実施形態では、4つのCPUコアのうち、ホストOS102およびゲストOS105それぞれに割り当てるCPUコアの数)、各OSに割り当てるメモリの容量、各OSに割り当てる内蔵LANポートの用途(「専用」、「共用」、または「−」)、各OSに割り当てる内蔵USBポートの用途(「専用」、「共用」、または「−」)、各OSに割り当てる拡張PCIスロット1,2の用途(「専用」、「共用」、または「−」)を表している。また、
図3において、各OSに割り当てる内蔵LANポート、内蔵USBポート、および拡張PCIスロット1,2の用途において、「専用」は1つのOSにのみ使用されることを示し、「共用」は複数のOSで使用されることを示し、「−」はいずれのOSによっても使用されないことを示す。
【0017】
コントローラプロセス部103aは、
図3に示すハードウェア割当データをダウンロードした場合、ホストOS102に対して割り当てられた、3つのCPUコア、4GBのメモリ、内蔵LANポート、および内蔵USBポートを用いて、制御処理を実行する。また、ゲスト初期化プロセス部103bは、
図3に示すハードウェア割当データをダウンロードした場合、1つのCPUコア、4GBのメモリ、内蔵USBポート、拡張PCIスロット1,2をゲストOS105に割り当てる。次いで、ホストOS102は、外部装置を仮想化した仮想マシン104を起動させる。さらに、ゲスト初期化プロセス部103bは、仮想マシン104上で、ゲストOS105を起動させる。そして、ゲストプロセス群106は、ゲストOS105に割り当てられた、1つのCPUコア、4GBのメモリ、内蔵USBポート、拡張PCIスロット1,2等のハードウェア101を用いて、制御処理を実行する。
【0018】
このように、第1の実施形態にかかるコントローラ100によれば、ホストOS102に対するハードウェア101の割り当てと同様の方法で、ゲストOS105に対してもハードウェア101を割り当てることができるので、HMIや他のコントローラ等の外部装置をコントローラ100に集約した場合でも、当該外部装置をコントローラ100において容易に復元でき、かつハードウェア101の更新に応じて、ゲストOS105に対するハードウェア101の割り当てを容易に管理可能となる。
【0019】
(第2の実施形態)
本実施形態は、コントローラと外部装置間において制御データを共有する処理を、コントローラプロセス部とゲストプロセス群間においても実現する例である。以下の説明では、第1の実施形態と同様の構成については説明を省略する。
【0020】
図4は、従来の制御システム内のコントローラ間において制御データを共有する処理の一例を説明するための図である。
図4に示すように、制御システム内のコントローラ100−1は、当該コントローラ100−1が有する共有メモリにおいて、当該コントローラ100−1に割り当てられた記憶領域(コントローラ100−1用エリア)に記憶された制御データを、LAN等のネットワークを介して、他のコントローラ100−2に対して定期的に送信する。ここで、制御データは、制御対象機器の制御に関するデータである。コントローラ100−2は、コントローラ100−1から制御データを受信すると、コントローラ100−2が有する共有メモリにおいて、コントローラ100−1に割り当てられた記憶領域(コントローラ100−1用エリア)に対して、受信した制御データを書き込む。これにより、制御システム全体において、制御データを共有している。
【0021】
また、
図4に示すように、制御システム内のコントローラ100−2は、当該コントローラ100−2が有する共有メモリにおいて、当該コントローラ100−2に割り当てられた記憶領域(コントローラ100−2用エリア)に記憶された制御データを、LAN等のネットワークを介して、他のコントローラ100−1に対して定期的に送信する。コントローラ100−1は、コントローラ100−2から制御データを受信すると、コントローラ100−1が有する共有メモリにおいて、コントローラ100−2に割り当てられた記憶領域(コントローラ100−2用エリア)に対して、受信した制御データを書き込む。これにより、制御システム全体において、制御データを共有している。
【0022】
図5は、第2の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。本実施形態では、制御対象機器の制御に関わる外部装置をコントローラ500に集約した場合に、コントローラプロセス部504とゲストプロセス群106間においても制御データを共有する処理を行う。よって、
図5に示すように、ハードウェア501は、ホストOS102およびゲストOS105それぞれに割り当てられ、かつホストOS102とゲストOS105間で共有する制御データを記憶する複数の記憶領域を含む共有メモリ502を有する。具体的には、ハードウェア501は、
図5に示すように、ホストOS102に割り当てられる記憶領域502a(以下、ホストOS用記憶領域と言う)、およびゲストOS105に割り当てられる記憶領域502b(以下、ゲストOS用記憶領域と言う)を含む共有メモリ502を有する。
【0023】
また、本実施形態では、ホストOS102は、ホストOS102とゲストOS105間において通信可能とする仮想ブリッジを含む仮想マシン503を実現する。これにより、ホストOS102とゲストOS105とは、仮想マシン503が含む仮想ブリッジを介して通信可能となる。そして、コントローラプロセス部504は、制御データをホストOS用記憶領域502aに保存し、かつ当該仮想ブリッジを介してゲストプロセス群106と制御データを送受信する。また、ゲストプロセス群505は、制御データをゲストOS用記憶領域502bに保存し、かつ当該仮想ブリッジを介してコントローラプロセス部504と制御データを送受信する。これにより、ホストOS102とゲストOS105間においても制御データを共有可能となる。
【0024】
図6は、第2の実施形態にかかるコントローラにおけるホストOSとゲストOS間における通信処理の一例を説明するための図である。
図6において、LAN0,1は、コントローラ500が有するハードウェア501に含まれる物理的な入出力ポートを表している。本実施形態では、ホストOS102は、仮想ブリッジB1,B2,B3、および仮想NIC601〜606を含む仮想マシン503を実現する。仮想ブリッジB1,B2は、ホストOS102およびゲストOS105によって共用される。仮想NIC601,602,603は、ホストOS102に割り当てられる。仮想NIC604,605,606は、ゲストOS105に割り当てられる。
【0025】
そして、ホストOS102は、仮想NIC601、仮想ブリッジB1、およびLAN0を介して、外部と通信可能である。または、ホストOS102は、仮想NIC602、仮想ブリッジB2、およびLAN1を介して、外部と通信可能である。一方、ゲストOS105は、仮想NIC604、仮想ブリッジB1、およびLAN0を介して、外部と通信可能である。または、ゲストOS105は、仮想NIC605、仮想ブリッジB2、およびLAN1を介して、外部と通信可能である。よって、ホストOS102およびゲストOS105は、仮想ブリッジB1,B2を介して接続されることにより、互いに通信可能である。
【0026】
また、ホストOS102およびゲストOS105は、それぞれに割り当てられた仮想NIC603,606を、仮想ブリッジB3を介して接続することによって、互いに通信可能としても良い。ホストOS102およびゲストOS105は、上述のいずれの通信方法を使用して通信しても良い。
【0027】
すなわち、本実施形態では、ホストOS102は、当該ホストOS102に割り当てられる仮想NIC601〜603(仮想的なネットワークカード)を用いて、仮想ブリッジB1,B2,B3を介してゲストOS105を含む外部装置と通信可能である。また、ゲストOS105は、当該ゲストOS105に割り当てられる仮想NIC604〜606(仮想的なネットワークカード)を用いて、仮想ブリッジB1,B2,B3を介してホストOS102を含む外部装置と通信可能である。
【0028】
ところで、ホストOS102およびゲストOS105による外部装置との通信に要するパラメータ(以下、通信パラメータ)も、保守性の観点から、ツール用PC200によって管理する必要がある。ここで、ホストOS102は、ツール用PC200と通信可能であるため、通信パラメータを参照して、外部装置と通信可能である。しかし、ゲストOS105は、ツール用PC200と通信できない場合、通信パラメータを参照する仕組みが必要となる。
【0029】
そこで、本実施形態では、コントローラプロセス部504は、ツール用PC200から、通信パラメータを含むハードウェア割当データをダウンロードする。ゲスト初期化プロセス部103bは、ダウンロードしたハードウェア割当データが含む通信パラメータを、ゲストOS105に割り当てられるハードウェア101が含むメモリ等に保存して、ゲストプロセス群106によって通信パラメータを参照可能とする。
【0030】
図7は、第2の実施形態にかかるコントローラがダウンロードするハードウェア割当データが含む通信パラメータの一例を示す図である。
図7に示すように、本実施形態では、通信パラメータには、伝送情報、仮想ネットワーク使用情報、ポート番号、ホストOS102(コントローラ100)に割り当てられたIPアドレス、ゲストOS105に割り当てられたIPアドレス、サブネットマスク、スキャン周期、ホスト送信オフセット、ホスト送信データサイズ、ゲスト送信オフセット、およびゲスト送信データサイズを含む。本実施形態では、通信パラメータは、伝送情報および仮想ネットワーク使用情報を含んでいるが、少なくとも、ポート番号、ホストOS102に割り当てられたIPアドレス、ゲストOS105に割り当てられたIPアドレス、サブネットマスク、スキャン周期、ホスト送信オフセット、ホスト送信データサイズ、ゲスト送信オフセット、および、ゲスト送信データサイズを含んでいれば良い。
【0031】
伝送情報は、ホストOS102上で動作するコントローラプロセス部504とゲストOS105上で動作するゲストプロセス群106間における制御データ(送受信、伝送)にて当該制御データを共有するか否かを示す。仮想ネットワーク使用情報は、伝送情報が伝送によって制御データを共有することを示している場合に、ホストOS102上で動作するコントローラプロセス部504とゲストOS105上で動作するゲストプロセス群106間において仮想ネットワークを用いて制御データを伝送するか否かを示す。ポート番号は、ホストOS102およびゲストOS105が通信に使用するポートの番号である。サブネットマスクは、ホストOS102およびゲストOS105それぞれのIPアドレスのサブネットマスクである。スキャン周期は、ホストOS102上で動作するコントローラプロセス部504とゲストOS105上で動作するゲストプロセス群106間において制御データを送受信する周期である。ホスト送信オフセットは、共有メモリ502のホストOS用記憶領域502aが有する記憶領域のうち、コントローラプロセス部504からゲストプロセス群106に送信する制御データが保存される記憶領域の先頭アドレス(開始アドレス)である。ホスト送信データサイズは、コントローラプロセス部504からゲストプロセス群106に送信する制御データのサイズである。ゲスト送信オフセットは、共有メモリ502のゲストOS用記憶領域502bが有する記憶領域のうち、ゲストプロセス群106からコントローラプロセス部504に送信する制御データが保存される記憶領域の先頭アドレス(開始アドレス)である。ゲスト送信データサイズは、ゲストプロセス群106からコントローラプロセス部504に送信する制御データのサイズである。
【0032】
ゲスト初期化プロセス部103bによってゲストプロセス群106に対して通信パラメータが参照可能となると、コントローラプロセス部504およびゲストプロセス群106は、参照可能となった通信パラメータに従って、ホストOS102上で動作するコントローラプロセス部504とゲストOS105上で動作するゲストプロセス群106間において制御データを送受信する第1共有処理(第1処理の一例、所謂、共有メモリ通信)を実行する。具体的には、コントローラプロセス部504は、制御データをホストOS用記憶領域502aに保存し、かつ通信パラメータに従って制御データをゲストプロセス群106との間で送受信する共有メモリ通信を実行する。また、ゲストプロセス群106は、制御データをゲストOS用記憶領域502bに保存し、かつ通信パラメータに従ってコントローラプロセス部504との間で制御データを送受信する共有メモリ通信を実行する。これにより、外部装置をコントローラ100に集約した場合にも、外部装置を仮想化した仮想マシン104とコントローラ100間において制御データを共有できる。
【0033】
図8は、第2の実施形態にかかる制御システムにおける制御データの共有処理の一例を説明するための図である。
図8に示すように、コントローラプロセス部504は、ツール用PC200からダウンロードされたハードウェア割当データを参照可能である。一方、ゲストプロセス群106が、コントローラプロセス部504と同様の機能(ハードウェア割当データをダウンロードする機能)を有する場合には、ハードウェア割当データを参照可能であるが、ゲストプロセス群106において実行される処理が、HMIにおいて実行される処理(HMIプロセス)である場合、ハードウェア割当データを参照することができない。この場合、ゲスト初期化プロセス部103bは、共有メモリ通信に先立って、ツール用PC200からダウンロードされたハードウェア割当データが含む通信パラメータを、ゲストプロセス群106に通知する通信パラメータ解決通信を実行する。そして、ゲストプロセス群106は、通知された通信パラメータを、ゲストOS105に割り当てられるハードウェア501が含むメモリ(例えば、ゲストOS用記憶領域502b)等に保存することによって、ゲストプロセス群106によって通信パラメータを参照可能とする。これにより、ゲストプロセス群106は、
図8に示すように、通信パラメータを参照することが可能となり、ホストOS102上で動作するコントローラプロセス部504とゲストOS105上で動作するゲストプロセス群106間において制御データを送受信する共有メモリ通信を実行できる。
【0034】
このように、第2の実施形態にかかるコントローラ100によれば、外部装置をコントローラ100に集約した場合にも、コントローラプロセス部504とゲストプロセス群106間において制御データを共有できる。
【0035】
(第3の実施形態)
本実施形態は、ホストOSに割り当てられかつコントローラプロセス部が制御対象機器に送信する制御データを記憶するデバイスメモリと、ゲストプロセス群がデバイスメモリに対してアクセス可能とするドライバと、を備え、ゲストプロセス群は、ドライバを介してデバイスメモリに記憶される制御データにアクセスする例である。以下の説明では、第2の実施形態と同様の構成については説明を省略する。
【0036】
図9は、第3の実施形態にかかる制御システムにおける制御データの共有処理の一例を説明するための図である。
図9に示すように、コントローラ800のハードウェア501は、ホストOS102に割り当てられかつコントローラプロセス部504が制御対象機器に送信する制御データを記憶するPCIデバイスメモリ(本実施形態では、ホストOS用記憶領域502a)を有する。また、ホストOS102は、ゲストプロセス群106(例えば、HMIにおいて実行されるHMIプロセス)が、PCIデバイスメモリの一例であるホストOS用記憶領域502aに対してアクセス可能とするドライバ802(以下、デバイスドライバと言う)を備える。また、ゲストOS105は、ゲストプロセス群106が、デバイスドライバ802を介して、ホストOS用記憶領域502aに対してアクセス可能とするドライバ803(以下、デバイスドライバと言う)を備える。そして、ゲストプロセス群106は、デバイスドライバ802,803を介してPCIデバイスメモリの一例であるホストOS用記憶領域502aへ制御データを保存かつ参照する第2共有処理(第2処理の一例)を実行する。
【0037】
これにより、第3の実施形態にかかるコントローラ800によれば、コントローラプロセス部504とゲストプロセス群106間で制御データを送受信する必要がないので、ネットワーク負荷や通信用のリソースに関する既存機能に影響を及ぼすことなく、コントローラプロセス部504とゲストプロセス群106間での制御データの共有を実現できる。
【0038】
(第4の実施形態)
本実施形態は、コントローラプロセス部およびゲストプロセス群は、通信パラメータが含む伝送情報に従って、コントローラプロセス部とゲストプロセス群との間で制御データを共有する方法を切り替える例である。以下の説明では、第2,3の実施形態と同様の構成については説明を省略する。
【0039】
図10は、第4の実施形態にかかる制御システムが有するコントローラの機能構成の一例を示す図である。本実施形態にかかるコントローラ1000が有するコントローラプロセス部1001は、通信パラメータが含む伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する。そして、コントローラプロセス部1001は、伝送にて制御データを共有すると判断した場合、第2の実施形態と同様にして、制御データをホストOS用記憶領域502aに保存し、かつゲストプロセス群1002との間で制御データを送受信する共有メモリ通信を実行する。一方、コントローラプロセス部1001は、伝送にて制御データを共有しないと判断した場合、ホストOS用記憶領域502aへの制御データの保存のみを行う。
【0040】
また、本実施形態にかかるゲストプロセス群1002は、通信パラメータが含む伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する。そして、ゲストプロセス群1002は、伝送にて制御データを共有すると判断した場合、第2の実施形態と同様にして、制御データをゲストOS用記憶領域502bに保存し、かつコントローラプロセス部1001との間で制御データを送受信する共有メモリ通信を実行する。一方、ゲストプロセス群1002は、伝送にて制御データを共有しないと判断した場合、デバイスドライバ802を介してホストOS用記憶領域502aへ制御データを保存しかつ当該制御データを参照する。
【0041】
図11は、第4の実施形態にかかる制御システムのコントローラプロセス部において制御データを共有する処理の流れの一例を示すフローチャートである。
図10に示すように、コントローラプロセス部1001は、コントローラプロセス部1001とゲストプロセス群1002間において制御データを共有するか否かを判断する(ステップS901)。本実施形態では、コントローラプロセス部1001とゲストプロセス群1002間において制御データを共有するか否かは、予め設定されているものとする。
【0042】
コントローラプロセス部1001とゲストプロセス群1002間において制御データを共有する場合(ステップS901:Yes)、コントローラプロセス部1001は、ハードウェア割当データが含む通信パラメータが有する伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する(ステップS902)。制御データを伝送にて共有すると判断した場合(ステップS902:No)、コントローラプロセス部1001は、制御データをホストOS用記憶領域502aに保存し、かつゲストプロセス群1002との間で制御データを送受信する第1共有処理を実行する(ステップS903)。
【0043】
一方、伝送にて制御データを共有しないと判断した場合(ステップS902:Yes)、コントローラプロセス部1001は、デバイスドライバ802を有するか否かを判断する(ステップS904)。デバイスドライバ802を有する場合(ステップS904:Yes)、コントローラプロセス部1001は、制御データをホストOS用記憶領域502aに保存する(ステップS905)。一方、コントローラ1000がデバイスドライバ802を有しない場合(ステップS904:No)、コントローラプロセス部1001は、ゲストプロセス群1002との間で制御データを共有する処理を行わない。
【0044】
図12は、第4の実施形態にかかる制御システムのゲストプロセス群における制御データを共有する処理の流れの一例を示すフローチャートである。
図12に示すように、ゲストプロセス群1002は、コントローラプロセス部1001とゲストプロセス群1002間において制御データを共有するか否かを判断する(ステップS1201)。
【0045】
コントローラプロセス部1001とゲストプロセス群1002間において制御データを共有する場合(ステップS1201:Yes)、ゲストプロセス群1002は、伝送情報に基づいて、伝送にて制御データを共有するか否かを判断する(ステップS1202)。伝送にて制御データを共有すると判断した場合(ステップS1202:No)、ゲストプロセス群1002は、制御データをゲストOS用記憶領域502bに保存し、かつコントローラプロセス部1001との間で制御データを送受信する第1共有処理を実行する(ステップS1203)。
【0046】
一方、伝送にて制御データを共有しないと判断した場合(ステップS1202:Yes)、ゲストプロセス群1002は、デバイスドライバ802を有するか否かを判断する(ステップS1204)。デバイスドライバ802を有しないと判断した場合(ステップS1204:No)、ゲストプロセス群1002は、コントローラプロセス部1001との間において制御データを共有する処理を行わない。一方、デバイスドライバ802を有すると判断した場合(ステップS1204:Yes)、ゲストプロセス群1002は、デバイスドライバ802を介してホストOS用記憶領域502aに対して制御データを保存しかつ当該制御データを参照する第2共有処理を実行する(ステップS1205)。
【0047】
ここで、第2共有処理を実行するためには、PCIデバイスメモリの一例であるホストOS用記憶領域502aに記憶される制御データにゲストプロセス群1002がアクセスするためのデバイスドライバ802が必要となる。ホストOS102およびゲストOS105が、将来的にバージョンアップされる場合、その度に、デバイスドライバ802の検証または修正が必要となることが想定され、そのコストによって、デバイスドライバ802の修正が断念される可能性がある。そこで、本実施形態では、第1共有処理または第2共有処理を選択的に実行可能とすることで、ホストOS102およびゲストOS105のバージョンアップに伴いデバイスドライバ802を修正できない場合でも、第1共有処理によって、コントローラプロセス部1001とゲストプロセス群106間での制御データの共有を実現することができる。
【0048】
このように、第4の実施形態にかかるコントローラ800によれば、デバイスドライバ802を介してPCIデバイスメモリの一例であるホストOS用記憶領域502aにアクセス可能であるか否かに関わらず、コントローラプロセス部1001とゲストプロセス群106間での制御データの共有を実現できる。
【0049】
(第5の実施形態)
本実施形態は、ハードウェアは、ハードウェア割当データの候補を記憶する記憶部を有し、コントローラプロセス部が、外部装置から、ハードウェア割当データを取得し、記憶部に記憶されるハードウェア割当データの候補と、取得したハードウェア割当データとを比較して、取得したハードウェア割当データの異常(誤り)を検出し、その検出結果を通知する例である。以下の説明では、第1の実施形態と同様の構成については説明を省略する。
【0050】
図13は、第5の実施形態にかかる制御システムのコントローラにおけるハードウェア割当データの異常を検出する処理の一例を説明するための図である。本実施形態では、ホストプロセス群103のコントローラプロセス部103aは、予め設定されるハードウェア割当データの候補(以下、出荷時データと言う)を、ハードウェア101が有するHDD(Hard Disk Drive)等の不揮発性の記憶部である出荷時データ記憶部1302に保存する。ここで、出荷時データは、ハードウェア割当データがとり得る値または条件(例えば、ホストOS102に対して、少なくとも1つのCPUのコアを割り付けること)を示す。そして、コントローラプロセス部103aは、ツール用PC200からハードウェア割当データをダウンロードした場合、当該ダウンロードしたハードウェア割当データと出荷時データとを比較する。そして、コントローラプロセス部103aは、ダウンロードしたハードウェア割当データが、出荷時データと一致しない場合、当該ダウンロードしたハードウェア割当データの異常を検出する。例えば、コントローラプロセス部103aは、実際のハードウェア101の構成とハードウェア割当データが示すハードウェアの構成とが異なる場合に、ハードウェア割当データの異常を検出する。
【0051】
ハードウェア割当データに不正な値が誤って設定された場合に、コントローラプロセス部103aおよびゲストプロセス群106が、そのハードウェア割当データを参照して制御処理を実行すると、制御システムの動作に深刻な影響を与える可能性がある。そのため、コントローラ100の出荷時に、ハードウェア割当データがとり得る値を、出荷時データとしてコントローラ100に対して予め保存しておく。そして、コントローラプロセス部103aは、出荷時データを参照して、ダウンロードしたハードウェア割当データの異常を検出する。また、コントローラプロセス部103aは、ダウンロードしたハードウェア割当データに異常が検出された場合には、ゲスト初期化プロセス部103bを起動させず、ゲストプロセス群106が、ハードウェア割当データに従ってゲストOS105に割り当てられたハードウェア101を用いて、制御処理を実行しないようにする。
【0052】
具体的には、コントローラプロセス部103aは、ツール用PC200から、ハードウェア割当データを取得(ダウンロード)した際、出荷時データと比較する。そして、コントローラプロセス部103aは、ダウンロードしたハードウェア割当データが、出荷時データと一致しない場合、ハードウェア割当データのアラーム状態(異常または正常)を検出する。そして、コントローラプロセス部103aは、アラーム状態の検出結果を、ハードウェア101が有するHDD(Hard Disk Drive)等の不揮発性の記憶部であるアラーム状態記憶部1303に保存しておく。これにより、コントローラ100のユーザは、アラーム状態記憶部1303に記憶されるアラーム状態を確認して、ハードウェア割当データに異常がある場合には、ゲスト初期化プロセス部103bを起動させない。また、コントローラプロセス部103aは、アラーム状態の検出結果を、ツール用PC200に送信することで、制御システムの管理者に対して、当該アラーム状態の検出結果を通知しても良い。
【0053】
このように、第5の実施形態にかかるコントローラ100によれば、ツール用PC200からダウンロードされたハードウェア割当データに異常がある場合に、当該ハードウェア割当データに従ってホストOS102およびゲストOS105に対して誤ってハードウェア101が割り当てられることを防止できるので、ハードウェア割当データが誤って設定されたことによって、制御システムが誤った動作を行うことを防止できる。
【0054】
以上説明したとおり、第1から第5の実施形態によれば、HMIや他のコントローラ等の外部装置をコントローラ100に集約した場合でも、外部装置のハードウェアの更新に応じて、仮想マシン104の設定を管理可能となる。
【0055】
なお、本実施形態のコントローラ100,800で実行されるプログラムは、ROM(Read Only Memory)等に予め組み込まれて提供される。本実施形態のコントローラ100,800で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【0056】
さらに、本実施形態のコントローラ100,800で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態のコントローラ100,800で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【0057】
本実施形態のコントローラ100,800で実行されるプログラムは、上述した各部(ホストOS102、ホストプロセス群103、仮想マシン104、ゲストOS105、ゲストプロセス群106)を含むモジュール構成となっており、実際のハードウェアとしてはCPU(Central Processing Unit)が上記ROMからプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、ホストOS102、ホストプロセス群103、仮想マシン104、ゲストOS105、ゲストプロセス群106が主記憶装置上に生成されるようになっている。
【0058】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。