(57)【要約】【課題】システムプログラムを入れ替えることなく、または共通のシステムプログラムを用いながら、ＰＬＣの制御動作のスケジュールについての高い自由度を実現する。【解決手段】システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。【選択図】図１３
2013025353.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御するＰＬＣのＣＰＵユニットであって、
マイクロプロセッサと、
記憶手段と、
通信回路とを備え、
前記記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられ、
前記マイクロプロセッサは、前記記憶手段に格納された、前記システムプログラムおよび前記制御プログラムを実行し、
前記通信回路は、前記制御プログラムの実行によって生成される出力データを送信するとともに前記制御プログラムの実行に使用される入力データを受信し、
前記システムプログラムは、前記制御プログラムの実行を制御するためのプロシージャと前記出力データの出力および前記入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含み、
前記システムプログラムは、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されているときに、前記マイクロプロセッサに、前記スケジュール構築データに含まれているプロシージャの実行順序の指定に従って前記プロシージャのライブラリに収録されているプロシージャを実行させる、ＰＬＣのＣＰＵユニット。
【請求項２】
前記スケジュール構築データは、前記プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、前記スケジュール構築データに含まれている、前記スレッドを生成するための指定に従って、スレッドを生成する処理を含む、請求項１に記載のＰＬＣのＣＰＵユニット。
【請求項３】
前記スケジュール構築データは、前記スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む、請求項２に記載のＰＬＣのＣＰＵユニット。
【請求項４】
前記スケジュール構築データは、１または複数の前記スレッドを含む、繰り返し実行の単位となるタスクを設定するための指定を含み、
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、前記スケジュール構築データに含まれている前記タスクを設定するための指定に従って、タスクを設定する処理を含む、請求項２に記載のＰＬＣのＣＰＵユニット。
【請求項５】
前記ＰＬＣのＣＰＵユニットは、さらに、前記スケジュール構築データを取得するスケジュール構築データ取得手段を備える、請求項１〜４のいずれか１項に記載のＰＬＣのＣＰＵユニット。
【請求項６】
前記出力データの送信と、前記入力データの受信と、前記入力データを使用して前記出力データを生成する前記制御プログラムの実行とを繰り返させるための、前記プロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されている、請求項１〜４のいずれか１項に記載のＰＬＣのＣＰＵユニット。
【請求項７】
前記ＰＬＣのＣＰＵユニットは、さらに、制御サイクルの周期を設定する手段を備え、
前記通信回路は、前記制御サイクルごとに、前記出力データの送信および前記入力データの受信を行い、
前記スケジュール構築データは、前記マイクロプロセッサに、前記制御プログラムの実行が終了した制御サイクルの次の制御サイクルにおいて、前記通信回路による出力データの送信および入力データの受信の後に、前記制御プログラムの実行を開始させ、前記制御プログラムの実行が終了しなかった制御サイクルの次の制御サイクルにおいて、前記制御プログラムの未実行の部分を実行させるための、前記プロシージャの実行順序の指定を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項８】
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、
受信された入力データを格納する受信バッファを前記記憶手段内に生成する処理と、
前記制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを前記記憶手段内に生成する処理とを含み、
前記スケジュール構築データは、前記マイクロプロセッサに、
受信された前記入力データを前記受信バッファからその入力データに対応する前記入力同期バッファにコピーする入力コピー処理と、
前記制御プログラムを実行開始する制御プログラム開始処理とを実行させるための、前記プロシージャの実行順序の指定を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項９】
前記入力データの受信は、制御サイクルごとに実行され、
前記スケジュール構築データは、前記マイクロプロセッサに、前記制御サイクルの整数倍の実行サイクルごとに前記制御プログラム開始処理を実行させ、前記制御プログラムの実行サイクルが開始した前記制御サイクルにおいて受信された入力データを対象として、前記入力コピー処理を実行させるための、前記プロシージャの実行順序の指定を含む、請求項８に記載のＰＬＣのＣＰＵユニット。
【請求項１０】
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、さらに、
送信されるべき出力データを格納する送信バッファを前記記憶手段内に生成する処理と、
前記送信バッファにコピーされる前記出力データが格納される出力同期バッファを前記出力データごとに前記記憶手段内に生成する処理とを含み、
前記スケジュール構築データは、さらに、前記マイクロプロセッサに、前記出力データを前記出力同期バッファから前記送信バッファにコピーする出力コピー処理を実行させるための、前記プロシージャの実行順序の指定を含む、請求項８に記載のＰＬＣのＣＰＵユニット。
【請求項１１】
前記スケジュール構築データは、前記マイクロプロセッサに、前記制御プログラム開始処理を制御サイクルの整数倍の実行サイクルごとに実行させ、前記制御プログラムの実行サイクルの最初の制御サイクルにおいてその前の実行サイクルにおける前記制御プログラムの実行により生成された前記出力データが前記送信バッファから送信されることになるタイミングで前記出力コピー処理を実行させるための、前記プロシージャの実行順序の指定を含む、請求項１０に記載のＰＬＣのＣＰＵユニット。
【請求項１２】
前記記憶手段は、さらに、前記制御プログラムが使用する変数についての属性データの格納に用いられ、
前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、
前記グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、
各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする変数同期バッファを前記記憶手段内に生成する処理とを含み、
前記スケジュール構築データは、前記マイクロプロセッサに、
オーナー側制御プログラムを実行開始するオーナー側開始処理と、
オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記変数同期バッファにコピーする変数コピー処理と、
リファラ側制御プログラムを実行開始するリファラ側開始処理とを実行させるための、前記プロシージャの実行順序の指定を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項１３】
前記制御プログラムは、モータの運動を制御するためのモーション指令値を算出するモーション演算プログラムと、ユーザにおける制御目的に応じて作成され、前記モーション演算プログラムに対してその実行に必要な指示を与える処理を含むユーザプログラムとを含み、
前記スケジュール構築データは、前記ＰＬＣのＣＰＵユニットに、前記通信回路による前記出力データの送信および前記入力データの受信、前記ユーザプログラムの実行、ならびに前記モーション演算プログラムの実行を、この順序で、繰り返し実行させるための、前記プロシージャの実行順序の指定を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項１４】
前記通信回路は、制御サイクルの周期で前記出力データを送信しおよび前記入力データを受信し、
前記制御プログラムは、第１制御プログラムおよび第２制御プログラムを含み、
前記第１制御プログラムは、モータの運動を制御するための第１モーション指令値データを生成する第１モーション演算プログラムを含み、
前記第２制御プログラムは、モータの運動を制御するための第２モーション指令値データを生成する第２モーション演算プログラムを含み、
前記第１制御プログラムおよび前記第２制御プログラムの少なくとも一方は、ユーザにおける制御目的に応じて作成され前記第１モーション演算プログラムおよび前記第２モーション演算プログラムに対してその実行に必要な指示を与える命令を含むユーザプログラムを含み、
前記スケジュール構築データは、前記マイクロプロセッサに、
前記制御サイクルの周期と同じ周期の第１実行サイクルごとに前記第１制御プログラムを実行開始させ、前記制御サイクルの周期の２以上の整数倍の周期の第２実行サイクルごとに前記第２制御プログラムを実行開始させ、
前記第２実行サイクルが開始する前記制御サイクルにおいて、前記第１制御プログラムの実行終了後に前記第２制御プログラムを実行開始させ、当該制御サイクルが終了するまでに前記第２制御プログラムが終了しなければ次の制御サイクルにおいて前記第１制御プログラムの実行終了後に前記第２制御プログラムの未実行の部分の実行を開始させるための、前記プロシージャの実行順序の指定を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項１５】
前記マイクロプロセッサは、少なくとも第１コアおよび第２コアを含み、
前記制御プログラムは、第１制御プログラムと第２制御プログラムとを含み、
前記スケジュール構築データは、前記出力データの送信および前記入力データの受信が終了した後に、前記第１コアに前記第１制御プログラムを実行させるとともに、前記第２コアに前記第２制御プログラムを前記第１制御プログラムの実行と並列に実行させるための、前記プロシージャの実行順序の指定を含む、請求項６に記載のＰＬＣのＣＰＵユニット。
【請求項１６】
マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するＰＬＣのＣＰＵユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムであって、
前記記憶手段は、前記システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられ、
前記マイクロプロセッサは、前記記憶手段に格納された前記システムプログラムおよび前記制御プログラムを実行し、
前記通信回路は、前記制御プログラムの実行によって生成される出力データを送信および前記制御プログラムの実行に使用される入力データを受信し、
前記システムプログラムは、前記制御プログラムの実行を制御するためのプロシージャと前記出力データの出力および前記入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含み、
前記システムプログラムは、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されているときに、前記マイクロプロセッサに、前記スケジュール構築データに含まれているプロシージャの実行順序の指定に従って前記プロシージャのライブラリに収録されているプロシージャを実行させる、ＰＬＣ用のシステムプログラム。
【請求項１７】
前記スケジュール構築データは、前記プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、前記スケジュール構築データに含まれている、前記スレッドを生成するための指定に従って、スレッドを生成する処理を含む、請求項１６に記載のＰＬＣ用のシステムプログラム。
【請求項１８】
前記スケジュール構築データは、前記スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む、請求項１７に記載のＰＬＣ用のシステムプログラム。
【請求項１９】
マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するＰＬＣのＣＰＵユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを格納した記録媒体であって、
前記記憶手段は、前記システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられ、
前記マイクロプロセッサは、前記記憶手段に格納された前記システムプログラムおよび前記制御プログラムを実行し、
前記通信回路は、前記制御プログラムの実行によって生成される出力データを送信および前記制御プログラムの実行に使用される入力データを受信し、
前記システムプログラムは、前記制御プログラムの実行を制御するためのプロシージャと前記出力データの出力および前記入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含み、
前記システムプログラムは、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されているときに、前記マイクロプロセッサに、前記スケジュール構築データに含まれているプロシージャの実行順序の指定に従って前記プロシージャのライブラリに収録されているプロシージャを実行させる、ＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２０】
前記スケジュール構築データは、前記プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、
前記システムプログラムは、前記ＰＬＣの制御動作の実行準備処理として、前記スケジュール構築データに含まれている、前記スレッドを生成するための指定に従って、スレッドを生成する処理を含む、請求項１９に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２１】
前記スケジュール構築データは、前記スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む、請求項２０に記載のＰＬＣ用のシステムプログラムを格納した記録媒体。
【請求項２２】
請求項５に記載のＰＬＣのＣＰＵユニットと、前記ＰＬＣの使用を支援するためのＰＬＣサポート装置とを含むＰＬＣシステムであって、
前記ＰＬＣサポート装置は、記憶部と、演算部とを備え、
前記記憶部は、ＰＬＣサポートプログラムおよび前記スケジュール構築データの格納に用いられ、
前記ＰＬＣサポートプログラムは、前記スケジュール構築データを前記ＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、ＰＬＣシステム。
【請求項２３】
制御対象を制御するＰＬＣのＣＰＵユニットの使用を支援するためのＰＬＣサポート装置であって、
前記ＰＬＣのＣＰＵユニットは、
制御プログラムの実行を制御するためのプロシージャと、前記制御プログラムの実行によって生成される出力データの出力および前記制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、
前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを備え、
前記ＰＬＣサポート装置は、記憶部と、演算部とを備え、
前記記憶部は、ＰＬＣサポートプログラムおよび前記スケジュール構築データの格納に用いられ、
前記ＰＬＣサポートプログラムは、前記スケジュール構築データを前記ＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、ＰＬＣサポート装置。
【請求項２４】
制御対象を制御するＰＬＣのＣＰＵユニットの使用を支援するためのＰＬＣサポート装置において実行されるためのＰＬＣサポートプログラムであって、
前記ＰＬＣのＣＰＵユニットは、
制御プログラムの実行を制御するためのプロシージャと、前記制御プログラムの実行によって生成される出力データの出力および前記制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、
前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを備え、
前記ＰＬＣサポート装置は、記憶部と、演算部とを備え、
前記記憶部は、前記ＰＬＣサポートプログラムおよび前記スケジュール構築データの格納に用いられ、
前記ＰＬＣサポートプログラムは、前記スケジュール構築データを前記ＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、ＰＬＣサポートプログラム。
【請求項２５】
制御対象を制御するＰＬＣのＣＰＵユニットの使用を支援するためのＰＬＣサポート装置において実行されるためのＰＬＣサポートプログラムを格納した記録媒体であって、
前記ＰＬＣのＣＰＵユニットは、
制御プログラムの実行を制御するためのプロシージャと、前記制御プログラムの実行によって生成される出力データの出力および前記制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、
前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを備え、
前記ＰＬＣサポート装置は、記憶部と、演算部とを備え、
前記記憶部は、前記ＰＬＣサポートプログラムおよび前記スケジュール構築データの格納に用いられ、
前記ＰＬＣサポートプログラムは、前記スケジュール構築データを前記ＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、ＰＬＣサポートプログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械や設備などの動作を制御するために用いられるＰＬＣ（Programmable Logic Controller、あるいはプログラマブルコントローラとも称される）における制御動作のスケジュールに関する。
【背景技術】
【０００２】
ＰＬＣは、たとえば、制御プログラムを実行するマイクロプロセッサを有するＣＰＵ（Central Processing Unit）ユニット、外部のスイッチやセンサからの信号入力および外部のリレーやアクチュエータへの信号出力を担当するＩＯ（Input Output）ユニットなどの複数のユニットで構成される。ＣＰＵユニットは、他のユニットへの出力データの出力と、他のユニットからの入力データの入力と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する。制御プログラムは、ユーザにおける制御目的に応じて作成されるユーザプログラムを含む。制御プログラムは、ユーザプログラムの中で実行が指示されるモーション演算プログラムを含んでいてもよい。
【０００３】
ＰＬＣにおいて、入力データの入力、出力データの出力、制御プログラム、およびＰＬＣのシステムプログラムの実行のスケジュールについては、以下に例示するように、種々の形態を採用し得る。
【０００４】
特許文献１（特開２０００−１０５６０４号公報）に示されるように、従来の一般的なＰＬＣにおいては、各制御サイクルの中で、１つのシーケンスプログラム（制御プログラム）と一組の出力リフレッシュおよび入力リフレッシュとを実行する。この場合には、制御サイクルと制御プログラムの実行サイクルとは等しい。
【０００５】
ＰＬＣにおいて、複数の制御プログラムを時分割で実行することも知られている。
特許文献２（特開２００７−１４０６５５号公報）には、モータを制御するモーション制御機能とシーケンス演算を実行するＰＬＣ機能とを１つのＣＰＵで処理する装置において、基本クロックの１サイクルごとに、「定周期モーション制御処理および各軸処理」と「高速シーケンス処理」とを実行し、さらに各基本クロックサイクル内の残りの時間において、「低速シーケンス処理」または「非定周期モーション制御処理」を実行することが記載されている。また、低速シーケンス処理が基本クロックサイクル内に終了しない場合には、所定の基本クロック回数分の時間の停止後に残りの処理を実行することが記載されている（たとえば、段落０００４）。
【０００６】
特許文献３（特開２０００−２９３２１０号公報）には、制御装置の動作に関し、周期タスク（制御プログラム）とは別に入力処理および出力処理を行うリフレッシュブロックをそれぞれ複数用意し、各制御サイクルにおいていくつかのリフレッシュブロックといくつかの周期タスクとをそれぞれ選択的に実行することが記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−１０５６０４号公報
【特許文献２】特開２００７−１４０６５５号公報
【特許文献３】特開２０００−２９３２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年、情報技術の分野においては、マイクロプロセッサや通信ネットワークの高速化が進展しつつある。そのため、ＰＬＣにおいてもそれらの技術を利用して、複数の制御プログラムの時分割実行や高速なＰＬＣシステムバスおよび／またはフィールドネットワークの採用が可能となっている。したがって、入力データの入力、出力データの出力、制御プログラム、およびＰＬＣのシステムプログラムの実行を含む制御動作のスケジュールについての自由度を高くするための、装置の処理速度の面での制約は少なくなっている。ここで、制御動作のスケジュールについての自由度には、どのタイミングで行う入力または出力をどの制御プログラムの実行と関連させるかということも含まれる。また、具体的な制御目的に応じて、最適な制御動作のスケジュールはさまざまであるから、ＰＬＣ製品の制御動作のスケジュールについての自由度は高い方が好ましい。
【０００９】
しかしながら、実際のＰＬＣ製品においては、制御動作のスケジュールはＰＬＣ製品のシステムプログラムによって決定されているのが実情であり、いくつかのスケジュールパターンの中からの選択や実行パラメータの調整は可能であるとしても、制御動作のスケジュールをユーザが自由に構築することまではなされていない。
【００１０】
ここで、いくつかのスケジュールパターンの中からの選択とは、たとえば、制御プログラムの実行サイクルの中で、「出力−入力−制御プログラム実行−その他システム処理」の順に実行するか、「入力−制御プログラム実行−出力−その他システム処理」の順に実行するかの選択肢を提供するという程度のことである。また、実行パラメータの調整とは、複数の制御プログラムを時分割で実行する場合に、各制御プログラムに与える実行優先度を調整する程度のことである。
【００１１】
制御動作のスケジュールのパターンを大きく変更したり、新しく追加するプログラムモジュール（たとえば、温度制御用プログラムモジュール、画像処理用プログラムモジュールなど）が担う処理を制御動作のスケジュールに組み込んだりしようとすれば、ＰＬＣ製品のシステムプログラムの少なくとも一部を入れ替える必要がある。そうすると、ＰＬＣ製品は別機種となってしまうので、ＰＬＣ製品のメーカーおよびユーザにおける管理の負担が増大する。また、ユーザの制御目的に最適なスケジュールパターンが特殊なものである場合には、ユーザがそのようなスケジュールパターンを実装したＰＬＣ製品を入手することは現実には困難である。
【００１２】
また、たとえＰＬＣ製品がユーザに提供される段階以降では制御動作のスケジュールパターンの変更ができないようにされている場合であっても、共通のシステムプログラムを用いながら多様なスケジュールパターンを実現できる構成は、多機種のＰＬＣ製品に共通に含まれるプラットフォームとして、ＰＬＣ製品のメーカーにおける開発効率向上やコストダウンに寄与する。
【００１３】
本発明は、システムプログラムを入れ替えることなく、または共通のシステムプログラムを用いながら、ＰＬＣの制御動作のスケジュールについての高い自由度を実現することを目的とする。
【課題を解決するための手段】
【００１４】
本発明のある局面に従えば、制御対象を制御するＰＬＣのＣＰＵユニットを提供する。ＰＬＣのＣＰＵユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。マイクロプロセッサは、記憶手段に格納された、システムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信するとともに制御プログラムの実行に使用される入力データを受信する。システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。
【００１５】
好ましくは、スケジュール構築データは、プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含む。システムプログラムは、ＰＬＣの制御動作の実行準備処理として、スケジュール構築データに含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理を含む。
【００１６】
さらに好ましくは、スケジュール構築データは、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む。
【００１７】
あるいは好ましくは、スケジュール構築データは、１または複数のスレッドを含む、繰り返し実行の単位となるタスクを設定するための指定を含み、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、スケジュール構築データに含まれているタスクを設定するための指定に従って、タスクを設定する処理を含む。
【００１８】
好ましくは、ＰＬＣのＣＰＵユニットは、さらに、スケジュール構築データを取得するスケジュール構築データ取得手段を含む。
【００１９】
好ましくは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返させるための、プロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されている。
【００２０】
さらに好ましくは、ＰＬＣのＣＰＵユニットは、さらに、制御サイクルの周期を設定する手段を含み、通信回路は、制御サイクルごとに、出力データの送信および入力データの受信を行い、スケジュール構築データは、マイクロプロセッサに、制御プログラムの実行が終了した制御サイクルの次の制御サイクルにおいて、通信回路による出力データの送信および入力データの受信の後に、制御プログラムの実行を開始させ、制御プログラムの実行が終了しなかった制御サイクルの次の制御サイクルにおいて、制御プログラムの未実行の部分を実行させるための、プロシージャの実行順序の指定を含む。
【００２１】
あるいは好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段内に生成する処理と、制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを記憶手段内に生成する処理とを含み、スケジュール構築データは、マイクロプロセッサに、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラムを実行開始する制御プログラム開始処理とを実行させるための、プロシージャの実行順序の指定を含む。
【００２２】
さらに好ましくは、入力データの受信は、制御サイクルごとに実行され、スケジュール構築データは、マイクロプロセッサに、制御サイクルの整数倍の実行サイクルごとに制御プログラム開始処理を実行させ、制御プログラムの実行サイクルが開始した制御サイクルにおいて受信された入力データを対象として、入力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。
【００２３】
あるいはさらに好ましくは、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含み、スケジュール構築データは、さらに、マイクロプロセッサに、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。
【００２４】
さらに好ましくは、スケジュール構築データは、マイクロプロセッサに、制御プログラム開始処理を制御サイクルの整数倍の実行サイクルごとに実行させ、制御プログラムの実行サイクルの最初の制御サイクルにおいてその前の実行サイクルにおける制御プログラムの実行により生成された出力データが送信バッファから送信されることになるタイミングで出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。
【００２５】
あるいは好ましくは、記憶手段は、さらに、制御プログラムが使用する変数についての属性データの格納に用いられ、属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする変数同期バッファを記憶手段内に生成する処理とを含み、スケジュール構築データは、マイクロプロセッサに、オーナー側制御プログラムを実行開始するオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する変数同期バッファにコピーする変数コピー処理と、リファラ側制御プログラムを実行開始するリファラ側開始処理とを実行させるための、プロシージャの実行順序の指定を含む。
【００２６】
あるいは好ましくは、制御プログラムは、モータの運動を制御するためのモーション指令値を算出するモーション演算プログラムと、ユーザにおける制御目的に応じて作成され、モーション演算プログラムに対してその実行に必要な指示を与える処理を含むユーザプログラムとを含み、スケジュール構築データは、ＰＬＣのＣＰＵユニットに、通信回路による出力データの送信および入力データの受信、ユーザプログラムの実行、ならびにモーション演算プログラムの実行を、この順序で、繰り返し実行させるための、プロシージャの実行順序の指定を含む。
【００２７】
あるいは好ましくは、通信回路は、制御サイクルの周期で出力データを送信しおよび入力データを受信し、制御プログラムは、第１制御プログラムおよび第２制御プログラムを含み、第１制御プログラムは、モータの運動を制御するための第１モーション指令値データを生成する第１モーション演算プログラムを含み、第２制御プログラムは、モータの運動を制御するための第２モーション指令値データを生成する第２モーション演算プログラムを含み、第１制御プログラムおよび第２制御プログラムの少なくとも一方は、ユーザにおける制御目的に応じて作成され第１モーション演算プログラムおよび第２モーション演算プログラムに対してその実行に必要な指示を与える命令を含むユーザプログラムを含み、スケジュール構築データは、マイクロプロセッサに、制御サイクルの周期と同じ周期の第１実行サイクルごとに第１制御プログラムを実行開始させ、制御サイクルの周期の２以上の整数倍の周期の第２実行サイクルごとに第２制御プログラムを実行開始させ、第２実行サイクルが開始する制御サイクルにおいて、第１制御プログラムの実行終了後に第２制御プログラムを実行開始させ、当該制御サイクルが終了するまでに第２制御プログラムが終了しなければ次の制御サイクルにおいて第１制御プログラムの実行終了後に第２制御プログラムの未実行の部分の実行を開始させるための、プロシージャの実行順序の指定を含む。
【００２８】
あるいは好ましくは、マイクロプロセッサは、少なくとも第１コアおよび第２コアを含み、制御プログラムは、第１制御プログラムと第２制御プログラムとを含み、スケジュール構築データは、出力データの送信および入力データの受信が終了した後に、第１コアに第１制御プログラムを実行させるとともに、第２コアに第２制御プログラムを第１制御プログラムの実行と並列に実行させるための、プロシージャの実行順序の指定を含む。
【００２９】
本発明の別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するＰＬＣのＣＰＵユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを提供する。記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信および制御プログラムの実行に使用される入力データを受信する。システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。
【００３０】
好ましくは、スケジュール構築データは、プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、スケジュール構築データに含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理を含む。
【００３１】
さらに好ましくは、スケジュール構築データは、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む。
【００３２】
本発明のさらに別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するＰＬＣのＣＰＵユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのＰＬＣ用のシステムプログラムを格納した記録媒体を提供する。記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信および制御プログラムの実行に使用される入力データを受信する。システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。
【００３３】
好ましくは、スケジュール構築データは、プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、システムプログラムは、ＰＬＣの制御動作の実行準備処理として、スケジュール構築データに含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理を含む。
【００３４】
さらに好ましくは、スケジュール構築データは、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む。
【００３５】
本発明のさらに別の局面に従えば、上述のＰＬＣのＣＰＵユニットと、ＰＬＣの使用を支援するためのＰＬＣサポート装置とを含むＰＬＣシステムを提供する。ＰＬＣサポート装置は、記憶部と、演算部とを含む。記憶部は、ＰＬＣサポートプログラムおよびスケジュール構築データの格納に用いられる。ＰＬＣサポートプログラムは、スケジュール構築データをＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。
【００３６】
本発明のさらに別の局面に従えば、制御対象を制御するＰＬＣのＣＰＵユニットの使用を支援するためのＰＬＣサポート装置を提供する。ＰＬＣのＣＰＵユニットは、制御プログラムの実行を制御するためのプロシージャと、制御プログラムの実行によって生成される出力データの出力および制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを含む。ＰＬＣサポート装置は、記憶部と、演算部とを含む。記憶部は、ＰＬＣサポートプログラムおよびスケジュール構築データの格納に用いられる。ＰＬＣサポートプログラムは、スケジュール構築データをＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。
【００３７】
本発明のさらに別の局面に従えば、制御対象を制御するＰＬＣのＣＰＵユニットの使用を支援するためのＰＬＣサポート装置において実行されるためのＰＬＣサポートプログラムを提供する。ＰＬＣのＣＰＵユニットは、制御プログラムの実行を制御するためのプロシージャと、制御プログラムの実行によって生成される出力データの出力および制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを含む。ＰＬＣサポート装置は、記憶部と、演算部とを含む。記憶部は、ＰＬＣサポートプログラムおよびスケジュール構築データの格納に用いられる。ＰＬＣサポートプログラムは、スケジュール構築データをＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。
【００３８】
本発明のさらに別の局面に従えば、制御対象を制御するＰＬＣのＣＰＵユニットの使用を支援するためのＰＬＣサポート装置において実行されるためのＰＬＣサポートプログラムを格納した記録媒体を提供する。ＰＬＣのＣＰＵユニットは、制御プログラムの実行を制御するためのプロシージャと、制御プログラムの実行によって生成される出力データの出力および制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを含む。ＰＬＣサポート装置は、記憶部と、演算部とを含む。記憶部は、ＰＬＣサポートプログラムおよびスケジュール構築データの格納に用いられる。ＰＬＣサポートプログラムは、スケジュール構築データをＰＬＣのＣＰＵユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。
【発明の効果】
【００３９】
本発明によれば、システムプログラムを入れ替えることなく、または共通のシステムプログラムを用いながら、ＰＬＣの制御動作のスケジュールについての高い自由度を実現することできる。
【図面の簡単な説明】
【００４０】
【図１】本発明の実施の形態に係るＰＬＣシステムの概略構成を示す模式図である。
【図２】本発明の実施の形態に係るＣＰＵユニットのハードウェア構成を示す模式図である。
【図３】本発明の実施の形態に係るＣＰＵユニットで実行されるソフトウェア構成を示す模式図である。
【図４】本発明の実施の形態に係るＣＰＵユニットのメインメモリの領域構成を示す模式図である。
【図５】本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置のハードウェア構成を示す模式図である。
【図６】本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置のソフトウェア構成を示す模式図である。
【図７】本発明の実施の形態１に係るＣＰＵユニットにおけるシステムプログラムの全体処理を示すフローチャートである。
【図８】本発明の実施の形態１において用意されるタスクの設定項目と各設定項目の説明とを表形式で示す図である。
【図９】本発明の実施の形態１において用意されているスレッドの設定項目と各設定項目の説明とを表形式で示す図である。
【図１０】本発明の実施の形態１において用意されているプロシージャの１つである、制御サイクル開始プロシージャについて、その機能、設定項目および設定項目の説明を示す図である。
【図１１】本発明の実施の形態１において用意されている、制御サイクル開始プロシージャ以外のプロシージャについて、各プロシージャの名称および機能を示す図である。
【図１２】本発明の実施の形態１のスケジュール例１に対応するスケジュール構築データ２３４を示す図である。
【図１３】本発明の実施の形態１のスケジュール例１の第ｋサイクルのシーケンス図である。
【図１４】本発明の実施の形態１のスケジュール例１の第ｋ＋１サイクルのシーケンス図である。
【図１５】本発明の実施の形態１のスケジュール例１において、制御Ａスレッドの実行が第ｋサイクル内に終了しない場合の動作を示すシーケンス図である。
【図１６】本発明の実施の形態１のスケジュール例１において、制御Ａスレッドの実行が第ｋサイクル内に終了しない場合の動作を示すシーケンス図である。
【図１７】本発明の実施の形態１において用意される同期入力コピープロシージャの動作を説明するためのシーケンス図である。
【図１８】本発明の実施の形態１において用意される同期出力コピープロシージャの動作を説明するためのシーケンス図である。
【図１９】本発明の実施の形態１において用意される変数配信プロシージャおよび変数参照開始プロシージャの動作を説明するためのシーケンス図である。
【図２０】本発明の実施の形態１のスケジュール例２に対応するスケジュール構築データ２３４を示す図である。
【図２１】本発明の実施の形態１のスケジュール例２の第ｋサイクルのシーケンス図である。
【図２２】本発明の実施の形態１のスケジュール例３に対応するスケジュール構築データを示す図である。
【図２３】本発明の実施の形態１のスケジュール例３の第ｋサイクルのシーケンス図である。
【図２４】本発明の実施の形態１のスケジュール例３の第ｋ＋１サイクルのシーケンス図である。
【図２５】本発明の実施の形態１のスケジュール例４に対応するスケジュール構築データを示す図である。
【図２６】本発明の実施の形態１のスケジュール例４の第ｋサイクルのシーケンス図である。
【図２７】本発明の実施の形態１のスケジュール例４の第ｋ＋１サイクルのシーケンス図である。
【図２８】本発明の実施の形態１のスケジュール例５に対応するスケジュール構築データを示す図である。
【図２９】本発明の実施の形態１のスケジュール例５の第ｋサイクルのシーケンス図である。
【図３０】本発明の実施の形態１のスケジュール例６に対応するシーケンス図である。
【図３１】本発明の実施の形態１のスケジュール例６において、制御プログラム内のプログラム構成と指示の流れとについて説明するための模式図である。
【図３２】本発明の実施の形態１のスケジュール例７に対応するスケジュール構築データを示す図である。
【図３３】本発明の実施の形態１のスケジュール例７の第ｋサイクルのシーケンス図である。
【図３４】本発明の実施の形態１のスケジュール例７の第ｋ＋１サイクルのシーケンス図である。
【図３５】本発明の実施の形態１のスケジュール例８に対応するスケジュール構築データを示す図である。
【図３６】本発明の実施の形態１のスケジュール例８の第ｋサイクルおよび第ｋ＋１サイクルのシーケンス図である。
【図３７】本発明の実施の形態１のスケジュール例９に対応するスケジュール構築データを示す図である。
【図３８】本発明の実施の形態１のスケジュール例９の第ｋサイクルおよび第ｋ＋１サイクルのシーケンス図である。
【図３９】本発明の実施の形態２において用意されるスレッドの設定項目と各設定項目の説明とを表形式で示す図である。
【図４０】本発明の実施の形態２において用意されているプロシージャの名称および機能を示す図である。
【図４１】本発明の実施の形態２のスケジュール例に対応するスケジュール構築データを示す図である。
【図４２】本発明の実施の形態２のスケジュール例の第ｋサイクルのシーケンス図である。
【図４３】本発明の実施の形態２のスケジュール例の第ｋ＋１サイクルのシーケンス図である。
【図４４】本発明の実施の形態３に係る各プロシージャが共通して有する実行制御機能が提供する処理を示すフローチャートである。
【図４５】本発明の実施の形態３において用意されているプロシージャの１つである、制御サイクル開始プロシージャについて、その機能、設定項目および設定項目の説明を示す図である。
【図４６】本発明の実施の形態３において用意されている、制御サイクル開始プロシージャ以外のプロシージャについて、各プロシージャの名称および機能を示す図である。
【図４７】本発明の実施の形態３のスケジュール例に対応するスケジュール構築データを示す図である。
【図４８】図４７のスケジュール構築データに対応するスケジュール例の第ｋサイクルのシーケンス図である。
【図４９】図４７のスケジュール構築データに対応するスケジュール例の第ｋ＋１サイクルのシーケンス図である。
【発明を実施するための形態】
【００４１】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００４２】
＜Ａ．システム構成＞
本実施の形態に係るＰＬＣは、機械や設備などの制御対象を制御する。本実施の形態に係るＰＬＣは、その構成要素としてＣＰＵユニットを含む。ＣＰＵユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、プログラムの実行を制御するシステムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。スケジュール構築データは、本実施の形態に係るＰＬＣの制御動作を高い自由度でスケジュールするための設定値などを含む。このスケジュール構築データの詳細については後述する。
【００４３】
マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信するとともに制御プログラムの実行に使用される入力データを受信する。まず、図１を参照して、本実施の形態に係るＰＬＣ１のシステム構成について説明する。
【００４４】
図１は、本発明の実施の形態に係るＰＬＣシステムの概略構成を示す模式図である。図１を参照して、ＰＬＣシステムＳＹＳは、ＰＬＣ１と、ＰＬＣ１とフィールドネットワーク２を介して接続されるサーボモータドライバ３およびリモートＩＯターミナル５と、フィールド機器である検出スイッチ６およびリレー７とを含む。また、ＰＬＣ１には、接続ケーブル１０などを介してＰＬＣサポート装置８が接続される。
【００４５】
ＰＬＣ１は、主たる演算処理を実行するＣＰＵユニット１３と、１つ以上のＩＯユニット１４と、特殊ユニット１５とを含む。これらのユニットは、ＰＬＣシステムバス１１を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット１２によって適切な電圧の電源が供給される。なお、ＰＬＣ１として構成される各ユニットは、ＰＬＣメーカーが提供するものであるので、ＰＬＣシステムバス１１は、一般にＰＬＣメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク２については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。
【００４６】
ＣＰＵユニット１３の詳細については、図２を参照して後述する。
ＩＯユニット１４は、一般的な入出力処理に関するユニットであり、オン／オフといった２値化されたデータの入出力を司る。すなわち、ＩＯユニット１４は、検出スイッチ６などのセンサが何らかの対象物を検出している状態（オン）および何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット１４は、リレー７やアクチュエータといった出力先に対して、活性化するための指令（オン）および不活性化するための指令（オフ）のいずれかを出力する。
【００４７】
特殊ユニット１５は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット１４ではサポートしない機能を有する。
【００４８】
フィールドネットワーク２は、ＣＰＵユニット１３と遣り取りされる各種データを伝送する。フィールドネットワーク２としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。
【００４９】
なお、図１には、ＰＬＣシステムバス１１およびフィールドネットワーク２の両方を有するＰＬＣシステムＳＹＳを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク２ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク２を使用せずに、サーボモータドライバ３をＰＬＣシステムバス１１に直接接続してもよい。さらに、フィールドネットワーク２の通信ユニットをＰＬＣシステムバス１１に接続し、ＣＰＵユニット１３から当該通信ユニット経由で、フィールドネットワーク２に接続された機器との間の通信を行うようにしてもよい。
【００５０】
なお、ＰＬＣ１は、ＣＰＵユニット１３にＩＯユニット１４の機能やサーボモータドライバ３の機能を持たせることにより、ＩＯユニット１４やサーボモータドライバ３などを介さずにＣＰＵユニット１３が直接制御対象を制御する構成でもよい。
【００５１】
サーボモータドライバ３は、フィールドネットワーク２を介してＣＰＵユニット１３と接続されるとともに、ＣＰＵユニット１３からの指令値に従ってサーボモータ４を駆動する。より具体的には、サーボモータドライバ３は、ＰＬＣ１から一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ３は、サーボモータ４の軸に接続されている位置センサ（ロータリーエンコーダ）やトルクセンサといった検出器から、位置、速度（典型的には、今回位置と前回位置との差から算出される）、トルクといったサーボモータ４の動作に係る実測値を取得する。そして、サーボモータドライバ３は、ＣＰＵユニット１３からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ３は、実測値が目標値に近づくようにサーボモータ４を駆動するための電流を調整する。なお、サーボモータドライバ３は、サーボモータアンプと称されることもある。
【００５２】
また、図１には、サーボモータ４とサーボモータドライバ３とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００５３】
図１に示すＰＬＣシステムＳＹＳのフィールドネットワーク２には、さらに、リモートＩＯターミナル５が接続されている。リモートＩＯターミナル５は、基本的には、ＩＯユニット１４と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル５は、フィールドネットワーク２でのデータ伝送に係る処理を行うための通信カプラ５２と、１つ以上のＩＯユニット５３とを含む。これらのユニットは、リモートＩＯターミナルバス５１を介して、データを互いに遣り取りできるように構成される。
【００５４】
ＰＬＣサポート装置８の詳細については後述する。
＜Ｂ．ＣＰＵユニットのハードウェア構成＞
次に、図２を参照して、ＣＰＵユニット１３のハードウェア構成について説明する。図２は、本発明の実施の形態に係るＣＰＵユニット１３のハードウェア構成を示す模式図である。図２を参照して、ＣＰＵユニット１３は、マイクロプロセッサ１００と、チップセット１０２と、メインメモリ１０４と、不揮発性メモリ１０６と、システムタイマ１０８と、ＰＬＣシステムバスコントローラ１２０と、フィールドネットワークコントローラ１４０と、ＵＳＢコネクタ１１０とを含む。チップセット１０２と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００５５】
マイクロプロセッサ１００およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１００は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１００に必要な命令コードを生成する。さらに、チップセット１０２は、マイクロプロセッサ１００での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００５６】
マイクロプロセッサ１００は、以下に説明する実施の形態１〜３においては、マルチコアであることを明示していない場合には、シングルコアであるとする。マルチコアとはコア数が２以上の場合を意味する（コア数が２の場合も含む）。
【００５７】
ＣＰＵユニット１３は、記憶手段として、メインメモリ１０４および不揮発性メモリ１０６を有する。
【００５８】
メインメモリ１０４は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１３への電源投入後にマイクロプロセッサ１００で実行されるべき各種プログラムを保持する。また、メインメモリ１０４は、マイクロプロセッサ１００による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４としては、ＤＲＡＭ（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）ドライブ８８によって読み取られ、ハードディスク（ＨＤＤ）８４などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【０１００】
上述したように、ＰＬＣサポート装置８は、汎用的なコンピュータを用いて実現されるので、これ以上の詳細な説明は行わない。
【０１０１】
図６は、本発明の実施の形態に係るＣＰＵユニットに接続して用いられるＰＬＣサポート装置８のソフトウェア構成を示す模式図である。図６を参照して、ＰＬＣサポート装置８ではＯＳ３１０が実行され、ＰＬＣサポートプログラム３２０に含まれる各種のプログラムを実行可能な環境が提供される。
【０１０２】
ＰＬＣサポートプログラム３２０は、エディタプログラム３２１と、コンパイラプログラム３２２と、デバッガプログラム３２３と、スケジュール構築データテンプレート３２４と、スケジュール構築データ作成プログラム３２５と、通信プログラム３２６とを含む。ＰＬＣサポートプログラム３２０に含まれるそれぞれのプログラムは、典型的には、ＣＤ−ＲＯＭ９に格納された状態で流通して、ＰＬＣサポート装置８にインストールされる。
【０１０３】
エディタプログラム３２１は、ユーザプログラムを作成するための入力および編集といった機能を提供する。より具体的には、エディタプログラム３２１は、ユーザがキーボード８５やマウス８６を操作してユーザプログラムのソースプログラム３３０を作成する機能に加えて、作成したソースプログラム３３０の保存機能および編集機能を提供する。また、エディタプログラム３２１は、外部からの制御プログラム（その中でも特に、ユーザプログラム）のソースプログラムを入力し、またユーザの操作により既存の制御プログラムのソースプログラムを編集する。
【０１０４】
コンパイラプログラム３２２は、制御プログラムのソースプログラムをコンパイルして、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なオブジェクトプログラム形式のユーザプログラムを生成する機能を提供する。
【０１０５】
デバッガプログラム３２３は、制御プログラムのソースプログラムに対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。
【０１０６】
スケジュール構築データテンプレート３２４は、多くのユーザで使用されるであろういくつかのスケジュールパターンを実現するためのスケジュール構築データを集めたものである。ユーザが自ら作成したスケジュール構築データをテンプレートとして追加できるようにしてもよい。
【０１０７】
スケジュール構築データ作成プログラム３２５は、スケジュール構築データテンプレート３２４として登録されているいずれかのスケジュール構築データをそのまま使用することのユーザの決定を受け付けるか、そのような登録されているスケジュール構築データをユーザに一部変更させるか、新規にスケジュール構築データをユーザに入力させるかのいずれかの処理により、スケジュール構築データ２３４を作成する機能を提供する。ここでは、テンプレートとして登録されているスケジュール構築データをそのまま使用することもスケジュール構築データ２３４を作成する処理の概念に含むものとする。
【０１０８】
通信プログラム３２６は、ＰＬＣ１のＣＰＵユニット１３へ制御プログラムのＣＰＵユニット１３用のオブジェクトプログラム（ユーザプログラム２３６）およびスケジュール構築データ２３４を転送する機能を提供する。
【０１０９】
ＰＬＣサポート装置８は、スケジュール構築データ作成プログラム３２５を有さずに、スケジュール構築データを１種類だけ保持し、そのスケジュール構築データをＣＰＵユニットに転送するだけでもよい。
【０１１０】
すなわち、ＰＬＣサポート装置８は、記憶部（図５のハードディスク（ＨＤＤ）８４など）と、演算部（図５のＣＰＵ８１）とを含む。記憶部は、ＰＬＣサポートプログラム３２０およびスケジュール構築データ２３４の格納に用いられる。ＰＬＣサポートプログラム３２０は、スケジュール構築データをＰＬＣ１のＣＰＵユニット１３が取得可能であるようにして出力するための出力処理を演算部に実行させる。
【０１１１】
スケジュール構築データをＰＬＣ１が取得可能であるようにして出力することには、図１に示す接続ケーブル１０を介して出力する場合のほか、図示しないネットワークを介して直接に出力、または、図示しないネットワークに接続しているサーバコンピュータを介して間接的に出力する場合を含み、さらに、ＰＬＣ１が読み取り可能な可搬型の記録媒体に出力する場合を含む。
【０１１２】
ＰＬＣ１のＣＰＵユニット１３がスケジュール構築データ２３４を取得するスケジュール構築データ取得手段には、これらのいずれかの経路によって出力されるスケジュール構築データ２３４を取得するための、接続ケーブル１０を介する通信を行う通信回路、ネットワーク通信を行う通信回路、および記録媒体に対する読み取り回路を含む。
【０１１３】
なお、ＰＬＣ１のＣＰＵユニット１３は、メーカーにおける製造段階で記憶手段にスケジュール構築データ２３４が格納され、メーカーからの出荷後はスケジュール構築データ２３４の変更ができない構成であってもよい。
【０１１４】
一般的には、ＰＬＣ１に実装されるシステムプログラム２１０は、ＣＰＵユニット１３の製造段階でＣＰＵユニット１３の不揮発性メモリ１０６へ格納される。ただし、ＣＤ−ＲＯＭ９にシステムプログラム２１０を格納しておけば、ユーザは、ＣＤ−ＲＯＭ９のシステムプログラム２１０をＰＬＣサポート装置８にコピーし、通信プログラム３２６が提供する機能を利用してコピーしたシステムプログラム２１０をＣＰＵユニット１３へ転送することもできる。さらに、ＣＤ−ＲＯＭ９に、ＰＬＣ１のＣＰＵユニット１３で実行されるリアルタイムＯＳ２００を格納しておけば、リアルタイムＯＳ２００についてもユーザ操作によってＰＬＣ１へ再インストールできる。
【０１１５】
以下、スケジュール構築データ２３４を使用してＰＬＣ１の制御動作をスケジュールする典型例として、実施の形態１〜３について説明する。
【０１１６】
＜Ｆ．実施の形態１＞
以下に説明する実施の形態１では、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる。タスクは、１または複数のスレッドを含み、繰り返し実行の単位となる。
【０１１７】
（ｆ１：全体処理）
図７は、本発明の実施の形態１に係るＣＰＵユニット１３におけるシステムプログラム２１０の全体処理を示すフローチャートである。図７に示すように、まず、ＰＬＣ１の制御動作の実行準備処理が実行され（ステップＳ１）、続いて、ＰＬＣ１の制御動作の実行制御処理が実行される（ステップＳ２）。
【０１１８】
制御動作の実行準備処理（ステップＳ１）には、グローバル変数領域１０４２ａおよび変数同期バッファを生成する処理、受信バッファ（ＰＬＣシステムバス受信バッファ１０４４および／またはおよびフィールドネットワーク受信バッファ１０４６）および入力同期バッファを生成する処理、送信バッファ（ＰＬＣシステムバス送信バッファ１０４３および／またはフィールドネットワーク送信バッファ１０４５）および出力同期バッファを生成する処理、制御動作のためのスレッドおよび独立プロシージャ２２２を生成する処理、各タスクの実行サイクル数、実行回数、および実行時間の各記憶領域を生成する処理、ならびに、各タスクの終了フラグを生成する処理が含まれる。これらの各処理の実行順序は、適宜設計される。
【０１１９】
（ｆ２：タスクおよびスレッド）
上述したように、実施の形態１においては、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる処理例について説明する。ここで、タスクおよびスレッドの詳細について説明する。
【０１２０】
図８は、本発明の実施の形態１において用意されるタスクの設定項目と各設定項目の説明とを表形式で示す図である。図９は、本発明の実施の形態１において用意されているスレッドの設定項目と各設定項目の説明とを表形式で示す図である。本実施の形態に係るＰＬＣサポートプログラム３２０では、各タスクについて、図８の「設定項目」の欄に記載されている内容を設定することができる。また、各スレッドについては、図９の「設定項目」の欄に記載されている内容を設定することができる。
【０１２１】
図８および図９において、スレッドまたはプロシージャについて使用している「起動」という用語は、対象となるスレッドまたはプロシージャをリアルタイムＯＳ２００の実行待ち行列（ｑｕｅｕｅ）に追加することを意味する。リアルタイムＯＳ２００は、実行待ち行列に登録されたスレッドまたはプロシージャの中で実行優先度の高いものから順にマイクロプロセッサ１００に実行させる。実行待ち行列に登録されていて実行されるのを待っている状態のスレッドまたはプロシージャを「Ｒｅａｄｙ状態」にあるという。マイクロプロセッサ１００によって実行されている状態のスレッドまたはプロシージャを「Ｒｕｎ状態」にあるという。実行待ち行列に登録されていない状態のスレッドまたはプロシージャを「Ｓｌｅｅｐ状態」にあるという。
【０１２２】
図１０は、本発明の実施の形態１において用意されているプロシージャの１つである、制御サイクル開始プロシージャについて、その機能、設定項目および設定項目の説明を示す図である。図１１は、本発明の実施の形態１において用意されている、制御サイクル開始プロシージャ以外のプロシージャについて、各プロシージャの名称および機能を示す図である。
【０１２３】
図１０および図１１に示すプロシージャのうち、制御サイクル開始プロシージャ（図１０）、タスク開始プロシージャ（図１１）、およびタスク終了プロシージャ（図１１）のインスタンスは、独立プロシージャとして生成される。
【０１２４】
以下、本実施の形態に係るスケジュール例１〜１０について、対応するスケジュール構築データの例などとともに説明する。
【０１２５】
（ｆ３：スケジュール例１：実行サイクル周期内に実行終了する場合）
本発明の実施の形態１のスケジュール例１では、制御Ａタスクと制御Ｂタスクとを実行する。制御Ａタスクは、入出力Ａスレッドと制御Ａスレッドとを含み、制御Ｂスレッドは制御Ｂスレッドを含むものとする。制御Ａタスクの実行サイクルは、制御サイクル１回分に相当し、制御Ｂタスクの実行サイクルは、制御サイクル２回分に相当する。第ｋサイクルにおいて、制御Ａタスクおよび制御Ｂタスクの１つの実行サイクルが開始される。
【０１２６】
図１２は、本発明の実施の形態１のスケジュール例１に対応するスケジュール構築データ２３４を示す図である。図１３は、本発明の実施の形態１のスケジュール例１の第ｋサイクルのシーケンス図である。図１４は、本発明の実施の形態１のスケジュール例１の第ｋ＋１サイクルのシーケンス図である。
【０１２７】
図１２ではスケジュール構築データ２３４の内容を表形式で模式的に示しているが、実際に使用されるスケジュール構築データ２３４は、たとえばＸＭＬ（Extensible Markup Language）を用いて記述されるなど、マイクロプロセッサ１００が処理できる形式で記述される。
【０１２８】
スケジュール例１におけるスケジュール構築データ２３４としては、図１２の（１）に示すような制御サイクル開始プロシージャの設定内容、図１２の（２）および（５）に示すようなタスクの設定内容、ならびに、図１２の（３）、（４）および（６）に示すようなスレッドの設定内容を含む。
【０１２９】
図１２の（１）に示されるとおり、実施の形態１のスケジュール例１においては、制御サイクル開始プロシージャについて、制御サイクル開始条件として「制御サイクル開始割り込み」が設定されている。したがって、図１０で説明されているとおり、制御サイクル開始プロシージャは、制御サイクル開始割り込み（図１３では、第ｋサイクルを開始する制御サイクル開始割り込み）があると起動される。そして、優先度として「１」が設定されているので、制御サイクル開始プロシージャは、他のスレッドやプロシージャに優先して、起動されると直ちに実行される。また、制御サイクル開始プロシージャの機能は、『各タスクの設定項目「タスク開始処理」で指定されたプロシージャを起動する』ことである。具体的には、図１２の（２）および（５）のそれぞれの「タスク開始処理」で「タスク開始プロシージャ」が指定されているので、制御サイクル開始プロシージャは、制御Ａタスクのタスク開始プロシージャおよび制御Ｂタスクのタスク開始プロシージャを起動し、自身の実行を終了する。
【０１３０】
制御サイクル開始プロシージャが実行終了すると、制御Ａタスクのタスク開始プロシージャがＲｕｎ状態となる。タスク開始プロシージャは、図１１で説明されている機能を実行する。図１２の（２）の「スレッド指定」で指定されているとおり、制御Ａタスクには、「入出力Ａスレッド」と「制御Ａスレッド」とが含まれる。図１２の（３）に示されるとおり、入出力Ａスレッドの開始条件は「制御Ａタスク」であるから、入出力Ａスレッドは、タスク開始プロシージャの後続起動の対象となる。一方、制御Ａスレッドの開始条件は「制御Ａタスク」ではないから、制御Ａスレッドは、タスク開始プロシージャの後続起動の対象とはならない。タスク開始プロシージャは、入出力Ａスレッドを起動して、自身の実行を終了する。
【０１３１】
制御Ａタスクのタスク開始プロシージャが実行終了すると、制御Ｂタスクのタスク開始プロシージャがＲｕｎ状態となる。タスク開始プロシージャは、図１１で説明されている機能を実行した後、自身の実行を終了する。図１２の（５）の「スレッド指定」で指定されるとおり、制御Ｂタスクには、「制御Ｂスレッド」が含まれる。図１２の（６）を参照して、制御Ｂスレッドの開始条件は「制御Ｂタスク」ではないから、制御Ｂスレッドは、タスク開始プロシージャの後続起動の対象とはならず、制御Ｂタスクのタスク開始プロシージャは何も行わない。
【０１３２】
制御Ｂタスクのタスク開始プロシージャが実行終了すると、入出力ＡスレッドがＲｕｎ状態となる。図１２の（３）の「プロシージャ指定」で列挙されているプロシージャが列挙されている順に実行される。
【０１３３】
入出力ＡスレッドがＲｕｎ状態になると、最初に、同期出力コピープロシージャが実行される。同期出力コピープロシージャの機能は、図１１で説明されているとおりであり、制御Ａタスクおよび制御Ｂタスクとも、現在の実行サイクル数は「１」であるから、制御Ａタスクおよび制御Ｂタスクの両方について、あらかじめ指定された出力データが出力同期バッファから送信バッファへコピーされる。同期出力コピープロシージャの機能の詳細については、図１８を参照して後述する。
【０１３４】
次に、入出力指示プロシージャが実行される。すなわち、通信回路に入出力指示信号が与えられることにより、通信回路は、送信バッファに格納されている出力データを送信し、受信した入力データを受信バッファに格納し、通信終了通知信号をマイクロプロセッサ１００に与える。たとえば、フィールドネットワーク２としてＥｔｈｅｒＣＡＴ（登録商標）を用いる場合には、フィールドネットワークコントローラ１４０から送信されたフレームが、スレーブ機器とデータ交換をしながら、スレーブ機器を一巡して戻ってくる。フィールドネットワークコントローラ１４０は、戻ってきたフレームを自動的に受信する。したがって、入出力指示信号は、直接的には送信指示信号としての意味を持つが、間接的には受信をも指示することになる。
【０１３５】
入出力指示プロシージャの実行に続いて、通信終了通知待ちプロシージャが実行される。すなわち、通信終了通知待ちプロシージャは、通信終了通知があれば入出力Ａスレッドが再起動されるように設定し、入出力ＡスレッドをＳｌｅｅｐ状態にする。
【０１３６】
入出力ＡスレッドがＳｌｅｅｐ状態の間に、制御タスクに属するスレッドおよびプロシージャよりも低い優先度が与えられて実行待ち行列に登録されている種々のシステム処理が実行される。
【０１３７】
通信終了通知があれば、同期入力コピープロシージャが実行される。同期入力コピープロシージャの機能は図１１で説明されているとおりであり、制御Ａタスクおよび制御Ｂタスクとも、現在の実行サイクルカウンタは「１」であるから、制御Ａタスクおよび制御Ｂタスクの両方について、あらかじめ指定された入力データが受信バッファから入力同期バッファへコピーされる。同期入力コピープロシージャの機能の詳細については、図１７を参照して後述する。
【０１３８】
出力コピーの対象となる出力データ、および、入力コピーの対象となる入力データについてのあらかじめの指定は、ＰＬＣサポート装置８から制御プログラム２３０の設定情報として与えられる。
【０１３９】
次に、後続起動プロシージャが実行される。図１２の（４）に示すとおり、制御Ａスレッドの「開始条件」に入出力Ａスレッドが指定されているから、後続起動プロシージャは、制御Ａスレッドを起動する。
【０１４０】
入出力Ａスレッドが実行終了すると、制御ＡスレッドがＲｕｎ状態となる。図１２の（４）の「プロシージャ指定」で列挙されているプロシージャが列挙されている順に実行される。
【０１４１】
制御ＡスレッドがＲｕｎ状態になると、最初に、データトレースプロシージャが実行される。図１１で説明されているとおり、データトレースプロシージャは、あらかじめ指定された変数の値をログファイルに記録する。この変数についてのあらかじめの指定も、ＰＬＣサポート装置８から制御プログラム２３０の設定情報として与えられる。
【０１４２】
次に、変数参照開始プロシージャが実行される。すなわち、（後述の「制御プログラム指定」に指定されている）制御Ａプログラムがリファラ側制御プログラムとして参照する変数について、変数同期バッファが書き換えられないようにするための処理が行われる。このような、変数参照開始プロシージャおよび変数配信プロシージャ（制御Ｂスレッド）によって実現される変数同期機能について、図１９を参照して後述する。
【０１４３】
次に、制御プログラム実行プロシージャが実行される。図１２の（４）に示すとおり、制御Ａスレッドの「制御プログラム指定」に「制御Ａプログラム」が指定されているから、制御Ａプログラムが実行される。制御Ａプログラムは、ユーザにおける制御目的に応じた作成されたシーケンスプログラムであってもよいし、そのようなシーケンスプログラムがモーション命令を含んでいる場合には、シーケンスプログラムおよびそれに続いて実行されるモーション演算プログラムであってもよい。
【０１４４】
制御Ａプログラムの実行が終了すると、変数配信プロシージャが実行される。すなわち、制御Ａプログラムがオーナー側制御プログラムとして更新し、制御Ｂプログラムがリファラ側制御プログラムとして参照するグローバル変数について、変数配信プロシージャが当該変数の内容を制御Ｂプログラムの変数同期バッファにコピーする。なお、オーナー側制御プログラムおよびリファラ側制御プログラムの詳細については、図１９を参照して後述する。
【０１４５】
次に、後続起動プロシージャが実行される。図１２の（２）に示すとおり、制御Ａタスクの「タスク終了条件」に制御Ａスレッドが指定されている。また、図１２の（６）に示すとおり、制御Ｂスレッドの「開始条件」に制御Ａスレッドが指定されており、かつ、現在の制御Ｂタスクのタスク終了フラグはオフである。したがって、後続起動プロシージャは、制御Ａタスクのタスク終了プロシージャと制御Ｂスレッドとを起動する。
【０１４６】
制御Ａスレッドが実行終了すると、制御Ａタスクのタスク終了プロシージャがＲｕｎ状態となる。タスク終了プロシージャは、図１１で説明されている機能を実行する。
【０１４７】
制御Ａタスクのタスク終了プロシージャが実行終了すると、制御ＢスレッドがＲｕｎ状態となる。図１２の（６）の「プロシージャ指定」で列挙されているプロシージャが列挙されている順に実行される。
【０１４８】
制御ＢスレッドがＲｕｎ状態になると、最初に、変数参照開始プロシージャが実行される。すなわち、（後述の「制御プログラム指定」に指定されている）制御Ｂプログラムがリファラ側制御プログラムとして参照する変数について、変数同期バッファが書き換えられないようにするための処理が行われる。
【０１４９】
次に、制御プログラム実行プロシージャが実行される。図１２の（６）に示すとおり、制御Ｂスレッドの「制御プログラム指定」に「制御Ｂプログラム」が指定されているから、制御Ｂプログラムが実行される。制御Ｂプログラムは、ユーザにおける制御目的に応じた作成されたシーケンスプログラムであってもよいし、そのようなシーケンスプログラムがモーション命令を含んでいる場合には、シーケンスプログラムおよびそれに続いて実行されるモーション演算プログラムであってもよい。
【０１５０】
図１３では、制御Ｂプログラムの実行中に第ｋ＋１サイクルを開始する制御サイクル開始割り込みが入った場合を示している。制御サイクル開始割り込みにより、制御プログラムＢは実行中断される。
【０１５１】
図１４に示すとおり、第ｋ＋１サイクルにおいては、制御Ａタスクの処理および制御Ｂタスクのタスク開始プロシージャが第ｋサイクルの場合と同様に実行される。
【０１５２】
入出力Ａスレッドの通信終了通知待ち時間の間には、第ｋサイクルにおいて実行されたシステム処理よりも制御Ｂスレッドの方が優先度が高いので、制御プログラムＢの実行が再開され、通信終了通知があると制御プログラムＢは再び実行中断される。
【０１５３】
制御Ａタスクのタスク終了プロシージャが実行終了すると、制御プログラムＢの実行が再開される。
【０１５４】
制御Ｂプログラムの実行が終了すると、変数配信プロシージャが実行される。すなわち、制御Ｂプログラムがオーナー側制御プログラムとして更新し、制御Ａプログラムがリファラ側制御プログラムとして参照するグローバル変数について、変数の内容が制御Ａプログラムの変数同期バッファにコピーされる。
【０１５５】
次に、後続起動プロシージャが実行される。図１２の（５）に示すとおり、制御Ｂタスクの「タスク終了条件」に「制御Ｂスレッド」が指定されているので、後続起動プロシージャは、制御Ｂタスクのタスク終了プロシージャを起動する。
【０１５６】
制御Ｂスレッドが実行終了すると、制御Ｂタスクのタスク終了プロシージャがＲｕｎ状態となる。タスク終了プロシージャは、図１１で説明されている機能を実行する。
【０１５７】
制御Ｂタスクのタスク終了プロシージャが実行終了すると、次の制御サイクル開始割り込みがあるまでの間、種々のシステム処理が実行される。
【０１５８】
以上説明したとおり、本発明の実施の形態１に係るＰＬＣ１のＣＰＵユニット１３のシステムプログラム２１０は、次の特徴を有している。すなわち、システムプログラム２１０は、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリ（プロシージャライブラリ２１４）を含む。そして、システムプログラム２１０は、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データ２３４が記憶手段（メインメモリ１０４または不揮発性メモリ１０６）に格納されているときに、マイクロプロセッサ１００に、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。なお、この特徴は、後述の実施の形態２および３にも共通している。
【０１５９】
ここで、制御プログラム２３０の実行を制御するためのプロシージャの例は、変数参照開始プロシージャ、制御プログラム実行プロシージャ、および変数配信プロシージャである。出力データの出力および入力データの入力を制御するためのプロシージャの例は、同期出力コピープロシージャ、入出力指示プロシージャ、通信終了通知待ちプロシージャ、および、同期入力コピープロシージャである。
【０１６０】
上記特徴は、具体的には、実施の形態１においては、次のようにして実現される。すなわち、スケジュール構築データ２３４は、プロシージャのライブラリ（プロシージャライブラリ２１４）に収録されているプロシージャを用いてスレッドを生成するための指定（図１２の（３），（４），（６））を含む。システムプログラム２１０は、ＰＬＣの制御動作の実行準備処理として、スケジュール構築データ２３４に含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理（図７のステップＳ１）を含む。これにより、リアルタイムＯＳ２００の実行待ち行列と実行優先度のしくみとを利用して、ＰＬＣ１の制御動作の実行制御を行うことができる。なお、この特徴は、後述の実施の形態２にも共通している。
【０１６１】
また、実施の形態１においては、スケジュール構築データ２３４は、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定（図１２などに示すスレッドの「開始条件」の指定）を含む。これにより、優先度のしくみだけでは実現できないようなより高い自由度をもって、ＰＬＣ１の制御動作の実行制御を行うことができる。なお、この特徴は、後述の実施の形態２にも共通している。
【０１６２】
また、実施の形態１においては、スケジュール構築データ２３４は、１または複数のスレッドを含む、繰り返し実行の単位となるタスクを設定するための指定を含む。システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、スケジュール構築データ２３４に含まれているタスクを設定するための指定に従って、タスクを設定する処理（典型的には、図７のステップＳ１における独立プロシージャを生成する処理）を含む。これにより、繰り返し実行の単位がよりわかりやすくなる。また、実行サイクルの周期を個々のスレッドに設定するのではなくタスクに設定するようにすれば、実行サイクルの設定がより簡単になる。また、繰り返し実行の単位（タスク）について、実行回数を計数したり、実行時間を計測したりすることも行いやすくなる。
【０１６３】
また、ＣＰＵユニット１３は、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返させるための、プロシージャの実行順序の指定を含むスケジュール構築データ２３４が記憶手段（メインメモリ１０４または不揮発性メモリ１０６）に格納されている場合に、制御動作の実行が可能である。
【０１６４】
（ｆ４：スケジュール例１：実行サイクル周期内に実行終了しない場合）
次に、タスクがそのタスクに設定された実行サイクル周期内に実行終了しなかった場合、すなわち実行サイクル超過時における動作について説明する。
【０１６５】
図１５および図１６は、本発明の実施の形態１のスケジュール例１において、制御Ａスレッドの実行が第ｋサイクル内に終了しない場合の動作を示すシーケンス図である。
【０１６６】
上述の図１２の（２），（５）に示すとおり、制御Ａタスクおよび制御Ｂタスクの「サイクル超過許容回数」にそれぞれ「１」が指定されているので、制御Ａタスクおよび制御Ｂタスクは、制御サイクル１回分だけ実行サイクルを延長することが許されている。
【０１６７】
図１５に示すとおり、制御Ａプログラムは第ｋ＋１サイクルを開始する制御サイクル開始割り込みが発生するにいたるまでに実行終了しなかったので、リアルタイムＯＳ２００によって実行中断される。
【０１６８】
図１６に示すとおり、第ｋ＋１サイクルにおいて、制御サイクル開始プロシージャは、第ｋサイクルと同様に実行される。第ｋ＋１サイクルの開始時においては、第ｋサイクルで実行開始された制御Ａタスクの実行が終了していないが、図１１に記載のタスク開始プロシージャの「カウントアップ後に実行サイクル数が実行サイクル周期（ｎ）を超えており、かつ、タスク終了フラグがオフである」条件に該当するので、制御サイクル開始プロシージャは入出力Ａスレッドを起動する。このように、入出力Ａスレッドは、サイクル超過のエラー処理が実行される場合および前制御サイクルの入出力Ａスレッドが終了していない場合を除き、すべての制御サイクルにおいて実行される。第ｋ＋１サイクルにおける入出力Ａスレッドの通信終了通知待ち時間の間には、制御Ａプログラムが実行中断された箇所から実行される。さらに、入出力Ａスレッドの実行終了後に制御Ａプログラムが実行再開される。入出力Ａスレッドの後続起動プロシージャは、本来であれば制御Ａスレッドを起動するのであるが、制御Ａスレッドはすでに起動されているので、制御Ａスレッドを重ねて起動することはできない。
【０１６９】
第ｋ＋１サイクルにおいて、制御Ａタスクのタスク終了プロシージャが実行終了すると、制御ＢスレッドがＲｕｎ状態となる。制御Ｂタスクの実行サイクルは第ｋサイクルから開始しているのであるが、第ｋサイクルにおいては制御Ｂスレッドを実行する時間がなかったので、制御Ｂスレッドは第ｋ＋１サイクルから実行開始される。
【０１７０】
制御Ｂタスクの実行サイクルは、本来は第ｋ＋１サイクルで終了するのであるが、第ｋ＋１サイクル内で制御Ｂスレッドが実行終了しないので、制御Ｂタスクにも実行サイクル超過が発生する。
【０１７１】
図１１で説明されているとおり、実行サイクル周期にサイクル超過許容回数を加えた制御サイクル回数の内にタスクの実行が終了しなければ、実行サイクル超過のエラー処理が実行される。たとえば、制御動作を中止し、実行サイクル超過の発生が図示しないネットワークを介して上位コンピュータに報知される。
【０１７２】
実施の形態１に係るＰＬＣ１のＣＰＵユニット１３においては、制御サイクルの周期を設定する手段が設けられる。制御サイクルの周期を設定する手段としては、制御サイクルの周期を指定する情報を取得するために用いられるＰＬＣサポート装置８との通信手段、システムプログラム２１０に含まれている制御サイクルの周期を設定するプログラム、および、制御サイクル開始割り込み信号の周期を任意に設定可能に構成されているシステムタイマの構成といった、制御サイクルの周期を設定するために用いられる要素が該当する。制御サイクルの周期を指定する情報をＰＬＣサポート装置８から取得する代わりに、制御サイクルの周期を指定するための入力を受け付けるための操作スイッチ等の入力デバイスをＣＰＵユニット１３自身に設けてもよい。
【０１７３】
実施の形態１に係るＰＬＣ１のＣＰＵユニット１３における通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）は、制御サイクルごとに、出力データの送信および入力データの受信を行う。より具体的には、通信回路は、入出力指示プロシージャの実行によって発生する入出力指示信号を受けて、送信および受信を行う。それに代えて、通信回路が、システムタイマが発生する一定周期の信号によってトリガされることにより、制御サイクルごとの送信および受信を行うようにしてもよい。また、通信回路自身にタイマ回路を設けて、そのタイマ回路が発生する一定周期の信号に従って制御サイクルごとの送信および受信を行うようにしてもよい。
【０１７４】
以上説明したとおり、実施の形態１に係るＰＬＣ１のＣＰＵユニット１３は、制御サイクルの周期を設定する手段を有する。通信回路は、制御サイクルごとに、出力データの送信および入力データの受信を行う。そして、スケジュール構築データ２３４は、制御サイクルの周期に等しい実行サイクルの周期で実行される制御プログラム（制御Ａプログラム）について、マイクロプロセッサ１００に、制御プログラムの実行が終了した制御サイクルの次の制御サイクルにおいて、通信回路による出力データの送信および入力データの受信の後に、制御プログラムの実行を開始させ、制御プログラムの実行が終了しなかった制御サイクルの次の制御サイクルにおいて、制御プログラムの未実行の部分を実行させるための、プロシージャの実行順序の指定を含む。このようなＣＰＵユニット１３によれば、ＰＬＣ１のユーザは、制御プログラムの実行時間が散発的に長くなる状況において、ＰＬＣ１のＣＰＵユニット１３が制御データの出力および入力のために制御サイクルと同期して行う通信の周期を、制御プログラムの最大実行時間よりも短い一定時間に設定することができる。
【０１７５】
このような状況の一例は、制御プログラム２３０が、実行されるごとにモータドライバに対して出力される指令値を算出するモーション演算プログラムを含む場合である。モーション演算プログラムは、ユーザにおける制御目的に応じて作成されたユーザプログラム２３６（シーケンスプログラム）により起動された初回の実行において、指令値の算出を開始するために必要な初期処理を実行することにより後続の実行に要する時間よりも長い実行時間を必要とすることがある。そのような状況でも、ＣＰＵユニット１３が制御データの出力および入力のために制御サイクルと同期して行う通信の周期を、制御プログラム２３０の最大実行時間よりも短い一定時間に設定することができる。
【０１７６】
（ｆ５：同期入力コピープロシージャ）
次に、同期入力コピープロシージャの機能の詳細について説明する。図１７は、本発明の実施の形態１において用意される同期入力コピープロシージャの動作を説明するためのシーケンス図である。
【０１７７】
図１７に示すスケジュール例では、その実行サイクルが１制御サイクルである「入出力Ｃスレッド」、その実行サイクルが２制御サイクルである「制御Ｃスレッド」、および、その実行サイクルが４制御サイクルである「制御Ｄスレッド」の合計３つのスレッドが実行される場合を示す。
【０１７８】
入出力Ｃスレッドの構成は、図１３および１４に示される入出力Ａスレッドと同様であるとする。制御Ｃスレッドおよび制御Ｄスレッドの構成は、それぞれ、図１３および１４に示される制御Ａスレッドおよび制御Ｂスレッドと同様であるが、実行サイクルの周期が制御Ａスレッドおよび制御Ｂスレッドとは異なっているものとする。また、制御Ｃスレッドでは制御Ｃプログラムが実行され、制御Ｄスレッドでは制御Ｄプログラムが実行されるものとする。図１７の各スレッドは、それぞれ別々のタスクに属しているものとする。
【０１７９】
図１７の受信バッファは、図４のＰＬＣシステムバス受信バッファ１０４４およびフィールドネットワーク受信バッファ１０４６を表す。図１７の入力同期バッファＣは、制御Ｃスレッドにおいて実行される制御Ｃプログラムから参照される入力データごとに設けられる。同様に、図１７の入力同期バッファＤは、制御Ｄスレッドにおいて実行される制御Ｄプログラムから参照される入力データごとに設けられる。入力同期バッファＣおよび入力同期バッファＤは、図４の入力同期バッファ領域１０４２ｄに設けられる。なお、制御プログラムが使用する変数領域をそのまま入力同期バッファとして利用してもよい。
【０１８０】
図１７を参照して、入出力Ｃスレッドが実行されるたびに、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０が受信した新たな入力データが受信バッファに上書き格納される。同期入力コピープロシージャは、受信バッファに格納された入力データを、その入力データを使用する制御プログラムの入力同期バッファ（入力同期バッファＣおよび入力同期バッファＤ）へコピーする。その際、制御プログラムが使用するのに適した形式に入力データが再配置される。
【０１８１】
図１１で説明されているとおり、同期入力コピープロシージャは、タスクの実行サイクル数が「１」である場合に限り、すなわち、現在の制御サイクルがタスクの実行サイクルのうち最初の制御サイクルである場合に限り、そのタスクについてあらかじめ指定された入力データを受信バッファから入力同期バッファにコピーする機能を有する。したがって、図１７に示すとおり、制御サイクル１〜４の範囲について、受信バッファから入力同期バッファＣへのコピーは制御サイクル１および３においてのみ行われ、受信バッファから入力同期バッファＤへのコピーは制御サイクル１においてのみ行われる。これは、制御Ｃスレッドの実行サイクルが２制御サイクルに設定され、制御Ｄスレッドの実行サイクルが４制御サイクルに設定されているためである。
【０１８２】
このようにすると、入力同期バッファに格納された入力データは、その入力データを参照する制御プログラムが実行されている期間中、新たな入力データによって上書きされることがないので、制御プログラムは入力データを何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。さらに、入力コピーを制御スレッド（制御プログラム）の実行サイクル中の最初の制御サイクルのみで行うので、制御プログラムが使用する入力データの更新周期を一定にすることができる。
【０１８３】
図１７では、制御プログラムごとおよび入力データごとに入力同期バッファを１つ設けたが、制御プログラムごとおよび入力データごとに入力同期バッファを２つまたは３つ設け、各入力同期バッファの役割（状態）を入れ替えながら運用するようにプロシージャを設計してもよい。たとえば、１つのバッファは制御プログラムから参照される状態（参照状態）であり、もう１つのバッファは新たな入力データを書込可能な状態（書込状態）であるように設計する。そして、制御プログラムを実行開始する前に、書込可能なバッファに新たな入力データが格納されていれば、２つのバッファの役割を入れ替える。そうすれば、入力コピーができない期間がなくなるので、入力データの消失を防ぐことができる。ただし、図１７のスケジュール例では、各スレッドの実行サイクルの周期が整数倍の関係にあるので、制御プログラムが使用すべき入力データの消失はもともと生じない。入力同期バッファの参照状態と書込状態とを直接入れ替える代わりに、３つのバッファを用いて、新たな入力データを格納したバッファが書込状態から第３の状態（待機状態）を経て参照状態に遷移するようにしてもよい。
【０１８４】
なお、図１１で説明されているとおり、あらかじめ指定された入力データを受信バッファから入力同期バッファにコピーする機能を持ち、各タスクの実行サイクル数についての判断をしない（プロシージャ自体では他のタスクの実行サイクルに同期する機能を持たない）入力コピープロシージャも用意されている。このような入力コピープロシージャの使用例は、後述のスケジュール例３において説明する。
【０１８５】
受信バッファおよび入力同期バッファを用いるＣＰＵユニット１３、または、入力コピープロシージャまたは同期入力コピープロシージャの入力コピー処理を用いるＣＰＵユニット１３の特徴については、次のようにまとめることができる。
【０１８６】
システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段（メインメモリ１０４など）内に生成する処理（図７のステップＳ１）と、制御プログラム２３０から参照される入力データごとに、その制御プログラム２３０が入力データの参照先とする入力同期バッファを記憶手段（メインメモリ１０４など）内に生成する処理（図７のステップＳ１）とを含む。
【０１８７】
スケジュール構築データ２３４は、マイクロプロセッサ１００に、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラム２３０を実行開始する制御プログラム開始処理とを実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、入力同期バッファに格納された入力データは、その入力データを参照する制御プログラムが実行されている期間中、新たな入力データによって上書きされることがないので、制御プログラム２３０は入力データを何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。
【０１８８】
さらに、同期入力コピープロシージャの同期入力コピー処理を用いるＣＰＵユニット１３の特徴については、次のようにまとめることができる。
【０１８９】
入力データの受信は、制御サイクルごとに実行される。スケジュール構築データ２３４は、マイクロプロセッサ１００に、制御サイクルの整数倍の実行サイクルごとに制御プログラム開始処理を実行させ、制御プログラムの実行サイクルが開始した制御サイクルにおいて受信された入力データを対象として、入力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、制御プログラム２３０が使用する入力データの更新周期を一定にすることができる。
【０１９０】
（ｆ６：同期出力コピープロシージャ）
次に、同期出力コピープロシージャの機能の詳細について説明する。図１８は、本発明の実施の形態１において用意される同期出力コピープロシージャの動作を説明するためのシーケンス図である。
【０１９１】
図１８に示すスケジュール例では、入出力Ｃスレッド、制御Ｃスレッド、および制御Ｄスレッドの合計３つのスレッドが実行される場合を示す。これらのスレッドのスケジュール例は、図１７のスケジュール例と同じである。
【０１９２】
図１８の送信バッファは、図４のＰＬＣシステムバス送信バッファ１０４３およびフィールドネットワーク送信バッファ１０４５を表す。図１８の出力同期バッファＣは、制御Ｃスレッドにおいて実行される制御Ｃプログラムの実行によって生成される出力データごとに設けられる。同様に、出力同期バッファＤは、制御Ｄスレッドにおいて実行される制御Ｄプログラムの実行によって生成される出力データごとに設けられる。出力同期バッファＣおよび出力同期バッファＤは、図４の出力同期バッファ領域１０４２ｃに設けられる。なお、制御プログラムが使用する変数領域をそのまま出力同期バッファとして利用してもよい。
【０１９３】
図１８を参照して、入出力Ｃスレッドに含まれる入出力指示プロシージャが実行されるたびに、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０は、送信バッファに格納されている出力データを送信する。同期出力コピープロシージャは、入出力指示プロシージャの前に実行され、出力同期バッファ（出力同期バッファＣおよび出力同期バッファＤ）に格納されている出力データを送信バッファへコピーする。その際、ＰＬＣシステムバス送信バッファ１０４３においては、送信先のユニットごとにまとめて配置する形式になるように、また、フィールドネットワーク送信バッファ１０４５においては、シリアルフレームとして送信できる形式に、出力データが再配置される。
【０１９４】
図１１で説明されているとおり、同期出力コピープロシージャは、タスクの実行サイクル数が「１」である場合に限り、すなわち、現在の制御サイクルがタスクの実行サイクルのうち最初の制御サイクルである場合に限り、そのタスクについてあらかじめ指定された出力データを出力同期バッファから送信バッファにコピーする機能を有する。したがって、図１８に示すとおり、制御サイクル１〜４の範囲について、出力同期バッファＣから送信バッファへのコピーは制御サイクル１および３においてのみ行われ、出力同期バッファＤから送信バッファへのコピーは制御サイクル１においてのみ行われる。これは、制御Ｃスレッドの実行サイクルが２制御サイクルに設定され、制御Ｄスレッドの実行サイクルが４制御サイクルに設定されているためである。
【０１９５】
このようにすると、送信バッファに格納された出力データは、各制御プログラムの実行サイクル中の最初の制御サイクルにおける送信の直前に出力同期バッファからコピーされる。この出力データは直前の実行サイクルにおいて生成されたものであり、出力データが送信バッファへコピーされた時点では、直前の実行サイクルにおける制御プログラムの実行はすでに終了している。したがって、制御プログラムの実行中における、まだ更新される可能性のある出力データが送信されることがない。さらに、出力コピーを制御スレッド（制御プログラム）の実行サイクル中の最初の制御サイクルのみで行うので、送信される出力データの更新周期を一定にすることができる。
【０１９６】
なお、図１１で説明されているとおり、あらかじめ指定された出力データを出力同期バッファから送信バッファにコピーする機能を持ち、各タスクの実行サイクル数についての判断をしない（プロシージャ自体では他のタスクの実行サイクルに同期する機能を持たない）出力コピープロシージャも用意されている。このような出力コピープロシージャの使用例は、後述のスケジュール例３において説明する。
【０１９７】
出力同期バッファおよび送信バッファを用いるＣＰＵユニット１３、または、出力コピープロシージャまたは同期出力コピープロシージャの出力コピー処理を用いるＣＰＵユニット１３の特徴については、次のようにまとめることができる。
【０１９８】
システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、送信されるべき出力データを格納する送信バッファを記憶手段（メインメモリ１０４など）内に生成する処理（図７のステップＳ１）と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段（メインメモリ１０４など）内に生成する処理（図７のステップＳ１）とを含む。
【０１９９】
スケジュール構築データ２３４は、マイクロプロセッサ１００に、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、制御プログラムの実行中における、まだ上書き更新される可能性のある出力データが送信されることがない。
【０２００】
さらに、同期出力コピープロシージャの同期出力コピー処理を用いるＣＰＵユニット１３の特徴については、次のようにまとめることができる。
【０２０１】
スケジュール構築データ２３４は、マイクロプロセッサ１００に、制御プログラム開始処理を制御サイクルの整数倍の実行サイクルごとに実行させ、制御プログラム２３０の実行サイクルの最初の制御サイクルにおいてその前の実行サイクルにおける制御プログラム２３０の実行により生成された出力データが送信バッファから送信されることになるタイミングで出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、送信される出力データの更新周期を一定にすることができる。
【０２０２】
（ｆ７：変数配信プロシージャおよび変数参照開始プロシージャ）
次に、変数配信プロシージャおよび変数参照開始プロシージャの機能（変数同期機能）の詳細について説明する。図１９は、本発明の実施の形態１において用意される変数配信プロシージャおよび変数参照開始プロシージャの動作を説明するためのシーケンス図である。
【０２０３】
図１９に示すスケジュール例は、上述の図１３および１４に示すスケジュール例１と同様であるとし、変数同期機能に関連する、制御Ａスレッドおよび制御Ｂスレッドの部分のみが示されている。
【０２０４】
図１９のグローバル変数領域Ａは、制御Ａスレッドの制御プログラムＡが使用する変数であって、他のスレッドの制御プログラム（具体的には、制御Ｂスレッドの制御Ｂプログラム）からも参照される変数を格納するメインメモリの領域である。グローバル変数領域Ａは、図４のグローバル変数領域１０４２ａに設けられる。なお、制御プログラム２３０が使用する変数領域をそのままグローバル変数領域として利用してもよい。
【０２０５】
グローバル変数領域Ａに対して書き換えが許されている制御プログラム（図１９の例では、制御プログラムＡ）を「オーナー側制御プログラム」と称し、参照のみが許されている制御プログラム（図１９の例では、制御プログラムＢ）を「リファラ側制御プログラム」と称す。１つのグローバル変数について、オーナー側制御プログラムは１つであるが、リファラ側制御プログラムは複数あってもよい。
【０２０６】
制御Ｂスレッドの制御Ｂプログラムがリファラ側制御プログラムとして参照するグローバル変数ごとに、変数同期バッファＢが図４の変数同期バッファ領域１０４２ｂに設けられる。なお、制御プログラム２３０が使用する変数領域をそのまま変数同期バッファとして利用してもよい。
【０２０７】
どの制御プログラム２３０がオーナー側制御プログラムまたはリファラ側制御プログラムであるかは、グローバル変数ごとに変数の属性として指定される。この指定を含む変数の属性データは、ＰＬＣサポート装置８においてユーザの入力操作に基づいて作成され、作成された変数の属性データは、ＰＬＣサポート装置８からＣＰＵユニット１３に送られ、ＣＰＵユニット１３の不揮発性メモリ１０６に格納される。
【０２０８】
図示しないが、制御Ｂプログラムがオーナー側制御プログラムであり、制御Ａプログラムがリファラ側制御プログラムであるグローバル変数も存在し、このグローバル変数については、制御Ｂプログラムに関連付けられるグローバル変数領域Ｂと、制御Ａプログラムに関連付けられる変数同期バッファＡとが設けられる。
【０２０９】
変数配信プロシージャは、それが属するスレッドにおいて実行される制御プログラム２３０がオーナー側であるグローバル変数の値を、グローバル変数領域から、そのグローバル変数のリファラ側である制御プログラムに関連付けられている変数同期バッファにコピーする。図１９では、制御Ａスレッドの変数配信プロシージャがグローバル変数領域Ａの内容（データ）を変数同期バッファＢにコピーすることが示されている。
【０２１０】
変数参照開始プロシージャは、それが属するスレッドにおいて実行される制御プログラムが参照する変数同期バッファの内容が更新されないようにするための処理を行う。図１９では、制御Ｂスレッドの変数参照開始プロシージャは、変数同期バッファＢを書込禁止状態にする。したがって、制御サイクル１においては、制御Ａスレッドの変数配信プロシージャは変数同期バッファＢへのコピーを行うことができるが、制御Ｂスレッドの変数参照開始プロシージャが実行された後である制御サイクル２においては、制御Ａスレッドの変数配信プロシージャは変数同期バッファＢへのコピーを行うことができない。この変数同期バッファの書込禁止状態を解除する機能は、タスク終了プロシージャに持たせてもよいし、書込禁止状態を解除する機能を持つ変数参照終了プロシージャを用意してもよい。
【０２１１】
このようにすると、制御Ｂプログラムが実行開始してから実行終了するまでの間に制御プログラムＡによってグローバル変数領域Ａが書き換えられても、制御プログラムＢが参照する変数同期バッファＢの内容は書き換えられないので、制御プログラムＢは当該グローバル変数を何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。
【０２１２】
図１９では、制御プログラムごとおよびその制御プログラムがリファラ側として参照するグローバル変数ごとに変数同期バッファを１つ設けたが、制御プログラムごとおよびその制御プログラムがリファラ側として参照するグローバル変数ごとに変数同期バッファを２つまたは３つ設け、各変数同期バッファの役割（状態）を入れ替えながら運用するようにプロシージャを設計してもよい。たとえば、１つのバッファはリファラ側制御プログラムから参照される状態（参照状態）であり、もう１つのバッファは新たなデータを書込可能な状態（書込状態）であるようにする。そして、リファラ側制御プログラムを実行開始する前に、書込可能なバッファに新たな入力データが格納されていれば、２つのバッファの役割を入れ替える。そうすれば、変数配信ができない期間がなくなるので、オーナー側制御プログラムが生成した最新のグローバル変数の値の配信漏れを防ぐことができる。図１９の場合には、制御サイクル２および４で制御Ａプログラムが生成したグローバル変数の値は制御Ｂプログラムの各実行開始時点において最新ではないから、配信されなくても問題ないが、マルチコアのマイクロプロセッサを用いて、制御Ａプログラムと制御Ｂプログラムとを別々のコアで並列実行するような場合には、変数同期バッファが１つでは配信漏れが生じる可能性がある。このような場合には、上述のとおり２つで１組の変数同期バッファの参照状態と書込状態とを入れ替えながら運用することにより、配信漏れを防ぐことができる。変数同期バッファの参照状態と書込状態とを直接入れ替える代わりに、３つのバッファを用いて、新たに配信されたグローバル変数の値を格納したバッファが書込状態から第３の状態（待機状態）を経て参照状態に遷移するようにしてもよい。
【０２１３】
グローバル変数領域および変数同期バッファを用いるＣＰＵユニット１３、または、変数配信プロシージャの変数配信処理を用いるＣＰＵユニット１３の特徴については、次のようにまとめることができる。
【０２１４】
記憶手段（不揮発性メモリ１０６など）は、制御プログラム２３０が使用する変数についての属性データの格納に用いられる。属性データは、変数が複数の制御プログラム２３０から参照されるグローバル変数である場合に、その変数の書き換えができる１つのオーナー側制御プログラムの指定と、その変数の参照のみができる１つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。
【０２１５】
システムプログラム２１０は、ＰＬＣ１の制御動作の実行準備処理として、グローバル変数を格納するグローバル変数領域１０４２ａを記憶手段（メインメモリ１０４など）内に生成する処理（図７のステップＳ１）と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする変数同期バッファを記憶手段（メインメモリ１０４など）内に生成する処理（図７のステップＳ１）とを含む。
【０２１６】
スケジュール構築データ２３４は、マイクロプロセッサ１００に、オーナー側制御プログラムを実行開始するオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する変数同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始するリファラ側開始処理とを実行させるための、プロシージャの実行順序の指定を含む。
【０２１７】
このようにすれば、リファラ側制御プログラムが実行開始してから実行終了するまでの間にオーナー側制御プログラムによってグローバル変数領域が書き換えられても、リファラ側制御プログラムが参照する変数同期バッファの内容は書き換えられないので、リファラ側制御プログラムは当該グローバル変数を何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。
【０２１８】
（ｆ８：スケジュール例２）
次に、本発明の実施の形態１のスケジュール例２について説明する。
【０２１９】
図２０は、本発明の実施の形態１のスケジュール例２に対応するスケジュール構築データ２３４を示す図である。図２１は、本発明の実施の形態１のスケジュール例２の第ｋサイクルのシーケンス図である。図２０のスケジュール構築データ２３４から図２１のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図２０のスケジュール構築データ２３４と図２１のシーケンスとの関係についての詳細な説明は行わない。
【０２２０】
スケジュール例２は、上述のスケジュール例１と比較して、入出力スレッド（スケジュール例１の入出力Ａスレッド）が出力スレッド（出力Ｅスレッド）と入力スレッド（入力Ｅスレッド）とに分けられている点が相違している。また、制御Ｆスレッドの開始条件に制御Ｆタスクが指定されていることにより、制御Ｆスレッドが制御Ｆタスクのタスク開始プロシージャによって起動されている点が、スケジュール例１の制御Ｂスレッドの場合と異なる。制御Ｆスレッドが入力データを使用しない場合には、このように入力Ｅスレッドの終了を待つことなく、入力Ｅスレッドの通信終了通知の待ち時間に制御Ｆスレッドの実行を開始させることにより、制御Ｆスレッドの終了を早めることができる。
【０２２１】
スケジュール例２において、出力Ｅスレッドと入力Ｅスレッドとが別々に設けられている点について説明する。フィールドネットワークとしてＥｔｈｅｒＣＡＴ（登録商標）を用いた場合、たとえば、第ｋサイクルで送信されたフレームがノイズの影響などによりネットワークを伝送中に失われたためにＣＰＵユニット１３にネットワークを一巡したフレームが到達しなかったようなときを考える。スケジュール例１および２では、通信終了通知が発生しないことにより、制御Ａタスクまたは制御Ｅタスクが第ｋサイクル内に終了しないというサイクル超過の現象が発生する。
【０２２２】
このような場合、スケジュール例１のように、入出力スレッドが１つのスレッドであれば、第ｋ＋１サイクルにおいてさらに通信終了通知を待つことになるが、ネットワーク中でフレーム自体が失われていれば、結局サイクル超過許容回数を超えるエラーとなる。それに対し、スケジュール例２では、第ｋ＋１サイクルは、図１１でタスク開始プロシージャについて説明される「カウントアップ後に実行サイクル数が実行サイクル周期（ｎ）を超えており、かつ、タスク終了フラグがオフである」という条件に該当する。そのため、第ｋ＋１サイクルのタスク開始プロシージャは、後続起動の対象とされている出力Ｅスレッドを起動する。したがって、新たなフレームが送信され、このフレームがネットワークを一巡して戻ってくれば、図２１に示される、入力Ｅスレッドの通信終了通知以降の処理を続行できる。
【０２２３】
このように、フレームがネットワークを一巡するタイプのフィールドネットワークを採用した場合には、本スケジュール例のように、出力スレッドと入力スレッドとを分けることにより、ネットワーク中でフレームが喪失した場合にも一定周期のネットワーク通信を継続することが容易になる。
【０２２４】
（ｆ９：スケジュール例３）
次に、本発明の実施の形態１のスケジュール例３について説明する。
【０２２５】
図２２は、本発明の実施の形態１のスケジュール例３に対応するスケジュール構築データ２３４を示す図である。図２３は、本発明の実施の形態１のスケジュール例３の第ｋサイクルのシーケンス図である。図２４は、本発明の実施の形態１のスケジュール例３の第ｋ＋１サイクルのシーケンス図である。図２２のスケジュール構築データ２３４から図２３および図２４のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図２２のスケジュール構築データ２３４と図２３および図２４のシーケンスとの関係についての詳細な説明は行わない。
【０２２６】
スケジュール例３は、上述のスケジュール例１と比較して、実行サイクルの周期が長く、それに含まれる制御スレッドの優先度が低いタスクである制御タスクＨ（スケジュール例１の制御タスクＢに相当）にも入出力スレッド（入出力Ｈスレッド）が含まれている点が相違している。
【０２２７】
入出力Ｇスレッドは、たとえば、フィールドネットワークにより、制御Ｇスレッドの制御Ａプログラムが必要とするすべての入出力と、制御Ｈスレッドの制御プログラムＢが必要とする一部の入出力とを司る。入出力Ｈスレッドは、たとえば、ＰＬＣシステムバス１１により、制御Ｈスレッドの制御Ｂプログラムが必要とする残りの入出力を司る。
【０２２８】
入出力Ｇスレッドでは、同期出力コピープロシージャおよび同期入力コピープロシージャが用いられているのに対し、入出力Ｈスレッドでは、同じタスクに属する制御Ｈスレッドのための入出力を行うだけであるので、各タスクの実行サイクル数についての判断をしない（プロシージャ自体では他のタスクの実行サイクルに同期する機能を持たない）出力コピープロシージャおよび入力コピープロシージャが用いられる。
【０２２９】
このように、実行サイクルの周期がより長いタスクにおいて入出力処理を行うようにしてもよい。また、入出力処理のみを行うタスクを設けてもよい。それぞれの入力データおよび出力データに応じて、制御プログラム２３０の実行上必要とされる周期で入出力処理を行うようにスケジュール構築することにより、無駄に高い頻度で多くのデータ量の通信をして通信時間を浪費することを避けることができる。
【０２３０】
（ｆ１０：スケジュール例４）
次に、本発明の実施の形態１のスケジュール例４について説明する。
【０２３１】
図２５は、本発明の実施の形態１のスケジュール例４に対応するスケジュール構築データ２３４を示す図である。図２６は、本発明の実施の形態１のスケジュール例４の第ｋサイクルのシーケンス図である。図２７は、本発明の実施の形態１のスケジュール例４の第ｋ＋１サイクルのシーケンス図である。図２５のスケジュール構築データ２３４から図２６および図２７のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図２５のスケジュール構築データ２３４と図２６および図２７のシーケンスとの関係についての詳細な説明は行わない。
【０２３２】
スケジュール例４は、上述のスケジュール例１と比較して、制御Ｊスレッドにおいて実行される制御プログラムがモーション演算プログラムであってシーケンスプログラムを含まず、かつ、ユーザにおける制御目的に応じた作成されたシーケンスプログラムは制御Ｋスレッドのみで実行される点が相違している。ただし、シーケンスプログラムが制御Ｋスレッドのみで実行されることに伴って、データトレースプロシージャが制御Ｋスレッドで実行され、また、複数のシーケンスプログラム間でグローバル変数の同期を行う必要がないので変数配信プロシージャおよび変数参照開始プロシージャが使用されていない点についても、スケジュール例１と異なっている。
【０２３３】
制御Ｊスレッドにおいて実行される制御プログラムがモーション演算プログラムのみであるのは、図２５の（４）の「制御プログラム指定」で「モーション演算プログラム」と指定されていることによる。図２５の（６）の「制御プログラム指定」で、制御Ｋスレッドにおいて実行される制御プログラムが「シーケンスＫプログラム」であることが指定され、「モーションスレッド指定」で、シーケンスＫプログラムに含まれるモーション命令の実行は「制御Ｊスレッド」で行われることが指定されている。
【０２３４】
たとえば、「座標Ｘ１からＸ２まで速度Ｖで移動せよ」といったモーション命令がシーケンスＫプログラムにおいて実行されると、それに応じてその後の最初の制御サイクルにおける制御Ｊスレッドのモーション演算プログラムの実行により、モーション演算プログラムが今後サーボモータドライバに与える位置や速度の指令値を繰り返し算出していくための初期演算と第１回目の指令値算出とが実行される。その後は、モーション命令によって指示された動作を完了するまで、シーケンスＫプログラムからの関与がなくても、制御Ｊスレッドのモーション演算プログラムの実行により、制御サイクルごとに指令値が算出される。指令値を算出し出力する周期は短い方がモータの運動の誤差を小さくできる。実行サイクルが１制御サイクルであるタスクに含まれる制御プログラムをモーション演算プログラムのみとすると、制御サイクルの周期を短く設定することが容易となる。この観点で、スケジュール例４は好ましい。
【０２３５】
（ｆ１１：スケジュール例５）
次に、本発明の実施の形態１のスケジュール例５について説明する。
【０２３６】
図２８は、本発明の実施の形態１のスケジュール例５に対応するスケジュール構築データ２３４を示す図である。図２９は、本発明の実施の形態１のスケジュール例５の第ｋサイクルのシーケンス図である。図２８のスケジュール構築データ２３４から図２９のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図２８のスケジュール構築データ２３４と図２９のシーケンスとの関係についての詳細な説明は行わない。
【０２３７】
スケジュール例５は、上述のスケジュール例１と比較して、実行サイクル周期が１制御サイクル周期である制御Ｌタスクにおいて、入出力Ｌスレッド、制御Ｌ１スレッド、および制御Ｌ２スレッドが実行される点が相違している。制御Ｌ１スレッドにおいて実行される制御プログラムはシーケンスＬプログラムであり、制御Ｌ１スレッドにおいてモーション演算プログラムは実行されない。一方、制御Ｌ２スレッドにおいて実行される制御プログラムは、シーケンスＬプログラムに含まれるモーション命令に従って実行されるモーション演算プログラムのみである。
【０２３８】
スケジュール例５は、入出力処理、モーション命令を含むシーケンスプログラム（ユーザプログラム）、モーション演算プログラムが、この順序で繰り返し実行される特徴がある。モーション演算プログラムは、モーション命令に従い繰り返し実行を開始すると、モーション命令で指示された動作を完了するまでシーケンスプログラムの関与なしに実行することが可能ではある。しかしながら、モーション命令で指示された動作を完了するまでに、新たな入力データを使用したシーケンスプログラムの演算結果によりモーション演算プログラムへの指示内容が変更される場合がある。このような場合に、上記特徴のスケジュールであれば、入力データの入力から、その入力データを用いたシーケンス演算を経て動作の変更指示がモーション演算プログラムに与えられ、変更指示を反映したモーション指令値が出力されるまでの時間を短くすることができる。また、モーション命令の実行条件を成立させる入力データの入力から、そのモーション命令に従う最初のモーション指令値が出力されるまでの時間も短くすることができる。
【０２３９】
スケジュール例１において、制御プログラムＡが、シーケンスプログラムと、それに続いて実行されるモーション演算プログラムとを含む場合にも同様の効果が得られる。
【０２４０】
上記のような処理順序を採用するＣＰＵユニット１３の特徴については、次のようにまとめることができる。
【０２４１】
制御プログラム２３０は、モータの運動を制御するためのモーション指令値を算出するモーション演算プログラム２３４と、ユーザにおける制御目的に応じて作成され、モーション演算プログラム２３４に対してその実行に必要な指示を与える処理を含むユーザプログラム２３６とを含む。
【０２４２】
スケジュール構築データ２３４は、ＰＬＣ１のＣＰＵユニット１３に、通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）による出力データの送信および入力データの受信、ユーザプログラム２３６の実行、ならびにモーション演算プログラム２３４の実行を、この順序で、繰り返し実行させるための、プロシージャの実行順序の指定を含む。ただし、出力データの送信と入力データの受信との間の実行順序は問わない。
【０２４３】
（ｆ１２：スケジュール例６）
次に、本発明の実施の形態１のスケジュール例６について説明する。スケジュール例６においては、入出力Ｐスレッド、制御Ｐスレッドおよび制御Ｑスレッドの合計３つのスレッドが実行される場合を示す。
【０２４４】
図３０は、本発明の実施の形態１のスケジュール例６に対応するシーケンス図である。図３０を参照して、入出力Ｐスレッドおよび制御Ｐスレッドは、その実行サイクル周期が１制御サイクル周期であるタスクに含まれ、制御Ｑスレッドは、その実行サイクル周期が２制御サイクル周期であるタスクに含まれるものとする。そして、制御Ｐスレッドにおいて実行される第１制御プログラム２３０−１と、制御Ｑスレッドにおいて実行される第２制御プログラム２３０−２とは、どちらもモーション演算プログラム２３４を含むものとする。また、第１制御プログラム２３０−１および第２制御プログラム２３０−２の少なくとも一方は、モーション命令を含むユーザプログラム２３６を含むものとする。
【０２４５】
図３０において、入出力Ｐスレッドから制御Ｐスレッドおよび制御Ｑスレッドへそれぞれ延びる矢印は、入力データの流れを示す。具体的には、同期入力コピープロシージャによる入力データのコピーに相当する。この入力データは、第１制御プログラム２３０−１および／または第２制御プログラム２３０−２がユーザプログラム２３６を含む場合には、当該ユーザプログラム２３６が使用する入力データを含む他、モーション演算プログラム２３４が使用する入力データを含むことがある（なお、モーション演算プログラム２３４は、入力データを使用せずに演算する場合もある）。
【０２４６】
同様に、図３０において、制御Ｐスレッドおよび制御Ｑスレッドから入出力Ｐスレッドへそれぞれ延びる矢印は、出力データの流れを示す。具体的には、同期出力コピープロシージャによる出力データのコピーに相当する。この出力データは、第１制御プログラム２３０−１および／または第２制御プログラム２３０−２がユーザプログラム２３６を含む場合には、当該ユーザプログラム２３６が生成した出力データを含む他、モーション演算プログラム２３４が活性状態にある（すなわち、実行されるごとに指令値を算出している）期間中は、当該モーション演算プログラム２３４が生成したモーション指令値データを含む。
【０２４７】
図３１は、本発明の実施の形態１のスケジュール例６において、制御プログラム内のプログラム構成と指示の流れとについて説明するための模式図である。図３１には、第１制御プログラム２３０−１および第２制御プログラム２３０−２に含まれ得るユーザプログラム２３６のバリエーションの例を示す。すなわち、図３１の（１）は、第１制御プログラム２３０−１のみがユーザプログラム２３６を有している例を示し、図３１の（２）は、第２制御プログラム２３０−２のみがユーザプログラム２３６を有している例を示し、図３１の（３）は、第１制御プログラム２３０−１および第２制御プログラム２３０−２の両方がユーザプログラム２３６を有している例を示す。
【０２４８】
図３１において、ユーザプログラム２３６（図３１の（３）では、第１ユーザプログラム２３６−１または第２ユーザプログラム２３６−２）からモーション演算プログラム２３４（第１モーション演算プログラム２３４−１または第２モーション演算プログラム２３４−２）へ延びる矢印は、モーション演算プログラム２３４の実行に必要な指示の流れを示す。この指示は、たとえば、ユーザプログラム２３６の中で、モーション制御の内容を定義するモーションファンクションブロック（モーション命令）に対する入力パラメータ（入力定数または入力変数）として記述される。そして、ユーザプログラム２３６の実行に伴いモーション制御開始の条件が成立してモーションファンクションブロックが実行されると、当該入力パラメータがモーション演算プログラム２３４に与えられる。
【０２４９】
制御プログラムがユーザプログラム２３６およびモーション演算プログラム２３４を含む場合の、それぞれのプログラムの実行順序は、どちらが先でもよい。ユーザプログラム２３６の実行を先にする場合は、ユーザプログラム２３６の実行結果をモーション演算プログラム２３４の実行に直ちに反映できる点で好ましい。一方、モーション演算プログラム２３４を先に実行する場合は、ユーザプログラム２３６の実行結果は次の実行サイクルにおいてモーション演算プログラム２３４の実行に反映される。
【０２５０】
図３１の（１）を参照して、第１制御プログラム２３０−１にのみユーザプログラム２３６が含まれる形態について説明する。図３１の（１）に示す例は、第１モーション演算プログラム２３４−１および第２モーション演算プログラム２３４−２の両方に指示を与えるユーザプログラム２３６と、第１モーション演算プログラム２３４−１とを所望の制御サイクル時間の中で実行可能な場合に採用できる。
【０２５１】
すなわち、図３１の（１）に示す例においては、第１制御プログラム２３０−１は、第１モーション演算プログラム２３４−１に対してその実行に必要な指示を与える命令と、第２モーション演算プログラム２３４−２に対してその実行に必要な指示を与える命令とを含むユーザプログラム２３６を含む。
【０２５２】
図３１の（１）に示す例によれば、第１モーション演算プログラム２３４−１のどの実行サイクルにおいても、ユーザプログラム２３６から新しい指示を与えることができる。したがって、実行中のモータの運動に対する変更の指示などを迅速にモーション制御に反映することができる。なお、第２モーション演算プログラム２３４−２の実行サイクルの途中で第２モーション演算プログラム２３４−２に与えられた指示は、第２モーション演算プログラム２３４−２の次の実行サイクルにおいて反映される。さらに、図３１の（１）に示す例によれば、ユーザプログラム２３６を１つに集約できるので、その設計が容易になる。
【０２５３】
図３１の（２）を参照して、第２制御プログラム２３０−２にのみユーザプログラム２３６が含まれる形態について説明する。図３１の（２）に示す例は、所望の制御サイクル時間内で、第１モーション演算プログラム２３４−１の実行時間を除いた、ユーザプログラム２３６の実行に割り当てることができる時間が少ない場合に好適な形態である。
【０２５４】
すなわち、図３１の（２）に示す例においては、第２制御プログラム２３０−２は、第１モーション演算プログラム２３４−１に対してその実行に必要な指示を与える命令と、第２モーション演算プログラム２３４−２に対してその実行に必要な指示を与える命令とを含むユーザプログラム２３６を含む。
【０２５５】
図３１の（２）に示す例によれば、第１モーション演算プログラム２３４−１を実行するに足る時間まで制御サイクル時間を短くすることができる。ただし、ユーザプログラム２３６から第１モーション演算プログラム２３４−１への指示は第２制御プログラム２３０−２の実行サイクルの周期でしか与えることができない。しかしながら、モーション演算プログラム２３４は、ユーザプログラム２３６から、たとえば「座標Ｘ１から座標Ｘ２まで速度Ｖで移動せよ」といった指示をいったん受けて活性状態となれば、その指示の実行を完了するまでの間、ユーザプログラム２３６からの指示なしに、実行サイクルごとにモーション指令値データを算出することができる。したがって、そのような指示の実行途中に、モータの運動を中止させる指示や別の運動へ変更する指示を与えて迅速に反応させる必要がない場合には、図３１の（２）に示す形態を採用しても支障はない。さらに、図３１の（２）に示す例によれば、ユーザプログラム２３６を１つに集約できるので、その設計が容易になる。
【０２５６】
図３１の（３）を参照して、第１制御プログラム２３０−１に第１ユーザプログラム２３６−１が含まれ、かつ、第２制御プログラム２３０−２に第２ユーザプログラム２３６−２が含まれる形態について説明する。
【０２５７】
すなわち、図３１の（３）に示す例においては、ユーザプログラム２３６としては、第１モーション演算プログラム２３４−１に対してその実行に必要な指示を与える命令を含む第１ユーザプログラム２３６−１と、第２モーション演算プログラム２３４−２に対してその実行に必要な指示を与える命令を含む第２ユーザプログラム２３６−２とからなる。
【０２５８】
図３１の（３）に示す例によれば、第１制御プログラム２３０−１に含まれる第１ユーザプログラム２３６−１は、第２モーション演算プログラム２３４−２に対する指示を与えることに関する処理を行う必要がないので、実行時間を比較的短くすることができる。したがって、第１ユーザプログラム２３６−１と第１モーション演算プログラム２３４−１とを実行可能な時間としての制御サイクル時間を比較的短くすることができる。さらに、第１モーション演算プログラム２３４−１および第２モーション演算プログラム２３４−２のどの実行サイクルにおいても第１ユーザプログラム２３６−１および第２ユーザプログラム２３６−２からそれぞれ新しい指示を与えることができる。
【０２５９】
上述したスケジュール例６のように、複数の制御プログラムにモーション演算プログラム２３４を含むスケジュールを採用するＣＰＵユニット１３の特徴は、次のようにまとめることができる。
【０２６０】
通信回路（ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０）は、制御サイクルの周期で出力データを送信しおよび入力データを受信する。制御プログラム２３０は、第１制御プログラム２３０−１および第２制御プログラム２３０−２を含む。
【０２６１】
第１制御プログラム２３０−１は、モータの運動を制御するための第１モーション指令値データを生成する第１モーション演算プログラム２３４−１を含む。第２制御プログラム２３０−２は、モータの運動を制御するための第２モーション指令値データを生成する第２モーション演算プログラム２３４−１を含む。そして、第１制御プログラム２３０−１および第２制御プログラム２３０−２の少なくとも一方は、ユーザにおける制御目的に応じて作成され第１モーション演算プログラム２３４−１および第２モーション演算プログラム２３４−１に対してその実行に必要な指示を与える命令を含むユーザプログラム２３６（第１ユーザプログラム２３６−１または第２ユーザプログラム２３６−２）を含む。
【０２６２】
スケジュール構築データ２３４は、マイクロプロセッサ１００に、制御サイクルの周期と同じ周期の第１実行サイクルごとに第１制御プログラム２３０−１を実行開始させ、制御サイクルの周期の２以上の整数倍の周期の第２実行サイクルごとに第２制御プログラム２３０−２を実行開始させる。さらに、スケジュール構築データ２３４は、第２実行サイクルが開始する制御サイクルにおいて、第１制御プログラム２３０−１の実行終了後に第２制御プログラム２３０−２を実行開始させ、当該制御サイクルが終了するまでに第２制御プログラム２３０−２が終了しなければ次の制御サイクルにおいて第１制御プログラム２３０−１の実行終了後に第２制御プログラム２３０−２の未実行の部分の実行を開始させるための、プロシージャの実行順序の指定を含む。
【０２６３】
このようにすれば、モーション制御機能を有するＰＬＣ１において、高速処理を要する一部のモーション制御処理のために比較的短い周期の実行サイクルを確保しつつ、それ以外のモーション制御処理も一定周期で実行することができる。
【０２６４】
たとえば、対象物に対して切削加工を行う加工機を制御する場合に、刃物の運動制御に関わるような高速かつ高精度な制御を要するモーション制御処理を短い周期で実行することができるとともに、加工機に対する対象物の搬入や搬出にかかわるような相対的に高速性を要しないモーション制御処理も一定周期で実行することができる。
【０２６５】
（ｆ１３：スケジュール例７）
次に、本発明の実施の形態１のスケジュール例７について説明する。
【０２６６】
図３２は、本発明の実施の形態１のスケジュール例７に対応するスケジュール構築データ２３４を示す図である。図３３は、本発明の実施の形態１のスケジュール例７の第ｋサイクルのシーケンス図である。図３４は、本発明の実施の形態１のスケジュール例７の第ｋ＋１サイクルのシーケンス図である。図３２のスケジュール構築データ２３４から図３３および図３４のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図３２のスケジュール構築データ２３４と図３３および図３４のシーケンスとの関係についての詳細な説明は行わない。
【０２６７】
スケジュール例７を適用するＣＰＵユニット１３のマイクロプロセッサ１００は、第１コアおよび第２コアを含む複数のコアを有するものとする。そして、第１コアで制御サイクル開始プロシージャおよび制御Ｒタスクが実行され、第２コアで制御Ｓタスクが実行される。
【０２６８】
制御Ｒタスクの実行に関しては、制御Ｒタスクのタスク開始プロシージャの実行後、制御Ｓタスクのタスク開始プロシージャの実行終了を待たずに入出力ＲスレッドがＲｕｎ状態となる点を除き、スケジュール例１の制御Ａタスクと同様である。
【０２６９】
制御Ｓスレッドは、スケジュール例１の制御Ｂスレッドとは異なり、入出力Ｒスレッドの後続起動プロシージャによって起動されると直ちにＲｕｎ状態となり、制御Ｒスレッドと並列に実行される。また、制御Ｓスレッドは、第ｋ＋１サイクルを開始する制御サイクル開始割込によって実行中断されることなく実行を継続する。さらに、制御Ｓスレッドは、第ｋ＋１サイクルにおける入出力Ｒスレッドとも並列実行される。
【０２７０】
制御Ｓスレッドは、第２コアの資源利用上、第ｋサイクルの入出力Ｒスレッドとも並列実行することが可能であるが、第ｋサイクルで実行開始する制御Ｓスレッドは、第ｋサイクルにおける入出力Ｒスレッドの実行により入力される入力データを使用するので、入出力Ｒスレッドの後続起動プロシージャによって起動させている。
【０２７１】
以上説明した、複数のコアを有するマイクロプロセッサ１００で実行されるスケジュールを採用するＣＰＵユニット１３の特徴は、次のようにまとめることができる。
【０２７２】
マイクロプロセッサ１００は、少なくとも第１コアおよび第２コアを含む。制御プログラム２３０は、第１制御プログラムと第２制御プログラムとを含む。スケジュール構築データ２３４は、出力データの送信および入力データの受信が終了した後に、第１コアに第１制御プログラムを実行させるとともに、第２コアに第２制御プログラムを第１制御プログラムの実行と並列に実行させるための、プロシージャの実行順序の指定を含む。
【０２７３】
このようにすれば、ＰＬＣ１に特徴的な入出力処理と制御プログラム実行とのサイクリック処理を採用しつつ、複数のコアを有するマイクロプロセッサ１００がプログラムの並列実行することによる処理の高速化を実現することができる。
【０２７４】
（ｆ１４：スケジュール例８および９）
本実施の形態によれば、従来の典型的なＰＬＣ１と同様のスケジュールを構築することもできる。以下に説明するスケジュール例８および９は、そのような例である。
【０２７５】
図３５は、本発明の実施の形態１のスケジュール例８に対応するスケジュール構築データ２３４を示す図である。図３６は、本発明の実施の形態１のスケジュール例８の第ｋサイクルおよび第ｋ＋１サイクルのシーケンス図である。図３５のスケジュール構築データ２３４から図３６のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図３５のスケジュール構築データ２３４と図３６のシーケンスとの関係についての詳細な説明は行わない。
【０２７６】
スケジュール例８では、単一のスレッド（制御Ｔスレッド）において、制御プログラムの実行と入出力処理とが行われる。また、制御サイクル開始割り込みが利用されず、１つの制御サイクルのタスクが実行終了すると、直ちに次の制御サイクルが開始される。これは、図３５の（１）の「制御サイクル開始条件」において、「制御サイクル開始割り込み」ではなく、「制御Ｔタスク」が指定されていることによる。システムプログラム２１０による処理のうち、図３６に示した以外の、ＰＬＣサポート装置８との通信処理などを含むその他の処理は、通信終了通知待ち時間の間に実行される。このシステムプログラム２１０によるその他の処理は周辺処理とよばれることもある。
【０２７７】
スケジュール例８の変形として、システムプログラム２１０による上記その他の処理（周辺処理）を、制御Ｔスレッドの中に組み込んで、たとえば各制御サイクルの入力コピープロシージャを実行した後に、実行するようにしてもよい。
【０２７８】
図３７は、本発明の実施の形態１のスケジュール例９に対応するスケジュール構築データ２３４を示す図である。図３８は、本発明の実施の形態１のスケジュール例９の第ｋサイクルおよび第ｋ＋１サイクルのシーケンス図である。図３７のスケジュール構築データ２３４から図３８のシーケンスが生じることについては、スケジュール例１を考慮すれば自明であるので、図３５のスケジュール構築データ２３４と図３６のシーケンスとの関係についての詳細な説明は行わない。
【０２７９】
スケジュール例８では、制御プログラムの実行後に入出力処理を行っているが、スケジュール例９では、入力処理、制御プログラムの実行、出力処理の順に実行される。これに伴い、スケジュール例９では、入出力指示プロシージャではなく、入力指示プロシージャと出力指示プロシージャとが用いられている。
【０２８０】
さらに、スケジュール例９では、出力の通信終了通知の後に、サイクルタイマプロシージャが実行される。サイクルタイマプロシージャは、図１１で説明されているとおり、制御サイクル開始からの経過時間を取得し、制御サイクル時間終了までの残り時間を算出し、算出した残り時間が経過するとタイマ割り込みが入るようにプロセッサ内蔵のタイマを設定し、タイマ割り込みがあれば本スレッドが再起動されるように設定し、本スレッドを休止する（Ｓｌｅｅｐ状態にする）機能を有する。なお、サイクルタイマプロシージャが実行された時点ですでに制御サイクル時間が経過していれば、サイクルタイマプロシージャは、タイマ割り込みを設定することなくただちに後続起動プロシージャを実行する。制御サイクル開始割り込みを用いる場合とは異なり、制御サイクル時間の経過によってスレッドの実行が強制中断されることはない。サイクルタイマプロシージャを用いることにより、制御サイクル開始割り込みを用いることなく、制御サイクルの周期をほぼ一定時間にすることができる。システムプログラム２１０による上記その他の処理（周辺処理）は、入力および出力の通信終了通知待ち時間ならびにサイクルタイマプロシージャが設定したタイマ割り込みの待ち時間において実行される。
【０２８１】
＜Ｇ．実施の形態２＞
上述の実施の形態１においては、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる方法について説明した。これに対して、実施の形態２では、スレッドは用いるが、タスクを用いずにスケジュールを構築する方法について説明する。
【０２８２】
実施の形態２では、システムプログラム２１０によるＰＬＣ１の制御動作の実行準備処理（図７のステップＳ１）において、各スレッドに対応して、記憶手段（メインメモリ１０４など）に、スレッドの実行サイクル数を格納する記憶領域と、スレッド終了フラグの記憶領域と、スレッドの実行回数を格納する記憶領域と、スレッドの実行時間を格納する記憶領域とが設けられる。
【０２８３】
図３９は、本発明の実施の形態２において用意されるスレッドの設定項目と各設定項目の説明とを表形式で示す図である。図８に示す実施の形態１のタスクの設定項目において、タスク開始条件の設定項目として示されている周期の設定は、図３９に示す実施の形態２では、スレッドの開始条件の設定項目に移行されている。また、実施の形態１ではタスクの設定項目であるサイクル超過許容回数も、実施の形態２ではスレッドの設定項目に移行されている。
【０２８４】
図４０は、本発明の実施の形態２において用意されているプロシージャの名称および機能を示す図である。制御サイクル開始プロシージャについては、図４０に設定項目および設定項目の説明も示す。実施の形態２においても、図１１の後続起動プロシージャ以降の各プロシージャが用意されているが、その内容は図１１と同じであるので繰り返して図示しない。
【０２８５】
実施の形態２では、実施の形態１におけるタスク開始プロシージャの機能が制御サイクル開始プロシージャに、タスク終了プロシージャの機能がスレッド終了プロシージャに、それぞれ実質的に移行されている。
【０２８６】
図４１は、本発明の実施の形態２のスケジュール例に対応するスケジュール構築データ２３４を示す図である。図４２は、本発明の実施の形態２のスケジュール例の第ｋサイクルのシーケンス図である。図４３は、本発明の実施の形態２のスケジュール例の第ｋ＋１サイクルのシーケンス図である。図４１のスケジュール構築データ２３４から図４２および図４３のシーケンスが生じることについては、図３９および４０を参照しつつ実施の形態１のスケジュール例１を考慮すれば自明であるので、図４１のスケジュール構築データ２３４と図４２および図４３のシーケンスとの関係についての詳細な説明は行わない。
【０２８７】
実施の形態２のこのスケジュール例は、実施の形態１のスケジュール例１とほぼ同様のスケジュールを実施の形態２におけるしくみによって実現したものである。すなわち、スレッドは用いるが、タスクを用いずにスケジュールが構築される。そのため、実施の形態１ではタスクを対象に行われていた実行回数の計数や実行時間の計測は、実施の形態２ではスレッドを対象として行われる。実施の形態１の他のスケジュール例についても、同様に、実施の形態２におけるしくみによってほぼ同一のスケジュールを実現することができる。
【０２８８】
＜Ｈ．実施の形態３＞
上述の実施の形態１においては、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる方法について説明した。これに対して、実施の形態３では、タスクおよびスレッドを用いずに、プロシージャに実行番号を与えてプロシージャを実行番号の順に実行することにより、スケジュールを構築する方法について説明する。
【０２８９】
実施の形態３に係るスケジュール構築データは、実行するプロシージャの指定と、指定された各プロシージャについての実行番号および実行サイクル周期の指定とを含む。同一名称のプロシージャを複数回指定して、それぞれに異なる実行番号を指定した場合は、実行番号ごとにプロシージャのオブジェクト・インスタンスが生成される。以降の説明においては、指定された実行番号が異なる同一名称のプロシージャは、互いに区別される別々のプロシージャとして扱う。
【０２９０】
実施の形態３では、システムプログラム２１０によるＰＬＣ１の制御動作の実行準備処理（図７のステップＳ１）において、各プロシージャに対応して、記憶手段（メインメモリ１０４など）に、実行サイクル数を格納する記憶領域と、実行済フラグの記憶領域とが設けられる。
【０２９１】
また、実施の形態３に係るプロシージャは、各プロシージャに固有の機能のほかに、いずれのプロシージャにも共通して、プロシージャの実行を制御する機能を有している。
【０２９２】
図４４は、本発明の実施の形態３に係る各プロシージャが共通して有する実行制御機能が提供する処理を示すフローチャートである。図４４を参照して、プロシージャの実行が開始されると、当プロシージャの実行済フラグがオフであるか否かが判断される（ステップＳ１００）。実施の形態３においては、各プロシージャの実行終了については、対応する実行済フラグの状態（オフまたはオン）で判断される。
【０２９３】
当プロシージャの実行済フラグがオフでなければ（ステップＳ１００においてＮＯ）、処理はステップＳ１０６へ進む。
【０２９４】
当プロシージャの実行済フラグがオフであれば（ステップＳ１００においてＹＥＳ）、当プロシージャの固有の機能の処理が実行される（ステップＳ１０２）。なお、当プロシージャが先の処理によって実行中断中の場合は、未実行の部分が実行される。そして、当プロシージャの固有の機能の処理の実行が終了すると、当プロシージャの実行済フラグがオンに設定される（ステップＳ１０４）。
【０２９５】
ステップＳ１０６においては、当プロシージャより実行番号の大きい他のプロシージャが存在するか否かが判断される。当プロシージャより実行番号の大きい他のプロシージャが存在しなければ（ステップＳ１０６においてＮＯ）、当プロシージャは終了する。
【０２９６】
一方、当プロシージャより実行番号の大きい他のプロシージャが存在すれば（ステップＳ１０６においてＹＥＳ）、当プロシージャの次に実行番号の大きいプロシージャが起動される（ステップＳ１０８）。そして、当プロシージャの実行は終了する。
【０２９７】
図４５は、本発明の実施の形態３において用意されているプロシージャの１つである、制御サイクル開始プロシージャについて、その機能、設定項目および設定項目の説明を示す図である。図４６は、本発明の実施の形態３において用意されている、制御サイクル開始プロシージャ以外のプロシージャについて、各プロシージャの名称および機能を示す図である。
【０２９８】
図４７は、本発明の実施の形態３のスケジュール例に対応するスケジュール構築データ２３４を示す図である。図４７の（１）では、制御サイクル開始プロシージャについて、制御サイクル開始条件として「制御サイクル開始割り込み」が設定されている。図４７の（２）では、先に説明したとおり、実行するプロシージャが指定されるとともに、指定されたプロシージャごとに実行番号および実行サイクル周期が指定される。さらに、制御プログラム実行プロシージャについては、そのプロシージャが実行させる対象制御プログラムも指定される。ここでは、制御Ａプログラムが実行サイクル周期「１」で実行され、制御Ｂプログラムが実行サイクル周期「２」で実行されるという、実施の形態１のスケジュール例１に類似したスケジュールが設定されている例を示す。
【０２９９】
図４８は、図４７のスケジュール構築データに対応するスケジュール例の第ｋサイクルのシーケンス図である。図４９は、図４７のスケジュール構築データに対応するスケジュール例の第ｋ＋１サイクルのシーケンス図である。
【０３００】
図４７および図４８を参照して、第ｋサイクルにおいては、制御サイクル開始割り込みによって制御サイクル開始プロシージャが実行される。制御サイクル開始プロシージャは、図４５で説明されているとおり、各プロシージャの実行サイクル数のカウントアップやその他の処理を実行する。制御サイクル開始プロシージャは、第ｋサイクルにおいては、すべてのプロシージャについて、実行サイクル数を「１」にし、かつ、実行済フラグをオフにするものとする。さらに、制御サイクル開始プロシージャは、まず実行番号が最も小さいプロシージャ（図４７の例では、同期出力コピープロシージャ）を起動する。その後、各プロシージャが共通して有する実行制御機能の処理手順（図４４に示すフローチャート）に従い、実行番号が小さい順に各プロシージャが実行される。各プロシージャは、固有機能の処理の実行後に実行済フラグをオンにする。図４７の例では、制御Ｂプログラムの実行中に第ｋ＋１サイクルの制御サイクル開始割り込みが入るので、制御Ｂプログラムの実行は中断される。
【０３０１】
図４７および図４９を参照して、第ｋ＋１サイクルにおいては、制御サイクル開始割り込みによって制御サイクル開始プロシージャが実行される。制御サイクル開始プロシージャが各プロシージャの実行サイクル数をカウントアップする結果、各プロシージャの実行サイクル数は「２」となる。実行番号が「１」から「８」までのプロシージャについては、実行サイクル周期が「１」であるから、この時点で実行サイクル数が指定された実行サイクル周期を超える。そのため、制御サイクル開始プロシージャは、これらのプロシージャの実行サイクル数を「１」にするとともに、対応する実行済フラグをオフにする。一方、実行番号が「９」から「１１」までのプロシージャについては、実行サイクル周期が「２」であるから、この時点では実行サイクル数が指定された実行サイクル周期を超えていない。そのため、制御サイクル開始プロシージャは、これらのプロシージャの実行サイクル数および実行済フラグを現状のままとする。その後、実行番号が最も小さいプロシージャ（図４７の例では、同期出力プロシージャ）から実行される。
【０３０２】
実行サイクル周期が「１」である実行番号「１」から「８」までのプロシージャは、第ｋサイクルにおけるのと同様に実行される。実行番号「９」の変数参照開始プロシージャは、第ｋサイクルにおいて実行済フラグがオンになったままであるので、図４４のフローに従い、その固有の機能を実行しないまま、実行番号「１０」の制御プログラム実行プロシージャを起動する（図４４のステップＳ１００参照）。
【０３０３】
実行番号「１０」の制御プログラム実行プロシージャによって実行される制御プログラムＢは、第ｋサイクルにおいて実行中断中となっているので、未実行の部分が実行される（図４４のステップＳ１０２参照）。
【０３０４】
その後、実行番号「１１」の変数配信プロシージャの実行終了により、第ｋ＋１サイクルにおけるプロシージャが実行終了する。
【０３０５】
その後、第ｋ＋２サイクルの制御サイクル開始割り込みが入るまでの時間は、システムプログラムによるその他の処理（周辺処理）の実行に使われる。
【０３０６】
上記スケジュール例による実行内容は、上述の実施の形態１のスケジュール例１と類似している。このように、本発明の実施の形態３では、プロシージャごとに、実行順序を決定する実行番号と実行サイクル周期とが指定されているので、各制御サイクル内で実行されるプロシージャの実行順序に着目すれば、実行サイクル周期の異なる複数のスレッドを用いた場合と同様の結果となるスケジュールを構築することができる。
【０３０７】
上述した実施の形態３の例には実行サイクル超過に対応する機能を含めなかったが、実施の形態１および２にならって、設定した制御サイクル数までのプロシージャの実行サイクル超過を許すための機能を追加してもよい。
【０３０８】
上述した実施の形態３におけるようにプロシージャ自体に実行制御機能を持たせることに代えて、システムプログラム２１０が図４４に相当する実行制御機能を担い、システムプログラム２１０が図４７に示すようなスケジュール構築データに基づいてプロシージャを１つずつ順に呼び出して実行するようにしても、実施の形態３と同様のスケジュールを実現することができる。
【０３０９】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０３１０】
１  ＰＬＣ、２  フィールドネットワーク、３  サーボモータドライバ、４  サーボモータ、５  ターミナル、６  検出スイッチ、７  リレー、８  ＰＬＣサポート装置、９  ＣＤ−ＲＯＭ、１０  接続ケーブル、１１  ＰＬＣシステムバス、１２  電源ユニット、１３  ＣＰＵユニット、１４，５３  ＩＯユニット、１５  特殊ユニット、５１  ターミナルバス、５２  通信カプラ、８１  ＣＰＵ、８３  ＲＡＭ、８５  キーボード、８６  マウス、８７  モニタ、８８  ＣＤ−ＲＯＭドライブ、１００  マイクロプロセッサ、１０２  チップセット、１０４  メインメモリ、１０６  不揮発性メモリ、１０８  システムタイマ、１１０  ＵＳＢコネクタ、１２０  ＰＬＣシステムバスコントローラ、１２２  ＤＭＡ制御回路、１２４  ＰＬＣシステムバス制御回路、１２６，１４６  バッファメモリ、１３０  コネクタ、１４０  フィールドネットワークコントローラ、１４４  フィールドネットワーク制御回路、２００  リアルタイムＯＳ、２１０  システムプログラム、２１２  スケジューラプログラム、２１４  プロシージャライブラリ、２２２  制御動作用のスレッドおよび独立プロシージャ、２２４，２３４  スケジュール構築データ、２３０  制御プログラム、２３０−１  第１制御プログラム、２３０−２  第２制御プログラム、２３２  シーケンス命令演算プログラム、２３４  モーション演算プログラム、２３４−１  第１モーション演算プログラム、２３４−２  第２モーション演算プログラム、２３６  ユーザプログラム、２３６−１  第１ユーザプログラム、２３６−２  第２ユーザプログラム、３１０  ＯＳ、３２０  サポートプログラム、３２１  エディタプログラム、３２２  コンパイラプログラム、３２３  デバッガプログラム、３２４  スケジュール構築データテンプレート、３２５  スケジュール構築データ作成プログラム、３２６  通信プログラム、３３０  ソースプログラム、１０４１  プログラム領域、１０４２  制御プログラムの作業領域、１０４２ａ  グローバル変数領域、１０４２ｂ  変数同期バッファ領域、１０４２ｃ  出力同期バッファ領域、１０４２ｄ  入力同期バッファ領域、１０４３  ＰＬＣシステムバス送信バッファ、１０４４  ＰＬＣシステムバス受信バッファ、１０４５  フィールドネットワーク送信バッファ、１０４６  フィールドネットワーク受信バッファ、ＳＹＳ  システム。
【図１】
2013025353.tif 000003
【図２】
2013025353.tif 000004
【図３】
2013025353.tif 000005
【図４】
2013025353.tif 000006
【図５】
2013025353.tif 000007
【図６】
2013025353.tif 000008
【図７】
2013025353.tif 000009
【図８】
2013025353.tif 000010
【図９】
2013025353.tif 000011
【図１０】
2013025353.tif 000012
【図１１】
2013025353.tif 000013
【図１２】
2013025353.tif 000014
【図１３】
2013025353.tif 000015
【図１４】
2013025353.tif 000016
【図１５】
2013025353.tif 000017
【図１６】
2013025353.tif 000018
【図１７】
2013025353.tif 000019
【図１８】
2013025353.tif 000020
【図１９】
2013025353.tif 000021
【図２０】
2013025353.tif 000022
【図２１】
2013025353.tif 000023
【図２２】
2013025353.tif 000024
【図２３】
2013025353.tif 000025
【図２４】
2013025353.tif 000026
【図２５】
2013025353.tif 000027
【図２６】
2013025353.tif 000028
【図２７】
2013025353.tif 000029
【図２８】
2013025353.tif 000030
【図２９】
2013025353.tif 000031
【図３０】
2013025353.tif 000032
【図３１】
2013025353.tif 000033
【図３２】
2013025353.tif 000034
【図３３】
2013025353.tif 000035
【図３４】
2013025353.tif 000036
【図３５】
2013025353.tif 000037
【図３６】
2013025353.tif 000038
【図３７】
2013025353.tif 000039
【図３８】
2013025353.tif 000040
【図３９】
2013025353.tif 000041
【図４０】
2013025353.tif 000042
【図４１】
2013025353.tif 000043
【図４２】
2013025353.tif 000044
【図４３】
2013025353.tif 000045
【図４４】
2013025353.tif 000046
【図４５】
2013025353.tif 000047
【図４６】
2013025353.tif 000048
【図４７】
2013025353.tif 000049
【図４８】
2013025353.tif 000050
【図４９】
2013025353.tif 000051