(57)【要約】【課題】精度良く装置の制御プログラムの検証を行える検証装置を提供する。【解決手段】検証装置は、検証対象装置において制御プログラムを実行する制御部の動作を模擬するシミュレータと、制御プログラムにおいて検証対象装置のリソースに対応する変数についての条件式と、当該変数が当該条件式を満たすときに実行される命令と、当該命令の実行状態と、を示す実行状態情報を保持する保持手段と、シミュレータから実行した命令を示す実行情報が通知されると、実行状態情報の当該命令を実行済に設定する設定手段と、シミュレータから変数に対する書き込みアクセスが通知されると、当該変数が書込み前の値であるときに満たされる条件式で実行される命令を判定し、判定した命令の実行状態に基づき制御プログラムのエラーの有無を判定するエラー判定手段と、を備えている。【選択図】図１
2018067057.tif 000002
【特許請求の範囲】
【請求項１】
検証対象装置で動作する制御プログラムの検証装置であって、
前記検証対象装置において前記制御プログラムを実行する制御部の動作を模擬するシミュレータと、
前記制御プログラムにおいて前記検証対象装置のリソースに対応する変数についての条件式と、当該変数が当該条件式を満たすときに実行される命令と、当該命令の実行状態と、を示す実行状態情報を保持する保持手段と、
前記シミュレータから実行した命令を示す実行情報が通知されると、前記実行状態情報の当該命令を実行済に設定する設定手段と、
前記シミュレータから変数に対する書き込みアクセスが通知されると、当該変数が書込み前の値であるときに満たされる条件式で実行される命令を判定し、前記判定した命令の実行状態に基づき前記制御プログラムのエラーの有無を判定するエラー判定手段と、
を備えていることを特徴とする検証装置。
【請求項２】
前記エラー判定手段は、前記判定した命令の実行状態に未実行のものがあると前記制御プログラムにエラーが有ると判定することを特徴とする請求項１に記載の検証装置。
【請求項３】
前記設定手段は、前記エラー判定手段が前記制御プログラムにエラーが無いと判定すると、前記判定した命令の実行状態を未実行に設定することを特徴とする請求項１又は２に記載の検証装置。
【請求項４】
前記制御プログラムを読み込んで、前記制御プログラムの中の変数の条件式と、当該変数が当該条件式を満たすときに実行される命令と、の対応関係を判定する対応関係判定手段をさらに備えていることを特徴とする請求項１から３のいずれか１項に記載の検証装置。
【請求項５】
前記対応関係判定手段は、指定された変数について、前記制御プログラムの中の条件式と、当該条件式を満たすときに実行される命令と、の対応関係を判定することを特徴とする請求項４に記載の検証装置。
【請求項６】
前記エラー判定手段は、命令と、当該命令が実行されない検証対象装置のリソースの状態との対応関係を示す実行不可情報を保持しており、前記シミュレータから変数に対する書き込みアクセスが通知されると、当該変数が書込み前の値であるときに満たされる条件式で実行される命令を判定し、前記判定した命令それぞれについて、当該命令が実行され得るか否かを前記実行不可情報に基づき判定し、前記判定した命令の内、実行され得る命令の実行状態に基づき前記制御プログラムのエラーの有無を判定することを特徴とする請求項１から５のいずれか１項に記載の検証装置。
【請求項７】
前記エラー判定手段は、命令と、当該命令が実行され得る検証対象装置のリソースの状態との対応関係を示す実行可能情報を保持しており、前記シミュレータから変数に対する書き込みアクセスが通知されると、当該変数が書込み前の値であるときに満たされる条件式で実行される命令を判定し、前記判定した命令それぞれについて、当該命令が実行され得るか否かを前記実行可能情報に基づき判定し、前記判定した命令の内、実行され得る命令の実行状態に基づき前記制御プログラムのエラーの有無を判定することを特徴とする請求項１から５のいずれか１項に記載の検証装置。
【請求項８】
請求項１から７のいずれか１項に記載の検証装置としてコンピュータを機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置の制御プログラムの検証を行う検証装置に関する。
【背景技術】
【０００２】
装置の制御プログラムには、複数の制御対象を並列に処理するマルチタスク処理や、割込み処理が多用されている。そのため、処理が複雑になり、データ及び周辺ハードウェアといったリソースへのアクセス手順が設計通りに実装されないということが生じ得る。制御プログラムの検証を行うため、特許文献１は、メモリに対する書込アクセスと読出しアクセスをモニタし、読出しアクセスが実行される前に、書込みアクセスが実行された場合に不適切なアクセスと判定することを開示している。また、特許文献２は、検出すべきアクセス種別の順序を示すアクセスパターンと、制御プログラムの実行結果とを比較することで、不適切なアクセスを検出することを開示している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−０２９７３９号公報
【特許文献２】特開２０１３−０４５１７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば、割り込みを通知するためにメモリＡの第１ビットと第２ビットが使用されているものとする。また、メモリＡの第１ビット及び第２ビットがそれぞれ割り込みの発生を示すと、第１ビットに対応する割込み処理を行い、割り込み処理が終了すると、第１ビットをクリアするための書込みを行い、続いて、第２ビットに対応する割込み処理を行うものとする。この場合、割り込みが生じたことを示すためのメモリＡに対する書込みと、割り込みの発生を判定するためのメモリＡの読出しと、第１ビットに対応する割込み処理完了後のメモリＡに対する書込みが順に発生する。ここで、制御プログラムのバグにより、第１ビットに対応する割込み処理の完了後、メモリＡの第１ビットのみならず、第２ビットをクリアする処理を行っていたものとする。この場合でも、メモリＡに対するアクセスは、書込み、読出し、書込みの順である。したがって、リソースに対するアクセスパターンのみでは、エラーを精度良く判定できない場合がある。
【０００５】
本発明は、精度良く装置の制御プログラムの検証を行える検証装置及びプログラムを提供するものである。
【課題を解決するための手段】
【０００６】
本発明の一側面によると、検証対象装置で動作する制御プログラムの検証装置は、前記検証対象装置において前記制御プログラムを実行する制御部の動作を模擬するシミュレータと、前記制御プログラムにおいて前記検証対象装置のリソースに対応する変数についての条件式と、当該変数が当該条件式を満たすときに実行される命令と、当該命令の実行状態と、を示す実行状態情報を保持する保持手段と、前記シミュレータから実行した命令を示す実行情報が通知されると、前記実行状態情報の当該命令を実行済に設定する設定手段と、前記シミュレータから変数に対する書き込みアクセスが通知されると、当該変数が書込み前の値であるときに満たされる条件式で実行される命令を判定し、前記判定した命令の実行状態に基づき前記制御プログラムのエラーの有無を判定するエラー判定手段と、を備えていることを特徴とする。
【発明の効果】
【０００７】
本発明によると、装置の制御プログラムの検証を精度良く行うことができる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態による検証装置の構成図。
【図２】一実施形態による検証装置のハードウェア構成図。
【図３】一実施形態による実行状態情報を示す図。
【図４】一実施形態によるアクセス管理部での処理を示すフローチャート。
【図５】一実施形態による判定部での処理を示すフローチャート。
【図６】一実施形態による判定部でのエラー判定の説明図。
【図７】一実施形態による解析部の構成図。
【図８】一実施形態による判定部でのエラー判定の説明図。
【図９】一実施形態による制御プログラムによる処理のフローチャート。
【図１０】一実施形態による無効マップを示す図。
【図１１】一実施形態による判定部でのエラー判定の説明図。
【図１２】一実施形態による判定部でのエラー判定の説明図。
【図１３】一実施形態によるマップ生成部の構成図。
【発明を実施するための形態】
【０００９】
以下、本発明の例示的な実施形態について図面を参照して説明する。なお、以下の実施形態は例示であり、本発明を実施形態の内容に限定するものではない。また、以下の各図においては、実施形態の説明に必要ではない構成要素については図から省略する。
【００１０】
＜第一実施形態＞
図２は、本実施形態による検証装置の実行環境であるコンピュータシステム２０１の構成図である。本体部２０２のハードディスク２０５は、コンピュータシステム２０１を検証装置として動作させるためのプログラム及びデータを格納しており、中央処理部２０３は、これらプログラムやデータを主記憶装置２０４にロードして実行する。これにより、コンピュータシステム２０１は、検証装置として動作する。また、ハードディスク２０５は、検証装置の検証対象装置の制御部が実行する、検証対象の制御プログラムも格納している。検証装置として動作するコンピュータシステム２０１は、この制御プログラムを実行して、制御プログラムのエラーを判定する。なお、表示装置２０６は、本体部２０２からの指示によりユーザに各種表示を行う出力インタフェースである。また、キーボード２０７及びマウス２０８は、コンピュータシステム２０１にユーザが指示を与えるための入力インタフェースである。
【００１１】
図１は、本実施形態による検証装置の構成図である。検証装置は、実行部１０１と、マップ生成部１０２と、を備えている。実行部１０１は、検証対象装置の各機能を模擬するものであり、マップ生成部１０２は、後述する実行処理マップ１１５を生成する。以下では、まず、実行部１０１の各機能ブロックについて説明する。ＣＰＵシミュレータ１０３は、検証対象装置のＣＰＵの動作を模擬する。つまり、検証対象装置の制御プログラムを実行して、検証対象装置の各部に対する制御動作を模擬する。ＣＰＵシミュレータ１０３は、メモリシミュレータ１０４や装置シミュレータ１０５に対して直接アクセスを行うのではなく、アクセスを行う場合には、管理部１０６にアクセス情報を通知する。なお、アクセス情報は、アクセスするリソースのアドレスと、アクセス種別と、アクセス種別が書込みである場合には、書込む値と、を含んでいる。なお、アクセス種別は、データの読出し（以下、リード）であるか、データの書込み（以下、ライト）である。なお、リソースとは、制御で使用する一時的な値、検証対象装置のハードウェアを制御するためのレジスタの設定値、信号値、命令等であるが、制御プログラムでは、これらは変数として扱われることが一般的であり以下の説明では変数として表記する。また、ＣＰＵシミュレータ１０３は、命令を実行すると、実行した命令を示す情報を含む実行情報を管理部１０６に通知する。実行した命令を示す情報は、以下の説明では、実行した命令が格納されているプログラムカウンタの値、つまり、メモリアドレスの値とする。ＣＰＵシミュレータ１０３は、管理部１０６にアクセス情報を通知すると、模擬動作を一旦停止する。その後、管理部１０６から再開通知を受けることで模擬動作を再開する。
【００１２】
メモリシミュレータ１０４は、検証対象装置の制御部の主メモリの動作を模擬する。メモリシミュレータ１０４には、検証対象装置の主メモリの各領域と１対１で対応する領域が定義される。装置シミュレータ１０５は、検証対象装置の制御部により制御される各機能の動作を模擬する。例えば、検証対象装置が画像形成装置である場合は、装置シミュレータ１０５は、画像形成を行うためのユニットやマイコンのペリフェラルの動作を模擬する。
【００１３】
管理部１０６は、ＣＰＵシミュレータ１０３、メモリシミュレータ１０４、装置シミュレータ１０５との間のデータ入出力を管理するとともに、ＣＰＵシミュレータ１０３による制御プログラムの実行を監視する。管理部１０６は、ＣＰＵシミュレータ１０３からのアクセス情報を処理するアクセス管理部１０８と、ＣＰＵシミュレータ１０３からの実行情報を処理する実行管理部１０９と、を備えている。
【００１４】
アクセス管理部１０８のアクセス情報管理部１１０は、ＣＰＵシミュレータ１０３からのアクセス情報に基づきアクセス対象の変数を特定し、かつ、アクセス種別を特定する。アクセス種別がライトの場合、アクセス情報管理部１１０は、アクセス対象の変数を判定対象として、解析部１０７にエラーの判定依頼を行う。このとき、アクセス情報管理部１１０は、判定対象の変数の書込み前の値を解析部１０７に通知する。情報伝達部１１１は、ＣＰＵシミュレータ１０３と、メモリシミュレータ１０４と、装置シミュレータ１０５との間で入出力されるデータを伝達する。再開処理部１１２は、解析部１０７から依頼したエラー判定の判定結果を受け取ると、ＣＰＵシミュレータ１０３に対して再開通知を行う。
【００１５】
実行管理部１０９の実行情報記憶部１１４は、実行処理マップ１１５に含まれる命令の実行状態を示す実行状態情報を記憶している。図３は、実行情報記憶部１１４が保持する実行状態情報の説明図である。実行状態情報は、条件式と、当該条件式が満たされたときに実行される命令と、当該命令の実行状態を示す情報である。なお、実行される命令は、実行情報と同様に、当該命令が格納されているメモリのアドレスで示される。実行状態情報の条件式と、当該条件式が満たされたときに実行される命令との対応関係は、解析部１０７の実行処理マップ１１５に示されており、実行管理部１０９は、この対応関係を解析部１０７から取得して実行情報記憶部１１４に格納しておく。なお、条件式とは、制御プログラムの変数を使用した分岐条件の条件式である。実行情報管理部１１３は、ＣＰＵシミュレータ１０３から実行情報を受け取ると、実行状態情報のエントリの内、当該実行情報に含まれる命令に対応するエントリの実行状態を実行済にする。例えば、ＣＰＵシミュレータ１０３が、アドレス０ｘ５６７８５６７８を含む実行情報を通知すると、実行情報管理部１１３は、図３の上から３番目のエントリの実行状態を実行済に変更する。
【００１６】
解析部１０７の実行処理マップ１１５は、上述した様に、条件式と、当該条件式が満たされたときに実行される命令を示す情報である。なお、実行処理マップ１１５は、マップ生成部１０２が予め制御プログラムに基づき生成したものである。判定部１１６は、管理部１０６から判定対象の変数についてのエラーの判定依頼を受けると、合わせて通知される判定対象の変数の現在の値に基づき、制御プログラムのエラーの有無の判定を行う。このとき、判定部１１６は、実行情報記憶部１１４に記憶されている実行状態情報等を判定に使用する。これら判定に必要な情報は、管理部１０６が判定依頼と共に解析部１０７に通知する構成でも、解析部１０７が必要に応じて管理部１０６から取得する構成でも、その両方を含む構成であっても良い。なお、判定部１１６における判定処理の詳細は後述する。警告出力部１１７は、判定部１１６がエラーと判定すると、判定結果等を表示装置２０６に表示させてユーザに伝達する。
【００１７】
図４は、アクセス管理部１０８における処理フローである。アクセス管理部１０８は、図４の処理を繰り返し実行する。アクセス管理部１０８は、Ｓ１０１で、ＣＰＵシミュレータ１０３よりアクセス情報が通知されるまで待機する。アクセス情報を受けると、アクセス管理部１０８は、Ｓ１０２でアクセス情報の内容を判定し、Ｓ１０３で、取得したアクセス情報のアクセス種別がリードであるかライトであるかを判定する。
【００１８】
アクセス種別がリードである場合、アクセス管理部１０８は、Ｓ１０４で、リード処理を行う。具体的には、アクセス情報で指定された変数（リソース）の現在の値を読み出してＣＰＵシミュレータ１０３に通知する。その後、アクセス管理部１０８は、Ｓ１０８で、ＣＰＵシミュレータ１０３に対し処理の再開を通知する。一方、Ｓ１０３の判定において、アクセス種別がライトである場合、アクセス管理部１０８は、Ｓ１０５で、解析部１０７に、アクセス対象の変数及び当該変数の現在の値を通知してエラー判定を依頼する。解析部１０７による判定が完了すると、Ｓ１０６で、管理部１０６は、実行情報記憶部１１４が記憶する実行状態情報の内、判定対象の変数であって、当該変数の実行前の値で満たされる条件式に対応するエントリの実行状態を未実行に更新する。なお、解析部１０７による判定結果がエラーであると、図４の処理を停止する構成であっても良い。つまり、Ｓ１０６が実行されるのが、解析部１０７による判定結果がエラー無であると場合のみとする構成であっても良い。
【００１９】
管理部１０６は、Ｓ１０７で、ライト処理を行う。具体的には、メモリシミュレータ１０４や装置シミュレータ１０５にアクセスし、アクセス情報で指定された変数に対応するリソースに指定された値を書き込む。その後、管理部１０６は、Ｓ１０８でＣＰＵシミュレータ１０３に対し処理の再開を通知する。
【００２０】
続いて、判定部１１６でのエラー判定処理の一例について図６を用いて説明する。図６（Ａ）は、割込の発生を示す要因ビットレジスタを示し、図６（Ｂ）は、実行情報記憶部１１４が記憶する実行状態情報の内、要因ビットレジスタの値を条件式とする部分を示している。図６（Ｂ）によると、ＣＰＵシミュレータ１０３は、要因ビットレジスタのビット０の値が１であると、アドレス０ｘ１２３４ＡＡＡＡに格納された命令を実行する。ＣＰＵシミュレータ１０３は、当該命令の実行後、要因ビットレジスタのビット０の値を０に変更する。同様に、ＣＰＵシミュレータ１０３は、要因ビットレジスタのビット１の値が１であると、アドレス０ｘ１２３４ＢＢＢＢに格納された命令を実行し、要因ビットレジスタのビット１の値を０に変更する。ここで、例えば、制御プログラムは、要因ビットレジスタのビット０及びビット１の値が共に１であると、ビット０に対応する命令を実行し、ビット０に０を設定した後、ビット１に対応する命令を実行する様に設計されているものとする。しかしながら、制御プログラムのバグにより、ＣＰＵシミュレータ１０３は、ビット０に対応するアドレス０ｘ１２３４ＡＡＡＡに格納された命令の実行後、要因ビットレジスタのビット０及びビット１の両方に０を書込む様になっていたものとする。
【００２１】
この場合、ＣＰＵシミュレータ１０３は、まず、要因ビットレジスタのビット０の値が１であることから、アドレス０ｘ１２３４ＡＡＡＡに格納された命令を実行し、実行情報で、アドレス０ｘ１２３４ＡＡＡＡを実行管理部１０９に通知する。これにより、実行管理部１０９は、図６（Ｃ）に示す様に、実行状態情報の内、アドレス０ｘ１２３４ＡＡＡＡに対応するエントリの実行状態を実行済に変更する。続いて、ＣＰＵシミュレータ１０３は、要因ビットレジスタのビット０及びビット１に対するライトアクセスを示すアクセス情報をアクセス管理部１０８に通知する。なお、ビット０及びビット１に０を書込むのはバグであり、制御プログラムが設計通りであれば、ビット０のみに０を書込む。図４のＳ１０５で述べた様に、アクセス種別がライトであることから、アクセス管理部１０８は、解析部１０７にエラー判定を依頼する。このとき、アクセス管理部１０８は、ライト対象である要因ビットレジスタのビット０及びビット１を判定対象とし、それぞれの書込み前の値である１を解析部１０７に通知する。
【００２２】
解析部１０７の判定部１１６は、通知された要因ビットレジスタのビット０及ビット１の値が通知された１であるときに実行されるべき命令を実行処理マップ１１５に基づき判定する。そして、判定した命令の実行状態を実行管理部１０９から取得する。本例では、図６（Ｃ）に示す様に、０ｘ１２３４ＡＡＡＡの実行状態は実行済であるが、０ｘ１２３４ＢＢＢＢの実行状態は未実行である。判定部１１６は、実行管理部１０９から取得した総ての命令が実行されていないとエラーであると判定する。つまり、判定部１１６は、変数（上記例では要因ビットレジスタのビット０及びビット１）へのライトアクセスがあると、当該変数がライト前の値であるときに実行されるべき命令に未実行のものがあるとエラーと判定する。
【００２３】
図５は、判定部１１６における判定処理のフローチャートである。Ｓ２０１で判定部１１６は、判定対象の変数と、当該変数の現在の値を取得する。上記例では、判定対象の変数は要因ビットレジスタのビット０及びビット１であり、現在の値は共に１である。判定部１１６は、実行処理マップ１１５を参照して判定対象の変数が現在の値であるときに実行されるべき命令を判定し、判定した命令の実行状態をＳ２０２で実行管理部１０９から取得する。Ｓ２０３で、判定部１１６は、取得した実行状態が総て実行済みであるかを判定する。総て実行済であると、判定部１１６は、Ｓ２０４で正常と判定し、判定結果を管理部１０６に通知する。一方、総て実行済ではないと、判定部１１６は、Ｓ２０５でエラーと判定し、判定結果を管理部１０６に通知すると共に、Ｓ２０６で警告出力部１１７に警告を出力させる。
【００２４】
続いて、マップ生成部１０２について説明する。マップ生成部１０２は、制御プログラムを読み込んで、実行処理マップ１１５を生成し、解析部１０７に通知する。さらに、この情報は、実行管理部１０９にも通知される。情報抽出部１１８は、制御プログラムを読み込んで、変数と各変数について、分岐条件で参照されている箇所を抽出し、さらに、抽出した分岐条件に応じて実行される命令を抽出する。この様に、情報抽出部１１８は、制御プログラムの中の変数の条件式と、当該変数が当該条件式を満たすときに実行される命令と、の対応関係を判定する対応関係判定部として動作する。情報解析部１１９は、情報抽出部１１８が抽出した、変数に関する条件式と、当該条件式が満たされたときに実行される命令が格納されているアドレスの対応関係を判定して実行処理マップ１１５を生成する。
【００２５】
以上、変数へのライトアクセスがあると、当該変数が、その書込み前の値であるときに実行されるべき命令の実行状態を判定し、実行されていない命令が存在すると制御プログラムにエラーが有ると判定する。この構成により精度良く制御プログラムのエラーを判定することができる。
【００２６】
＜第二実施形態＞
続いて、本実施形態について第一実施形態との相違点を中心に説明する。第一実施形態では、制御プログラムによるライトアクセスをトリガとして、書込み対象の変数の変更前の値で実行されるべき総ての命令が実行されたか否かによりエラーを判定していた。ここで、制御プログラムによる処理において状態Ａと状態Ｂの２つの状態が定義されているものとする。なお、状態Ａと状態Ｂは互いに排他的であるものとする。また、状態Ａのときには、ある変数を使用した分岐条件により処理Ａが実行され、状態Ｂのときには同じ変数の同じ分岐条件で処理Ｂが実行されるものとする。第一実施形態の構成では、この変数に対するライトアクセスでの判定において、処理Ａと処理Ｂの両方が実行されていないとエラーと判定され得る。
【００２７】
このため、本実施形態では、図７に示す様に、解析部１０７に無効マップ３０１を設ける。以下、無効マップ３０１を使用した判定部１１６でのエラー判定処理についてモータ駆動処理を例にして説明する。本説明例において、検証対象装置は、２つのモータＡ及びモータＢを有し、これらモータは、定常駆動状態とステップ駆動状態という２つの排他的な状態で制御されるものとする。また、モータ駆動のため、図８（Ａ）に示すモータ駆動レジスタを使用し、モータ駆動レジスタのビット０はモータＡの駆動／停止を示し、ビット１はモータＢの駆動／停止を示すものとする。
【００２８】
図８（Ｂ）は、本例における実行状態情報を示している。なお、図８（Ｂ）において、条件式が同じエントリが２つ記載されているのは、モータには定常駆動状態とステップ駆動状態の２つの状態が定義されているからである。図８（Ｂ）において、処理Ａ〜Ｄは、定常駆動状態である場合に実行される命令での処理であり、処理Ｅ〜Ｈはステップ駆動状態である場合に実行される命令での処理である。例えば、ステップ駆動状態であると、ＣＰＵシミュレータ１０３は、モータ駆動レジスタのビット０の値を判定し、１であると処理Ｅを実行し、０であると処理Ｆを実行する。その後、モータ駆動レジスタのビット１の値を判定し、１であると処理Ｇを実行し、０であると処理Ｈを実行する。定常駆動状態の場合のＣＰＵシミュレータ１０３の処理フローを図９に示す。定常駆動状態の場合もステップ駆動状態の場合と基本的に同じであるが、モータＡの駆動ビット、つまり、モータ駆動レジスタのビット０が１であると、処理Ａを行い、処理Ａの終了後、モータＡが故障しているか否かを判定する。そして、モータＡが故障であれば、モータＡの駆動ビットを０に設定している。モータＢについても同様である。
【００２９】
図１０は、本例による無効マップ３０１を示している。無効マップ３０１は、条件式を満たすときに実行されない命令を示している。つまり、無効マップ３０１は、命令と、当該命令が実行されない検証対象装置のリソースの状態との対応関係を示す実行不可情報である。上述した様に、定常駆動状態では、処理Ａ〜Ｄは実行され得るが、処理Ｅ〜Ｈは実行されない。一方、ステップ駆動状態では、処理Ｅ〜Ｈは実行され得るが、処理Ａ〜Ｄは実行されない。このため、無効マップ３０１は、ステップ駆動状態であると処理Ａ〜Ｄに対応する命令が実行されないことを示し、定常駆動状態であると、処理Ｅ〜Ｈに対応する命令が実行されないことを示している。無効マップは、例えば、ユーザが予め作成して解析部１０７に保存しておく。
【００３０】
図９に示す様に、モータＡの駆動ビットが１であることから処理Ａを行ったものとする。これにより、図８（Ｂ）の処理Ａは実行済に設定される。その後のモータＡの故障判定でモータＡが故障であり、ＣＰＵシミュレータ１０３が、モータＡの駆動ビット、つまり、モータ駆動レジスタのビット０の値を０にするライトアクセスを行ったものとする。この場合、判定部１１６は、モータ駆動レジスタのビット０が１であるときに実行されるべき命令を実行処理マップ１１５に基づき判定する。つまり、図１１（Ａ）に示す処理Ａ及び処理Ｅが判定される。第一実施形態では、処理Ｅが未実行であることからエラーと判定される。一方、本実施形態では、図１１（Ａ）に示す２つの処理に対応する命令を無効マップ３０１から抽出する。つまり、図１１（Ｂ）に示す２つのエントリが抽出される。判定部１１６は、図１１（Ｂ）の条件式に基づき、状態を示す変数がステップ駆動を示しているのか、定常駆動を示しているのかを管理部１０６に問い合わせて取得する。本例では、定常駆動であるので無効マップ３０１に基づき処理Ｅが抽出され、図１１（Ａ）の内、処理Ｅについては実行済であるか否かの判定から除外される。その結果、処理Ａのみが実行済であるか否かの判定対象となり、本例では、実行済であるのでエラー無と判定される。
【００３１】
続いて、制御プログラムにバグが有り、図９のフローチャートにおいて、モータＡが故障している場合、モータ駆動レジスタのビット０及びビット１を０に設定する様になっていた場合について説明する。この場合、モータＡが故障と判定されたことにより、ＣＰＵシミュレータ１０３は、モータ駆動レジスタのビット０及びビット１の値を０にするライトアクセスを行う。したがって、判定部１１６は、モータ駆動レジスタのビット０及びビット１が１であるときに実行されるべき命令を実行処理マップ１１５に基づき判定する。つまり、図１２（Ａ）に示す処理Ａ、処理Ｂ、処理Ｅ及び処理Ｆが判定される。判定部１１６は、さらに、抽出した処理に対応する命令のエントリを無効マップ３０１から抽出する。つまり、図１２（Ｂ）に示す４つのエントリが抽出される。上述したのと同様に、本例では、定常駆動状態であるので、判定部１１６は、図１２（Ａ）の処理Ｅ及び処理Ｆについては判定から除外する。つまり、判定部１１６は、処理Ａ及びＢの両方が実行済であるか否かを判定する。本例では、処理Ｂが未実行であるためエラーと判定される。本実施形態における判定部１１６での処理は、図６のＳ２０３における実行済であるか否かの判定対象を、無効マップ３０１に基づき決定すること以外は同じである。
【００３２】
以上、無効マップ３０１により実行済か否かの判定対象を制限することで、精度良く制御プログラムのエラー検証を行うことができる。なお、無効マップ３０１は、条件式で示された条件を満たすときに判定から除外される命令を示すものであった。しかしながら、条件式で示された条件を満たすときに判定に使用する命令を示す有効マップを使用する構成であっても良い。有効マップは、命令と、当該命令が実行され得る検証対象装置のリソースの状態との対応関係を示す実行可能情報である。
【００３３】
＜第三実施形態＞
第一実施形態では、制御プログラムの総ての変数に関する条件式と、当該条件式を満たしたときに実行される命令との関係を判定し、総ての変数それぞれに対するライトアクセス時にエラー判定を行っていた。本実施形態では、ユーザが指定した変数についてのみ監視を行う。図１３は、本実施形態によるマップ生成部１０２の構成図である。有効リソースリスト４０１は、監視対象の変数を指定するものであり、ユーザにより作成される。本実施形態によるマップ生成部１０２での実行処理マップ１１５の生成手順は、基本的に第一実施形態と同様である。しかしながら、本実施形態では、有効リソースリスト４０１に含まれる変数についてのみ実行処理マップ１１５を生成し、有効リソースリスト４０１に含まれない変数については実行処理マップ１１５に含めない。この構成により、必要な変数についてのみ監視を行うことができる。
【００３４】
［その他の実施形態］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００３５】
１０３：ＣＰＵシミュレータ、１１３：実行情報管理部、１１４：実行情報記憶部、１１６：判定部
【図１】
2018067057.tif 000003
【図２】
2018067057.tif 000004
【図３】
2018067057.tif 000005
【図４】
2018067057.tif 000006
【図５】
2018067057.tif 000007
【図６】
2018067057.tif 000008
【図７】
2018067057.tif 000009
【図８】
2018067057.tif 000010
【図９】
2018067057.tif 000011
【図１０】
2018067057.tif 000012
【図１１】
2018067057.tif 000013
【図１２】
2018067057.tif 000014
【図１３】
2018067057.tif 000015