(57)【要約】【課題】制御装置の小型化、高性能化、および情報化を実現する。【解決手段】ＰＬＣ（１０）の第４コア（１１４）には、制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーションのみが割り当てられる。【選択図】図１
2018132829.tif 000002
【特許請求の範囲】
【請求項１】
複数の制御プログラムを所定の時間間隔で繰り返し実行することによって制御対象を制御する制御装置であって、
マルチコアプロセッサと、
前記複数の制御プログラムを格納したメモリと、を備え、
前記マルチコアプロセッサは、アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーションのみが割り当てられるコアであるアプリケーション用コアを含むことを特徴とする制御装置。
【請求項２】
前記マルチコアプロセッサにおいて、アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するアプリケーションは、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムが割り当てられるコアである制御用コアに割り当てられることを特徴とする請求項１に記載の制御装置。
【請求項３】
前記アプリケーション用コアにおいて、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のない複数のアプリケーションの各々に割り当てるリソースの割合は、ユーザによって設定可能であることを特徴とする請求項１または２に記載の制御装置。
【請求項４】
前記アプリケーション用コアに割り当てられるアプリケーションは、
（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理の少なくとも１つを実行するためのアプリケーションを含むことを特徴とする請求項１から３のいずれか１項に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械および設備等の動作を制御するために用いられる制御装置に関する。
【背景技術】
【０００２】
従来、プログラマブルコントローラ（Programmable Logic Controller、以下「ＰＬＣ」と略記）等の産業用制御装置について、情報化（すなわち、産業用制御装置が取得・生成した情報の外部装置での利用等）と高性能化とを両立させるための種々の試みが知られている。
【０００３】
例えば、下掲の特許文献１には、制御対象への高速かつ高精度な制御のために周期的に実行する複数のＰＬＣ機能の各々を複数のプロセッサの各々に割り当て、それら複数のＰＬＣ機能のうちの少なくとも２つを並列に実行するＰＬＣが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１３−５０６９１１号公報（２０１３年２月２８日公開）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述のような従来技術には、制御対象への高速かつ高精度な制御処理に対して、情報化のための処理のような、高速高精度が求められない処理および非周期的な処理が与える影響を抑制できないという問題がある。
【０００６】
すなわち、現在のＰＬＣには、制御対象への高速かつ高精度な制御処理の実行に加えて、例えば、デバイスの「通電時間」、「作動回数」などの情報の保存、解析、表示といった、高速高精度の求められない処理および非周期的な処理の実行が求められている。したがって、上述のような種々の処理の実行を求められている現在のＰＬＣについて、高速高精度かつ周期的な処理の実行を効率化するだけでは、高性能化および情報化を実現することはできない。
【０００７】
本発明の一態様は、高速かつ周期的な処理と、情報化のための処理等の非周期的な処理と、を実行可能な制御装置について、小型化と高性能化とを両立することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明の一態様に係る制御装置は、複数の制御プログラムを所定の時間間隔で繰り返し実行することによって制御対象を制御する制御装置であって、マルチコアプロセッサと、前記複数の制御プログラムを格納したメモリと、を備え、前記マルチコアプロセッサは、アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーションのみが割り当てられるコアであるアプリケーション用コアを含んでいる。
【０００９】
前記の構成によれば、前記アプリケーション用コアには、アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション（制御対象に対する高速かつ高精度な制御を目的としないアプリケーション）のみが割り当てられる。すなわち、前記制御装置のマルチコアプロセッサにおいて、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」が割り当てられるコアと、「制御対象への高速かつ高精度な制御のためのプログラム（すなわち、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のあるプログラム）」が割り当てられるコアとは、異なる。
【００１０】
ここで、ＰＬＣ等の制御装置には、制御対象に対する高速かつ高精度な制御だけでなく、前記制御装置が取得・生成した情報を外部装置で利用するための処理、いわゆる情報化のための処理の実行が求められるようになってきている。そして、そのような情報化のための種々のアプリケーションを、制御装置に搭載したいとの要望が高くなってきている。
【００１１】
しかしながら、従来の制御装置は、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション（例えば、情報化のためのアプリケーション）」の実行によってリソースが消費され、「制御対象への高速かつ高精度な制御のためのプログラム」の実行に影響が出る可能性があった。なお、リソースとは、ＰＬＣ等の制御装置が前記プログラムおよび前記アプリケーションを実行するための計算資源であり、ＣＰＵリソースおよびメモリリソースを含む。ＣＰＵリソースは、例えば、前記プログラムおよび前記アプリケーションを実行するために使用可能なＣＰＵ帯域幅である。
【００１２】
従来の制御装置は、「制御対象への高速かつ高精度な制御のためのプログラム」への、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の影響を抑制しようとして、以下の対策を講じることがあった。すなわち、従来の制御装置は、十分なリソース量を確保することによって、前記プログラムへの、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の影響を抑制しようとした。そのため、従来の制御装置は、ＣＰＵコアおよびメモリ等を増やして装置として大型化したり、各々が所定の処理のみを実行する複数台の制御ユニットに分かれてしまったりすることがあった。
【００１３】
これに対し、本発明の一態様に係る前記制御装置は、「制御対象への高速かつ高精度な制御のためのプログラム」への、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の干渉を軽減させ、両者を前記マルチコアプロセッサにおいて効率的に実行することが可能となる。つまり、本発明の一態様に係る前記制御装置は、リソース量を増やすことによってではなく、リソースの効率的な利用によって、前記プログラムと前記アプリケーションとを実行することができる。本発明の一態様に係る前記制御装置は、装置として大型化させて十分なリソース量を確保する必要も、各々が所定の処理のみを実行する複数台の制御ユニットに分ける必要もなく、装置を小型化することが可能となる。
【００１４】
また、本発明の一態様に係る前記制御装置は、前記プログラムへの、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の干渉を軽減させ、両者を効率的に実行することができる。つまり、本発明の一態様に係る前記制御装置は、前記アプリケーションを適宜実行しつつ、前記アプリケーションから独立に、制御対象に対する制御に必要な前記プログラムを高速に実行することができるので、高性能化を実現することができる。
【００１５】
したがって、本発明の一態様に係る前記制御装置は、高速かつ周期的な処理と、情報化のための処理等の「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」とを実行可能な制御装置について、小型化と高性能化とを両立することができるとの効果を奏する。
【００１６】
また、本発明の一態様に係る前記制御装置は、利用シーンに合わせて、任意のタイミングで、すなわち、優先度によって定義された実行順序の制約を受けずに、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」を実行することができるという効果を奏する。
【００１７】
さらに、本発明の一態様に係る前記制御装置は、「制御対象への高速かつ高精度な制御のためのプログラム」と、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」との各々を、他方への影響を懸念することなく開発・バージョンアップすることが可能となるとの効果を奏する。これによって、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の開発・改良について、多様な主体の参加が可能となる。
【００１８】
本発明の一態様に係る制御装置の前記マルチコアプロセッサにおいて、アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するアプリケーションは、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムが割り当てられるコアである制御用コアに割り当てられていてもよい。
【００１９】
前記の構成によれば、前記マルチコアプロセッサにおいて、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するアプリケーションは、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムが割り当てられるコアである制御用コアに割り当てられる。
【００２０】
したがって、本発明の一態様に係る前記制御装置は、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するアプリケーションと、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムとを、前記制御用コアにおいて効率的に連動させて実行することができるとの効果を奏する。
【００２１】
前記アプリケーション用コアにおいて、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のない複数のアプリケーションの各々に割り当てるリソースの割合は、ユーザによって設定可能であってもよい。
【００２２】
前記の構成によれば、前記アプリケーション用コアにおいて、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のない複数のアプリケーションの各々に割り当てるリソースの割合は、ユーザによって設定可能である。言い換えれば、前記制御装置は、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のない複数のアプリケーショの各々について、前記アプリケーション用コアの使用割合（例えば、実行時間の比率、メモリ使用量の比率等）をユーザが設定することができる。ユーザは、前記制御装置に将来搭載する非制御アプリのために、前記アプリケーション用コアの全リソースのうち所定割合を空けておいてもよい。
【００２３】
したがって、本発明の一態様に係る前記制御装置は、ユーザが新たなアプリケーションを前記制御装置に搭載させて実行させたとしても、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のない複数のアプリケーションの各々の処理速度の低下を抑制することができるとの効果を奏する。
【００２４】
本発明の一態様に係る制御装置について、前記アプリケーション用コアに割り当てられるアプリケーションは、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理の少なくとも１つを実行するためのアプリケーションを含んでいてもよい。
【００２５】
前記の構成によれば、前記アプリケーション用コアに割り当てられるアプリケーションは、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理の少なくとも１つを実行するためのアプリケーションを含む。
【００２６】
ここで、現在、ＰＬＣなどの、複数の制御プログラムを所定の時間間隔で繰り返し実行することによって制御対象を制御する制御装置について、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理等を実行するための、情報系アプリケーション（情報化のためのアプリケーション）を搭載したいとの要望が高くなってきている。
【００２７】
したがって、本発明の一態様に係る前記制御装置は、高速かつ周期的な処理に加え、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理等を実行することのできる制御装置について、小型化と高性能化とを両立することができるとの効果を奏する。
【発明の効果】
【００２８】
本発明の一態様によれば、高速かつ周期的な処理と、情報化のための処理等の非周期的な処理とを実行可能な制御装置について、小型化と高性能化とを両立することができるとの効果を奏する。
【図面の簡単な説明】
【００２９】
【図１】本発明の実施形態１に係る制御装置のＣＰＵユニットのハードウェア構成を示す図である。
【図２】本発明の実施形態１に係る制御装置を含む制御システムの概要を示す図である。
【図３】本発明の実施形態１に係る制御装置の実行すべきタスクの例を示す図である。
【図４】図１のＣＰＵユニットにおける４つコアの各々に割り当てられている処理等の概要を示す図である。
【発明を実施するための形態】
【００３０】
〔実施形態１〕
以下、本発明の実施形態１について、図１から図４に基づいて詳細に説明する。図中同一または相当部分には同一符号を付してその説明は繰返さない。本発明の一態様に係るＰＬＣ（プログラマブル・ロジック・コントローラ、Programmable Logic Controller）１０（制御装置）についての理解を容易にするため、先ず、ＰＬＣ１０を含む制御システム１の概要を、図２を用いて説明する。
【００３１】
（実施形態１の制御システムの概要）
図２は、制御システム１の概要を示す図である。制御システム１は、ＰＬＣ１０と、ＰＬＣ１０とフィールドネットワーク３０を介して接続されるサーボドライバ４０およびリモートＩＯターミナル６０と、フィールド機器であるデバイス２０と、を含む。また、ＰＬＣ１０には、接続ケーブル７０などを介して、ＨＭＩ８１および外部サーバ８２が接続される。
【００３２】
ＰＬＣ１０は、機械および設備などの制御対象を制御する制御装置であり、主たる演算処理を実行するＣＰＵユニット１００と、電源ユニット２００と、１つ以上のＩＯユニット３００と、特殊ユニット４００とを含む。ＣＰＵユニット１００と、１つ以上のＩＯユニット３００の各々と、特殊ユニット４００とは、ＰＬＣシステムバス５００を介して、データを互いに遣り取りできるように構成される。
【００３３】
ＣＰＵユニット１００は、制御対象の状態等に係る種々の処理を実行し、例えば、「出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する」処理を実行する。ＣＰＵユニット１００の詳細については、図１を参照して後述する。
【００３４】
電源ユニット２００は、ＣＰＵユニット１００、ＩＯユニット３００、および特殊ユニット４００に、適切な電圧の電源を供給する。
【００３５】
ＩＯユニット３００は、一般的な入出力処理に関するユニットであり、オン／オフといった２値化されたデータの入出力を司る。すなわち、ＩＯユニット３００は、センサなどの入力機器であるデバイス２０（１）が何らかの対象物を検出している状態（オン）、および、何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット３００は、リレー、アクチュエータといった出力機器であるデバイス２０（２）に対して、活性化するための指令（オン）、および、不活性化するための指令（オフ）のいずれかを出力する。
【００３６】
特殊ユニット４００は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット３００ではサポートしない機能を有する。
【００３７】
デバイス２０は、ＰＬＣ１０によって制御される入出力機器である。入力機器であるデバイス２０（１）は、例えば、温度センサ、光センサなどの「検出器」、「スイッチ（押ボタンスイッチ、リミットスイッチ、圧力スイッチなど）」などである。出力機器であるデバイス２０（２）は、例えば、「アクチュエータ」、「リレー」、「電磁弁」、「表示器」、「表示灯」などである。デバイス２０（１）とデバイス２０（２）とを区別する必要がない場合には、単に「デバイス２０」と表記する。
【００３８】
フィールドネットワーク３０は、ＣＰＵユニット１００と遣り取りされる各種データを伝送する。フィールドネットワーク３０としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。制御システム１では、典型的に、産業用イーサネット（登録商標）であるＥｔｈｅｒＣＡＴ（登録商標）をフィールドネットワーク３０として採用する場合の構成について例示する。
【００３９】
なお、ＰＬＣ１０は、ＣＰＵユニット１００にＩＯユニット３００の機能およびサーボドライバ４０の機能を持たせることにより、そのような内蔵機能でまかなえる範囲については、ＩＯユニット３００およびサーボドライバ４０などを介さずにＣＰＵユニット１００が直接制御対象を制御する構成でもよい。
【００４０】
サーボドライバ４０は、フィールドネットワーク３０を介してＣＰＵユニット１００と接続されるとともに、ＣＰＵユニット１００からの指令値に従ってサーボモータ５０を駆動する。より具体的には、サーボドライバ４０は、ＰＬＣ１０から一定の時間間隔（周期）で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボドライバ４０は、サーボモータ５０の軸に接続されている位置センサ（ロータリーエンコーダ）およびトルクセンサといった検出器（デバイス２０（１））から、位置、速度（典型的には、今回位置と前回位置との差から算出される）、トルクといったサーボモータ５０の動作に係る実測値を取得する。そして、サーボドライバ４０は、ＣＰＵユニット１００からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボドライバ４０は、実測値が目標値に近づくようにサーボモータ５０を駆動するための電流を調整する。なお、サーボドライバ４０は、サーボモータアンプと称されることもある。
【００４１】
なお、図２には、サーボモータ５０とサーボドライバ４０とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００４２】
リモートＩＯターミナル６０は、基本的には、ＩＯユニット３００と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル６０は、フィールドネットワーク３０でのデータ伝送に係る処理を行うための通信カプラ６１と、１つ以上のＩＯユニット６２とを含む。通信カプラ６１と、１つ以上のＩＯユニット６２の各々とは、リモートＩＯターミナルバス６３を介して、データを互いに遣り取りできるように構成される。
【００４３】
ＨＭＩ８１は、人間と機械とが情報をやり取りするための手段であり、具体的には、人間が機械を操作したり（機械に指示を与えたり）、機械が現在の状態・結果を人間に知らせたりする手段である。ＨＭＩ８１について、人間が機械に指示を与える手段は、例えば、スイッチ、ボタン、ハンドル、ダイヤル、ペダル、リモコン、マイク、キーボード、マウスなどを含む。また、機械が現在の状態・結果等に係る情報を人間に伝える手段は、例えば、液晶画面、メーター、ランプ、スピーカーなどを含む。
【００４４】
外部サーバ８２は、ＰＬＣ１０から受信する情報を格納するサーバであり、また、ＰＬＣ１０から送信要求に応じて、格納している情報をＰＬＣ１０に送信する。
【００４５】
なお、制御システム１においてＰＬＣ１０が１台であることは必須ではなく、複数のＰＬＣ１０の各々が、フィールドネットワーク３０を介して、相互に通信可能に接続されていてもよい。次に、図１を参照して、ＣＰＵユニット１００のハードウェア構成について説明する。
【００４６】
（ＣＰＵユニットのハードウェア構成）
図１は、本発明の実施の形態に係るＣＰＵユニット１００のハードウェア構成を示す図である。図２に例示する通り、ＣＰＵユニット１００は、マイクロプロセッサ１１０と、不揮発性メモリ１２０と、チップセット１３０と、メインメモリ１４０と、通信コントローラ１５０と、システムバス制御回路１６０と、フィールドネットワーク制御回路１７０と、を含む。ＣＰＵユニット１００は、さらに、不図示のＵＳＢコネクタを含んでもよい。チップセット１３０と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００４７】
マイクロプロセッサ１１０およびチップセット１３０は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１１０は、チップセット１３０から内部クロックに従って順次供給される命令コードを解釈して実行する。図１に例示するように、マイクロプロセッサ１１０は、第１コア１１１、第２コア１１２、第３コア１１３、および第４コア１１４を含んでいる。
【００４８】
チップセット１３０は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１１０に必要な命令コードを生成する。さらに、チップセット１３０は、マイクロプロセッサ１１０での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００４９】
ＣＰＵユニット１００は、記憶手段として、メインメモリ１４０および不揮発性メモリ１２０を備えている。メインメモリ１４０は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１００へ電源投入後にマイクロプロセッサ１１０で実行されるべき各種プログラムを保持する。また、メインメモリ１４０は、マイクロプロセッサ１１０による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１４０として、例えば、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）等を用いることができる。
【００５０】
一方、不揮発性メモリ１２０は、ＩＯ制御などのシステムプログラム、ユーザプログラム、モーション演算プログラム、各種のアプリケーション、およびシステム設定パラメータといったデータを不揮発的に保持する。これらのプログラムおよびデータは、必要に応じて、マイクロプロセッサ１１０がアクセスできるようにメインメモリ１４０にコピーされる。このような不揮発性メモリ１２０は、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒体などを用いることもできる。
【００５１】
通信コントローラ１５０は、出力データの送信および入力データの受信を実行し、典型的には、ＦＰＧＡやＡＳＩＣ等のハードウェアで構成され、チップセット１３０を介して、メインメモリ１４０とのデータの送受信が可能に構成される。通信コントローラ１５０は、システムタイマ１５１と、ＤＭＡ制御回路１５２と、システムバスコントローラ１５３と、フィールドネットワークコントローラ１５４と、バッファメモリ１５５と、を含んでいる。
【００５２】
なお以下の説明において、ＣＰＵユニット１００からＣＰＵユニット１００以外のユニットに出力されるデータ、および、ＰＬＣ１０からＰＬＣ１０以外の装置に出力されるデータを、「出力データ」とも称す。また、ＣＰＵユニット１００以外のユニットからＣＰＵユニット１００に入力されるデータ、および、ＰＬＣ１０以外の装置からＰＬＣ１０に入力されるデータを、「入力データ」とも称す。
【００５３】
システムタイマ１５１は、一定の時間間隔（周期）ごとに割り込み信号を発生してマイクロプロセッサ１１０に提供する。典型的には、ハードウェアの仕様によって、複数の異なる時間間隔でそれぞれ割り込み信号を発生するように構成されるが、ＯＳ（Operating System）、ＢＩＯＳ（Basic Input Output System）などによって、任意の時間間隔で割り込み信号を発生するように設定することもできる。このシステムタイマ１５１が発生する割り込み信号を利用して、後述するような実行周期ごとの制御動作が実現される。
【００５４】
ＤＭＡ制御回路１５２は、メインメモリ１４０からバッファメモリ１５５への出力データの転送、および、バッファメモリ１５５からメインメモリ１４０への入力データの転送を行う。
【００５５】
システムバスコントローラ１５３は、ＰＬＣシステムバス５００を介したデータの遣り取りを制御し、典型的には、ＰＬＣシステムバス５００における物理層およびデータリンク層の機能を提供する。すなわち、システムバスコントローラ１５３は、ＰＬＣシステムバス５００に接続されるＣＰＵユニット１００以外のユニットと、ＣＰＵユニット１００との間の送受信を制御する。
【００５６】
システムバスコントローラ１５３は、バッファメモリ１５５に格納されているデータ（出力データ）を、ＩＯユニット３００および特殊ユニット４００にＰＬＣシステムバス５００を介して送信する処理を行なう。また、システムバスコントローラ１５３は、ＰＬＣシステムバス５００を介してＩＯユニット３００および特殊ユニット４００から入力されるデータ（入力データ）を受信してバッファメモリ１５５に格納する処理を行う。
【００５７】
なお、ＣＰＵユニット１００自体にＩＯユニット３００およびサーボドライバ４０の機能を持たせる場合は、システムバスコントローラ１５３による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてＣＰＵユニット１００の内部で行われる送信および受信となる。
【００５８】
フィールドネットワークコントローラ１５４は、フィールドネットワーク３０を介したデータの遣り取りを制御し、典型的には、フィールドネットワーク３０における物理層およびデータリンク層の機能を提供する。すなわち、フィールドネットワークコントローラ１５４は、用いられるフィールドネットワーク３０の規格に従い、出力データの送信および入力データの受信を制御する。具体的には、フィールドネットワークコントローラ１５４は、フィールドネットワーク３０に接続される他の装置との間で、バッファメモリ１５５の出力データを送信する処理、および、入力データを受信してバッファメモリ１５５に格納する処理を行う。
【００５９】
ここで、上述したように、本実施の形態においてはＥｔｈｅｒＣＡＴ（登録商標）規格に従うフィールドネットワーク３０が採用されるので、通常のイーサネット（登録商標）通信を行うためのハードウェアを含む、フィールドネットワークコントローラ１５４が用いられる。
【００６０】
ＥｔｈｅｒＣＡＴ（登録商標）規格では、通常のイーサネット（登録商標）規格に従う通信プロトコルを実現する一般的なイーサネット（登録商標）コントローラを利用できる。ただし、フィールドネットワーク３０として採用される産業用イーサネット（登録商標）の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット（登録商標）コントローラが用いられる。また、産業用イーサネット（登録商標）以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。
【００６１】
バッファメモリ１５５は、フィールドネットワーク３０を介して他の装置などへ出力されるデータ、および、ＰＬＣシステムバス５００を介してＣＰＵユニット１００以外のユニットへ出力されるデータ（出力データ）の送信バッファとして機能する。また、バッファメモリ１５５は、フィールドネットワーク３０を介して他の装置などから入力されるデータ、および、ＰＬＣシステムバス５００を介してＣＰＵユニット１００以外のユニットから入力されるデータ（入力データ）の受信バッファとして機能する。
【００６２】
マイクロプロセッサ１１０による演算処理によって作成された出力データは、原始的にはメインメモリ１４０に格納される。そして、特定の装置・ユニットへ転送されるべき出力データは、メインメモリ１４０から読み出されて、バッファメモリ１５５に一次的に保持される。また、他の装置・ユニットから転送された入力データは、バッファメモリ１５５に一次的に保持された後、メインメモリ１４０に移される。すなわち、バッファメモリ１５５は、メインメモリ１４０とのデータの通信に用いられるメモリ領域である。
【００６３】
なお前述の通り、ＣＰＵユニット１００は、ＨＭＩ８１および外部サーバ８２と接続するためのインターフェースとしてＵＳＢコネクタ（通信ポート）を備えていてもよい。
【００６４】
（ＣＰＵユニットのソフトウェア構成）
ＰＬＣ１０は、機械および設備などの制御対象を制御するとともに、当該制御対象から取得した情報および自装置において生成した情報等の蓄積、分析、表示等を実行する。例えば、ＰＬＣ１０のＣＰＵユニット１００は、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する。また例えば、ＰＬＣ１０のＣＰＵユニット１００は、ＰＬＣ１０が取得または自装置において生成した情報を、蓄積し、分析し、ＨＭＩ８１に表示させる。
【００６５】
ここで、ＰＬＣ１０のＣＰＵユニット１００は、種々のプログラムを「タスク」という実行単位で実行する。ＰＬＣ１０が「タスク」において実行可能な処理・プログラムは、「ＩＯ制御」、「制御プログラム」、および「システムサービス」の３つに分けることができる。なお、「システムサービス」は、ＰＬＣ１０の実行する処理・プログラムのうち「ＩＯ制御」および「制御プログラム」以外のものと捉えることができ、したがって、「システムサービス」は、「タスク」の必須の構成要素ではない。
【００６６】
ユーザは、不図示のＰＬＣサポート装置を用いて、プログラムの実行単位であるタスクを設定することができる。具体的には、タスクの実行周期および実行タイミング、タスクで実行するプログラム（例えば、制御プログラム）、タスク内でのＩＯ制御の実行要否等を設定・定義することができる。ユーザは、ＰＬＣサポート装置を用いて、１タスクあたり、例えば最大１２８のプログラムを割り当てることができてもよい。タスクの設定は、ＰＬＣサポート装置から例えば接続ケーブル７０を介してＣＰＵユニット１００へ転送され、不揮発性メモリ１２０などに格納される。なお、前述の通り、「システムサービス」は、ＰＬＣ１０の実行する処理・プログラムのうち「ＩＯ制御」および「制御プログラム」以外のものと捉えることができるので、ユーザがタスク内での実行を指定しない「システムサービス」が、タスク中で実行されてもよい。
【００６７】
ユーザは、ＰＬＣサポート装置を用いて、複数のタスクの間に優先順位を設定することができる。例えばユーザは、ＰＬＣサポート装置を用いて、優先順位が互いに異なるプライマリ定周期タスクと、定周期タスクと、イベントタスクという３種類のタスクを設定できてもよい。プライマリ定周期タスクは、例えば、「ＩＯ制御、ユーザプログラム、モーション演算プログラム（、および、システムサービス）」を主な処理内容（実行内容）とする。定周期タスクは、例えば、「ＩＯ制御、ユーザプログラム（、および、システムサービス）」を主な処理内容とする。イベントタスクは、例えば、「ユーザプログラム（、および、システムサービス）」を主な処理内容とする。ＰＬＣ１０は、プライマリ定周期タスクを最優先で実行し、定周期タスクとイベントタスクとの間の優先関係はユーザが指定できてもよく、さらに、複数の定周期タスクの間に実行順位に係る優先度が設定されていてもよい。
【００６８】
なお、プライマリ定周期タスクと定周期タスクとを区別することはＰＬＣ１０にとって必須ではなく、プライマリ定周期タスクと定周期タスクとを区別せずに、両者を「一定の時刻間隔で繰り返し実行すべきタスク（定周期で実行すべきタスク）」としてまとめてもよい。
【００６９】
次に、ＰＬＣ１０が「タスク」において実行する処理・プログラムである、「ＩＯ制御」、「制御プログラム」、「システムサービス」の概要を、この順で説明していく。
【００７０】
（ＩＯ制御）
「ＩＯ制御」は、入力データおよび出力データの入出力を制御する処理である。ＩＯ制御プログラムは、システムプログラムの１つであり、出力処理プログラムと入力処理プログラムとを含んでいる。
【００７１】
「出力処理プログラム」は、ユーザプログラム等の制御プログラムの実行によって生成された出力データを通信コントローラ１５０へ転送するのに適した形式に再配置する。システムバスコントローラ１５３またはフィールドネットワークコントローラ１５４が、マイクロプロセッサ１１０からの、送信を実行するための指示を必要とする場合は、出力処理プログラムがそのような指示を発行する。
【００７２】
「入力処理プログラム」は、システムバスコントローラ１５３およびフィールドネットワークコントローラ１５４の少なくとも一方によって受信された入力データを、制御プログラム（マイクロプロセッサ１１０）が使用するのに適した形式に再配置する。
【００７３】
「システムプログラム」は、ＰＬＣ１０に制御装置としての機能を提供するためのソフトウェア群であり、スケジューラプログラム、ＩＯ制御プログラム、シーケンス命令演算プログラム、モーション演算プログラム、システムサービスプログラムとを含む。
【００７４】
システムプログラムのうち、シーケンス命令演算プログラムおよびモーション演算プログラムは「制御プログラム」でもある。詳細は後述するが、「制御プログラム」であるユーザプログラムは、「制御プログラム」であるシーケンス命令演算プログラムおよびモーション演算プログラムと協働して、ユーザにおける制御目的を実現する。ユーザプログラムはさらに、アプリケーション（特に、制御系プリケーション）と協働して、ユーザにおける制御目的を実現することができる。すなわち、ユーザプログラムは、シーケンス命令演算プログラム、モーション演算プログラム、およびアプリケーションによって提供される命令、関数、機能モジュール等を利用することで、プログラムされた動作を実現する。
【００７５】
システムプログラムのうち、ＩＯ制御プログラム、シーケンス命令演算プログラム、モーション演算プログラム、およびシステムサービスプログラムについては後述するので、スケジューラプログラムの概要を説明しておく。
【００７６】
「スケジューラプログラム」は、出力処理プログラム、入力処理プログラム、および制御プログラムについて、各実行サイクル（タスク周期）での実行開始および実行中断後の実行再開を制御する。より具体的には、スケジューラプログラムは、ユーザプログラム、シーケンス命令演算プログラム、モーション演算プログラム、およびアプリケーションの実行を制御する。
【００７７】
例えば、ＣＰＵユニット１００は、モーション演算プログラムに適した一定時間間隔の実行サイクル（制御サイクル）を処理全体（タスク全体）の共通サイクル（タスク周期）として採用する。そのため、１つの制御サイクル（タスク周期）内で、すべてのプログラムの実行を完了することは難しいので、実行すべきプログラムの優先度（優先順位）などに応じて、各制御サイクルにおいて実行を完了すべきプログラムと、複数の制御サイクルに亘って実行してもよいプログラムとが区分される。スケジューラプログラムは、これらの区分されたプログラムの実行順序などを管理する。より具体的には、スケジューラプログラムは、各制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。
【００７８】
（制御プログラム）
「制御プログラム」は、「ユーザプログラム」、「モーション演算プログラム」、「シーケンス命令演算プログラム」、および、「アプリケーション（特に、制御系アプリケーション）」を含む。「制御プログラム」のうち、「モーション演算プログラム」および「シーケンス命令演算プログラム」は、前述の通り、システムプログラムでもある。
【００７９】
なお厳密には、「ユーザプログラム」には、制御対象に対する高速かつ高精度の制御のために定周期（例えば、数ｍｓといった高速周期）で実行されるユーザプログラ以外のユーザプログラムもある。例えば、非周期的に実行され、または低速周期で（例えば、数十ｍｓといった時間間隔で繰り返し）実行されるユーザプログラムもある。しかしながら、以下の説明において「ユーザプログラム」とは、特に断らない限り、「制御対象に対する高速かつ高精度の制御のために定周期（高速周期）で実行されるユーザプログラム」を指すものとする。
【００８０】
また、「アプリケーション」には、制御対象に対する高速かつ高精度の制御のために定周期（例えば、数ｍｓといった高速周期）で実行されるアプリケーション（制御系アプリケーション）と、それ以外のアプリケーションとがあり、詳細は後述する。
【００８１】
（ユーザプログラム）
「ユーザプログラム」は、ユーザの制御対象（例えば、対象のラインおよびプロセス）に応じて作成され、すなわち、制御システム１を用いて制御する制御対象のライン（プロセス）などに応じて、任意に設計されるプログラムである。不図示のＰＬＣサポート装置は、ラダーロジック（ラダー言語）などによって記述されたラダープログラム（ソースプログラム）をコンパイルすることにより、ユーザプログラムを生成する。ＰＬＣサポート装置で生成されたオブジェクトプログラム形式のユーザプログラムは、ＰＬＣサポート装置から例えば接続ケーブル７０を介してＣＰＵユニット１００へ転送され、不揮発性メモリ１２０などに格納される。ラダーロジックは、論理回路を記述するための手法で、多くの産業用制御装置において採用されているプログラム言語である。ユーザプログラムは、典型的には、ＣＰＵユニット１００のマイクロプロセッサ１１０で実行可能なオブジェクトプログラム形式で生成される。
【００８２】
制御対象に対する高速かつ高精度の制御のためのユーザプログラムは、例えば数ｍｓといった高速周期で、マイクロプロセッサ１１０によって繰り返し実行される。一方、制御対象に対する高速かつ高精度の制御を目的としないユーザプログラムは、例えば数十ｍｓといった低速周期で周期的に、または非周期的に（イベント的に）、マイクロプロセッサ１１０によって実行される。
【００８３】
（モーション演算プログラムおよびシーケンス命令演算プログラム）
「モーション演算プログラム」は、ユーザプログラムによる指示に従って実行され、サーボドライバ４０およびパルスモータドライバなどのモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。ＣＰＵユニット１００は、「モーション演算プログラム」を実行することにより、例えば、アクチュエータ等であるデバイス２０（２）の操作変位および操作速度などを連続的に制御する（モーション制御）。
【００８４】
「シーケンス命令演算プログラム」は、ユーザプログラムで使用される所定のシーケンス命令が実行されるときに呼び出され、該命令の内容を実現するために実行されるプログラムである。ＣＰＵユニット１００は、「シーケンス命令演算プログラム」を実行することにより、例えば、アクチュエータ等であるデバイス２０（２）のＯＮ/ＯＦＦを制御する（シーケンス制御）。
【００８５】
（アプリケーション）
「アプリケーション」は、例えば、データベース接続、ＯＰＣ-ＵＡ（OPC Unified Architecture）、ＡＩ（artificial intelligence、人工知能・機械学習）、ＣＮＣ（computerized numerical control）、ロボット制御などのためのプログラムである。アプリケーションは、制御対象に対する高速かつ高精度の制御のための制御系アプリケーション（以下、「制御アプリ」と略記）と、制御アプリ以外のアプリケーション（以下、「非制御アプリ」と略記）と、を含む。
【００８６】
「制御アプリ」は、アプリケーションのうち、制御対象に対する高速かつ高精度の制御のためのアプリケーションであり、制御対象に対する高速かつ高精度の制御のためのユーザプログラムと同じ時間間隔で繰り返し実行されるアプリケーションである。制御アプリは、例えば、ＣＮＣ（computerized numerical control）、ロボット制御などのためのアプリケーションである。ユーザプログラムは、これらの制御アプリを呼び出し、制御対象に対する高速かつ高精度の制御の実現に利用することができる。「制御アプリ」および「制御対象に対する高速かつ高精度の制御のためのユーザプログラム」は、例えば、所定の時間間隔（例えば、数ｍｓ）以下の実行間隔で繰り返し実行される。なお、ＡＩ（artificial intelligence、機械学習）は、用途によって、制御アプリまたは非制御アプリとして実行されるアプリケーションである。
【００８７】
「非制御アプリ」は、制御対象に対する高速かつ高精度の制御とは別の目的でＰＬＣ１０に組み込まれるアプリケーションであり、制御対象に対して所定の時間間隔（例えば、数ｍｓ）以下の実行間隔で繰り返し実行する必要のないプログラムである。言い換えれば、「非制御アプリ」は、高速な制御演算には関係しない、例えば「通信処理およびバックアップ処理」等を記述するのに適したプログラムである。具体的には、「非制御アプリ」は、データベース接続、ＯＰＣ-ＵＡ（OPC Unified Architecture）などのためのプログラムであり、「情報系アプリケーション」とも呼ばれる。「非制御アプリ」は、アプリケーションのうち、（１）非周期的に実行されるアプリケーション、または、（２）所定の時間間隔（周期的に実行されるユーザプログラムの実行周期）以上の時間間隔で繰り返し実行されるアプリケーションである。
【００８８】
ＰＬＣ１０は、「非制御アプリ」を実行することで、例えば、以下に示すような情報を、ＩＯ−Ｌｉｎｋ等によってデバイス２０から受信し、受信した情報をＨＭＩ８１に表示させたり、外部サーバ８２に送信したりする。すなわち、ＰＬＣ１０は、デバイス２０の「製品形式」、「シリアルＮｏ．/ロットＮｏ．」、「接続位置」、「コメント」、「電源電圧値」、「通電時間」、「作動回数」、「交換日」、「ＯＮ／ＯＦＦ閾値」等の情報をデバイス２０から受信し、受信した情報をＨＭＩ８１に表示させたり、外部サーバ８２に送信したりする。
【００８９】
（スケジュール管理についての注記）
なお、スケジューラプログラムは、「非制御アプリ」の実行スケジュールを、「制御対象に対する高速かつ高精度の制御を目的とするプログラム」の実行スケジュールから独立させ、両者を別々に管理してもよい。「制御対象に対する高速かつ高精度の制御を目的とするプログラム」とは、例えば、マイクロプロセッサ１１０が高速周期で実行する「ユーザプログラム、モーション演算プログラム、シーケンス命令演算プログラム、および、制御アプリ」である。つまり、ＰＬＣ１０は、「非制御アプリ（例えば、情報系アプリケーション）」のスケジューラと、「制御対象に対する高速かつ高精度の制御を目的とするプログラム」のスケジューラとを別々に備えてもよい。
【００９０】
（システムサービス）
「システムサービスプログラム」は、ＰＬＣ１０の実行する処理・プログラムのうち「ＩＯ制御」および「制御プログラム」以外の、ＰＬＣ１０の各種機能を実現するためのプログラム群をまとめて示したものである。システムサービスプログラムは、例えば、機械との通信、外部の機器からの要求からの処理、自己診断処理をマイクロプロセッサ１１０に実行させるプログラムである。また、外部の記憶媒体にメインメモリ１４０のデータを転送させる処理、外部の記憶媒体からデータを読み出す処理も、システムサービスプログラムに含まれる。さらに、ＣＰＵユニット１００と不図示のＰＬＣサポート装置との間の接続ケーブル７０（ＵＳＢ）などを介した通信処理に関するプログラムも、システムサービスプログラムに含まれる。
【００９１】
これまでに説明してきた制御プログラムおよびスケジューラプログラムは、記憶手段であるメインメモリ１４０および不揮発性メモリ１２０に格納されている。ＣＰＵユニット１００のマイクロプロセッサ１１０は、記憶手段に格納されたシステムプログラムおよび制御プログラムを適切なタイミングで読み出して実行する。
【００９２】
次に、これまで説明してきた様々なプログラム・処理が、どのようにタスクに設定されるかを、図３を用いて説明していく。例えば、ユーザがＰＬＣサポート装置において、１つのタスクにシーケンス制御とモーション制御とを設定することにより、マイクロプロセッサ１１０は、シーケンス制御とモーション制御とを同じ時間間隔で繰り返し実行する。
【００９３】
（タスクとプログラムとの関係について）
図３は、ＰＬＣ１０の実行すべきタスクの例を示す図である。前述の通り、ユーザは、例えば不図示のＰＬＣサポート装置を用いて、タスクの実行周期および実行タイミング、タスクで実行する制御プログラム、タスク中のＩＯ制御の有無（そのタスクにおいてＩＯ制御を実行するか否か）、優先順位等を設定することができる。また、「ＩＯ制御、ユーザプログラム、およびモーション演算プログラム」を含むタスクは、プライマリ定周期タスクとして、ＰＬＣ１０によって、「モーション演算プログラム」を含まないタスクである定周期タスクおよびイベントタスクに優先して実行される。
【００９４】
図３の（Ａ）は、１ｍｓで周期的に実行されるタスクであって、ＩＯ制御と、ユーザプログラムと、を含み、モーション演算プログラムを含まないタスクである「定周期タスク」の例である。図３の（Ａ）に例示する定周期タスクを実行するＰＬＣ１０は、例えば、以下の処理を実行する。
【００９５】
すなわち、マイクロプロセッサ１１０がＩＯ制御である入力処理プログラムを所定の時間間隔（スキャンタイム、図３の（Ａ）に示す例では１ｍｓ）で繰り返し実行することにより、ＰＬＣ１０は、入力機器であるデバイス２０（１）からの信号を前記所定の時間間隔で繰り返し受信する。マイクロプロセッサ１１０は、デバイス２０（１）から前記所定の時間間隔で繰り返し取得する信号を用いて、ラダープログラムなどのユーザプログラムを前記所定の時間間隔で繰り返し実行し、出力機器であるデバイス２０（２）への制御内容を前記所定の時間間隔で繰り返し決定する。マイクロプロセッサ１１０がＩＯ制御である出力処理プログラムを前記所定の時間間隔で繰り返し実行することにより、ＰＬＣ１０は、決定した制御内容を前記所定の時間間隔で繰り返しデバイス２０（２）に送信し、デバイス２０（２）の状態を制御する。
【００９６】
なお、前述の通り、１ｍｓのタスク周期から、ＩＯ制御およびユーザプログラムの実行に要した時間を除いた時間において、マイクロプロセッサ１１０は「システムサービス」を実行してもよい。すなわち、システムサービスは、全てのタスク（プライマリ定周期タスク、定周期タスク、およびイベントタスク）の空き時間に実行される。
【００９７】
図３の（Ｂ）は、１ｍｓで周期的に実行されるタスクであって、ＩＯ制御と、ユーザプログラムと、モーション演算プログラムと、を含むタスクである「プライマリ定周期タスク」の例である。図３の（Ｂ）に例示するプライマリ定周期タスクには、ＩＯ制御、ユーザプログラム、およびモーション演算プログラムに加えて、制御アプリが割り当てられている。前述の通り、図３の（Ｂ）に例示するプライマリ定周期タスクは、図３の（Ａ）に例示する定周期タスクよりも優先して実行され、高速かつ高速度で制御対象を制御することができるタスクである。
【００９８】
図３の（Ｃ）は、２ｍｓで周期的に実行されるタスクであって、図３の（Ａ）と同様に、ＩＯ制御と、ユーザプログラムと、を含み、モーション演算プログラムを含まないタスク（定周期タスク）の例である。ＰＬＣ１０は、プライマリ定周期タスクを定周期タスクおよびイベントタスクに優先して実行するとともに、複数の定周期タスクの各々に対してユーザが設定した優先度（優先順位）に従って、複数の定周期タスクの各々を実行する。例えば、図３の（Ａ）に例示する定周期タスクに、図３の（Ｃ）に例示する定周期タスクよりも高い優先度が設定されている場合、マイクロプロセッサ１１０は、図３の（Ａ）の定周期タスクを実行した後に、図３の（Ｃ）の定周期タスクを実行する。なお、定周期タスクの実行周期（タスク周期）は、プライマリ定周期タスクの実行周期の整数倍が設定される。
【００９９】
図３の（Ｄ）は、４ｍｓで周期的に実行されるタスクであって、ユーザプログラムを含み、ＩＯ制御およびモーション演算プログラムを含まないタスク（定周期タスク）の例である。前述の通り、複数の定周期タスクの各々は、複数の定周期タスクの各々に対してユーザが設定した優先度（優先順位）に従って実行されるのが原則であり、また、ＩＯ制御を含まない定周期タスクは、原則として、ＩＯ制御を含む定周期タスクの後に実行される。すなわち、図３の（Ｄ）に例示する定周期タスクの優先度は、図３の（Ａ）に例示する定周期タスクの優先度、および、図３の（Ｃ）に例示する定周期タスクの優先度よりも低い。
【０１００】
これまで説明してきた、図３の（Ａ）〜（Ｃ）のタスクは、１ｍｓまた２ｍｓといった高速な実行周期（タスク周期）が設定されていた。マイクロプロセッサ１１０は、図３の（Ａ）〜（Ｃ）のタスクを高速なタスク周期（高速周期）で繰り返し実行することによって、制御対象に対する高速かつ高精度な制御を実行する。
【０１０１】
これに対し、マイクロプロセッサ１１０が実行するタスクの中には、「制御対象に対する高速かつ高精度な制御」を目的としないタスクもある。そのような「制御対象に対する高速かつ高精度な制御」を目的としないタスクは、マイクロプロセッサ１１０によって、例えば、非周期的に実行され、または、低速なタスク周期で周期的に実行される。
【０１０２】
ここで、「低速なタスク周期」とは、「制御対象に対する高速かつ高精度な制御」を目的とするタスク（プライマリ定周期タスクまたは定周期タスク）のタスク周期（図３の（Ａ）〜（Ｃ）で示した例では、１ｍｓまたは２ｍｓ）に比べて長い実行周期を意味する。すなわち、「モーション演算プログラムに適した一定周期等の所定の時間間隔（時間間隔）」以上の周期（時間間隔）を、「低速なタスク周期（低速周期）」と呼ぶことがある。言い換えれば、所定の時間間隔（具体的には「制御対象に対する高速かつ高精度な制御」のために必要な実行周期）以上の時間間隔（周期）を「低速周期」と呼ぶことがある。
【０１０３】
図３の（Ｄ）に示したような「周期的に実行されるタスクであって、ユーザプログラムを含み、ＩＯ制御およびモーション演算プログラムを含まない定周期タスク」は、低速周期で実行されてもよい。すなわち、図３の（Ｄ）には、「ユーザプログラムを含み、ＩＯ制御およびモーション演算プログラムを含まない定周期タスク」について、タスク周期（実行周期）を４ｍｓとする例を示した。しかしながら、「ユーザプログラムを含み、ＩＯ制御およびモーション演算プログラムを含まない定周期タスク」については、そのタスク周期として、例えば数十ｍｓ以上の周期を、つまり、低速周期を設定してもよい。
【０１０４】
マイクロプロセッサ１１０は、図３の（Ａ）〜（Ｄ）に例示するような周期的に実行すべきタスク（プライマリ定周期タスクおよび定周期タスク）に加えて、非周期的に実行すべきタスク（イベントタスク）を実行する。以下、イベントタスクの例について、図３の（Ｅ）を用いて説明していく。
【０１０５】
図３の（Ｅ）は、非周期的に実行されるタスク（イベントタスク）であって、ユーザプログラムのみが割り当てられているタスクである。イベントタスクは、「ユーザ命令等をＰＬＣ１０が受け付ける」、「所定の変数の条件一致」といった所定の実行条件が成立した時にのみ実行される。
【０１０６】
以上、図３の（Ａ）〜（Ｅ）を用いて説明してきたように、ＰＬＣ１０のマイクロプロセッサ１１０が実行するタスクは、以下の４種類に大別することができる。すなわち、（１）「定周期（特に、高速周期）で実行すべきタスクであって、ＩＯ制御あり、かつ、モーション制御あり」の「プライマリ定周期タスク」、（２）「定周期（特に、高速周期）で実行すべきタスクであって、ＩＯ制御あり、かつ、モーション制御なし」の定周期タスク、（３）「定周期（高速周期または低速周期）で実行すべきタスクであって、ＩＯ制御なし、かつ、モーション制御なし」の定周期タスク、および、（４）「非周期的に実行すべきタスクであって、ＩＯ制御なし、かつ、モーション制御なし」のイベントタスクに分類することができる。なお、（２）の定周期タスクの優先度は、（３）の定周期タスクの優先度よりも高い。
【０１０７】
ただし、ＰＬＣ１０が実行するタスクを上記の４種類に大別することは必須ではなく、例えば、以下の２種類のタスクに大別してもよい。すなわち、「周期的に実行すべきタスク（図３の（Ａ）から（Ｄ）に例示したプライマリ定周期タスクおよび定周期タスク）」と、「所定の条件が満たされた場合に実行すべきタスク（図３の（Ｅ）に例示したイベントタスク）」と、の２種類に大別してもよい。なお、ＰＬＣ１０の実行する「周期的に実行すべきタスク」および「所定の条件が満たされた場合に実行すべきタスク」はいずれも、制御対象に対する制御に関連するタスクであり、制御タスクと呼んでもよい。
【０１０８】
アプリケーションのうち「制御アプリ」は、図３の（Ｂ）に例示したプライマリ定周期タスクのような、高速なタスク周期で実行されるタスクに、ユーザプログラムと共に割り当てられる。
【０１０９】
これに対して、「非制御アプリ」は、タスクには割り当てられずにＰＬＣ１０によって実行される。ＰＬＣ１０は、「非制御アプリ」を第４コア１１４（アプリケーション用コア）に割り当て、「非制御アプリ」をタスクに割り当てることなく直接実行する。一方、ＰＬＣ１０は、例えば、「タスク」に割り当てられている「ＩＯ制御」、「制御プログラム」、および「システムサービス」を第１コア１１１、第２コア１１２、および第３コア１１３に割り当て、「システムサービス」および「タスク」を実行する。
【０１１０】
言い換えれば、ＰＬＣ１０のマイクロプロセッサ１１０において、「非制御アプリ」の実行主体であるアプリエンジンは、第４コア１１４に割り当てられている。また、「タスク（前述の通り、タスクには制御アプリが含まれ得る）」の実行主体であるコントローラエンジンは、第４コア１１４以外のＣＰＵコアである第１コア１１１、第２コア１１２、および、第３コア１１３に割り当てられている。以下、その詳細を、図４を用いて説明していく。
【０１１１】
（マルチコアプロセッサの各コアに割り当てられる処理・プログラムについて）
図４は、ＣＰＵユニット１００のマイクロプロセッサ１１０における第１コア１１１、第２コア１１２、第３コア１１３、および第４コア１１４の各々に割り当てられている処理（プログラム）等の概要を示す図である。第１コア１１１、第２コア１１２、第３コア１１３、および第４コア１１４の各々に割り当てられるプログラムについて、最初に概要を説明しておけば以下の通りである。
【０１１２】
すなわち、ＰＬＣ１０は、複数の制御プログラムを所定の時間間隔で繰り返し実行することによって制御対象を制御する制御装置であって、マイクロプロセッサ１１０（マルチコアプロセッサ）と、前記複数の制御プログラムを格納した不揮発性メモリ１２０（メモリ）と、を備え、マイクロプロセッサ１１０は、アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション（すなわち、非制御アプリ）のみが割り当てられるコアである第４コア１１４（アプリケーション用コア）を含んでいる。
【０１１３】
前記の構成によれば、第４コア１１４には、アプリケーションのうち、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション（前記制御対象に対する高速かつ高精度な制御を目的としないアプリケーション）のみが割り当てられる。すなわち、ＰＬＣ１０のマイクロプロセッサ１１０において、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」が割り当てられる第４コア１１４と、「制御対象への高速かつ高精度な制御のためのプログラム等（例えば、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のあるプログラム等が割り当てられたタスク、および、システムサービス）」が割り当てられるコア（具体的には、第１コア１１１、第２コア１１２、および第３コア１１３）とは異なる。なお、前記「所定の時間間隔」とは、例えば数ｍｓである。
【０１１４】
ここで、ＰＬＣ等の制御装置には、制御対象に対する高速かつ高精度な制御だけでなく、前記制御装置が取得・生成した情報を外部装置で利用するための処理、いわゆる情報化のための処理の実行が求められるようになってきている。そして、そのような情報化のための種々のアプリケーションを、制御装置に搭載したいとの要望が高くなってきている。
【０１１５】
しかしながら、従来の制御装置は、アプリケーション（例えば、情報化のためのアプリケーション）の実行によってリソースが消費され、「制御対象への高速かつ高精度な制御のためのプログラム」の実行に影響が出る可能性があった。
【０１１６】
なお、リソースとは、ＰＬＣ等の制御装置が前記プログラムおよび前記アプリケーションを実行するための計算資源であり、ＣＰＵリソースおよびメモリリソースを含む。ＣＰＵリソースは、例えば、前記プログラムおよび前記アプリケーションを実行するために使用可能なＣＰＵ帯域幅である。
【０１１７】
従来の制御装置は、「制御対象への高速かつ高精度な制御のためのプログラム」への、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の影響を抑制しようとして、以下の対策を講じることがあった。すなわち、従来の制御装置は、十分なリソース量を確保することによって、前記プログラムへの、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の影響を抑制しようとした。そのため、従来の制御装置は、ＣＰＵコアおよびメモリ等を増やして装置として大型化したり、各々が所定の処理のみを実行する複数台の制御ユニットに分かれてしまったりすることがあった。
【０１１８】
これに対し、ＰＬＣ１０は、「制御対象への高速かつ高精度な制御のためのプログラム」への、「アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の干渉を軽減させ、両者をマイクロプロセッサ１１０において効率的に実行することが可能となる。つまり、ＰＬＣ１０は、リソース量を増やすことによってではなく、リソースの効率的な利用によって、前記プログラムと被制御アプリとを実行することができる。ＰＬＣ１０は、装置として大型化させて十分なリソース量を確保する必要も、各々が所定の処理のみを実行する複数台の制御ユニットに分ける必要もなく、装置を小型化することが可能となる。
【０１１９】
また、ＰＬＣ１０は、前記プログラムへの、非制御アプリの干渉を軽減させ、両者を効率的に実行することができる。つまり、ＰＬＣ１０は、非制御アプリを適宜実行しつつ、非制御アプリから独立に、制御対象に対する制御に必要な前記プログラムを高速に実行することができるので、高性能化を実現することができる。
【０１２０】
したがって、ＰＬＣ１０は、高速かつ周期的な処理と、情報化のための処理等の「アプリケーションのうち、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」と、を実行することのできる制御装置について、小型化と高性能化とを両立することができるとの効果を奏する。
【０１２１】
また、ＰＬＣ１０は、利用シーンに合わせて、任意のタイミングで、すなわち、優先度によって定義された実行順序の制約を受けずに、「アプリケーションのうち、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」を実行することができるという効果を奏する。
【０１２２】
さらに、ＰＬＣ１０は、「制御対象への高速かつ高精度な制御のためのプログラム」と、「アプリケーションのうち、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」との各々を、他方への影響を懸念することなく開発・バージョンアップすることが可能となるとの効果を奏する。これによって、「アプリケーションのうち、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション」の開発・改良について、多様な主体の参加が可能となる。
【０１２３】
ＰＬＣ１０は、第４コア１１４のみに割り当てる「非制御アプリ」と、「制御対象への高速かつ高精度な制御のためのプログラム（すなわち、第１コア１１１、第２コア１１２、および第３コア１１３に割り当てられるプログラム）」とを、別のスケジューラで管理してもよい。言い換えれば、ＰＬＣ１０は、「非制御アプリ」の実行を管理するスケジューラと、「タスク」の実行を管理するスケジューラと、を分離してもよい。
【０１２４】
以下、図４を用いて、ＰＬＣ１０のマイクロプロセッサ１１０において、第１コア１１１、第２コア１１２、第３コア１１３、および第４コア１１４の各々に、どのような処理・プログラムが割り当てられているかを詳細に説明していく。
【０１２５】
第１コア１１１、第２コア１１２、および第３コア１１３には、タスクが割り当てられ、つまり、タスクにおいて実行される「制御プログラム」、「ＩＯ制御」、および、「システムサービス」が割り当てられる。ここで、前述の通り、制御プログラムは、ユーザプログラム、モーション演算プログラム、シーケンス命令演算プログラム、および、制御アプリを含む。
【０１２６】
第１コア１１１の全リソースの所定割合（図４に示す例では５０％）には、「システムサービス」に係るプログラムが、例えば、接続ケーブル７０を介した通信処理（すなわち、通信ポートを介した通信処理）に関するプログラムなどが、割り当てられる。
【０１２７】
第２コア１１２および第３コア１１３には、タスクにおいて実行される「システムサービス」以外の処理・プログラムが、つまり、「制御プログラム」および「ＩＯ制御」が、割り当てられる。なお、前述の通り、「アプリケーション」のうち「制御アプリ」はタスクに割り当てられ、つまり、「制御アプリ」は、第２コア１１２および第３コア１１３に割り当てられる。
【０１２８】
すなわち、ＰＬＣ１０のマイクロプロセッサ１１０において、制御アプリ（アプリケーションであって、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するアプリケーション）は、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムが割り当てられるコアである第２コア１１２および第３コア１１３（制御用コア）に割り当てられている。
【０１２９】
前記の構成によれば、マイクロプロセッサ１１０において、制御アプリは、例えばユーザプログラムなどの、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムが割り当てられるコアである第２コア１１２および第３コア１１３に割り当てられる。
【０１３０】
したがって、ＰＬＣ１０は、制御アプリと、前記制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行するプログラムとを、第２コア１１２および第３コア１１３において効率的に連動させて実行することができるとの効果を奏する。
【０１３１】
つまり、ＰＬＣ１０のマイクロプロセッサ１１０において、「タスク」の実行主体であるコントローラエンジンは、第２コア１１２および第３コア１１３に割り当てられている。コントローラエンジンは、或るタスクに割り当てられた「制御アプリ」を、その或るタスクに割り当てられているユーザプログラム等の制御プログラムと連動させて効率的に実行する。
【０１３２】
図４に示す例では、「タスク」において実行される「システムサービス」が第１コア１１１に割り当てられ、「タスク」において実行される「システムサービス」以外の処理・プログラムが第２コア１１２および第３コア１１３に割り当てられている。つまり、図４は、「タスク」において実行される「システムサービス」が割り当てられるコアと、「制御プログラム」および「ＩＯ制御」が割り当てられるコアとを分離する例を示している。
【０１３３】
しかしながら、ＰＬＣ１０において、「システムサービス」が割り当てられるコアと、「制御プログラム」および「ＩＯ制御」が割り当てられるコアとを分離することは必須ではない。例えば、「タスク」において実行される「システムサービス」、「制御プログラム」、および「ＩＯ制御」が、「第１コア１１１、第２コア１１２、および第３コア１１３」に割り当てられてもよい。「タスク」が割り当てられる、言い換えれば、「タスク」において実行される「ＩＯ制御」、「制御プログラム」、および「システムサービス」が割り当てられる、「第１コア１１１、第２コア１１２、および第３コア１１３」を制御用コアと呼んでもよい。
【０１３４】
第４コア１１４には、「アプリケーション」のうち、「非制御アプリ（例えば、情報系アプリケーション）」のみが割り当てられる。
【０１３５】
ここで、ＰＬＣの第４コア１１４において、複数の非制御アプリの各々に割り当てるリソースの割合は、ユーザによって設定可能である。
【０１３６】
前記の構成によれば、第４コア１１４において、複数の非制御アプリの各々に割り当てるリソースの割合は、ユーザによって設定可能である。言い換えれば、ＰＬＣ１０は、複数の非制御アプリの各々について、第４コア１１４の使用割合（例えば、実行時間の比率、メモリ使用量の比率等）をユーザが設定することができる。図４に示す例では、「非制御アプリ１」に第４コア１１４の全ＣＰＵリソースのうち２０％が、「非制御アプリ２」に第４コア１１４の全ＣＰＵリソースのうち３０％が、割り当てられている。また、ユーザは、ＰＬＣ１０に将来搭載する非制御アプリのために、第４コア１１４の全リソースのうち所定割合（図４に示す例では５０％）を空けておいてもよい。
【０１３７】
したがって、ＰＬＣ１０は、ユーザが新たなアプリケーションをＰＬＣ１０に搭載させて実行させたとしても、複数の非制御アプリの各々の処理速度の低下を抑制することができるとの効果を奏する。
【０１３８】
第４コア１１４に割り当てられるアプリケーションは、（１）データベースとの接続に係る処理、（２）ＨＭＩ８１等の外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部サーバ８２等の外部のサーバに送信する処理の少なくとも１つを実行するためのアプリケーションを含んでいてもよい。
【０１３９】
前記の構成によれば、第４コア１１４に割り当てられるアプリケーションは、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理の少なくとも１つを実行するためのアプリケーションを含む。
【０１４０】
ここで、現在、ＰＬＣなどの、複数の制御プログラムを所定の時間間隔で繰り返し実行することによって制御対象を制御する制御装置について、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理等を実行するための、情報系アプリケーション（情報化のためのアプリケーション）を搭載したいとの要望が高くなってきている。
【０１４１】
したがって、ＰＬＣ１０は、高速かつ周期的な処理に加え、（１）データベースとの接続に係る処理、（２）外部の表示装置との接続に係る処理、および（３）前記制御対象から取得する情報を蓄積し、蓄積した情報を外部のサーバに送信する処理等を実行することのできる制御装置について、小型化と高性能化とを両立することができるとの効果を奏する。
【０１４２】
なおこれまで、ＰＬＣ１０が、第１コア１１１、第２コア１１２、第３コア１１３、および第４コア１１４という４つのＣＰＵコアを含むマイクロプロセッサ１１０を備える例を説明してきた。しかしながら、ＰＬＣ１０のマイクロプロセッサ１１０が４つのＣＰＵコアを含むことは必須ではなく、マイクロプロセッサ１１０は２つ以上のＣＰＵコアを含んでいればよい。ＰＬＣは、２つ以上のＣＰＵコアを含むマイクロプロセッサ１１０において、以下の２種類のプログラムが別々のＣＰＵコアに割り当てられていればよい。すなわち、「アプリケーションのうち、制御対象に対する高速かつ高精度な制御を目的としないアプリケーション（制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のないアプリケーション）」と、「制御対象に対する高速かつ高精度な制御のためのプログラム（制御対象に対して所定の時間間隔以下の実行間隔で繰り返し実行する必要のあるプログラム）」とが、異なるＣＰＵコアに割り当てられていればよい。
【０１４３】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１４４】
１０  ＰＬＣ（制御装置）
１１０  マイクロプロセッサ（マルチコアプロセッサ）
１２０  不揮発性メモリ（メモリ）
１１１  第１コア（制御用コア）
１１２  第２コア（制御用コア）
１１３  第３コア（制御用コア）
１１４  第４コア（アプリケーション用コア）
【図１】
2018132829.tif 000003
【図２】
2018132829.tif 000004
【図３】
2018132829.tif 000005
【図４】
2018132829.tif 000006