(57)【要約】      （修正有）【課題】プログラマブルコントローラの各コアへの処理の割当てを、より柔軟に変更可能にする。【解決手段】プログラマブルコントローラ２は、複数のプロセッサコアと、入力部２０１と、割当部２０２と、送信部２０６と、電源制御部２０５と、更新部２０４と、実行部２０３と、を備える。割当部２０２は、複数のプロセッサコアのそれぞれに対して、複数の処理のいずれかを割当てる。送信部２０６は、処理の割当て結果を、管理装置に送信する。電源制御部２０５は、管理装置で処理の割当てが変更され、変更後の設定データを入力部２０１が入力した場合に再起動を行う。更新部２０４は、再起動の後に設定データに基づいて複数のプロセッサコアへの割当てを更新する。実行部２０３は、割当てに基づいて複数の処理を実行し、割当てが変更された場合は、変更後の割当てに基づいて複数の処理を実行する。【選択図】図２
2018106440.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアを備えたプログラマブルコントローラであって、
前記複数のプロセッサコアで実行するためのアプリケーションプログラムと、前記アプリケーションプログラムに含まれる複数の処理の情報を含む設定データとを、前記プログラマブルコントローラに接続された管理装置から入力する入力部と、
前記複数のプロセッサコアのそれぞれに対して、前記複数の処理のいずれかを割当てる割当部と、
前記複数のプロセッサコアと前記複数の処理の割当て結果を、前記管理装置に送信する送信部と、
前記管理装置で前記複数のプロセッサコアに対する前記複数の処理の割当てが変更され、変更後の前記割当ての情報が追加された前記設定データを前記入力部が入力した場合に再起動を行う電源制御部と、
前記再起動の後に前記設定データに基づいて前記複数のプロセッサコアへの割当てを更新する更新部と、
前記割当てに基づいて前記複数の処理を実行し、前記割当てが変更された場合は、変更後の前記割当てに基づいて前記複数の処理を実行する実行部と、
を備えるプログラマブルコントローラ。
【請求項２】
プログラマブルコントローラで実行するためのアプリケーションプログラムに含まれる複数の処理の情報を含む設定データを生成する設定データ生成部と、
前記プログラマブルコントローラの複数のプロセッサコアのそれぞれへの前記複数の処理の割当てを、前記プログラマブルコントローラから取得する送受信部と、
前記複数の処理の前記複数のプロセッサコアへの割当てを表示部に表示する表示制御部と、
前記割当てを変更するユーザの操作を受け付ける受付部と、
前記受付部が受け付けた操作に応じて、前記設定データを更新して前記割当てを変更する割当て変更部と、
を備える管理装置。
【請求項３】
前記設定データは、前記複数の処理のうち、異なるプロセッサコアに割当てることができない複数の処理である分離不可処理の組み合わせの情報を含み、
前記割当て変更部は、前記受付部が、前記分離不可処理を分離する割当て変更の操作を受け付けた場合、当該割当てを変更しない、
請求項２に記載の管理装置。
【請求項４】
前記設定データは、前記複数の処理と外部装置からの信号を入出力するインタフェースとを対応付けた情報を含み、
前記表示制御部はさらに、前記複数の処理と、前記インタフェースとを対応付けて前記表示部に表示する、
請求項２または３に記載の管理装置。
【請求項５】
前記受付部は、前記表示制御部が、前記表示部に表示した前記複数の処理のうちのいずれかの割当てを、一のプロセッサコアから他のプロセッサコアへ変更するドラッグアンドドロップ操作を受け付け、
前記割当て変更部は、前記受付部が受け付けた割当ての変更内容に応じて、前記設定データを更新する、
請求項２から４のいずれか１項に記載の管理装置。
【請求項６】
前記送受信部は、前記複数の処理によって前記プログラマブルコントローラの前記複数のプロセッサコアのそれぞれにかかる負荷の度合を示す負荷情報を、前記プログラマブルコントローラから取得し、
前記表示制御部は、前記複数のプロセッサコアに割当てられた前記複数の処理のそれぞれの負荷の度合を前記表示部に表示する、
請求項２から５のいずれか１項に記載の管理装置。
【請求項７】
プログラマブルコントローラと管理装置とを備えた制御システムであって、
前記プログラマブルコントローラは、
複数のプロセッサコアと、
前記複数のプロセッサコアで実行するためのアプリケーションプログラムと、前記アプリケーションプログラムを構成する複数の処理の情報を含む設定データとを、前記プログラマブルコントローラに接続された管理装置から入力する入力部と、
前記複数のプロセッサコアのそれぞれに対して、前記複数の処理のいずれかを割当てる割当部と、
前記複数のプロセッサコアと前記複数の処理の割当て結果を、前記管理装置に送信する送信部と、
前記管理装置で前記複数のプロセッサコアに対する前記複数の処理の割当てが変更され、変更後の前記割当ての情報が追加された前記設定データを前記入力部が入力した場合に再起動を行う電源制御部と、
前記再起動の後に前記設定データに基づいて前記複数のプロセッサコアへの割当てを更新する更新部と、
前記割当てに基づいて前記複数の処理を実行し、前記割当てが変更された場合は、変更後の前記割当てに基づいて前記複数の処理を実行する実行部と、を備え、
前記管理装置は、
前記設定データを生成する設定データ生成部と、
前記プログラマブルコントローラの前記複数のプロセッサコアのそれぞれへの前記複数の処理の割当てを、前記プログラマブルコントローラから取得する送受信部と、
前記複数の処理の前記複数のプロセッサコアへの割当てを表示部に表示する表示制御部と、
前記割当てを変更するユーザの操作を受け付ける受付部と、
前記受付部が受け付けた操作に応じて、前記割当てを変更する割当て変更部と、
を備える制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、プログラマブルコントローラ、管理装置および制御システムに関する。
【背景技術】
【０００２】
従来、１つの中央処理装置（ＣＰＵパッケージ）に複数のプロセッサコアを含む、マルチコアＣＰＵ（マルチコアプロセッサ）を備えたプログラマブルコントローラ（プログラマブルロジックコントローラ、Programmable  Logic  Controller、ＰＬＣ）では、各プロセッサコアが別々の処理を並行して実施することで処理能力を向上させている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−９４８９８号公報
【特許文献２】特開２０１２−１４１７２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術においては、各プロセッサコアへの処理の割当ては、各プログラマブルコントローラ専用のアプリケーションプログラムによって定められていた。このため、従来技術においては、各プロセッサコアへの処理の割当てを変更するためにはアプリケーションプログラムの修正が必要となり、この結果、修正したアプリケーションプログラムのコンパイルも必要となる。このため、従来技術では、プロセッサコアへの処理の割当てを動的かつ迅速に変更することは困難であった。このような従来技術において、プログラマブルコントローラの各プロセッサコアへの処理の割当てをより柔軟に変更可能にすることが求められていた。
【課題を解決するための手段】
【０００５】
実施形態のプログラマブルコントローラは、複数のプロセッサコアを備えたプログラマブルコントローラであって、入力部と、割当部と、送信部と、電源制御部と、更新部と、実行部と、を備える。入力部は、複数のプロセッサコアで実行するためのアプリケーションプログラムと、アプリケーションプログラムに含まれる複数の処理の情報を含む設定データとを、プログラマブルコントローラに接続された管理装置から入力する。割当部は、複数のプロセッサコアのそれぞれに対して、複数の処理のいずれかを割当てる。送信部は、複数のプロセッサコアと複数の処理の割当て結果を、管理装置に送信する。電源制御部は、管理装置で複数のプロセッサコアに対する複数の処理の割当てが変更され、変更後の割当ての情報が追加された設定データを入力部が入力した場合に再起動を行う。更新部は、再起動の後に前記設定データに基づいて複数のプロセッサコアへの割当てを更新する。実行部は、割当てに基づいて複数の処理を実行し、割当てが変更された場合は、変更後の割当てに基づいて複数の処理を実行する。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態１にかかる制御システムの全体構成の一例を示す図である。
【図２】図２は、実施形態１にかかるコントローラの機能的構成の一例を示すブロック図である。
【図３】図３は、実施形態１にかかる設定データの構成および内容の一例を示す図である。
【図４】図４は、実施形態１にかかるＰＣのハードウェア構成の一例を示す図である。
【図５】図５は、実施形態１にかかるＰＣの機能的構成の一例を示すブロック図である。
【図６】図６は、実施形態１にかかるモニタリング画面の一例を示す図である。
【図７】図７は、実施形態１にかかる警告表示の一例を示す図である。
【図８】図８は、実施形態１にかかるアプリケーションプログラムおよび設定データの生成処理の流れの一例を示すフローチャートである。
【図９】図９は、実施形態１にかかるコントローラによる制御処理の流れの一例を示すフローチャートである。
【図１０】図１０は、実施形態１にかかるモニタリング処理の流れの一例を示すフローチャートである。
【図１１】図１１は、実施形態１にかかる割当て変更処理の流れの一例を示すフローチャートである。
【図１２】図１２は、実施形態２にかかるコントローラの機能的構成の一例を示すブロック図である。
【図１３】図１３は、実施形態２にかかるＰＣの機能的構成の一例を示すブロック図である。
【図１４】図１４は、実施形態２にかかるモニタリング画面の一例を示す図である。
【図１５】図１５は、実施形態２にかかる制御処理の全体の流れの一例を示すフローチャートである。
【図１６】図１６は、実施形態２にかかるモニタリング処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【０００７】
（実施形態１）
図１は、実施形態１にかかる制御システムＳの全体構成の一例を示す図である。本実施形態にかかる制御システムＳは、例えば、プラントに適用されるものである。図１に示すように、制御システムＳは、ＰＣ（Personal  Computer）１と、プログラマブルコントローラ（以下、コントローラという）２とを備える。
【０００８】
ＰＣ１は、ユーザが、コントローラ２で実行するアプリケーションプログラムの生成や、コントローラ２の稼動状況をモニタリングするために用いるコンピュータである。ＰＣ１は、ソフトウェアであるエンジニアリングツール１１を有する。エンジニアリングツール１１は、制御システムＳに関するシステム構築、プログラミング、モニタリング、情報収集、監視等を行うソフトウェアである。ＰＣ１は、エンジニアリングツール１１の機能によってコントローラ２を管理する。ＰＣ１は、本実施形態における管理装置の一例である。ＰＣ１およびエンジニアリングツール１１についての詳細は後述する。
【０００９】
コントローラ２は、図１に示すように、マルチコアＣＰＵ（マルチコアプロセッサ）２０、ＲＡＭ（Random  Access  Memory）２２、ＦＲＯＭ（Flash  Read  Only  Memory）２３、ツールインタフェース２４、Ｉ／Ｏインタフェース２５、および、バス２６を備える。
【００１０】
マルチコアＣＰＵ２０は、複数のプロセッサコア（以下、コアという）を有するＣＰＵである。図１に示すように、マルチコアＣＰＵ２０は、コアＡ３０１およびコアＢ３０２を備える。図１のマルチコアＣＰＵ２０が有するコアの数は一例であり、２つに限らない。マルチコアＣＰＵ２０は、コントローラ２全体を制御する。
【００１１】
ＲＡＭ２２は、マルチコアＣＰＵ２０の動作領域であり、書き込み可能な記憶媒体である。ＦＲＯＭ２３は、いわゆるフラッシュメモリであり、電気的に書き換え可能な不揮発性半導体記憶媒体である。
【００１２】
ツールインタフェース２４は、通信路４を介してＰＣ１との間で情報の送受信を行うためのインタフェースである。通信路４は、ＰＣ１とコントローラ２を結ぶ通信路であり、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）やＵＳＢ（Universal  Serial  Bus）などの高速の通信路であるが、それらに限定されない。
【００１３】
Ｉ／Ｏインタフェース２５は、通信路５を介してＩ／Ｏ機器３との間で情報の送受信を行うためのインタフェースである。通信路５は、コントローラ２とＩ／Ｏ機器３を結ぶ通信路である。また、バス２６は、コントローラ２の内部のデータ伝送路である。
【００１４】
Ｉ／Ｏ機器３は、プラントを構成する装置との入出力を行うための機器である。Ｉ／Ｏ機器３としては、例えば、制御対象設備に設置されたセンサ等からの信号の入力を行う入力装置（ＡＩ（Analog  Input）機器、ＤＩ（Digital  Input）機器）や、制御対象設備のアクチュエータ等に対して信号の出力を行う出力装置（ＡＯ（Analog  Output）機器、ＤＯ（Digital  Output）機器）がある。図１では、Ｉ／Ｏ機器３およびＩ／Ｏインタフェース２５は１つずつ記載されているが、これに限らない。例えば、プラントの構成によって、Ｉ／Ｏ機器３およびＩ／Ｏインタフェース２５の数は異なる。
【００１５】
図２は、本実施形態にかかるコントローラ２の機能的構成の一例を示すブロック図である。図２に示すように、コントローラ２は、入力部２０１と、割当部２０２と、実行部２０３と、更新部２０４と、電源制御部２０５と、送信部２０６と、記憶部２５０とを備える。
【００１６】
記憶部２５０は、例えばＦＲＯＭ２３によって構成される。また、記憶部２５０は、入力部２０１がＰＣ１からダウンロード（入力）した、アプリケーションプログラム３１１と、設定データ３１０とを記憶する。アプリケーションプログラム３１１は、コントローラ２がプラントを制御するためのプログラムである。記憶部２５０に記憶されたアプリケーションプログラム３１１は、コンパイル済みのアプリケーションプログラム３１１、すなわち実行形式のアプリケーションプログラム３１１であるとする。
【００１７】
設定データ３１０は、アプリケーションプログラム３１１に含まれる複数の処理の属性情報と、コアＡ３０１およびコアＢ３０２の属性情報と、コアＡ３０１およびコアＢ３０２に対する各処理との割当てと、を定義する定義ファイルである。言い換えれば、設定データ３１０は、従来技術ではアプリケーションプログラム３１１内に含まれていた定義情報を、アプリケーションプログラム３１１の外部に定義した定義ファイルである。
【００１８】
図３は、本実施形態にかかる設定データ３１０の構成および内容の一例を示す図である。本実施形態における設定データ３１０は、定義ファイル３１３ａおよび定義ファイル３１３ｂを含む。
【００１９】
図３（ａ）に示すように、定義ファイル３１３ａは、例えば、「処理」、「Ｉ／Ｏインタフェース」、「分離不可処理」、「コア」等の定義情報を含む。「処理」は、アプリケーションプログラム３１１に含まれる複数の処理の情報である。「Ｉ／Ｏインタフェース」は、アプリケーションプログラム３１１に含まれる各処理で用いられるＩ／Ｏインタフェース２５を特定する情報である。「分離不可処理」は、異なるコアに割当てることができない複数の処理の組み合わせの情報である。「コア」は、各処理が実行されるコアＡ３０１またはコアＢ３０２の割当てである。
【００２０】
設定データ３１０は、ＰＣ１のエンジニアリングツール１１で生成されるが、生成時点では各処理はコアＡ３０１およびコアＢ３０２に割当てられていない。このため、生成された時点の設定データ３１０では、図３（ａ）の項目「コア」は、空白（未割当）である。各処理のコアＡ３０１およびコアＢ３０２への割当ては、後述の割当部２０２で決定される。また、ＰＣ１のエンジニアリングツール１１が処理の割当てを変更した場合には、ＰＣ１は、変更後の割当てを設定データ３１０に登録する。
【００２１】
また、図３（ｂ）に示すように、定義ファイル３１３ｂは、コアＡ３０１およびコアＢ３０２の「Ｉ／Ｏインタフェースの上限数」や、「割当て不可インタフェース」の定義情報を含む。「Ｉ／Ｏインタフェースの上限数」は、コアＡ３０１およびコアＢ３０２に割当てられた各処理に対応付けられたＩ／Ｏインタフェース２５の数の上限の規定値である。また、「割当て不可インタフェース」は、コアＡ３０１またはコアＢ３０２に、特定のＩ／Ｏインタフェース２５に対応付けられた処理を割当てることを禁止する定義である。
【００２２】
図３に示す設定データ３１０の構成および内容は一例であり、これに限らない。また、設定データ３１０が含む定義ファイルの数は、２つに限らない。例えば、設定データ３１０は１つの定義ファイルに定義ファイル３１３ａおよび定義ファイル３１３ｂの内容を含める構成を採用しても良い。
【００２３】
図２に戻り、入力部２０１は、アプリケーションプログラム３１１および設定データ３１０を、ＰＣ１から、ツールインタフェース２４を介して入力（ダウンロード）する。入力部２０１は、入力したアプリケーションプログラム３１１および設定データ３１０を、記憶部２５０に保存する。また、後述する割当部２０２が決定したコアＡ３０１およびコアＢ３０２への処理の割当てがＰＣ１において変更された場合に、入力部２０１は、変更後の割当てが登録された設定データ３１０を入力する。入力部２０１は、変更後の割当てが登録された設定データ３１０を、記憶部２５０に保存する。この場合、入力部２０１は、既に記憶部２５０に記憶された設定データ３１０を上書きして、変更後の割当てが登録された設定データ３１０を保存しても良い。
【００２４】
割当部２０２は、コアＡ３０１およびコアＢ３０２のそれぞれに対して、アプリケーションプログラム３１１に含まれる複数の処理のいずれかを割当てる。具体的には、割当部２０２は、実行部２０３がアプリケーションプログラム３１１を起動した場合に、実行対象の処理を設定データ３１０から検索し、コアＡ３０１またはコアＢ３０２に割当てる。
【００２５】
割当部２０２は、アプリケーションプログラム３１１全体の処理が効率よく実行可能となるように、コアＡ３０１およびコアＢ３０２へ各処理の割当てを行う。例えば、割当部２０２は、同一のＩ／Ｏインタフェース２５を用いる処理を、設定データ３１０から検索し、これらの処理を同一のコアＡ３０１またはコアＢ３０２に優先的に割り当てる。同一のＩ／Ｏインタフェース２５を用いる複数の処理を、同一のコアＡ３０１またはコアＢ３０２で行うことで、割当部２０２は、Ｉ／Ｏインタフェース２５の入出力の回数を削減して、アプリケーションプログラム３１１全体の処理時間を低減することができる。
【００２６】
また、割当部２０２は、並行して同時に実行可能な処理を、優先的に異なるコアＡ３０１またはコアＢ３０２に割当てることにより、アプリケーションプログラム３１１全体の処理時間を低減する。割当部２０２は、例えば、設定データ３１０に分離不可処理として定義されていない処理は、並行して同時に実行可能であると判断する。割当部２０２は、例えばコントローラ２のＯＳ（Operating  System）の一機能として構成されても良い。
【００２７】
従来技術においては、各コアへの処理の割当ては、アプリケーションプログラム３１１のコード内で指定されたり、コンパイラによって決定されたりしていた。そのため、各アプリケーションプログラム３１１は、特定のコントローラの専用となり、例えばコアの数が異なる他のコントローラで使用することが困難であった。本実施形態では、コントローラ２の割当部２０２がコアＡ３０１およびコアＢ３０２への処理の割当てを行うため、アプリケーションプログラム３１１は、各処理を実行するコアを指定する情報を含まない。このため、本実施形態のコントローラ２は、コアの数等の構成の異なる他のコントローラとも、同一のアプリケーションプログラム３１１を共通して使用することができる。
【００２８】
割当部２０２は、各処理のコアＡ３０１およびコアＢ３０２への割当てを、設定データ３１０に登録する。また、割当部２０２は、設定データ３１０に各処理とコアＡ３０１およびコアＢ３０２の割当ての情報が既に含まれている場合は、当該設定データ３１０に従ってコアＡ３０１およびコアＢ３０２に各処理を割当てる構成を採用しても良い。例えば、コントローラ２が特定のアプリケーションプログラム３１１を複数回実行する場合に、２回目以降の実行では、設定データ３１０に登録された前回以前の割当てを適用する構成を採用しても良い。
【００２９】
電源制御部２０５は、コントローラ２の電源を制御する。例えば、電源制御部２０５は、コアＡ３０１およびコアＢ３０２への処理の割当てがＰＣ１において変更され、変更後の割当ての情報が追加された設定データ３１０を入力部２０１が入力した場合に、コントローラ２をリブート（再起動）する。
【００３０】
更新部２０４は、コントローラ２のリブート後に、記憶部２５０に記憶された、変更後の割当ての情報が追加された設定データ３１０に基づいて、コアＡ３０１およびコアＢ３０２への割当てを更新する。更新部２０４は、更新した割当てを、実行部２０３に送出する。更新部２０４は、割当部２０２と同様に、コントローラ２のＯＳの一機能として構成されても良い。
【００３１】
実行部２０３は、アプリケーションプログラム３１１の起動をする。実行部２０３は、アプリケーションプログラム３１１を特定の時間に起動するものとしても良いし、ユーザの操作や、外部装置からの信号を受けて起動するものとしても良い。
【００３２】
また、実行部２０３は、アプリケーションプログラム３１１を起動した場合に、割当部２０２から取得したコアＡ３０１およびコアＢ３０２への処理の割当てに基づいて、アプリケーションプログラム３１１に含まれる個々の処理を実行する。また、実行部２０３は、更新部２０４から、更新した割当てを取得した場合は、更新後の割当てに基づいて、アプリケーションプログラム３１１に含まれる各処理を実行する。実行部２０３は、リブート前に実行されていた処理から再実行を開始するものとしても良いし、アプリケーションプログラム３１１全体を、最初から再実行するものとしても良い。
【００３３】
送信部２０６は、コアＡ３０１およびコアＢ３０２ごとの動作状態を、ＰＣ１へ送信する。例えば、送信部２０６は、コアＡ３０１およびコアＢ３０２への処理の割当て結果を、ツールインタフェース２４および通信路４を介してＰＣ１に送信する。また、送信部２０６は、各処理で用いられるＩ／Ｏインタフェース２５を、当該処理と対応付けて、ツールインタフェース２４および通信路４を介してＰＣ１に送信する。
【００３４】
次に、ＰＣ１の構成について説明する。図４は、本実施形態にかかるＰＣ１のハードウェア構成の一例を示す図である。図４に示すようにＰＣ１は、入力装置１２と、ＣＰＵ１３と、メモリ１４と、ＨＤＤ（Hard  Disk  Drive）１５と、ディスプレイ（モニタ）１６と、通信インタフェース１７と、バス１８とを備える。
【００３５】
入力装置１２は、例えばキーボードやマウス、タッチパネル等であり、ユーザの操作を受け付ける装置である。
【００３６】
ＣＰＵ１３は、ＰＣ１の全体的な制御を行う制御装置である。例えば、ＣＰＵ１３は、メモリ１４に記憶されているプログラム等を実行することで、様々な構成を実現する。メモリ１４は、読み出し可能なデータを記憶するメモリであり、例えばＲＯＭである。また、ＰＣ１は、書込み可能なＲＡＭ等のメモリをさらに備える構成を採用しても良い。
【００３７】
ＨＤＤ１５は、外部記憶装置（補助記憶装置）である。ＰＣ１は、ＨＤＤ１５の代わりに、フラッシュメモリ等の記憶媒体を備える構成を採用しても良い。
【００３８】
ディスプレイ１６は、液晶パネル等からなる表示装置であり、本実施形態における表示部の一例である。通信インタフェース１７は、通信路４を介してコントローラ２との間で情報の送受信を行うためのインタフェースである。また、バス１８は、ＰＣ１の内部のデータ伝送路である。図４に示すＰＣ１の構成は一例であり、一般的なコンピュータの機能を備えるものであれば良い。
【００３９】
次に、ＰＣ１の機能的構成について説明する。図５は、本実施形態にかかるＰＣ１の機能的構成の一例を示すブロック図である。図５に示すように、ＰＣ１で稼働するソフトウェアであるエンジニアリングツール１１は、受付部１０１と、プログラム生成部１０２と、コンパイラ１０３と、分割部１０４と、設定データ生成部１０５と、割当て変更部１０６と、表示制御部１０７と、送受信部１０８とを備える。また、ＰＣ１は、記憶部１５０を備える。
【００４０】
記憶部１５０は、例えばＨＤＤ１５によって構成される。あるいは、記憶部１５０は、ＲＡＭ等の書き込み可能な記憶媒体によって構成されるものとしても良い。記憶部１５０は、実行形式のアプリケーションプログラム３１１と、設定データ生成部１０５が生成した設定データ３１０とを記憶する。また、記憶部１５０が記憶するアプリケーションプログラム３１１は、ＰＣ１のプログラム生成部１０２が生成したものに限らない。例えば、他のエンジニアリングツールが生成したアプリケーションプログラム３１１を記憶する構成を採用しても良い。
【００４１】
受付部１０１は、ユーザの操作を、入力装置１２を介して受け付ける。例えば、受付部１０１は、後述の表示制御部１０７が、ディスプレイ１６に表示した複数の処理のうちのいずれかの割当てを、コアＡ３０１またはコアＢ３０２の一方から他方へ変更するドラッグアンドドロップ操作を受け付ける。
【００４２】
プログラム生成部１０２は、受付部１０１からユーザの操作内容を取得しコントローラ２で実行するためのアプリケーションプログラム３１１を生成する。例えば、プログラム生成部１０２は、ユーザがディスプレイ１６に表示されたファンクションブロック図や、ラダー図等を操作して設定した内容を、受付部１０１から取得し、アプリケーションプログラム３１１に変換する。ユーザは、ファンクションブロック図や、ラダー図等を操作することにより、プラントを制御するための制御プロセスと、制御内容とを入力する。
【００４３】
本実施形態における制御プロセスは、プラントの制御における工程と、各工程に含まれる作業とを含む。また、本実施形態における制御内容は、各工程の実行順序および制御方法等の定義である。例えば、コントローラ２が定められた順序で各工程を逐次進めるアプリケーションプログラム３１１を生成する場合、ユーザは、シーケンス制御として各工程の実行順序を設定する。また、コントローラ２が定められた工程または作業を繰り返すアプリケーションプログラム３１１を生成する場合、ユーザは、ループ制御として各工程または作業の実行順序を設定する。１つのアプリケーションプログラム３１１内に、シーケンス制御とループ制御とが混在しても良い。また、シーケンス制御とループ制御とに限らず、他の種類の制御を設定可能な構成を採用しても良い。プログラム生成部１０２は、ユーザの操作内容を受付部１０１から取得し、アプリケーションプログラム３１１に変換する。
【００４４】
コンパイラ１０３は、プログラム生成部１０２が生成したアプリケーションプログラム３１１を、コントローラ２が実行可能な形式に変換する。コンパイラ１０３は、コンパイル済みのアプリケーションプログラム３１１、すなわち実行形式のアプリケーションプログラム３１１を、記憶部１５０に保存する。
【００４５】
分割部１０４は、実行形式のアプリケーションプログラム３１１を、複数の処理に分割する。例えば、分割部１０４は、アプリケーションプログラム３１１を実行した場合におけるプロセスを複数のスレッドで実行させるための処理単位に、アプリケーションプログラム３１１を分割する。処理の分割単位は一例であり、これに限らない。分割部１０４は、アプリケーションプログラム３１１の分割結果を、設定データ生成部１０５に送出する。
【００４６】
また、アプリケーションプログラム３１１は、プログラム生成部１０２が生成したものに限らない。例えば、分割部１０４は、他のエンジニアリングツールで生成したアプリケーションプログラム３１１を記憶部１５０から取得して、複数の処理に分割する構成を採用しても良い。本実施形態では、コンパイラ１０３と分割部１０４とを分けているが、これに限らない。例えば、コンパイラ１０３が処理の分割も行う構成を採用しても良い。
【００４７】
設定データ生成部１０５は、アプリケーションプログラム３１１に含まれる複数の処理の情報を含む設定データ３１０を生成する。例えば、設定データ生成部１０５は、図３（ａ）に示すように、分割部１０４から、分割した各処理を特定可能な定義情報を取得し、定義ファイル３１３ａに登録する。また、設定データ生成部１０５は、アプリケーションプログラム３１１から、各処理で用いられるＩ／Ｏインタフェース２５を特定する情報を取得し、各処理を特定可能な定義情報と紐づけて、定義ファイル３１３ａに登録する。
【００４８】
また、設定データ生成部１０５は、複数の処理のうち、異なるコアＡ３０１またはコアＢ３０２に割当てることができない複数の処理である分離不可処理の組み合わせの情報を定義ファイル３１３ａに登録する。分離不可処理の例としては、ループ制御を行うアプリケーションプログラム３１１において、同一のループに含まれる処理がある。この他にも、設定データ生成部１０５は、処理の前後関係等の理由で、異なるコアＡ３０１またはコアＢ３０２に割当てることができない処理の組み合わせを、分離不可処理として定義ファイル３１３ａに登録する構成を採用しても良い。
【００４９】
また、設定データ生成部１０５は、図３（ｂ）に示すように、コアＡ３０１またはコアＢ３０２に割当てられる処理に対応付けられるＩ／Ｏインタフェース２５の上限数を、定義ファイル３１３ｂに登録しても良い。また、設定データ生成部１０５は、図３（ｂ）に示すように、特定のコアＡ３０１またはコアＢ３０２へ割当て不可のＩ／Ｏインタフェース２５を、定義ファイル３１３ｂに登録しても良い。設定データ生成部１０５は、例えば、受付部１０１から、ユーザが入力したＩ／Ｏインタフェース２５の上限数、および割当て不可インタフェースを入力値を取得して、定義ファイル３１３ｂに登録する。
【００５０】
送受信部１０８は、通信インタフェース１７および通信路４を介して、コントローラ２との間で情報およびデータを送受信する。例えば、送受信部１０８は、コンパイラ１０３がコンパイルしたアプリケーションプログラム３１１と、設定データ生成部１０５が生成した設定データ３１０とを、コントローラ２に送信する。
【００５１】
また、送受信部１０８は、コントローラ２でアプリケーションプログラム３１１が起動された場合に、コアＡ３０１およびコアＢ３０２ごとの動作状態を、コントローラ２から受信する。具体的には、送受信部１０８は、コントローラ２から、複数の処理をコアＡ３０１およびコアＢ３０２のそれぞれに割当てた結果、および、Ｉ／Ｏインタフェース２５と各処理との対応付けを受信（取得）する。
【００５２】
表示制御部１０７は、ディスプレイ１６の表示内容を制御する。例えば、表示制御部１０７は、ユーザがアプリケーションプログラム３１１を生成するために使用するファンクションブロック図や、ラダー図をディスプレイ１６に表示する。また、例えば、表示制御部１０７は、送受信部１０８から、コントローラ２における複数の処理の、コアＡ３０１およびコアＢ３０２への割当てと、各処理とＩ／Ｏインタフェース２５の対応付けとを取得し、ディスプレイ１６に表示する。言い換えれば、表示制御部１０７は、コントローラ２のコアＡ３０１およびコアＢ３０２の動作状態を監視し、必要に応じて処理の割当てを変更するためのモニタリング画面をユーザに提供する。
【００５３】
表示制御部１０７がディスプレイ１６に表示させる内容について、図６を用いて説明する。図６は、本実施形態にかかるモニタリング画面の一例を示す図である。図６（ａ）（ｂ）はそれぞれディスプレイ１６上に表示されたＧＵＩ（Graphical  User  Interface）の画面である。図６（ａ）は、コントローラ２の割当部２０２が複数の処理をコアＡ３０１およびコアＢ３０２に割当てた結果を示す画面であり、図６（ｂ）は、ユーザによって変更された割当てを示す画面である。
【００５４】
また、図６に示す画面に表示される処理Ａ〜Ｄは、分割部１０４が分割した、アプリケーションプログラム３１１に含まれる複数の処理の一例を示す画像である。処理Ａ〜Ｄは、アプリケーションプログラム３１１の起動後にコアＡ３０１またはコアＢ３０２に割当てられた、実行中あるいは実行準備中の処理である。処理Ａ〜Ｄは、それぞれ処理が終了すると、画面から順次削除される。また、アプリケーションプログラム３１１に含まれる他の処理がコアＡ３０１またはコアＢ３０２に割当てられると、画面に新たに表示される。このため、図６に示す画面は、アプリケーションプログラム３１１の進行に伴って、表示される処理が変化する。また、図６のＩ／Ｆ＃１〜＃３は、複数のＩ／Ｏインタフェース２５ａ〜ｃを示す画像である。
【００５５】
図６に示すように、本実施形態の表示制御部１０７は、処理Ａ〜Ｄと、処理Ａ〜Ｄで用いられるＩ／Ｏインタフェース２５ａ〜ｃとを対応付けてディスプレイ１６に表示する。表示制御部１０７は、処理とＩ／Ｏインタフェース２５との対応付けを、コントローラ２の送信部２０６が送信した情報を送受信部１０８から取得する。あるいは、表示制御部１０７は、処理とＩ／Ｏインタフェース２５との対応付けを記憶部１５０に保存された設定データ３１０から読み出して表示する構成を採用しても良い。
【００５６】
表示制御部１０７は、ユーザの操作に応じてディスプレイ１６上の表示を変更する。例えば、表示制御部１０７は、複数の処理のうちのいずれかの割当てを、コアＡ３０１またはコアＢ３０２の一方から他方へ変更するユーザの操作を、受付部１０１から取得した場合に、ディスプレイ１６上の表示を変更する。ユーザの操作とは、例えばドラッグアンドドロップ操作であるが、これに限らない。
【００５７】
例えば、図６（ａ）に示す例では、コアＡ３０１に処理Ａおよび処理Ｂが割当てられ、コアＢ３０２に処理Ｃおよび処理Ｄが割当てられている。ここで、ユーザが処理ＢをコアＡ３０１からコアＢ３０２に移動するドラッグアンドドロップ操作を受付部１０１が受け付けた場合、表示制御部１０７は、ディスプレイ１６上の表示を図６（ｂ）のように変更する。すなわち、図６（ｂ）に示すように、ディスプレイ１６上では、コアＡ３０１に処理Ａが割当てられ、コアＢ３０２に処理Ｂ、処理Ｃおよび処理Ｄが割当てられているように表示が変更される。また、処理Ｂに対応付けられたＩ／Ｆ＃２（Ｉ／Ｏインタフェース２５ｂ）も、処理Ｂの移動に伴ってコアＢ３０２へ移動する。
【００５８】
また、表示制御部１０７は、受付部１０１が、分離不可処理を分離する割当て変更の操作を受け付けた場合は、ディスプレイ１６上に警告を表示する。ユーザの操作が分離不可処理を分離する割当て変更の操作であるか否かは、後述の割当て変更部１０６が確認し、表示制御部１０７に通知をする。図７は、本実施形態にかかる警告表示の一例を示す図である。コアＡ３０１に割当てられた処理Ｘおよび処理Ｙは、分離不可処理として設定データ３１０に登録されている。ディスプレイ１６上で処理ＹをコアＢ３０２に移動する操作を受付部１０１が受け付けると、表示制御部１０７は、ディスプレイ１６上に警告を表示する。
【００５９】
警告の例として、表示制御部１０７は、図７に示すメッセージ９０１のように「Ｗａｒｎｉｎｇ  処理ＹをコアＢに設定不可」等と表示する。あるいは、表示制御部１０７は、図７に示す処理Ｙの移動先のコアＢ３０２の周辺に、記号９００のように当該操作が不適切である旨を示す「／（スラッシュ）」等の記号を表示する。メッセージ９０１、記号９００は警告表示の一例であり、これに限定しない。また、分離不可処理の組み合わせに含まれる複数の処理を全て移動する場合は、表示制御部１０７は、当該警告は表示しない構成を採用しても良い。例えば、処理Ｘと処理Ｙとを共にコアＡ３０１からコアＢ３０２に移動する場合は、表示制御部１０７は、当該警告は表示しない。
【００６０】
この他に、表示制御部１０７は、割当て変更部１０６が不適切な操作であると判断した場合には、ディスプレイ１６に警告を表示する。
【００６１】
図５に戻り、割当て変更部１０６は、受付部１０１が受け付けたユーザの操作に応じて、コアＡ３０１およびコアＢ３０２への処理の割当てを変更する。図６（ｂ）で説明したように、ユーザが、処理ＢをコアＡ３０１からコアＢ３０２に移動する操作をした場合、割当て変更部１０６は、記憶部１５０に記憶された設定データ３１０に対して、変更後の処理の割当ての情報を追加する。例えば、割当て変更部１０６は、図６（ｂ）に示すように、コアＡ３０１には処理Ａを割当て、コアＢ３０２には処理Ｂ〜Ｄを割当てることを、設定データ３１０に追加する。
【００６２】
本実施形態においては、割当て変更部１０６は、処理の割当てを変更する場合に、アプリケーションプログラム３１１自体ではなく、設定データ３１０を更新するため、アプリケーションプログラム３１１を修正および再コンパイルすることなく、割当てを変更することができる。
【００６３】
また、割当て変更部１０６は、設定データ３１０を更新する前に、ユーザの操作による割当ての変更が適切であるかを確認する。例えば、割当て変更部１０６は、受付部１０１が、分離不可処理を分離する割当て変更の操作を受け付けた場合は、当該割当てを変更しない。また、割当て変更部１０６は、分離不可処理を分離する割当て変更の操作を受け付けた場合に、表示制御部１０７に通知をする。
【００６４】
また、割当て変更部１０６は、コアＡ３０１およびコアＢ３０２のそれぞれに割当てられるＩ／Ｏインタフェース２５の上限数を超える場合や、割当て不可のＩ／Ｏインタフェース２５を割当てる操作を受け付けた場合、当該操作は不適切であると判断する。このような場合に、割当て変更部１０６は、割当てを変更しない。また、割当て変更部１０６は、表示制御部１０７に通知をする。
【００６５】
次に、以上のように構成された本実施形態のＰＣ１における、アプリケーションプログラム３１１および設定データ３１０の生成処理について説明する。図８は、本実施形態にかかるアプリケーションプログラム３１１および設定データ３１０の生成処理の流れの一例を示すフローチャートである。図８のフローチャートの処理は、ＰＣ１で行われる。
【００６６】
まず、受付部１０１は、ユーザが入力した制御プロセスおよび制御内容を受け付ける（Ｓ１）。受付部１０１は、受け付けた制御プロセスおよび制御内容を、プログラム生成部１０２に送出する。
【００６７】
プログラム生成部１０２は、受付部１０１からユーザが入力した制御プロセスおよび制御内容を取得して、コントローラ２で実行するためのアプリケーションプログラム３１１を生成する（Ｓ２）。プログラム生成部１０２は、生成したアプリケーションプログラム３１１を、コンパイラ１０３に送出する。
【００６８】
コンパイラ１０３は、プログラム生成部１０２が生成したアプリケーションプログラム３１１をコンパイルする（Ｓ３）。コンパイラ１０３は、実行形式のアプリケーションプログラム３１１を、記憶部１５０に保存する。
【００６９】
分割部１０４は、実行形式のアプリケーションプログラム３１１を、複数の処理に分割する（Ｓ４）。
【００７０】
設定データ生成部１０５は、分割部１０４が分割した処理ごとの定義情報を含む設定データ３１０を生成する（Ｓ５）。この時点では、設定データ３１０は、各処理を特定可能な定義情報と、各処理で用いられるＩ／Ｏインタフェース２５を特定する情報と、分離不可処理の組み合わせの情報と、を含む。設定データ生成部１０５は、生成した設定データ３１０を、記憶部１５０に保存する。
【００７１】
送受信部１０８は、実行形式のアプリケーションプログラム３１１、および設定データ３１０を、コントローラ２へ送信する（Ｓ６）。
【００７２】
次に、以上のように構成された本実施形態のコントローラ２における制御処理について説明する。図９は、本実施形態にかかるコントローラ２による制御処理の流れの一例を示すフローチャートである。
【００７３】
入力部２０１は、実行形式のアプリケーションプログラム３１１および設定データ３１０を、ＰＣ１から、ツールインタフェース２４を介して入力する（Ｓ１０）。入力部２０１は、入力したアプリケーションプログラム３１１および設定データ３１０を記憶部２５０に保存する。
【００７４】
実行部２０３は、記憶部２５０に記憶された実行形式のアプリケーションプログラム３１１を起動する（Ｓ１１）。
【００７５】
割当部２０２は、アプリケーションプログラム３１１に含まれる処理のうち、実行対象の処理を設定データ３１０から逐次検索し、コアＡ３０１またはコアＢ３０２に割当てる。実行部２０３は、割当てられたコアＡ３０１またはコアＢ３０２で、設定データ３１０に登録された各処理を実行する（Ｓ１２）。
【００７６】
送信部２０６は、コアＡ３０１およびコアＢ３０２ごとの動作状態、すなわちコアＡ３０１およびコアＢ３０２への処理の割当て、および、各処理に紐付くＩ／Ｏインタフェース２５を、ＰＣ１へ送信する（Ｓ１３）。ここで、ＰＣ１のエンジニアリングツール１１では、図１０に示すモニタリング処理が行われ、場合によってコアＡ３０１およびコアＢ３０２への処理の割当てが変更される。本実施形態におけるモニタリング処理の詳細は後述する。
【００７７】
ＰＣ１のエンジニアリングツール１１で、コアＡ３０１およびコアＢ３０２への処理の割当てが変更された場合、入力部２０１は、変更後の割当ての情報が追加された設定データ３１０を入力する。入力部２０１は、更新された設定データ３１０を、記憶部２５０に保存する。入力部２０１は、記憶部２５０に記憶された設定データ３１０を、更新された設定データ３１０で上書きしても良い。
【００７８】
電源制御部２０５は、入力部２０１が、更新された設定データ３１０を受信したか否かを判断する（Ｓ１４）。入力部２０１が、更新された設定データ３１０を受信した場合（Ｓ１４“Ｙｅｓ”）、電源制御部２０５は、コントローラ２をリブートする（Ｓ１５）。
【００７９】
更新部２０４は、リブート後に、更新された設定データ３１０に基づいてコアＡ３０１およびコアＢ３０２への処理の割当てを更新する（Ｓ１６）。実行部２０３は、コアＡ３０１およびコアＢ３０２への更新された割当てに基づいて、リブート前に実行していた処理を再実行する（Ｓ１７）。
【００８０】
処理が再実行されると、Ｓ１３の処理に戻り、送信部２０６は、コアＡ３０１およびコアＢ３０２ごとの動作状態をＰＣ１へ送信する（Ｓ１３）。処理実行中にコアＡ３０１およびコアＢ３０２への割当てが変更される度に、コントローラ２の各機能部は、Ｓ１３〜Ｓ１７の処理を繰り返す。
【００８１】
入力部２０１が、更新された設定データ３１０を受信しない場合（Ｓ１４“Ｎｏ”）、アプリケーションプログラム３１１の全ての処理が終了するまでは、実行部２０３が次の処理を順次実行する（Ｓ１８“Ｎｏ”、Ｓ１９）。次の処理が実行されると、Ｓ１３の処理に戻り、送信部２０６は、コアＡ３０１およびコアＢ３０２ごとの動作状態をＰＣ１へ送信する（Ｓ１３）。アプリケーションプログラム３１１に含まれる全ての処理が終了すると（Ｓ１８“Ｙｅｓ”）、当該フローチャートの処理は終了する。
【００８２】
次に、ＰＣ１で実行されるモニタリング処理について説明する。図１０は、本実施形態にかかるモニタリング処理の流れの一例を示すフローチャートである。このフローチャートの処理は、図９のＳ１３でコアＡ３０１およびコアＢ３０２の動作状態がコントローラ２からＰＣ１へ送信された場合に、開始する。
【００８３】
送受信部１０８は、コントローラ２から、コアＡ３０１およびコアＢ３０２ごとの動作状態、すなわち、コアＡ３０１およびコアＢ３０２への処理の割当て、および、各処理に紐付くＩ／Ｏインタフェース２５を、複数の処理をコアＡ３０１およびコアＢ３０２のそれぞれに割当てた結果を受信する（Ｓ１００）。
【００８４】
表示制御部１０７は、図６（ａ）に示すように、コントローラ２のコアＡ３０１およびコアＢ３０２ごとの動作状態をディスプレイ１６に表示する（Ｓ１０１）。表示制御部１０７は、ディスプレイ１６に、コアＡ３０１およびコアＢ３０２に対する処理Ａ〜Ｄの割当て、および処理Ａ〜Ｄに対応付けられたＩ／Ｏインタフェース２５ａ〜ｃを表示し、ユーザに対してコントローラ２の動作状態をモニタリングする画面を提供する。
【００８５】
受付部１０１が、コアＡ３０１およびコアＢ３０２への処理の割当ての変更する操作をユーザから受け付けた場合（Ｓ１０２“Ｙｅｓ”）、割当て変更部１０６および表示制御部１０７が、割当て変更処理（Ｓ１０３）を実行する。
【００８６】
図１１は、本実施形態にかかる割当て変更処理（Ｓ１０３）の流れの一例を示すフローチャートである。まず、受付部１０１は、ユーザの操作内容を付ける（Ｓ２０１）。すなわち、受付部１０１は、コアＡ３０１またはコアＢ３０２に割当てられた処理のいずれかに対して、ディスプレイ１６の画面上で移動する操作が入力されたことを受け付ける。受付部１０１は、割当て変更部１０６および表示制御部１０７に、移動対象の処理と、当該処理がコアＡ３０１またはコアＢ３０２のどちらからどちらへ移動されたかを送出する。
【００８７】
割当て変更部１０６は、変更対象の処理は、現在のコアＡ３０１またはコアＢ３０２に割当てられた他の処理と分離可能か否かを判断する（Ｓ２０２）。図６に示す例では、割当て変更部１０６は、コアＡ３０１に割当てられた処理Ｂが、同じくコアＡ３０１に割当てられた処理Ａと分離可能か否かを、判断する。割当て変更部１０６は、各処理が分離可能か否かを、記憶部１５０の設定データ３１０に分離不可処理として登録されているか否かによって判断する。
【００８８】
割当て変更部１０６は、変更対象の処理を、分離可能な処理であると判断した場合（Ｓ２０２“Ｙｅｓ”）、当該変更対象の処理の割当てを変更し、記憶部１５０に記憶された設定データ３１０を更新する（Ｓ２０３）。また、割当て変更部１０６は、表示制御部１０７に当該変更対象の処理の割当ては変更可能であることを通知する。表示制御部１０７は、ユーザの操作に応じて、画面上の各処理の表示を変更する。図６に示す例では、表示制御部１０７は、処理Ｂの割当てを、コアＡ３０１からコアＢ３０２へ移動する。
【００８９】
一方、割当て変更部１０６は、変更対象の処理を、分離不可処理であると判断した場合（Ｓ２０２“Ｎｏ”）、表示制御部１０７に、当該変更対象の処理Ｂの割当ては変更不可であることを通知する。表示制御部１０７は、図７で説明したように、ディスプレイ１６上に警告を表示する（Ｓ２０４）。この場合、処理の割当ては変更されない。
【００９０】
ここで図１１のフローチャートの割当て変更処理が終了し、図１０のモニタリング処理に戻る。割当て変更部１０６は、コアＡ３０１およびコアＢ３０２への処理の割当てを変更した場合（Ｓ１０４“Ｙｅｓ”）、変更したことを送受信部１０８に通知する。送受信部１０８は、更新された設定データ３１０を、コントローラ２へ送信する（Ｓ１０５）。
【００９１】
ここで、図１０に示すモニタリング処理は終了する。Ｓ１０５で、送受信部１０８が、更新された設定データ３１０をコントローラ２へ送信した後は、コントローラ２側で図９のＳ１４の受信処理が行われる。
【００９２】
このように本実施形態のコントローラ２においては、割当部２０２が、コアＡ３０１およびコアＢ３０２のそれぞれに対して、複数の処理のいずれかを割当てる。また、本実施形態のコントローラ２によれば、変更後の割当ての情報が追加された設定データ３１０を入力部２０１が入力した場合に、電源制御部２０５がコントローラ２を再起動すると、実行部２０３が、変更後の割当てに基づいて各処理を実行する。このように、本実施形態のコントローラ２によれば、更新された設定データ３１０を入力後に再起動することで処理の割当てを変更することができる。すなわち、本実施形態のコントローラ２によれば、処理の実行中にコアＡ３０１およびコアＢ３０２への割当てを変更して、再度処理を実行することができる。このため、本実施形態のコントローラ２によれば、実際の稼動状況に合わせてコアＡ３０１およびコアＢ３０２への処理の割当てを迅速に変更することができ、コアＡ３０１およびコアＢ３０２への処理の割当てをより柔軟に変更することができる。
【００９３】
また、本実施形態のコントローラ２によれば、割当部２０２が、コアＡ３０１およびコアＢ３０２のそれぞれに対して、複数の処理のいずれかを割当てるため、処理の割当てがアプリケーションプログラム３１１によって固定されず、同一のアプリケーションプログラム３１１を他のコントローラ２に適用することが可能となる。
【００９４】
また、本実施形態のＰＣ１によれば、本実施形態の割当て変更部１０６は、受付部１０１が受け付けたユーザの操作に応じて、設定データ３１０を更新して割当てを変更する。このように、本実施形態の割当て変更部１０６は、処理の割当てを変更する場合に、アプリケーションプログラム３１１自体ではなく、設定データ３１０を更新するため、アプリケーションプログラム３１１を再コンパイルすることなく、動的かつ迅速に割当てを変更することができる。このため、本実施形態のＰＣ１によれば、コアＡ３０１およびコアＢ３０２への処理の割当てをより柔軟に変更することができる。
【００９５】
また、本実施形態のＰＣ１の設定データ生成部１０５が生成する設定データ３１０は、分離不可処理の組み合わせの情報を含み、割当て変更部１０６は、受付部１０１が分離不可処理を分離する割当て変更の操作を受け付けた場合に、当該割当てを変更しない。このため、本実施形態のＰＣ１によれば、コアＡ３０１およびコアＢ３０２に対して不適切な処理の割当てが行われることを防止することができる。
【００９６】
また、本実施形態のＰＣ１の設定データ生成部１０５が生成する設定データ３１０は、各処理とＩ／Ｏインタフェース２５とを対応付けた情報を含み、表示制御部１０７は、各処理とＩ／Ｏインタフェース２５とを対応付けてディスプレイ１６に表示する。このため、本実施形態のＰＣ１によれば、ユーザが処理の割当てを変更する際に、同一のＩ／Ｏインタフェース２５に対応付けられた処理を、異なるコアＡ３０１またはコアＢ３０２に割当てることを抑制することができる。
【００９７】
また、本実施形態のＰＣ１の受付部１０１は、ディスプレイ１６に表示された複数の処理のうちのいずれかの割当てを、コアＡ３０１またはコアＢ３０２一方から他方へ変更するドラッグアンドドロップ操作を受け付け、割当て変更部１０６は、受付部１０１が受け付けた割当ての変更内容に応じて、設定データ３１０を更新する。このため、本実施形態のＰＣ１によれば、簡易な操作で処理の割当てを変更することができる画面を、ユーザに対して提供することができる。
【００９８】
本実施形態では、エンジニアリングツール１１はＰＣ１が備えるソフトウェアであるとしたが、これに限らない。例えば、エンジニアリングツール１１はコントローラ２に接続可能な、専用の管理装置であっても良い。あるいは、エンジニアリングツール１１とコントローラ２とは、一体的に形成された１つの装置であっても良い。
【００９９】
本実施形態では、コントローラ２の割当部２０２は、コアＡ３０１およびコアＢ３０２に処理を割当てた後に、コアＡ３０１およびコアＢ３０２に対する処理の割当ての情報を、設定データ３１０に追加する構成としたが、これに限らない。例えば、割当部２０２は、コアＡ３０１およびコアＢ３０２に処理を割当てた結果を保存せず、アプリケーションプログラム３１１が実行される度に新規に割当てを行う構成を採用しても良い。当該構成を採用する場合、ＰＣ１の割当て変更部１０６が、コアＡ３０１およびコアＢ３０２への処理の割当てを指定した場合にのみ、当該割当てが設定データ３１０に保存され、次回以降の実行の際に適用される構成としても良い。
【０１００】
（実施形態２）
実施形態１の制御システムＳでは、コアＡ３０１およびコアＢ３０２ごとに、割り当てられた処理と当該処理が用いるＩ／Ｏインタフェース２５とを対応付けてディスプレイ１６に表示していた。本実施形態の制御システムＳは、さらに、各処理によってコアＡ３０１およびコアＢ３０２にかかる負荷の度合を、ＰＣ１のディスプレイ１６に表示する。
【０１０１】
図１２は、本実施形態にかかるコントローラ２の機能的構成の一例を示すブロック図である。図１２に示すように、本実施形態のコントローラ２は、入力部２０１と、割当部２０２と、実行部２０３と、更新部２０４と、電源制御部２０５と、送信部１２０６と、負荷検出部２０７と、記憶部２５０とを備える。入力部２０１と、割当部２０２と、実行部２０３と、更新部２０４と、電源制御部２０５と、記憶部２５０とは、実施形態１と同様の構成である。
【０１０２】
負荷検出部２０７は、コアＡ３０１およびコアＢ３０２の負荷の度合を、各処理ごとに検出する。負荷検出部２０７は、コアＡ３０１およびコアＢ３０２ごとの負荷の度合を、単位時間当たりに占める各処理の実行時間の割合から算出する。例えば、単位時間を１０ｍｓとした場合に、コアＡ３０１に割当てられた処理Ａの実行時間が８ｍｓであった場合は、コアＡ３０１における処理Ａの実行時間の割合は８０％となる。単位時間は一定の周期であれば良く、１０ｍｓに限らない。また、負荷検出部２０７は、コアＡ３０１およびコアＢ３０２の負荷の度合を、メモリアクセス回数から算出する構成を採用しても良い。負荷検出部２０７は、検出した負荷の度合を示す負荷情報を、送信部１２０６に送出する。
【０１０３】
送信部１２０６は、コアＡ３０１およびコアＢ３０２ごとの動作状態および負荷情報を、ＰＣ１へ送信する。
【０１０４】
図１３は、本実施形態にかかるＰＣ１の機能的構成の一例を示すブロック図である。図１３に示すように、ＰＣ１で稼働するソフトウェアであるエンジニアリングツール１１は、受付部１０１と、プログラム生成部１０２と、コンパイラ１０３と、分割部１０４と、設定データ生成部１０５と、割当て変更部１０６と、表示制御部１１０７と、送受信部１１０８とを備える。また、ＰＣ１は、記憶部１５０を備える。受付部１０１と、プログラム生成部１０２と、コンパイラ１０３と、分割部１０４と、設定データ生成部１０５と、割当て変更部１０６と、記憶部１５０とは、実施形態１と同様の構成である。
【０１０５】
送受信部１１０８は、実施形態１と同様に、コンパイラ１０３がコンパイルしたアプリケーションプログラム３１１と、設定データ生成部１０５が生成した設定データ３１０とを、コントローラ２に送信する。また、送受信部１１０８は、コントローラ２でアプリケーションプログラム３１１が起動された場合に、コアＡ３０１およびコアＢ３０２ごとの動作状態に加えて、負荷状態を、コントローラ２から受信する。
【０１０６】
表示制御部１１０７は、送受信部１１０８から、コントローラ２におけるコアＡ３０１およびコアＢ３０２への複数の処理の割当てと、負荷情報とを取得し、ディスプレイ１６に表示する。言い換えれば、表示制御部１１０７は、コントローラ２のコアＡ３０１およびコアＢ３０２の動作状態および負荷情報を監視し、必要に応じて処理の割当てを変更するためのモニタリング画面をユーザに提供する。
【０１０７】
図１４は、本実施形態にかかるモニタリング画面の一例を示す図である。図１４（ａ）は、ユーザによる処理の割当てが変更される前の画面を示し、図１４（ｂ）は、ユーザによる処理の割当てが変更された後の画面を示す。図１４に示すように、本実施形態におけるモニタリング画面は、制御プロセス全体を示す画像５００と、コアＡ３０１およびコアＢ３０２に割当てられた、実行済みまたは実行中の処理を表示する画像とを含む。それぞれの画像は、横軸が時間、縦軸が負荷の度合を示す。処理Ａ〜Ｄは実行順に、各画像の左側から右側へ時系列に表示される。各処理の横幅は単位時間を示し、例えば１０ｍｓとする。各処理の横幅は一定の周期の時間であれば良く、１０ｍｓに限らない。
【０１０８】
図１４（ａ）では、コアＡ３０１には処理Ａおよび処理Ｄが割当てられ、コアＢ３０２には処理Ｂおよび処理Ｃが割当てられている。しかしながら、処理Ｂおよび処理Ｃは同一の単位時間内で実行されるため、当該単位時間において、コアＢ３０２における負荷の度合がコアＡ３０１と比較して高くなっている。
【０１０９】
このような場合に、ユーザがディスプレイ１６上で処理ＣをコアＢ３０２からコアＡ３０１に移動する操作をしたことを受付部１０１が受け付けると、割当て変更部１０６は処理Ｃの割当てを変更する。表示制御部１１０７は、ユーザによる操作に応じて、ディスプレイ１６上の処理Ｃの割当てを、コアＡ３０１へ変更して表示する。また、図１４（ｂ）の例では、処理Ｃの移動によってコアＡ３０１の全体の負荷が高くなるので、ユーザは、さらに処理ＤをコアＢ３０２に移動している。本実施形態では、各処理Ａ〜Ｄごとの、コアＡ３０１およびコアＢ３０２の負荷情報が表示されるため、ユーザに対して、より効率の良い処理の割当てを行うための情報を提供することができる。
【０１１０】
本実施形態の表示制御部１１０７は、コアＡ３０１およびコアＢ３０２の負荷の度合を、横軸が時間、縦軸が負荷の度合を示すグラフで示しているが、これに限らない。例えば、表示制御部１１０７は、各処理ごとに負荷の度合を数値で表しても良いし、“低”“中”“高”のように段階的に表現しても良い。
【０１１１】
表示制御部１１０７は、処理Ａ〜Ｄの終了後、所定の時間が経過するとディスプレイ１６の表示から順次削除するものとしても良い。また、表示制御部１１０７は、コアＡ３０１およびコアＢ３０２に割当てられた実行準備状態の処理も、ディスプレイ１６上に表示しても良い。
【０１１２】
また、図１４では、処理Ａ〜Ｄに対応付けられたＩ／Ｏインタフェース２５は不図示であるが、表示制御部１１０７は、処理Ａ〜Ｄの負荷の度合を示すグラフ内に、処理Ａ〜Ｄに対応付けられたＩ／Ｏインタフェース２５を表示する構成を採用しても良い。あるいは、図６で説明した実施形態１のモニタリング画面と、図１４に示すモニタリング画面とを、ユーザが任意に切り替えることができる構成を採用しても良い。
【０１１３】
以上のように構成された本実施形態のＰＣ１における、アプリケーションプログラム３１１および設定データ３１０の生成処理は、図８で説明した実施形態１のフローチャートと同様である。
【０１１４】
図１５は、本実施形態にかかる制御処理の全体の流れの一例を示すフローチャートである。Ｓ１０のアプリケーションプログラム３１１および設定データ３１０の入力から、Ｓ１２の処理のコアＡ３０１およびコアＢ３０２への割当ておよび実行までは、図９で説明した実施形態１の処理の流れと同様である。
【０１１５】
処理の実行が開始されると（Ｓ１２）、負荷検出部２０７は、コアＡ３０１およびコアＢ３０２ごとの、各処理の負荷情報を検出する（Ｓ２３）。
【０１１６】
送信部１２０６は、コアＡ３０１およびコアＢ３０２ごとの動作状態と負荷情報を、ＰＣ１へ送信する（Ｓ２４）。ここで、ＰＣ１のエンジニアリングツール１１では、図１６に示すモニタリング処理が行われ、場合によってコアＡ３０１およびコアＢ３０２への処理の割当てが変更される。本実施形態におけるモニタリング処理の詳細は後述する。
【０１１７】
Ｓ１４の更新された設定データ３１０の受信の有無の判断から、Ｓ１９の次の処理の続行については、図９で説明した実施形態１の処理の流れと同様である。実施形態１と同様に、アプリケーションプログラム３１１に含まれる全ての処理が終了すると（Ｓ１８“Ｙｅｓ”）、このフローチャートの処理は終了する。
【０１１８】
次に、本実施形態のＰＣ１で実行されるモニタリング処理について説明する。図１６は、本実施形態にかかるモニタリング処理の流れの一例を示すフローチャートである。
【０１１９】
このフローチャートの処理は図１５のＳ２４でコアＡ３０１およびコアＢ３０２ごとの動作状態と負荷情報が、コントローラ２からＰＣ１へ送信された場合に、開始する。
【０１２０】
送受信部１１０８は、コントローラ２から、コアＡ３０１およびコアＢ３０２ごとの動作状態と負荷情報を受信する（Ｓ１２０）。
【０１２１】
表示制御部１１０７は、図１４（ａ）に示すように、コントローラ２のコアＡ３０１およびコアＢ３０２ごとの動作状態をディスプレイ１６に表示する（Ｓ１２１）。
【０１２２】
Ｓ１０２の、ユーザによる割当て変更の操作の受け付けの有無の判断から、Ｓ１０５の更新された設定データ３１０の送信までは、図１０で説明した実施形態１の処理の流れと同様である。
【０１２３】
このように、本実施形態におけるＰＣ１によれば、送受信部１１０８は、複数の処理によってコントローラ２のコアＡ３０１およびコアＢ３０２のそれぞれにかかる負荷の度合を示す負荷情報を、コントローラ２から取得し、表示制御部１１０７が、コアＡ３０１およびコアＢ３０２の負荷の度合をディスプレイ１６に表示する。このため、本実施形態におけるＰＣ１によれば、実施形態１と同様の効果を奏する他、ユーザに対して、コアＡ３０１およびコアＢ３０２への処理の割当てを適切に変更するための情報を提供することができる。
【０１２４】
また、本実施形態におけるコントローラ２によれば、負荷検出部２０７が、コアＡ３０１およびコアＢ３０２に割当てられた各処理ごとの負荷の度合を検出するため、実施形態１と同様の効果を奏する他、コントローラ２の稼動状況を高精度に検出することができる。
【０１２５】
以上説明したとおり、実施形態１、２のＰＣ１およびコントローラ２によれば、コアＡ３０１およびコアＢ３０２への処理の割当てを、より柔軟に変更することができる。
【０１２６】
なお、上述の各実施形態のコントローラ２で実行される制御処理プログラムは、ＲＯＭ等に予め組み込まれて提供される。上述の各実施形態のコントローラ２で実行される制御処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成しても良い。さらに、上述の各実施形態のコントローラ２で実行される制御処理プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、上述の各実施形態のコントローラ２で実行される制御処理プログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【０１２７】
上述の各実施形態のコントローラ２で実行される制御処理プログラムは、上述した各部（入力部、割当部、実行部、更新部、電源制御部、送信部、負荷検出部）を含むモジュール構成となっており、実際のハードウェアとしてはマルチコアＣＰＵ２０が上記ＲＯＭから制御処理プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、入力部、割当部、実行部、更新部、電源制御部、送信部、負荷検出部が主記憶装置上に生成されるようになっている。
【０１２８】
上述の各実施形態のＰＣ１で実行されるソフトウェアであるエンジニアリングツール１１は、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。また、上述の各実施形態のＰＣ１で実行されるエンジニアリングツール１１を、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、上述の各実施形態のＰＣ１で実行されるエンジニアリングツール１１をインターネット等のネットワーク経由で提供または配布するように構成しても良い。また、上述の各実施形態のエンジニアリングツール１１を、ＲＯＭ等に予め組み込んで提供するように構成しても良い。
【０１２９】
上述の各実施形態のＰＣ１で実行されるソフトウェアであるエンジニアリングツール１１は、上述した各部（受付部、プログラム生成部、コンパイラ、分割部、設定データ生成部、割当て変更部、表示制御部、送受信部）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ１３が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、受付部、プログラム生成部、コンパイラ、分割部、設定データ生成部、割当て変更部、表示制御部、送受信部が主記憶装置上に生成されるようになっている。
【０１３０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３１】
１  ＰＣ
２  コントローラ
３  Ｉ／Ｏ機器
１１  エンジニアリングツール
１６  ディスプレイ（モニタ）
２０  マルチコアＣＰＵ
２４  ツールインタフェース
２５，２５ａ〜２５ｃ  Ｉ／Ｏインタフェース
１０１  受付部
１０２  プログラム生成部
１０３  コンパイラ
１０４  分割部
１０５  設定データ生成部
１０６  割当て変更部
１０７，１１０７  表示制御部
１０８，１１０８  送受信部
１５０  記憶部
２０１  入力部
２０２  割当部
２０３  実行部
２０４  更新部
２０５  電源制御部
２０６，１２０６  送信部
２５０  記憶部
３０１  コアＡ
３０２  コアＢ
３１０  設定データ
３１１  アプリケーションプログラム
Ｓ  制御システム
【図１】
2018106440.tif 000003
【図２】
2018106440.tif 000004
【図３】
2018106440.tif 000005
【図４】
2018106440.tif 000006
【図５】
2018106440.tif 000007
【図６】
2018106440.tif 000008
【図７】
2018106440.tif 000009
【図８】
2018106440.tif 000010
【図９】
2018106440.tif 000011
【図１０】
2018106440.tif 000012
【図１１】
2018106440.tif 000013
【図１２】
2018106440.tif 000014
【図１３】
2018106440.tif 000015
【図１４】
2018106440.tif 000016
【図１５】
2018106440.tif 000017
【図１６】
2018106440.tif 000018