(57)【特許請求の範囲】
【請求項１】
制御対象機器とネットワークを介して接続され、前記制御対象機器からの入力データを演算し、演算結果を出力することで制御対象機器を制御する制御装置であって、
第１のコアおよび第２のコアを有するマイクロプロセッサと、
前記接続された制御対象機器との間で通信を行う通信回路と、
前記制御対象機器に対する制御内容を規定する、前記第１のコアで実行されるべき第１のユーザプログラム及び前記第２のコアで実行されるべき第２のユーザプログラムと、前記第１のコアまたは前記第２のコアのいずれかで実行されるべき第３のユーザプログラムと、
前記ユーザプログラムからの指示及び第１の周期に従い、前記制御対象機器に対する指令値を演算する、前記第１のコアで実行されるべき第１のモーション演算プログラムと、
前記ユーザプログラムからの指示及び第２の周期に従い、前記制御対象機器に対する指令値を演算する、前記第２のコアで実行されるべき第２のモーション演算プログラムと、
前記ユーザプログラムからの指示に従い、前記制御対象機器に対する指令値を演算する、前記第１のコアまたは前記第２のコアのいずれかで実行されるべき第３のモーション演算プログラムと、
前記通信回路を介してメモリに取り込まれた、前記制御対象機器からの入力データを演算可能な状態とする、前記第１のコアで実行されるべき第１の入力プログラム、前記第２のコアで実行されるべき第２の入力プログラム、及び前記第１のコアまたは前記第２のコアのいずれかで実行されるべき第３の入力プログラムと、
前記指令値を含む、通信回路を介して送出可能な出力データを生成する、前記第１のコアで実行されるべき第１の出力プログラム、前記第２のコアで実行されるべき第２の出力プログラム、及び前記第１のコアまたは前記第２のコアのいずれかで実行されるべき第３の出力プログラムと、
スケジューラプログラムとの格納に用いられるメモリと、を備え、
前記スケジューラプログラムは、
前記第１の入力プログラムと、前記第１の出力プログラムと、前記第１のユーザプログラムと、前記第１のモーション演算プログラムとを、第１の周期で繰り返し前記第１のコアに実行させ、
前記第２の入力プログラムと、前記第２の出力プログラムと、前記第２のユーザプログラムと、前記第２のモーション演算プログラムとを、第２の周期で繰り返し前記第２のコアに実行させ、
前記第３の入力プログラムと、前記第３の出力プログラムと、前記第３のユーザプログラムと、前記第３のモーション演算プログラムとを、前記第１のコアまたは前記第２のコアのいずれかの空き時間で、かつ前記第１の入力プログラム、前記第１の出力プログラム、前記第１のユーザプログラム、および前記第１のモーション演算プログラムの実行が完了した後に、前記第１の入力プログラムおよび前記第１の出力プログラムから転送された前記入力データおよび前記出力データを用いて実行または再開させ、
さらに、前記第１の入力プログラムおよび前記第１の出力プログラム、または、前記第２の入力プログラムおよび前記第２の出力プログラムの実行開始のタイミングが到来すると、前記第３の入力プログラムと、前記第３の出力プログラムと、前記第３のユーザプログラムと、前記第３のモーション演算プログラムとの実行を、停止させる、制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械や設備の動作を制御するために用いられる制御装置において、マルチコアプロセッサを用いた制御プログラムの実行のスケジューリングに関する。
【背景技術】
【０００２】
機械、設備などの動作の制御としては、モータの運動を制御するためのモーション制御が含まれる場合がある。このようなモーション制御、典型的には、モータを駆動するモータドライバに対して周期的に指令値を出力するモーション演算プログラムの実行と、シーケンス演算とを１つのＣＰＵで実行するプログラマブルコントローラが知られている。
【０００３】
例えば特許文献１には、モータを駆動するモータドライバに対して周期的に指令値を出力するモーション演算プログラムを実行するプログラマブルコントローラを開示する。
【０００４】
特許文献１では、第１のモーション演算プログラムを含み第１の制御サイクルで動作する制御プログラム１（短周期モーションプログラム）と、第２のモーション演算プログラム（長周期モーションプログラム）とを含む。第１の制御サイクルの整数倍の周期でモータに対して指令値を出力する制御プログラム２との実行にあたり、第１の制御プログラムの実行が終了した後に第２の制御プログラムの実行を開始させる。
【０００５】
第２の制御プログラムが所定の制御周期内で終了しなかった場合には、第１の制御プログラムの次の制御サイクルにおいて、第１の制御プログラムの実行が終了した後に第２の制御プログラムの未処理部分を実行させる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許４７５２９８４号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
これらの制御装置が用いられるモータを制御する機械においては、制御対象機器である機器から入力される入力データの演算、演算結果としてモータに対する指令値を出力するまでの時間の短縮が求められている。制御装置の動作として、周期的に入力データの取り込み、入力データを用いた演算による出力データ算出、出力データの送信を繰り返し実行することを前提とすると、制御目的に合わせた異なる実行周期にて入力データの取り込み、入力データの演算、出力データの算出、出力データの送信を行えるようにすることが望ましい。
【０００８】
特許文献１に記載の制御装置は、短周期モーションプログラムの実行を優先し、短周期モーションプログラムが終了した後に長周期モーションプログラムを実行させるため、長周期モーションプログラムが実行可能な時間が制限される。モーション演算プログラムは周期的にモータなど制御対象に指令値を出力する必要があるため、短周期モーションプログラムの実行時間を見積もった上で長周期モーションプログラムの実行周期を設定する必要があり、長周期モーションプログラムの実行周期が長くなってしまう。
【０００９】
また、制御装置で実行させる、モーション演算プログラムを含む複数の制御プログラムを作成するにあたって、実行対象とする入力データの対象となる機器の設計、実行周期や実行タイミングの設計、はユーザに負担を強いる。
【００１０】
本発明は、モーション演算プログラムを含む複数の制御プログラムを並列に実行することで、周期的に実行される複数の制御プログラムの実行周期の短縮を図ることが可能な制御装置を提供することにある。
【００１１】
本発明の別の目的は、並列に実行される制御プログラムの作成が容易な制御装置を提供することである。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、本発明の制御装置は、制御対象機器とネットワークを介して接続され、前記制御対象機器からの入力データを演算し、演算結果を出力することで制御対象機器を制御する制御装置であって、第１のコアおよび第２のコアを有するマイクロプロセッサと、前記接続された制御対象機器との間で通信を行う通信回路と、前記制御対象機器に対する制御内容を規定する、前記第１のコアで実行されるべき第１のユーザプログラム及び前記第２のコアでされるべき第２のユーザプログラムと、前記ユーザプログラムからの指示及び第１の周期に従い、前記制御対象機器に対する指令値を演算する、前記第１のコアで実行されるべき第１のモーション演算プログラムと、前記ユーザプログラムからの指示及び第２の周期に従い、前記制御対象機器に対する指令値を演算する、前記第２のコアでされるべき第２のモーション演算プログラムと、前記通信回路を介してメモリに取り込まれた、前記制御対象機器からの入力データを演算可能な状態とする、前記第１のコアで実行されるべき第１の入力プログラム及び前記第２のコアでされるべき第２の入力プログラムと、前記指令値を含む、通信回路を介して送出可能な出力データを生成する、前記第１のコアで実行されるべき第１の出力プログラム及び前記第２のコアでされるべき第２の出力プログラムと、スケジューラプログラムとの格納に用いられるメモリと、を備え、前記スケジューラプログラムは、前記第１の入力プログラムと、前記第１の出力プログラムと、前記第１のユーザプログラムと、前記第１のモーション演算プログラムとを、第１の周期で繰り返し前記第１のコアに実行させ、前記第２の入力プログラムと、前記第２の出力プログラムと、前記第２のユーザプログラムと、前記第２のモーション演算プログラムとを、第２の周期で繰り返し前記第２のコアに実行させる。
【発明の効果】
【００１３】
本発明は、短周期モーション演算プログラムと長周期モーション演算プログラムとを並列に実行することで短周期モーション演算プログラムに関する入出力時間を短縮しつつも、長周期モーション演算プログラムの実行周期の短縮を図ることができるといった効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態に係る制御装置のシステム構成を示す図である。
【図２】ＣＰＵユニットのハードウェア構成を示す図である。
【図３】本発明の実施の形態に係るＣＰＵユニットで実行されるソフトウェア構成を示す模式図である。
【図４】本発明の実施の形態に係る制御装置のハードウェア構成を示す模式図である。
【図５】制御装置における制御装置の設定手順の一例を示すフローチャートである。
【図６】制御プログラムの設定を行う画面例を示す図である。
【図７】制御プログラムの割り当て設定の画面例を示す図である。
【図８】制御プログラムへの割り当てのイメージを示す図である。
【図９】制御プログラム１−３の実行のタイミングを示す図である。
【発明を実施するための形態】
【００１５】
＜システム構成＞
本実施の形態に係る制御装置は、機械や設備などの制御対象を制御する。本実施の形態に係る制御装置は、その構成要素としてＣＰＵユニットを含む。ＣＰＵユニットは、マイクロプロセッサと、マイクロプロセッサのメインメモリを含む記憶手段と、通信回路とを含む。本実施の形態に係る制御装置のＣＰＵユニットは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御するように構成されている。
【００１６】
記憶手段は、制御プログラム、および当該制御プログラムの実行と入力データおよび出力データの入出力とを制御するシステムプログラムの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。
【００１７】
通信回路は、出力データを送信しおよび入力データを受信する。後述するように、本実施の形態に係る制御装置は、通信回路として、制御装置システムバスによって出力データの送信および入力データの受信を行う第１通信回路と、フィールドネットワークによって出力データの送信および入力データの受信を行う第２通信回路とを有している。
【００１８】
まず、図１を参照して、本実施の形態に係る制御装置１のシステム構成について説明する。図は、本発明の実施の形態に係る制御装置システムの概略構成を示す模式図である。図１を参照して、制御装置システムＳＹＳは、制御装置１と、制御装置１とフィールドネットワーク２を介して接続されるサーボモータドライバ３およびリモートＩＯターミナル５と、フィールド機器であるセンサ６およびリレー７とを含む。また、制御装置１には、接続ケーブル１０などを介して制御装置８が接続される。
【００１９】
制御装置１は、主たる演算処理を実行するＣＰＵユニット１３と、１つ以上のＩＯユニット１４と、特殊ユニット１５とを含む。これらのユニットは、制御装置システムバス１１を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット１２によって適切な電圧の電源が供給される。なお、制御装置１として構成される各ユニットは、制御装置メーカーが提供するものであるので、制御装置システムバス１１は、一般に制御装置メーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク２については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。
【００２０】
ＣＰＵユニット１３の詳細については、図２を参照して後述する。ＩＯユニット１４は、一般的な入出力処理に関するユニットであり、オン／オフといった２値化されたデータの入出力を司る。すなわち、ＩＯユニット１４は、センサ６などのセンサが何らかの対象物を検出している状態（オン）および何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット１４は、リレー７やアクチュエータといった出力先に対して、活性化するための指令（オン）および不活性化するための指令（オフ）のいずれかを出力する。
【００２１】
特殊ユニット１５は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット１４ではサポートしない機能を有する。
【００２２】
フィールドネットワーク２は、ＣＰＵユニット１３と遣り取りされる各種データを伝送する。フィールドネットワーク２としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。本実施の形態に係る制御装置システムＳＹＳでは、典型的に、本実施の形態においては、産業用イーサネット（登録商標）であるＥｔｈｅｒＣＡＴ（登録商標）をフィールドネットワーク２として採用する場合の構成について例示する。
【００２３】
なお、制御装置１は、ＣＰＵユニット１３にＩＯユニット１４の機能やサーボモータドライバ３の機能を持たせることにより、そのような内蔵機能でまかなえる範囲については、ＩＯユニット１４やサーボモータドライバ３などを介さずにＣＰＵユニット１３が直接制御対象を制御する構成でもよい。
【００２４】
サーボモータドライバ３は、フィールドネットワーク２を介してＣＰＵユニット１３と接続されるとともに、ＣＰＵユニット１３からの指令値に従ってサーボモータ４を駆動する。より具体的には、サーボモータドライバ３は、制御装置１から一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ３は、サーボモータ４の軸に接続されている位置センサ（ロータリーエンコーダ）やトルクセンサといった検出器から、位置、速度（典型的には、今回位置と前回位置との差から算出される）、トルクといったサーボモータ４の動作に係る実測値を取得する。そして、サーボモータドライバ３は、ＣＰＵユニット１３からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ３は、実測値が目標値に近づくようにサーボモータ４を駆動するための電流を調整する。なお、サーボモータドライバ３は、サーボモータアンプと称されることもある。
【００２５】
また、図１には、サーボモータ４とサーボモータドライバ３とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００２６】
図１に示す制御装置システムＳＹＳのフィールドネットワーク２には、さらに、リモートＩＯターミナル５が接続されている。リモートＩＯターミナル５は、基本的には、ＩＯユニット１４と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル５は、フィールドネットワーク２でのデータ伝送に係る処理を行うための通信カプラ５２と、１つ以上のＩＯユニット５３とを含む。これらのユニットは、リモートＩＯターミナルバス５１を介して、データを互いに遣り取りできるように構成される。
【００２７】
制御装置サポート装置８については後述する。
＜ＣＰＵユニットのハードウェア構成＞
次に、図２を参照して、ＣＰＵユニット１３のハードウェア構成について説明する。図２は、本発明の実施の形態に係るＣＰＵユニット１３のハードウェア構成を示す模式図である。図２を参照して、ＣＰＵユニット１３は、マイクロプロセッサ１００と、マイクロプロセッサ１００のプロセッサコア１４０と、チップセット１０２と、メインメモリ１０４と、不揮発性メモリ１０６と、システムタイマ１０８と、通信コントローラ１５０と、システムバスコントローラ１２０と、フィールドネットワークコントローラと、ＵＳＢコネクタ（不図示）とを含む。チップセット１０２と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００２８】
マイクロプロセッサ１００およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１００は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１００に必要な命令コードを生成する。さらに、チップセット１０２は、マイクロプロセッサ１００での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００２９】
ＣＰＵユニット１３は、記憶手段として、メインメモリ１０４および不揮発性メモリ１０６を有する。
【００３０】
メインメモリ１０４は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１３へ電源投入後にマイクロプロセッサ１００で実行されるべき各種プログラムを保持する。また、メインメモリ１０４は、マイクロプロセッサ１００による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４としては、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）といったデバイスが用いられる。
【００３１】
一方、不揮発性メモリ１０６は、リアルタイムＯＳ（Operating System）、制御装置１のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ１００がアクセスできるようにメインメモリ１０４にコピーされる。このような不揮発性メモリ１０６としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒体などを用いることもできる。
【００３２】
通信コントローラ１５０は、典型的には、ＦＰＧＡやＡＳＩＣ等のハードウェアで構成され、チップセットを介して、メインメモリとのデータの送受信が可能に構成される。通信コントローラは、メインメモリとのデータの通信に用いられるメモリ領域を有し、後述するシステムバスコントローラやフィールドネットワークコントローラに対して、メインメモリから転送されたデータの転送を行う。また、システムバスコントローラ及びフィールドネットワークコントローラに対して、メインメモリから転送したデータを送信させる命令を発行する。
【００３３】
通信コントローラは、さらにシステムタイマ１０８を備える。システムタイマ１０８は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ１００に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、ＯＳ（Operating System）やＢＩＯＳ（Basic Input Output System）などによって、任意の周期で割り込み信号を発生するように設定することもできる。このシステムタイマ１０８が発生する割り込み信号を利用して、後述するような実行周期ごとの制御動作が実現される。
【００３４】
通信回路として、システムバスコントローラ１２０およびフィールドネットワークコントローラを有する。これらの通信回路は、出力データの送信および入力データの受信を行う。
【００３５】
なお、ＣＰＵユニット１３自体にＩＯユニット１４やサーボモータドライバ３の機能を持たせる場合は、制御装置システムバスコントローラ１２０による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてＣＰＵユニット１３の内部で行われる送信および受信となる。
【００３６】
通信コントローラ１５０は、制御装置システムバス１１を介したデータの遣り取りを制御する。より具体的には、システムバスコントローラ１２０と、ＤＭＡ（Dynamic Memory Access）制御回路１２２と、バッファメモリとを含む。
【００３７】
バッファ１２６は、制御装置システムバス１１を介して他のユニットへ出力されるデータ（以下「出力データ」）の送信バッファ、および、制御装置システムバス１１を介して他のユニットから入力されるデータ（以下「入力データ」）の受信バッファとして機能する。なお、マイクロプロセッサ１００による演算処理によって作成された出力データは、原始的にはメインメモリ１０４に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ１０４から読み出されて、バッファ１２６に一次的に保持される。また、他のユニットから転送された入力データは、バッファ１２６に一次的に保持された後、メインメモリ１０４に移される。
【００３８】
ＤＭＡ制御回路１２２は、メインメモリ１０４からバッファ１２６への出力データの転送、および、バッファ１２６からメインメモリ１０４への入力データの転送を行う。
【００３９】
通信コントローラは、制御装置システムバス１１に接続される他のユニットとの間で、バッファ１２６の出力データを送信する処理および第１入力データを受信してバッファ１２６に格納する処理を行う。典型的には、システムバスコントローラは、制御装置システムバス１１における物理層およびデータリンク層の機能を提供する。
【００４０】
フィールドネットワークコントローラは、フィールドネットワーク２を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラは、用いられるフィールドネットワーク２の規格に従い、出力データの送信および入力データの受信を制御する。上述したように、本実施の形態においてはＥｔｈｅｒＣＡＴ（登録商標）規格に従うフィールドネットワーク２が採用されるので、通常のイーサネット（登録商標）通信を行うためのハードウェアを含む、フィールドネットワークコントローラが用いられる。ＥｔｈｅｒＣＡＴ（登録商標）規格では、通常のイーサネット（登録商標）規格に従う通信プロトコルを実現する一般的なイーサネット（登録商標）コントローラを利用できる。但し、フィールドネットワーク２として採用される産業用イーサネット（登録商標）の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット（登録商標）コントローラが用いられる。また、産業用イーサネット（登録商標）以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。
【００４１】
バッファメモリ１２６は、フィールドネットワーク２を介して他の装置などへ出力されるデータ（以下「出力データ」）の送信バッファ、および、フィールドネットワーク２を介して他の装置などから入力されるデータ（以下「入力データ」）の受信バッファとして機能する。マイクロプロセッサ１００による演算処理によって作成された出力データは、原始的にはメインメモリ１０４に格納される。そして、特定の装置へ転送されるべき出力データは、メインメモリ１０４から読み出されて、通信回路バッファ１４６に一次的に保持される。また、他の装置から転送された入力データは、バッファ１４６に一次的に保持された後、メインメモリ１０４に移される。
【００４２】
ＤＭＡ制御回路１４２は、メインメモリ１０４からバッファへの出力データの転送、および、バッファからメインメモリ１０４への入力データの転送を行う。
【００４３】
フィールドネットワークコントローラは、フィールドネットワーク２に接続される他の装置との間で、バッファの出力データを送信する処理および入力データを受信して通信回路バッファに格納する処理を行う。典型的には、フィールドネットワークコントローラは、フィールドネットワーク２における物理層およびデータリンク層の機能を提供する。
【００４４】
ＵＳＢコネクタは、制御装置サポート装置８とＣＰＵユニット１３とを接続するためのインターフェイスである。典型的には、制御装置サポート装置８から転送される、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なプログラムなどは、ＵＳＢコネクタ１１０を介して制御装置１に取込まれる。
【００４５】
＜Ｃ．ＣＰＵユニットのソフトウェア構成＞
次に、図３を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、ＣＰＵユニット１３のマイクロプロセッサ１００、プロセッサコア１４０によって実行される。
【００４６】
図３は、本発明の実施の形態に係るＣＰＵユニット１３で実行されるソフトウェア構成を示す模式図である。図３を参照して、ＣＰＵユニット１３で実行されるソフトウェアとしては、リアルタイムＯＳ２００と、システムプログラム２１０と、ユーザプログラム２３６との３階層になっている。
【００４７】
リアルタイムＯＳ２００は、ＣＰＵユニット１３のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ１００がシステムプログラム２１０およびユーザプログラム２３６を実行するための基本的な実行環境を提供する。
【００４８】
システムプログラム２１０は、制御装置１としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム２１０は、スケジューラプログラム２１２と、出力処理プログラム２１４と、入力処理プログラム２１６と、シーケンス命令演算プログラム２３２と、モーション演算プログラム２３４と、その他のシステムプログラム２２０とを含む。なお、一般には出力処理プログラム２１４および入力処理プログラム２１６は、連続的（一体として）に実行されるので、これらのプログラムを、ＩＯ処理プログラム２１８と総称する場合もある。
【００４９】
ユーザプログラム２３６は、ユーザにおける制御目的に応じて作成される。すなわち、制御装置システムＳＹＳを用いて制御する対象のライン（プロセス）などに応じて、任意に設計されるプログラムである。
【００５０】
後述するように、ユーザプログラム２３６は、シーケンス命令演算プログラム２３２およびモーション演算プログラム２３４と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム２３６は、シーケンス命令演算プログラム２３２およびモーション演算プログラム２３４によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム２３６、シーケンス命令演算プログラム２３２、およびモーション演算プログラム２３４を、制御プログラム２３０と総称する場合もある。
【００５１】
このように、ＣＰＵユニット１３のマイクロプロセッサ１００は、記憶手段に格納されたシステムプログラム２１０および制御プログラム２３０を実行する。
【００５２】
以下、各プログラムについてより詳細に説明する。
ユーザプログラム２３６は、上述したように、ユーザにおける制御目的（たとえば、対象のラインやプロセス）に応じて作成される。ユーザプログラム２３６は、典型的には、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なオブジェクトプログラム形式になっている。このユーザプログラム２３６は、制御装置サポート装置８などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラム２３６は、制御装置サポート装置８から接続ケーブル１０を介してＣＰＵユニット１３へ転送され、不揮発性メモリ１０６などに格納される。
【００５３】
スケジューラプログラム２１２は、出力処理プログラム２１４、入力処理プログラム２１６、および制御プログラム２３０について、各実行サイクルでの処理開始および処理中断後の処理再開を制御する。より具体的には、スケジューラプログラム２１２は、ユーザプログラム２３６およびモーション演算プログラム２３４の実行を制御する。
【００５４】
本実施の形態に係るＣＰＵユニット１３では、モーション演算プログラム２３４に適した一定周期の実行サイクル（制御サイクル）を処理全体の共通サイクルとして採用する。そのため、１つの制御サイクル内で、すべての処理を完了することは難しいので、実行すべき処理の優先度などに応じて、各制御サイクルにおいて実行を完了すべき処理と、複数の制御サイクルに亘って実行してもよい処理とが区分される。スケジューラプログラム２１２は、これらの区分された処理の実行順序などを管理する。より具体的には、スケジューラプログラム２１２は、各制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。
【００５５】
出力処理プログラム２１４は、ユーザプログラム２３６（制御プログラム２３０）の実行によって生成された出力データを通信コントローラへ転送するのに適した形式に再配置する。システムバスコントローラ１２０またはフィールドネットワークコントローラが、マイクロプロセッサ１００からの、送信を実行するための指示を必要とする場合は、出力処理プログラム２１４がそのような指示を発行する。
【００５６】
入力処理プログラム２１６は、制御装置システムバスコントローラ１２０および／またはフィールドネットワークコントローラによって受信された入力データを、制御プログラム２３０が使用するのに適した形式に再配置する。
【００５７】
シーケンス命令演算プログラム２３２は、ユーザプログラム２３６で使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。
【００５８】
モーション演算プログラム２３４は、ユーザプログラム２３６による指示に従って実行され、サーボモータドライバ３やパルスモータドライバといったモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。
【００５９】
その他のシステムプログラム２２０は、図３に個別に示したプログラム以外の、制御装置１の各種機能を実現するためのプログラム群をまとめて示したものである。例えば機械の制御制御装置との通信や外部の機器からの要求からの処理、自己診断処理をマイクロプロセッサに実行させるプログラムである。また外部記憶媒体にメインメモリのデータを転送させる処理や外部記憶媒体からデータを読み出す処理も実行その他システムプログラムに含まれる。
【００６０】
リアルタイムＯＳ２００は、複数のプログラムを時間の経過に従い切り替えて実行するための環境を提供する。本実施の形態に係る制御装置１においては、ＣＰＵユニット１３のプログラム実行によって生成された出力データを他のユニットまたは他の装置へ出力（送信）するためのイベント（割り込み）として、制御サイクル開始の割り込みが初期設定される。リアルタイムＯＳ２００は、制御サイクル開始の割り込みが発生すると、マイクロプロセッサ１００での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラプログラム２１２に切り替える。なお、リアルタイムＯＳ２００は、スケジューラプログラム２１２およびスケジューラプログラム２１２がその実行を制御するプログラムが何ら実行されていない場合に、その他のシステムプログラム２１０に含まれているプログラムを実行する。このようなプログラムとしては、たとえば、ＣＰＵユニット１３と制御装置サポート装置８との間の接続ケーブル１０（ＵＳＢ）などを介した通信処理に関するものが含まれる。
【００６１】
なお、制御プログラム２３０およびスケジューラプログラム２１２は、記憶手段であるメインメモリ１０４および不揮発性メモリ１０６に格納される。
【００６２】
＜サポート装置のハードウェア構成＞
次に、制御装置１で実行されるプログラムの作成および制御装置１のメンテナンスなどを行うための制御装置８について説明する。
【００６３】
図４は、本発明の実施の形態に係る制御装置８のハードウェア構成を示す模式図である。図４を参照して、制御装置８は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
【００６４】
図４を参照して、制御装置８は、ＯＳを含む各種プログラムを実行するＣＰＵ８１と、ＢＩＯＳや各種データを格納するＲＯＭ（Read Only Memory）８２と、ＣＰＵ８１でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリＲＡＭ８３と、ＣＰＵ８１で実行されるプログラムなどを不揮発的に格納するハードディスク（ＨＤＤ）８４とを含む。ＣＰＵ８１が制御装置８の演算部に相当し、ＲＯＭ８２、ＲＡＭ８３およびハードディスク８４が制御装置８の記憶部に相当する。
【００６５】
制御装置８は、さらに、ユーザからの操作を受付けるキーボード８５およびマウス８６と、情報をユーザに提示するためのモニタ８７とを含む。さらに、制御装置８は、制御装置１（ＣＰＵユニット１３）などと通信するための通信インターフェイス（ＩＦ）８９を含む。
【００６６】
後述するように、制御装置８で実行される各種プログラムは、ＣＤＲＯＭ９に格納されて流通する。このＣＤ−ＲＯＭ９に格納されたプログラムは、ＣＤＲＯＭ（Compact Disk-Read Only Memory）ドライブ８８によって読取られ、ハードディスク（ＨＤＤ）８４などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【００６７】
＜制御プログラム＞
本実施の形態では、制御プログラムは、ＩＯ処理プログラム、ユーザプログラム、ユーザプログラムの実行に伴って実行させる、シーケンス演算プログラム、モーション演算プログラムを含む、一連の動作が実行される単位として取り扱う。
【００６８】
本発明による制御装置１では、制御プログラムごとに実行させる周期、実行される優先度、より短い周期での実行が可能なように、制御プログラムそれぞれに実行開始のタイミング、制約条件を設定している。ユーザはこれらの制御プログラムの特性を勘案しながら制御目的を達成するためにプログラミングを行う。スケジューラプログラムは制御プログラムの実行優先度、実行周期にしたがって、マイクロプロセッサに制御プログラムを実行させる。次にそれぞれの制御プログラムについて説明をする。
【００６９】
制御プログラム１は、最も高優先で周期的に実行される。出力処理プログラム１、入力処理プログラム１を含み出力データの送信、入力データの取り込み、割り当てられたユーザプログラム１の実行、出力データの生成、モーション演算プログラム１の実行、モータへの指令値の算出をこの順序で実行される。
【００７０】
制御プログラム２は、制御プログラム１に次いで優先的に周期的に実行される。出力処理プログラム２、入力処理プログラム２を含み、出力データの送信、入力データの取り込み、割り当てられたユーザプログラム２の実行、モーションプログラム２の実行をこの順序で実行される。
【００７１】
制御プログラム３は、定周期で周期的に実行させる。上述の制御プログラム１で実行させる出力データや入力データを読み込むことを前提とする制御プログラムである。具体的には、制御プログラム１で実行される、出力処理プログラム、入力処理プログラムの命令に従い取り込まれる入力データの受け渡しを受け、出力データを演算が実行される。
【００７２】
制御プログラム３は、制御プログラム１の実行周期を短縮するため、制御プログラム１に含まれる、やや制御プログラム１の実行周期よりも、長周期で実行することを許容する場合にユーザプログラムを割り当てるのに適したプログラムである。
【００７３】
制御プログラム４は、ユーザプログラムのみで構成されるプログラムである。高速な制御演算には関係しない、通信処理やバックアップ処理などを記述するのに適したプログラムである。
【００７４】
次にコントローラサポート装置を用いた制御装置におけるプログラミングの手順を示す。図５は、制御装置における制御装置の設定手順の一例を示す。
【００７５】
ＳＴＥＰ１において、フィールドネットワークやシステムバスを介して接続される機器を特定する。具体的にはフィールドネットワーク乃至はシステムバスに接続されている機器について通信を行うための情報を設定する。また後述するユーザプログラムで用いられる、変数として登録する。図示しないが、フィールドネットワーク又はシステムバスを介して接続されている機器と通信を行いフィールドネットワークやシステムバスを介して接続されている機器、接続順序などの情報を自動的に取得しても良い。
【００７６】
ＳＴＥＰ２において、ユーザはコントローラサポート装置を用いて、上述したように制御目的に合わせてユーザプログラムを作成する。ＳＴＥＰ１で登録した、フィールドネットワーク乃至はシステムバスに接続されている機器から入力されるデータを用いて、シーケンス演算、モーション演算を実行し、出力データを生成するプログラムを作成する。このユーザプログラムは、複数のプログラムモジュールに分割されて作成されても良い。
【００７７】
ＳＴＥＰ３において、ユーザは制御プログラムの設定を行う。ユーザの制御目的に合わせて、制御プログラムを実行する周期を設定する。
【００７８】
ＳＴＥＰ４において、ＳＴＥＰ１で設定したネットワークを介して接続される機器それぞれについて、前述したIO処理プログラムの命令に従って実行される、入力データの受信と出力データの送信を行う制御プログラムを登録する。図６は、制御プログラムの設定を行う画面例を示す。フィールドネットワーク乃至はシステムバスに接続されている機器それぞれについて、ＩＯリフレッシュを行う制御プログラムを登録する。制御対象機器が一覧で表示され、ユニット名称とともに表示される。それぞれについてＩＯリフレッシュを行う制御プログラムをプルダウン形式でユーザに選択させる。
【００７９】
ＳＴＥＰ５において、作成したユーザプログラムを制御プログラムに割り当てる。図８は、制御プログラムへの割り当てのイメージを示す。図７では、制御プログラムそれぞれについて、作成したユーザプログラム（Program0-Program6）を制御プログラムに割り当てる。複数のユーザプログラムを制御プログラムに割り当てる場合には、ユーザプログラムの実行順序を登録させる。図７の例では、制御プログラム１にユーザプログラムProgram0、Program2が割り当てされている。制御プログラム２には、ユーザプログラムProgram4、Program5、Program6が割り当てられている。制御プログラム３には、Program1が割り当てされている。
【００８０】
上述の操作によって、制御プログラム毎に、実行される周期、制御プログラムに含まれるＩＯ制御プログラムにてデータ交換を行う機器を示す設定パラメータ、実行されるユーザプログラムを含む制御プログラムが生成される。制御装置のスケジューラプログラムは、転送された設定パラメータを参照し、制御プログラムの実行周期などを参照し、プログラムの実行開始や終了のタイミングを制御する。また、本実施形態では制御プログラムの実行周期は、フィールドネットワーク乃至はシステムバスを介して外部の機器と通信（ＩＯリフレッシュ）を行う周期となるため、設定パラメータに基づいて、通信プログラムは通信周期および当該周期にてＩＯリフレッシュを行う対象と機器を特定する。
【００８１】
<実施の形態１>
図８は制御プログラム１と制御プログラム２を定周期で複数のコアで実行される例を示す。制御プログラム１と及び制御プログラム２はそれぞれ、ＩＯ処理プログラム１、ＩＯ処理プログラム２、ユーザプログラム１、ユーザプログラム２、モーション演算プログラム１、モーション演算プログラム２を含む。
【００８２】
スケジューラプログラムは、タイマのカウント値を監視する。所定の周期が到来すると、スケジューラプログラムは、マイクロプロセッサのコア１において制御プログラム１の実行を開始させる。同時にマイクロプロセッサのコア２において制御プログラム２の実行を開始させる。
【００８３】
制御プログラム１の実行において、マイクロプロセッサのコア１は、ＩＯ制御プログラム１の出力処理プログラムの命令に従い、制御プログラム１に関連付けされた外部機器への出力データ１をメインメモリ上の通信バッファから通信コントローラ１５０のバッファメモリへ転送する処理を行う（図中Ａ）。また入力処理プログラムの命令に従い、通信コントローラから転送された通信バッファに格納された入力データ１をユーザプログラム１の作業領域へ転送する（図中Ｃ）。
【００８４】
ユーザプログラム１の命令に従い、マイクロプロセッサのコア１はユーザプログラム１の作業領域に格納された入力データを用いてシーケンス演算を行い、出力データをメインメモリ上通信バッファへ格納する処理を行う。また入力データを用いて演算を行い、出力されたモーション制御用データを算出する。算出されたモーション制御用データをモーション演算プログラムが作業を行う領域へ転送する。
【００８５】
モーション演算プログラム１の命令に従い、マイクロプロセッサのコア１は、モーション演算プログラム１を用いた演算を行い、制御プログラム１の実行周期に対するモータへの指令値を演算し、出力データを算出する。出力データを通信コントローラに転送するバッファ領域へ転送する。
【００８６】
スケジューラプログラムは次の実行周期の到来を監視し、実行周期の到来を検出すると、制御プログラム１をマイクロプロセッサのコア１に実行させる。一連の処理を定周期で繰り返し、マイクロプロセッサのコア１に実行させる。
【００８７】
次に制御プログラム２の実行について説明する。制御プログラム２の実行において、ＩＯ制御プログラム２の命令に従い、マイクロプロセッサのコア２は、制御プログラム２に関連付けされた外部機器への出力データ１をメインメモリ上から通信コントローラのバッファメモリへ転送する処理を行う（図中Ｂ）。また入力処理プログラムの命令に従い、通信コントローラから転送された通信バッファに格納された入力データ１をユーザプログラム１の作業領域へ転送する（図中Ｄ）。
【００８８】
ユーザプログラム２の命令に従い、マイクロプロセッサのコア２は、ユーザプログラム２の作業領域に格納された入力データを用いてシーケンス演算を行い、出力データをメインメモリ上の通信バッファへ格納する処理を行う。また入力データを用いて演算を行い、出力されたモーション制御等データを算出する。算出されたモーション制御用データをモーション演算プログラム２が作業を行う領域へ転送する。
モーション演算プログラム２の命令に従い、マイクロプロセッサのコア１はモーション演算２を用いた演算を行い、制御プログラム２の実行周期に対応するモータへの指令値を演算し、出力データを算出する。その後に出力データを通信コントローラに転送するための通信バッファへ転送する。
【００８９】
モーション演算プログラム２の実行が完了すると制御プログラム２の実行が完了する。スケジューラプログラムは次の実行周期の到来を監視し、実行周期の到来を検出すると、制御プログラム２をマイクロプロセッサのコア２に実行させる。一連の処理を定周期で繰り返しマイクロプロセッサのコア２に実行させる。
【００９０】
この例では、制御プログラム２は、制御プログラム１の２周期目の演算が終了する前に演算が終了しているが、設定された実行周期のタイミング（制御プログラム１の実行周期の３倍）で出力データを外部機器に送信する。
【００９１】
スケジューラプログラムは次の実行周期の到来を監視し、実行周期の到来を検出すると、制御プログラム２をマイクロプロセッサのコア２に実行させる。一連の処理を定周期で繰り返し、マイクロプロセッサのコア２に実行させる。
【００９２】
本実施例では、複数のモータに対する指令値を制御プログラム１及び制御プログラム２で並列にマイクロプロセッサのコア１、コア２にそれぞれ並列で実行させる。この例では、制御プログラム２は、制御プログラム１の実行周期の３倍の実行周期にて並列で実行される説明をしたが、同じ周期で実行しても良い。制御プログラム１の実行周期の複数倍の周期で実行しても良い。複数のモータの制御を含む制御プログラムを分割することにより、より、制御プログラム１においてモータへの指令値の演算を含むモーションプログラムを制御プログラム２へ分割することにより、実行周期１の周期を短縮させることが可能となる。
【００９３】
本実施例では、制御プログラム１及び制御プログラム２の実行にあたって、ＩＯを制御するプログラムに含まれる、出力処理プログラムの実行から開始したが、図に示すように入力処理プログラムから実行を開始し、ユーザプログラム、モーション演算プログラム、出力処理プログラムの順に周期的に実行させる構成としても良い。
【００９４】
さらに本実施例では、制御プログラム１及び２にモーション演算プログラムを含む例を説明したが、何れかの制御プログラムにモーション演算プログラムの実行を含まない場合があっても良い。
【００９５】
＜実施例２＞
次にマルチコアプロセッサを用いた、制御プログラム１、２及び３の実行の開始のタイミングに関して説明する。
【００９６】
図９は、制御プログラム１−３の実行のタイミングを示す図である。スケジューラプログラムは、所定の時刻の到来を検出すると、制御プログラム１、制御プログラム２の実行を開始させる。制御プログラム３の実行を待ち状態とする。
【００９７】
図中に示す、制御プログラム１のIOはIO制御プログラムの命令に従った動作を示す。プロセッサのコア１はＩＯ制御プログラム１の命令に従い、出力データの送信、入力データの取り込みを行う。（前述した説明と同様の処理のため説明を略す）
図中に示す、制御プログラム１のＵＰＧは、ユーザプログラム１の命令に従った動作を示す。ユーザプログラム１の命令に従い、マイクロプロセッサのコア１は、ユーザプログラム１の作業領域に格納された入力データを用いてシーケンス演算を行い、出力データを通信バッファへ格納する処理を行うと共に、モーション演算プログラム１が演算する領域へ格納する。
【００９８】
図中に示す、制御プログラム１のＭＣは、モーション演算プログラム１の命令に従った動作を示す。マイクロプロセッサのコア１は、制御プログラム１の実行周期に対するモータへの指令値を演算し、出力データを算出し、出力データを通信コントローラへ転送するためのバッファへ格納する。制御プログラム１の終了にあたり、図示しないが、システムプログラムの命令に従い、制御プログラム１で用いた入力データ、出力データ、中間データについて制御プログラム３の演算に用いられるデータを制御プログラム３の作業領域へ転送する。
【００９９】
図中に示す、制御プログラム２のＩＯはＩＯ制御プログラム２の命令に従った動作を示す。プロセッサのコア２はＩＯ制御プログラム２の命令に従い、出力データの送信、入力データの取り込みを行う。（前述した説明と同様の処理のため説明を略す）
図中に示す、制御プログラム２のＵＰＧは、ユーザプログラム２の命令に従った動作を示す。ユーザプログラム２の命令に従い、マイクロプロセッサのコア２は、ユーザプログラム２の作業領域に格納された入力データを用いてシーケンス演算を行い、出力データを通信バッファへ格納する処理を行うと共に、モーション演算プログラム２が演算する領域へ格納する。
【０１００】
図中に示す、制御プログラム２のＭＣは、モーション演算プログラム２の命令に従った動作を示す。マイクロプロセッサのコア２は、制御プログラム２の実行周期に対するモータへの指令値を演算し、出力データを算出し、出力データを通信コントローラへ転送するためのバッファへ格納する。
【０１０１】
スケジューラプログラムは、制御プログラム１の実行が上述の通り完了すると、マイクロプロセッサのコア３に制御プログラム３の実行を開始させる。
【０１０２】
図中に示す制御プログラムのＵＰＧは、制御プログラム３に含まれる、ユーザプログラム３の命令に従った動作を示す。ユーザプログラム３の命令に従って、制御プログラム３の実行領域に格納されているデータを用いて、ユーザプログラム３の演算を実行し出力データを算出し、制御プログラム３の出力データを制御プログラム３の出力バッファへ格納する。
【０１０３】
図示しないが、スケジューラプログラムとシステムプログラムは、制御プログラム１及び制御プログラム３の実行周期が揃うタイミングの前に、制御プログラム１の開始前に、制御プログラム３の出力バッファから、出力データを通信コントローラへ転送するためのバッファへコピーする。
【０１０４】
この処理により、図中で（Ａ）で示したとおり制御プログラム３の出力データは、制御プログラム１の実行周期の４周期目の出力処理プログラム１の命令に従い、通信コントローラへ転送される。
【０１０５】
この例では、３のプロセッサコア（コア１−コア３）を用いることにより、制御プログラム１、制御プログラム２、制御プログラム３を実行する例を説明したが、２のプロセッサコアを用いて実行することも可能である。２のプロセッサコアでこれらのプログラムを実行する場合、スケジューラプログラムは、制御プログラム１乃至制御プログラム２の空き時間で、かつ制御プログラム１の実行が完了した後に、制御プログラム３の実行を開始させる。制御プログラム３が実行途中であっても、スケジューラプログラムは、制御プログラム１または制御プログラム２の実行開始のタイミングが到来すると、制御プログラム実行３を停止し、制御プログラム１または制御プログラム３の空き時間で実行を再開されるようにする。
【０１０６】
所定の制御プログラムの実行開始の開始タイミング（実行周期が開始されるタイミング）が到来すると、制御プログラム３の実行を待ち状態とし、制御プログラム３の実行開始のタイミングを制御プログラム１の実行終了のタイミングとし、制御プログラム１から制御プログラム３の作業領域へコピーするように構成している。
【０１０７】
これにより、ユーザは制御プログラム１で実行させるプログラムを検討する際に、比較的長い時間がかかっても良いプログラムを制御プログラム３に割り当てることができる。これにより、制御プログラム１の実行周期をさらに短縮させることができる可能性がある。
【符号の説明】
【０１０８】
１、８  制御装置
２１４  出力処理プログラム
２１６  入力処理プログラム
２１８  ＩＯ処理プログラム
２３０  制御プログラム
２３６  ユーザプログラム
１４、５３  ＩＯユニット
１２２、１４２  ＤＭＡ制御回路
２１０、２２０  システムプログラム
【図１】
0006540166.tif 000002
【図２】
0006540166.tif 000003
【図３】
0006540166.tif 000004
【図４】
0006540166.tif 000005
【図５】
0006540166.tif 000006
【図６】
0006540166.tif 000007
【図７】
0006540166.tif 000008
【図８】
0006540166.tif 000009
【図９】
0006540166.tif 000010