(57)【要約】  実行時間推定プログラムが、ラダープログラムから、ファームウエアで実行されるＳＷ命令と当該ＳＷ命令の実行条件との組を抽出して組情報とし、実行条件で共通のデバイスが用いられる組情報の集合である第１の組集合毎にグループ分けを行なうことによって、デバイス共通グループを生成し、デバイス共通グループの中で同時に実行される可能性のあるＳＷ命令を有した組情報の集合である第２の組集合毎にグループ分けを行なうことによって、同時実行グループを生成し、各デバイス共通グループに対し、デバイス共通グループ内の同時実行グループの中から、ＳＷ命令の実行時間が最も長くなる同時実行グループを抽出し、抽出した同時実行グループを実行した場合のＳＷ命令の実行時間に基づいて、ラダープログラムを一通り実行した場合のスキャンタイムのうち、実行時間が最も長くなる場合のスキャンタイムを算出すること、をコンピュータに実行させる。
2016017004.tif 000002
【特許請求の範囲】
【請求項１】
コントローラで用いられるラダープログラムの実行時間を推定する処理をコンピュータに実行させる実行時間推定プログラムであって、
前記コンピュータに、
前記ラダープログラムから、ファームウエアで実行されるソフトウエア命令と、当該ソフトウエア命令の実行条件と、の組を、複数抽出して組情報とする組合せ抽出ステップと、
抽出された複数の組情報に対し、前記実行条件で共通のデバイスが用いられる組情報の集合である第１の組集合毎にグループ分けを行なうことによって、前記第１の組集合が入れられたデバイス共通グループを、前記第１の組集合毎に生成する共通グループ生成ステップと、
前記デバイス共通グループの中で同時に実行される可能性のあるソフトウエア命令を有した組情報の集合である第２の組集合毎にグループ分けを行なうことによって、前記第２の組集合が入れられた同時実行グループを、前記第２の組集合毎に生成する同時実行グループ生成ステップと、
各前記デバイス共通グループに対し、前記デバイス共通グループ内の同時実行グループの中から、前記ソフトウエア命令の実行時間が最も長くなる同時実行グループを抽出するグループ抽出ステップと、
抽出した同時実行グループを実行した場合の前記ソフトウエア命令の実行時間に基づいて、前記ラダープログラムを一通り実行した場合のスキャンタイムのうち、実行時間が最も長くなる場合のスキャンタイムを算出するスキャンタイム算出ステップと、
を実行させることを特徴とする実行時間推定プログラム。
【請求項２】
前記同時実行グループ生成ステップでは、
前記コンピュータに、
前記実行条件のうちの第１の実行条件と前記実行条件のうちの第２の実行条件との積が解を有するか否かに基づいて、前記第１の実行条件に対応するソフトウエア命令と、前記第２の実行条件に対応するソフトウエア命令と、が同時に実行される可能性があるか否かを判定する処理
を実行させることを特徴とする請求項１に記載の実行時間推定プログラム。
【請求項３】
前記共通グループ生成ステップでは、
前記コンピュータに、
前記複数の組情報の中から任意の１つの組情報を選択する処理と、
選択した組情報を前記デバイス共通グループに入れる処理と、
前記選択した組情報の実行条件に含まれるデバイスに基づいて、グループ分けの行われていない組情報の何れかを前記デバイス共通グループに入れる処理と、
を実行させることを特徴とする請求項１または２に記載の実行時間推定プログラム。
【請求項４】
前記共通グループ生成ステップでは、
前記コンピュータに、
前記デバイス共通グループの中に入れることのできる組情報がなくなると、前記複数の組情報の中からグループ分けの行われていない任意の１つの組情報を新たに選択する処理と、
新たに選択した組情報を新たなデバイス共通グループに入れる処理と、
前記新たに選択した組情報の実行条件に含まれるデバイスに基づいて、グループ分けの行われていない組情報の何れかを前記新たなデバイス共通グループに入れる処理と、
を実行させることを特徴とする請求項３に記載の実行時間推定プログラム。
【請求項５】
前記グループ抽出ステップでは、
前記コンピュータに、
前記デバイス共通グループ毎に前記実行時間が最も長くなる同時実行グループを抽出する処理を実行させ、
前記スキャンタイム算出ステップでは、
前記コンピュータに、
前記デバイス共通グループ毎に前記ソフトウエア命令の実行時間を算出する処理と、算出した各実行時間の合計時間と、前記ラダープログラムのうちハードウエアで実行されるハードウエア命令の実行時間の合計時間と、を合算することによって、前記実行時間が最も長くなる場合のスキャンタイムを算出する処理と、
を実行させることを特徴とする請求項１から４のいずれか１つに記載の実行時間推定プログラム。
【請求項６】
コントローラで用いられるラダープログラムから、ファームウエアで実行されるソフトウエア命令と、当該ソフトウエア命令の実行条件と、の組を、複数抽出して組情報とする組合せ抽出部と、
抽出された複数の組情報に対し、前記実行条件で共通のデバイスが用いられる組情報の集合である第１の組集合毎にグループ分けを行なうことによって、前記第１の組集合が入れられたデバイス共通グループを、前記第１の組集合毎に生成する共通グループ生成部と、
前記デバイス共通グループの中で同時に実行される可能性のあるソフトウエア命令を有した組情報の集合である第２の組集合毎にグループ分けを行なうことによって、前記第２の組集合が入れられた同時実行グループを、前記第２の組集合毎に生成する同時実行グループ生成部と、
前記デバイス共通グループ内の同時実行グループの中から、前記ソフトウエア命令の実行時間が最も長くなる同時実行グループを抽出するグループ抽出部と、
抽出した同時実行グループを実行した場合の前記ソフトウエア命令の実行時間に基づいて、前記ラダープログラムを一通り実行した場合のスキャンタイムのうち、実行時間が最も長くなる場合のスキャンタイムを算出するスキャンタイム算出部と、
を備えることを特徴とする実行時間推定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シーケンスプログラムの実行時間を推定する実行時間推定プログラムおよび実行時間推定装置に関する。
【背景技術】
【０００２】
生産装置に求められる機能の高度化、複雑化に伴い、生産装置の動作を制御するＦＡコントローラのプログラムも複雑化し容量も拡大し続けている。ＦＡコントローラで主に用いられるプログラミング言語は、ラダープログラムである。このラダープログラムは、汎用機で広く用いられているＣ，Ｃ＋＋といった高級言語と比較し、大規模なプログラムの開発を支援するツールが整備されていない。【０００３】
ラダープログラムは、リレーとコイルといった電子部品からシーケンス制御信号を作りだす制御盤をメタファーとしたプログラミング言語であり、プログラミングの知識が無い電気設計者、現場の技術者にも容易に理解できることを目指して作られた。このようなラダープログラムでは、数多くの入力デバイスの値および内部状態の値から、論理式によって出力デバイスの値を決める処理を容易に記述することができる。また、ラダープログラムにおける制御の流れは、基本的にはラダープログラムの上から下に順に実行し、最後まで実行が終わったら最初に戻り再度実行するといった処理が繰り返されるものである。【０００４】
上述したように、ラダープログラムは大規模化する傾向にある。このような場合であっても、生産装置の制御を考えると、周辺装置との協調動作やエラー判定の必要上、ラダープログラムを一通り上から下まで実行する時間であるスキャンタイムが一定時間内に収まるようラダープログラムの設計を行う必要がある。ところが、ラダープログラムが大規模になった場合、スキャンタイムを正確に見積もることが困難となる。【０００５】
このため、特許文献１に記載のＰＬＣシミュレータは、ラダープログラムに使用される各命令のＰＬＣにおける実行処理時間データを用いている。そして、ＰＬＣシミュレータは、ラダープログラムの模擬実行処理において、ラダープログラムを構成するニモニックコマンド毎の処理時間及び通信の周辺処理時間を積算し、これにより実行論理時間を生成している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−２０９４１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記従来の技術では、ラダープログラムの平均的な実行時間しか求めることができず、最も時間がかかるケースでのスキャンタイムを見積もることができないという問題があった。【０００８】
本発明は、上記に鑑みてなされたものであって、ラダープログラムに対して、最も時間がかかるケースでのスキャンタイムを見積もることができる実行時間推定プログラムおよび実行時間推定装置を得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、コントローラで用いられるラダープログラムの実行時間を推定する処理をコンピュータに実行させる実行時間推定プログラムであって、前記コンピュータに、前記ラダープログラムから、ファームウエアで実行されるソフトウエア命令と、当該ソフトウエア命令の実行条件と、の組を、複数抽出して組情報とする組合せ抽出ステップと、抽出された複数の組情報に対し、前記実行条件で共通のデバイスが用いられる組情報の集合である第１の組集合毎にグループ分けを行なうことによって、前記第１の組集合が入れられたデバイス共通グループを、前記第１の組集合毎に生成する共通グループ生成ステップと、前記デバイス共通グループの中で同時に実行される可能性のあるソフトウエア命令を有した組情報の集合である第２の組集合毎にグループ分けを行なうことによって、第２の組集合が入れられた同時実行グループを、前記第２の組集合毎に生成する同時実行グループ生成ステップと、前記デバイス共通グループ内の同時実行グループの中から、前記ソフトウエア命令の実行時間が最も長くなる同時実行グループを抽出するグループ抽出ステップと、抽出した同時実行グループを実行した場合の前記ソフトウエア命令の実行時間に基づいて、前記ラダープログラムを一通り実行した場合のスキャンタイムのうち、実行時間が最も長くなる場合のスキャンタイムを算出するスキャンタイム算出ステップと、を実行させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、ラダープログラムに対して、最も時間がかかるケースでのスキャンタイムを見積もることが可能になるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施の形態に係る実行時間推定装置の構成を示す図である。
【図２】図２は、ラダー図表現されたラダープログラムの一例を示す図である。
【図３】図３は、ＩＬ（Instruction  List）表現されたラダープログラムの一例を示す図である。
【図４】図４は、実行時間推定装置による実行時間の推定処理手順を示すフローチャートである。
【図５】図５は、ラダー枝の抽出処理を説明するための図である。
【図６】図６は、デバイス共通グループの生成処理手順を示すフローチャートである。
【図７】図７は、デバイス共通グループの生成処理を説明するための図である。
【図８】図８は、同時実行グループの生成処理手順を示すフローチャートである。
【図９】図９は、同時実行グループの生成処理を説明するための図である。
【図１０】図１０は、最大スキャンタイムの算出処理例を説明するための図である。
【図１１】図１１は、実行時間推定装置のハードウエア構成を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明の実施の形態に係る実行時間推定プログラムおよび実行時間推定装置を図面に基づいて詳細に説明する。なお、本実施の形態により本発明が限定されるものではない。
【００１３】
実施の形態
図１は、本発明の実施の形態に係る実行時間推定装置の構成を示す図である。実行時間推定装置１０は、シーケンスプログラムの実行時間を推定するコンピュータなどである。以下では、シーケンスプログラムが、ＰＬＣ（Programmable  Logic  Controller）などのコントローラで用いられるラダープログラムである場合について説明する。
【００１４】
実行時間推定装置１０は、ラダープログラムを一通り上から下まで実行する時間であるスキャンタイムを、ラダープログラムの実行時間として算出する。本実施の形態の実行時間推定装置１０は、ラダープログラムの実行時間が最も長くなる場合のスキャンタイム（以下、最大スキャンタイム３０という）を推定する。
【００１５】
ラダープログラムには、実行条件が真の時のみ実行されるＳＷ（ソフトウエア）命令が含まれている。このため、ラダープログラムが実行された場合、ＳＷ命令が実行される場合と、実行されない場合とで、ラダープログラムの実行時間が異なることとなる。実行時間推定装置１０は、ラダープログラムを最初から最後まで実行した場合に最も時間がかかるケースでの最大スキャンタイム３０を推定する。
【００１６】
実行時間推定装置１０は、受付部１１、回路ブロック抽出部１２、組合せ情報抽出部１３、ＳＷ命令群抽出部（同時実行グループ生成部）１４、実行時間推定部（グループ抽出部、スキャンタイム算出部）１５、出力部１６、記憶部１７、共通グループ生成部１８を備えている。
【００１７】
受付部１１は、ラダープログラムのＩＬ（Instruction  List）表現を示すＩＬ表現情報２０を受付ける。受付部１１は、データベースなどの外部装置から入力されたＩＬ表現情報２０を回路ブロック抽出部１２に送る。
【００１８】
ラダープログラムは、ラダー図表現やＩＬ表現で表される。図２は、ラダー図表現されたラダープログラムの一例を示す図である。図３は、ＩＬ表現されたラダープログラムの一例を示す図である。図２と図３に示すラダープログラムは、同じものである。
【００１９】
ラダープログラムには、ハードウエアにて実行されるＨＷ（ハードウエア）命令と、ファームウエアにて実行されるＳＷ命令とが含まれている。ＰＬＣのアーキテクチャでは、ＨＷ命令は、前段での論理式の値に関わらず実行され、ＳＷ命令は、前段の論理式が真の時のみ実行される。
【００２０】
ＨＷ命令は、一定の時間を要する命令である。ＳＷ命令が実行されるか否かは、ＳＷ命令の前段に連なる論理式（以下、実行条件部という）の値によって決められる。具体的には、ＳＷ命令は、実行条件部の値が真になる場合にのみ実行される。このため、ＳＷ命令は、実行条件部の値が真になる場合にのみ実行時間がかかる。本実施の形態の実行時間推定装置１０は、ＳＷ命令のうち、同時に実行されることのないＳＷ命令群に基づいて、最大スキャンタイム３０を推定する。
【００２１】
ＨＷ命令は、
LD    X0
AND    X1
OUT    Y102
などである。
【００２２】
ＳＷ命令は、SwOp0〜SwOp5などである。そして、SwOp0の実行条件部が、
LD    X0
AND    X1
である。
【００２３】
したがって、
LD    X0
AND    X1
が真の時のみ、SwOp0が実行されることとなる。
【００２４】
回路ブロック抽出部１２は、ＩＬ表現情報２０内からＩＬ表現で示された回路ブロックを抽出する。回路ブロック抽出部１２は、抽出した各回路ブロックを、組合せ情報抽出部１３に送る。
【００２５】
組合せ情報抽出部１３は、ＩＬ表現された回路ブロック内からＳＷ命令と、ＳＷ命令の実行条件部との組を備えた組情報（以下、ラダー枝という）を抽出する。組合せ情報抽出部１３は、抽出したラダー枝を共通グループ生成部１８に送る。
【００２６】
共通グループ生成部１８は、ラダー枝に基づいて、実行条件部に共通のデバイスが使われるラダー枝の集合である第１の組集合をラダー枝毎にグルーピングする。共通グループ生成部１８は、実行条件部に共通のデバイスが使われるラダー枝集合（以下、デバイス共通グループという）を生成することによってラダー枝をグルーピングする。
【００２７】
換言すると、共通グループ生成部１８は、抽出された複数のラダー枝に対し、実行条件部で共通のデバイスが用いられるラダー枝（以下、共通ラダー枝という）の集合毎にグループ分けを行なう。これにより、共通グループ生成部１８は、共通ラダー枝が入れられたデバイス共通グループを、共通ラダー枝毎に生成する。共通グループ生成部１８は、デバイス共通グループをＳＷ命令群抽出部１４に送る。
【００２８】
ＳＷ命令群抽出部１４は、デバイス共通グループの中で同時に実行される可能性のあるラダー枝集合である第２の組集合をラダー枝集合（以下、ＳＷ命令群という）毎にグルーピングする。これにより、ＳＷ命令群抽出部１４は、ＳＷ命令群が入れられたグループ、つまり後述する同時実行グループを、ＳＷ命令群毎に生成する。
【００２９】
実行条件部で共通のデバイスが用いられるラダー枝集合が共通ラダー枝であり、この共通ラダー枝が入れられたグループがデバイス共通グループである。したがって、共通ラダー枝毎にデバイス共通グループが生成される。そして、デバイス共通グループ内で同時に実行される可能性のあるラダー枝集合が、ＳＷ命令群であり、このＳＷ命令群が入れられたグループが同時実行グループである。
【００３０】
デバイス共通グループ内でラダー枝が同時実行グループ毎にグループ分けされることによって、デバイス共通グループ内で同時に実行されることのないラダー枝集合が異なるグループに設定される。したがって、同一の同時実行グループに入っているラダー枝同士は、同時に実行される可能性のあるラダー枝であり、異なる同時実行グループに入っているラダー枝同士は、同時に実行されることのないラダー枝である。ＳＷ命令群抽出部１４は、グルーピング結果を、実行時間推定部１５に送る。
【００３１】
記憶部１７は、インストラクション実行時間データ２１を記憶する例えばメモリである。インストラクション実行時間データ２１は、各ＳＷ命令の実行時間および各ＨＷ命令の実行時間の情報を含んでいる。具体的には、インストラクション実行時間データ２１では、ＳＷ命令と実行時間とが対応付けされ、ＨＷ命令と実行時間とが対応付けされている。
【００３２】
実行時間推定部１５は、グルーピング結果およびインストラクション実行時間データ２１に基づいて、最大スキャンタイム３０を推定する。具体的には、実行時間推定部１５は、同時に実行されることのないラダー枝集合であるＳＷ命令群、つまり同時実行グループに対し、ＳＷ命令群毎の実行時間を推定する。実行時間推定部１５は、デバイス共通グループ毎にＳＷ命令群を設定し、デバイス共通グループ毎にＳＷ命令群毎の実行時間を推定する。
【００３３】
そして、実行時間推定部１５は、デバイス共通グループの中のＳＷ命令群の中で各命令の実行時間の合計が最も長いＳＷ命令群を最大スキャンタイム３０に寄与するＳＷ命令群に採用する。実行時間推定部１５は、デバイス共通グループ毎に最大スキャンタイム３０に寄与するＳＷ命令群を設定する。
【００３４】
実行時間推定部１５は、最大スキャンタイム３０に寄与するＳＷ命令群に対し、インストラクション実行時間データ２１に基づいて、最大スキャンタイム３０に寄与するＳＷ命令群の実行時間を算出する。また、実行時間推定部１５は、ＨＷ命令に対し、インストラクション実行時間データ２１に基づいて、ＨＷ命令の実行時間を算出する。
【００３５】
実行時間推定部１５は、デバイス共通グループ毎のＳＷ命令群の実行時間を全て加算することによって、ＳＷ命令の最大の実行時間を推定する。実行時間推定部１５は、ＳＷ命令の最大の実行時間と、ＨＷ命令の実行時間とを加算することによって最大スキャンタイム３０を推定する。
【００３６】
換言すると、実行時間推定部１５は、デバイス共通グループ毎にＳＷ命令の実行時間を算出する処理と、算出した各実行時間の合計時間と、ＨＷ命令の実行時間の合計時間とを合算する処理とを実行することによって、最大スキャンタイム３０を算出する。実行時間推定部１５は、最大スキャンタイム３０を出力部１６に送る。出力部１６は、最大スキャンタイム３０を外部装置に出力する。
【００３７】
つぎに、実行時間推定装置１０による実行時間の推定処理手順について説明する。図４は、実行時間推定装置による実行時間の推定処理手順を示すフローチャートである。実行時間推定装置１０の受付部１１は、ＩＬ表現情報２０を受付けると、ＩＬ表現情報２０を回路ブロック抽出部１２に送る。
【００３８】
回路ブロック抽出部１２は、ＩＬ表現情報２０内からＩＬ表現で示された回路ブロックを抽出する（ステップＳ１０）。組合せ情報抽出部１３は、回路ブロックからＳＷ命令と、ＳＷ命令の実行条件部と、を抽出する。具体的には、組合せ情報抽出部１３は、各回路ブロックのＩＬ表現に対して、ＡＮＤノードとＯＲノードとを、入れ子を用いた木表現（以下、ラダー木という）に変換する。そして、組合せ情報抽出部１３は、各ラダー木に対して先頭から順にラダー木を巡回し、ラダー木から、ＳＷ命令と、ＳＷ命令の実行条件部との組であるラダー枝を抽出する（ステップＳ２０）。
【００３９】
図５は、ラダー枝の抽出処理を説明するための図である。各回路ブロックのＩＬ表現は、ラダー木に変換される。そして、各ラダー木からは、ＳＷ命令と、ＳＷ命令の実行条件部との組であるラダー枝が抽出される。組合せ情報抽出部１３は、抽出したラダー枝を共通グループ生成部１８に送る。
【００４０】
共通グループ生成部１８は、ラダー枝に基づいて、実行条件部に共通のデバイスが使われるラダー枝毎にグルーピングする（ステップＳ３０）。共通グループ生成部１８は、実行条件部に共通のデバイスが使われる共通ラダー枝の集合、つまりデバイス共通グループを生成することによってラダー枝をグルーピングする。共通グループ生成部１８は、共通ラダー枝の入れられたデバイス共通グループをＳＷ命令群抽出部１４に送る。
【００４１】
ＳＷ命令群抽出部１４は、デバイス共通グループの中で同時に実行される可能性のあるラダー枝集合をグルーピングする。これにより、ＳＷ命令群抽出部１４は、デバイス共通グループの中で同時に実行されることのないラダー枝集合をグルーピングする（ステップＳ４０）。ＳＷ命令群抽出部１４は、デバイス共通グループ毎に、ラダー枝集合をグルーピングする。ＳＷ命令群抽出部１４は、デバイス共通グループの中で同時に実行されることのないラダー枝集合を、同時に実行されることのないＳＷ命令群として実行時間推定部１５に送る。
【００４２】
実行時間推定部１５は、同時に実行されることのないＳＷ命令群に基づいて、最大スキャンタイム３０を推定する（ステップＳ５０）。具体的には、実行時間推定部１５は、各デバイス共通グループ内でＳＷ命令群毎の実行時間を比較する。この比較のとき、実行時間推定部１５は、インストラクション実行時間データ２１に基づいて、各ＳＷ命令群の実行時間を算出し、ＳＷ命令群の実行時間同士を比較する。
【００４３】
実行時間推定部１５は、ＳＷ命令群の中で実行時間の最も長いＳＷ命令群の実行時間を、デバイス共通グループ毎に抽出し、抽出した各実行時間を全て積算する。実行時間推定部１５は、積算結果をＳＷ命令の最大の実行時間とし、ＨＷ命令の実行時間と足し合わせることによって最大スキャンタイム３０を推定する。
【００４４】
つぎに、デバイス共通グループの生成処理について説明する。図６は、デバイス共通グループの生成処理手順を示すフローチャートである。図７は、デバイス共通グループの生成処理を説明するための図である。
【００４５】
図７では、図５の説明で抽出された全てのラダー枝集合を、全ラダー枝集合５０として示している。全ラダー枝集合５０内には、SwOp0〜SwOp5に対応するラダー枝４１〜４５が含まれている。共通グループ生成部１８は、デバイス共通グループを１つ生成する（ステップＳ２１）。図７では、デバイス共通グループ５１が生成された場合を示している。このデバイス共通グループ５１は、生成された時点では空であり（ｓｔ１００）、ラダー枝集合が入っていない。
【００４６】
共通グループ生成部１８は、デバイス共通グループ５１を生成した後に、全ラダー枝集合５０の中から任意のラダー枝を１つ選択し、生成したデバイス共通グループ５１内に入れる（ステップＳ２２）。デバイス共通グループ５１内に入れられたラダー枝は、全ラダー枝集合５０内から削除される。図７では、SwOp0のラダー枝４１が選択されて（ｓｔ１０１）、デバイス共通グループ５１内に入れられた場合を示している（ｓｔ１０２）。
【００４７】
共通グループ生成部１８は、全ラダー枝集合５０内に、他に選択できるラダー枝が有るかを確認する（ステップＳ２３）。全ラダー枝集合５０内に選択できるラダー枝が有る場合（ステップＳ２３、Ｙｅｓ）、共通グループ生成部１８は、ラダー枝４１で用いられている全てのデバイスＸ０，Ｘ１について全ラダー枝集合５０内を調べたかを確認する（ステップＳ２４）。
【００４８】
全てのデバイスについて調べていない場合（ステップＳ２４、Ｎｏ）、共通グループ生成部１８は、デバイス共通グループ５１内のラダー枝４１が有する実行条件部で使われているデバイスＸ０，Ｘ１で、未調査のデバイスを１つ選択する（ステップＳ２５）。共通グループ生成部１８は、例えば、デバイスＸ０を選択する。
【００４９】
共通グループ生成部１８は、全ラダー枝集合５０の中から、選択したデバイスＸ０を実行条件部で用いているすべてのラダー枝を選択する（ステップＳ２６）。共通グループ生成部１８は、選択したラダー枝を、共通デバイスＸ０を持つデバイス共通グループに入れるとともに、全ラダー枝集合から削除する（ステップＳ２７）。図７では、SwOp3のラダー枝４３が選択されて、デバイス共通グループ５１内に入れられた場合を示している（ｓｔ１０３）。
【００５０】
この後、共通グループ生成部１８は、全ラダー枝集合５０内に、他に選択できるラダー枝が有るかを確認する（ステップＳ２３）。全ラダー枝集合５０内に選択できるラダー枝が有る場合（ステップＳ２３、Ｙｅｓ）、共通グループ生成部１８は、ラダー枝４１で用いられている全てのデバイスＸ０，Ｘ１について全ラダー枝集合５０内を調べたかを確認する（ステップＳ２４）。
【００５１】
全てのデバイスＸ０，Ｘ１について調べていない場合（ステップＳ２４、Ｎｏ）、共通グループ生成部１８は、デバイス共通グループ５１内のラダー枝４１が有する実行条件部で使われているデバイスＸ０，Ｘ１で、未調査のデバイスを１つ選択する（ステップＳ２５）。共通グループ生成部１８は、例えば、デバイスＸ１を選択する。
【００５２】
共通グループ生成部１８は、全ラダー枝集合５０の中から、選択したデバイスＸ１を実行条件部で用いているラダー枝を選択する（ステップＳ２６）。共通グループ生成部１８は、選択したラダー枝を、共通デバイスを持つデバイス共通グループに入れるとともに、全ラダー枝集合から削除する（ステップＳ２７）。図７では、SwOp5のラダー枝４５が選択されて、デバイス共通グループ５１内に入れられた場合を示している（ｓｔ１０４）。
【００５３】
この後、共通グループ生成部１８は、全ラダー枝集合５０内に、他に選択できるラダー枝が有るかを確認する（ステップＳ２３）。全ラダー枝集合５０内に選択できるラダー枝が有る場合（ステップＳ２３、Ｙｅｓ）、共通グループ生成部１８は、ラダー枝４１で用いられている全てのデバイスＸ０，Ｘ１について調べたかを確認する（ステップＳ２４）。
【００５４】
全てのデバイスＸ０，Ｘ１について調べた場合（ステップＳ２４、Ｙｅｓ）、共通グループ生成部１８は、全ラダー枝集合５０に対し、ラダー枝がなくなるまでステップＳ２１〜Ｓ２７の処理を繰り返す。
【００５５】
すなわち、共通グループ生成部１８は、デバイス共通グループを１つ生成する（ステップＳ２１）（ｓｔ１０５）。図７では、デバイス共通グループ５２が生成された場合を示している。このデバイス共通グループ５２は、生成された時点では空であり、ラダー枝集合が入っていない。
【００５６】
共通グループ生成部１８は、デバイス共通グループ５２を設定した後に、全ラダー枝集合５０の中から任意のラダー枝を１つ選択し、生成したデバイス共通グループ５２内に入れる（ステップＳ２２）。デバイス共通グループ５２内に入れられたラダー枝は、全ラダー枝集合５０内から削除される。図７では、SwOp4のラダー枝４４が選択されて、デバイス共通グループ５２内に入れられた場合を示している（ｓｔ１０６）。
【００５７】
共通グループ生成部１８は、全ラダー枝集合５０内に、他に選択できるラダー枝が有るかを確認する（ステップＳ２３）。全ラダー枝集合５０内に選択できるラダー枝が有る場合（ステップＳ２３、Ｙｅｓ）、共通グループ生成部１８は、ラダー枝４４で用いられている全てのデバイスＸ１１について全ラダー枝集合５０内を調べたかを確認する（ステップＳ２４）。
【００５８】
全てのデバイスについて調べていない場合（ステップＳ２４、Ｎｏ）、共通グループ生成部１８は、デバイス共通グループ５２内のラダー枝４４が有する実行条件部で使われているデバイスで、未調査のデバイスを１つ選択する（ステップＳ２５）。共通グループ生成部１８は、例えば、デバイスＸ１１を選択する。
【００５９】
共通グループ生成部１８は、全ラダー枝集合５０の中から、選択したデバイスＸ１１を実行条件部で用いているラダー枝を選択する（ステップＳ２６）。共通グループ生成部１８は、選択したラダー枝を、共通デバイスを持つデバイス共通グループに入れるとともに、全ラダー枝集合から削除する（ステップＳ２７）。図７では、SwOp1のラダー枝４２が選択されて、デバイス共通グループ５２内に入れられた場合を示している（ｓｔ１０７）。
【００６０】
この後、共通グループ生成部１８は、全ラダー枝集合５０内に、他に選択できるラダー枝が有るかを確認する（ステップＳ２３）。全ラダー枝集合５０内に選択できるラダー枝が無い場合（ステップＳ２３、Ｎｏ）、共通グループ生成部１８は、デバイス共通グループの生成処理を終了する。
【００６１】
このように、共通グループ生成部１８は、選択した任意のラダー枝が有している実行条件部と同じ実行条件部を有しているラダー枝を同一のデバイス共通グループ内に設定する。これにより、共通グループ生成部１８は、同一の実行条件部を有したラダー枝が同一のデバイス共通グループ内に収まるよう各ラダー枝をグルーピングする。図７では、デバイスＸ０，Ｘ１，Ｘ２を実行条件部に持つSwOp0，SwOp3，SwOp5と、デバイスＸ１１，Ｘ１０を実行条件部に持つSwOp4，SwOp1の２つの組にグルーピングされた場合を示している。
【００６２】
つぎに、各デバイス共通グループの中で同時に実行される可能性のあるラダー枝集合（同時実行グループ）を生成する処理について説明する。図８は、同時実行グループの生成処理手順を示すフローチャートである。図９は、同時実行グループの生成処理を説明するための図である。
【００６３】
図８に示す処理は、共通デバイスを持つラダー枝集合の各々に対して行われる。換言すると、図８に示す処理は、デバイス共通グループ毎に行われる処理である。図８，図９では、デバイス共通グループ５１内の各ラダー枝を、何れかの同時実行グループに振り分ける処理について説明する。
【００６４】
図９に示すように、デバイス共通グループ５１には、SwOp0のラダー枝４１、SwOp3のラダー枝４３、SwOp5のラダー枝４５が含まれている。ＳＷ命令群抽出部１４は、同時実行する可能性のあるラダー枝集合として、同時実行グループを１つ生成する（ステップＳ３１）。図９では、同時実行グループ６１が生成された場合を示している。この同時実行グループ６１は、生成された時点では空であり（ｓｔ２００）、ラダー枝集合が入っていない。
【００６５】
ＳＷ命令群抽出部１４は、同時実行グループ６１を生成した後に、デバイス共通グループ５１の中から任意のラダー枝を１つ選択し、生成した同時実行グループ６１内に入れる（ステップＳ３２）。同時実行グループ６１内に入れられたラダー枝は、デバイス共通グループ５１内から削除される。図９では、SwOp0のラダー枝４１が選択されて（ｓｔ２０１）、同時実行グループ６１内に入れられた場合を示している（ｓｔ２０２）。
【００６６】
ＳＷ命令群抽出部１４は、共通デバイスを持つラダー枝集合の要素が空であるか否かを確認する（ステップＳ３３）。換言すると、ＳＷ命令群抽出部１４は、何れかのデバイス共通グループにラダー枝が残っているか否かを確認する。
【００６７】
デバイス共通グループ５１内に選択できるラダー枝が有る場合（ステップＳ３３、Ｎｏ）、ＳＷ命令群抽出部１４は、デバイス共通グループ５１内から未調査のラダー枝を１つ選択する（ステップＳ３４）。ＳＷ命令群抽出部１４は、例えば、SwOp3のラダー枝４３を選択する。
【００６８】
ＳＷ命令群抽出部１４は、同時実行グループ６１に属するラダー枝４１の実行条件と、選択されたラダー枝４３の実行条件との積が、解を持つか否かを判定する（ステップＳ３５）。ラダー枝４１とラダー枝４３とが同時に実行される可能性がある場合、ラダー枝４１，４３の実行条件の積が解を持つ。一方、ラダー枝４１とラダー枝４３とが同時に実行されない場合、ラダー枝４１，４３の実行条件の積は解を持たない。
【００６９】
ここでのＳＷ命令群抽出部１４は、（Ｘ０＊Ｘ１）＊（（ＮＯＴ  Ｘ０）＋（ＮＯＴ  Ｘ２））＝ＴＲＵＥであるか否かを判定する。ＳＷ命令群抽出部１４は、ラダー枝４１，４３の実行条件の積が解を持つ場合（ステップＳ３６、Ｙｅｓ）、選択したラダー枝４３を、同時実行グループ６１に入れ、デバイス共通グループ５１から削除する（ステップＳ３７）。図９では、SwOp3のラダー枝４３が選択されて、同時実行グループ６１内に入れられた場合を示している（ｓｔ２０３）。
【００７０】
ＳＷ命令群抽出部１４は、例えば、ＳＭＴ（SATISFIABLE  MODULO  THEORIES）に基づいて、実行条件の積が解を持つか否かの判定を行う。ＳＭＴは、特定分野の数学的な体系を表す算術の理論、集合の理論などである。幾つかのＳＭＴソルバでは、一階述語論理の充足可能性判定問題を解くことができる。なお、ＳＭＴは、制約充足の可否だけでなく、制約が充足する場合の変数への割り当て方の情報を含んでいる。
【００７１】
ＳＷ命令群抽出部１４は、デバイス共通グループ５１内に未調査のラダー枝があるかを確認する（ステップＳ３８）。未調査のラダー枝がある場合（ステップＳ３８、Ｙｅｓ）、ＳＷ命令群抽出部１４は、共通デバイスを持つラダー枝集合の要素が空であるか否かを確認する（ステップＳ３３）。
【００７２】
デバイス共通グループ５１内に選択できるラダー枝が有る場合（ステップＳ３３、Ｎｏ）、ＳＷ命令群抽出部１４は、デバイス共通グループ５１内から未調査のラダー枝を１つ選択する（ステップＳ３４）。ＳＷ命令群抽出部１４は、例えば、SwOp5のラダー枝４５を選択する。
【００７３】
ＳＷ命令群抽出部１４は、同時実行グループ６１に属するラダー枝４１，４３の実行条件と、選択されたラダー枝４５の実行条件との積が、解を持つか否かを判定する（ステップＳ３５）。ここでのＳＷ命令群抽出部１４は、（Ｘ０＊Ｘ１）＊（（ＮＯＴ  Ｘ０）＋（ＮＯＴ  Ｘ２））＊（ＮＯＴ  Ｘ１）＝ＴＲＵＥであるか否かを判定する。
【００７４】
ＳＷ命令群抽出部１４は、ラダー枝４１，４３，４５の実行条件の積が解を持たない場合（ステップＳ３６、Ｎｏ）、選択したラダー枝４５を、同時実行グループ６１とは異なる別の同時実行グループに入れ、デバイス共通グループ５１から削除する。
【００７５】
ＳＷ命令群抽出部１４は、同時実行グループ６１とは異なる別の同時実行グループが既に生成されている場合には、生成済みの同時実行グループ内のラダー枝の実行条件と、選択したラダー枝４５の実行条件との積が解を持つか否かを判定する。ＳＷ命令群抽出部１４は、解を持つ場合には、生成済みの同時実行グループ内にラダー枝４５を入れる。
【００７６】
一方、ＳＷ命令群抽出部１４は、同時実行グループ６１とは異なる別の同時実行グループが生成されていない場合には、新たな同時実行グループを生成して、選択したラダー枝４５を入れる。図９では、SwOp5のラダー枝４５が選択されて、新たな同時実行グループ６２内に入れられた場合を示している（ｓｔ２０４，ｓｔ２０５）。
【００７７】
この後、ＳＷ命令群抽出部１４は、共通デバイスを持つラダー枝集合の要素が空であるか否かを確認する（ステップＳ３３）。空でなければ、ＳＷ命令群抽出部１４は、ステップＳ３４〜Ｓ３８の処理を行う。
【００７８】
そして、ステップＳ３８の処理において、ＳＷ命令群抽出部１４が、デバイス共通グループ５１に未調査のラダー枝がないと判断した場合（ステップＳ３８、Ｎｏ）、ＳＷ命令群抽出部１４は、デバイス共通グループ５１とは異なる他のデバイス共通グループに対してステップＳ３１〜Ｓ３８の処理を行う。例えば、ＳＷ命令群抽出部１４は、デバイス共通グループ５２に対してステップＳ３１〜Ｓ３８の処理を行う。
【００７９】
そして、ステップＳ３３の処理において、ＳＷ命令群抽出部１４が、共通デバイスを持つラダー枝集合の要素が空であると判断すると（ステップＳ３３、Ｙｅｓ）、ＳＷ命令群抽出部１４による同時実行グループの生成処理を終了する。
【００８０】
このように、ＳＷ命令群抽出部１４は、デバイス共通グループ５１の中で同時に実行する可能性のあるラダー枝集合を同時実行グループとして生成することによって、ラダー枝をグルーピングする。
【００８１】
ＳＷ命令群抽出部１４によって分類された同時実行グループのうち、同一のデバイス共通グループから生成された同時実行グループ同士は、同時に実行されることのないＳＷ命令群である。換言すると、同一のデバイス共通グループから生成された異なる同時実行グループは、同時に実行されることのないＳＷ命令群である。例えば、同時実行グループ６１，６２は、何れもデバイス共通グループ５１から生成されているので、同時実行グループ６１，６２は、同時に実行されることのないＳＷ命令群である。
【００８２】
ＳＷ命令群抽出部１４が、図７に示したデバイス共通グループ５２から同時実行グループを生成した場合、SwOp4のラダー枝４４を含む同時実行グループと、SwOp1のラダー枝４２を含む同時実行グループとが生成されることとなる。
【００８３】
このように、同時実行グループが生成された結果、SwOp0，SwOp3は、同時に実行される場合があるが、「SwOp0，SwOp3」と「SwOp5」とは、同時に実行されることはないことが分かる。また、SwOp1とSwOp4とは、同時に実行されることはないことが分かる。
【００８４】
このような同時実行グループへの分類結果に基づいて、実行時間推定部１５は、最大スキャンタイム３０を推定する。図１０は、最大スキャンタイムの算出処理例を説明するための図である。
【００８５】
図１０では、ＳＷ命令またはＨＷ命令と実行時間との対応関係を示している。また、図１０では、最大スキャンタイム３０の推定値を示している。同時に実行されることがないＳＷ命令群がある場合、ＳＷ命令の実行時間が長い方のＳＷ命令群の実行時間が最大スキャンタイム３０に寄与すると考えられる。したがって、実行時間推定部１５は、実行時間が長い方のＳＷ命令群を最大スキャンタイム３０の算出処理に適用する。
【００８６】
例えば、ＨＷ命令の「ＬＤ  Ｘ０」は、実行時間がＴｌｄであり、ＨＷ命令の「ＡＮＤ  Ｘ１」は、実行時間がＴａｎｄである。また、ＳＷ命令の「SwOpi」の実行時間をＴｉと記述することにすると、SwOp0〜SwOp5の実行時間は、それぞれＴ０〜Ｔ５である。この場合、デバイス共通グループ５１内のSwOp0，SwOp3，SwOp5に関しては、「Ｔ０+Ｔ３」とＴ５との何れか大きい方が最大スキャンタイム３０の算出処理に適用される。また、デバイス共通グループ５２内のSwOp1，SwOp4に関しては、Ｔ１とＴ４との何れか大きい方が最大スキャンタイム３０の算出処理に適用される。
【００８７】
図１０では、（Ｔ０＋Ｔ３）＞Ｔ５であり、Ｔ１＞Ｔ４である場合の、最大スキャンタイム３０の算出結果を示している。実行時間推定部１５は、ＳＷ命令群のうち、最大スキャンタイム３０の算出処理に適用しなかった方のＳＷ命令群の実行時間を０として、最大スキャンタイム３０を算出する。
【００８８】
実行時間推定部１５は、（Ｔ０＋Ｔ３）とＴ５のうち（Ｔ０＋Ｔ３）を最大スキャンタイム３０の算出処理に適用し、Ｔ１とＴ４のうちＴ１を最大スキャンタイム３０の算出処理に適用する。したがって、実行時間推定部１５は、Ｔ０＋Ｔ３＋Ｔ１をＳＷ命令の実行時間として算出する。
【００８９】
また、実行時間推定部１５は、全てのＨＷ命令の実行時間の合計時間をＨＷ命令の実行時間として算出する。具体的には、実行時間推定部１５は、４Ｔｌｄ＋２Ｔｌｄｉ＋Ｔａｎｄ＋Ｔａｎｉ＋Ｔｏｒｉ＋ＴｏｕｔをＨＷ命令の実行時間として算出する。そして、実行時間推定部１５は、ＳＷ命令の実行時間とＨＷ命令の実行時間との合計時間を最大スキャンタイム３０の推定値とする。
【００９０】
図１１は、実行時間推定装置のハードウエア構成を示す図である。実行時間推定装置１０は、ＣＰＵ（Central  Processing  Unit）９１、ＲＯＭ（Read  Only  Memory）９２、ＲＡＭ（Random  Access  Memory）９３、表示部９４、入力部９５を有している。実行時間推定装置１０では、これらのＣＰＵ９１、ＲＯＭ９２、ＲＡＭ９３、表示部９４および入力部９５がバスラインＢを介して接続されている。
【００９１】
ＣＰＵ９１は、コンピュータプログラムである実行時間推定プログラム９０を用いて最大スキャンタイム３０の推定を行う。表示部９４は、液晶モニタなどの表示装置であり、ＣＰＵ９１からの指示に基づいて、ラダープログラム、ＳＷ命令、ＨＷ命令、実行条件部、ラダー枝、デバイス共通グループ、同時実行グループ、最大スキャンタイム３０などを表示する。入力部９５は、マウスまたはキーボードを備えて構成され、使用者から外部入力される指示情報（最大スキャンタイム３０の推定に必要なパラメータ等）を入力する。入力部９５へ入力された指示情報は、ＣＰＵ９１へ送られる。
【００９２】
実行時間推定プログラム９０は、コンピュータ読み取り可能かつ非遷移的な記録媒体（nontransitory  computer  readable  medium）であるＲＯＭ９２などの中に格納されており、バスラインＢを介してＲＡＭ９３へロードされる。
【００９３】
ＣＰＵ９１はＲＡＭ９３内にロードされた実行時間推定プログラム９０を実行する。具体的には、実行時間推定装置１０では、使用者による入力部９５からの指示入力に従って、ＣＰＵ９１がＲＯＭ９２内から実行時間推定プログラム９０を読み出してＲＡＭ９３内のプログラム格納領域に展開して各種処理を実行する。ＣＰＵ９１は、この各種処理に際して生じる各種データをＲＡＭ９３内に形成されるデータ格納領域に一時的に記憶させておく。
【００９４】
実行時間推定装置１０で実行される実行時間推定プログラム９０は、回路ブロック抽出部１２と、組合せ情報抽出部１３と、ＳＷ命令群抽出部１４と、実行時間推定部１５と、共通グループ生成部１８とを含むモジュール構成となっており、これらが主記憶装置上にロードされ、これらが主記憶装置上に生成される。このように、実行時間推定プログラム９０は、コンピュータである実行時間推定装置１０上のソフトウエアとして実現できる。なお、回路ブロック抽出部１２の機能は、実行時間推定プログラム９０とは、異なる別のプログラムに格納しておいてもよい。
【００９５】
なお、本実施の形態では、受付部１１がラダープログラムを受付ける場合について説明したが、受付部１１がラダー木を受付けてもよい。受付部１１がラダー木を受付ける場合、組合せ情報抽出部１３は、ラダー木からラダー枝を抽出する。また、受付部１１がラダー木を受付ける場合、実行時間推定装置１０は、回路ブロック抽出部１２を備えていなくてもよい。
【００９６】
本実施の形態によれば、デバイス共通グループ内の同時実行グループの中から、ソフトウエア命令の実行時間が最も長くなる同時実行グループに基づいて、最大スキャンタイム３０を算出するので、最も時間がかかるケースでのスキャンタイムを見積もることが可能になる。
【産業上の利用可能性】
【００９７】
以上のように、本発明に係る実行時間推定プログラムおよび実行時間推定装置は、シーケンスプログラムの実行時間の推定に適している。
【符号の説明】
【００９８】
１０  実行時間推定装置、１２  回路ブロック抽出部、１３  組合せ情報抽出部、１４  ＳＷ命令群抽出部、１５  実行時間推定部、１８  共通グループ生成部、２０  ＩＬ表現情報、２１  インストラクション実行時間データ、４１〜４５  ラダー枝、５０  全ラダー枝集合、５１，５２  デバイス共通グループ、６１，６２  同時実行グループ、９０  実行時間推定プログラム。
【図１】
2016017004.tif 000003
【図２】
2016017004.tif 000004
【図３】
2016017004.tif 000005
【図４】
2016017004.tif 000006
【図５】
2016017004.tif 000007
【図６】
2016017004.tif 000008
【図７】
2016017004.tif 000009
【図８】
2016017004.tif 000010
【図９】
2016017004.tif 000011
【図１０】
2016017004.tif 000012
【図１１】
2016017004.tif 000013
【手続補正書】
【提出日】平成28年10月28日(2016.10.28)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
実行時間推定部１５は、グルーピング結果およびインストラクション実行時間データ２１に基づいて、最大スキャンタイム３０を推定する。具体的には、実行時間推定部１５は、同時に実行されることのないラダー枝集合であるＳＷ命令群毎の実行時間を推定する。実行時間推定部１５は、デバイス共通グループ毎にＳＷ命令群を設定し、デバイス共通グループ毎にＳＷ命令群毎の実行時間を推定する。
【国際調査報告】
2016017004.tif 000014
2016017004.tif 000015
2016017004.tif 000016
2016017004.tif 000017