(57)【要約】【課題】ファンクションブロックダイアグラムを複数のＣＰＵコアで効率的に実行することが可能なプラント制御装置、プラント制御プログラム、およびプラント制御方法を提供する。【解決手段】実施形態に係るプラント制御装置は、複数のＣＰＵコアを有するプラント制御装置であって、ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する並列処理グループ作成部と、前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測するテスト演算部と、前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる並列処理グループ割当て部とを備えることを特徴とする。【選択図】図２
2015210728.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコアを有するプラント制御装置であって、
ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する並列処理グループ作成部と、
前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測するテスト演算部と、
前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる並列処理グループ割当て部と、
を備えることを特徴とするプラント制御装置。
【請求項２】
前記並列処理グループ作成部は、前記ファンクションブロックダイアグラムに含まれるファンクションブロックごとに、当該ファンクションブロックによりアクセスされる出力アドレスが他のファンクションブロックによりアクセスされる入力アドレスと同じではないことを確認することにより、前記ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割することを特徴とする請求項１に記載のプラント制御装置。
【請求項３】
前記並列処理グループ割当て部は、前記各ＣＰＵコアにおける演算時間の平均値が最小となり、かつ前記各ＣＰＵコアにおける演算時間の標準偏差が最小となるように、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てることを特徴とする請求項１または２に記載のプラント制御装置。
【請求項４】
前記並列処理グループ割当て部は、
前記各ＣＰＵコアにおける前記実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる第１の割り当て処理を行い、
前記複数のＣＰＵコアのうちの第１のＣＰＵコアから、前記第１のＣＰＵコアよりも演算時間が短い第２のＣＰＵコアに、前記第１のＣＰＵコアに割り当てられた並列処理グループのうち少なくともいずれか一つを移動する第２の割り当て処理を行うことを特徴とする請求項３に記載のプラント制御装置。
【請求項５】
前記並列処理グループ作成部は、前記各並列処理グループが、入力データを入力し且つ独立して実行可能な入力処理タスク、および／または、出力データを出力し且つ独立して実行可能な出力処理タスクを含むように、前記ファンクションブロックダイアグラムを分割し、
前記入力処理タスクおよび／または前記出力処理タスクの実行時間を見積もる入出力時間見積部をさらに備え、
前記並列処理グループ割当て部は、前記テスト演算部により計測された実行時間、および前記入出力時間見積部により見積もられた実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てることを特徴とする請求項１〜４のいずれかに記載のプラント制御装置。  
【請求項６】
複数のＣＰＵコアを有するプラント制御装置のコンピュータを、
ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する並列処理グループ作成手段、
前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測するテスト演算手段、および
前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる並列処理グループ割当て手段
として機能させるためのプラント制御プログラム。
【請求項７】
複数のＣＰＵコアを有するプラント制御装置の制御方法であって、
ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成し、
前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測し、
前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる、
ことを特徴とするプラント制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、プラント制御装置、プラント制御プログラム、およびプラント制御方法に関する。
【背景技術】
【０００２】
発電所や製造工場等のプラントを制御するプラント制御システムは、一般に、常用系と待機系からなる一組のプラント制御装置（計装制御装置とも呼ばれる。）を有している。この一組のプラント制御装置はそれぞれ、複数のＰＩＯ（プロセスＩ／Ｏ）入力値を外部から取得して所定の演算を行い、演算結果をＰＩＯ出力値として外部に出力する。
【０００３】
上記のプラント制御装置は、オペレータ等により作成されたプログラムを記憶し、当該プログラムを実行することによりＰＩＯ入力値からＰＩＯ出力値を得る。プラント制御装置のプログラムは、ファンクションブロックダイアグラムにより表現される。ファンクションブロックダイアグラムは、論理回路を視覚的な図で表したものである。ファンクションブロックダイアグラムは、単一のタスクで動作することを前提に作成され、マイクロプログラム方式で実行される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−８４１６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、複数のＣＰＵコアを有するマルチコア型のコンピュータが、パーソナルコンピュータを含めて普及している。前述のようにファンクションブロックダイアグラムは単一のタスクで動作することを前提に作成されているため、マルチコア型のコンピュータを上記のプラント制御装置に適用しても、単一のＣＰＵコアしかプログラムの実行に利用されず、マルチコア型のコンピュータの性能(スループット)を十分に引き出すことはできないという課題があった。
【０００６】
本発明が解決しようとする課題は、ファンクションブロックダイアグラムを複数のＣＰＵコアで効率的に実行することが可能なプラント制御装置、プラント制御プログラム、およびプラント制御方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態に係るプラント制御装置は、複数のＣＰＵコアを有するプラント制御装置であって、ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する並列処理グループ作成部と、前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測するテスト演算部と、前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる並列処理グループ割当て部とを備えることを特徴とする。
【０００８】
また、実施形態に係るプラント制御プログラムは、複数のＣＰＵコアを有するプラント制御装置のコンピュータを、ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する並列処理グループ作成手段、前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測するテスト演算手段、および、前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てる並列処理グループ割当て手段として機能させる。
【０００９】
また、実施形態に係るプラント制御方法は、複数のＣＰＵコアを有するプラント制御装置の制御方法であって、ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成し、前記複数の並列処理グループの各々を前記複数のＣＰＵコアの少なくともいずれか一つでテスト実行し、前記各並列処理グループの実行時間をそれぞれ計測し、前記計測された実行時間に基づいて、前記複数の並列処理グループを前記複数のＣＰＵコアに割り当てることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、ファンクションブロックダイアグラムを複数のＣＰＵコアで効率的に実行することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態に係るプラント制御装置１，２を含むプラント制御システム１００の概略的な構成図である。
【図２】本発明の第１の実施形態に係るプラント制御装置１の概略的な構成図である。
【図３】プラント制御装置１の動作を説明するためのフローチャートである。
【図４】並列処理グループを作成する際に用いるテーブルの一例である。
【図５】並列処理グループＡおよびＢに分割されたファンクションブロックダイアグラムの一例である。
【図６】作成された並列処理グループＡ〜Ｅの、ＣＰＵ＿ＡおよびＣＰＵ＿Ｂの各々における実行時間の計測結果を示す図である。
【図７】第１の割り当て処理後における、並列処理グループＡ〜Ｅの割り当て例を示す図である。
【図８】第２の割り当て処理後における、並列処理グループＡ〜Ｅの割り当て例を示す図である。
【図９】本発明の第２の実施形態に係るプラント制御装置１Ａの概略的な構成図である。
【図１０】プラント制御装置１Ａの動作を説明するためのフローチャートである。
【図１１】並列処理グループＣおよびＤに分割されたファンクションブロックダイアグラムの一例である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態に係るプラント制御装置について図面を参照しながら説明する。なお、各図において同等の機能を有する構成要素には同一の符号を付し、同一符号の構成要素の詳しい説明は繰り返さない。
【００１３】
まず、本発明の実施形態に係るプラント制御装置について説明する前に、当該プラント制御装置を含むプラント制御システムの一例について、図１を参照して説明する。図１は、本発明の実施形態に係るプラント制御装置１，２を含むプラント制御システム１００の概略的な構成を示している。
【００１４】
図１に示すように、プラント制御システム１００は、プラント制御装置１と、プラント制御装置２と、入出力装置３と、エンジニアリング装置４とを備えている。
【００１５】
プラント制御装置１は常用系の制御装置であり、プラント制御装置２は待機系の制御装置である。プラント制御装置１，２は、入出力装置３およびエンジニアリング装置４に通信可能に接続されている。常用系のプラント制御装置１と待機系のプラント制御装置２は、互いに通信可能に接続されている。なお、プラント制御システム１００の構成要素間の通信は、例えばＴＣＰ／ＩＰの有線通信により行われるが、特定のプロトコルや伝送媒体に限られるものではない。
【００１６】
プラント制御装置１，２は、複数のＣＰＵコアを有するマルチコア型のコンピュータを有する。例えば、プラント制御装置１，２は、マルチコアのＰＣ型コントローラとして構成される。
【００１７】
エンジニアリング装置４は、プラント制御装置１，２の制御対象であり、例えば、発電所の発電機、各種製品の製造ラインの装置やベルトコンベヤ等である。
【００１８】
プラント制御装置１，２は、入出力装置３からＰＩＯ入力値を取得し、ＰＩＯ入力値に基づいて所定の演算を行う。演算結果のＰＩＯ出力値は、プラント制御装置１，２に接続された全ての装置（図１の例では入出力装置３およびエンジニアリング装置４）に対して出力される。
【００１９】
より詳しくは、ＰＩＯ出力値は所定のデータフレームに載せて出力される。当該データフレームには、常用系のプラント制御装置１が出力したものか、待機系のプラント制御装置２が出力したものかを示すフラグが設けられている。これにより、データフレームを受信した入出力装置３およびエンジニアリング装置４は、待機系のデータを破棄し、常用系のデータのみを利用することが可能である。
【００２０】
なお、プラント制御システム１００は、プラント制御装置１，２に通信可能に接続されたＨＭＩ端末（図示せず）をさらに備えてもよい。このＨＭＩ端末は、各種警報や制御パラメータ値等の、ＰＩＯ出力値から得られる情報を表示する。
【００２１】
（第１の実施形態）
第１の実施形態に係るプラント制御装置１について説明する。なお、以下に説明するプラント制御装置の構成は、待機系のプラント制御装置２についても同じである。
【００２２】
プラント制御装置１は、図２に示すように、制御部１０と、レジスタ部２０と、ＰＩＯ入力部３１と、ＰＩＯ出力部３２とを備えている。
【００２３】
まず、レジスタ部２０、ＰＩＯ入力部３１、およびＰＩＯ出力部３２について説明する。
【００２４】
レジスタ部２０は、テスト演算用レジスタ２１および演算用レジスタ２２を有している。テスト演算用レジスタ２１は、テスト演算において使用されるレジスタである。詳細は後ほど説明するが、テスト演算では、ダミーのＰＩＯ入力値（テストデータ）を用いて、並列処理グループの実行時間を計測する。一方、演算用レジスタ２２は、入出力装置３から取得したＰＩＯ入力値を用いて実際の演算を行う際に使用されるレジスタである。
【００２５】
ＰＩＯ入力部３１はＰＩＯ入力値を取得し、ＰＩＯ出力部３２はＰＩＯ出力値を出力する。より詳しくは、ＰＩＯ入力部３１は、前述の入出力装置３からＰＩＯ入力値を取得し、取得したＰＩＯ入力値を演算用レジスタ２２に格納する。ＰＩＯ出力部３２は、制御部１０により演算用レジスタ２２に書き込まれた演算結果であるＰＩＯ出力値（出力データ）を読み出し、読み出したＰＩＯ出力値を外部の装置（入出力装置３、エンジニアリング装置４等）に出力する。
【００２６】
次に、プラント制御装置１の制御部１０について詳しく説明する。
【００２７】
制御部１０は、図２に示すように、コア検出部１１と、並列処理グループ作成部１２と、テスト演算部１３と、並列処理グループ割当て部１４と、演算部１５とを有する。
【００２８】
コア検出部１１は、プラント制御装置１に実装された複数のＣＰＵコアを検出する。なお、コア検出部１１は、プラント制御装置１に実装されたＣＰＵコアの数を検出する他、各ＣＰＵコアの特性（浮動小数点演算ユニットの有無など）を検出してもよい。
【００２９】
並列処理グループ作成部１２は、ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する。ファンクションブロックダイアグラムの分割方法については、後ほど図３〜図５を参照して詳しく説明する。
【００３０】
テスト演算部１３は、テストデータを用いて、並列処理グループ作成部１２によって作成された並列処理グループの各々を各ＣＰＵコアでテスト実行（負荷検査）し、各並列処理グループの各ＣＰＵコアでの実行時間をそれぞれ計測する。なお、テストデータは、テスト演算用レジスタ２１に格納されたダミーのＰＩＯ入力値である。
【００３１】
並列処理グループ割当て部１４は、テスト演算部１３によって計測された実行時間に基づいて、並列処理グループ作成部１２によって作成された複数の並列処理グループを、プラント制御装置１の複数のＣＰＵコアに割り当てる。
【００３２】
なお、好ましくは、並列処理グループ割当て部１４は、各ＣＰＵコアの演算時間の差が可能な限り小さくなるように、並列処理グループをＣＰＵコアに割り当てる。ここで、ＣＰＵコアの演算時間とは、割り当てられた並列処理グループの実行時間の和で与えられる時間のことである。
【００３３】
演算部１５は、演算用レジスタ２２に格納されたＰＩＯ入力値を用いて、プラント制御装置１の複数のＣＰＵコアに割り当てられた複数の並列処理グループを並列実行する。そして、演算部１５は、演算結果を演算用レジスタ２２に書き込む。
【００３４】
次に、図３のフローチャートを参照しつつ、上記のプラント制御装置１の動作について説明する。
【００３５】
まず、コア検出部１１は、プラント制御装置１に実装された複数のＣＰＵコアを検出する（ステップＳ１１）。本例では、ＣＰＵ＿ＡおよびＣＰＵ＿Ｂが検出された。
【００３６】
次に、並列処理グループ作成部１２は、ファンクションブロックダイアグラムを互いに並列実行可能なグループに分割して、複数の並列処理グループを作成する（ステップＳ１２）。
【００３７】
より詳しくは、並列処理グループ作成部１２は、次のようにして並列処理グループを作成する。まず、並列処理グループ作成部１２は、ファンクションブロックダイアグラムに含まれるファンクションブロックごとに当該ファンクションブロックがアクセスする入力アドレスおよび出力アドレスを把握する。
【００３８】
例えば、並列処理グループ作成部１２は、図４に示すようなテーブルを参照することにより、各ファンクションブロックＦＢ１〜ＦＢ４がアクセスする入力アドレスおよび出力アドレスを把握する。図４は、ファンクションブロックダイアグラム中の各ファンクションブロックについて、入力アドレスと出力アドレスを記載したテーブルである。なお、ＣＩから始まるアドレスは、演算用レジスタ２２のアドレスを示している。
【００３９】
ここで、ファンクションブロックＦＢ１は、入力アドレスＣＩ００００に格納された値に、入力アドレスＣＩ０００１に格納された値を加え、得られた値を出力アドレスＣＩ０００６に格納する。ファンクションブロックＦＢ２は、入力アドレスＣＩ０００２に格納された値から、入力アドレスＣＩ０００３に格納された値を引き、得られた値を出力アドレスＣＩ０００７に格納する。ファンクションブロックＦＢ３は、入力アドレスＣＩ０００４に格納された値を、入力アドレスＣＩ０００５に格納された値で割り、得られた値を出力アドレスＣＩ０００８に格納する。ファンクションブロックＦＢ４は、入力アドレスＣＩ０００７に格納された値に、入力アドレスＣＩ０００８に格納された値を乗じ、得られた値を出力アドレスＣＩ０００９に格納する。
【００４０】
並列処理グループ作成部１２は、ファンクションブロックダイアグラムに含まれるファンクションブロックＦＢ１〜ＦＢ４ごとに、そのファンクションブロックによりアクセスされる出力アドレスが他のファンクションブロックによりアクセスされる入力アドレスと同じではないことを確認する。
【００４１】
例えば、図４のファンクションブロックＦＢ１の場合、ファンクションブロックＦＢ１によりアクセスされる出力アドレスＣＩ０００６は、他のファンクションブロックＦＢ２〜ＦＢ４によりアクセスされる入力アドレスのいずれとも異なる。このような場合、並列処理グループ作成部１２は、ファンクションブロックＦＢ１は独立して実行可能であるとみなして、図５に示すように、ファンクションブロックＦＢ１を含む並列処理グループＡを作成する。
【００４２】
これに対して、図４のファンクションブロックＦＢ２の場合、出力アドレスＣＩ０００７がファンクションブロックＦＢ４によりアクセスされる入力アドレスと同じである。このような場合、ファンクションブロックＦＢ２はファンクションブロックＦＢ４と並列処理できない。このため、並列処理グループ作成部１２は、図５に示すように、ＦＢ２とＦＢ４を同じ並列処理グループＢに含める。ファンクションブロックＦＢ３も同様に、出力アドレスＣＩ０００８がファンクションブロックＦＢ４によりアクセスされる入力アドレスと同じであり、ファンクションブロックＦＢ４と並列処理できない。このため、並列処理グループ作成部１２は、ファンクションブロックＦＢ３を並列処理グループＢに含める。
【００４３】
上記のようにして並列処理グループ作成部１２は、図５に示すように、互いに並列実行可能な２つのグループ、即ち、ファンクションブロックＦＢ１を含む並列処理グループＡと、ファンクションブロックＦＢ２〜ＦＢ４を含む並列処理グループＢとを作成する。作成された並列処理グループは、入力アドレスの値を用いて所定の演算を行い、その結果得られた値を出力アドレスに格納する。
【００４４】
また、上記から理解されるように、並列処理グループは、コア検出部１１により検出されたＣＰＵコアの数によらず、可能な限り多く作成される。以下の説明では、５つの並列処理グループＡ〜Ｅが作成されたものとして説明する。
【００４５】
次に、テスト演算部１３は、テストデータを用いて並列処理グループＡ〜Ｅをテスト実行し、並列処理グループＡ〜Ｅの実行時間をそれぞれ計測する（ステップＳ１３）。より詳しくは、テスト演算部１３は、並列処理グループ作成部１２により作成された並列処理グループＡ〜Ｅを、コア検出部１１により検出されたＣＰＵコアの各々で実行する。
【００４６】
図６は、並列処理グループＡ〜Ｅの、ＣＰＵ＿ＡおよびＣＰＵ＿Ｂの各々における実行時間の計測結果を示している。ファンクションブロックダイアグラムは、比較的簡単な命令セットで構成されるため、実行時間はＰＩＯ入力値にあまり影響を受けない。即ち、並列処理グループＡ〜Ｅの実行時間は、各並列処理グループが含むファンクションブロックの数に依存するものの、ＰＩＯ入力値にはあまり依存しない。このため、テスト演算用レジスタ２１の初期値ないし現在値をＰＩＯ入力値としてそのまま使用してもよい。
【００４７】
なお、図６に示すように、並列処理グループの実行時間は、ＣＰＵコアにより異なる場合がある。これは、実行時間が、演算処理の内容とＣＰＵコアの特性との関係に依存するためである。例えば、除算を行うファンクションブロックを含む並列処理グループの場合には、浮動小数点演算ユニットを有するＣＰＵコアでの実行時間の方が短くなる。
【００４８】
また、特性が同じＣＰＵコアについては、いずれか一つのＣＰＵコアで各並列処理グループを実行すれば足りる。例えば、ＣＰＵ＿ＡとＣＰＵ＿Ｂの特性が同じであれば、並列処理グループＡ〜Ｅは、ＣＰＵ＿ＡおよびＣＰＵ＿Ｂのいずれか一方で実行されればよい。
【００４９】
次に、並列処理グループ割当て部１４は、テスト演算部１３により計測された実行時間に基づいて、並列処理グループＡ〜ＥをＣＰＵコア（即ち、コア検出部１１により検出されたＣＰＵ＿ＡおよびＣＰＵ＿Ｂ）に割り当てる（ステップＳ１４）。
【００５０】
より詳しくは、並列処理グループ割当て部１４は、各ＣＰＵコアの演算時間ができるだけ短く、且つ各ＣＰＵコアの演算ができるだけ同じタイミングで終了するように、並列処理グループを各ＣＰＵコアに割り当てる。好ましくは、並列処理グループ割当て部１４は、ＣＰＵ＿Ａの演算時間とＣＰＵ＿Ｂの演算時間の平均値が最小となり、かつ、ＣＰＵ＿Ａの演算時間の標準偏差とＣＰＵ＿Ｂの演算時間の標準偏差がそれぞれ最小となるように、並列処理グループＡ〜ＥをＣＰＵ＿ＡおよびＣＰＵ＿Ｂに割り当てる。
【００５１】
具体的には、並列処理グループ割当て部１４は、次のようにして並列処理グループＡ〜ＥをＣＰＵ＿ＡおよびＣＰＵ＿Ｂに割り当てる。
【００５２】
まず、並列処理グループ割当て部１４は、並列処理グループＡ〜Ｅを、各ＣＰＵコアにおける実行時間に基づいて、ＣＰＵコアに割り当てる第１の割り当て処理を行う。例えば、第１の割り当て処理では、並列処理グループＡ〜Ｅを、実行時間が最も短いＣＰＵコアに割り当てる。図７は、第１の割り当て処理後における、並列処理グループＡ〜Ｅの割り当て例を示している。この場合、並列処理グループＡ〜Ｃ，Ｅは、ＣＰＵ＿ＢよりもＣＰＵ＿Ａにおける実行時間の方が短いため、ＣＰＵ＿Ａに割り当てる。並列処理グループＤは、ＣＰＵ＿ＡよりもＣＰＵ＿Ｂにおける実行時間の方が短いため、ＣＰＵ＿Ｂに割り当てる。
【００５３】
図７から分かるように、第１の割り当て処理後において、ＣＰＵ＿Ａの演算時間は４５ｍｓ（＝１０ｍｓ＋５ｍｓ＋２０ｍｓ＋１０ｍｓ）であり、ＣＰＵ＿Ｂの演算時間は１０ｍｓである。
【００５４】
第１の割り当て処理後、並列処理グループ割当て部１４は、ＣＰＵ＿Ａから、演算時間がＣＰＵ＿Ａよりも短いＣＰＵ＿Ｂに、ＣＰＵ＿Ａに割り当てられた並列処理グループのうち少なくともいずれか一つを移動する第２の割り当て処理を行う。好ましくは、ＣＰＵ＿ＡとＣＰＵ＿Ｂとで実行時間の差が最も小さい並列処理グループを優先的に移動する。
【００５５】
なお、ＣＰＵコアが３つ以上の場合には、演算時間が最も長いＣＰＵコアから、演算時間が最も短いＣＰＵコアに、並列処理グループを移動させることが好ましい。このようにして、各ＣＰＵコアでの演算時間を可能な限り平準化する。
【００５６】
ここでは、図８に示すように、並列処理グループ割当て部１４は、並列処理グループＣをＣＰＵ＿ＡからＣＰＵ＿Ｂに移動した。図８は、第２の割り当て処理後における、並列処理グループＡ〜Ｅの割り当て例を示している。第２の割り当て処理後において、ＣＰＵ＿Ａの演算時間は２５ｍｓ（＝１０ｍｓ＋５ｍｓ＋１０ｍｓ）であり、ＣＰＵ＿Ｂの演算時間は３０ｍｓ（＝２０ｍｓ＋１０ｍｓ）であり、ＣＰＵコアの演算時間が平準化されていることが分かる。
【００５７】
割り当て処理が完了した後、ＰＩＯ入力部３１は入出力装置３からＰＩＯ入力値を取得し、演算用レジスタ２２に格納する。そして、演算部１５は、入出力装置３から取得されたＰＩＯ入力値を用いて、各ＣＰＵコアに割り当てられた並列処理グループを並列実行する（ステップＳ１５）。
【００５８】
より詳しくは、演算部１５は、ステップＳ１４で設定された並列処理グループとＣＰＵコアの割り当てに従って、それぞれのＣＰＵコアにより並列処理グループの演算処理を並列実行する。その後、ＰＩＯ出力部３２は、演算用レジスタ２２に書き込まれたＰＩＯ出力値を読み出して、入出力装置３およびエンジニアリング装置４に出力する。
【００５９】
なお、ステップＳ１１からステップＳ１４までの処理は、実際の制御を行う前に一度行うだけでよい。例えば、プラント制御装置１の入出力インタフェース（Ｉ／Ｏ）を初期化する初期化処理と平行して、ステップＳ１１からステップＳ１４までの処理を行ってもよい。
【００６０】
以上説明したように、第１の実施形態では、単一のタスクで動作することを前提に作成されたファンクションブロックダイアグラムを互いに並列実行可能な複数の並列処理グループに分割し、各並列処理グループをテスト実行して実行時間を計測し、各並列処理グループの実行時間に基づいて複数のＣＰＵコアに各並列処理グループを割り当てる。
【００６１】
よって、第１の実施形態によれば、ファンクションブロックダイアグラムを複数のＣＰＵコアで効率的に実行することができる。その結果、ファンクションブロックダイアグラムの実行時間を短縮することができる。
【００６２】
（第２の実施形態）
次に、第２の実施形態に係るプラント制御装置１Ａについて説明する。なお、以下に説明するプラント制御装置１Ａの構成は、待機系のプラント制御装置２についても同じである。
【００６３】
第２の実施形態と第１の実施形態との相違点の一つは、ＰＩＯ入力値する入力するタスクおよびＰＩＯ出力値を出力するタスクを、並列処理グループに含めて、入出力処理をマルチタスク化する点である。
【００６４】
例えばＰＩＯ入力値の入力処理がマルチタスク化されていない場合、並列処理グループＡおよびＢを並列実行する際、入力アドレスＣＩ００００およびＣＩ０００１にＰＩＯ入力値が格納されて並列処理グループＡが実行可能な状態になったとしても、並列処理グループＢによりアクセスされる入力アドレスＣＩ０００２〜ＣＩ０００５にＰＩＯ入力値が格納されていない場合、並列処理グループＡを実行できない。
【００６５】
ＰＩＯ出力値の出力処理についても同様である。即ち、ＰＩＯ出力値の出力処理がマルチタスク化されていない場合、並列処理グループＡおよびＢを並列実行する際、並列処理グループＡによりアクセスされる出力アドレスＣＩ０００６にＰＩＯ出力値が格納されても、並列処理グループＢによりアクセスされる出力アドレスＣＩ０００９にＰＩＯ出力値が格納されていない場合は、出力アドレスＣＩ０００６の値を外部に出力することができない。
【００６６】
以下、第１の実施形態との相違点を中心に第２の実施形態について説明する。
【００６７】
プラント制御装置１Ａは、図９に示すように、制御部１０と、レジスタ部２０と、ＰＩＯ入力部３１と、ＰＩＯ出力部３２とを備えている。
【００６８】
プラント制御装置１Ａの制御部１０は、図９に示すように、コア検出部１１と、並列処理グループ作成部１２と、テスト演算部１３と、並列処理グループ割当て部１４と、演算部１５と、入出力時間見積部１６とを有する。
【００６９】
並列処理グループ作成部１２は、各並列処理グループが、入出力装置３からＰＩＯ入力値（入力データ）を入力する入力処理タスクと、入出力装置３にＰＩＯ出力値（出力データ）を出力する出力処理タスクとを含むように、ファンクションブロックダイアグラムを分割する。
【００７０】
なお、並列処理グループ作成部１２は、入力処理タスクおよび出力処理タスクが独立して実行可能になるように、ファンクションブロックダイアグラムを分割する。より詳しくは、並列処理グループ作成部１２は、入力処理タスクがアクセスする入力アドレスが異なる並列処理グループに存在しないこと、および、出力処理タスクがアクセスする出力アドレスが異なる並列処理グループに存在しないことを確認した上で、並列処理グループを作成する。
【００７１】
図１１は、並列処理グループＣおよびＤに分割されたファンクションブロックダイアグラムの一例を示している。並列処理グループＣの入力処理は、入力アドレスＣＩ００００およびＣＩ０００１にＰＩＯ入力値を格納するタスクであり、ＰＩＯ入力部３１によって実行される。並列処理グループＣの出力処理は、出力アドレスＣＩ０００６に格納されたＰＩＯ出力値を外部に出力するタスクであり、ＰＩＯ出力部３２によって実行される。
【００７２】
同様に、並列処理グループＤの入力処理は、入力アドレスＣＩ０００２〜ＣＩ０００５にＰＩＯ入力値を格納するタスクであり、ＰＩＯ入力部３１によって実行される。並列処理グループＤの出力処理は、出力アドレスＣＩ０００９に格納されたＰＩＯ出力値を外部に出力するタスクであり、ＰＩＯ出力部３２によって実行される。
【００７３】
並列処理グループをＣＰＵコアに割り当てるためには、入力処理タスクおよび出力処理タスクについても実行時間を把握する必要がある。しかし、テスト環境において入出力装置３が存在しない場合や、あるいは、入出力装置３が存在したとしても実際のエンジニアリング装置２も接続されている場合がある。このため、入出力処理タスクをテスト実行できないおそれがある。
【００７４】
そこで、第２の実施形態に係るプラント制御装置１Ａの制御部１０は、入出力時間見積部１６を備えている。この入出力時間見積部１６は、作成された並列処理グループに含まれる入力処理タスクおよび出力処理タスクの実行時間を見積もる。
【００７５】
例えば、入出力時間見積部１６は、式（１）により、入力処理タスクの実行時間を見積もる。
【数１】
2015210728.tif 000003
ここで、Ｔｉｎｐｕｔ：入力処理タスクの実行時間、Ａｉｎ：アナログ入力点の数、ｔｉｎ＿ａ：アナログ値単位入力時間、Ｄｉｎ：デジタル入力点の数、ｔｉｎ＿ｄ：デジタル値単位入力時間である。ＡｉｎおよびＤｉｎは、入力処理タスクによりアクセスされる入力アドレスの数である。ｔｉｎ＿ａおよびｔｉｎ＿ｄは、一つの入力アドレスからＰＩＯ入力値を読み出すのに必要な時間であり、事前のデータ読み出し試験で得られた値を用いる。
【００７６】
同様に、入出力時間見積部１６は、式（２）により、出力処理タスクの実行時間を見積もる。
【数２】
2015210728.tif 000004
ここで、Ｔｏｕｔｐｕｔ：出力処理タスクの実行時間、Ａｏｕｔ：アナログ出力点の数、ｔｏｕｔ＿ａ：アナログ値単位出力時間、Ｄｏｕｔ：デジタル出力点の数、ｔｏｕｔ＿ｄ：デジタル値単位出力時間である。ＡｏｕｔおよびＤｏｕｔは、出力処理タスクがアクセスする出力アドレスの数である。ｔｏｕｔ＿ａおよびｔｏｕｔ＿ｄは、演算結果であるＰＩＯ出力値を一つの出力アドレスに書き込むのに必要な時間であり、事前のデータ書き込み試験で得られた値を用いる。
【００７７】
なお、ここでいう“アナログ”は、アナログ値をＡ／Ｄ変換したデジタル値（例えば１６ビットのデータ）であり、“デジタル”は、“０”または“１”の１ビットのデータである。
【００７８】
並列処理グループ割当て部１４は、テスト演算部１３により計測された並列処理グループの実行時間、および入出力時間見積部１６により見積もられた入出力処理タスクの実行時間に基づいて、複数の並列処理グループを複数のＣＰＵコアに割り当てる。
【００７９】
次に、図１０のフローチャートを参照しつつ、上記のプラント制御装置１Ａの動作について説明する。
【００８０】
まず、コア検出部１１は、プラント制御装置１Ａに実装された複数のＣＰＵコアを検出する（ステップＳ２１）。
【００８１】
次に、並列処理グループ作成部１２は、各並列処理グループが入力処理タスクおよび出力処理タスクを含むように、ファンクションブロックダイアグラムを分割して、複数の並列処理グループを作成する（ステップＳ２２）。
【００８２】
並列処理グループ作成部１２は、入力処理タスクおよび出力処理タスクが独立して実行可能であることを確認する。具体的には、並列処理グループ作成部１２は、ある入力処理タスクが扱う入力アドレスが、他の入力処理タスクで扱う入力アドレスと同じではないことを確認する。同様に、並列処理グループ作成部１２は、ある出力処理タスクが扱う出力アドレスが、他の出力処理タスクで扱う出力アドレスと同じではないことを確認する。
【００８３】
次に、テスト演算部１３は、テストデータを用いて並列処理グループの各々をテスト実行し、並列処理グループの実行時間をそれぞれ計測する（ステップＳ２３）。本ステップの処理は、第１の実施形態のステップＳ１３と同じであるため、詳しい説明は省略する。
【００８４】
次に、入出力時間見積部１６は、各並列処理グループの入力処理タスクおよび出力処理タスクの実行時間を見積もる（ステップＳ２４）。具体的には、前述の式（１）および式（２）を用いて、入出力時間見積部１６は、各並列処理グループの入力処理タスクおよび出力処理タスクの実行時間をそれぞれ見積もる。
【００８５】
次に、並列処理グループ割当て部１４は、テスト演算部１３により計測された並列処理グループの実行時間、および入出力時間見積部１６により見積もられた入出力処理タスクの実行時間に基づいて、並列処理グループをＣＰＵコアに割り当てる（ステップＳ２５）。
【００８６】
具体的には、テスト演算部１３により計測された並列処理グループの実行時間に、入出力時間見積部１６により見積もられた入出力処理タスクの実行時間を加えた時間を各並列処理グループの実行時間とし、その他は、第１の実施形態と同様にして各並列処理グループをＣＰＵコアに割り当てる。
【００８７】
割り当て処理が完了した後、ＰＩＯ入力部３１は入出力装置３からＰＩＯ入力値を取得し、演算用レジスタ２２に格納する。そして、演算部１５は、入出力装置３から取得されたＰＩＯ入力値を用いて、各ＣＰＵコアに割り当てられた並列処理グループを並列実行する（ステップＳ２６）。
【００８８】
より詳しくは、演算部１５は、ステップＳ２５で設定された並列処理グループとＣＰＵコアの割り当てに従って、それぞれのＣＰＵコアにより並列処理グループの演算処理を並列実行する。その後、ＰＩＯ出力部３２は、演算用レジスタ２２に書き込まれたＰＩＯ出力値を読み出して、入出力装置３およびエンジニアリング装置４に出力する。なお、ステップＳ２１からステップＳ２５までの処理は、実際の制御を行う前に一度行うだけでよい。
【００８９】
以上説明したように、第２の実施形態によれば、入出力処理もマルチタスク化されるため、ファンクションブロックダイアグラムを複数のＣＰＵコアでさらに効率的に実行することができる。その結果、ファンクションブロックダイアグラムの実行時間をさらに短縮することができる。
【００９０】
なお、上記の説明では、入力処理と出力処理の両方をマルチタスク化したが、いずれか一方のみをマルチタスク化してもよい。即ち、並列処理グループ作成部１２は、入力処理と出力処理のいずれか一方のみが並列処理グループに含まれるように並列処理グループを作成してもよい。
【００９１】
上記の第１および第２の実施形態によれば、オペレータ（プログラマ）はマルチコアによる並列実行を意識してファンクションブロックダイアグラムを作成する必要はなく、従来のプログラミング作業に影響を与えない。
【００９２】
上述した実施形態で説明したプラント制御装置の少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、プラント制御装置の少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
【００９３】
また、プラント制御装置の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
【００９４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００９５】
１，１Ａ，２  プラント制御装置
３  入出力装置
４  エンジニアリング装置
１０  制御部
１１  コア検出部
１２  並列処理グループ作成部
１３  テスト演算部
１４  並列処理グループ割当て部
１５  演算部
２０  レジスタ部
２１  テスト演算用レジスタ
２２  演算用レジスタ
３１  ＰＩＯ入力部
３２  ＰＩＯ出力部
１００  プラント制御システム
ＦＢ１，ＦＢ２，ＦＢ３，ＦＢ４  ファンクションブロック
【図１】
2015210728.tif 000005
【図２】
2015210728.tif 000006
【図３】
2015210728.tif 000007
【図４】
2015210728.tif 000008
【図５】
2015210728.tif 000009
【図６】
2015210728.tif 000010
【図７】
2015210728.tif 000011
【図８】
2015210728.tif 000012
【図９】
2015210728.tif 000013
【図１０】
2015210728.tif 000014
【図１１】
2015210728.tif 000015