(57)【特許請求の範囲】
【請求項１】
メモリと、
外部の制御対象機器を制御するプロセッサと、を備え、
前記プロセッサは、
前記メモリが有する記憶領域のうちＩ／Ｏ記憶領域から、前記制御対象機器から受信するＩ／Ｏデータを読み出し、前記読み出したＩ／Ｏデータのうち一部の前記Ｉ／Ｏデータを、前記記憶領域のうち前記Ｉ／Ｏ記憶領域とは異なる共有記憶領域に保存し、前記制御対象機器に対して送信する制御用データを前記Ｉ／Ｏ記憶領域に保存するラダーアプリケーションを実行するコントローラ機能コアと、
前記コントローラ機能コアとは異なるコアであり、前記共有記憶領域から前記Ｉ／Ｏデータを読み出すコンピュータアプリケーションを実行するコンピュータ機能コアと、を備え、
前記プロセッサは、前記制御対象機器毎に、前記コントローラ機能コアおよび前記コンピュータ機能コアを備えるコントローラ。
【請求項２】
前記コントローラ機能コアは、さらに、前記制御対象機器から受信する前記Ｉ／Ｏデータの前記Ｉ／Ｏ記憶領域への保存、および前記Ｉ／Ｏ記憶領域に記憶される前記制御用データの前記制御対象機器への送信を実行するＩ／Ｏアプリケーションを実行する請求項１に記載のコントローラ。
【請求項３】
前記コントローラ機能コアは、前記制御用データを前記共有記憶領域に保存し、
前記コンピュータ機能コアは、さらに、前記共有記憶領域に記憶される前記制御用データに従って、前記制御対象機器のシミュレータとして動作するプログラムを実行し、当該プログラムの実行結果を前記共有記憶領域に保存する請求項１または２に記載のコントローラ。
【請求項４】
前記メモリは、前記コントローラ機能コア毎に、前記Ｉ／Ｏ記憶領域を備える請求項１から３のいずれか一に記載のコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コントローラに関する。
【背景技術】
【０００２】
制御対象機器との間でデータを入出力可能な入出力装置を介して、複数の制御装置によって、制御対象機器を制御することによって、産業用の制御装置の処理能力の向上を図った制御システムがある。この制御システムでは、複数の制御装置および入出力装置が、バスを介して互いに通信可能である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２２９１３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上述の制御システムでは、複数の制御装置が、入出力装置が制御対象機器との間で入出力するデータに対して任意のタイミングでアクセスでき、当該データに対してアクセスするタイミングについて制約が設けられていない。そのため、入出力装置が記憶するデータに対して、複数の制御装置が個別のタイミングでアクセスすることになり、複数の制御装置による当該データに対するアクセスが、同じタイミングで行われると、データに対するアクセスを指示する信号の衝突が発生する場合がある。【０００５】
また、入出力装置が記憶するデータに対して、複数の制御装置が同一の制御プログラムに従って処理を実行する場合、各制御装置によって当該データに対してアクセスするタイミングが異なると、同一の制御プログラムに従って当該データに対して処理を行ったとしても、その結果の整合性が確保されない場合がある。この場合、複数の制御装置が連携して制御対象機器を制御する場合に不都合が生じることがある。【０００６】
さらに、上述の制御システムでは、複数の制御装置が、同一の入出力装置を介して、制御対象機器との間でデータをやりとりする場合、制御装置の台数分のデータの転送が必要となり、入出力装置に対するアクセスが多くなる。特に、入出力装置に対するアクセスは、メモリに対するアクセスよりも長い時間を必要とすることが多いため、そのアクセスに時間がかかる。
【課題を解決するための手段】
【０００７】
実施形態のコントローラは、メモリと、プロセッサと、を備える。プロセッサは、外部の制御対象機器を制御する。また、プロセッサは、コントローラ機能コアと、コンピュータ機能コアと、を備える。コントローラ機能コアは、メモリが有する記憶領域のうちＩ／Ｏ記憶領域から、制御対象機器から受信するＩ／Ｏデータを読み出し、読み出したＩ／Ｏデータのうち一部のＩ／Ｏデータを、記憶領域のうちＩ／Ｏ記憶領域とは異なる共有記憶領域に保存し、制御対象機器に対して送信する制御用データをＩ／Ｏ記憶領域に保存するラダーアプリケーションを実行する。コンピュータ機能コアは、コントローラ機能コアとは異なるコアであり、共有記憶領域からＩ／Ｏデータを読み出すコンピュータアプリケーションを実行する。プロセッサは、制御対象機器毎に、コントローラ機能コアおよびコンピュータ機能コアを備える。 
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施形態にかかるソフトＰＬＣを実行するＰＬＣの構成の一例を示す図である。
【図２】図２は、第１の実施形態にかかるＰＬＣ内における制御用データおよびＩ／Ｏデータの転送処理の一例を説明するための図である。
【図３】図３は、第２の実施形態にかかるＰＬＣ内における制御用データの転送処理の一例について説明するための図である。
【図４】図４は、第３の実施形態にかかるＰＬＣの構成の一例を示す図である。
【図５】図５は、第３の実施形態にかかるＰＬＣ内におけるＩ／Ｏデータの転送処理の一例を説明するための図である。
【図６】図６は、第４の実施形態にかかるＰＬＣの構成の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、添付の図面を用いて、本実施形態にかかるコントローラについて説明する。
【００１０】
（第１の実施形態）
図１は、第１の実施形態にかかるソフトＰＬＣを実行するＰＬＣの構成の一例を示す図である。本実施形態にかかるソフトＰＬＣ（Programmable  Logic  Controller）は、バルブやセンサ等の外部の制御対象機器３を制御するソフトウェアである。図１に示すように、ＰＬＣは、複数のコアを有するＣＰＵ（Central  Processing  Unit）等のプロセッサ１と、メインメモリ２と、制御対象機器３との通信を可能とするネットワークカード等の通信Ｉ／Ｆ７と、を有する。
【００１１】
メインメモリ２（メモリの一例）は、Ｉ／Ｏメモリ２０１（第１記憶領域の一例）と、Ｉ／Ｏメモリ２０１とは異なる共有メモリ２０２（第２記憶領域の一例）と、を有する。プロセッサ１は、複数のＣＰＵ（Central  Processing  Unit）コアを有し、当該ＣＰＵコア上でソフトウェアを実行することによって、制御対象機器３を制御するマルチコアプロセッサである。具体的には、プロセッサ１は、複数のＣＰＵコアのうちいずれかにより実行される１つのＯＳ（Operating  System）によって、互いに隔離された複数のコンテナを動作させる。その際、プロセッサ１は、各コンテナを異なるＣＰＵコアにおいて実行する。本実施形態では、プロセッサ１は、コンテナを実行するＣＰＵコアとして、コントローラ機能ＣＰＵコア１０１、コンピュータ機能ＣＰＵコア１０２、およびＩ／Ｏ管理用ＣＰＵコア１０３を有する。
【００１２】
Ｉ／Ｏ管理用ＣＰＵコア１０３（第１コアの一例）は、通信アプリケーションを含むコンテナを実行する。通信アプリケーションは、Ｉ／Ｏバス４を介して、制御対象機器３（第１制御対象機器の一例）とＩ／Ｏメモリ２０１との間で、制御対象機器３に対して送信する制御用データおよび制御対象機器３から受信するＩ／Ｏデータ（第１データの一例）を転送する。言い換えると、通信アプリケーションは、Ｉ／ＯデータをＩ／Ｏメモリ２０１へ保存し、かつＩ／Ｏメモリ２０１に記憶される制御用データを制御対象機器３に送信する。本実施形態では、制御用データは、制御対象機器３に対する制御指示やＩ／Ｏデータに異常が検出されたことを示すアラームデータを含む。Ｉ／Ｏデータは、制御対象機器３の制御結果を含む、所謂、生データである。また、Ｉ／Ｏ管理用ＣＰＵコア１０３は、制御対象機器３とＩ／Ｏメモリ２０１との間で転送する制御用データおよびＩ／Ｏデータを一時的に記憶するＩ／Ｏバッファ１０３ａを有する。本実施形態では、通信アプリケーションは、メインメモリ２に記憶されるＩ／Ｏメモリマップを用いて、Ｉ／Ｏメモリ２０１に対する制御用データおよびＩ／Ｏデータ等の保存および読み出しを行う。ここで、Ｉ／Ｏメモリマップは、Ｉ／Ｏメモリ２０１の記憶領域のうち、制御用データおよびＩ／Ｏデータ等を記憶する領域のアドレスを示す。
【００１３】
コントローラ機能ＣＰＵコア１０１（第２コアの一例）は、ラダーアプリケーションを含むコンテナを実行する。ラダーアプリケーションは、例えば、記述された論理回路に従って処理を行うためのプログラムであって、Ｉ／Ｏメモリ２０１と共有メモリ２０２との間でＩ／Ｏデータを転送する。言い換えると、ラダーアプリケーションは、Ｉ／Ｏメモリ２０１から、Ｉ／Ｏデータを読み出し、当該読み出したＩ／Ｏデータのうち一部のＩ／Ｏデータ（以下、Ｉ／Ｏ部分データと言う）を共有メモリ２０２に保存し、さらに、制御用データをＩ／Ｏメモリ２０１に保存する。本実施形態では、ラダーアプリケーションは、Ｉ／Ｏメモリ２０１から読み出したＩ／Ｏデータから、後述するコンピュータアプリケーションの実行に要するＩ／Ｏ部分データを抽出する。Ｉ／Ｏデータのうち一部のＩ／Ｏ部分データを抽出する手法は、周知の手法を問わず、どのような手法を用いても良い。そして、ラダーアプリケーションは、少なくとも、抽出したＩ／Ｏ部分データを、共有メモリ２０２に保存する。例えば、ラダーアプリケーションは、Ｉ／Ｏメモリ２０１から読み出したＩ／Ｏデータが含むビットのうち、コンピュータアプリケーションの実行に要する一部のビットをＩ／Ｏ部分データとして抽出して、共有メモリ２０２に保存する。また、本実施形態では、ラダーアプリケーションは、共有メモリ２０２に保存するＩ／Ｏ部分データに対して、統計処理やＡ／Ｄ変換を実行した上で、共有メモリ２０２に保存しても良い。また、本実施形態では、ラダーアプリケーションは、共有メモリ２０２に保存するＩ／Ｏ部分データ毎に、当該Ｉ／Ｏ部分データが示す値と、予め設定された閾値とを比較して、Ｉ／Ｏ部分データの異常を検出する。そして、ラダーアプリケーションは、Ｉ／Ｏ部分データの異常を検出した場合、Ｉ／Ｏ部分データに対して、アラームデータを付加して、共有メモリ２０２に保存することも可能である。また、本実施形態では、ラダーアプリケーションは、メインメモリ２に記憶されるＩ／Ｏメモリマップを用いて、Ｉ／Ｏメモリ２０１からのＩ／Ｏデータの読み出し、およびＩ／Ｏメモリ２０１に対する制御用データの保存を行う。また、ラダーアプリケーションは、メインメモリ２に記憶される共有メモリマップを用いて、共有メモリ２０２に対するＩ／Ｏ部分データの保存を行う。共有メモリマップは、共有メモリ２０２の記憶領域のうち、Ｉ／Ｏ部分データ等を記憶する領域のアドレスを示す。また、コントローラ機能ＣＰＵコア１０１が実行するラダーアプリケーションは、Ｉ／Ｏメモリ２０１と共有メモリ２０２との間で転送するＩ／Ｏデータ、すなわち、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対して、データチェック等の処理（第１処理の一例）を実行する。これにより、共有メモリ２０２に記憶されるＩ／Ｏ部分データを、正常なデータとして処理することができ、後述するコンピュータ機能ＣＰＵコア１０２において、再度、データチェックを行う必要を無くすることができる。
【００１４】
コンピュータ機能ＣＰＵコア１０２（第３コアの一例）は、コンピュータアプリケーションを含むコンテナを実行する。例えば、コンピュータ機能ＣＰＵコア１０２は、プロセッサ１において実行されるＯＳ上に仮想マシンを実現し、当該仮想マシン上で汎用のＯＳを実行し、その汎用のＯＳによってコンピュータアプリケーションを動作させる。コンピュータアプリケーションは、共有メモリ２０２からＩ／Ｏ部分データを読み出す。すなわち、コンピュータアプリケーションは、Ｉ／Ｏメモリ２０１に記憶されるＩ／Ｏデータに対してアクセスしない。また、コンピュータアプリケーションは、共有メモリ２０２に対して制御用データを保存することも可能である。その場合、上述のラダーアプリケーションは、共有メモリ２０２から制御用データを読み出し、当該読み出した制御用データのＩ／Ｏメモリ２０１に保存する。本実施形態では、コンピュータアプリケーションは、メインメモリ２に記憶される共有メモリマップを用いて、共有メモリ２０２からのＩ／Ｏ部分データの読み出し、および共有メモリ２０２に対する制御用データの保存を行う。また、コンピュータ機能ＣＰＵコア１０２において実行されるコンピュータアプリケーションは、共有メモリ２０２に対して制御用データを保存する制御処理や、共有メモリ２０２に記憶されるＩ／Ｏ部分データを、コントローラが有する表示部に表示する表示処理等の処理（第２処理の一例）を実行する。
【００１５】
以上の処理によれば、１つのＯＳにより動作する複数のアプリケーションによって、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスが行われるので、当該複数のアプリケーションによる、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスのタイミングが制御可能となり、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスの衝突を防止できる。
【００１６】
また、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２が互いに同一のＩ／Ｏ部分データにアクセスすることが可能となるので、当該Ｉ／Ｏ部分データに対して、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２によって同一の処理を行った場合、その結果の整合性を確保できる。また、従来の制御システムでは、複数の制御装置それぞれが制御対象機器３からＩ／Ｏデータを取得する必要があり、制御装置の台数分のＩ／Ｏデータの受信が必要となっているが、制御対象機器３とＰＬＣとの間で１つのデータを転送すれば済むので、制御対象機器３とＰＬＣとの間でのＩ／Ｏデータの転送の回数を減らすことができる。さらに、ＰＬＣの内部では、Ｉ／Ｏ管理用ＣＰＵコア１０３のみが制御対象機器３へアクセスし、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２はメインメモリ２に記憶されるデータに対してのみアクセスするため、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２が、制御対象機器３にアクセスする場合と比較して、Ｉ／Ｏデータに対するアクセスに要する時間を短縮できる。また、ラダーアプリケーションを含むコンテナおよびコンピュータアプリケーションを含むコンテナがそれぞれ異なるＣＰＵコアにおいて実行されるので、コンピュータ機能ＣＰＵコア１０２にかかる処理負荷が変動して、コンピュータアプリケーションを含むコンテナの実行に遅延が生じたとしても、コントローラ機能ＣＰＵ１０２は負荷変動の影響を受けることなく、ラダーアプリケーションを実行できる。
【００１７】
次に、図２を用いて、本実施形態にかかるＰＬＣ内における制御用データおよびＩ／Ｏデータの転送処理の一例について説明する。
図２は、第１の実施形態にかかるＰＬＣ内における制御用データおよびＩ／Ｏデータの転送処理の一例を説明するための図である。
【００１８】
図２に示すように、Ｉ／Ｏ管理用ＣＰＵコア１０３は、Ｉ／Ｏバス４を介して、制御対象機器３から、Ｉ／ＯデータＡ、Ｉ／ＯデータＢ、およびＩ／ＯデータＣを受信する。そして、Ｉ／Ｏ管理用ＣＰＵコア１０３は、通信アプリケーションを実行して、制御対象機器３から受信したＩ／ＯデータＡ、Ｉ／ＯデータＢ、およびＩ／ＯデータＣを、Ｉ／Ｏバッファ１０３ａに書き込む。次いで、Ｉ／Ｏ管理用ＣＰＵコア１０３は、通信アプリケーションを実行して、Ｉ／Ｏバッファ１０３ａに書き込んだＩ／ＯデータＡ、Ｉ／ＯデータＢ、およびＩ／ＯデータＣを、Ｉ／Ｏメモリ２０１に転送（保存）する。
【００１９】
図２に示すように、コントローラ機能ＣＰＵコア１０１は、Ｉ／Ｏメモリ２０１に対して、Ｉ／ＯデータＡ、Ｉ／ＯデータＢ、およびＩ／ＯデータＣが書き込まれると（保存されると）、ラダーアプリケーションを実行して、Ｉ／Ｏメモリ２０１から、当該Ｉ／ＯデータＡ、Ｉ／ＯデータＢ、およびＩ／ＯデータＣを読み出す。さらに、コントローラ機能ＣＰＵコア１０１は、ラダーアプリケーションを実行して、Ｉ／ＯデータＡの一部のデータ（以下、Ｉ／Ｏ部分データＡ´と言う）、Ｉ／ＯデータＢの一部のデータ（以下、Ｉ／Ｏ部分データＢ´と言う）、およびＩ／ＯデータＣの一部のデータ（以下、Ｉ／Ｏ部分データＣ´と言う）を、共有メモリ２０２に保存する。その際、コントローラ機能ＣＰＵコア１０１は、ラダーアプリケーションを実行して、データチェックを実行したＩ／Ｏ部分データＡ´、Ｉ／Ｏ部分データＢ´、およびＩ／Ｏ部分データＣ´を、共有メモリ２０２に転送（保存）する。
【００２０】
図２に示すように、コンピュータ機能ＣＰＵコア１０２は、コンピュータアプリケーションを実行して、共有メモリ２０２から、Ｉ／Ｏ部分データＡ´、Ｉ／Ｏ部分データＢ´、およびＩ／Ｏ部分データＣ´を読み出し、当該読み出したＩ／Ｏ部分データＡ´、Ｉ／Ｏ部分データＢ´、およびＩ／Ｏ部分データＣ´を用いて、Ｉ／Ｏ部分データＡ´，Ｂ´，Ｃ´の表示処理を実行する。また、コンピュータ機能ＣＰＵコア１０２は、コンピュータアプリケーションを実行して、制御用データＤを、共有メモリ２０２に書き込む（保存する）。例えば、コンピュータ機能ＣＰＵコア１０２は、操作部を介してユーザにより入力される制御指示を含むデータを制御用データＤとして共有メモリ２０２に保存する。
【００２１】
このように、コンピュータ機能ＣＰＵコア１０２は、Ｉ／Ｏメモリ２０１に記憶されるＩ／ＯデータＡ、Ｉ／ＯデータＢ、およびＩ／ＯデータＣに対してアクセスしない。これにより、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２が互いに同一のＩ／Ｏ部分データＡ´，Ｂ´，Ｃ´に処理を実行することが可能となるので、当該Ｉ／Ｏ部分データＡ´，Ｂ´，Ｃ´に対して、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２によって同一の処理を行った場合、その結果の整合性を確保できる。
【００２２】
また、本実施形態では、コントローラ機能ＣＰＵコア１０１によってデータチェックが行われたＩ／Ｏ部分データＡ´，Ｂ´，Ｃ´が共有メモリ２０２に書き込まれるので、コンピュータ機能ＣＰＵコア１０２において、制御処理や表示処理に先立って、Ｉ／Ｏ部分データＡ´，Ｂ´，Ｃ´に対してデータチェックを行う必要が無くなる。さらに、従来のシステムにおいては、複数のコントローラが、入出力装置を介して、制御対象機器３とＩ／Ｏデータをやりとりするため、コントローラの数の分のＩ／Ｏデータのやりとりが必要とあり、制御対象機器３に対するアクセスが多くなる。これに対して、本実施形態では、Ｉ／Ｏ管理用ＣＰＵコア１０３のみが制御対象機器３とＩ／ＯデータＡ，Ｂ，Ｃをやりとりするので、制御対象機器３とＰＬＣとの間でのＩ／ＯデータＡ，Ｂ，Ｃの転送の回数を減らすことができる。さらに、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２はメインメモリ２に記憶されるデータに対してのみアクセスするため、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２が、制御対象機器３にアクセスする場合と比較して、Ｉ／ＯデータＡ，Ｂ，Ｃに対するアクセスに要する時間を短縮できる。
【００２３】
また、図２に示すように、コントローラ機能ＣＰＵコア１０１は、コンピュータ機能ＣＰＵコア１０２における制御処理によって制御用データＤが共有メモリ２０２に書き込まれると、ラダーアプリケーションを実行して、当該制御用データＤを読み出し、データチェックを実行する。そして、コントローラ機能ＣＰＵコア１０１は、ラダーアプリケーションを実行して、データチェックを実行した制御用データＤを、Ｉ／Ｏメモリ２０１に書き込む（保存する）。
【００２４】
また、図２に示すように、Ｉ／Ｏ管理用ＣＰＵコア１０３は、データチェックを実行した制御用データＤがＩ／Ｏメモリ２０１に書き込まれると、通信アプリケーションを実行して、当該制御用データＤを読み出し、Ｉ／Ｏバッファ１０３ａに書き込む。そして、Ｉ／Ｏ管理用ＣＰＵコア１０３は、通信アプリケーションを実行して、Ｉ／Ｏバッファ１０３ａに書き込まれた制御用データＤを、Ｉ／Ｏバス４を介して、制御対象機器３に送信する。
【００２５】
このように、第１の実施形態にかかるＰＬＣによれば、１つのＯＳにより動作する複数のアプリケーションによって、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスが行われるので、当該複数のアプリケーションによる、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスのタイミングを制御可能となり、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスの衝突を防止できる。また、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２が互いに同一のＩ／Ｏ部分データにアクセスするので、当該Ｉ／Ｏ部分データに対して、コントローラ機能ＣＰＵコア１０１およびコンピュータ機能ＣＰＵコア１０２によって同一の処理を行った場合、その結果の整合性を確保できる。
【００２６】
（第２の実施形態）
本実施形態は、コントローラ機能コアが、Ｉ／Ｏメモリに制御用データを保存する代わりに、共有メモリに対して制御用データを保存し、コンピュータ機能ＣＰＵコアが、共有メモリに記憶される制御用データに従って、制御対象機器のシミュレータとして動作するプログラムを実行する例である。
【００２７】
図３は、第２の実施形態にかかるＰＬＣ内における制御用データの転送処理の一例について説明するための図である。本実施形態のＰＬＣの構成は、第１の実施形態にかかるＰＬＣの構成と同様である。本実施形態では、ＰＬＣは、制御対象機器３と接続されていない場合または制御対象機器３の制御を実行する前、ラダーアプリケーションを検証するために、コンピュータ機能ＣＰＵコア３０２を制御対象機器３のシミュレータとして利用する。
【００２８】
具体的には、コントローラ機能ＣＰＵコア３０１は、ＰＬＣが制御対象機器３と接続されていない場合、若しくは制御対象機器３の制御を実行する前に、シミュレーションモードに遷移する。そして、コントローラ機能ＣＰＵコア３０１は、制御対象機器３に転送する制御用データＤを、Ｉ／Ｏメモリ２０１の代わりに、共有メモリ２０２に書き込む。
【００２９】
コンピュータ機能ＣＰＵコア３０２は、共有メモリ２０２に記憶される制御用データＤ（所定のデータの一例）に従って、制御対象機器３のシミュレータとして動作するプログラム（以下、シミュレーションプログラムと言う）を実行する。そして、コンピュータ機能ＣＰＵコア３０２は、シミュレーションプログラムの実行結果であるシミュレーションデータＳＤを、共有メモリ２０２に書き込む。
【００３０】
次いで、コントローラ機能ＣＰＵコア３０１は、共有メモリ２０２に書き込まれたシミュレーションデータＳＤを読み出し、当該シミュレーションデータＳＤが示すシミュレーションプログラムの実行結果に基づいて、ラダーアプリケーションが正常に実行されているか否かを判断する。これにより、制御対象機器３の制御を実行する前に、ラダーアプリケーションが正常に実行されているか否かを判断できるので、制御対象機器３が誤って制御されることを防止できる。
【００３１】
（第３の実施形態）
本実施形態は、ＰＬＣのプロセッサが、制御対象機器毎に、Ｉ／Ｏメモリ、コントローラ機能ＣＰＵコア、およびコンピュータ機能ＣＰＵコアを有する例である。以下の説明では、上述の実施形態と同様の箇所については説明を省略する。
【００３２】
図４は、第３の実施形態にかかるＰＬＣの構成の一例を示す図である。本実施形態にかかるＰＬＣのプロセッサ４００は、コントローラ機能ＣＰＵコア１０１、コンピュータ機能ＣＰＵコア１０２、Ｉ／Ｏ管理用ＣＰＵコア１０３、および通信Ｉ／Ｆ７に加えて、コントローラ機能ＣＰＵコア４０１（第５コアの一例）、コンピュータ機能ＣＰＵコア４０２（第６コアの一例）、Ｉ／Ｏ管理用ＣＰＵコア４０３（第４コアの一例）、および制御対象機器５との通信を可能とするネットワークカード等の通信Ｉ／Ｆ４０６を有する。また、メインメモリ７は、Ｉ／Ｏメモリ２０１および共有メモリ４０５に加えて、当該Ｉ／Ｏメモリ２０１および共有メモリ４０５とは異なるＩ／Ｏメモリ４０４（第３記憶領域の一例）を有する。
【００３３】
Ｉ／Ｏ管理用ＣＰＵコア４０３は、通信アプリケーションを含むコンテナを実行する。通信アプリケーションは、Ｉ／Ｏバス６を介して、制御対象機器３とは異なる制御対象機器５（第２制御対象機器の一例）とＩ／Ｏメモリ４０４との間で、制御用データおよびＩ／Ｏデータ（第２データの一例）を転送する。言い換えると、通信アプリケーションは、制御対象機器５から受信するＩ／ＯデータをＩ／Ｏメモリ４０４へ保存し、かつＩ／Ｏメモリ４０４に記憶される制御用データを制御対象機器５へ送信する。また、Ｉ／Ｏ管理用ＣＰＵコア４０３は、制御対象機器５とＩ／Ｏメモリ４０４との間で転送する制御用データおよびＩ／Ｏデータを一時的に記憶するＩ／Ｏバッファ４０３ａを有する。
【００３４】
コントローラ機能ＣＰＵコア４０１は、ラダーアプリケーションを含むコンテナを実行する。ラダーアプリケーションは、Ｉ／Ｏメモリ４０４と共有メモリ４０５との間でＩ／Ｏデータを転送する。具体的には、ラダーアプリケーションは、Ｉ／Ｏメモリ４０４から、Ｉ／Ｏデータを読み出し、当該読み出したＩ／Ｏデータのうち一部のＩ／Ｏ部分データを共有メモリ２０２に保存し、さらに、制御用データをＩ／Ｏメモリ４０４に保存する。また、コントローラ機能ＣＰＵコア４０１が実行するラダーアプリケーションは、Ｉ／Ｏメモリ４０４と共有メモリ４０５との間で転送するＩ／Ｏ部分データ、すなわち、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対して、データチェック等の処理を実行する。
【００３５】
コンピュータ機能ＣＰＵコア４０２は、コンピュータアプリケーションを含むコンテナを実行する。例えば、コンピュータ機能ＣＰＵコア４０２は、コンピュータ機能ＣＰＵコア１０２と同様に、プロセッサ１において実行されるＯＳ上に仮想マシンを実現し、当該仮想マシン上で汎用のＯＳを実行し、その汎用のＯＳによってコンピュータアプリケーションを動作させる。コンピュータアプリケーションは、共有メモリ４０５からＩ／Ｏ部分データを読み出す。すなわち、コンピュータ機能ＣＰＵコア１０２，４０２が実行するコンピュータアプリケーションは、Ｉ／Ｏメモリ２０１，４０４に記憶されるＩ／Ｏデータに対してアクセスしない。また、コンピュータ機能ＣＰＵコア４０２において実行されるコンピュータアプリケーションは、共有メモリ４０５に対して制御用データを保存する制御処理や共有メモリ４０５に記憶されるＩ／Ｏ部分データをコントローラが有する表示部に表示する処理等の処理を実行する。これにより、制御対象機器３，５毎に、Ｉ／Ｏメモリ４０４、コントローラ機能ＣＰＵコア１０１，４０１、コンピュータ機能ＣＰＵコア１０２，４０２、およびＩ／Ｏ管理用ＣＰＵコア１０３，４０３を有する場合も、１つのＯＳにより動作する複数のアプリケーションによって、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対するアクセスが行われるので、当該複数のアプリケーションによる、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対するアクセスのタイミングを制御可能となり、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対するアクセスの衝突を防止できる。
【００３６】
また、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２が互いに同一のＩ／Ｏ部分データにアクセスすることが可能となるので、当該Ｉ／Ｏ部分データに対して、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２によって同一の処理を行った場合、その結果の整合性を確保できる。また、制御対象機器３，５とＰＬＣとの間で１つのデータを転送すれば済むので、制御対象機器３，５とＰＬＣとの間でのＩ／Ｏデータの転送の回数を減らすことができる。
【００３７】
次に、図５を用いて、本実施形態にかかるＰＬＣ内における制御用データおよびＩ／Ｏデータの転送処理の一例について説明する。
図５は、第３の実施形態にかかるＰＬＣ内における制御用データおよびＩ／Ｏデータの転送処理の一例を説明するための図である。
【００３８】
図５に示すように、Ｉ／Ｏ管理用ＣＰＵコア１０３は、Ｉ／Ｏバス４を介して、制御対象機器３から、Ｉ／ＯデータＡを受信する。そして、Ｉ／Ｏ管理用ＣＰＵコア１０３は、通信アプリケーションを実行して、制御対象機器３から受信したＩ／ＯデータＡをＩ／Ｏバッファ１０３ａに書き込む。次いで、Ｉ／Ｏ管理用ＣＰＵコア１０３は、通信アプリケーションを実行して、Ｉ／Ｏバッファ１０３ａに書き込んだＩ／ＯデータＡを、Ｉ／Ｏメモリ２０１に転送（保存）する。
【００３９】
図５に示すように、コントローラ機能ＣＰＵコア１０１は、Ｉ／Ｏメモリ２０１に対して、Ｉ／ＯデータＡが書き込まれると（保存されると）、ラダーアプリケーションを実行して、Ｉ／Ｏメモリ２０１から、当該Ｉ／ＯデータＡを読み出す。さらに、コントローラ機能ＣＰＵ１０１は、ラダーアプリケーションを実行して、Ｉ／ＯデータＡの一部のＩ／Ｏ部分データＡ´を、共有メモリ４０５に保存する。その際、コントローラ機能ＣＰＵコア１０１は、ラダーアプリケーションを実行して、データチェックを実行したＩ／Ｏ部分データＡ´を、共有メモリ４０５に転送（保存）する。
【００４０】
一方、図５に示すように、Ｉ／Ｏ管理用ＣＰＵコア４０３は、Ｉ／Ｏバス６を介して、制御対象機器５から、Ｉ／ＯデータＢを受信する。そして、Ｉ／Ｏ管理用ＣＰＵコア４０３は、通信アプリケーションを実行して、制御対象機器５から受信したＩ／ＯデータＢをＩ／Ｏバッファ４０３ａに書き込む。次いで、Ｉ／Ｏ管理用ＣＰＵコア４０３は、通信アプリケーションを実行して、Ｉ／Ｏバッファ４０３ａに書き込んだＩ／ＯデータＢを、Ｉ／Ｏメモリ４０４に転送（保存）する。
【００４１】
図５に示すように、コントローラ機能ＣＰＵコア４０１は、Ｉ／Ｏメモリ４０４に対して、Ｉ／ＯデータＢが書き込まれると（保存されると）、ラダーアプリケーションを実行して、Ｉ／Ｏメモリ４０４から、当該Ｉ／ＯデータＢを読み出す。さらに、コントローラ機能ＣＰＵコア４０１は、ラダーアプリケーションを実行して、Ｉ／ＯデータＢの一部のＩ／Ｏ部分データＢ´を共有メモリ４０５に保存する。そして、コントローラ機能ＣＰＵコア４０１は、ラダーアプリケーションを実行して、データチェックを実行したＩ／Ｏ部分データＢ´を、共有メモリ４０５に転送（保存）する。
【００４２】
また、図５に示すように、コンピュータ機能ＣＰＵコア１０２，４０２は、共有メモリ４０５から、コンピュータアプリケーションを実行して、Ｉ／Ｏ部分データＡ´およびＩ／Ｏ部分データＢ´を読み出し、当該読み出したＩ／Ｏ部分データＡ´およびＩ／Ｏ部分データＢ´を用いて、Ｉ／Ｏ部分データＡ´，Ｂ´の表示処理を実行する。また、コンピュータ機能ＣＰＵコア１０２，４０２は、コンピュータアプリケーションを実行して、制御用データＤを、共有メモリ４０５に書き込む（保存する）。
【００４３】
このように、コンピュータ機能ＣＰＵコア１０２，４０２は、Ｉ／Ｏメモリ２０１，４０４に記憶されるＩ／ＯデータＡおよびＩ／ＯデータＢに対してアクセスしない。これにより、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２が互いに同一のＩ／Ｏ部分データＡ´，Ｂ´に処理を実行することが可能となるので、当該Ｉ／Ｏ部分データＡ´，Ｂ´に対して、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２によって同一の処理を行った場合、その結果の整合性を確保できる。
【００４４】
また、本実施形態では、コントローラ機能ＣＰＵコア１０１，４０１によってデータチェックが行われたＩ／Ｏ部分データＡ´，Ｂ´が共有メモリ４０５に書き込まれるので、コンピュータ機能ＣＰＵコア１０２，４０２において、制御処理や表示処理に先立って、Ｉ／Ｏ部分データＡ´，Ｂ´に対してデータチェックを行う必要が無くなる。さらに、従来のシステムにおいては、複数のコントローラが、入出力装置を介して、制御対象機器３，５とＩ／Ｏデータをやりとりするため、コントローラの数の分のＩ／Ｏデータのやりとりが必要となり、制御対象機器３，５に対するアクセスが多くなる。これに対して、本実施形態では、Ｉ／Ｏ管理用ＣＰＵコア１０３，４０３のみが制御対象機器３，５とＩ／ＯデータＡ，Ｂをやりとりするので、制御対象機器３，５とＰＬＣとの間でのＩ／ＯデータＡ，Ｂの転送の回数を減らすことができる。さらに、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２はメインメモリ２に記憶されるデータに対してのみアクセスするため、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２が、制御対象機器３，５にアクセスする場合と比較して、Ｉ／ＯデータＡ，Ｂに対するアクセスに要する時間を短縮できる。
【００４５】
また、図５に示すように、コントローラ機能ＣＰＵコア１０１は、コンピュータ機能ＣＰＵコア１０２，４０２における制御処理によって制御用データＤが共有メモリ４０５に書き込まれると、ラダーアプリケーションを実行して、当該制御用データＤを読み出し、データチェックを実行する。そして、コントローラ機能ＣＰＵコア１０１は、ラダーアプリケーションを実行して、データチェックを実行した制御用データＤを、Ｉ／Ｏメモリ２０１に書き込む（保存する）。
【００４６】
また、図５に示すように、Ｉ／Ｏ管理用ＣＰＵコア１０３は、データチェックを実行した制御用データＤがＩ／Ｏメモリ２０１に書き込まれると、通信アプリケーションを実行して、当該制御用データＤを読み出し、Ｉ／Ｏバッファ１０３ａに書き込む。そして、Ｉ／Ｏ管理用ＣＰＵコア１０３は、通信アプリケーションを実行して、Ｉ／Ｏバッファ１０３ａに書き込まれた制御用データＤを、Ｉ／Ｏバス４を介して、制御対象機器３に送信する。
【００４７】
また、図５に示すように、コントローラ機能ＣＰＵコア４０１は、コンピュータ機能ＣＰＵ１０２，４０２における制御処理によって制御用データＤが共有メモリ４０５に書き込まれると、ラダーアプリケーションを実行して、当該制御用データＤを読み出し、データチェックを実行する。そして、コントローラ機能ＣＰＵコア４０１は、ラダーアプリケーションを実行して、データチェックを実行した制御用データＤを、Ｉ／Ｏメモリ４０４に書き込む（保存する）。
【００４８】
また、図５に示すように、Ｉ／Ｏ管理用ＣＰＵコア４０３は、データチェックを実行した制御用データＤがＩ／Ｏメモリ４０４に書き込まれると、通信アプリケーションを実行して、当該制御用データＤを読み出し、Ｉ／Ｏバッファ４０３ａに書き込む。そして、Ｉ／Ｏ管理用ＣＰＵコア４０３は、通信アプリケーションを実行して、Ｉ／Ｏバッファ４０３ａに書き込まれた制御用データＤを、Ｉ／Ｏバス６を介して、制御対象機器５に送信する。
【００４９】
このように、第３の実施形態にかかるＰＬＣによれば、制御対象機器３，５毎に、Ｉ／Ｏメモリ２０１，４０４、コントローラ機能ＣＰＵコア１０１，４０１、コンピュータ機能ＣＰＵコア１０２，４０２、およびＩ／Ｏ管理用ＣＰＵコア１０３，４０３を有する場合も、１つのＯＳにより動作する複数のアプリケーションによって、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対するアクセスが行われるので、当該複数のアプリケーションによる、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対するアクセスのタイミングを制御可能となり、共有メモリ４０５に記憶されるＩ／Ｏ部分データに対するアクセスの衝突を防止できる。また、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２が互いに同一のＩ／Ｏ部分データにアクセスするので、当該Ｉ／Ｏ部分データに対して、コントローラ機能ＣＰＵコア１０１，４０１およびコンピュータ機能ＣＰＵコア１０２，４０２によって同一の処理を行った場合、その結果の整合性を確保できる。
【００５０】
本実施形態では、ソフトＰＬＣは、２台の制御対象機器３，５毎に、Ｉ／Ｏメモリ２０１，４０４、コントローラ機能ＣＰＵコア１０１，４０１、コンピュータ機能ＣＰＵコア１０２，４０２、およびＩ／Ｏ管理用ＣＰＵコア１０３，４０３を有しているが、３台以上の制御対象機器が存在する場合も、同様に、制御対象機器毎に、Ｉ／Ｏメモリ、コントローラ機能ＣＰＵコア、コンピュータ機能ＣＰＵコア、およびＩ／Ｏ管理用ＣＰＵコアが設けられるものとする。
【００５１】
（第４の実施形態）
本実施形態は、コントローラ機能ＣＰＵコアが、通信アプリケーションを実行する例である。以下の説明では、第１の実施形態と同様の構成については説明を省略する。
【００５２】
図６は、第４の実施形態にかかるＰＬＣの構成の一例を示す図である。本実施形態にかかるＰＬＣは、図６に示すように、プロセッサ６００と、メインメモリ２と、通信Ｉ／Ｆ７と、を有する。プロセッサ６００は、複数のコンテナを実行するＣＰＵコアとして、コントローラ機能ＣＰＵコア６０１、およびコンピュータ機能ＣＰＵコア１０２を有する。
【００５３】
コントローラ機能ＣＰＵコア６０１は、第１の実施形態におけるＩ／Ｏ管理用ＣＰＵ１０３に代わって、通信アプリケーションを含むコンテナを実行する。これにより、少なくとも２つのＣＰＵコアを有するマルチコアプロセッサをプロセッサ６００として用いれば、制御対象機器３を制御することができる。
【００５４】
このように、第４の実施形態にかかるＰＬＣによれば、通信アプリケーションを実行する専用のＣＰＵコアを有していない場合であっても、上述の実施形態と同様の作用効果を得ることができる。
【００５５】
以上説明したとおり、第１から第４の実施形態によれば、１つのＯＳにより動作する複数のアプリケーションによって、共有メモリ２０２，４０５に記憶されるＩ／Ｏ部分データに対するアクセスが行われるので、当該複数のアプリケーションによる、共有メモリ２０２，４０５に記憶されるＩ／Ｏ部分データに対するアクセスのタイミングを制御可能となり、共有メモリ２０２に記憶されるＩ／Ｏ部分データに対するアクセスの衝突を防止できる。
【００５６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【図１】
0006626216.tif 000002
【図２】
0006626216.tif 000003
【図３】
0006626216.tif 000004
【図４】
0006626216.tif 000005
【図５】
0006626216.tif 000006
【図６】
0006626216.tif 000007