(57)【要約】      （修正有）【課題】それぞれ演算周期が異なる複数のプログラムを効率的に演算する。【解決手段】単位時間算出部１１が算出する複数プログラムの演算周期の最大公約数を単位時間、完了時間算出部１２が算出する各プログラムの演算周期の最小公倍数を全プログラムの演算完了に要する時間として、プログラムを割当てる複数の連続するベース期間を設定し、割り当て部１３が各プログラムの演算時間を連続するベース期間に演算周期が短い順に割り当てることにより、演算部２０が各プログラムを効率的に演算することができる。また、空き時間更新部１４によりベース期間の演算空き時間から割り当てた演算時間を減算して得た演算空き時間が、判定部１５によって負であると判定された場合に、出力部１６より出力される演算周期内に演算が完了しないプログラムが存在するエラー情報と、ベース期間ごとの各プログラムの演算時間の割合を表示部５０により表示して確認できる。【選択図】図１
2010160599.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムのそれぞれの演算周期の最大公約数を単位時間として算出する単位時間算出部と、
前記複数のプログラムのそれぞれの演算周期の最小公倍数または最も長い演算周期を、前記複数のプログラムの全ての演算が少なくとも１回完了するために必要な完了時間として算出する完了時間算出部と、
前記複数のプログラムのそれぞれの演算時間を、それぞれ前記単位時間を有する複数の連続するベース期間の中に、演算周期が短い順に割り当てる割り当て部と、
それぞれのベース期間の演算空き時間から、前記割り当て部によってそれぞれのベース期間に割り当てられた演算時間を減算して、それぞれのベース期間の演算空き時間を更新する空き時間更新部と、
更新後の演算空き時間が負であるか否かを判定する判定部と、
前記判定部によって演算空き時間が負であると判定された場合に、演算周期内に演算が完了しないプログラムが存在することを示す情報を出力する出力部と、
を備えることを特徴とするスケジューラ。
【請求項２】
前記割り当て部は、前記複数のプログラムのそれぞれの演算時間を、それぞれの演算周期に応じて定められる所定のベース期間群の中に、演算周期が短い順に割り当てることを特徴とする請求項１記載のスケジューラ。
【請求項３】
前記割り当て部は、前記複数のプログラムのそれぞれの演算時間を、前記複数のベース期間のそれぞれの中に割り当てる前に、予め演算するタイミングが指定されている指定プログラムを、前記複数のベース期間の少なくとも一つの中に割り当てることを特徴とする請求項１または２記載のスケジューラ。
【請求項４】
前記連続するベース期間の合計時間が、前記完了時間であることを特徴とする請求項１〜３のいずれか１項に記載のスケジューラ。
【請求項５】
前記割り当て部は、前記複数のプログラムのそれぞれの演算時間を割り当てる際に、前記演算周期ごとに集計された前記複数のプログラムの総演算時間を割り当てることを特徴とする請求項１〜４のいずれか１項に記載のスケジューラ。
【請求項６】
請求項１〜５のいずれか１項に記載のスケジューラと、
前記複数のベース期間に割り当てられた前記複数のプログラムを演算する演算部と、
前記演算部によって演算される前記複数のプログラムの演算時間の割合を、前記ベース期間ごとに表示する表示部と、
を備えることを特徴とする情報処理装置。
【請求項７】
複数のプログラムのそれぞれの演算周期の最大公約数を単位時間として算出する単位時間算出ステップと、
前記複数のプログラムのそれぞれの演算周期の最小公倍数または最も長い演算周期を、前記複数のプログラムの全ての演算が少なくとも１回完了するために必要な完了時間として算出する完了時間算出ステップと、
前記複数のプログラムのそれぞれの演算時間を、それぞれ前記単位時間を有する複数の連続するベース期間の中に、演算周期が短い順に割り当てる割り当てステップと、
それぞれのベース期間の演算空き時間から、前記割り当てステップにおいてそれぞれのベース期間に割り当てられた演算時間を減算して、それぞれのベース期間の演算空き時間を更新する空き時間更新ステップと、
更新後の演算空き時間が負であるか否かを判定する判定ステップと、
前記判定ステップにおいて演算空き時間が負であると判定された場合に、演算周期内に演算が完了しないプログラムが存在することを示す情報を出力する出力ステップと、
を含むことを特徴とするスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ技術に関し、スケジューラ、情報処理装置およびスケジューリング方法に関する。
【背景技術】
【０００２】
プロセス制御器やＰＬＣ（Programmable Logic Controller）等のデジタル式コントローラは、離散的に制御処理を行う。そのため、デジタル式コントローラは、所定の演算周期で制御処理を行うプログラムの演算を繰り返し実行している（例えば、下記特許文献１参照）。近年、マイクロプロセッサの高集積化によって、マイクロプロセッサの処理能力の高速化が進み、演算周期の短縮化が進んでいる。しかしながら、一方において、演算周期を短いものから長いものまで用意し、制御処理の用途に応じて適切な演算周期を各プログラムに割り当てることも考案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−３５１５０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
それぞれ演算周期が異なる複数のプログラムは、従来、マルチタスク・オペレーティングシステム（ＯＳ）によって実行されていた。しかしながら、マルチタスクＯＳによる単純なタイムシェアでは、プログラムの厳密な演算周期を守ることまでは保証できない。さらに、複数のプログラムのそれぞれに優先順位を付する煩雑な手順が必要となる。また、マイクロプロセッサの処理能力を、演算周期が短いプログラムと演算周期が長いプログラムとに予め割り当てることも考案されている。しかしながら、予め設定された処理能力の割り当てに、実際に演算されるプログラムの数が対応していない場合が生じ得る。そのため、例えば、演算周期が短いプログラムの数が多く、予め演算周期が短いプログラムの処理に割り当てられたマイクロプロセッサの処理能力が不足する一方で、演算周期が長いプログラムの数が少なく、予め演算周期が長いプログラムの処理に割り当てられたマイクロプロセッサの処理能力に空きが生じて無駄が発生してしまう。
【０００５】
そこで、本発明は、上述した従来技術による問題点を解消するためになされたものであり、それぞれ演算周期が異なる複数のプログラムを効率的に演算することを可能とするスケジューラ、情報処理装置およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るスケジューラは、複数のプログラムのそれぞれの演算周期の最大公約数を単位時間として算出する単位時間算出部と、前記複数のプログラムのそれぞれの演算周期の最小公倍数または最も長い演算周期を、前記複数のプログラムの全ての演算が少なくとも１回完了するために必要な完了時間として算出する完了時間算出部と、前記複数のプログラムのそれぞれの演算時間を、それぞれ前記単位時間を有する複数の連続するベース期間の中に、演算周期が短い順に割り当てる割り当て部と、それぞれのベース期間の演算空き時間から、前記割り当て部によってそれぞれのベース期間に割り当てられた演算時間を減算して、それぞれのベース期間の演算空き時間を更新する空き時間更新部と、更新後の演算空き時間が負であるか否かを判定する判定部と、前記判定部によって演算空き時間が負であると判定された場合に、演算周期内に演算が完了しないプログラムが存在することを示す情報を出力する出力部と、を備える。
【０００７】
また、本発明に係る情報処理装置は、上記スケジューラと、前記複数のベース期間に割り当てられた前記複数のプログラムを演算する演算部と、前記演算部によって演算される前記複数のプログラムの演算時間の割合を、前記ベース期間ごとに表示する表示部と、を備える。
【０００８】
さらに、本発明に係るスケジューリング方法は、複数のプログラムのそれぞれの演算周期の最大公約数を単位時間として算出する単位時間算出ステップと、前記複数のプログラムのそれぞれの演算周期の最小公倍数または最も長い演算周期を、前記複数のプログラムの全ての演算が少なくとも１回完了するために必要な完了時間として算出する完了時間算出ステップと、前記複数のプログラムのそれぞれの演算時間を、それぞれ前記単位時間を有する複数の連続するベース期間の中に、演算周期が短い順に割り当てる割り当てステップと、それぞれのベース期間の演算空き時間から、前記割り当てステップにおいてそれぞれのベース期間に割り当てられた演算時間を減算して、それぞれのベース期間の演算空き時間を更新する空き時間更新ステップと、更新後の演算空き時間が負であるか否かを判定する判定ステップと、前記判定ステップにおいて演算空き時間が負であると判定された場合に、演算周期内に演算が完了しないプログラムが存在することを示す情報を出力する出力ステップと、を含む。
【０００９】
かかる構成を採用することで、複数のプログラムのそれぞれの演算周期の最大公約数に対応するベース期間を連続的に複数設定することができ、この複数のベース期間の中に、複数のプログラムのそれぞれの演算時間を、演算周期が短い順に割り当てることができるため、それぞれ演算周期が異なる複数のプログラムを効率的に演算することが可能となる。また、ベース期間の演算空き時間が負になった場合には、演算周期内に演算が完了しないプログラムが存在することを示す情報を出力することができるため、それぞれのプログラムの演算時間を割り当てる際に、それぞれのプログラムの演算が演算周期内に完了するか否かを確認することが可能となる。
【発明の効果】
【００１０】
本発明によれば、それぞれ演算周期が異なる複数のプログラムを効率的に演算することを可能とするスケジューラ、情報処理装置およびスケジューリング方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態におけるコントローラの構成を模式的に例示する図である。
【図２】演算時間テーブルのデータ構成を例示する図である。
【図３】指定プログラムテーブルのデータ構成を例示する図である。
【図４】スケジューリング処理の処理手順を説明するための図である。
【図５】スケジューリング処理の処理手順を説明するための図である。
【図６】スケジューリング処理の処理手順を説明するための図である。
【図７】スケジューリング処理の処理手順を説明するための図である。
【図８】スケジューリング処理の処理手順を説明するための図である。
【図９】スケジューリング処理の処理手順を説明するための図である。
【図１０】スケジューリング処理の処理手順を説明するための図である。
【図１１】スケジューリング処理の処理手順を説明するための図である。
【図１２】スケジューリング処理の処理手順を説明するための図である。
【図１３】スケジューリング処理の処理手順を説明するための図である。
【図１４】表示部に表示されるグラフを例示する図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。すなわち、本発明は、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであるため、具体的な寸法等は以下の説明を照らし合わせて判断するべきものである。また、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることは勿論である。
【００１３】
まず、図１を参照して、実施形態におけるコントローラ１（情報処理装置）の構成について説明する。図１は、実施形態におけるコントローラ１の構成を模式的に例示した図である。
【００１４】
同図に示すように、コントローラ１は、各種プログラムの演算時間をスケジューリングするスケジューラ１０と、スケジューリングされたプログラムを実行する演算部２０と、各種プログラムおよび各種情報を記憶する記憶部３０と、各種情報を入力するための入力部４０と、各種情報を表示するための表示部５０と、各種情報を外部とやりとりするための通信部６０とを有する。これらの要素は信号を伝送するバス７０を介して相互に接続されている。
【００１５】
記憶部３０は、それぞれ演算周期が異なる複数のプログラムを記憶する。複数のプログラムは、それぞれ複数の機能ブロックを含んでいる。記憶部３０は、プログラムごとの演算時間を管理する演算時間テーブルと、使用者によって演算するタイミングが指定された指定プログラムに関する情報を管理する指定プログラムテーブルとを記憶する。
【００１６】
ここで、プログラムの演算時間は、演算するマシンの性能により異なる。本実施形態におけるプログラムの演算時間は、一のプログラムがコントローラで演算されたときに、一のプログラムの演算が１回完了するのに要する時間をいう。また、プログラムの演算周期は、プログラムの仕様や用途により異なる。本実施形態におけるプログラムの演算周期は、一のプログラムの実行が繰り返される場合に、１回の実行が開始されてから終了するまでに許容される最大の期間をいう。
【００１７】
図２を参照して、演算時間テーブルについて説明する。図２は、演算時間テーブルのデータ構成を例示する図である。演算時間テーブルは、データ項目として、例えば、プログラムＩＤと、演算周期と、機能ブロック数と、演算時間とを有する。図２に示す演算時間テーブルには、例えば、以下に説明する第１〜第４のプログラムに関する情報が格納されている。
【００１８】
第１のプログラムのプログラムＩＤは“ＰＧ００１”であり、第１のプログラムには“１００ミリ秒”の演算周期で演算される機能ブロックが“２５個”含まれており、第１のプログラムを１回演算するために必要な演算時間は“５０ミリ秒”である。なお、本実施形態では、１個の機能ブロックを演算するのに要する演算時間を、例示的に２ミリ秒としている。
【００１９】
第２のプログラムのプログラムＩＤは“ＰＧ００２”であり、第２のプログラムには“２００ミリ秒”の演算周期で演算される機能ブロックが“２０個”含まれており、第２のプログラムを１回演算するために必要な演算時間は“４０ミリ秒”である。
【００２０】
第３のプログラムのプログラムＩＤは“ＰＧ００３”であり、第３のプログラムには“５００ミリ秒”の演算周期で演算される機能ブロックが“２５個”含まれており、第３のプログラムを１回演算するために必要な演算時間は“５０ミリ秒”である。
【００２１】
第４のプログラムのプログラムＩＤは“ＰＧ００４”であり、第４のプログラムには“１０００ミリ秒”の演算周期で演算される機能ブロックが“５０個”含まれており、第４のプログラムを１回演算するために必要な演算時間は“１００ミリ秒”である。
【００２２】
図３を参照して、指定プログラムテーブルについて説明する。図３は、指定プログラムテーブルのデータ構成を例示する図である。指定プログラムテーブルは、データ項目として、例えば、プログラムＩＤと、演算タイミングと、機能ブロック数と、演算時間とを有する。図３に示す指定プログラムテーブルには、例えば、以下に説明する第１および第２の指定プログラムに関する情報が格納されている。
【００２３】
第１の指定プログラムのプログラムＩＤは“ＳＰ００１”であり、第１の指定プログラムは、演算開始後“３００ミリ秒〜４００ミリ秒”の間のタイミングに演算されるように指定されており、第１の指定プログラムには、機能ブロックが“５個”含まれており、第１の指定プログラムを１回演算するために必要な演算時間は１０ミリ秒である。
【００２４】
第２の指定プログラムのプログラムＩＤは“ＳＰ００２”であり、第２の指定プログラムは、演算開始後“８００ミリ秒〜９００ミリ秒”の間のタイミングに演算されるように指定されており、第２の指定プログラムには、機能ブロックが“１５個”含まれており、第２の指定プログラムを１回演算するために必要な演算時間は３０ミリ秒である。
【００２５】
図１に示すスケジューラ１０は、記憶部３０に記憶されている演算時間テーブルの内容や指定プログラムテーブルの内容が更新されるたびに、後述するプログラムの演算時間割り当て処理（以下、「スケジューリング処理」という。）を実行する。また、スケジューラ１０は、入力部４０からスケジューリング処理の実行を要求する指示が入力された場合にも、スケジューリング処理を実行する。以下において、スケジューリング処理を実行するスケジューラ１０の機能について説明する。
【００２６】
スケジューラ１０は、単位時間算出部１１と、完了時間算出部１２と、割り当て部１３と、空き時間更新部１４と、判定部１５と、出力部１６とを有する。
【００２７】
単位時間算出部１１は、複数のプログラムのそれぞれの演算周期の最大公約数を単位時間として算出する。これを具体的に説明する。まず、単位時間算出部１１は、図２に示す演算時間テーブルから、第１〜第４のプログラムのそれぞれの演算周期を読み出す。続いて、単位時間算出部１１は、第１〜第４のプログラムのそれぞれの演算周期の最大公約数を、単位時間として算出する。本実施形態では、第１〜第４のプログラムのそれぞれの演算周期が、１００ミリ秒、２００ミリ秒、５００ミリ秒、１０００ミリ秒であるため、単位時間として１００ミリ秒が算出される。
【００２８】
なお、二つのプログラムのそれぞれの演算周期が、例えば１００ミリ秒と２５０ミリ秒とである場合には、単位時間として５０ミリ秒が算出される。また、第１〜第４のプログラムのそれぞれの演算周期の値が整数でない場合には、例えば単位を換算する等して演算周期の値を整数で表記すればよい。例えば、演算時間テーブルに格納されている演算周期が、０．１秒、０．２秒、０．５秒、1秒である場合には、単位を秒からミリ秒に換算することによって、演算周期の値を整数で表記することができる。
【００２９】
完了時間算出部１２は、複数のプログラムのそれぞれの演算周期の最小公倍数を、複数のプログラムの全ての演算が少なくとも１回完了するために必要な完了時間として算出する。これを具体的に説明する。まず、完了時間算出部１２は、図２に示す演算時間テーブルから、第１〜第４のプログラムのそれぞれの演算周期を読み出す。続いて、完了時間算出部１２は、第１〜第４のプログラムのそれぞれの演算周期の最小公倍数を、第１〜第４のプログラムの全ての演算が少なくとも１回完了するために必要な完了時間として算出する。本実施形態では、第１〜第４のプログラムのそれぞれの演算周期が、１００ミリ秒、２００ミリ秒、５００ミリ秒、１０００ミリ秒であるため、完了時間として１０００ミリ秒が算出される。
【００３０】
なお、二つのプログラムのそれぞれの演算周期が、例えば１００ミリ秒と２５０ミリ秒とである場合には、完了時間として５００ミリ秒が算出される。また、上述したように、第１〜第４のプログラムのそれぞれの演算周期の値が整数でない場合には、例えば単位を換算する等して演算周期の値を整数で表記すればよい。
【００３１】
割り当て部１３は、複数のプログラムのそれぞれの演算時間を、それぞれ単位時間を有する複数の連続するベース期間の中に、演算周期が短い順に割り当てる。これを具体的に説明する。まず、割り当て部１３は、図２に示す演算時間テーブルから、第１〜第４のプログラムのそれぞれの演算時間および演算周期を読み出す。割り当て部１３は、第１〜第４のプログラムのそれぞれの演算時間を、それぞれの演算周期に応じて定められる所定のベース期間群の中に、演算周期が短い順に割り当てる。複数のプログラムの演算時間を割り当てる際の詳細については、後述する。
【００３２】
割り当て部１３は、図３に示す指定プログラムテーブルに指定プログラムが登録されている場合には、上記複数のプログラムの演算時間を割り当てる前に、指定プログラムの演算時間を予め指定されているベース期間の中に割り当てる。指定プログラムの演算時間を割り当てる際の詳細については、後述する。
【００３３】
空き時間更新部１４は、それぞれのベース期間の演算空き時間から、割り当て部１３によってそれぞれのベース期間に割り当てられた演算時間を減算し、それぞれのベース期間の演算空き時間を更新する。なお、ベース期間の演算空き時間は、ベース期間に割り当てられる処理時間のうち、まだプログラムの演算時間が割り当てられていない時間をいう。
【００３４】
判定部１５は、更新後の演算空き時間が負であるか否かに応じて、演算周期内に全てのプログラムの演算を完了できるか否かを判定する。具体的に、判定部１５は、更新後の演算空き時間が負である場合には、演算周期内に演算が完了しないプログラムが存在すると判定する。一方、判定部１５は、更新後の演算空き時間が０以上である場合には、演算周期内に全てのプログラムの演算を完了できると判定する。
【００３５】
出力部１６は、判定部によって演算空き時間が負であると判定された場合に、演算周期内に演算が完了しないプログラムが存在することを示すエラー情報を表示部５０および／または通信部６０に出力する。エラー情報を表示部５０に出力した場合には、例えば、表示部５０にエラーメッセージが表示される。エラー情報を通信部６０に出力した場合には、例えば、通信部６０を介して通信可能な外部機器である管理装置等にエラー情報が送信され、管理装置の表示部等にエラーメッセージが表示される。
【００３６】
次に、図４〜図１３を参照して、上述したスケジューリング処理について説明する。このスケジューリング処理では、例示的に、図２に示す演算時間テーブルに登録されている第１〜第４のプログラムと、図３に示す指定プログラムテーブルに登録されている第１および第２の指定プログラムとの演算タイミングを割り当てる際のスケジューリング処理について説明する。なお、指定プログラムテーブルに指定プログラムが登録されていない場合には、後述する指定プログラムの演算時間を割り当てる際の処理を省略すればよい。
【００３７】
まず、図４に示すように、割り当て部１３は、第１の指定プログラムを四番目のベース期間の先頭に割り当て、第２の指定プログラムを九番目のベース期間の先頭に割り当てる。
【００３８】
続いて、図４および図５に示すように、空き時間更新部１４は、割り当て前の四番目のベース期間の演算空き時間である１００ミリ秒から、第１の指定プログラムの演算時間である１０ミリ秒を減算して、四番目のベース期間の演算空き時間を９０ミリ秒に更新する。また、空き時間更新部１４は、割り当て前の九番目のベース期間の演算空き時間である１００ミリ秒から、第２の指定プログラムの演算時間である３０ミリ秒を減算して、九番目のベース期間の演算空き時間を７０ミリ秒に更新する。
【００３９】
空き時間更新部１４による更新後、判定部１５は、更新後の全てのベース期間の演算空き時間が０以上であるか否かを判定する。この場合には、更新後の全ベース期間の演算空き時間が０以上であるため、判定部１５は、現時点までに割り当てられている全てのプログラムが演算周期内に演算を完了できると判定する。
【００４０】
続いて、図６に示すように、割り当て部１３は、演算周期が最も短い第１のプログラムの演算時間を、ベース期間ごとに、それぞれのベース期間の空き時間領域の先頭にそれぞれ割り当てる。これは、第１のプログラムの演算周期が単位時間と同等の１００ミリ秒であるため、単位時間に相当する一つのベース期間ごとに、第１のプログラムの演算時間を割り当てることとしたものである。これにより、第１のプログラムの演算周期である１００ミリ秒ごとに第１のプログラムを実行させることができる。
【００４１】
続いて、図６および図７に示すように、空き時間更新部１４は、割り当て前の四番目のベース期間の演算空き時間である９０ミリ秒から、第１のプログラムの演算時間である５０ミリ秒を減算して、四番目のベース期間の演算空き時間を４０ミリ秒に更新する。また、空き時間更新部１４は、割り当て前の九番目のベース期間の演算空き時間である７０ミリ秒から、第１のプログラムの演算時間である５０ミリ秒を減算して、九番目のベース期間の演算空き時間を２０ミリ秒に更新する。さらに、空き時間更新部１４は、割り当て前の残りのベース期間の演算空き時間である１００ミリ秒から、第１のプログラムの演算時間である５０ミリ秒を減算して、残りのベース期間の演算空き時間を５０ミリ秒に更新する。
【００４２】
空き時間更新部１４による更新後、判定部１５は、更新後の全てのベース期間の演算空き時間が０以上であるか否かを判定する。この場合には、更新後の全ベース期間の演算空き時間が０以上であるため、判定部１５は、現時点までに割り当てられている全てのプログラムが演算周期内に演算を完了できると判定する。
【００４３】
続いて、図８に示すように、割り当て部１３は、演算周期が二番目に短い第２のプログラムの演算時間を、二つのベース期間からなるベース期間群ごとに、それぞれのベース期間群の空き時間領域の先頭にそれぞれ割り当てる。これは、第２のプログラムの演算周期が単位時間の２倍となる２００ミリ秒であるため、単位時間の２倍に相当する二つのベース期間ごとに、第２のプログラムの演算時間を割り当てることとしたものである。これにより、第２のプログラムの演算周期である２００ミリ秒ごとに第２のプログラムを実行させることができる。
【００４４】
続いて、図８および図９に示すように、空き時間更新部１４は、割り当て前の第二ベース期間群の演算空き時間である９０ミリ秒から、第２のプログラムの演算時間である４０ミリ秒を減算して、第二ベース期間群の演算空き時間を５０ミリ秒に更新する。また、空き時間更新部１４は、割り当て前の第五ベース期間群の演算空き時間である７０ミリ秒から、第２のプログラムの演算時間である４０ミリ秒を減算して、第五ベース期間群の演算空き時間を３０ミリ秒に更新する。さらに、空き時間更新部１４は、割り当て前の残りのベース期間群の演算空き時間である１００ミリ秒から、第２のプログラムの演算時間である４０ミリ秒を減算して、残りのベース期間群の演算空き時間を６０ミリ秒に更新する。
【００４５】
空き時間更新部１４による更新後、判定部１５は、更新後の全てのベース期間の演算空き時間が０以上であるか否かを判定する。この場合には、更新後の全ベース期間の演算空き時間が０以上であるため、判定部１５は、現時点までに割り当てられている全てのプログラムが演算周期内に演算を完了できると判定する。
【００４６】
続いて、図１０に示すように、割り当て部１３は、演算周期が三番目に短い第３のプログラムの演算時間を、五つのベース期間からなるベース期間群ごとに、それぞれのベース期間群の空き時間領域の先頭にそれぞれ割り当てる。これは、第３のプログラムの演算周期が単位時間の５倍となる５００ミリ秒であるため、単位時間の５倍に相当する五つのベース期間ごとに、第３のプログラムの演算時間を割り当てることとしたものである。これにより、第３のプログラムの演算周期である５００ミリ秒ごとに第３のプログラムを実行させることができる。
【００４７】
続いて、図１０および図１１に示すように、空き時間更新部１４は、割り当て前の第一ベース期間群の演算空き時間である１２０ミリ秒から、第３のプログラムの演算時間である５０ミリ秒を減算して、第一ベース期間群の演算空き時間を７０ミリ秒に更新する。また、空き時間更新部１４は、第二ベース期間群の演算空き時間である１４０ミリ秒から、第３のプログラムの演算時間である５０ミリ秒を減算して、第二ベース期間群の演算空き時間を９０ミリ秒に更新する。
【００４８】
空き時間更新部１４による更新後、判定部１５は、更新後の全てのベース期間の演算空き時間が０以上であるか否かを判定する。この場合には、更新後の全ベース期間の演算空き時間が０以上であるため、判定部１５は、現時点までに割り当てられている全てのプログラムが演算周期内に演算を完了できると判定する。
【００４９】
続いて、図１２に示すように、割り当て部１３は、演算周期が最も長い第４のプログラムの演算時間を、十のベース期間からなるベース期間群の空き時間領域の先頭に割り当てる。これは、第４のプログラムの演算周期が単位時間の１０倍となる１０００ミリ秒であるため、単位時間の１０倍に相当する十のベース期間ごとに、第４のプログラムの演算時間を割り当てることとしたものである。これにより、第４のプログラムの演算周期である１０００ミリ秒ごとに第４のプログラムを実行させることができる。
【００５０】
続いて、図１２および図１３に示すように、空き時間更新部１４は、割り当て前のベース期間群の演算空き時間である１６０ミリ秒から、第４のプログラムの演算時間である１００ミリ秒を減算して、ベース期間群の演算空き時間を６０ミリ秒に更新する。
【００５１】
空き時間更新部１４による更新後、判定部１５は、更新後の全てのベース期間の演算空き時間が０以上であるか否かを判定する。この場合には、更新後の全ベース期間の演算空き時間が０以上であるため、判定部１５は、現時点までに割り当てられている全てのプログラムが演算周期内に演算を完了できると判定する。
【００５２】
スケジューリング処理の対象である第１〜第４のプログラムと第１および第２の指定プログラムとの演算タイミングの割り当てが全て終了すると、スケジューリング処理は終了する。スケジュール処理が正常終了した場合には、図１４に示すグラフが表示部５０に表示される。なお、このグラフには、ポインタＰが備えられており、このポインタＰを操作して移動させることで、ポインタ位置に対応するプログラム（機能ブロック）の内容を確認することもできる。
【００５３】
一方、このスケジューリング処理において、いずれかのベース期間の演算空き時間が負であると判定された場合には、演算周期内に演算が完了しないプログラムが存在する旨のエラーメッセージが表示部５０に表示される。
【００５４】
上述してきたように、本実施形態のコントローラ１では、複数のプログラムのそれぞれの演算周期の最大公約数に対応するベース期間を複数設定することができ、この複数のベース期間の中に、複数のプログラムのそれぞれの演算時間を、演算周期が短い順に割り当てることができる。これにより、それぞれ演算周期が異なる複数のプログラムを効率的に演算することが可能となる。
【００５５】
また、スケジューリング処理を行っている際に、いずれかのベース期間の演算空き時間が負になった場合には、演算周期内に演算が完了しないプログラムが存在することを示す情報を表示させることができるため、それぞれのプログラムの演算時間を割り当てる際に、それぞれのプログラムの演算が演算周期内に完了するか否かを確認することが可能となる。
【００５６】
なお、上述した実施形態では、演算周期ごとに一のプログラムが存在する場合について説明しているが、演算周期ごとに複数のプログラムが存在する場合にも本発明を適用することができる。演算周期ごとに複数のプログラムが存在する場合には、上述した演算周期ごとに一のプログラムが存在する場合と同様に、一のプログラムごとに、プログラムのそれぞれの演算時間を、それぞれの演算周期に応じて定められる所定のベース期間群の中に、演算周期が短い順に割り当てていくこととしてもよいが、これに限定されず、以下のように処理することとしてもよい。
【００５７】
例えば、演算周期ごとに複数のプログラムの総演算時間を予め集計しておき、演算周期ごとの総演算時間を、それぞれの演算周期に応じて定められる所定のベース期間群の中に、演算周期が短い順に割り当てていくこととしてもよい。この場合には、例えば、図２に示す演算時間テーブルのプログラムＩＤを、演算周期ごとのプログラム群ＩＤに置き換え、演算時間テーブルの機能ブロック数および演算時間に、演算周期ごとに集計した総機能ブロック数および総演算時間をそれぞれ格納することとしてもよい。そして、割り当て部１３が、演算周期ごとの総演算時間を、それぞれの演算周期に応じて定められる所定のベース期間群の中に、演算周期が短い順に割り当てることとすればよい。これにより、例えばプログラム数が膨大に存在する場合には、それぞれのプログラムの演算時間を演算周期単位でまとめて割り当てることができるため、処理効率を向上させることができる。また、この場合には、図１４に示すグラフは、演算周期ごとの複数のプログラムの総演算時間の割合をベース期間ごとに表示することとしてもよい。
【００５８】
また、上述した実施形態では、複数のプログラムのそれぞれの演算周期の最小公倍数を完了時間としているが、完了時間の設定はこれに限定されない。例えば、複数のプログラムのそれぞれの演算周期の最も長い演算周期を完了時間としてもよい。例えば、二つのプログラムのそれぞれの演算周期が、１００ミリ秒と２５０ミリ秒とである場合には、完了時間は２５０ミリ秒となる。
【符号の説明】
【００５９】
１…コントローラ、１０…スケジューラ、１１…単位時間算出部、１２…完了時間算出部、１３…割り当て部、１４…空き時間更新部、１５…判定部、１６…出力部、２０…演算部、３０…記憶部、４０…入力部、５０…表示部、６０…通信部、７０…バス。
【図１】
2010160599.tif 000003
【図２】
2010160599.tif 000004
【図３】
2010160599.tif 000005
【図４】
2010160599.tif 000006
【図５】
2010160599.tif 000007
【図６】
2010160599.tif 000008
【図７】
2010160599.tif 000009
【図８】
2010160599.tif 000010
【図９】
2010160599.tif 000011
【図１０】
2010160599.tif 000012
【図１１】
2010160599.tif 000013
【図１２】
2010160599.tif 000014
【図１３】
2010160599.tif 000015
【図１４】
2010160599.tif 000016