"制御対象を制御するPLCのCPUユニットであって、マイクロプロセッサと、記憶手段と、通信回路とを備え、前記記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられ、前記マイクロプロセッサは、前記記憶手段に格納された、前記システムプログラムおよび前記制御プログラムを実行し、前記通信回路は、前記制御プログラムの実行によって生成される出力データを送信するとともに前記制御プログラムの実行に使用される入力データを受信し、前記システムプログラムは、前記制御プログラムの実行を制御するためのプロシージャと前記出力データの出力および前記入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含み、前記システムプログラムは、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されているときに、前記マイクロプロセッサに、前記スケジュール構築データに含まれているプロシージャの実行順序の指定に従って前記プロシージャのライブラリに収録されているプロシージャを実行させる、PLCのCPUユニット。前記スケジュール構築データは、前記プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、前記システムプログラムは、前記PLCの制御動作の実行準備処理として、前記スケジュール構築データに含まれている、前記スレッドを生成するための指定に従って、スレッドを生成する処理を含む、請求項1に記載のPLCのCPUユニット。前記スケジュール構築データは、前記スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む、請求項2に記載のPLCのCPUユニット。前記スケジュール構築データは、1または複数の前記スレッドを含む、繰り返し実行の単位となるタスクを設定するための指定を含み、前記システムプログラムは、前記PLCの制御動作の実行準備処理として、前記スケジュール構築データに含まれている前記タスクを設定するための指定に従って、タスクを設定する処理を含む、請求項2に記載のPLCのCPUユニット。前記PLCのCPUユニットは、さらに、前記スケジュール構築データを取得するスケジュール構築データ取得手段を備える、請求項1~4のいずれか1項に記載のPLCのCPUユニット。前記出力データの送信と、前記入力データの受信と、前記入力データを使用して前記出力データを生成する前記制御プログラムの実行とを繰り返させるための、前記プロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されている、請求項1~4のいずれか1項に記載のPLCのCPUユニット。前記PLCのCPUユニットは、さらに、制御サイクルの周期を設定する手段を備え、前記通信回路は、前記制御サイクルごとに、前記出力データの送信および前記入力データの受信を行い、前記スケジュール構築データは、前記マイクロプロセッサに、前記制御プログラムの実行が終了した制御サイクルの次の制御サイクルにおいて、前記通信回路による出力データの送信および入力データの受信の後に、前記制御プログラムの実行を開始させ、前記制御プログラムの実行が終了しなかった制御サイクルの次の制御サイクルにおいて、前記制御プログラムの未実行の部分を実行させるための、前記プロシージャの実行順序の指定を含む、請求項6に記載のPLCのCPUユニット。前記システムプログラムは、前記PLCの制御動作の実行準備処理として、受信された入力データを格納する受信バッファを前記記憶手段内に生成する処理と、前記制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを前記記憶手段内に生成する処理とを含み、前記スケジュール構築データは、前記マイクロプロセッサに、受信された前記入力データを前記受信バッファからその入力データに対応する前記入力同期バッファにコピーする入力コピー処理と、前記制御プログラムを実行開始する制御プログラム開始処理とを実行させるための、前記プロシージャの実行順序の指定を含む、請求項6に記載のPLCのCPUユニット。前記入力データの受信は、制御サイクルごとに実行され、前記スケジュール構築データは、前記マイクロプロセッサに、前記制御サイクルの整数倍の実行サイクルごとに前記制御プログラム開始処理を実行させ、前記制御プログラムの実行サイクルが開始した前記制御サイクルにおいて受信された入力データを対象として、前記入力コピー処理を実行させるための、前記プロシージャの実行順序の指定を含む、請求項8に記載のPLCのCPUユニット。前記システムプログラムは、前記PLCの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを前記記憶手段内に生成する処理と、前記送信バッファにコピーされる前記出力データが格納される出力同期バッファを前記出力データごとに前記記憶手段内に生成する処理とを含み、前記スケジュール構築データは、さらに、前記マイクロプロセッサに、前記出力データを前記出力同期バッファから前記送信バッファにコピーする出力コピー処理を実行させるための、前記プロシージャの実行順序の指定を含む、請求項8に記載のPLCのCPUユニット。前記スケジュール構築データは、前記マイクロプロセッサに、前記制御プログラム開始処理を制御サイクルの整数倍の実行サイクルごとに実行させ、前記制御プログラムの実行サイクルの最初の制御サイクルにおいてその前の実行サイクルにおける前記制御プログラムの実行により生成された前記出力データが前記送信バッファから送信されることになるタイミングで前記出力コピー処理を実行させるための、前記プロシージャの実行順序の指定を含む、請求項10に記載のPLCのCPUユニット。前記記憶手段は、さらに、前記制御プログラムが使用する変数についての属性データの格納に用いられ、前記属性データは、前記変数が複数の前記制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、前記システムプログラムは、前記PLCの制御動作の実行準備処理として、前記グローバル変数を格納するグローバル変数領域を前記記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときに前記グローバル変数領域に代えて参照先とする変数同期バッファを前記記憶手段内に生成する処理とを含み、前記スケジュール構築データは、前記マイクロプロセッサに、オーナー側制御プログラムを実行開始するオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数を前記グローバル変数領域からそのグローバル変数に対応する前記変数同期バッファにコピーする変数コピー処理と、リファラ側制御プログラムを実行開始するリファラ側開始処理とを実行させるための、前記プロシージャの実行順序の指定を含む、請求項6に記載のPLCのCPUユニット。前記制御プログラムは、モータの運動を制御するためのモーション指令値を算出するモーション演算プログラムと、ユーザにおける制御目的に応じて作成され、前記モーション演算プログラムに対してその実行に必要な指示を与える処理を含むユーザプログラムとを含み、前記スケジュール構築データは、前記PLCのCPUユニットに、前記通信回路による前記出力データの送信および前記入力データの受信、前記ユーザプログラムの実行、ならびに前記モーション演算プログラムの実行を、この順序で、繰り返し実行させるための、前記プロシージャの実行順序の指定を含む、請求項6に記載のPLCのCPUユニット。前記通信回路は、制御サイクルの周期で前記出力データを送信しおよび前記入力データを受信し、前記制御プログラムは、第1制御プログラムおよび第2制御プログラムを含み、前記第1制御プログラムは、モータの運動を制御するための第1モーション指令値データを生成する第1モーション演算プログラムを含み、前記第2制御プログラムは、モータの運動を制御するための第2モーション指令値データを生成する第2モーション演算プログラムを含み、前記第1制御プログラムおよび前記第2制御プログラムの少なくとも一方は、ユーザにおける制御目的に応じて作成され前記第1モーション演算プログラムおよび前記第2モーション演算プログラムに対してその実行に必要な指示を与える命令を含むユーザプログラムを含み、前記スケジュール構築データは、前記マイクロプロセッサに、前記制御サイクルの周期と同じ周期の第1実行サイクルごとに前記第1制御プログラムを実行開始させ、前記制御サイクルの周期の2以上の整数倍の周期の第2実行サイクルごとに前記第2制御プログラムを実行開始させ、前記第2実行サイクルが開始する前記制御サイクルにおいて、前記第1制御プログラムの実行終了後に前記第2制御プログラムを実行開始させ、当該制御サイクルが終了するまでに前記第2制御プログラムが終了しなければ次の制御サイクルにおいて前記第1制御プログラムの実行終了後に前記第2制御プログラムの未実行の部分の実行を開始させるための、前記プロシージャの実行順序の指定を含む、請求項6に記載のPLCのCPUユニット。前記マイクロプロセッサは、少なくとも第1コアおよび第2コアを含み、前記制御プログラムは、第1制御プログラムと第2制御プログラムとを含み、前記スケジュール構築データは、前記出力データの送信および前記入力データの受信が終了した後に、前記第1コアに前記第1制御プログラムを実行させるとともに、前記第2コアに前記第2制御プログラムを前記第1制御プログラムの実行と並列に実行させるための、前記プロシージャの実行順序の指定を含む、請求項6に記載のPLCのCPUユニット。マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するPLCのCPUユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのPLC用のシステムプログラムであって、前記記憶手段は、前記システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられ、前記マイクロプロセッサは、前記記憶手段に格納された前記システムプログラムおよび前記制御プログラムを実行し、前記通信回路は、前記制御プログラムの実行によって生成される出力データを送信および前記制御プログラムの実行に使用される入力データを受信し、前記システムプログラムは、前記制御プログラムの実行を制御するためのプロシージャと前記出力データの出力および前記入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含み、前記システムプログラムは、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されているときに、前記マイクロプロセッサに、前記スケジュール構築データに含まれているプロシージャの実行順序の指定に従って前記プロシージャのライブラリに収録されているプロシージャを実行させる、PLC用のシステムプログラム。前記スケジュール構築データは、前記プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、前記システムプログラムは、前記PLCの制御動作の実行準備処理として、前記スケジュール構築データに含まれている、前記スレッドを生成するための指定に従って、スレッドを生成する処理を含む、請求項16に記載のPLC用のシステムプログラム。前記スケジュール構築データは、前記スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む、請求項17に記載のPLC用のシステムプログラム。マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するPLCのCPUユニットにおいて、前記記憶手段に格納されて前記マイクロプロセッサによって実行されるためのPLC用のシステムプログラムを格納した記録媒体であって、前記記憶手段は、前記システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられ、前記マイクロプロセッサは、前記記憶手段に格納された前記システムプログラムおよび前記制御プログラムを実行し、前記通信回路は、前記制御プログラムの実行によって生成される出力データを送信および前記制御プログラムの実行に使用される入力データを受信し、前記システムプログラムは、前記制御プログラムの実行を制御するためのプロシージャと前記出力データの出力および前記入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含み、前記システムプログラムは、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含む前記スケジュール構築データが前記記憶手段に格納されているときに、前記マイクロプロセッサに、前記スケジュール構築データに含まれているプロシージャの実行順序の指定に従って前記プロシージャのライブラリに収録されているプロシージャを実行させる、PLC用のシステムプログラムを格納した記録媒体。前記スケジュール構築データは、前記プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、前記システムプログラムは、前記PLCの制御動作の実行準備処理として、前記スケジュール構築データに含まれている、前記スレッドを生成するための指定に従って、スレッドを生成する処理を含む、請求項19に記載のPLC用のシステムプログラムを格納した記録媒体。前記スケジュール構築データは、前記スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む、請求項20に記載のPLC用のシステムプログラムを格納した記録媒体。請求項5に記載のPLCのCPUユニットと、前記PLCの使用を支援するためのPLCサポート装置とを含むPLCシステムであって、前記PLCサポート装置は、記憶部と、演算部とを備え、前記記憶部は、PLCサポートプログラムおよび前記スケジュール構築データの格納に用いられ、前記PLCサポートプログラムは、前記スケジュール構築データを前記PLCのCPUユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、PLCシステム。制御対象を制御するPLCのCPUユニットの使用を支援するためのPLCサポート装置であって、前記PLCのCPUユニットは、制御プログラムの実行を制御するためのプロシージャと、前記制御プログラムの実行によって生成される出力データの出力および前記制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを備え、前記PLCサポート装置は、記憶部と、演算部とを備え、前記記憶部は、PLCサポートプログラムおよび前記スケジュール構築データの格納に用いられ、前記PLCサポートプログラムは、前記スケジュール構築データを前記PLCのCPUユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、PLCサポート装置。制御対象を制御するPLCのCPUユニットの使用を支援するためのPLCサポート装置において実行されるためのPLCサポートプログラムであって、前記PLCのCPUユニットは、制御プログラムの実行を制御するためのプロシージャと、前記制御プログラムの実行によって生成される出力データの出力および前記制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを備え、前記PLCサポート装置は、記憶部と、演算部とを備え、前記記憶部は、前記PLCサポートプログラムおよび前記スケジュール構築データの格納に用いられ、前記PLCサポートプログラムは、前記スケジュール構築データを前記PLCのCPUユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、PLCサポートプログラム。制御対象を制御するPLCのCPUユニットの使用を支援するためのPLCサポート装置において実行されるためのPLCサポートプログラムを格納した記録媒体であって、前記PLCのCPUユニットは、制御プログラムの実行を制御するためのプロシージャと、前記制御プログラムの実行によって生成される出力データの出力および前記制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、前記プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを備え、前記PLCサポート装置は、記憶部と、演算部とを備え、前記記憶部は、前記PLCサポートプログラムおよび前記スケジュール構築データの格納に用いられ、前記PLCサポートプログラムは、前記スケジュール構築データを前記PLCのCPUユニットが取得可能であるようにして出力するための出力処理を、前記演算部に実行させる、PLCサポートプログラムを格納した記録媒体。近年、情報技術の分野においては、マイクロプロセッサや通信ネットワークの高速化が進展しつつある。そのため、PLCにおいてもそれらの技術を利用して、複数の制御プログラムの時分割実行や高速なPLCシステムバスおよび/またはフィールドネットワークの採用が可能となっている。したがって、入力データの入力、出力データの出力、制御プログラム、およびPLCのシステムプログラムの実行を含む制御動作のスケジュールについての自由度を高くするための、装置の処理速度の面での制約は少なくなっている。ここで、制御動作のスケジュールについての自由度には、どのタイミングで行う入力または出力をどの制御プログラムの実行と関連させるかということも含まれる。また、具体的な制御目的に応じて、最適な制御動作のスケジュールはさまざまであるから、PLC製品の制御動作のスケジュールについての自由度は高い方が好ましい。しかしながら、実際のPLC製品においては、制御動作のスケジュールはPLC製品のシステムプログラムによって決定されているのが実情であり、いくつかのスケジュールパターンの中からの選択や実行パラメータの調整は可能であるとしても、制御動作のスケジュールをユーザが自由に構築することまではなされていない。ここで、いくつかのスケジュールパターンの中からの選択とは、たとえば、制御プログラムの実行サイクルの中で、出力-入力-制御プログラム実行-その他システム処理の順に実行するか、入力-制御プログラム実行-出力-その他システム処理の順に実行するかの選択肢を提供するという程度のことである。また、実行パラメータの調整とは、複数の制御プログラムを時分割で実行する場合に、各制御プログラムに与える実行優先度を調整する程度のことである。制御動作のスケジュールのパターンを大きく変更したり、新しく追加するプログラムモジュールたとえば、温度制御用プログラムモジュール、画像処理用プログラムモジュールなどが担う処理を制御動作のスケジュールに組み込んだりしようとすれば、PLC製品のシステムプログラムの少なくとも一部を入れ替える必要がある。そうすると、PLC製品は別機種となってしまうので、PLC製品のメーカーおよびユーザにおける管理の負担が増大する。また、ユーザの制御目的に最適なスケジュールパターンが特殊なものである場合には、ユーザがそのようなスケジュールパターンを実装したPLC製品を入手することは現実には困難である。また、たとえPLC製品がユーザに提供される段階以降では制御動作のスケジュールパターンの変更ができないようにされている場合であっても、共通のシステムプログラムを用いながら多様なスケジュールパターンを実現できる構成は、多機種のPLC製品に共通に含まれるプラットフォームとして、PLC製品のメーカーにおける開発効率向上やコストダウンに寄与する。本発明は、システムプログラムを入れ替えることなく、または共通のシステムプログラムを用いながら、PLCの制御動作のスケジュールについての高い自由度を実現することを目的とする。本発明のある局面に従えば、制御対象を制御するPLCのCPUユニットを提供する。PLCのCPUユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。マイクロプロセッサは、記憶手段に格納された、システムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信するとともに制御プログラムの実行に使用される入力データを受信する。システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。好ましくは、スケジュール構築データは、プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含む。システムプログラムは、PLCの制御動作の実行準備処理として、スケジュール構築データに含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理を含む。さらに好ましくは、スケジュール構築データは、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む。あるいは好ましくは、スケジュール構築データは、1または複数のスレッドを含む、繰り返し実行の単位となるタスクを設定するための指定を含み、システムプログラムは、PLCの制御動作の実行準備処理として、スケジュール構築データに含まれているタスクを設定するための指定に従って、タスクを設定する処理を含む。好ましくは、PLCのCPUユニットは、さらに、スケジュール構築データを取得するスケジュール構築データ取得手段を含む。好ましくは、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返させるための、プロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されている。さらに好ましくは、PLCのCPUユニットは、さらに、制御サイクルの周期を設定する手段を含み、通信回路は、制御サイクルごとに、出力データの送信および入力データの受信を行い、スケジュール構築データは、マイクロプロセッサに、制御プログラムの実行が終了した制御サイクルの次の制御サイクルにおいて、通信回路による出力データの送信および入力データの受信の後に、制御プログラムの実行を開始させ、制御プログラムの実行が終了しなかった制御サイクルの次の制御サイクルにおいて、制御プログラムの未実行の部分を実行させるための、プロシージャの実行順序の指定を含む。あるいは好ましくは、システムプログラムは、PLCの制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段内に生成する処理と、制御プログラムから参照される入力データごとに、その制御プログラムが入力データの参照先とする入力同期バッファを記憶手段内に生成する処理とを含み、スケジュール構築データは、マイクロプロセッサに、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラムを実行開始する制御プログラム開始処理とを実行させるための、プロシージャの実行順序の指定を含む。さらに好ましくは、入力データの受信は、制御サイクルごとに実行され、スケジュール構築データは、マイクロプロセッサに、制御サイクルの整数倍の実行サイクルごとに制御プログラム開始処理を実行させ、制御プログラムの実行サイクルが開始した制御サイクルにおいて受信された入力データを対象として、入力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。あるいはさらに好ましくは、システムプログラムは、PLCの制御動作の実行準備処理として、さらに、送信されるべき出力データを格納する送信バッファを記憶手段内に生成する処理と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段内に生成する処理とを含み、スケジュール構築データは、さらに、マイクロプロセッサに、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。さらに好ましくは、スケジュール構築データは、マイクロプロセッサに、制御プログラム開始処理を制御サイクルの整数倍の実行サイクルごとに実行させ、制御プログラムの実行サイクルの最初の制御サイクルにおいてその前の実行サイクルにおける制御プログラムの実行により生成された出力データが送信バッファから送信されることになるタイミングで出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。あるいは好ましくは、記憶手段は、さらに、制御プログラムが使用する変数についての属性データの格納に用いられ、属性データは、変数が複数の制御プログラムから参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能であり、システムプログラムは、PLCの制御動作の実行準備処理として、グローバル変数を格納するグローバル変数領域を記憶手段内に生成する処理と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする変数同期バッファを記憶手段内に生成する処理とを含み、スケジュール構築データは、マイクロプロセッサに、オーナー側制御プログラムを実行開始するオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する変数同期バッファにコピーする変数コピー処理と、リファラ側制御プログラムを実行開始するリファラ側開始処理とを実行させるための、プロシージャの実行順序の指定を含む。あるいは好ましくは、制御プログラムは、モータの運動を制御するためのモーション指令値を算出するモーション演算プログラムと、ユーザにおける制御目的に応じて作成され、モーション演算プログラムに対してその実行に必要な指示を与える処理を含むユーザプログラムとを含み、スケジュール構築データは、PLCのCPUユニットに、通信回路による出力データの送信および入力データの受信、ユーザプログラムの実行、ならびにモーション演算プログラムの実行を、この順序で、繰り返し実行させるための、プロシージャの実行順序の指定を含む。あるいは好ましくは、通信回路は、制御サイクルの周期で出力データを送信しおよび入力データを受信し、制御プログラムは、第1制御プログラムおよび第2制御プログラムを含み、第1制御プログラムは、モータの運動を制御するための第1モーション指令値データを生成する第1モーション演算プログラムを含み、第2制御プログラムは、モータの運動を制御するための第2モーション指令値データを生成する第2モーション演算プログラムを含み、第1制御プログラムおよび第2制御プログラムの少なくとも一方は、ユーザにおける制御目的に応じて作成され第1モーション演算プログラムおよび第2モーション演算プログラムに対してその実行に必要な指示を与える命令を含むユーザプログラムを含み、スケジュール構築データは、マイクロプロセッサに、制御サイクルの周期と同じ周期の第1実行サイクルごとに第1制御プログラムを実行開始させ、制御サイクルの周期の2以上の整数倍の周期の第2実行サイクルごとに第2制御プログラムを実行開始させ、第2実行サイクルが開始する制御サイクルにおいて、第1制御プログラムの実行終了後に第2制御プログラムを実行開始させ、当該制御サイクルが終了するまでに第2制御プログラムが終了しなければ次の制御サイクルにおいて第1制御プログラムの実行終了後に第2制御プログラムの未実行の部分の実行を開始させるための、プロシージャの実行順序の指定を含む。あるいは好ましくは、マイクロプロセッサは、少なくとも第1コアおよび第2コアを含み、制御プログラムは、第1制御プログラムと第2制御プログラムとを含み、スケジュール構築データは、出力データの送信および入力データの受信が終了した後に、第1コアに第1制御プログラムを実行させるとともに、第2コアに第2制御プログラムを第1制御プログラムの実行と並列に実行させるための、プロシージャの実行順序の指定を含む。本発明の別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するPLCのCPUユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのPLC用のシステムプログラムを提供する。記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信および制御プログラムの実行に使用される入力データを受信する。システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。好ましくは、スケジュール構築データは、プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、システムプログラムは、PLCの制御動作の実行準備処理として、スケジュール構築データに含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理を含む。さらに好ましくは、スケジュール構築データは、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む。本発明のさらに別の局面に従えば、マイクロプロセッサと、記憶手段と、通信回路とを備え、制御対象を制御するPLCのCPUユニットにおいて、記憶手段に格納されてマイクロプロセッサによって実行されるためのPLC用のシステムプログラムを格納した記録媒体を提供する。記憶手段は、システムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信および制御プログラムの実行に使用される入力データを受信する。システムプログラムは、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリを含む。システムプログラムは、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データが記憶手段に格納されているときに、マイクロプロセッサに、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。好ましくは、スケジュール構築データは、プロシージャのライブラリに収録されているプロシージャを用いてスレッドを生成するための指定を含み、システムプログラムは、PLCの制御動作の実行準備処理として、スケジュール構築データに含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理を含む。さらに好ましくは、スケジュール構築データは、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定を含む。本発明のさらに別の局面に従えば、上述のPLCのCPUユニットと、PLCの使用を支援するためのPLCサポート装置とを含むPLCシステムを提供する。PLCサポート装置は、記憶部と、演算部とを含む。記憶部は、PLCサポートプログラムおよびスケジュール構築データの格納に用いられる。PLCサポートプログラムは、スケジュール構築データをPLCのCPUユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。本発明のさらに別の局面に従えば、制御対象を制御するPLCのCPUユニットの使用を支援するためのPLCサポート装置を提供する。PLCのCPUユニットは、制御プログラムの実行を制御するためのプロシージャと、制御プログラムの実行によって生成される出力データの出力および制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを含む。PLCサポート装置は、記憶部と、演算部とを含む。記憶部は、PLCサポートプログラムおよびスケジュール構築データの格納に用いられる。PLCサポートプログラムは、スケジュール構築データをPLCのCPUユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。本発明のさらに別の局面に従えば、制御対象を制御するPLCのCPUユニットの使用を支援するためのPLCサポート装置において実行されるためのPLCサポートプログラムを提供する。PLCのCPUユニットは、制御プログラムの実行を制御するためのプロシージャと、制御プログラムの実行によって生成される出力データの出力および制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを含む。PLCサポート装置は、記憶部と、演算部とを含む。記憶部は、PLCサポートプログラムおよびスケジュール構築データの格納に用いられる。PLCサポートプログラムは、スケジュール構築データをPLCのCPUユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。本発明のさらに別の局面に従えば、制御対象を制御するPLCのCPUユニットの使用を支援するためのPLCサポート装置において実行されるためのPLCサポートプログラムを格納した記録媒体を提供する。PLCのCPUユニットは、制御プログラムの実行を制御するためのプロシージャと、制御プログラムの実行によって生成される出力データの出力および制御プログラムの実行に使用される入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリと、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データを取得するスケジュール構築データ取得手段とを含む。PLCサポート装置は、記憶部と、演算部とを含む。記憶部は、PLCサポートプログラムおよびスケジュール構築データの格納に用いられる。PLCサポートプログラムは、スケジュール構築データをPLCのCPUユニットが取得可能であるようにして出力するための出力処理を、演算部に実行させる。本発明によれば、システムプログラムを入れ替えることなく、または共通のシステムプログラムを用いながら、PLCの制御動作のスケジュールについての高い自由度を実現することできる。本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。<A.システム構成>本実施の形態に係るPLCは、機械や設備などの制御対象を制御する。本実施の形態に係るPLCは、その構成要素としてCPUユニットを含む。CPUユニットは、マイクロプロセッサと、記憶手段と、通信回路とを含む。記憶手段は、プログラムの実行を制御するシステムプログラム、制御プログラム、およびスケジュール構築データの格納に用いられる。スケジュール構築データは、本実施の形態に係るPLCの制御動作を高い自由度でスケジュールするための設定値などを含む。このスケジュール構築データの詳細については後述する。マイクロプロセッサは、記憶手段に格納されたシステムプログラムおよび制御プログラムを実行する。通信回路は、制御プログラムの実行によって生成される出力データを送信するとともに制御プログラムの実行に使用される入力データを受信する。まず、図1を参照して、本実施の形態に係るPLC1のシステム構成について説明する。図1は、本発明の実施の形態に係るPLCシステムの概略構成を示す模式図である。図1を参照して、PLCシステムSYSは、PLC1と、PLC1とフィールドネットワーク2を介して接続されるサーボモータドライバ3およびリモートIOターミナル5と、フィールド機器である検出スイッチ6およびリレー7とを含む。また、PLC1には、接続ケーブル10などを介してPLCサポート装置8が接続される。PLC1は、主たる演算処理を実行するCPUユニット13と、1つ以上のIOユニット14と、特殊ユニット15とを含む。これらのユニットは、PLCシステムバス11を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット12によって適切な電圧の電源が供給される。なお、PLC1として構成される各ユニットは、PLCメーカーが提供するものであるので、PLCシステムバス11は、一般にPLCメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク2については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。CPUユニット13の詳細については、図2を参照して後述する。IOユニット14は、一般的な入出力処理に関するユニットであり、オン/オフといった2値化されたデータの入出力を司る。すなわち、IOユニット14は、検出スイッチ6などのセンサが何らかの対象物を検出している状態オンおよび何らの対象物も検出していない状態オフのいずれであるかという情報を収集する。また、IOユニット14は、リレー7やアクチュエータといった出力先に対して、活性化するための指令オンおよび不活性化するための指令オフのいずれかを出力する。特殊ユニット15は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、IOユニット14ではサポートしない機能を有する。フィールドネットワーク2は、CPUユニット13と遣り取りされる各種データを伝送する。フィールドネットワーク2としては、典型的には、各種の産業用イーサネット登録商標を用いることができる。産業用イーサネット登録商標としては、たとえば、EtherCAT登録商標、ProfinetIRT、MECHATROLINK登録商標-III、Powerlink、SERCOS登録商標-III、CIPMotionなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット登録商標以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、DeviceNet、CompoNet/IP登録商標などを用いてもよい。なお、図1には、PLCシステムバス11およびフィールドネットワーク2の両方を有するPLCシステムSYSを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク2ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク2を使用せずに、サーボモータドライバ3をPLCシステムバス11に直接接続してもよい。さらに、フィールドネットワーク2の通信ユニットをPLCシステムバス11に接続し、CPUユニット13から当該通信ユニット経由で、フィールドネットワーク2に接続された機器との間の通信を行うようにしてもよい。なお、PLC1は、CPUユニット13にIOユニット14の機能やサーボモータドライバ3の機能を持たせることにより、IOユニット14やサーボモータドライバ3などを介さずにCPUユニット13が直接制御対象を制御する構成でもよい。サーボモータドライバ3は、フィールドネットワーク2を介してCPUユニット13と接続されるとともに、CPUユニット13からの指令値に従ってサーボモータ4を駆動する。より具体的には、サーボモータドライバ3は、PLC1から一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ3は、サーボモータ4の軸に接続されている位置センサロータリーエンコーダやトルクセンサといった検出器から、位置、速度典型的には、今回位置と前回位置との差から算出される、トルクといったサーボモータ4の動作に係る実測値を取得する。そして、サーボモータドライバ3は、CPUユニット13からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行う。すなわち、サーボモータドライバ3は、実測値が目標値に近づくようにサーボモータ4を駆動するための電流を調整する。なお、サーボモータドライバ3は、サーボモータアンプと称されることもある。また、図1には、サーボモータ4とサーボモータドライバ3とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。図1に示すPLCシステムSYSのフィールドネットワーク2には、さらに、リモートIOターミナル5が接続されている。リモートIOターミナル5は、基本的には、IOユニット14と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートIOターミナル5は、フィールドネットワーク2でのデータ伝送に係る処理を行うための通信カプラ52と、1つ以上のIOユニット53とを含む。これらのユニットは、リモートIOターミナルバス51を介して、データを互いに遣り取りできるように構成される。PLCサポート装置8の詳細については後述する。<B.CPUユニットのハードウェア構成>次に、図2を参照して、CPUユニット13のハードウェア構成について説明する。図2は、本発明の実施の形態に係るCPUユニット13のハードウェア構成を示す模式図である。図2を参照して、CPUユニット13は、マイクロプロセッサ100と、チップセット102と、メインメモリ104と、不揮発性メモリ106と、システムタイマ108と、PLCシステムバスコントローラ120と、フィールドネットワークコントローラ140と、USBコネクタ110とを含む。チップセット102と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。マイクロプロセッサ100およびチップセット102は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ100は、チップセット102から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット102は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ100に必要な命令コードを生成する。さらに、チップセット102は、マイクロプロセッサ100での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。マイクロプロセッサ100は、以下に説明する実施の形態1~3においては、マルチコアであることを明示していない場合には、シングルコアであるとする。マルチコアとはコア数が2以上の場合を意味するコア数が2の場合も含む。CPUユニット13は、記憶手段として、メインメモリ104および不揮発性メモリ106を有する。メインメモリ104は、揮発性の記憶領域RAMであり、CPUユニット13への電源投入後にマイクロプロセッサ100で実行されるべき各種プログラムを保持する。また、メインメモリ104は、マイクロプロセッサ100による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ104としては、DRAMDynamicRandomAccessMemoryやSRAMStaticRandomAccessMemoryといったデバイスが用いられる。一方、不揮発性メモリ106は、リアルタイムOSOperatingSystem、PLC1のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ100がアクセスできるようにメインメモリ104にコピーされる。このような不揮発性メモリ106としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、DVD-RAMDigitalVersatileDiskRandomAccessMemoryのような光学記録媒体などを用いることもできる。システムタイマ108は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ100に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、OSOperatingSystemやBIOSBasicInputOutputSystemなどによって、任意の周期で割り込み信号を発生するように設定することもできる。このシステムタイマ108が発生する割り込み信号を利用して、後述するような制御サイクルごとの制御動作が実現される。CPUユニット13は、通信回路として、PLCシステムバスコントローラ120およびフィールドネットワークコントローラ140を有する。これらの通信回路は、出力データの送信および入力データの受信を行う。なお、CPUユニット13自体にIOユニット14やサーボモータドライバ3の機能を持たせる場合は、通信回路による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてCPUユニット13の内部で行われる送信および受信となる。PLCシステムバスコントローラ120は、PLCシステムバス11を介したデータの遣り取りを制御する。より具体的には、PLCシステムバスコントローラ120は、DMADynamicMemoryAccess制御回路122と、PLCシステムバス制御回路124と、バッファメモリ126とを含む。なお、PLCシステムバスコントローラ120は、PLCシステムバスコネクタ130を介してPLCシステムバス11と内部的に接続される。バッファメモリ126は、PLCシステムバス11を介して他のユニットへ出力されるデータ以下出力データとも称す。の送信バッファ、および、PLCシステムバス11を介して他のユニットから入力されるデータ以下入力データとも称す。の受信バッファとして機能する。なお、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ126に一次的に保持される。また、他のユニットから転送された入力データは、バッファメモリ126に一次的に保持された後、メインメモリ104に移される。DMA制御回路122は、メインメモリ104からバッファメモリ126への出力データの転送、および、バッファメモリ126からメインメモリ104への入力データの転送を行う。PLCシステムバス制御回路124は、PLCシステムバス11に接続される他のユニットとの間で、バッファメモリ126の出力データを送信する処理および入力データを受信してバッファメモリ126に格納する処理を行う。典型的には、PLCシステムバス制御回路124は、PLCシステムバス11における物理層およびデータリンク層の機能を提供する。フィールドネットワークコントローラ140は、フィールドネットワーク2を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラ140は、用いられるフィールドネットワーク2の規格に従い、出力データの送信および入力データの受信を制御する。たとえば、EtherCAT登録商標規格に従うフィールドネットワーク2が採用される場合には、通常のイーサネット登録商標通信を行うためのハードウェアを含む、フィールドネットワークコントローラ140が用いられる。EtherCAT登録商標規格では、通常のイーサネット登録商標規格に従う通信プロトコルを実現する一般的なイーサネット登録商標コントローラを利用できる。フィールドネットワーク2として採用される産業用イーサネット登録商標の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット登録商標コントローラが用いられる。また、産業用イーサネット登録商標以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。バッファメモリ146は、フィールドネットワーク2を介して他の装置などへ出力されるデータこのデータについても、以下出力データと称す。の送信バッファ、および、フィールドネットワーク2を介して他の装置などから入力されるデータこのデータについても、以下入力データとも称す。の受信バッファとして機能する。上述したように、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定の装置へ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ146に一次的に保持される。また、他の装置から転送された入力データは、バッファメモリ146に一次的に保持された後、メインメモリ104に移される。DMA制御回路142は、メインメモリ104からバッファメモリ146への出力データの転送、および、バッファメモリ146からメインメモリ104への入力データの転送を行う。フィールドネットワーク制御回路144は、フィールドネットワーク2に接続される他の装置との間で、バッファメモリ146の出力データを送信する処理および入力データを受信してバッファメモリ146に格納する処理を行う。典型的には、フィールドネットワーク制御回路144は、フィールドネットワーク2における物理層およびデータリンク層の機能を提供する。USBコネクタ110は、PLCサポート装置8とCPUユニット13とを接続するためのインターフェイスである。典型的には、PLCサポート装置8から転送される、CPUユニット13のマイクロプロセッサ100で実行可能なプログラムなどは、USBコネクタ110を介してPLC1に取込まれる。<C.CPUユニットのソフトウェア構成>次に、図3を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、CPUユニット13のマイクロプロセッサ100によって実行される。図3は、本発明の実施の形態に係るCPUユニット13で実行されるソフトウェア構成を示す模式図である。図3を参照して、CPUユニット13で実行されるソフトウェアとしては、リアルタイムOS200と、システムプログラム210と、ユーザプログラム236との3階層になっている。また、制御動作を開始する前には制御動作用のスレッドおよび独立プロシージャ222が生成され、制御動作時に実行される。制御動作用のスレッドおよび独立プロシージャ222の生成のために、スケジュール構築データ234が使用される。このスケジュール構築データ234の詳細については、後述する。リアルタイムOS200は、CPUユニット13のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ100がシステムプログラム210およびユーザプログラム236を実行するための基本的な実行環境を提供する。このリアルタイムOS200は、典型的には、PLCのメーカーあるいは専門のソフトウェア会社などによって提供される。システムプログラム210は、PLC1としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム210は、プロシージャライブラリ214と、スケジューラプログラム212と、シーケンス命令演算プログラム232と、モーション演算プログラム234とを含む。ユーザプログラム236は、ユーザにおける制御目的に応じて作成される。すなわち、PLCシステムSYSを用いて制御する対象のラインプロセスなどに応じて、任意に設計されるプログラムである。後述するように、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム236、シーケンス命令演算プログラム232、およびモーション演算プログラム234を、制御プログラム230と総称する場合もある。このように、CPUユニット13のマイクロプロセッサ100は、記憶手段に格納されたシステムプログラム210およびユーザプログラム236を実行する。以下、各プログラムについてより詳細に説明する。ユーザプログラム236は、上述したように、ユーザにおける制御目的たとえば、対象のラインやプロセスに応じて作成される。ユーザプログラム236は、典型的には、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式になっている。このユーザプログラムは、PLCサポート装置8などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラムは、PLCサポート装置8から接続ケーブル10を介してCPUユニット13へ転送され、不揮発性メモリ106などに格納される。プロシージャライブラリ214は、制御動作用のスレッドまたは独立プロシージャの構成要素コンポーネントとなる各種のプロシージャを収録したライブラリである。プロシージャとは、プログラム内で繰り返し出現する処理を行うために、一連の命令を一つの手順としてまとめたものをいう。実装例として、ライブラリに収録されている状態のプロシージャはオブジェクトクラスであり、制御動作用のスレッドまたは独立プロシージャの構成要素となっている状態のプロシージャはオブジェクトインスタンスである。スケジューラプログラム212は、スケジュール構築データ224に含まれる指定に従い、制御動作用のスレッドおよび独立プロシージャ222を生成する。スケジュール構築データ224は、PLCサポート装置8から入力される。スケジュール構築データ224は、CPUユニット13の製造時に不揮発性メモリ106に格納されてもよい。スケジュール構築データ224は、プロシージャライブラリ214に収録されているプロシージャの実行順序の指定を含む。制御動作用のスレッドおよび独立プロシージャ222のうち、制御動作用のスレッドは、制御プログラムの実行を制御するためのプロシージャと、出力データの出力および入力データの入力を制御するためのプロシージャとを構成要素として含む。制御動作用のスレッドおよび独立プロシージャ222のうち、独立プロシージャは、スレッドに属さずに実行されるプロシージャである。シーケンス命令演算プログラム232は、ユーザプログラムで使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。モーション演算プログラム234は、ユーザプログラムによる指示に従って実行され、サーボモータドライバ3やパルスモータドライバといったモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。リアルタイムOS200は、複数のプログラムを時間の経過に従い切り替えて実行するための環境を提供する。プロシージャライブラリ214、スケジューラプログラム212、スケジュール構築データ224、および制御プログラム230は、記憶手段であるメインメモリ104および不揮発性メモリ106に格納される。<D.メインメモリ構成>次に、図4を参照して、CPUユニット13のメインメモリ104に構成される記憶領域について説明する。図4は、本発明の実施の形態に係るCPUユニット13のメインメモリ104の領域構成を示す模式図である。図4を参照して、メインメモリ104には、各種のプログラム領域1041と、制御プログラムの作業領域1042と、PLCシステムバス送信バッファ1043と、PLCシステムバス受信バッファ1044と、フィールドネットワーク送信バッファ1045と、フィールドネットワーク受信バッファ1046とが形成される。制御プログラムの作業領域1042には、各制御プログラムのローカル変数領域のほか、グローバル変数領域1042aおよび変数同期バッファ領域1042bがシステムプログラム210によって生成される。制御プログラムの作業領域1042には、さらに、各出力データに対応する出力同期バッファが生成される出力同期バッファ領域1042c、および、各入力データに対応する入力同期バッファが生成される入力同期バッファ領域1042dが、システムプログラム210によって生成される。また、PLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045以下、両者を送信バッファと総称する、ならびに、PLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046以下、両者を受信バッファと総称するについても、システムプログラム210によって生成される。PLCシステムバスコントローラ120のDMA制御回路122は、PLCシステムバス送信バッファ1043に格納されている出力データをPLCシステムバスコントローラ120のバッファメモリ126へ転送するとともに、バッファメモリ126に格納されている入力データをPLCシステムバス受信バッファ1044へ転送する。この転送された入力データは、PLCシステムバス受信バッファ1044に格納される。フィールドネットワークコントローラ140のDMA制御回路142は、フィールドネットワーク送信バッファ1045に格納されている出力データをフィールドネットワークコントローラ140のバッファメモリ146へ転送するとともに、バッファメモリ146に格納されている入力データをフィールドネットワーク受信バッファ1046へ転送する。この転送された入力データは、フィールドネットワーク受信バッファ1046に格納される。制御プログラムの作業領域1042、PLCシステムバス送信バッファ1043、PLCシステムバス受信バッファ1044、フィールドネットワーク送信バッファ1045、および、フィールドネットワーク受信バッファ1046は、それぞれのアクセスを互いに独立に制御できるように構成されている。そのため、たとえば、以下に示す1~3といった複数の動作を並列実行することができる。1マイクロプロセッサ100が行う、ユーザプログラム実行に伴う制御プログラムの作業領域1042へのアクセス2PLCシステムバスコントローラ120のDMA制御回路122が行う、メインメモリ104上のPLCシステムバス送信バッファ1043および/またはPLCシステムバス受信バッファ1044とPLCシステムバスコントローラ120内のバッファメモリ126との間のデータ転送のための、メインメモリ104上のPLCシステムバス送信バッファ1043および/またはPLCシステムバス受信バッファ1044へのアクセス3フィールドネットワークコントローラ140のDMA制御回路142が行う、メインメモリ104上のフィールドネットワーク送信バッファ1045および/またはフィールドネットワーク受信バッファ1046とフィールドネットワークコントローラ140内のバッファメモリ146との間のデータ転送のための、メインメモリ104上のフィールドネットワーク送信バッファ1045および/またはフィールドネットワーク受信バッファ1046へのアクセス<E.サポート装置>次に、本実施の形態に係るPLCサポート装置8について説明する。PLCサポート装置8は、PLC1のCPUユニット13の使用を支援するためのものであり、具体的には、PLC1で実行されるプログラムの作成およびPLC1のメンテナンスなどの機能を提供する。図5は、本発明の実施の形態に係るCPUユニットに接続して用いられるPLCサポート装置8のハードウェア構成を示す模式図である。図5を参照して、PLCサポート装置8は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。図5を参照して、PLCサポート装置8は、OSを含む各種プログラムを実行するCPU81と、BIOSや各種データを格納するROMReadOnlyMemory82と、CPU81でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリRAM83と、CPU81で実行されるプログラムなどを不揮発的に格納するハードディスクHDD84とを含む。PLCサポート装置8は、さらに、ユーザからの操作を受け付けるキーボード85およびマウス86と、情報をユーザに提示するためのモニタ87とを含む。さらに、PLCサポート装置8は、PLC1CPUユニット13などと通信するための通信インターフェイスIF89を含む。後述するように、PLCサポート装置8で実行される各種プログラムは、CD-ROM9に格納されて流通する。このCD-ROM9に格納されたプログラムは、CD-ROMCompactDiskReadOnlyMemoryドライブ88によって読み取られ、ハードディスクHDD84などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。上述したように、PLCサポート装置8は、汎用的なコンピュータを用いて実現されるので、これ以上の詳細な説明は行わない。図6は、本発明の実施の形態に係るCPUユニットに接続して用いられるPLCサポート装置8のソフトウェア構成を示す模式図である。図6を参照して、PLCサポート装置8ではOS310が実行され、PLCサポートプログラム320に含まれる各種のプログラムを実行可能な環境が提供される。PLCサポートプログラム320は、エディタプログラム321と、コンパイラプログラム322と、デバッガプログラム323と、スケジュール構築データテンプレート324と、スケジュール構築データ作成プログラム325と、通信プログラム326とを含む。PLCサポートプログラム320に含まれるそれぞれのプログラムは、典型的には、CD-ROM9に格納された状態で流通して、PLCサポート装置8にインストールされる。エディタプログラム321は、ユーザプログラムを作成するための入力および編集といった機能を提供する。より具体的には、エディタプログラム321は、ユーザがキーボード85やマウス86を操作してユーザプログラムのソースプログラム330を作成する機能に加えて、作成したソースプログラム330の保存機能および編集機能を提供する。また、エディタプログラム321は、外部からの制御プログラムその中でも特に、ユーザプログラムのソースプログラムを入力し、またユーザの操作により既存の制御プログラムのソースプログラムを編集する。コンパイラプログラム322は、制御プログラムのソースプログラムをコンパイルして、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式のユーザプログラムを生成する機能を提供する。デバッガプログラム323は、制御プログラムのソースプログラムに対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。スケジュール構築データテンプレート324は、多くのユーザで使用されるであろういくつかのスケジュールパターンを実現するためのスケジュール構築データを集めたものである。ユーザが自ら作成したスケジュール構築データをテンプレートとして追加できるようにしてもよい。スケジュール構築データ作成プログラム325は、スケジュール構築データテンプレート324として登録されているいずれかのスケジュール構築データをそのまま使用することのユーザの決定を受け付けるか、そのような登録されているスケジュール構築データをユーザに一部変更させるか、新規にスケジュール構築データをユーザに入力させるかのいずれかの処理により、スケジュール構築データ234を作成する機能を提供する。ここでは、テンプレートとして登録されているスケジュール構築データをそのまま使用することもスケジュール構築データ234を作成する処理の概念に含むものとする。通信プログラム326は、PLC1のCPUユニット13へ制御プログラムのCPUユニット13用のオブジェクトプログラムユーザプログラム236およびスケジュール構築データ234を転送する機能を提供する。PLCサポート装置8は、スケジュール構築データ作成プログラム325を有さずに、スケジュール構築データを1種類だけ保持し、そのスケジュール構築データをCPUユニットに転送するだけでもよい。すなわち、PLCサポート装置8は、記憶部図5のハードディスクHDD84などと、演算部図5のCPU81とを含む。記憶部は、PLCサポートプログラム320およびスケジュール構築データ234の格納に用いられる。PLCサポートプログラム320は、スケジュール構築データをPLC1のCPUユニット13が取得可能であるようにして出力するための出力処理を演算部に実行させる。スケジュール構築データをPLC1が取得可能であるようにして出力することには、図1に示す接続ケーブル10を介して出力する場合のほか、図示しないネットワークを介して直接に出力、または、図示しないネットワークに接続しているサーバコンピュータを介して間接的に出力する場合を含み、さらに、PLC1が読み取り可能な可搬型の記録媒体に出力する場合を含む。PLC1のCPUユニット13がスケジュール構築データ234を取得するスケジュール構築データ取得手段には、これらのいずれかの経路によって出力されるスケジュール構築データ234を取得するための、接続ケーブル10を介する通信を行う通信回路、ネットワーク通信を行う通信回路、および記録媒体に対する読み取り回路を含む。なお、PLC1のCPUユニット13は、メーカーにおける製造段階で記憶手段にスケジュール構築データ234が格納され、メーカーからの出荷後はスケジュール構築データ234の変更ができない構成であってもよい。一般的には、PLC1に実装されるシステムプログラム210は、CPUユニット13の製造段階でCPUユニット13の不揮発性メモリ106へ格納される。ただし、CD-ROM9にシステムプログラム210を格納しておけば、ユーザは、CD-ROM9のシステムプログラム210をPLCサポート装置8にコピーし、通信プログラム326が提供する機能を利用してコピーしたシステムプログラム210をCPUユニット13へ転送することもできる。さらに、CD-ROM9に、PLC1のCPUユニット13で実行されるリアルタイムOS200を格納しておけば、リアルタイムOS200についてもユーザ操作によってPLC1へ再インストールできる。以下、スケジュール構築データ234を使用してPLC1の制御動作をスケジュールする典型例として、実施の形態1~3について説明する。<F.実施の形態1>以下に説明する実施の形態1では、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる。タスクは、1または複数のスレッドを含み、繰り返し実行の単位となる。f1:全体処理図7は、本発明の実施の形態1に係るCPUユニット13におけるシステムプログラム210の全体処理を示すフローチャートである。図7に示すように、まず、PLC1の制御動作の実行準備処理が実行されステップS1、続いて、PLC1の制御動作の実行制御処理が実行されるステップS2。制御動作の実行準備処理ステップS1には、グローバル変数領域1042aおよび変数同期バッファを生成する処理、受信バッファPLCシステムバス受信バッファ1044および/またはおよびフィールドネットワーク受信バッファ1046および入力同期バッファを生成する処理、送信バッファPLCシステムバス送信バッファ1043および/またはフィールドネットワーク送信バッファ1045および出力同期バッファを生成する処理、制御動作のためのスレッドおよび独立プロシージャ222を生成する処理、各タスクの実行サイクル数、実行回数、および実行時間の各記憶領域を生成する処理、ならびに、各タスクの終了フラグを生成する処理が含まれる。これらの各処理の実行順序は、適宜設計される。f2:タスクおよびスレッド上述したように、実施の形態1においては、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる処理例について説明する。ここで、タスクおよびスレッドの詳細について説明する。図8は、本発明の実施の形態1において用意されるタスクの設定項目と各設定項目の説明とを表形式で示す図である。図9は、本発明の実施の形態1において用意されているスレッドの設定項目と各設定項目の説明とを表形式で示す図である。本実施の形態に係るPLCサポートプログラム320では、各タスクについて、図8の設定項目の欄に記載されている内容を設定することができる。また、各スレッドについては、図9の設定項目の欄に記載されている内容を設定することができる。図8および図9において、スレッドまたはプロシージャについて使用している起動という用語は、対象となるスレッドまたはプロシージャをリアルタイムOS200の実行待ち行列queueに追加することを意味する。リアルタイムOS200は、実行待ち行列に登録されたスレッドまたはプロシージャの中で実行優先度の高いものから順にマイクロプロセッサ100に実行させる。実行待ち行列に登録されていて実行されるのを待っている状態のスレッドまたはプロシージャをReady状態にあるという。マイクロプロセッサ100によって実行されている状態のスレッドまたはプロシージャをRun状態にあるという。実行待ち行列に登録されていない状態のスレッドまたはプロシージャをSleep状態にあるという。図10は、本発明の実施の形態1において用意されているプロシージャの1つである、制御サイクル開始プロシージャについて、その機能、設定項目および設定項目の説明を示す図である。図11は、本発明の実施の形態1において用意されている、制御サイクル開始プロシージャ以外のプロシージャについて、各プロシージャの名称および機能を示す図である。図10および図11に示すプロシージャのうち、制御サイクル開始プロシージャ図10、タスク開始プロシージャ図11、およびタスク終了プロシージャ図11のインスタンスは、独立プロシージャとして生成される。以下、本実施の形態に係るスケジュール例1~10について、対応するスケジュール構築データの例などとともに説明する。f3:スケジュール例1:実行サイクル周期内に実行終了する場合本発明の実施の形態1のスケジュール例1では、制御Aタスクと制御Bタスクとを実行する。制御Aタスクは、入出力Aスレッドと制御Aスレッドとを含み、制御Bスレッドは制御Bスレッドを含むものとする。制御Aタスクの実行サイクルは、制御サイクル1回分に相当し、制御Bタスクの実行サイクルは、制御サイクル2回分に相当する。第kサイクルにおいて、制御Aタスクおよび制御Bタスクの1つの実行サイクルが開始される。図12は、本発明の実施の形態1のスケジュール例1に対応するスケジュール構築データ234を示す図である。図13は、本発明の実施の形態1のスケジュール例1の第kサイクルのシーケンス図である。図14は、本発明の実施の形態1のスケジュール例1の第k1サイクルのシーケンス図である。図12ではスケジュール構築データ234の内容を表形式で模式的に示しているが、実際に使用されるスケジュール構築データ234は、たとえばXMLExtensibleMarkupLanguageを用いて記述されるなど、マイクロプロセッサ100が処理できる形式で記述される。スケジュール例1におけるスケジュール構築データ234としては、図12の1に示すような制御サイクル開始プロシージャの設定内容、図12の2および5に示すようなタスクの設定内容、ならびに、図12の3、4および6に示すようなスレッドの設定内容を含む。図12の1に示されるとおり、実施の形態1のスケジュール例1においては、制御サイクル開始プロシージャについて、制御サイクル開始条件として制御サイクル開始割り込みが設定されている。したがって、図10で説明されているとおり、制御サイクル開始プロシージャは、制御サイクル開始割り込み図13では、第kサイクルを開始する制御サイクル開始割り込みがあると起動される。そして、優先度として1が設定されているので、制御サイクル開始プロシージャは、他のスレッドやプロシージャに優先して、起動されると直ちに実行される。また、制御サイクル開始プロシージャの機能は、各タスクの設定項目タスク開始処理で指定されたプロシージャを起動することである。具体的には、図12の2および5のそれぞれのタスク開始処理でタスク開始プロシージャが指定されているので、制御サイクル開始プロシージャは、制御Aタスクのタスク開始プロシージャおよび制御Bタスクのタスク開始プロシージャを起動し、自身の実行を終了する。制御サイクル開始プロシージャが実行終了すると、制御Aタスクのタスク開始プロシージャがRun状態となる。タスク開始プロシージャは、図11で説明されている機能を実行する。図12の2のスレッド指定で指定されているとおり、制御Aタスクには、入出力Aスレッドと制御Aスレッドとが含まれる。図12の3に示されるとおり、入出力Aスレッドの開始条件は制御Aタスクであるから、入出力Aスレッドは、タスク開始プロシージャの後続起動の対象となる。一方、制御Aスレッドの開始条件は制御Aタスクではないから、制御Aスレッドは、タスク開始プロシージャの後続起動の対象とはならない。タスク開始プロシージャは、入出力Aスレッドを起動して、自身の実行を終了する。制御Aタスクのタスク開始プロシージャが実行終了すると、制御Bタスクのタスク開始プロシージャがRun状態となる。タスク開始プロシージャは、図11で説明されている機能を実行した後、自身の実行を終了する。図12の5のスレッド指定で指定されるとおり、制御Bタスクには、制御Bスレッドが含まれる。図12の6を参照して、制御Bスレッドの開始条件は制御Bタスクではないから、制御Bスレッドは、タスク開始プロシージャの後続起動の対象とはならず、制御Bタスクのタスク開始プロシージャは何も行わない。制御Bタスクのタスク開始プロシージャが実行終了すると、入出力AスレッドがRun状態となる。図12の3のプロシージャ指定で列挙されているプロシージャが列挙されている順に実行される。入出力AスレッドがRun状態になると、最初に、同期出力コピープロシージャが実行される。同期出力コピープロシージャの機能は、図11で説明されているとおりであり、制御Aタスクおよび制御Bタスクとも、現在の実行サイクル数は1であるから、制御Aタスクおよび制御Bタスクの両方について、あらかじめ指定された出力データが出力同期バッファから送信バッファへコピーされる。同期出力コピープロシージャの機能の詳細については、図18を参照して後述する。次に、入出力指示プロシージャが実行される。すなわち、通信回路に入出力指示信号が与えられることにより、通信回路は、送信バッファに格納されている出力データを送信し、受信した入力データを受信バッファに格納し、通信終了通知信号をマイクロプロセッサ100に与える。たとえば、フィールドネットワーク2としてEtherCAT登録商標を用いる場合には、フィールドネットワークコントローラ140から送信されたフレームが、スレーブ機器とデータ交換をしながら、スレーブ機器を一巡して戻ってくる。フィールドネットワークコントローラ140は、戻ってきたフレームを自動的に受信する。したがって、入出力指示信号は、直接的には送信指示信号としての意味を持つが、間接的には受信をも指示することになる。入出力指示プロシージャの実行に続いて、通信終了通知待ちプロシージャが実行される。すなわち、通信終了通知待ちプロシージャは、通信終了通知があれば入出力Aスレッドが再起動されるように設定し、入出力AスレッドをSleep状態にする。入出力AスレッドがSleep状態の間に、制御タスクに属するスレッドおよびプロシージャよりも低い優先度が与えられて実行待ち行列に登録されている種々のシステム処理が実行される。通信終了通知があれば、同期入力コピープロシージャが実行される。同期入力コピープロシージャの機能は図11で説明されているとおりであり、制御Aタスクおよび制御Bタスクとも、現在の実行サイクルカウンタは1であるから、制御Aタスクおよび制御Bタスクの両方について、あらかじめ指定された入力データが受信バッファから入力同期バッファへコピーされる。同期入力コピープロシージャの機能の詳細については、図17を参照して後述する。出力コピーの対象となる出力データ、および、入力コピーの対象となる入力データについてのあらかじめの指定は、PLCサポート装置8から制御プログラム230の設定情報として与えられる。次に、後続起動プロシージャが実行される。図12の4に示すとおり、制御Aスレッドの開始条件に入出力Aスレッドが指定されているから、後続起動プロシージャは、制御Aスレッドを起動する。入出力Aスレッドが実行終了すると、制御AスレッドがRun状態となる。図12の4のプロシージャ指定で列挙されているプロシージャが列挙されている順に実行される。制御AスレッドがRun状態になると、最初に、データトレースプロシージャが実行される。図11で説明されているとおり、データトレースプロシージャは、あらかじめ指定された変数の値をログファイルに記録する。この変数についてのあらかじめの指定も、PLCサポート装置8から制御プログラム230の設定情報として与えられる。次に、変数参照開始プロシージャが実行される。すなわち、後述の制御プログラム指定に指定されている制御Aプログラムがリファラ側制御プログラムとして参照する変数について、変数同期バッファが書き換えられないようにするための処理が行われる。このような、変数参照開始プロシージャおよび変数配信プロシージャ制御Bスレッドによって実現される変数同期機能について、図19を参照して後述する。次に、制御プログラム実行プロシージャが実行される。図12の4に示すとおり、制御Aスレッドの制御プログラム指定に制御Aプログラムが指定されているから、制御Aプログラムが実行される。制御Aプログラムは、ユーザにおける制御目的に応じた作成されたシーケンスプログラムであってもよいし、そのようなシーケンスプログラムがモーション命令を含んでいる場合には、シーケンスプログラムおよびそれに続いて実行されるモーション演算プログラムであってもよい。制御Aプログラムの実行が終了すると、変数配信プロシージャが実行される。すなわち、制御Aプログラムがオーナー側制御プログラムとして更新し、制御Bプログラムがリファラ側制御プログラムとして参照するグローバル変数について、変数配信プロシージャが当該変数の内容を制御Bプログラムの変数同期バッファにコピーする。なお、オーナー側制御プログラムおよびリファラ側制御プログラムの詳細については、図19を参照して後述する。次に、後続起動プロシージャが実行される。図12の2に示すとおり、制御Aタスクのタスク終了条件に制御Aスレッドが指定されている。また、図12の6に示すとおり、制御Bスレッドの開始条件に制御Aスレッドが指定されており、かつ、現在の制御Bタスクのタスク終了フラグはオフである。したがって、後続起動プロシージャは、制御Aタスクのタスク終了プロシージャと制御Bスレッドとを起動する。制御Aスレッドが実行終了すると、制御Aタスクのタスク終了プロシージャがRun状態となる。タスク終了プロシージャは、図11で説明されている機能を実行する。制御Aタスクのタスク終了プロシージャが実行終了すると、制御BスレッドがRun状態となる。図12の6のプロシージャ指定で列挙されているプロシージャが列挙されている順に実行される。制御BスレッドがRun状態になると、最初に、変数参照開始プロシージャが実行される。すなわち、後述の制御プログラム指定に指定されている制御Bプログラムがリファラ側制御プログラムとして参照する変数について、変数同期バッファが書き換えられないようにするための処理が行われる。次に、制御プログラム実行プロシージャが実行される。図12の6に示すとおり、制御Bスレッドの制御プログラム指定に制御Bプログラムが指定されているから、制御Bプログラムが実行される。制御Bプログラムは、ユーザにおける制御目的に応じた作成されたシーケンスプログラムであってもよいし、そのようなシーケンスプログラムがモーション命令を含んでいる場合には、シーケンスプログラムおよびそれに続いて実行されるモーション演算プログラムであってもよい。図13では、制御Bプログラムの実行中に第k1サイクルを開始する制御サイクル開始割り込みが入った場合を示している。制御サイクル開始割り込みにより、制御プログラムBは実行中断される。図14に示すとおり、第k1サイクルにおいては、制御Aタスクの処理および制御Bタスクのタスク開始プロシージャが第kサイクルの場合と同様に実行される。入出力Aスレッドの通信終了通知待ち時間の間には、第kサイクルにおいて実行されたシステム処理よりも制御Bスレッドの方が優先度が高いので、制御プログラムBの実行が再開され、通信終了通知があると制御プログラムBは再び実行中断される。制御Aタスクのタスク終了プロシージャが実行終了すると、制御プログラムBの実行が再開される。制御Bプログラムの実行が終了すると、変数配信プロシージャが実行される。すなわち、制御Bプログラムがオーナー側制御プログラムとして更新し、制御Aプログラムがリファラ側制御プログラムとして参照するグローバル変数について、変数の内容が制御Aプログラムの変数同期バッファにコピーされる。次に、後続起動プロシージャが実行される。図12の5に示すとおり、制御Bタスクのタスク終了条件に制御Bスレッドが指定されているので、後続起動プロシージャは、制御Bタスクのタスク終了プロシージャを起動する。制御Bスレッドが実行終了すると、制御Bタスクのタスク終了プロシージャがRun状態となる。タスク終了プロシージャは、図11で説明されている機能を実行する。制御Bタスクのタスク終了プロシージャが実行終了すると、次の制御サイクル開始割り込みがあるまでの間、種々のシステム処理が実行される。以上説明したとおり、本発明の実施の形態1に係るPLC1のCPUユニット13のシステムプログラム210は、次の特徴を有している。すなわち、システムプログラム210は、制御プログラムの実行を制御するためのプロシージャと出力データの出力および入力データの入力を制御するためのプロシージャとが少なくとも収録されているプロシージャのライブラリプロシージャライブラリ214を含む。そして、システムプログラム210は、プロシージャのライブラリに収録されているプロシージャの実行順序の指定を含むスケジュール構築データ234が記憶手段メインメモリ104または不揮発性メモリ106に格納されているときに、マイクロプロセッサ100に、スケジュール構築データに含まれているプロシージャの実行順序の指定に従ってプロシージャのライブラリに収録されているプロシージャを実行させる。なお、この特徴は、後述の実施の形態2および3にも共通している。ここで、制御プログラム230の実行を制御するためのプロシージャの例は、変数参照開始プロシージャ、制御プログラム実行プロシージャ、および変数配信プロシージャである。出力データの出力および入力データの入力を制御するためのプロシージャの例は、同期出力コピープロシージャ、入出力指示プロシージャ、通信終了通知待ちプロシージャ、および、同期入力コピープロシージャである。上記特徴は、具体的には、実施の形態1においては、次のようにして実現される。すなわち、スケジュール構築データ234は、プロシージャのライブラリプロシージャライブラリ214に収録されているプロシージャを用いてスレッドを生成するための指定図12の3,4,6を含む。システムプログラム210は、PLCの制御動作の実行準備処理として、スケジュール構築データ234に含まれている、スレッドを生成するための指定に従って、スレッドを生成する処理図7のステップS1を含む。これにより、リアルタイムOS200の実行待ち行列と実行優先度のしくみとを利用して、PLC1の制御動作の実行制御を行うことができる。なお、この特徴は、後述の実施の形態2にも共通している。また、実施の形態1においては、スケジュール構築データ234は、スレッドについてのデータとして、スレッドの実行中に他のスレッドを起動するための指定図12などに示すスレッドの開始条件の指定を含む。これにより、優先度のしくみだけでは実現できないようなより高い自由度をもって、PLC1の制御動作の実行制御を行うことができる。なお、この特徴は、後述の実施の形態2にも共通している。また、実施の形態1においては、スケジュール構築データ234は、1または複数のスレッドを含む、繰り返し実行の単位となるタスクを設定するための指定を含む。システムプログラム210は、PLC1の制御動作の実行準備処理として、スケジュール構築データ234に含まれているタスクを設定するための指定に従って、タスクを設定する処理典型的には、図7のステップS1における独立プロシージャを生成する処理を含む。これにより、繰り返し実行の単位がよりわかりやすくなる。また、実行サイクルの周期を個々のスレッドに設定するのではなくタスクに設定するようにすれば、実行サイクルの設定がより簡単になる。また、繰り返し実行の単位タスクについて、実行回数を計数したり、実行時間を計測したりすることも行いやすくなる。また、CPUユニット13は、出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返させるための、プロシージャの実行順序の指定を含むスケジュール構築データ234が記憶手段メインメモリ104または不揮発性メモリ106に格納されている場合に、制御動作の実行が可能である。f4:スケジュール例1:実行サイクル周期内に実行終了しない場合次に、タスクがそのタスクに設定された実行サイクル周期内に実行終了しなかった場合、すなわち実行サイクル超過時における動作について説明する。図15および図16は、本発明の実施の形態1のスケジュール例1において、制御Aスレッドの実行が第kサイクル内に終了しない場合の動作を示すシーケンス図である。上述の図12の2,5に示すとおり、制御Aタスクおよび制御Bタスクのサイクル超過許容回数にそれぞれ1が指定されているので、制御Aタスクおよび制御Bタスクは、制御サイクル1回分だけ実行サイクルを延長することが許されている。図15に示すとおり、制御Aプログラムは第k1サイクルを開始する制御サイクル開始割り込みが発生するにいたるまでに実行終了しなかったので、リアルタイムOS200によって実行中断される。図16に示すとおり、第k1サイクルにおいて、制御サイクル開始プロシージャは、第kサイクルと同様に実行される。第k1サイクルの開始時においては、第kサイクルで実行開始された制御Aタスクの実行が終了していないが、図11に記載のタスク開始プロシージャのカウントアップ後に実行サイクル数が実行サイクル周期nを超えており、かつ、タスク終了フラグがオフである条件に該当するので、制御サイクル開始プロシージャは入出力Aスレッドを起動する。このように、入出力Aスレッドは、サイクル超過のエラー処理が実行される場合および前制御サイクルの入出力Aスレッドが終了していない場合を除き、すべての制御サイクルにおいて実行される。第k1サイクルにおける入出力Aスレッドの通信終了通知待ち時間の間には、制御Aプログラムが実行中断された箇所から実行される。さらに、入出力Aスレッドの実行終了後に制御Aプログラムが実行再開される。入出力Aスレッドの後続起動プロシージャは、本来であれば制御Aスレッドを起動するのであるが、制御Aスレッドはすでに起動されているので、制御Aスレッドを重ねて起動することはできない。第k1サイクルにおいて、制御Aタスクのタスク終了プロシージャが実行終了すると、制御BスレッドがRun状態となる。制御Bタスクの実行サイクルは第kサイクルから開始しているのであるが、第kサイクルにおいては制御Bスレッドを実行する時間がなかったので、制御Bスレッドは第k1サイクルから実行開始される。制御Bタスクの実行サイクルは、本来は第k1サイクルで終了するのであるが、第k1サイクル内で制御Bスレッドが実行終了しないので、制御Bタスクにも実行サイクル超過が発生する。図11で説明されているとおり、実行サイクル周期にサイクル超過許容回数を加えた制御サイクル回数の内にタスクの実行が終了しなければ、実行サイクル超過のエラー処理が実行される。たとえば、制御動作を中止し、実行サイクル超過の発生が図示しないネットワークを介して上位コンピュータに報知される。実施の形態1に係るPLC1のCPUユニット13においては、制御サイクルの周期を設定する手段が設けられる。制御サイクルの周期を設定する手段としては、制御サイクルの周期を指定する情報を取得するために用いられるPLCサポート装置8との通信手段、システムプログラム210に含まれている制御サイクルの周期を設定するプログラム、および、制御サイクル開始割り込み信号の周期を任意に設定可能に構成されているシステムタイマの構成といった、制御サイクルの周期を設定するために用いられる要素が該当する。制御サイクルの周期を指定する情報をPLCサポート装置8から取得する代わりに、制御サイクルの周期を指定するための入力を受け付けるための操作スイッチ等の入力デバイスをCPUユニット13自身に設けてもよい。実施の形態1に係るPLC1のCPUユニット13における通信回路PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140は、制御サイクルごとに、出力データの送信および入力データの受信を行う。より具体的には、通信回路は、入出力指示プロシージャの実行によって発生する入出力指示信号を受けて、送信および受信を行う。それに代えて、通信回路が、システムタイマが発生する一定周期の信号によってトリガされることにより、制御サイクルごとの送信および受信を行うようにしてもよい。また、通信回路自身にタイマ回路を設けて、そのタイマ回路が発生する一定周期の信号に従って制御サイクルごとの送信および受信を行うようにしてもよい。以上説明したとおり、実施の形態1に係るPLC1のCPUユニット13は、制御サイクルの周期を設定する手段を有する。通信回路は、制御サイクルごとに、出力データの送信および入力データの受信を行う。そして、スケジュール構築データ234は、制御サイクルの周期に等しい実行サイクルの周期で実行される制御プログラム制御Aプログラムについて、マイクロプロセッサ100に、制御プログラムの実行が終了した制御サイクルの次の制御サイクルにおいて、通信回路による出力データの送信および入力データの受信の後に、制御プログラムの実行を開始させ、制御プログラムの実行が終了しなかった制御サイクルの次の制御サイクルにおいて、制御プログラムの未実行の部分を実行させるための、プロシージャの実行順序の指定を含む。このようなCPUユニット13によれば、PLC1のユーザは、制御プログラムの実行時間が散発的に長くなる状況において、PLC1のCPUユニット13が制御データの出力および入力のために制御サイクルと同期して行う通信の周期を、制御プログラムの最大実行時間よりも短い一定時間に設定することができる。このような状況の一例は、制御プログラム230が、実行されるごとにモータドライバに対して出力される指令値を算出するモーション演算プログラムを含む場合である。モーション演算プログラムは、ユーザにおける制御目的に応じて作成されたユーザプログラム236シーケンスプログラムにより起動された初回の実行において、指令値の算出を開始するために必要な初期処理を実行することにより後続の実行に要する時間よりも長い実行時間を必要とすることがある。そのような状況でも、CPUユニット13が制御データの出力および入力のために制御サイクルと同期して行う通信の周期を、制御プログラム230の最大実行時間よりも短い一定時間に設定することができる。f5:同期入力コピープロシージャ次に、同期入力コピープロシージャの機能の詳細について説明する。図17は、本発明の実施の形態1において用意される同期入力コピープロシージャの動作を説明するためのシーケンス図である。図17に示すスケジュール例では、その実行サイクルが1制御サイクルである入出力Cスレッド、その実行サイクルが2制御サイクルである制御Cスレッド、および、その実行サイクルが4制御サイクルである制御Dスレッドの合計3つのスレッドが実行される場合を示す。入出力Cスレッドの構成は、図13および14に示される入出力Aスレッドと同様であるとする。制御Cスレッドおよび制御Dスレッドの構成は、それぞれ、図13および14に示される制御Aスレッドおよび制御Bスレッドと同様であるが、実行サイクルの周期が制御Aスレッドおよび制御Bスレッドとは異なっているものとする。また、制御Cスレッドでは制御Cプログラムが実行され、制御Dスレッドでは制御Dプログラムが実行されるものとする。図17の各スレッドは、それぞれ別々のタスクに属しているものとする。図17の受信バッファは、図4のPLCシステムバス受信バッファ1044およびフィールドネットワーク受信バッファ1046を表す。図17の入力同期バッファCは、制御Cスレッドにおいて実行される制御Cプログラムから参照される入力データごとに設けられる。同様に、図17の入力同期バッファDは、制御Dスレッドにおいて実行される制御Dプログラムから参照される入力データごとに設けられる。入力同期バッファCおよび入力同期バッファDは、図4の入力同期バッファ領域1042dに設けられる。なお、制御プログラムが使用する変数領域をそのまま入力同期バッファとして利用してもよい。図17を参照して、入出力Cスレッドが実行されるたびに、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140が受信した新たな入力データが受信バッファに上書き格納される。同期入力コピープロシージャは、受信バッファに格納された入力データを、その入力データを使用する制御プログラムの入力同期バッファ入力同期バッファCおよび入力同期バッファDへコピーする。その際、制御プログラムが使用するのに適した形式に入力データが再配置される。図11で説明されているとおり、同期入力コピープロシージャは、タスクの実行サイクル数が1である場合に限り、すなわち、現在の制御サイクルがタスクの実行サイクルのうち最初の制御サイクルである場合に限り、そのタスクについてあらかじめ指定された入力データを受信バッファから入力同期バッファにコピーする機能を有する。したがって、図17に示すとおり、制御サイクル1~4の範囲について、受信バッファから入力同期バッファCへのコピーは制御サイクル1および3においてのみ行われ、受信バッファから入力同期バッファDへのコピーは制御サイクル1においてのみ行われる。これは、制御Cスレッドの実行サイクルが2制御サイクルに設定され、制御Dスレッドの実行サイクルが4制御サイクルに設定されているためである。このようにすると、入力同期バッファに格納された入力データは、その入力データを参照する制御プログラムが実行されている期間中、新たな入力データによって上書きされることがないので、制御プログラムは入力データを何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。さらに、入力コピーを制御スレッド制御プログラムの実行サイクル中の最初の制御サイクルのみで行うので、制御プログラムが使用する入力データの更新周期を一定にすることができる。図17では、制御プログラムごとおよび入力データごとに入力同期バッファを1つ設けたが、制御プログラムごとおよび入力データごとに入力同期バッファを2つまたは3つ設け、各入力同期バッファの役割状態を入れ替えながら運用するようにプロシージャを設計してもよい。たとえば、1つのバッファは制御プログラムから参照される状態参照状態であり、もう1つのバッファは新たな入力データを書込可能な状態書込状態であるように設計する。そして、制御プログラムを実行開始する前に、書込可能なバッファに新たな入力データが格納されていれば、2つのバッファの役割を入れ替える。そうすれば、入力コピーができない期間がなくなるので、入力データの消失を防ぐことができる。ただし、図17のスケジュール例では、各スレッドの実行サイクルの周期が整数倍の関係にあるので、制御プログラムが使用すべき入力データの消失はもともと生じない。入力同期バッファの参照状態と書込状態とを直接入れ替える代わりに、3つのバッファを用いて、新たな入力データを格納したバッファが書込状態から第3の状態待機状態を経て参照状態に遷移するようにしてもよい。なお、図11で説明されているとおり、あらかじめ指定された入力データを受信バッファから入力同期バッファにコピーする機能を持ち、各タスクの実行サイクル数についての判断をしないプロシージャ自体では他のタスクの実行サイクルに同期する機能を持たない入力コピープロシージャも用意されている。このような入力コピープロシージャの使用例は、後述のスケジュール例3において説明する。受信バッファおよび入力同期バッファを用いるCPUユニット13、または、入力コピープロシージャまたは同期入力コピープロシージャの入力コピー処理を用いるCPUユニット13の特徴については、次のようにまとめることができる。システムプログラム210は、PLC1の制御動作の実行準備処理として、受信された入力データを格納する受信バッファを記憶手段メインメモリ104など内に生成する処理図7のステップS1と、制御プログラム230から参照される入力データごとに、その制御プログラム230が入力データの参照先とする入力同期バッファを記憶手段メインメモリ104など内に生成する処理図7のステップS1とを含む。スケジュール構築データ234は、マイクロプロセッサ100に、受信された入力データを受信バッファからその入力データに対応する入力同期バッファにコピーする入力コピー処理と、制御プログラム230を実行開始する制御プログラム開始処理とを実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、入力同期バッファに格納された入力データは、その入力データを参照する制御プログラムが実行されている期間中、新たな入力データによって上書きされることがないので、制御プログラム230は入力データを何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。さらに、同期入力コピープロシージャの同期入力コピー処理を用いるCPUユニット13の特徴については、次のようにまとめることができる。入力データの受信は、制御サイクルごとに実行される。スケジュール構築データ234は、マイクロプロセッサ100に、制御サイクルの整数倍の実行サイクルごとに制御プログラム開始処理を実行させ、制御プログラムの実行サイクルが開始した制御サイクルにおいて受信された入力データを対象として、入力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、制御プログラム230が使用する入力データの更新周期を一定にすることができる。f6:同期出力コピープロシージャ次に、同期出力コピープロシージャの機能の詳細について説明する。図18は、本発明の実施の形態1において用意される同期出力コピープロシージャの動作を説明するためのシーケンス図である。図18に示すスケジュール例では、入出力Cスレッド、制御Cスレッド、および制御Dスレッドの合計3つのスレッドが実行される場合を示す。これらのスレッドのスケジュール例は、図17のスケジュール例と同じである。図18の送信バッファは、図4のPLCシステムバス送信バッファ1043およびフィールドネットワーク送信バッファ1045を表す。図18の出力同期バッファCは、制御Cスレッドにおいて実行される制御Cプログラムの実行によって生成される出力データごとに設けられる。同様に、出力同期バッファDは、制御Dスレッドにおいて実行される制御Dプログラムの実行によって生成される出力データごとに設けられる。出力同期バッファCおよび出力同期バッファDは、図4の出力同期バッファ領域1042cに設けられる。なお、制御プログラムが使用する変数領域をそのまま出力同期バッファとして利用してもよい。図18を参照して、入出力Cスレッドに含まれる入出力指示プロシージャが実行されるたびに、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140は、送信バッファに格納されている出力データを送信する。同期出力コピープロシージャは、入出力指示プロシージャの前に実行され、出力同期バッファ出力同期バッファCおよび出力同期バッファDに格納されている出力データを送信バッファへコピーする。その際、PLCシステムバス送信バッファ1043においては、送信先のユニットごとにまとめて配置する形式になるように、また、フィールドネットワーク送信バッファ1045においては、シリアルフレームとして送信できる形式に、出力データが再配置される。図11で説明されているとおり、同期出力コピープロシージャは、タスクの実行サイクル数が1である場合に限り、すなわち、現在の制御サイクルがタスクの実行サイクルのうち最初の制御サイクルである場合に限り、そのタスクについてあらかじめ指定された出力データを出力同期バッファから送信バッファにコピーする機能を有する。したがって、図18に示すとおり、制御サイクル1~4の範囲について、出力同期バッファCから送信バッファへのコピーは制御サイクル1および3においてのみ行われ、出力同期バッファDから送信バッファへのコピーは制御サイクル1においてのみ行われる。これは、制御Cスレッドの実行サイクルが2制御サイクルに設定され、制御Dスレッドの実行サイクルが4制御サイクルに設定されているためである。このようにすると、送信バッファに格納された出力データは、各制御プログラムの実行サイクル中の最初の制御サイクルにおける送信の直前に出力同期バッファからコピーされる。この出力データは直前の実行サイクルにおいて生成されたものであり、出力データが送信バッファへコピーされた時点では、直前の実行サイクルにおける制御プログラムの実行はすでに終了している。したがって、制御プログラムの実行中における、まだ更新される可能性のある出力データが送信されることがない。さらに、出力コピーを制御スレッド制御プログラムの実行サイクル中の最初の制御サイクルのみで行うので、送信される出力データの更新周期を一定にすることができる。なお、図11で説明されているとおり、あらかじめ指定された出力データを出力同期バッファから送信バッファにコピーする機能を持ち、各タスクの実行サイクル数についての判断をしないプロシージャ自体では他のタスクの実行サイクルに同期する機能を持たない出力コピープロシージャも用意されている。このような出力コピープロシージャの使用例は、後述のスケジュール例3において説明する。出力同期バッファおよび送信バッファを用いるCPUユニット13、または、出力コピープロシージャまたは同期出力コピープロシージャの出力コピー処理を用いるCPUユニット13の特徴については、次のようにまとめることができる。システムプログラム210は、PLC1の制御動作の実行準備処理として、送信されるべき出力データを格納する送信バッファを記憶手段メインメモリ104など内に生成する処理図7のステップS1と、送信バッファにコピーされる出力データが格納される出力同期バッファを出力データごとに記憶手段メインメモリ104など内に生成する処理図7のステップS1とを含む。スケジュール構築データ234は、マイクロプロセッサ100に、出力データを出力同期バッファから送信バッファにコピーする出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、制御プログラムの実行中における、まだ上書き更新される可能性のある出力データが送信されることがない。さらに、同期出力コピープロシージャの同期出力コピー処理を用いるCPUユニット13の特徴については、次のようにまとめることができる。スケジュール構築データ234は、マイクロプロセッサ100に、制御プログラム開始処理を制御サイクルの整数倍の実行サイクルごとに実行させ、制御プログラム230の実行サイクルの最初の制御サイクルにおいてその前の実行サイクルにおける制御プログラム230の実行により生成された出力データが送信バッファから送信されることになるタイミングで出力コピー処理を実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、送信される出力データの更新周期を一定にすることができる。f7:変数配信プロシージャおよび変数参照開始プロシージャ次に、変数配信プロシージャおよび変数参照開始プロシージャの機能変数同期機能の詳細について説明する。図19は、本発明の実施の形態1において用意される変数配信プロシージャおよび変数参照開始プロシージャの動作を説明するためのシーケンス図である。図19に示すスケジュール例は、上述の図13および14に示すスケジュール例1と同様であるとし、変数同期機能に関連する、制御Aスレッドおよび制御Bスレッドの部分のみが示されている。図19のグローバル変数領域Aは、制御Aスレッドの制御プログラムAが使用する変数であって、他のスレッドの制御プログラム具体的には、制御Bスレッドの制御Bプログラムからも参照される変数を格納するメインメモリの領域である。グローバル変数領域Aは、図4のグローバル変数領域1042aに設けられる。なお、制御プログラム230が使用する変数領域をそのままグローバル変数領域として利用してもよい。グローバル変数領域Aに対して書き換えが許されている制御プログラム図19の例では、制御プログラムAをオーナー側制御プログラムと称し、参照のみが許されている制御プログラム図19の例では、制御プログラムBをリファラ側制御プログラムと称す。1つのグローバル変数について、オーナー側制御プログラムは1つであるが、リファラ側制御プログラムは複数あってもよい。制御Bスレッドの制御Bプログラムがリファラ側制御プログラムとして参照するグローバル変数ごとに、変数同期バッファBが図4の変数同期バッファ領域1042bに設けられる。なお、制御プログラム230が使用する変数領域をそのまま変数同期バッファとして利用してもよい。どの制御プログラム230がオーナー側制御プログラムまたはリファラ側制御プログラムであるかは、グローバル変数ごとに変数の属性として指定される。この指定を含む変数の属性データは、PLCサポート装置8においてユーザの入力操作に基づいて作成され、作成された変数の属性データは、PLCサポート装置8からCPUユニット13に送られ、CPUユニット13の不揮発性メモリ106に格納される。図示しないが、制御Bプログラムがオーナー側制御プログラムであり、制御Aプログラムがリファラ側制御プログラムであるグローバル変数も存在し、このグローバル変数については、制御Bプログラムに関連付けられるグローバル変数領域Bと、制御Aプログラムに関連付けられる変数同期バッファAとが設けられる。変数配信プロシージャは、それが属するスレッドにおいて実行される制御プログラム230がオーナー側であるグローバル変数の値を、グローバル変数領域から、そのグローバル変数のリファラ側である制御プログラムに関連付けられている変数同期バッファにコピーする。図19では、制御Aスレッドの変数配信プロシージャがグローバル変数領域Aの内容データを変数同期バッファBにコピーすることが示されている。変数参照開始プロシージャは、それが属するスレッドにおいて実行される制御プログラムが参照する変数同期バッファの内容が更新されないようにするための処理を行う。図19では、制御Bスレッドの変数参照開始プロシージャは、変数同期バッファBを書込禁止状態にする。したがって、制御サイクル1においては、制御Aスレッドの変数配信プロシージャは変数同期バッファBへのコピーを行うことができるが、制御Bスレッドの変数参照開始プロシージャが実行された後である制御サイクル2においては、制御Aスレッドの変数配信プロシージャは変数同期バッファBへのコピーを行うことができない。この変数同期バッファの書込禁止状態を解除する機能は、タスク終了プロシージャに持たせてもよいし、書込禁止状態を解除する機能を持つ変数参照終了プロシージャを用意してもよい。このようにすると、制御Bプログラムが実行開始してから実行終了するまでの間に制御プログラムAによってグローバル変数領域Aが書き換えられても、制御プログラムBが参照する変数同期バッファBの内容は書き換えられないので、制御プログラムBは当該グローバル変数を何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。図19では、制御プログラムごとおよびその制御プログラムがリファラ側として参照するグローバル変数ごとに変数同期バッファを1つ設けたが、制御プログラムごとおよびその制御プログラムがリファラ側として参照するグローバル変数ごとに変数同期バッファを2つまたは3つ設け、各変数同期バッファの役割状態を入れ替えながら運用するようにプロシージャを設計してもよい。たとえば、1つのバッファはリファラ側制御プログラムから参照される状態参照状態であり、もう1つのバッファは新たなデータを書込可能な状態書込状態であるようにする。そして、リファラ側制御プログラムを実行開始する前に、書込可能なバッファに新たな入力データが格納されていれば、2つのバッファの役割を入れ替える。そうすれば、変数配信ができない期間がなくなるので、オーナー側制御プログラムが生成した最新のグローバル変数の値の配信漏れを防ぐことができる。図19の場合には、制御サイクル2および4で制御Aプログラムが生成したグローバル変数の値は制御Bプログラムの各実行開始時点において最新ではないから、配信されなくても問題ないが、マルチコアのマイクロプロセッサを用いて、制御Aプログラムと制御Bプログラムとを別々のコアで並列実行するような場合には、変数同期バッファが1つでは配信漏れが生じる可能性がある。このような場合には、上述のとおり2つで1組の変数同期バッファの参照状態と書込状態とを入れ替えながら運用することにより、配信漏れを防ぐことができる。変数同期バッファの参照状態と書込状態とを直接入れ替える代わりに、3つのバッファを用いて、新たに配信されたグローバル変数の値を格納したバッファが書込状態から第3の状態待機状態を経て参照状態に遷移するようにしてもよい。グローバル変数領域および変数同期バッファを用いるCPUユニット13、または、変数配信プロシージャの変数配信処理を用いるCPUユニット13の特徴については、次のようにまとめることができる。記憶手段不揮発性メモリ106などは、制御プログラム230が使用する変数についての属性データの格納に用いられる。属性データは、変数が複数の制御プログラム230から参照されるグローバル変数である場合に、その変数の書き換えができる1つのオーナー側制御プログラムの指定と、その変数の参照のみができる1つまたは複数のリファラ側制御プログラムの指定とを含むことが可能である。システムプログラム210は、PLC1の制御動作の実行準備処理として、グローバル変数を格納するグローバル変数領域1042aを記憶手段メインメモリ104など内に生成する処理図7のステップS1と、各リファラ側制御プログラムについて、そのリファラ側制御プログラムから参照されるグローバル変数ごとに、そのリファラ側制御プログラムがグローバル変数を参照するときにグローバル変数領域に代えて参照先とする変数同期バッファを記憶手段メインメモリ104など内に生成する処理図7のステップS1とを含む。スケジュール構築データ234は、マイクロプロセッサ100に、オーナー側制御プログラムを実行開始するオーナー側開始処理と、オーナー側制御プログラムの実行が終了すると、そのオーナー側制御プログラムによって書き換えられるグローバル変数をグローバル変数領域からそのグローバル変数に対応する変数同期バッファにコピーするコピー処理と、リファラ側制御プログラムを実行開始するリファラ側開始処理とを実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、リファラ側制御プログラムが実行開始してから実行終了するまでの間にオーナー側制御プログラムによってグローバル変数領域が書き換えられても、リファラ側制御プログラムが参照する変数同期バッファの内容は書き換えられないので、リファラ側制御プログラムは当該グローバル変数を何回参照しても同じ値を得ることができ、一貫性のある演算をすることができる。f8:スケジュール例2次に、本発明の実施の形態1のスケジュール例2について説明する。図20は、本発明の実施の形態1のスケジュール例2に対応するスケジュール構築データ234を示す図である。図21は、本発明の実施の形態1のスケジュール例2の第kサイクルのシーケンス図である。図20のスケジュール構築データ234から図21のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図20のスケジュール構築データ234と図21のシーケンスとの関係についての詳細な説明は行わない。スケジュール例2は、上述のスケジュール例1と比較して、入出力スレッドスケジュール例1の入出力Aスレッドが出力スレッド出力Eスレッドと入力スレッド入力Eスレッドとに分けられている点が相違している。また、制御Fスレッドの開始条件に制御Fタスクが指定されていることにより、制御Fスレッドが制御Fタスクのタスク開始プロシージャによって起動されている点が、スケジュール例1の制御Bスレッドの場合と異なる。制御Fスレッドが入力データを使用しない場合には、このように入力Eスレッドの終了を待つことなく、入力Eスレッドの通信終了通知の待ち時間に制御Fスレッドの実行を開始させることにより、制御Fスレッドの終了を早めることができる。スケジュール例2において、出力Eスレッドと入力Eスレッドとが別々に設けられている点について説明する。フィールドネットワークとしてEtherCAT登録商標を用いた場合、たとえば、第kサイクルで送信されたフレームがノイズの影響などによりネットワークを伝送中に失われたためにCPUユニット13にネットワークを一巡したフレームが到達しなかったようなときを考える。スケジュール例1および2では、通信終了通知が発生しないことにより、制御Aタスクまたは制御Eタスクが第kサイクル内に終了しないというサイクル超過の現象が発生する。このような場合、スケジュール例1のように、入出力スレッドが1つのスレッドであれば、第k1サイクルにおいてさらに通信終了通知を待つことになるが、ネットワーク中でフレーム自体が失われていれば、結局サイクル超過許容回数を超えるエラーとなる。それに対し、スケジュール例2では、第k1サイクルは、図11でタスク開始プロシージャについて説明されるカウントアップ後に実行サイクル数が実行サイクル周期nを超えており、かつ、タスク終了フラグがオフであるという条件に該当する。そのため、第k1サイクルのタスク開始プロシージャは、後続起動の対象とされている出力Eスレッドを起動する。したがって、新たなフレームが送信され、このフレームがネットワークを一巡して戻ってくれば、図21に示される、入力Eスレッドの通信終了通知以降の処理を続行できる。このように、フレームがネットワークを一巡するタイプのフィールドネットワークを採用した場合には、本スケジュール例のように、出力スレッドと入力スレッドとを分けることにより、ネットワーク中でフレームが喪失した場合にも一定周期のネットワーク通信を継続することが容易になる。f9:スケジュール例3次に、本発明の実施の形態1のスケジュール例3について説明する。図22は、本発明の実施の形態1のスケジュール例3に対応するスケジュール構築データ234を示す図である。図23は、本発明の実施の形態1のスケジュール例3の第kサイクルのシーケンス図である。図24は、本発明の実施の形態1のスケジュール例3の第k1サイクルのシーケンス図である。図22のスケジュール構築データ234から図23および図24のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図22のスケジュール構築データ234と図23および図24のシーケンスとの関係についての詳細な説明は行わない。スケジュール例3は、上述のスケジュール例1と比較して、実行サイクルの周期が長く、それに含まれる制御スレッドの優先度が低いタスクである制御タスクHスケジュール例1の制御タスクBに相当にも入出力スレッド入出力Hスレッドが含まれている点が相違している。入出力Gスレッドは、たとえば、フィールドネットワークにより、制御Gスレッドの制御Aプログラムが必要とするすべての入出力と、制御Hスレッドの制御プログラムBが必要とする一部の入出力とを司る。入出力Hスレッドは、たとえば、PLCシステムバス11により、制御Hスレッドの制御Bプログラムが必要とする残りの入出力を司る。入出力Gスレッドでは、同期出力コピープロシージャおよび同期入力コピープロシージャが用いられているのに対し、入出力Hスレッドでは、同じタスクに属する制御Hスレッドのための入出力を行うだけであるので、各タスクの実行サイクル数についての判断をしないプロシージャ自体では他のタスクの実行サイクルに同期する機能を持たない出力コピープロシージャおよび入力コピープロシージャが用いられる。このように、実行サイクルの周期がより長いタスクにおいて入出力処理を行うようにしてもよい。また、入出力処理のみを行うタスクを設けてもよい。それぞれの入力データおよび出力データに応じて、制御プログラム230の実行上必要とされる周期で入出力処理を行うようにスケジュール構築することにより、無駄に高い頻度で多くのデータ量の通信をして通信時間を浪費することを避けることができる。f10:スケジュール例4次に、本発明の実施の形態1のスケジュール例4について説明する。図25は、本発明の実施の形態1のスケジュール例4に対応するスケジュール構築データ234を示す図である。図26は、本発明の実施の形態1のスケジュール例4の第kサイクルのシーケンス図である。図27は、本発明の実施の形態1のスケジュール例4の第k1サイクルのシーケンス図である。図25のスケジュール構築データ234から図26および図27のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図25のスケジュール構築データ234と図26および図27のシーケンスとの関係についての詳細な説明は行わない。スケジュール例4は、上述のスケジュール例1と比較して、制御Jスレッドにおいて実行される制御プログラムがモーション演算プログラムであってシーケンスプログラムを含まず、かつ、ユーザにおける制御目的に応じた作成されたシーケンスプログラムは制御Kスレッドのみで実行される点が相違している。ただし、シーケンスプログラムが制御Kスレッドのみで実行されることに伴って、データトレースプロシージャが制御Kスレッドで実行され、また、複数のシーケンスプログラム間でグローバル変数の同期を行う必要がないので変数配信プロシージャおよび変数参照開始プロシージャが使用されていない点についても、スケジュール例1と異なっている。制御Jスレッドにおいて実行される制御プログラムがモーション演算プログラムのみであるのは、図25の4の制御プログラム指定でモーション演算プログラムと指定されていることによる。図25の6の制御プログラム指定で、制御Kスレッドにおいて実行される制御プログラムがシーケンスKプログラムであることが指定され、モーションスレッド指定で、シーケンスKプログラムに含まれるモーション命令の実行は制御Jスレッドで行われることが指定されている。たとえば、座標X1からX2まで速度Vで移動せよといったモーション命令がシーケンスKプログラムにおいて実行されると、それに応じてその後の最初の制御サイクルにおける制御Jスレッドのモーション演算プログラムの実行により、モーション演算プログラムが今後サーボモータドライバに与える位置や速度の指令値を繰り返し算出していくための初期演算と第1回目の指令値算出とが実行される。その後は、モーション命令によって指示された動作を完了するまで、シーケンスKプログラムからの関与がなくても、制御Jスレッドのモーション演算プログラムの実行により、制御サイクルごとに指令値が算出される。指令値を算出し出力する周期は短い方がモータの運動の誤差を小さくできる。実行サイクルが1制御サイクルであるタスクに含まれる制御プログラムをモーション演算プログラムのみとすると、制御サイクルの周期を短く設定することが容易となる。この観点で、スケジュール例4は好ましい。f11:スケジュール例5次に、本発明の実施の形態1のスケジュール例5について説明する。図28は、本発明の実施の形態1のスケジュール例5に対応するスケジュール構築データ234を示す図である。図29は、本発明の実施の形態1のスケジュール例5の第kサイクルのシーケンス図である。図28のスケジュール構築データ234から図29のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図28のスケジュール構築データ234と図29のシーケンスとの関係についての詳細な説明は行わない。スケジュール例5は、上述のスケジュール例1と比較して、実行サイクル周期が1制御サイクル周期である制御Lタスクにおいて、入出力Lスレッド、制御L1スレッド、および制御L2スレッドが実行される点が相違している。制御L1スレッドにおいて実行される制御プログラムはシーケンスLプログラムであり、制御L1スレッドにおいてモーション演算プログラムは実行されない。一方、制御L2スレッドにおいて実行される制御プログラムは、シーケンスLプログラムに含まれるモーション命令に従って実行されるモーション演算プログラムのみである。スケジュール例5は、入出力処理、モーション命令を含むシーケンスプログラムユーザプログラム、モーション演算プログラムが、この順序で繰り返し実行される特徴がある。モーション演算プログラムは、モーション命令に従い繰り返し実行を開始すると、モーション命令で指示された動作を完了するまでシーケンスプログラムの関与なしに実行することが可能ではある。しかしながら、モーション命令で指示された動作を完了するまでに、新たな入力データを使用したシーケンスプログラムの演算結果によりモーション演算プログラムへの指示内容が変更される場合がある。このような場合に、上記特徴のスケジュールであれば、入力データの入力から、その入力データを用いたシーケンス演算を経て動作の変更指示がモーション演算プログラムに与えられ、変更指示を反映したモーション指令値が出力されるまでの時間を短くすることができる。また、モーション命令の実行条件を成立させる入力データの入力から、そのモーション命令に従う最初のモーション指令値が出力されるまでの時間も短くすることができる。スケジュール例1において、制御プログラムAが、シーケンスプログラムと、それに続いて実行されるモーション演算プログラムとを含む場合にも同様の効果が得られる。上記のような処理順序を採用するCPUユニット13の特徴については、次のようにまとめることができる。制御プログラム230は、モータの運動を制御するためのモーション指令値を算出するモーション演算プログラム234と、ユーザにおける制御目的に応じて作成され、モーション演算プログラム234に対してその実行に必要な指示を与える処理を含むユーザプログラム236とを含む。スケジュール構築データ234は、PLC1のCPUユニット13に、通信回路PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140による出力データの送信および入力データの受信、ユーザプログラム236の実行、ならびにモーション演算プログラム234の実行を、この順序で、繰り返し実行させるための、プロシージャの実行順序の指定を含む。ただし、出力データの送信と入力データの受信との間の実行順序は問わない。f12:スケジュール例6次に、本発明の実施の形態1のスケジュール例6について説明する。スケジュール例6においては、入出力Pスレッド、制御Pスレッドおよび制御Qスレッドの合計3つのスレッドが実行される場合を示す。図30は、本発明の実施の形態1のスケジュール例6に対応するシーケンス図である。図30を参照して、入出力Pスレッドおよび制御Pスレッドは、その実行サイクル周期が1制御サイクル周期であるタスクに含まれ、制御Qスレッドは、その実行サイクル周期が2制御サイクル周期であるタスクに含まれるものとする。そして、制御Pスレッドにおいて実行される第1制御プログラム230-1と、制御Qスレッドにおいて実行される第2制御プログラム230-2とは、どちらもモーション演算プログラム234を含むものとする。また、第1制御プログラム230-1および第2制御プログラム230-2の少なくとも一方は、モーション命令を含むユーザプログラム236を含むものとする。図30において、入出力Pスレッドから制御Pスレッドおよび制御Qスレッドへそれぞれ延びる矢印は、入力データの流れを示す。具体的には、同期入力コピープロシージャによる入力データのコピーに相当する。この入力データは、第1制御プログラム230-1および/または第2制御プログラム230-2がユーザプログラム236を含む場合には、当該ユーザプログラム236が使用する入力データを含む他、モーション演算プログラム234が使用する入力データを含むことがあるなお、モーション演算プログラム234は、入力データを使用せずに演算する場合もある。同様に、図30において、制御Pスレッドおよび制御Qスレッドから入出力Pスレッドへそれぞれ延びる矢印は、出力データの流れを示す。具体的には、同期出力コピープロシージャによる出力データのコピーに相当する。この出力データは、第1制御プログラム230-1および/または第2制御プログラム230-2がユーザプログラム236を含む場合には、当該ユーザプログラム236が生成した出力データを含む他、モーション演算プログラム234が活性状態にあるすなわち、実行されるごとに指令値を算出している期間中は、当該モーション演算プログラム234が生成したモーション指令値データを含む。図31は、本発明の実施の形態1のスケジュール例6において、制御プログラム内のプログラム構成と指示の流れとについて説明するための模式図である。図31には、第1制御プログラム230-1および第2制御プログラム230-2に含まれ得るユーザプログラム236のバリエーションの例を示す。すなわち、図31の1は、第1制御プログラム230-1のみがユーザプログラム236を有している例を示し、図31の2は、第2制御プログラム230-2のみがユーザプログラム236を有している例を示し、図31の3は、第1制御プログラム230-1および第2制御プログラム230-2の両方がユーザプログラム236を有している例を示す。図31において、ユーザプログラム236図31の3では、第1ユーザプログラム236-1または第2ユーザプログラム236-2からモーション演算プログラム234第1モーション演算プログラム234-1または第2モーション演算プログラム234-2へ延びる矢印は、モーション演算プログラム234の実行に必要な指示の流れを示す。この指示は、たとえば、ユーザプログラム236の中で、モーション制御の内容を定義するモーションファンクションブロックモーション命令に対する入力パラメータ入力定数または入力変数として記述される。そして、ユーザプログラム236の実行に伴いモーション制御開始の条件が成立してモーションファンクションブロックが実行されると、当該入力パラメータがモーション演算プログラム234に与えられる。制御プログラムがユーザプログラム236およびモーション演算プログラム234を含む場合の、それぞれのプログラムの実行順序は、どちらが先でもよい。ユーザプログラム236の実行を先にする場合は、ユーザプログラム236の実行結果をモーション演算プログラム234の実行に直ちに反映できる点で好ましい。一方、モーション演算プログラム234を先に実行する場合は、ユーザプログラム236の実行結果は次の実行サイクルにおいてモーション演算プログラム234の実行に反映される。図31の1を参照して、第1制御プログラム230-1にのみユーザプログラム236が含まれる形態について説明する。図31の1に示す例は、第1モーション演算プログラム234-1および第2モーション演算プログラム234-2の両方に指示を与えるユーザプログラム236と、第1モーション演算プログラム234-1とを所望の制御サイクル時間の中で実行可能な場合に採用できる。すなわち、図31の1に示す例においては、第1制御プログラム230-1は、第1モーション演算プログラム234-1に対してその実行に必要な指示を与える命令と、第2モーション演算プログラム234-2に対してその実行に必要な指示を与える命令とを含むユーザプログラム236を含む。図31の1に示す例によれば、第1モーション演算プログラム234-1のどの実行サイクルにおいても、ユーザプログラム236から新しい指示を与えることができる。したがって、実行中のモータの運動に対する変更の指示などを迅速にモーション制御に反映することができる。なお、第2モーション演算プログラム234-2の実行サイクルの途中で第2モーション演算プログラム234-2に与えられた指示は、第2モーション演算プログラム234-2の次の実行サイクルにおいて反映される。さらに、図31の1に示す例によれば、ユーザプログラム236を1つに集約できるので、その設計が容易になる。図31の2を参照して、第2制御プログラム230-2にのみユーザプログラム236が含まれる形態について説明する。図31の2に示す例は、所望の制御サイクル時間内で、第1モーション演算プログラム234-1の実行時間を除いた、ユーザプログラム236の実行に割り当てることができる時間が少ない場合に好適な形態である。すなわち、図31の2に示す例においては、第2制御プログラム230-2は、第1モーション演算プログラム234-1に対してその実行に必要な指示を与える命令と、第2モーション演算プログラム234-2に対してその実行に必要な指示を与える命令とを含むユーザプログラム236を含む。図31の2に示す例によれば、第1モーション演算プログラム234-1を実行するに足る時間まで制御サイクル時間を短くすることができる。ただし、ユーザプログラム236から第1モーション演算プログラム234-1への指示は第2制御プログラム230-2の実行サイクルの周期でしか与えることができない。しかしながら、モーション演算プログラム234は、ユーザプログラム236から、たとえば座標X1から座標X2まで速度Vで移動せよといった指示をいったん受けて活性状態となれば、その指示の実行を完了するまでの間、ユーザプログラム236からの指示なしに、実行サイクルごとにモーション指令値データを算出することができる。したがって、そのような指示の実行途中に、モータの運動を中止させる指示や別の運動へ変更する指示を与えて迅速に反応させる必要がない場合には、図31の2に示す形態を採用しても支障はない。さらに、図31の2に示す例によれば、ユーザプログラム236を1つに集約できるので、その設計が容易になる。図31の3を参照して、第1制御プログラム230-1に第1ユーザプログラム236-1が含まれ、かつ、第2制御プログラム230-2に第2ユーザプログラム236-2が含まれる形態について説明する。すなわち、図31の3に示す例においては、ユーザプログラム236としては、第1モーション演算プログラム234-1に対してその実行に必要な指示を与える命令を含む第1ユーザプログラム236-1と、第2モーション演算プログラム234-2に対してその実行に必要な指示を与える命令を含む第2ユーザプログラム236-2とからなる。図31の3に示す例によれば、第1制御プログラム230-1に含まれる第1ユーザプログラム236-1は、第2モーション演算プログラム234-2に対する指示を与えることに関する処理を行う必要がないので、実行時間を比較的短くすることができる。したがって、第1ユーザプログラム236-1と第1モーション演算プログラム234-1とを実行可能な時間としての制御サイクル時間を比較的短くすることができる。さらに、第1モーション演算プログラム234-1および第2モーション演算プログラム234-2のどの実行サイクルにおいても第1ユーザプログラム236-1および第2ユーザプログラム236-2からそれぞれ新しい指示を与えることができる。上述したスケジュール例6のように、複数の制御プログラムにモーション演算プログラム234を含むスケジュールを採用するCPUユニット13の特徴は、次のようにまとめることができる。通信回路PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140は、制御サイクルの周期で出力データを送信しおよび入力データを受信する。制御プログラム230は、第1制御プログラム230-1および第2制御プログラム230-2を含む。第1制御プログラム230-1は、モータの運動を制御するための第1モーション指令値データを生成する第1モーション演算プログラム234-1を含む。第2制御プログラム230-2は、モータの運動を制御するための第2モーション指令値データを生成する第2モーション演算プログラム234-1を含む。そして、第1制御プログラム230-1および第2制御プログラム230-2の少なくとも一方は、ユーザにおける制御目的に応じて作成され第1モーション演算プログラム234-1および第2モーション演算プログラム234-1に対してその実行に必要な指示を与える命令を含むユーザプログラム236第1ユーザプログラム236-1または第2ユーザプログラム236-2を含む。スケジュール構築データ234は、マイクロプロセッサ100に、制御サイクルの周期と同じ周期の第1実行サイクルごとに第1制御プログラム230-1を実行開始させ、制御サイクルの周期の2以上の整数倍の周期の第2実行サイクルごとに第2制御プログラム230-2を実行開始させる。さらに、スケジュール構築データ234は、第2実行サイクルが開始する制御サイクルにおいて、第1制御プログラム230-1の実行終了後に第2制御プログラム230-2を実行開始させ、当該制御サイクルが終了するまでに第2制御プログラム230-2が終了しなければ次の制御サイクルにおいて第1制御プログラム230-1の実行終了後に第2制御プログラム230-2の未実行の部分の実行を開始させるための、プロシージャの実行順序の指定を含む。このようにすれば、モーション制御機能を有するPLC1において、高速処理を要する一部のモーション制御処理のために比較的短い周期の実行サイクルを確保しつつ、それ以外のモーション制御処理も一定周期で実行することができる。たとえば、対象物に対して切削加工を行う加工機を制御する場合に、刃物の運動制御に関わるような高速かつ高精度な制御を要するモーション制御処理を短い周期で実行することができるとともに、加工機に対する対象物の搬入や搬出にかかわるような相対的に高速性を要しないモーション制御処理も一定周期で実行することができる。f13:スケジュール例7次に、本発明の実施の形態1のスケジュール例7について説明する。図32は、本発明の実施の形態1のスケジュール例7に対応するスケジュール構築データ234を示す図である。図33は、本発明の実施の形態1のスケジュール例7の第kサイクルのシーケンス図である。図34は、本発明の実施の形態1のスケジュール例7の第k1サイクルのシーケンス図である。図32のスケジュール構築データ234から図33および図34のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図32のスケジュール構築データ234と図33および図34のシーケンスとの関係についての詳細な説明は行わない。スケジュール例7を適用するCPUユニット13のマイクロプロセッサ100は、第1コアおよび第2コアを含む複数のコアを有するものとする。そして、第1コアで制御サイクル開始プロシージャおよび制御Rタスクが実行され、第2コアで制御Sタスクが実行される。制御Rタスクの実行に関しては、制御Rタスクのタスク開始プロシージャの実行後、制御Sタスクのタスク開始プロシージャの実行終了を待たずに入出力RスレッドがRun状態となる点を除き、スケジュール例1の制御Aタスクと同様である。制御Sスレッドは、スケジュール例1の制御Bスレッドとは異なり、入出力Rスレッドの後続起動プロシージャによって起動されると直ちにRun状態となり、制御Rスレッドと並列に実行される。また、制御Sスレッドは、第k1サイクルを開始する制御サイクル開始割込によって実行中断されることなく実行を継続する。さらに、制御Sスレッドは、第k1サイクルにおける入出力Rスレッドとも並列実行される。制御Sスレッドは、第2コアの資源利用上、第kサイクルの入出力Rスレッドとも並列実行することが可能であるが、第kサイクルで実行開始する制御Sスレッドは、第kサイクルにおける入出力Rスレッドの実行により入力される入力データを使用するので、入出力Rスレッドの後続起動プロシージャによって起動させている。以上説明した、複数のコアを有するマイクロプロセッサ100で実行されるスケジュールを採用するCPUユニット13の特徴は、次のようにまとめることができる。マイクロプロセッサ100は、少なくとも第1コアおよび第2コアを含む。制御プログラム230は、第1制御プログラムと第2制御プログラムとを含む。スケジュール構築データ234は、出力データの送信および入力データの受信が終了した後に、第1コアに第1制御プログラムを実行させるとともに、第2コアに第2制御プログラムを第1制御プログラムの実行と並列に実行させるための、プロシージャの実行順序の指定を含む。このようにすれば、PLC1に特徴的な入出力処理と制御プログラム実行とのサイクリック処理を採用しつつ、複数のコアを有するマイクロプロセッサ100がプログラムの並列実行することによる処理の高速化を実現することができる。f14:スケジュール例8および9本実施の形態によれば、従来の典型的なPLC1と同様のスケジュールを構築することもできる。以下に説明するスケジュール例8および9は、そのような例である。図35は、本発明の実施の形態1のスケジュール例8に対応するスケジュール構築データ234を示す図である。図36は、本発明の実施の形態1のスケジュール例8の第kサイクルおよび第k1サイクルのシーケンス図である。図35のスケジュール構築データ234から図36のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図35のスケジュール構築データ234と図36のシーケンスとの関係についての詳細な説明は行わない。スケジュール例8では、単一のスレッド制御Tスレッドにおいて、制御プログラムの実行と入出力処理とが行われる。また、制御サイクル開始割り込みが利用されず、1つの制御サイクルのタスクが実行終了すると、直ちに次の制御サイクルが開始される。これは、図35の1の制御サイクル開始条件において、制御サイクル開始割り込みではなく、制御Tタスクが指定されていることによる。システムプログラム210による処理のうち、図36に示した以外の、PLCサポート装置8との通信処理などを含むその他の処理は、通信終了通知待ち時間の間に実行される。このシステムプログラム210によるその他の処理は周辺処理とよばれることもある。スケジュール例8の変形として、システムプログラム210による上記その他の処理周辺処理を、制御Tスレッドの中に組み込んで、たとえば各制御サイクルの入力コピープロシージャを実行した後に、実行するようにしてもよい。図37は、本発明の実施の形態1のスケジュール例9に対応するスケジュール構築データ234を示す図である。図38は、本発明の実施の形態1のスケジュール例9の第kサイクルおよび第k1サイクルのシーケンス図である。図37のスケジュール構築データ234から図38のシーケンスが生じることについては、スケジュール例1を考慮すれば自明であるので、図35のスケジュール構築データ234と図36のシーケンスとの関係についての詳細な説明は行わない。スケジュール例8では、制御プログラムの実行後に入出力処理を行っているが、スケジュール例9では、入力処理、制御プログラムの実行、出力処理の順に実行される。これに伴い、スケジュール例9では、入出力指示プロシージャではなく、入力指示プロシージャと出力指示プロシージャとが用いられている。さらに、スケジュール例9では、出力の通信終了通知の後に、サイクルタイマプロシージャが実行される。サイクルタイマプロシージャは、図11で説明されているとおり、制御サイクル開始からの経過時間を取得し、制御サイクル時間終了までの残り時間を算出し、算出した残り時間が経過するとタイマ割り込みが入るようにプロセッサ内蔵のタイマを設定し、タイマ割り込みがあれば本スレッドが再起動されるように設定し、本スレッドを休止するSleep状態にする機能を有する。なお、サイクルタイマプロシージャが実行された時点ですでに制御サイクル時間が経過していれば、サイクルタイマプロシージャは、タイマ割り込みを設定することなくただちに後続起動プロシージャを実行する。制御サイクル開始割り込みを用いる場合とは異なり、制御サイクル時間の経過によってスレッドの実行が強制中断されることはない。サイクルタイマプロシージャを用いることにより、制御サイクル開始割り込みを用いることなく、制御サイクルの周期をほぼ一定時間にすることができる。システムプログラム210による上記その他の処理周辺処理は、入力および出力の通信終了通知待ち時間ならびにサイクルタイマプロシージャが設定したタイマ割り込みの待ち時間において実行される。<G.実施の形態2>上述の実施の形態1においては、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる方法について説明した。これに対して、実施の形態2では、スレッドは用いるが、タスクを用いずにスケジュールを構築する方法について説明する。実施の形態2では、システムプログラム210によるPLC1の制御動作の実行準備処理図7のステップS1において、各スレッドに対応して、記憶手段メインメモリ104などに、スレッドの実行サイクル数を格納する記憶領域と、スレッド終了フラグの記憶領域と、スレッドの実行回数を格納する記憶領域と、スレッドの実行時間を格納する記憶領域とが設けられる。図39は、本発明の実施の形態2において用意されるスレッドの設定項目と各設定項目の説明とを表形式で示す図である。図8に示す実施の形態1のタスクの設定項目において、タスク開始条件の設定項目として示されている周期の設定は、図39に示す実施の形態2では、スレッドの開始条件の設定項目に移行されている。また、実施の形態1ではタスクの設定項目であるサイクル超過許容回数も、実施の形態2ではスレッドの設定項目に移行されている。図40は、本発明の実施の形態2において用意されているプロシージャの名称および機能を示す図である。制御サイクル開始プロシージャについては、図40に設定項目および設定項目の説明も示す。実施の形態2においても、図11の後続起動プロシージャ以降の各プロシージャが用意されているが、その内容は図11と同じであるので繰り返して図示しない。実施の形態2では、実施の形態1におけるタスク開始プロシージャの機能が制御サイクル開始プロシージャに、タスク終了プロシージャの機能がスレッド終了プロシージャに、それぞれ実質的に移行されている。図41は、本発明の実施の形態2のスケジュール例に対応するスケジュール構築データ234を示す図である。図42は、本発明の実施の形態2のスケジュール例の第kサイクルのシーケンス図である。図43は、本発明の実施の形態2のスケジュール例の第k1サイクルのシーケンス図である。図41のスケジュール構築データ234から図42および図43のシーケンスが生じることについては、図39および40を参照しつつ実施の形態1のスケジュール例1を考慮すれば自明であるので、図41のスケジュール構築データ234と図42および図43のシーケンスとの関係についての詳細な説明は行わない。実施の形態2のこのスケジュール例は、実施の形態1のスケジュール例1とほぼ同様のスケジュールを実施の形態2におけるしくみによって実現したものである。すなわち、スレッドは用いるが、タスクを用いずにスケジュールが構築される。そのため、実施の形態1ではタスクを対象に行われていた実行回数の計数や実行時間の計測は、実施の形態2ではスレッドを対象として行われる。実施の形態1の他のスケジュール例についても、同様に、実施の形態2におけるしくみによってほぼ同一のスケジュールを実現することができる。<H.実施の形態3>上述の実施の形態1においては、タスクとスレッドとの階層構造を有するスケジュール構築のしくみを用いる方法について説明した。これに対して、実施の形態3では、タスクおよびスレッドを用いずに、プロシージャに実行番号を与えてプロシージャを実行番号の順に実行することにより、スケジュールを構築する方法について説明する。実施の形態3に係るスケジュール構築データは、実行するプロシージャの指定と、指定された各プロシージャについての実行番号および実行サイクル周期の指定とを含む。同一名称のプロシージャを複数回指定して、それぞれに異なる実行番号を指定した場合は、実行番号ごとにプロシージャのオブジェクトインスタンスが生成される。以降の説明においては、指定された実行番号が異なる同一名称のプロシージャは、互いに区別される別々のプロシージャとして扱う。実施の形態3では、システムプログラム210によるPLC1の制御動作の実行準備処理図7のステップS1において、各プロシージャに対応して、記憶手段メインメモリ104などに、実行サイクル数を格納する記憶領域と、実行済フラグの記憶領域とが設けられる。また、実施の形態3に係るプロシージャは、各プロシージャに固有の機能のほかに、いずれのプロシージャにも共通して、プロシージャの実行を制御する機能を有している。図44は、本発明の実施の形態3に係る各プロシージャが共通して有する実行制御機能が提供する処理を示すフローチャートである。図44を参照して、プロシージャの実行が開始されると、当プロシージャの実行済フラグがオフであるか否かが判断されるステップS100。実施の形態3においては、各プロシージャの実行終了については、対応する実行済フラグの状態オフまたはオンで判断される。当プロシージャの実行済フラグがオフでなければステップS100においてNO、処理はステップS106へ進む。当プロシージャの実行済フラグがオフであればステップS100においてYES、当プロシージャの固有の機能の処理が実行されるステップS102。なお、当プロシージャが先の処理によって実行中断中の場合は、未実行の部分が実行される。そして、当プロシージャの固有の機能の処理の実行が終了すると、当プロシージャの実行済フラグがオンに設定されるステップS104。ステップS106においては、当プロシージャより実行番号の大きい他のプロシージャが存在するか否かが判断される。当プロシージャより実行番号の大きい他のプロシージャが存在しなければステップS106においてNO、当プロシージャは終了する。一方、当プロシージャより実行番号の大きい他のプロシージャが存在すればステップS106においてYES、当プロシージャの次に実行番号の大きいプロシージャが起動されるステップS108。そして、当プロシージャの実行は終了する。図45は、本発明の実施の形態3において用意されているプロシージャの1つである、制御サイクル開始プロシージャについて、その機能、設定項目および設定項目の説明を示す図である。図46は、本発明の実施の形態3において用意されている、制御サイクル開始プロシージャ以外のプロシージャについて、各プロシージャの名称および機能を示す図である。図47は、本発明の実施の形態3のスケジュール例に対応するスケジュール構築データ234を示す図である。図47の1では、制御サイクル開始プロシージャについて、制御サイクル開始条件として制御サイクル開始割り込みが設定されている。図47の2では、先に説明したとおり、実行するプロシージャが指定されるとともに、指定されたプロシージャごとに実行番号および実行サイクル周期が指定される。さらに、制御プログラム実行プロシージャについては、そのプロシージャが実行させる対象制御プログラムも指定される。ここでは、制御Aプログラムが実行サイクル周期1で実行され、制御Bプログラムが実行サイクル周期2で実行されるという、実施の形態1のスケジュール例1に類似したスケジュールが設定されている例を示す。図48は、図47のスケジュール構築データに対応するスケジュール例の第kサイクルのシーケンス図である。図49は、図47のスケジュール構築データに対応するスケジュール例の第k1サイクルのシーケンス図である。図47および図48を参照して、第kサイクルにおいては、制御サイクル開始割り込みによって制御サイクル開始プロシージャが実行される。制御サイクル開始プロシージャは、図45で説明されているとおり、各プロシージャの実行サイクル数のカウントアップやその他の処理を実行する。制御サイクル開始プロシージャは、第kサイクルにおいては、すべてのプロシージャについて、実行サイクル数を1にし、かつ、実行済フラグをオフにするものとする。さらに、制御サイクル開始プロシージャは、まず実行番号が最も小さいプロシージャ図47の例では、同期出力コピープロシージャを起動する。その後、各プロシージャが共通して有する実行制御機能の処理手順図44に示すフローチャートに従い、実行番号が小さい順に各プロシージャが実行される。各プロシージャは、固有機能の処理の実行後に実行済フラグをオンにする。図47の例では、制御Bプログラムの実行中に第k1サイクルの制御サイクル開始割り込みが入るので、制御Bプログラムの実行は中断される。図47および図49を参照して、第k1サイクルにおいては、制御サイクル開始割り込みによって制御サイクル開始プロシージャが実行される。制御サイクル開始プロシージャが各プロシージャの実行サイクル数をカウントアップする結果、各プロシージャの実行サイクル数は2となる。実行番号が1から8までのプロシージャについては、実行サイクル周期が1であるから、この時点で実行サイクル数が指定された実行サイクル周期を超える。そのため、制御サイクル開始プロシージャは、これらのプロシージャの実行サイクル数を1にするとともに、対応する実行済フラグをオフにする。一方、実行番号が9から11までのプロシージャについては、実行サイクル周期が2であるから、この時点では実行サイクル数が指定された実行サイクル周期を超えていない。そのため、制御サイクル開始プロシージャは、これらのプロシージャの実行サイクル数および実行済フラグを現状のままとする。その後、実行番号が最も小さいプロシージャ図47の例では、同期出力プロシージャから実行される。実行サイクル周期が1である実行番号1から8までのプロシージャは、第kサイクルにおけるのと同様に実行される。実行番号9の変数参照開始プロシージャは、第kサイクルにおいて実行済フラグがオンになったままであるので、図44のフローに従い、その固有の機能を実行しないまま、実行番号10の制御プログラム実行プロシージャを起動する図44のステップS100参照。実行番号10の制御プログラム実行プロシージャによって実行される制御プログラムBは、第kサイクルにおいて実行中断中となっているので、未実行の部分が実行される図44のステップS102参照。その後、実行番号11の変数配信プロシージャの実行終了により、第k1サイクルにおけるプロシージャが実行終了する。その後、第k2サイクルの制御サイクル開始割り込みが入るまでの時間は、システムプログラムによるその他の処理周辺処理の実行に使われる。上記スケジュール例による実行内容は、上述の実施の形態1のスケジュール例1と類似している。このように、本発明の実施の形態3では、プロシージャごとに、実行順序を決定する実行番号と実行サイクル周期とが指定されているので、各制御サイクル内で実行されるプロシージャの実行順序に着目すれば、実行サイクル周期の異なる複数のスレッドを用いた場合と同様の結果となるスケジュールを構築することができる。上述した実施の形態3の例には実行サイクル超過に対応する機能を含めなかったが、実施の形態1および2にならって、設定した制御サイクル数までのプロシージャの実行サイクル超過を許すための機能を追加してもよい。上述した実施の形態3におけるようにプロシージャ自体に実行制御機能を持たせることに代えて、システムプログラム210が図44に相当する実行制御機能を担い、システムプログラム210が図47に示すようなスケジュール構築データに基づいてプロシージャを1つずつ順に呼び出して実行するようにしても、実施の形態3と同様のスケジュールを実現することができる。今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。"