(57)【特許請求の範囲】
【請求項１】
データの入出力を行う入出力装置からの制御入力データが入力されるとともに、装置を制御するための制御プログラムを用いて前記制御入力データに対応する制御出力データを算出して前記入出力装置に出力する制御装置と、
前記装置の動作仕様を満たすテスト入力データとテスト出力データとの組み合わせであって前記制御装置内の時間と同じ時間を用いた時間的変化を示すテストパターンに含まれる前記テスト出力データと、前記制御装置が算出した前記制御出力データと、を照合することによって前記制御プログラムの動作検証を行う照合部と、
を備え、
前記制御装置は、
前記テストパターンを記憶する記憶部と、
前記制御プログラムの動作検証が行われる際には、前記制御プログラムで前記制御入力データを参照する命令があると前記制御装置内の時間の情報である第１の時間情報を取得するとともに前記テストパターン内から前記第１の時間情報に対応する前記テスト入力データを抽出し、抽出した前記テスト入力データおよび前記制御プログラムを用いて前記制御出力データを算出する制御部と、
を有することを特徴とするプログラム検証システム。
【請求項２】
前記テストパターンを生成して前記制御装置に送るテストパターン生成部をさらに備えることを特徴とする請求項１に記載のプログラム検証システム。
【請求項３】
前記記憶部は、
前記テストパターンを記憶する第１の記憶部と、
前記入出力装置からの前記制御入力データを記憶する第２の記憶部と、
前記入出力装置への前記制御出力データを記憶する第３の記憶部と、
を含み、
前記制御部は、
前記制御プログラムの動作検証が行われる際に前記制御プログラムにおいて前記入出力装置から入力された前記制御入力データを参照する命令があると、前記第１の時間情報に基づいて前記テストパターン内から前記テスト入力データを抽出して前記第２の記憶部に格納し、かつ抽出した前記テスト入力データおよび前記制御プログラムを用いて前記制御出力データを算出して前記第３の記憶部に格納し、かつ前記第２の記憶部内の前記テスト入力データおよび前記第３の記憶部内の前記制御出力データを前記照合部に送信し、
前記照合部は、前記制御部からの前記テスト入力データに対応する前記テスト出力データを用いて前記動作検証を行うことを特徴とする請求項１または２に記載のプログラム検証システム。
【請求項４】
前記制御装置は、前記第１の時間情報を生成する時間情報生成部をさらに備え、
前記テストパターンは、前記テスト入力データと、前記テスト出力データと、前記第１の時間情報に対応する時間の情報である第２の時間情報とが対応付けされたものであり、
前記照合部は、前記第１の時間情報および前記第２の時間情報に基づいて、前記制御装置が算出した前記制御出力データと、前記テストパターン内の前記テスト出力データとを照合する、
ことを特徴とする請求項１から３のいずれか１つに記載のプログラム検証システム。
【請求項５】
前記テストパターン生成部は、前記装置の動作仕様に基づいて、前記テストパターンを生成することを特徴とする請求項２に記載のプログラム検証システム。
【請求項６】
データの入出力を行う入出力装置からの制御入力データが入力される第１の通信部と、
装置を制御するための制御プログラムを用いて前記制御入力データに対応する制御出力データを算出する制御部と、
前記制御出力データを前記入出力装置に出力する第２の通信部と、
前記装置の動作仕様を満たすテスト入力データとテスト出力データとの組み合わせであって自装置内の時間と同じ時間を用いた時間的変化を示すテストパターンを記憶する記憶部と、
を備え、
前記制御部は、
前記制御プログラムの動作検証が行われる際には、前記制御プログラムで前記制御入力データを参照する命令があると前記自装置内の時間の情報である第１の時間情報を生成するとともに前記テストパターン内から前記第１の時間情報に対応する前記テスト入力データを抽出し、抽出した前記テスト入力データおよび前記制御プログラムを用いて前記制御出力データを算出する、
ことを特徴とする制御装置。
【請求項７】
前記制御部が算出した前記制御出力データと、前記テストパターンとを照合することによって前記制御プログラムの動作検証を行う照合部をさらに備え、
前記照合部は、前記制御装置が算出した前記制御出力データと、前記テストパターン内の前記テスト出力データとを照合する、
ことを特徴とする請求項６に記載の制御装置。
【請求項８】
データの入出力を行う入出力装置からの制御入力データが入力されるとともに、装置を制御するための制御プログラムを用いて前記制御入力データに対応する制御出力データを算出して前記入出力装置に出力する制御装置が、前記装置の動作仕様を満たすテスト入力データとテスト出力データとの組み合わせであって前記制御装置内の時間と同じ時間を用いた時間的変化を示すテストパターンを記憶する記憶ステップと、
前記制御プログラムの動作検証が行われる際に、前記制御プログラムで前記制御入力データを参照する命令があると、前記制御装置が、前記制御装置内の時間の情報である第１の時間情報を生成するとともに前記テストパターン内から前記第１の時間情報に対応する前記テスト入力データを抽出し、抽出した前記テスト入力データおよび前記制御プログラムを用いて前記制御出力データを算出する算出ステップと、
前記制御プログラムの動作検証を行う検証装置が、前記制御装置が算出した前記制御出力データと、前記テストパターン内の前記テスト出力データとを照合することによって前記制御プログラムの動作検証を行う検証ステップと、
を含むことを特徴とするプログラム検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置の制御に用いられる制御プログラムを検証するプログラム検証システム、制御装置およびプログラム検証方法に関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（ＰＬＣ：Programmable  Logic  Controller）といった制御装置は、種々のデータを保持しており、保持しているデータを用いて、装置を制御するための制御プログラムを動作させる。これにより、ＰＬＣは、ＰＬＣが組み込まれた装置または設備を特定の周期で制御する。【０００３】
このような制御プログラムは、ＰＬＣが組み込まれる装置の動作仕様に基づいて設計されており、装置または設備といった実機を用いて動作検証が行なわれている。特許文献１に記載の動作検証装置は、制御プログラムであるロボット動作用プログラムの中から、ＰＬＣであるシーケンサとの間での制御信号の入力または出力の機能を有するプログラム部分を検出している。そして、特許文献１に記載の動作検証装置は、検出したプログラム部分を逐次シーケンサに入力することによってシーケンサの内部状態を変化させ、この変化に基づいてシーケンサの動作検証を行っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−９７３０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来の技術である特許文献１では、動作検証の際に時間の情報を考慮していないので、精度よく装置を動作させることができない。このため、上記従来の技術である特許文献１では、制御プログラムの正確な動作検証を行うことができないという問題があった。【０００６】
本発明は、上記に鑑みてなされたものであって、制御プログラムの正確な動作検証を行うことができるプログラム検証システムを得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明は、プログラム検証システムにおいて、データの入出力を行う入出力装置からの制御入力データが入力されるとともに、装置を制御するための制御プログラムを用いて制御入力データに対応する制御出力データを算出して入出力装置に出力する制御装置と、装置の動作仕様を満たすテスト入力データとテスト出力データとの組み合わせであって制御装置内の時間と同じ時間を用いた時間的変化を示すテストパターンに含まれるテスト出力データと、制御装置が算出した制御出力データとを照合することによって制御プログラムの動作検証を行う照合部と、を備える。また、本発明のプログラム検証システムにおいて、制御装置は、テストパターンを記憶する記憶部と、制御プログラムの動作検証が行われる際には、制御プログラムで制御入力データを参照する命令があると制御装置内の時間の情報である第１の時間情報を取得するとともにテストパターン内から第１の時間情報に対応するテスト入力データを抽出し、抽出したテスト入力データおよび制御プログラムを用いて制御出力データを算出する制御部と、を有する。
【発明の効果】
【０００８】
本発明にかかるプログラム検証システムは、制御プログラムの正確な動作検証を行うことができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施の形態にかかるプログラム検証システムの構成を示す図
【図２】実施の形態にかかるＰＬＣが備える記憶部の構成を示す図
【図３】実施の形態にかかる装置の動作仕様例を示す図
【図４】実施の形態にかかるテストパターンの一例を示す図
【図５】実施の形態にかかるＰＬＣの動作処理手順を示すフローチャート
【図６】実機を用いた動作検証と、実施の形態にかかる動作検証との相違点を説明するための図
【図７】実施の形態にかかるＰＬＣが備える制御部のハードウェア構成例を示す図
【発明を実施するための形態】
【００１０】
以下に、本発明の実施の形態にかかるプログラム検証システム、制御装置およびプログラム検証方法を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態
図１は、本発明の実施の形態にかかるプログラム検証システムの構成を示す図である。プログラム検証システム１０は、工作機械または半導体製造装置といった装置１４と、装置１４の制御に用いられる制御プログラムの検証を行う検証装置１１とを備えている。
【００１２】
装置１４は、装置１４を制御する制御装置であるＰＬＣ１５と、ＰＬＣ１５との間でデータの入出力が行われる入出力装置１６とを備えている。ＰＬＣ１５は、種々の情報を記憶する記憶部１７と、記憶部１７内の情報を用いて装置１４を制御する制御部１８とを備えている。また、ＰＬＣ１５は、検証装置１１との間でデータ通信を行なう通信インタフェース（ＩＦ：InterFace）部３１と、入出力装置１６との間でデータ通信を行なう通信ＩＦ部３２とを備えている。
【００１３】
第１の通信部である通信ＩＦ部３１は、制御部１８からの指示に従って、検証装置１１との間でデータ通信を実行する。通信ＩＦ部３１は、検証装置１１から送られてくるテストパターンを受付けて記憶部１７に送る。テストパターンは、制御プログラムの検証に用いられるデータである。テストパターンは、装置１４の動作仕様を満たしており、後述の入力データと、後述の出力データとの組み合わせであり、装置１４の動作仕様で規定された範囲内で発生しうるものの時間的変化を示している。すなわち、テストパターンは、ＰＬＣ１５が組み込まれる装置１４またはＰＬＣ１５が配置される設備の動作仕様に基づいて定義される入力データおよび出力データの時間的な変化を示している。具体的には、テストパターンは、テスト入力データである入力データと、テスト出力データである出力データと、時間の情報である後述の時間情報Ｔ２とが対応付けされたものである。
【００１４】
入力データの一例は、入出力装置１６がＰＬＣ１５に入力するデータである。出力データは、ＰＬＣ１５内の制御プログラムが算出するデータであり、ＰＬＣ１５によって入出力装置１６に出力される。プログラム検証システム１０が用いる入力データには、２種類の入力データがある。２種類の入力データのうち、テストパターンに含まれる入力データは、制御プログラムの検証に用いられるテスト入力データである。また、２種類の入力データのうち、入出力装置１６から入力される入力データは、入出力装置１６の制御に用いられる制御入力データである。また、プログラム検証システム１０が用いる出力データには、２種類の出力データがある。２種類の出力データのうち、テストパターンに含まれる出力データは、制御プログラムの検証に用いられるテスト出力データである。また、２種類の出力データのうち、制御部１８が算出する出力データは制御出力データである。プログラム検証システム１０が、後述する動的解析を実行する場合には、制御部１８が算出した制御出力データを、テスト出力データとの照合に用いる。また、プログラム検証システム１０が、後述する動的解析を実行しない場合には、制御部１８が算出した制御出力データを、入出力装置１６の制御に用いる。
【００１５】
通信ＩＦ部３１は、制御部１８が用いた入力データと、制御部１８が制御プログラムを用いて算出した出力データとの組み合わせを検証装置１１に送る。第２の通信部である通信ＩＦ部３２は、制御部１８からの指示に従って、入出力装置１６との間でデータ通信を実行する。通信ＩＦ部３２は、入出力装置１６から送られてくる入力データを受信して記憶部１７に送る。また、通信ＩＦ部３２は、制御部１８が算出した出力データであって記憶部１７に格納されているものを入出力装置１６に送る。
【００１６】
記憶部１７は、入力データと、出力データと、制御プログラムと、制御部１８の動作設定を示す動作設定パラメータと、テストパターンとを記憶する。制御プログラムの一例は、ラダープログラムといったシーケンスプログラムである。制御部１８の動作設定を示す動作設定パラメータの例は、制御プログラムの動的解析を実行するか否かが指定されたパラメータ、または動作検証の際の入力データの取得方法が指定されたパラメータである。動作検証の際の入力データの取得方法には、入力データの全てをテストパターンから取得する方法と、入力データの一部をテストパターンから取得し、残りの部分を入出力装置１６から取得する方法とがある。
【００１７】
制御部１８は、通信ＩＦ部３１，３２および記憶部１７を制御する。また、制御部１８は、ＰＬＣ１５が管理する時間の情報である時間情報を生成する時間情報生成部１９を備えている。時間情報生成部１９は、時計機能を有しており、時計機能を用いて時間情報を生成する。なお、時間情報生成部１９は、制御部１８の外部に配置されてもよい。
【００１８】
以下の説明では、時間情報生成部１９が生成するＰＬＣ１５内の時間情報を時間情報Ｔ１という。また、以下の説明では、テストパターン内の時間の情報を時間情報Ｔ２という。第１の時間情報である時間情報Ｔ１は、ＰＬＣ１５の電源がオンにされてからの経過時間であってもよいし、時計で計測される時刻または日時の情報であってもよい。第２の時間情報である時間情報Ｔ２は、時間情報Ｔ１に対応する時間の情報である。したがって、時間情報Ｔ２は、時間情報Ｔ１がＰＬＣ１５の電源がオンにされてからの経過時間である場合、この経過時間を示す情報であり、時間情報Ｔ１が時計で計測される時刻または日時である場合、時刻または日時を示す情報である。
【００１９】
制御部１８は、制御プログラムを実行することによって、入出力装置１６に出力する出力データを算出する。制御部１８は、制御プログラムに入力データを適用することによって、出力データを算出する。換言すると、制御部１８は、制御プログラムを用いて、入力データに対応する出力データを算出する。制御部１８は記憶部１７に格納されている入力データまたは入出力装置１６の入力データを参照して制御プログラムを実行することで出力データを算出する。制御部１８は、入力データと、制御プログラムを用いて算出した出力データと、の組み合わせを記憶部１７に記憶させる。
【００２０】
制御部１８は、入出力装置１６の通常動作を制御する際には、入出力装置１６から送られてきた入力データに対応する出力データを算出する。換言すると、制御部１８は、通常動作を制御する際には、制御入力データに基づいて、制御入力データに対応する制御出力データを算出する。また、制御部１８は、制御プログラムの動作を確認する際には、時間情報生成部１９が生成した時間情報Ｔ１に基づいて、テストパターン内から入力データを抽出する。具体的には、制御部１８は、時間情報Ｔ１と同一の時間情報Ｔ２をテストパターン内から抽出し、抽出した時間情報Ｔ２に対応付けされた入力データをテストパターン内から抽出する。制御部１８は、制御プログラムの動作を確認する際には、テストパターン内から抽出した入力データに対応する出力データを算出する。換言すると、制御部１８は、制御プログラムの動作を確認する際には、テスト入力データに基づいて、テスト入力データに対応する制御出力データを算出する。
【００２１】
入出力装置１６は、データの入力および出力を行う装置であり、ＰＬＣ１５に接続されている。入出力装置１６は、ＰＬＣ１５に入力データを送る入力装置と、ＰＬＣ１５から出力データを受け取る出力装置とを含んでいる。
【００２２】
入力装置の例は、入力ボタン、またはセンサである。入力装置が入力ボタンである場合、入力ボタンは、ユーザに押下されると、押下されたことを示す入力データをＰＬＣ１５に送る。また、入力装置がセンサである場合、センサは、検出した、温度または位置といった情報である入力データをＰＬＣ１５に送る。
【００２３】
出力装置の例は、開閉バルブ、またはＬＥＤ（Light  Emitting  Diode）である。出力装置が開閉バルブの場合、開閉バルブは、バルブを開状態にするための出力データまたはバルブを閉状態にするための出力データをＰＬＣ１５から受信する。また、出力装置がＬＥＤの場合、ＬＥＤは、ＬＥＤを点灯するための出力データまたはＬＥＤを消灯するための出力データをＰＬＣ１５から受信する。
【００２４】
ＰＬＣ１５は、入力装置によって入力データが入力されると、入力装置からの入力データに対応する出力データを、制御プログラムを用いて算出し、算出した出力データを出力装置に出力する。ＰＬＣ１５が、出力装置に送る出力データが、制御プログラムによる出力データの算出結果である。
【００２５】
検証装置１１は、テストパターンを生成するテストパターン生成部１２と、制御プログラムの動作とテストパターンとを照合する照合部１３とを備えている。テストパターン生成部１２は、装置１４の動作仕様に基づいて、テストパターンを生成する。テストパターン生成部１２は、生成したテストパターンをＰＬＣ１５および照合部１３に送る。
【００２６】
テストパターン生成部１２は、生成したテストパターンの全体をＰＬＣ１５に送ってもよいが、生成したテストパターンのうち、入力データおよび時間情報Ｔ２の部分をＰＬＣ１５に送ってもよい。すなわち、ＰＬＣ１５が用いるのは、テストパターン内の入力データであるので、テストパターン生成部１２は、出力データ部分を除外したテストパターンをＰＬＣ１５に送信してもよい。テストパターン生成部１２は、生成したテストパターンの全体を照合部１３に送る。
【００２７】
照合部１３は、テストパターンから抽出された入力データと、抽出された入力データに対応する出力データと、の組み合わせをＰＬＣ１５から受信する。照合部１３は、ＰＬＣ１５の出力データと装置１４の動作仕様とを照合する。このとき、照合部１３は、ＰＬＣ１５から受信した入力データおよび出力データの組合せである第１の組合せと、テストパターン内の入力データおよび出力データの組合せである第２の組合せとを照合する。具体的には、照合部１３は、第１の組合せに対応付けされた時間情報Ｔ１と同じ時間情報Ｔ２をテストパターン内から抽出し、抽出した時間情報Ｔ２に対応する第２の組合せをテストパターン内から抽出する。そして、照合部１３は、受信した第１の組合せと抽出した第２の組合せとを比較する。照合部１３は、この比較結果に基づいて、制御プログラムの動作を検証する。照合部１３は、受信した第１の組合せと抽出した第２の組合せとが同一である場合には、制御プログラムは装置１４の動作仕様に従って作成されていると判定する。テストパターン内の入力データおよび出力データは、装置１４の動作仕様を満たしている。したがって、実施の形態の照合部１３は、ＰＬＣ１５から受信した出力データとテストパターン内の出力データとを照合することによって、制御プログラムの動作を検証する。この場合において、照合部１３は、ＰＬＣ１５から受信した入力データに対応する出力データをテストパターンから抽出し、抽出した出力データと、ＰＬＣ１５から受信した出力データとを比較する。一方、照合部１３は、受信した第１の組合せと抽出した第２の組合せとが異なる場合には、制御プログラムは装置１４の動作仕様に従って作成されていないと判定する。実施の形態の照合部１３は、ＰＬＣ１５から受信した出力データとテストパターン内の出力データとが異なる場合には、制御プログラムは装置１４の動作仕様に従って作成されていないと判定する。
【００２８】
なお、ＰＬＣ１５は、装置１４の外部に配置されてもよい。また、検証装置１１は、装置１４内に配置されてもよい。この場合、テストパターン生成部１２は、装置１４の外部に配置されてもよい。また、検証装置１１は、ＰＬＣ１５内に配置されてもよい。換言すると、ＰＬＣ１５が、ＰＬＣ１５の入出力データと装置１４の動作仕様との照合である動作検証を実行してもよい。この場合、テストパターン生成部１２は、ＰＬＣ１５の外部に配置されてもよい。
【００２９】
つぎに、記憶部１７の構成について説明する。図２は、実施の形態にかかるＰＬＣが備える記憶部の構成を示す図である。記憶部１７は、テストパターンを格納するテストパターン格納領域２１と、動作設定パラメータを格納するパラメータ格納領域２２とを備えている。また、記憶部１７は、入力データを格納する入力データ格納領域２３と、出力データを格納する出力データ格納領域２４とを備えている。また、記憶部１７は、制御プログラムを格納する制御プログラム格納領域２５を備えている。
【００３０】
第１の記憶部であるテストパターン格納領域２１は、検証装置１１から送られてくるテストパターンを格納する領域である。パラメータ格納領域２２は、装置１４のユーザによって設定される動作設定パラメータを格納する領域である。
【００３１】
第２の記憶部である入力データ格納領域２３は、制御プログラムの実行に用いられる入力データを格納する領域である。プログラム検証システム１０が制御プログラムの動作を検証する際には、制御部１８が、テストパターンから抽出した入力データを入力データ格納領域２３に格納する。換言すると、制御プログラムの動作を検証する際には、制御部１８が、入力データの一部または全部の値を、テストパターン内の入力データに書き換える。この場合において、制御部１８は、テストパターンに含まれている時間情報Ｔ２と、時間情報生成部１９が生成した時間情報Ｔ１とを照合し、入力データ格納領域２３内の入力データを書き換えるための、入力データの値をテストパターンから抽出する。一方、ＰＬＣ１５が、入出力装置１６を用いて、通常動作を実行する際には、制御部１８が、入出力装置１６によってＰＬＣ１５に入力された入力データを入力データ格納領域２３に格納する。このように、入力データ格納領域２３は、プログラム検証システム１０が制御プログラムの動作を検証する際には、テスト入力データである入力データを格納し、通常動作を実行する際には、制御入力データである入力データを格納する。
【００３２】
第３の記憶部である出力データ格納領域２４は、出力データを格納する領域である。制御部１８は、入力データ格納領域２３に格納されている入力データに対応する出力データを算出すると、算出した出力データを出力データ格納領域２４に格納する。入力データ格納領域２３に格納されている入力データがテストパターンの入力データである場合、制御部１８は、テストパターンの入力データに対応する出力データを出力データ格納領域２４に格納する。一方、入力データ格納領域２３に格納されている入力データが入出力装置１６からの入力データである場合、制御部１８は、入出力装置１６からの入力データに対応する出力データを出力データ格納領域２４に格納する。入力データ格納領域２３および出力データ格納領域２４の一例は、レジスタである。このように、出力データ格納領域２４は、プログラム検証システム１０が制御プログラムの動作を検証する際と通常動作を実行する際との何れの場合にも、入力データを用いて算出された制御出力データである出力データを格納する。
【００３３】
制御プログラム格納領域２５は、図示しないプログラム作成装置といった外部装置から送られてくる制御プログラムを格納する領域である。なお、記憶部１７は、複数の記憶装置で構成されてもよい。以下の説明では、入力データおよび出力データを入出力データという場合がある。
【００３４】
つぎに、装置１４の動作仕様例について説明する。図３は、実施の形態にかかる装置の動作仕様例を示す図である。図３では、装置１４の動作仕様に記載される入出力データのタイミング図を示している。図３に示す横軸は時間であり、縦軸は、入力データＸ０，Ｘ１および出力データＹ０，Ｙ１である。
【００３５】
装置１４の動作仕様は、入出力データの更新と、制御プログラムの実行とを含んでいる。そして、装置１４の動作仕様における制御プログラムは、２つの命令を含んでいる。ＰＬＣ１５が用いる制御プログラムは、この装置１４の動作仕様に従って作成されたものである。ここでの動作仕様に含まれる命令の第１例は、入出力データの更新時に取り込んだ入力データＸ０がオン（ＯＮ）であれば出力データＹ０をオンとする命令である。また、ここでの動作仕様に含まれる命令の第２例は、制御プログラムの命令を実行した際に、入出力装置１６の入力データＸ１がオンであれば出力データＹ１をオンとする命令である。ＰＬＣ１５が用いる制御プログラムには、上述した第１例および第２例の命令が含まれている。これにより、制御プログラムで装置１４の動作仕様を達成することが可能となる。
【００３６】
制御プログラムが実行されると、入力データＸ０は、時間ｔ1でオンなので、出力データＹ０はオンになる。また、制御プログラムが実行されると、入力データＸ１は時間ｔ1ではオフ（ＯＦＦ）なので、出力データＹ１はオフのままである。そして、時間ｔ2で入力データＸ１がオンになると、出力データＹ１がオンになる。
【００３７】
ＰＬＣ１５の制御部１８は、時間ｔ0から時間ｔ1で入出力装置１６からの入力データＸ０を記憶部１７に格納し、記憶部１７に格納されている出力データを入出力装置１６へ送信する。これにより、制御部１８は、時間ｔ0から時間ｔ1で入出力データの更新を行う。また、制御部１８は、時間ｔ1から時間ｔ3で記憶部１７内の入出力データを参照して制御プログラムを実行し、実行結果である出力データを逐次記憶部１７に格納する。
【００３８】
図４は、実施の形態にかかるテストパターンの一例を示す図である。図４では、図３に示した動作仕様に対応するテストパターン１０１を示している。テストパターン１０１は、入出力データの値および時間情報を要素とする情報である。検証装置１１のテストパターン生成部１２は、図３に示した動作仕様に基づいて、テストパターン１０１を生成する。
【００３９】
テストパターン１０１の一例は、入出力データと、時間情報Ｔ２とが対応付けされた情報テーブルである。テストパターン１０１では、パラメータに、入力データおよび時間情報Ｔ２が与えられている。これにより、テストパターン１０１は、入力データの時間的変化で定義されている。
【００４０】
図３に示すように、入力データＸ０は、時間ｔ0から時間ｔ3までオンのままである。したがって、テストパターン１０１の入力データＸ０は、時間ｔ0、時間ｔ1、時間ｔ2、および時間ｔ3の全てでオンが設定されている。
【００４１】
また、図３に示すように、入力データＸ１は、時間ｔ0から時間ｔ2の直前までオフであり、時間ｔ2でオンとなってそのまま時間ｔ3までオンである。したがって、テストパターン１０１の入力データＸ１は、時間ｔ0および時間ｔ1でオフが設定され、時間ｔ2および時間ｔ3でオンが設定されている。
【００４２】
実施の形態の制御部１８は、制御プログラムの動作検証を実行する際に、時間情報生成部１９が生成した時間情報Ｔ１とテストパターン１０１内の時間情報Ｔ２とを照合し、参照する入力データＸ０，Ｘ１の値を決定する。具体的には、制御部１８は、テストパターン１０１内から、時間情報Ｔ１に合致する時間情報Ｔ２または時間情報Ｔ１に最も近い時間情報Ｔ２を抽出する。そして、制御部１８は、抽出した時間情報Ｔ２に対応する入力データＸ０，Ｘ１の値を、テストパターン１０１内から抽出して入力データ格納領域２３に格納する。
【００４３】
図５は、実施の形態にかかるＰＬＣの動作処理手順を示すフローチャートである。ここでは、入力データＸ０，Ｘ１の値に従って出力データＹ０，Ｙ１の値を決定する制御プログラムが、ＰＬＣ１５に格納されている場合のＰＬＣ１５の動作例について説明する。
【００４４】
プログラム検証システム１０が、制御プログラムの動作検証である動的解析を実施する際には、制御プログラムの動的解析を実行する指示がユーザによってＰＬＣ１５に入力される。ＰＬＣ１５の制御部１８は、この指示を受付けると、制御プログラムの動的解析を実行することを示す動作設定パラメータをパラメータ格納領域２２に格納する。一方、プログラム検証システム１０が、制御プログラムの通常動作を実行する際には、制御プログラムの通常動作を実行する指示がユーザによってＰＬＣ１５に入力される。ＰＬＣ１５の制御部１８は、この指示を受付けると、制御プログラムの通常動作を実行することを示す動作設定パラメータをパラメータ格納領域２２に格納する。
【００４５】
ＰＬＣ１５は、検証装置１１のテストパターン生成部１２からテストパターン１０１が送られてくると、ステップＳ１０において、制御部１８が、テストパターン１０１を記憶部１７のテストパターン格納領域２１に格納する。なお、ＰＬＣ１５は、テストパターン１０１の格納処理と、動作設定パラメータの格納処理との何れを先に実行してもよい。
【００４６】
ステップＳ２０において、ＰＬＣ１５が、動作を開始すると、ステップＳ３０において、制御部１８が、制御プログラムの動的解析を行うか否かを判断する。具体的には、制御部１８が、パラメータ格納領域２２に格納されている動作設定パラメータを参照し、動作設定パラメータに基づいて、動的解析を実行するか否かを判定する。
【００４７】
動的解析を実行する場合、すなわちステップＳ３０においてＹｅｓの場合、制御部１８は、入出力データの更新と、制御プログラムの実行とを行う。制御部１８は、入出力データを更新する際には、ステップＳ４０において、テストパターン１０１の中から参照する入力データＸ０を決定する。そして、ステップＳ５０において、制御部１８は、決定した入力データＸ０を記憶部１７のテストパターン格納領域２１に格納する。換言すると、制御部１８は、記憶部１７に格納されている入力データの値を、テストパターン１０１内の入力データＸ０の値に書き換える。具体的には、制御部１８が、時間情報生成部１９で生成された時間情報Ｔ１とテストパターン１０１内の時間情報Ｔ２とを照合して、制御プログラムに適用する入力データＸ０を決定する。このとき、制御部１８は、時間情報Ｔ１と同一の時間情報Ｔ２をテストパターン１０１内から抽出し、抽出した時間情報Ｔ２に対応付けされた入力データＸ０をテストパターン１０１内から抽出する。そして、制御部１８は、抽出した入力データＸ０を、記憶部１７に格納する入力データＸ０に決定する。
【００４８】
制御部１８は、入力データＸ０を格納した後、ステップＳ６０において、記憶部１７の出力データ格納領域２４に格納されている出力データを、検証装置１１の照合部１３に送信する。ここでの制御部１８は、制御プログラムの命令のうち、これから実行する命令よりも１つ前の命令で実行された実行結果である出力データを照合部１３に送信する。この場合において、制御部１８は、記憶部１７に格納されている出力データを、記憶部１７に格納されている１つ前の命令で用いた入力データに対応付けして、出力データおよび入力データを照合部１３に送信する。すなわち、制御部１８は、出力データと、出力データの算出に用いた入力データとを対応付けして照合部１３に送る。具体的には、制御部１８は、入力データ格納領域２３内の１つ前の入力データと出力データ格納領域２４内の最新の出力データとの組を送る。上述したステップＳ４０からＳ６０の処理が、動的解析が実行される際の入出力データの更新処理である。
【００４９】
なお、動的解析を行う場合の入出力データの更新処理では、制御部１８は、入力データの全てをテストパターン１０１から抽出してもよいし、入力データの一部をテストパターン１０１から抽出し、その他の入力データを入出力装置１６から取得してもよい。何れの入力データをテストパターン１０１から抽出するかは、ユーザによる動作設定パラメータの設定によって決定される。
【００５０】
制御部１８は、入出力データの更新を実行した後、記憶部１７の制御プログラム格納領域２５に格納された制御プログラムを実行する。制御プログラムは、複数の命令を含んで構成されており、制御部１８は、制御プログラム内の命令の読込みと実行とを順次行っていく。制御プログラム内の命令には、記憶部１７に格納されている入力データＸ０を参照するものと、入出力装置１６の入力データＸ１を参照するものとがある。動的解析を行っている場合、制御部１８は、時間情報生成部１９が生成した時間情報Ｔ１と、テストパターン１０１とを照合し、参照する入力データＸ０，Ｘ１の決定および読込みを行う。
【００５１】
制御部１８は、入力データＸ０の読込み後、制御プログラム内の命令を実行し、実行によって得られた出力データを記憶部１７の出力データ格納領域２４に格納する。ここでは、制御部１８が、図３で示した動作仕様に対応する制御プログラムを動的解析する場合について説明する。
【００５２】
ステップＳ７０において、制御部１８が、記憶部１７内の入力データＸ０を参照する命令を制御プログラムから読込むと、制御部１８は、記憶部１７の入力データ格納領域２３に格納されている入力データＸ０を読込む。制御部１８は、読込んだ入力データＸ０を参照して、制御プログラムを実行する。これにより、制御プログラムは、入力データＸ０に対応する出力データＹ０を算出する。
【００５３】
ここでの制御部１８は、ステップＳ８０において、入力データＸ０がオンであるか否かを判定する。入力データＸ０がオンである場合、すなわち、ステップＳ８０でＹｅｓの場合、ステップＳ９０において、制御部１８は、制御プログラムを用いて出力データＹ０をオンに決定する。一方、入力データＸ０がオフである場合、すなわち、ステップＳ８０でＮｏの場合、ステップＳ１００において、制御部１８は、制御プログラムを用いて出力データＹ０をオフに決定する。このように、制御部１８は、制御プログラムを実行することによって、入力データＸ０に対応する出力データＹ０を算出する。この後、ステップＳ１１０において、制御部１８は、実行結果である出力データＹ０の値を、記憶部１７の出力データ格納領域２４に格納する。
【００５４】
また、ステップＳ１２０において、制御部１８が、入出力装置１６内の入力データＸ１を参照する命令を制御プログラムから読込むと、制御部１８は、時間情報生成部１９が生成した時間情報Ｔ１と同一の時間情報Ｔ２をテストパターン１０１内から抽出することによって時間情報Ｔ２を取得する。すなわち、制御部１８は、入力データＸ１を参照する命令があると、このタイミングで時間情報Ｔ１を取得するとともに、時間情報Ｔ１に対応する時間情報Ｔ２を取得する。そして、ステップＳ１３０において、制御部１８は、時間情報Ｔ２に基づいて、テストパターン１０１の中から参照する入力データＸ１を決定する。そして、制御部１８は、テストパターン１０１に登録されている入力データＸ１を読込む。このように、実施の形態では、制御部１８は、動的解析を行う場合に、入出力装置１６内の入力データＸ１を参照する命令があると、テストパターン１０１に登録されている入力データＸ１を読込む。そして、制御部１８は、読込んだ入力データＸ１を参照して、制御プログラムを実行する。これにより、制御プログラムは、入力データＸ１に対応する出力データＹ１を算出する。
【００５５】
ここでの制御部１８は、ステップＳ１４０において、入力データＸ１がオンであるか否かを判定する。入力データＸ１がオンである場合、すなわち、ステップＳ１４０でＹｅｓの場合、ステップＳ１５０において、制御部１８は、制御プログラムを用いて出力データＹ１をオンに決定する。一方、入力データＸ１がオフである場合、すなわち、ステップＳ１４０でＮｏの場合、ステップＳ１６０において、制御部１８は、制御プログラムを用いて出力データＹ１をオフに決定する。このように、制御部１８は、制御プログラムを実行することによって、入力データＸ１に対応する出力データＹ１を算出する。
【００５６】
この後、ステップＳ１７０において、制御部１８は、実行結果である出力データＹ１の値を、記憶部１７の出力データ格納領域２４に格納する。上述したステップＳ７０からＳ１７０の処理が、動的解析が実行される際の制御プログラムの実行処理である。
【００５７】
ステップＳ１８０において、制御部１８は、ユーザからの指示に基づいて、ＰＬＣ１５の動作を停止するか否かを判定する。制御部１８は、ユーザによって動作停止の指示がＰＬＣ１５に入力されていなければ、ＰＬＣ１５の動作を停止しない。ＰＬＣ１５の動作を停止しない場合、すなわち、ステップＳ１８０においてＮｏの場合、制御部１８は、ステップＳ３０に戻って、制御プログラムの動的解析を行うか否かを判断する。制御部１８は、動的解析を実行する場合、すなわちステップＳ３０においてＹｅｓの場合、ステップＳ４０からＳ１８０の処理を実行する。
【００５８】
制御部１８は、ステップＳ１８０において、ＰＬＣ１５の動作を停止すると判定するまで、ステップＳ３０からＳ１７０の処理を繰り返す。そして、ステップＳ１８０において、制御部１８が、ＰＬＣ１５の動作を停止すると判定した場合、すなわち、ステップＳ１８０においてＹｅｓの場合、制御部１８は、ＰＬＣ１５の動作を停止する。このように、制御部１８は、制御プログラムの実行を完了した後、動作停止の指示を受けるまで、入出力データの更新と、制御プログラムの実行とを繰り返す。
【００５９】
動的解析を実行しない場合、すなわちステップＳ３０においてＮｏの場合、制御部１８は、動的解析を実行する場合と同様に、入出力データの更新と、制御プログラムの実行とを行う。制御部１８は、動的解析を実行しない場合、通常の制御動作を入出力装置１６に実行する。この場合、制御部１８は、ステップＳ１９０において、入出力装置１６から読み出した入力データＸ０を記憶部１７の入力データ格納領域２３に格納する。
【００６０】
制御部１８は、入力データＸ０を格納した後、ステップＳ２００において、記憶部１７の出力データ格納領域２４に格納されている出力データを、入出力装置１６に送信する。ここでの制御部１８は、制御プログラムの命令のうち、これから実行する命令よりも１つ前の命令で実行された実行結果である出力データを入出力装置１６に送信する。上述したステップＳ１９０からＳ２００の処理が、通常動作が実行される場合の入出力データの更新処理である。
【００６１】
制御部１８は、入出力データの更新を実行した後、記憶部１７の制御プログラム格納領域２５に格納された制御プログラムを実行する。制御部１８は、入出力装置１６から入力データＸ０を読込んだ後、制御プログラム内の命令を実行し、実行によって得られた出力データを記憶部１７の出力データ格納領域２４に格納する。ここでは、制御部１８が、図３で示した動作仕様に対応する制御プログラムを実行する場合について説明する。なお、以下の説明では、通常動作を実行する場合の処理のうち、動的解析を実行する場合と同様の処理については、その説明を省略する場合がある。
【００６２】
制御部１８は、制御プログラムを用いて通常動作を実行する場合、ステップＳ７０からＳ１１０と同様の処理である、ステップＳ２１０からＳ２５０の処理を実行する。そして、ステップＳ２６０において、制御部１８が、入出力装置１６内の入力データＸ１を参照する命令を制御プログラムから読込むと、ステップＳ２７０において、制御部１８は、入出力装置１６内の入力データＸ１を参照する。この後、制御部１８は、ステップＳ１４０からＳ１７０と同様の処理である、ステップＳ２８０からＳ３１０の処理を実行する。
【００６３】
そして、ステップＳ１８０において、制御部１８は、ユーザからの指示に基づいて、ＰＬＣ１５の動作を停止するか否かを判定する。制御部１８は、ユーザによって動作停止の指示がＰＬＣ１５に入力されていなければ、ＰＬＣ１５の動作を停止しない。ＰＬＣ１５の動作を停止しない場合、すなわち、ステップＳ１８０においてＮｏの場合、制御部１８は、ステップＳ３０に戻って、制御プログラムの動的解析を行うか否かを判断する。制御部１８は、動的解析を実行しない場合、すなわちステップＳ３０においてＮｏの場合、ステップＳ１９０からＳ３１０およびステップＳ１８０の処理を実行する。
【００６４】
制御部１８は、ステップＳ１８０において、ＰＬＣ１５の動作を停止すると判定するまで、ステップＳ１９０からＳ３１０およびステップＳ１８０の処理を繰り返す。そして、ステップＳ１８０において、制御部１８が、ＰＬＣ１５の動作を停止すると判定した場合、すなわち、ステップＳ１８０においてＹｅｓの場合、制御部１８は、ＰＬＣ１５の動作を停止する。このように、制御部１８は、制御プログラムの実行を完了した後、動作停止の指示を受けるまで、入出力データの更新と、制御プログラムの実行とを繰り返す。
【００６５】
なお、制御部１８は、動的解析を実行する際に、照合部１３への入出力データの送信を逐次実行してもよいし、記憶部１７に入出力データを貯めてから一定周期で入出力データを送信してもよい。
【００６６】
照合部１３は、ＰＬＣ１５から送られてきた入力データＸ０，Ｘ１、出力データＹ０，Ｙ１と、装置１４の動作仕様とを照合することで、制御プログラムが動作仕様に従って設計されているか否かを検証する。この場合において、照合部１３は、ＰＬＣ１５から送られてきた入出力データと、図３で示した装置１４の動作仕様とを照合してもよいし、ＰＬＣ１５から送られてきた入出力データと、図４で示したテストパターン１０１とを照合してもよい。
【００６７】
ここで、装置１４または設備といった実機を用いて制御プログラムの動作検証が行なわれる場合と、プログラム検証システム１０による制御プログラムの動作検証との相違点について説明する。
【００６８】
図６は、実機を用いた動作検証と、実施の形態にかかる動作検証との相違点を説明するための図である。図６では、装置１４といった実機を用いた比較例の検証処理と、プログラム検証システム１０による検証処理とを示している。なお、ここでは、説明の便宜上、実施の形態にかかるＰＬＣをＰＬＣ１５といい、実機を用いた動作検証を行うＰＬＣを比較例のＰＬＣという。また、比較例のＰＬＣが備える記憶部を比較例の記憶部という。この比較例の記憶部は、ＰＬＣ１５が備える記憶部１７に対応するものである。
【００６９】
ＰＬＣ１５および比較例のＰＬＣによる装置１４の制御は、入出力データを更新する工程と、制御プログラムを実行する工程との２つの工程を含んでいる。また、ＰＬＣ１５および比較例のＰＬＣが装置１４の制御に用いる制御プログラムは、複数の命令を含んだ命令群を有している。
【００７０】
ＰＬＣ１５および比較例のＰＬＣは、時間ｔ0から時間ｔ1までの間、入出力データを更新する処理を実行する。また、ＰＬＣ１５および比較例のＰＬＣは、時間ｔ1から時間ｔ3までの間、制御プログラムを実行する。この場合において、ＰＬＣ１５および比較例のＰＬＣは、時間ｔ1から時間ｔ2までの間、記憶部１７の入力データＸ０を参照する命令の実行を試み、時間ｔ2から時間ｔ3までの間、入出力装置１６の入力データＸ１を参照する命令の実行を試みる。
【００７１】
そして、入出力装置１６が保持する入力データＸ１は、時間とともに変化する。一方、記憶部１７に格納されている入力データＸ１は、入出力データの更新処理のタイミングで変化し、制御プログラムの実行時には変化しない。したがって、入出力データの更新処理の際に、記憶部１７および比較例の記憶部が入力データＸ１の「０」を格納すると、制御プログラムの実行時も記憶部１７および比較例の記憶部が格納する入力データＸ１は「０」のままである。
【００７２】
このような入力データＸ１に対して、実施の形態のＰＬＣ１５は、時間ｔ0から時間ｔ3までの時間情報を用いて動作検証を実行するのに対して、比較例のＰＬＣは、時間ｔ0の時間情報を用いて動作検証を実行する。
【００７３】
実施の形態では、入出力装置１６の入力データＸ１を参照する命令があるタイミングについては、テストパターン生成部１２が、入出力装置１６の保持する入力データＸ１と同じ入力データＸ１をテストパターン１０１に設定している。すなわち、テストパターン１０１に設定されている入力データＸ１は、入出力装置１６が保持する入力データＸ１と同様に時間とともに変化している。したがって、時間ｔ2から時間ｔ3までの間の入出力装置１６の入力データＸ１が「１」である場合、時間ｔ2から時間ｔ3までの間のテストパターン１０１の入力データＸ１も「１」である。一方、比較例のＰＬＣは、比較例の記憶部内の入力データＸ１しか参照できない。以下、実施の形態のＰＬＣ１５が実行する処理Ｐ１からＰ３と、比較例のＰＬＣが実行する処理Ｐ１１からＰ１３について説明する。処理Ｐ１，Ｐ１１は、時間ｔ0から時間ｔ1までの処理であり、処理Ｐ２，Ｐ１２は、時間ｔ1から時間ｔ2までの処理であり、処理Ｐ３，Ｐ１３は、時間ｔ2から時間ｔ3までの処理である。
【００７４】
（処理Ｐ１）
実施の形態のＰＬＣ１５は、入出力データを更新する工程において、時間情報生成部１９を用いて時間情報Ｔ２を取得する。そして、ＰＬＣ１５は、時間情報Ｔ２に基づいてテストパターン１０１を参照することにより、時間情報Ｔ２に対応する入力データＸ０を抽出する。さらに、ＰＬＣ１５は、テストパターン１０１から抽出した入力データＸ０を記憶部１７に格納する。
【００７５】
（処理Ｐ２）
また、ＰＬＣ１５は、制御プログラムを実行する工程で記憶部１７の入力データＸ０を参照する命令があると、記憶部１７内の入力データＸ０を参照し、この入力データＸ０に従って命令を実行する。
【００７６】
（処理Ｐ３）
また、ＰＬＣ１５は、制御プログラムを実行する工程で入出力装置１６の入力データＸ１を参照する命令があると、時間情報生成部１９を用いて時間情報Ｔ２を取得する。そして、ＰＬＣ１５は、時間情報Ｔ２に基づいてテストパターン１０１を参照することにより、時間情報Ｔ２に対応する入力データＸ１を抽出する。さらに、ＰＬＣ１５は、テストパターン１０１から抽出した入力データＸ１に従って命令を実行する。これにより、処理Ｐ３の処理が完了する。
【００７７】
テストパターン１０１内の入力データＸ１は、入出力装置１６が保持している入力データＸ１と同じ値であるので、ＰＬＣ１５は、入出力装置１６を用いた動作時と同様の動作を実行することができる。このように、ＰＬＣ１５は、記憶部１７にテストパターン１０１が格納されているので、時間ｔ2の正しい入力データを参照することができる。また、ＰＬＣ１５は、記憶部１７内のテストパターン１０１から入力データＸ１を読み出して記憶部１７内に格納するので、動作検証時には、ＰＬＣ１５と検証装置１１との間の通信時間が不要である。
【００７８】
（処理Ｐ１１）
比較例のＰＬＣは、入出力データを更新する工程において、時間ｔ0の時間情報を取得する。この後、比較例のＰＬＣは、時間ｔ0の時間情報に基づいてテストパターンを参照することにより時間ｔ0の時間情報に対応する入力データＸ０を抽出する。さらに、比較例のＰＬＣは、テストパターンから抽出した入力データＸ０を比較例の記憶部に格納する。この場合において、比較例のＰＬＣが参照するテストパターンは、時間ｔ0の時間情報に対応するものである。比較例のＰＬＣが用いるテストパターン内の時間ｔ0での入力データＸ０と、実施の形態にかかるＰＬＣ１５が用いるテストパターン１０１内の時間ｔ0での入力データＸ０とは同じである。したがって、ＰＬＣ１５および比較例のＰＬＣは、処理Ｐ１と処理Ｐ１１とで同様の検証結果を得ることができる。
【００７９】
（処理Ｐ１２）
また、比較例のＰＬＣは、制御プログラムを実行する工程で比較例の記憶部の入力データＸ０を参照する命令があると、比較例の記憶部内の入力データＸ０を参照し、この入力データＸ０に従って命令を実行する。この場合において、時間ｔ1から時間ｔ3までの間は、記憶部１７および比較例の記憶部の入力データが更新されていない。したがって、比較例のＰＬＣが用いるテストパターン内の時間ｔ1での入力データＸ０と、実施の形態にかかるＰＬＣ１５が用いるテストパターン１０１内の時間ｔ1での入力データＸ０とは同じである。したがって、ＰＬＣ１５および比較例のＰＬＣは、処理Ｐ２と処理Ｐ１２とで同様の検証結果を得ることができる。
【００８０】
（処理Ｐ１３）
上述したように、入出力データの更新処理である時間ｔ0で、比較例のＰＬＣが入力データＸ１の「０」を比較例の記憶部に格納すると、制御プログラムの実行時も比較例の記憶部が格納する入力データＸ１は「０」のままである。このため、比較例のＰＬＣは、制御プログラムを実行する工程で入出力装置１６の入力データＸ１を参照する命令があっても、比較例の記憶部の入力データＸ０しか取得できない。したがって、比較例のＰＬＣは、入出力装置１６の実際の入力データである入力データＸ１を用いることができない。すなわち、比較例のＰＬＣが、入出力装置１６の入力データＸ１を参照するような命令を実行する場合、比較例のＰＬＣは、検証装置１１と通信した時間ｔ0の入力データＸ０しか持たないので、正しい入力データＸ１を参照することができない。このように、比較例のＰＬＣは、時間ｔ0の時点での入力データＸ０，Ｘ１を記憶部に格納させたままであるので、時間ｔ2の時点で検証を行う場合であっても時間ｔ0の時点での入力データＸ０，Ｘ１を用いることしかできない。このため、比較例のＰＬＣは、実機と同様の精度で動作検証を行うことができない。なお、入出力装置１６は動作していないので、比較例のＰＬＣが入出力装置１６から入力データＸ１を読み出すことはできない。
【００８１】
また、検証装置１１が、動作検証の際に比較例のＰＬＣに検証用のデータである入力データＸ１を送信した場合、検証装置１１と比較例のＰＬＣとの間で通信処理が発生する。このため、比較例のＰＬＣは、動作検証の際に実際の動作と同様のタイミングで動作することができない。この結果、検証装置１１は、比較例のＰＬＣが用いる入出力データを正しく検証できない。
【００８２】
また、コンピュータが、シミュレーションによって制御プログラムの動作検証を行う場合、シミュレーションに用いる仮想環境を構築するための工数が増えるとともに、実時間上での検証が行えないので検証に長時間を要する。また、コンピュータが、シミュレーションによって制御プログラムの動作検証を行う場合、前述の実機を用いた動作検証と同様に、実機と同様のタイミングで入出力データが遷移するか否かを確認できない。
【００８３】
一方、ＰＬＣ１５は、動作検証用のデータであるテストパターン１０１を記憶部１７内に格納しておき、テストパターン１０１内の入力データＸ０，Ｘ１を参照してＰＬＣ１５が動作した結果得ることができる出力データＹ０，Ｙ１を算出している。そして、検証装置１１が、装置１４の動作仕様と、算出された出力データＹ０，Ｙ１とを照合している。換言すると、検証装置１１は、テストパターン１０１内の出力データと、算出された出力データＹ０，Ｙ１とを照合している。これにより、実際の装置１４と同様のタイミングで入力データＸ０，Ｘ１および出力データＹ０，Ｙ１が遷移するか否かが検証可能となる。
【００８４】
ここで、制御部１８のハードウェア構成について説明する。図７は、実施の形態にかかるＰＬＣが備える制御部のハードウェア構成例を示す図である。制御部１８は、図７に示した制御回路３００、すなわちプロセッサ３０１およびメモリ３０２により実現することができる。プロセッサ３０１の例は、ＣＰＵ（Central  Processing  Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサ、ＤＳＰともいう）またはシステムＬＳＩ（Large  Scale  Integration）である。メモリ３０２の例は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）またはフラッシュメモリである。
【００８５】
制御部１８は、プロセッサ３０１が、メモリ３０２で記憶されている、制御部１８の動作を実行するためのプログラムを読み出して実行することにより実現される。また、このプログラムは、制御部１８の手順または方法をコンピュータに実行させるものであるともいえる。メモリ３０２は、プロセッサ３０１が各種処理を実行する際の一時メモリにも使用される。
【００８６】
このように、プロセッサ３０１が実行するプログラムは、コンピュータで実行可能な、データ処理を行うための複数の命令を含むコンピュータ読取り可能かつ非遷移的な（non-transitory）記録媒体を有するコンピュータプログラムプロダクトである。プロセッサ３０１が実行するプログラムは、複数の命令がデータ処理を行うことをコンピュータに実行させる。
【００８７】
また、制御部１８を専用のハードウェアで実現してもよい。また、制御部１８の機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。
【００８８】
なお、検証装置１１のテストパターン生成部１２および照合部１３も、制御部１８と同様に、図７に示した制御回路３００、すなわちプロセッサ３０１およびメモリ３０２により実現することができる。
【００８９】
このように、実施の形態では、ＰＬＣ１５が、時間情報Ｔ２を含んだテストパターン１０１を記憶しておき、生成した時間情報Ｔ１に基づいて、テストパターン１０１から入力データＸ０，Ｘ１を抽出している。そして、ＰＬＣ１５は、制御プログラムおよび抽出した入力データＸ０，Ｘ１を用いて出力データＹ０，Ｙ１を算出している。さらに、検証装置１１が、テストパターン１０１内の、入力データＸ０，Ｘ１に対応する出力データと、ＰＬＣ１５が算出した出力データとを照合している。これにより、プログラム検証システム１０は、実際の装置１４と同様のタイミングで入出力データが遷移するか否かの検証を実行することができる。したがって、プログラム検証システム１０は、制御プログラムの正確な動作検証を容易に行うことが可能となる。
【００９０】
また、ＰＬＣ１５は、テストパターン１０１を、ＰＬＣ１５内の記憶部１７に格納しているので、ＰＬＣ１５内の入出力データの値を高速で書き換えることができる。また、ＰＬＣ１５は、テストパターン１０１を、ＰＬＣ１５内の記憶部１７に格納しているので、動作検証の際に、検証装置１１から入力データＸ０，Ｘ１を受信する必要がなくなる。これにより、プログラム検証システム１０は、短時間かつ少ない工数で制御プログラムの動作検証を実行することが可能となる。したがって、装置１４またはＰＬＣ１５を含んだ設備を開発する際の立ち上げ期間を短縮することが可能となる。
【００９１】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【００９２】
１０  プログラム検証システム、１１  検証装置、１２  テストパターン生成部、１３  照合部、１４  装置、１５  ＰＬＣ、１６  入出力装置、１７  記憶部、１８  制御部、１９  時間情報生成部、２１  テストパターン格納領域、２２  パラメータ格納領域、２３  入力データ格納領域、２４  出力データ格納領域、２５  制御プログラム格納領域、３１，３２  通信ＩＦ部、１０１  テストパターン。
【要約】
プログラム検証システム（１０）において、装置（１４）を制御するための制御プログラムを用いて制御入力データに対応する制御出力データを算出して入出力装置（１６）に出力するＰＬＣ（１５）と、装置の動作仕様を満たすテスト入力データとテスト出力データとの組み合わせであって時間的変化を示すテストパターンに含まれるテスト出力データと、ＰＬＣ（１５）が算出した制御出力データと、を照合することによって制御プログラムの動作検証を行う照合部（１３）と、を備え、ＰＬＣ（１５）は、制御プログラムの動作検証が行われる際には、制御プログラムで制御入力データを参照する命令があるとＰＬＣ（１５）内の第１の時間情報を生成するとともにテストパターン内から第１の時間情報に対応するテスト入力データを抽出し、抽出したテスト入力データおよび制御プログラムを用いて出力データを算出する制御部（１８）と、を有する。【図１】
0006395967.tif 000002
【図２】
0006395967.tif 000003
【図３】
0006395967.tif 000004
【図４】
0006395967.tif 000005
【図５】
0006395967.tif 000006
【図６】
0006395967.tif 000007
【図７】
0006395967.tif 000008