(57)【要約】  動作命令及び条件命令を含む制御プログラムと、命令の命令名、命令の種別及び命令の処理の内容を含む命令仕様データと、制御プログラムに対して実行される検索の結果が蓄積される検索結果データと、を記憶する記憶部と、ターゲットの変数を設定する変数設定部と、ターゲットの変数の値が変化する可能性がある動作命令を検索して、ターゲットの変数名、並びに、検索された動作命令の命令名、命令の種別及び処理の内容を検索結果データに書き込む動作検索部と、動作命令を実行する条件を判定する条件命令を検索して、検索された条件命令の引数の変数名、並びに、条件命令の命令名、命令の種別及び処理の内容を検索結果データに書き込み、条件命令の引数を新たなターゲットの変数に設定する条件検索部と、動作検索部及び条件検索部に検索を再度実行させる検索判定部と、検索結果データの内容を一覧表示する一覧表示部と、を備える。
2016166876.tif 000002
【特許請求の範囲】
【請求項１】
引数の値を変化させる動作命令及び前記動作命令を実行する条件を判定する条件命令を含む制御プログラムと、前記制御プログラムで記述され得る命令の命令名、前記動作命令又は前記条件命令の種別、並びに、命令の処理の内容を含む命令仕様データと、前記制御プログラムに対して実行される検索の結果が蓄積される検索結果データと、を記憶する記憶部と、
ターゲットの変数を設定する変数設定部と、
前記ターゲットの変数の値が変化する可能性がある前記動作命令を前記制御プログラムの中から検索して、検索された前記動作命令と前記命令仕様データとを照合し、前記ターゲットの変数名、並びに、検索された前記動作命令の命令名、命令の種別及び処理の内容を前記検索結果データに書き込む動作検索部と、
前記動作検索部で検索された前記動作命令を実行する条件を判定する前記条件命令を前記制御プログラムの中から検索して、検索された前記条件命令と前記命令仕様データとを照合し、検索された前記条件命令の引数の変数名、並びに、検索された前記条件命令の命令名、命令の種別及び処理の内容を前記検索結果データに書き込み、検索された前記条件命令の引数を新たなターゲットの変数に設定する条件検索部と、
前記動作検索部及び前記条件検索部に検索を再度実行させる検索判定部と、
前記検索結果データの内容を一覧表示する一覧表示部と、
を備えることを特徴とするプログラム診断装置。
【請求項２】
前記動作検索部は、前記制御プログラムの中の命令と前記命令仕様データとを照合することで当該命令の命令種別を取得することにより、前記動作命令を前記制御プログラムの中から検索することを特徴とする請求項１に記載のプログラム診断装置。
【請求項３】
前記条件検索部は、前記制御プログラムの中の命令と前記命令仕様データとを照合することで当該命令の命令種別を取得することにより、前記条件命令を前記制御プログラムの中から検索することを特徴とする請求項１に記載のプログラム診断装置。
【請求項４】
前記記憶部は、前記制御プログラムに対して実行される検索の終了条件が記述された検索終了条件データを更に記憶し、
前記検索判定部は、前記動作検索部及び前記条件検索部によって実行された検索が前記終了条件を満たしていると判定したら、前記動作検索部及び前記条件検索部による検索を終了させ、前記動作検索部及び前記条件検索部によって実行された検索が前記終了条件を満たしていないと判定したら、前記動作検索部及び前記条件検索部に検索を再度実行させることを特徴とする請求項１に記載のプログラム診断装置。
【請求項５】
前記検索終了条件データは、前記動作検索部及び前記条件検索部による検索回数のデータ又は前記制御プログラムの検索範囲のデータであることを特徴とする請求項４に記載のプログラム診断装置。
【請求項６】
前記一覧表示部は、変数名、又は、検索された条件命令の命令名、命令の種別若しくは処理の内容のフィルタ条件が入力されたら、前記検索結果データの中で前記フィルタ条件に合致するデータの内容を一覧表示することを特徴とする請求項１に記載のプログラム診断装置。
【請求項７】
前記記憶部は、前記制御プログラムで使用されている全変数の予め定められたタイミングでの値が蓄積される実行データを更に記憶し、
前記予め定められたタイミングで、前記制御プログラムを実行する制御装置のメモリをスキャンすることにより、前記制御プログラムで使用されている全変数の値を取得し、前記実行データに書き込むスキャン部を更に備えることを特徴とする請求項１に記載のプログラム診断装置。
【請求項８】
前記制御プログラムをシミュレーション実行することにより、前記制御プログラムで使用されている全変数の値を算出し、前記実行データに書き込むシミュレーション部を更に備えることを特徴とする請求項７に記載のプログラム診断装置。
【請求項９】
引数の値を変化させる動作命令及び前記動作命令を実行する条件を判定する条件命令を含む制御プログラムと、前記制御プログラムで記述され得る命令の命令名、前記動作命令又は前記条件命令の種別、並びに、命令の処理の内容を含む命令仕様データと、前記制御プログラムに対して実行される検索の結果が記録される検索結果データと、を記憶する記憶部を備えるプログラム診断装置で実行される方法であって、
ターゲットの変数を設定する変数設定工程と、
前記ターゲットの変数の値が変化する可能性がある前記動作命令を前記制御プログラムの中から検索して、検索された前記動作命令と前記命令仕様データとを照合し、前記ターゲットの変数名、並びに、検索された前記動作命令の命令名、命令の種別及び処理の内容を前記検索結果データに書き込む動作検索工程と、
前記動作検索工程で検索された前記動作命令を実行する条件を判定する前記条件命令を前記制御プログラムの中から検索して、検索された前記条件命令と前記命令仕様データとを照合し、検索された前記条件命令の引数の変数名、並びに、検索された前記条件命令の命令名、命令の種別及び処理の内容を前記検索結果データに書き込み、検索された前記条件命令の引数を新たなターゲットの変数に設定する条件検索工程と、
前記動作検索工程及び前記条件検索工程に検索を再度実行させる検索判定工程と、
前記検索結果データの内容を一覧表示する一覧表示工程と、
を備えることを特徴とするプログラム診断方法。
【請求項１０】
引数の値を変化させる動作命令及び前記動作命令を実行する条件を判定する条件命令を含む制御プログラムと、前記制御プログラムで記述され得る命令の命令名、前記動作命令又は前記条件命令の種別、並びに、命令の処理の内容を含む命令仕様データと、前記制御プログラムに対して実行される検索の結果が記録される検索結果データと、を記憶する記憶部を備えるプログラム診断装置で実行されるプログラムであって、
ターゲットの変数を設定する変数設定工程と、
前記ターゲットの変数の値が変化する可能性がある前記動作命令を前記制御プログラムの中から検索して、検索された前記動作命令と前記命令仕様データとを照合し、前記ターゲットの変数名、並びに、検索された前記動作命令の命令名、命令の種別及び処理の内容を前記検索結果データに書き込む動作検索工程と、
前記動作検索工程で検索された前記動作命令を実行する条件を判定する前記条件命令を前記制御プログラムの中から検索して、検索された前記条件命令と前記命令仕様データとを照合し、検索された前記条件命令の引数の変数名、並びに、検索された前記条件命令の命令名、命令の種別及び処理の内容を前記検索結果データに書き込み、検索された前記条件命令の引数を新たなターゲットの変数に設定する条件検索工程と、
前記動作検索工程及び前記条件検索工程に検索を再度実行させる検索判定工程と、
前記検索結果データの内容を一覧表示する一覧表示工程と、
を備えることを特徴とするプログラム診断プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムを診断するプログラム診断装置、プログラム診断方法及びプログラム診断プログラムに関する。
【背景技術】
【０００２】
ＦＡ（Factory  Automation）分野で機械を制御する制御システムでは、制御プログラムはプログラム言語で記述される。プログラム言語は、ラダー（Ladder、ＬＤ）言語又はストラクチャードテキスト（Structured  Text、ＳＴ）言語（ＩＥＣ  ６１１３１−３、ＪＩＳ  Ｂ  ３５０３：２０１２）が例示される。【０００３】
制御プログラムは、命令及び変数を含む。制御プログラム内のある変数の値が、想定している値と異なった場合に、その原因を調査するためには、以下の操作が手動で行われていた。【０００４】
第１の操作は、制御プログラムを遡り、ターゲットの変数の値を変化させる可能性がある箇所及び条件を調べる操作である。【０００５】
第２の操作は、制御プログラムをシミュレーション実行し、第１の操作で調べた箇所で条件が満たされることを再現する操作である。【０００６】
第３の操作は、更に制御プログラムを遡り、第２の操作で再現した条件を満たす箇所及び条件を調べる操作である。【０００７】
以降、第２の操作及び第３の操作を繰り返し、根本となる原因を探していた。【０００８】
しかし、手動で制御プログラムを遡って調べていくことは、時間及び労力が掛かるので、変数の値が想定している値と異なったことの原因の特定は困難であった。【０００９】
関連する技術として、下記の特許文献１には、出力信号が異常接点であると検知された場合、該出力信号からラダープログラムを前のステップに戻って行き、１つ１つの接点状態を確認しながら不具合接点を特定するカバレッジ診断を行う、ラダープログラム診断方法が記載されている（段落００５３）。【００１０】
また、下記の特許文献２には、出力命令部の異常を検索キーとして、この値を操作可能な出力命令部を含んだブロックをラダープログラム内の全ブロック中から発見する第１の過程と、第１の過程において探し出されたブロックの条件命令部の論理演算を行い、この条件命令部の論理演算結果に対応するこのブロックの出力命令部の状態を判定し、このブロックが上記異常な出力命令部の状態を真に操作しているか否かの正当性判定を行う第２の過程と、第２の過程においてブロックが正当な場合に、このブロックの条件命令部の中からその出力命令部の状態を操作可能なリレーをすべて探す第３の過程と、第３の過程で探し出されたリレーを次の検索キーとして第１，第２及び第３の過程を繰り返す第４の過程と、第１の過程において該当するブロックが見つからなかった場合に、その旨の結果を出力すると共に、第３の過程において該当するリレーが見つからなかった場合にその条件命令部内のリレーを異常原因とする結果を出力する第５の過程と、を有するラダーシーケンス方式のプログラムにおける異常の原因箇所究明方法が記載されている（第４頁から第５頁）。【００１１】
また、下記の特許文献３には、シーケンス図取得部が動作状態のシーケンス図を取得し、選択部が動作シーケンス図の中の所望するシンボルを選択することによって、そのシンボルに関連する上流の接続線を接続線検索部が芋づる式に検索し、動作状態の出力の有無を容易に得ることができると共に、動作状態が変化しても、そのデータを読み込んで不良部分の検索を順次行うことができるシーケンス図モニターが記載されている（要約書）。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００１−６７１２２号公報
【特許文献２】特開平３−１０８００５号公報
【特許文献３】特開平９−３０５２０７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、特許文献１から３に記載の技術では、ユーザは、問題の原因となった接点を知ることはできるが、問題の原因となった接点から問題が発生した接点までの間の命令を知ることができない。従って、ユーザが問題の全体像を把握することは、困難であった。【００１４】
本発明は、上記に鑑みてなされたものであって、ユーザが問題の全体像を把握することを容易にすることができるプログラム診断装置を得ることを目的とする。
【課題を解決するための手段】
【００１５】
上述した課題を解決し、目的を達成するために、本発明は、引数の値を変化させる動作命令及び動作命令を実行する条件を判定する条件命令を含む制御プログラムと、制御プログラムで記述され得る命令の命令名、動作命令又は条件命令の種別、並びに、命令の処理の内容を含む命令仕様データと、制御プログラムに対して実行される検索の結果が蓄積される検索結果データと、を記憶する記憶部を備える。本発明は、ターゲットの変数を設定する変数設定部と、ターゲットの変数の値が変化する可能性がある動作命令を制御プログラムの中から検索して、検索された動作命令と命令仕様データとを照合し、ターゲットの変数名、並びに、検索された動作命令の命令名、命令の種別及び処理の内容を検索結果データに書き込む動作検索部と、動作検索部で検索された動作命令を実行する条件を判定する条件命令を制御プログラムの中から検索して、検索された条件命令と命令仕様データとを照合し、検索された条件命令の引数の変数名、並びに、検索された条件命令の命令名、命令の種別及び処理の内容を検索結果データに書き込み、検索された条件命令の引数を新たなターゲットの変数に設定する条件検索部と、動作検索部及び条件検索部に検索を再度実行させる検索判定部と、検索結果データの内容を一覧表示する一覧表示部と、を備える。
【発明の効果】
【００１６】
本発明にかかるプログラム診断装置は、ユーザが問題の全体像を把握することを容易にすることができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】実施の形態１にかかる制御システムの構成を示す図
【図２】実施の形態１にかかる制御装置のハードウェア構成を示す図
【図３】実施の形態１にかかるエンジニアリングツールのハードウェア構成を示す図
【図４】実施の形態１にかかるエンジニアリングツールの機能ブロックを示す図
【図５】実施の形態１にかかるエンジニアリングツールの命令仕様データを示す図
【図６】実施の形態１にかかるエンジニアリングツールの検索回数データを示す図
【図７】実施の形態１にかかるエンジニアリングツールの検索範囲データを示す図
【図８】実施の形態１にかかるエンジニアリングツールの検索結果データを示す図
【図９】実施の形態１にかかるエンジニアリングツールのプロジェクトデータ作成画面を示す図
【図１０】実施の形態１にかかるエンジニアリングツールの処理を示すフローチャート
【図１１】実施の形態１にかかるエンジニアリングツールの処理を示すフローチャート
【図１２】実施の形態１にかかるエンジニアリングツールの処理を示すフローチャート
【図１３】実施の形態１にかかるエンジニアリングツールのプログラム診断画面を示す図
【図１４】実施の形態１にかかるエンジニアリングツールの検索処理を説明する図
【図１５】実施の形態１にかかるエンジニアリングツールの検索処理を説明する図
【図１６】実施の形態１にかかるエンジニアリングツールの検索処理を説明する図
【図１７】実施の形態１にかかるエンジニアリングツールのプログラム診断画面を示す図
【図１８】実施の形態１にかかるエンジニアリングツールの処理を示すフローチャート
【図１９】実施の形態１にかかるエンジニアリングツールの処理を示すフローチャート
【発明を実施するための形態】
【００１８】
以下に、本発明の実施の形態にかかるプログラム診断装置、プログラム診断方法及びプログラム診断プログラムを図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１９】
実施の形態１．
図１は、本発明の実施の形態１にかかる制御システムの構成を示す図である。制御システム１は、エンジニアリングツール２と、制御装置３と、機械４及び５と、を含む。
【００２０】
エンジニアリングツール２は、制御装置３で実行される制御プログラムを含むプロジェクトデータを作成して、制御装置３に送信する。制御装置３は、プロジェクトデータに含まれる制御プログラムを実行することにより、機械４及び５を制御する。制御装置３は、プログラマブルコントローラ（ＪＩＳ  Ｂ  ３５０２：２０１１、programmable  controllers（ＰＬＣ））が例示される。
【００２１】
図２は、実施の形態１にかかる制御装置のハードウェア構成を示す図である。制御装置３は、メイン基板３ａと、サブ基板３ｂ及び３ｃと、を含む。
【００２２】
メイン基板３ａは、ＣＰＵ（Central  Processing  Unit）３ａ１と、ＲＡＭ（Random  Access  Memory）であるメモリ３ａ２と、通信インタフェース３ａ３と、バスインタフェース３ａ４と、記憶部３ａ５と、を含む。ＣＰＵ３ａ１、メモリ３ａ２、通信インタフェース３ａ３、バスインタフェース３ａ４及び記憶部３ａ５は、内部バスＢ１を介して接続されている。
【００２３】
通信インタフェース３ａ３は、エンジニアリングツール２と通信を行う。
【００２４】
バスインタフェース３ａ４は、内部バスＢ１と拡張バスＢ２とを連絡するバスブリッジ回路である。サブ基板３ｂ及び３ｃは、拡張バスＢ２を介して、メイン基板３ａに接続されている。サブ基板３ｂは、機械４に接続されている。サブ基板３ｃは、機械５に接続されている。
【００２５】
記憶部３ａ５は、エンジニアリングツール２から受信したプロジェクトデータ２４ａを記憶する。記憶部３ａ５は、ＳＳＤ（Solid  State  Drive）又はＨＤＤ（Hard  Disk  Drive）が例示される。
【００２６】
プロジェクトデータ２４ａは、引数の値を変化させる動作命令及び動作命令を実行する条件を判定する条件命令を含む制御プログラム２４ａ１と、制御プログラム２４ａ１の実行時に参照される制御パラメータ２４ａ２と、メモリ３ａ２内の作業領域を規定するデバイスメモリ２４ａ３と、サブ基板３ｂと機械４との接続関係及びサブ基板３ｃと機械５との接続関係を規定する接続情報２４ａ４と、を含む。
【００２７】
制御プログラム２４ａ１は、ＭＡＩＮ（メイン）プログラム２４ａ１ａと、ＳＵＢ（サブ）プログラム２４ａ１ｂと、を含む。実施の形態１では、制御プログラム２４ａ１は、ラダー言語で記述されているものとするが、これに限定されない。制御プログラム２４ａ１が記述される他の言語は、ストラクチャードテキスト言語が例示される。
【００２８】
メモリ３ａ２内には、デバイスメモリ２４ａ３で規定される複数のデバイスが確保される。実施の形態１では、メモリ３ａ２内の複数のデバイスの各々は、制御プログラム２４ａ１の変数に対応する。
【００２９】
図３は、実施の形態１にかかるエンジニアリングツールのハードウェア構成を示す図である。実施の形態１にかかるエンジニアリングツール２は、コンピュータを利用して実現可能である。コンピュータは、ＣＰＵ２１と、ＲＡＭ２２と、ＲＯＭ（Read  Only  Memory）２３と、記憶部２４と、入力部２５と、表示部２６と、通信インタフェース２７と、を含む。ＣＰＵ２１、ＲＡＭ２２、ＲＯＭ２３、記憶部２４、入力部２５、表示部２６及び通信インタフェース２７は、バスＢを介して接続されている。
【００３０】
ＣＰＵ２１は、ＲＡＭ２２を作業領域として使用しながら、ＲＯＭ２３及び記憶部２４に記憶されているプログラムを実行する。ＲＯＭ２３に記憶されているプログラムは、ＢＩＯＳ（Basic  Input/Output  System）又はＵＥＦＩ（Unified  Extensible  Firmware  Interface）が例示される。記憶部２４に記憶されているプログラムは、オペレーティングシステムプログラム及びエンジニアリングツールプログラムが例示される。記憶部２４は、ＳＳＤ又はＨＤＤが例示される。
【００３１】
入力部２５は、ユーザからの操作入力を受け付ける。入力部２５は、キーボード又はマウスが例示される。表示部２６は、文字及び画像を表示する。表示部２６は、液晶表示装置が例示される。通信インタフェース２７は、制御装置３と通信を行う。
【００３２】
図４は、実施の形態１にかかるエンジニアリングツールの機能ブロックを示す図である。記憶部２４は、プロジェクトデータ２４ａを記憶する。
【００３３】
プロジェクトデータ２４ａは、引数の値を変化させる動作命令及び動作命令を実行する条件を判定する条件命令を含む制御プログラム２４ａ１と、制御プログラム２４ａ１の実行時に参照される制御パラメータ２４ａ２と、制御装置３のメモリ３ａ２内の作業領域を規定するデバイスメモリ２４ａ３と、制御装置３のサブ基板３ｂと機械４との接続関係及び制御装置３のサブ基板３ｃと機械５との接続関係を規定する接続情報２４ａ４と、を含む。
【００３４】
記憶部２４は、制御プログラム２４ａ１で記述され得る全ての命令の命令名、動作命令又は条件命令の種別並びに命令の処理の内容を含む命令仕様データ２４ｂを記憶する。
【００３５】
実施の形態１では、制御プログラム２４ａ１は、ラダー言語で記述されている。従って、命令仕様データ２４ｂは、ラダー言語の全ての命令の命令名、動作命令又は条件命令の種別並びに命令の処理の内容を含む。
【００３６】
図５は、実施の形態１にかかるエンジニアリングツールの命令仕様データを示す図である。命令仕様データ２４ｂは、命令名の項目２４ｂ１と、命令種別の項目２４ｂ２と、説明文の項目２４ｂ３と、備考の項目２４ｂ４と、を含む。
【００３７】
命令仕様データ２４ｂの行５１は、「ＬＤ」（ロード）命令に関する情報を含む。行５１の命令名の項目には、命令名「ＬＤ」が記述されている。行５１の命令種別の項目には、ＬＤ命令が条件命令であるので、命令種別「条件」が記述されている。
【００３８】
行５１の説明文の項目には、「ＬＤ」命令の動作の説明が記述されている。「ＬＤ」命令は第１引数がＯＮ（オン）しているか否かを判定する命令であるので、行５１の説明文の項目には、説明文「＃１がＯＮしている」が記述されている。
【００３９】
行５１の備考の項目には、「ＬＤ」命令の第１引数のデータ型が記述されている。「ＬＤ」命令の第１引数はビット型であるので、行５１の備考の項目には、備考「ビット変数」が記述されている。
【００４０】
命令仕様データ２４ｂの行５２は、「ＯＵＴ」（アウト）命令に関する情報を含む。行５２の命令名の項目には、命令名「ＯＵＴ」が記述されている。行５２の命令種別の項目には、ＯＵＴ命令が動作命令であるので、命令種別「動作」が記述されている。
【００４１】
行５２の説明文の項目には、「ＯＵＴ」命令の動作の説明が記述されている。「ＯＵＴ」命令は第１引数をＯＮ（オン）する命令であるので、行５２の説明文の項目には、説明文「＃１をＯＮする」が記述されている。
【００４２】
行５２の備考の項目には、「ＯＵＴ」命令の第１引数のデータ型が記述されている。「ＯＵＴ」命令の第１引数はビット型であるので、行５２の備考の項目には、備考「ビット変数」が記述されている。
【００４３】
命令仕様データ２４ｂの行５３は、「＝」（イコール）命令に関する情報を含む。行５３の命令名の項目には、命令名「＝」が記述されている。行５３の命令種別の項目には、「＝」命令が条件命令であるので、命令種別「条件」が記述されている。
【００４４】
行５３の説明文の項目には、「＝」命令の動作の説明が記述されている。「＝」命令は第１引数と第２引数とが等しいか否かを判定する命令であるので、行５３の説明文の項目には、説明文「＃１が＃２と等しい」が記述されている。
【００４５】
行５３の備考の項目には、「＝」命令の第１引数及び第２引数のデータ型が記述されている。「＝」命令の第１引数及び第２引数はワード型であるので、行５３の備考の項目には、備考「ワード変数」が記述されている。
【００４６】
命令仕様データ２４ｂの行５４は、「ＭＯＶ」（ムーブ）命令に関する情報を含む。行５４の命令名の項目には、命令名「ＭＯＶ」が記述されている。行５４の命令種別の項目には、「ＭＯＶ」命令が条件命令であるので、命令種別「動作」が記述されている。
【００４７】
行５４の説明文の項目には、「ＭＯＶ」命令の動作の説明が記述されている。「ＭＯＶ」命令は第１引数の値を第２引数に転送する命令であるので、行５４の説明文の項目には、説明文「＃１が＃２に転送される」が記述されている。
【００４８】
行５４の備考の項目には、「ＭＯＶ」命令の第１引数及び第２引数のデータ型が記述されている。「ＭＯＶ」命令の第１引数及び第２引数はワード型であるので、行５４の備考の項目には、備考「ワード変数」が記述されている。
【００４９】
図５では、４つの命令に関する４つの行５１，５２，５３及び５４を示した。しかし、実際には、命令仕様データ２４ｂは、ラダー言語で記述される全ての命令に関する複数の行を含む。
【００５０】
再び図４を参照すると、記憶部２４は、制御プログラム２４ａ１に対して実行される検索の終了条件が記述された検索終了条件データ２４ｃを記憶する。検索終了条件データ２４ｃは、検索回数データ２４ｃ１と、検索範囲データ２４ｃ２と、を含む。
【００５１】
図６は、実施の形態１にかかるエンジニアリングツールの検索回数データを示す図である。検索回数データ２４ｃ１には、「１０」が記述されている。これにより、制御プログラム２４ａに対して実行される検索は、最大１０回までで終了する。
【００５２】
図７は、実施の形態１にかかるエンジニアリングツールの検索範囲データを示す図である。検索範囲データ２４ｃ２は、範囲先頭ステップ番号の項目と、範囲末尾ステップ番号の項目と、を含む。範囲先頭ステップ番号の項目には、「１」が記述されている。範囲末尾ステップ番号の項目には、「１００」が記述されている。これにより、制御プログラム２４ａ１に対して実行される検索は、ステップ番号１からステップ番号１００までの範囲に限られ、この範囲から外れたら終了する。
【００５３】
再び図４を参照すると、記憶部２４は、制御プログラム２４ａ１に対して実行される検索の結果が蓄積される検索結果データ２４ｄを記憶する。
【００５４】
図８は、実施の形態１にかかるエンジニアリングツールの検索結果データを示す図である。検索結果データ２４ｄは、変数名の項目２４ｄ１と、命令名の項目２４ｄ２と、命令種別の項目２４ｄ３と、説明文の項目２４ｄ４と、プログラム名の項目２４ｄ５と、ステップ番号の項目２４ｄ６と、を含む。
【００５５】
検索結果データ２４ｄの行６１，６２，６３及び６４については、エンジニアリングツール２の動作の説明の中で説明する。
【００５６】
再び図４を参照すると、記憶部２４は、制御プログラム２４ａ１で使用されている全変数の予め定められたタイミングでの値が蓄積される実行データ２４ｅを記憶する。つまり、実行データ２４ｅは、複数の異なるタイミングでの全変数の値が蓄積される。
【００５７】
検索結果データ２４ｄについては、エンジニアリングツール２の動作の説明の中で説明する。
【００５８】
ＣＰＵ２１は、記憶部２４に記憶されたエンジニアリングツールプログラムを実行する。これにより、プロジェクトデータ作成部２１ａ１及びプログラム診断部２１ａ２を含むエンジニアリングツール部２１ａが実現される。
【００５９】
プロジェクトデータ作成部２１ａ１は、プロジェクトデータ２４ａを作成して、制御装置３に送信する。
【００６０】
図９は、実施の形態１にかかるエンジニアリングツールのプロジェクトデータ作成画面を示す図である。プロジェクトデータ作成部２１ａ１は、プロジェクトデータ作成画面３０を表示部２６に表示させる。
【００６１】
プロジェクトデータ作成画面３０は、制御プログラム作成欄３０ａを有する。図９では、制御プログラム作成欄３０ａ内に、ＭＡＩＮプログラム２４ａ１ａが作成されている。
【００６２】
ＭＡＩＮプログラム２４ａ１ａは、行４１，４２，４３，４４，４５及び４６を含む。
【００６３】
行４１は、条件命令４１ａと、動作命令４１ｂと、を含む。条件命令４１ａは、「ＬＤ  Ｍ０」である。この中の「Ｍ０」は、変数である。実施の形態１において、英字「Ｍ」と、数値と、の結合は、ビット型の変数を表す。
【００６４】
動作命令４１ｂは、「ＩＮＣ  Ｄ０」である。この中の「Ｄ０」は、変数である。実施の形態１において、英字「Ｄ」と、数値と、の結合は、ワード型の変数を表す。「ＩＮＣ」（インクリメント）命令は、第１引数を１増加させる命令である。つまり、動作命令４１ｂは、変数「Ｄ０」を１増加させる命令である。
【００６５】
行４２は、条件命令４２ａと、動作命令４２ｂと、を含む。条件命令４２ａは、「ＬＤ  Ｍ１００」である。この中の「Ｍ１００」は、変数である。
【００６６】
動作命令４２ｂは、「ＭＯＶ  Ｄ０  Ｄ１０」である。この中の「Ｄ１０」は、変数である。「ＭＯＶ」命令は、第１引数の値を第２引数に転送する命令である。つまり、動作命令４２ｂは、変数「Ｄ０」の値を変数「Ｄ１０」に転送する命令である。
【００６７】
行４３は、条件命令４３ａと、動作命令４３ｂと、を含む。条件命令４３ａは、「ＬＤ  Ｍ２００」である。この中の「Ｍ２００」は、変数である。
【００６８】
動作命令４３ｂは、「ＯＵＴ  Ｙ０」である。この中の「Ｙ０」は、変数である。実施の形態１において、英字「Ｙ」と、数値と、の結合は、ビット型の変数を表す。つまり、動作命令４３ｂは、変数「Ｙ０」をＯＮにする命令である。
【００６９】
行４４は、条件命令４４ａと、動作命令４４ｂと、を含む。条件命令４４ａは、「＝  Ｄ１０  Ｋ１００００」である。この中の「Ｋ１００００」は、定数「１００００」である。つまり、条件命令４４ａは、変数「Ｄ１０」の値と定数「１００００」とが等しいか否かを判定する命令である。
【００７０】
動作命令４４ｂは、「ＭＯＶ  Ｋ１５  Ｄ２０」である。この中の「Ｋ１５」は、定数「１５」であり、「Ｄ２０」は、変数である。つまり、動作命令４４ｂは、定数「１５」を変数「Ｄ２０」に転送する命令である。
【００７１】
行４５は、条件命令４５ａと、動作命令４５ｂと、を含む。条件命令４５ａは、「ＬＤ  Ｍ１０」と、「ＬＤ  Ｍ１１」と、「ＬＤ  Ｍ１２」と、のＯＲ（論理和）である。この中の「Ｍ１０」、「Ｍ１１」及び「Ｍ１２」は、変数である。つまり、条件命令４５ａは、変数「Ｍ１０」の値と、変数「Ｍ１１」の値と、変数「Ｍ１２」の値と、の論理和を判定する命令である。
【００７２】
動作命令４５ｂは、「ＭＯＶ  Ｄ２０  Ｄ３０」である。この中の「Ｄ３０」は、変数である。つまり、動作命令４５ｂは、変数「Ｄ２０」の値を変数「Ｄ３０」に転送する命令である。
【００７３】
行４６は、終了命令である。
【００７４】
再び図４を参照すると、プログラム診断部２１ａ２は、ターゲットの変数を設定する変数設定部２１ａ２ａを含む。変数設定部２１ａ２ａは、ユーザが入力部２５に入力した変数を受け取って、ターゲットの変数に設定することができる。また、変数設定部２１ａ２ａは、問題が発生した変数を制御装置３から受け取って、ターゲットの変数に設定することができる。
【００７５】
プログラム診断部２１ａ２は、ターゲットの変数の値が変化する可能性がある動作命令を制御プログラム２４ａ１の中から検索して、検索された動作命令と命令仕様データ２４ｂとを照合し、ターゲットの変数名、並びに、検索された動作命令の命令名、命令の種別及び処理の内容を検索結果データ２４ｄに書き込む動作検索部２１ａ２ｂを含む。
【００７６】
プログラム診断部２１ａ２は、動作検索部２１ａ２ｂで検索された動作命令を実行する条件を判定する条件命令を制御プログラム２４ａ１の中から検索して、検索された条件命令と命令仕様データ２４ｂとを照合し、検索された条件命令の引数の変数名、並びに、検索された条件命令の命令名、命令の種別及び処理の内容を検索結果データ２４ｄに書き込み、検索された条件命令の引数を新たなターゲットの変数に設定する条件検索部２１ａ２ｃを含む。
【００７７】
プログラム診断部２１ａ２は、動作検索部２１ａ２ｂ及び条件検索部２１ａ２ｃに検索を再度実行させる検索判定部２１ａ２ｄを含む。
【００７８】
プログラム診断部２１ａ２は、検索結果データ２４ｄの内容を一覧表示する一覧表示部２１ａ２ｅを含む。
【００７９】
プログラム診断部２１ａ２は、予め定められたタイミングで、制御装置３のメモリ３ａ２をスキャンすることにより、制御プログラム２４ａ１で使用されている全変数の値を取得し、実行データ２４ｅに書き込むスキャン部２１ａ２ｆを含む。
【００８０】
予め定められたタイミングは、以下が例示される。
【００８１】
第１の例は、一定の時間経過毎である。一定の時間は、１秒が例示される。これにより、実行データ２４ｅには、一定の時間経過毎の全変数の値が蓄積される。
【００８２】
第２の例は、制御装置３から問題が発生した旨の通知を受信したときである。これにより、実行データ２４ｅには、制御装置３で問題が発生したときの全変数の値が蓄積される。
【００８３】
第３の例は、ユーザが入力部２５にスキャンを実行する旨の指示を入力したときである。これにより、実行データ２４ｅには、ユーザが所望するタイミングでの全変数の値が蓄積される。
【００８４】
図１０は、実施の形態１にかかるエンジニアリングツールの処理を示すフローチャートである。
【００８５】
スキャン部２１ａ２ｆは、予め定められたタイミングで、図１０に示す処理を実行する。
【００８６】
スキャン部２１ａ２ｆは、ステップＳ１０において、制御装置３のメモリ３ａ２をスキャンすることにより、制御プログラム２４ａ１で使用されている全変数の値を取得する。
【００８７】
スキャン部２１ａ２ｆは、ステップＳ１２において、ステップＳ１０で取得した全変数の値を実行データ２４ｅに書き込み、処理を終了する。
【００８８】
再び図４を参照すると、プログラム診断部２１ａ２は、制御プログラム２４ａ１をシミュレーション実行することにより、制御プログラム２４ａ１で使用されている全変数の値を算出し、実行データ２４ｅに書き込むシミュレーション部２１ａ２ｇを含む。
【００８９】
これにより、実行データ２４ｅには、制御装置３を動作させなくても、制御プログラム２４ａ１で使用されている全変数の値が蓄積される。従って、プログラム診断部２１ａ２は、制御装置３を動作させなくても、制御プログラム２４ａ１の問題を診断することができる。
【００９０】
図１１は、実施の形態１にかかるエンジニアリングツールの処理を示すフローチャートである。
【００９１】
シミュレーション部２１ａ２ｇは、ユーザが入力部２５にシミュレーション実行する旨の指示を入力したら、図１１に示す処理を実行する。
【００９２】
シミュレーション部２１ａ２ｇは、ステップＳ２０において、制御プログラム２４ａ１をシミュレーション実行することにより、制御プログラム２４ａ１で使用されている全変数の値を算出する。
【００９３】
シミュレーション部２１ａ２ｇは、ステップＳ２２において、ステップＳ２０で算出した全変数の値を実行データ２４ｅに書き込み、処理を終了する。
【００９４】
図１２は、実施の形態１にかかるエンジニアリングツールの処理を示すフローチャートである。
【００９５】
変数設定部２１ａ２ａは、ステップＳ１００において、ターゲットの変数を設定する。
【００９６】
図１３は、実施の形態１にかかるエンジニアリングツールのプログラム診断画面を示す図である。変数設定部２１ａ２ａは、プログラム診断画面７０を表示部２６に表示させる。
【００９７】
プログラム診断画面７０は、変数設定欄７１を有する。図１３では、変数設定欄７１内で、変数「Ｄ２０」がターゲットの変数７２に設定されている。
【００９８】
変数設定部２１ａ２ａは、ユーザが入力部２５に入力した変数を受け取って、ターゲットの変数７２に設定することができる。また、変数設定部２１ａ２ａは、問題が発生した変数を制御装置３から受け取って、ターゲットの変数７２に設定することができる。
【００９９】
再び図１２を参照すると、動作検索部２１ａ２ｂは、ステップＳ１０２において、ターゲットの変数７２が引数に記述されている動作命令を、制御プログラム２４ａ１の中から検索する。
【０１００】
動作検索部２１ａ２ｂは、制御プログラム２４ａ１の中の命令と命令仕様データ２４ｂとを照合することで当該命令の命令種別を取得することにより、動作命令を制御プログラム２４ａ１の中から検索することができる。
【０１０１】
動作検索部２１ａ２ｂによる検索結果は、複数箇所あっても良い。
【０１０２】
図１４は、実施の形態１にかかるエンジニアリングツールの検索処理を説明する図である。
【０１０３】
図１４において、各変数の下段に記述されている値は、あるタイミングでの各変数の値であり、実行データ２４ｅに蓄積されている値である。
【０１０４】
プログラム診断部２１ａ２は、制御装置３から問題が発生した旨の通知を受信したときにスキャンした全変数の値を検索に使用することとすれば、制御装置３で問題が発生したタイミングでの全変数の値に基づいて、制御プログラム２４ａ１の診断を行うことができる。これにより、プログラム診断部２１ａ２は、制御装置３で問題が発生したタイミングでの、制御プログラム２４ａ１の問題を診断することができる。
【０１０５】
プログラム診断部２１ａ２は、制御装置３から問題が発生した旨の通知を受信したときより前での全変数の値を検索に使用することとすれば、制御装置３で問題が発生したときより前のタイミングでの全変数の値に基づいて、制御プログラム２４ａ１の診断を行うことができる。これにより、プログラム診断部２１ａ２は、制御装置３で問題が発生したときより前のタイミングでの、制御プログラム２４ａ１の問題を診断することができる。
【０１０６】
ターゲットの変数７２に設定された変数「Ｄ２０」は、動作命令４４ｂの第２引数４４ｂ１に記述されている。
【０１０７】
動作検索部２１ａ２ｂは、ステップＳ１０２において、ターゲットの変数７２に設定された変数「Ｄ２０」が動作命令４４ｂの第２引数４４ｂ１に記述されていることを見つけ出す。そして、動作検索部２１ａ２ｂは、動作命令４４ｂの命令名「ＭＯＶ」と命令仕様データ２４ｂとを照合することで、命令名「ＭＯＶ」の命令種別「動作」を取得する。従って、動作検索部２１ａ２ｂは、動作命令４４ｂを制御プログラム２４ａ１の中から検索することができる。
【０１０８】
なお、動作検索部２１ａ２ｂは、命令名と命令仕様データ２４ｂとを照合することに代えて、制御プログラム２４ａ１を図形的に解析することで、動作命令を取得することとしても良い。
【０１０９】
具体的には、動作検索部２１ａ２ｂは、図９に示す制御プログラム２４ａ１の行４１，４２，４３及び４４のように、１つの行に２つの命令が記述されている場合には、２つの命令の内の右側、つまり制御プログラム２４ａ１の下流側の命令を動作命令として取得しても良い。
【０１１０】
また、動作検索部２１ａ２ｂは、図９に示す制御プログラム２４ａ１の行４５のように、１つの行に２つより多くの命令が記述されている場合には、まず、複数の命令がワイヤードＯＲ接続されている点４５ａ１を見つけ出す。そして、動作検索部２１ａ２ｂは、点４５ａ１より右側、つまり制御プログラム２４ａ１の下流側の命令４５ｂを動作命令として取得しても良い。
【０１１１】
これにより、動作検索部２１ａ２ｂは、命令名と命令仕様データ２４ｂとを照合することなく、動作命令を制御プログラム２４ａ１の中から検索することができる。
【０１１２】
再び図１２を参照すると、動作検索部２１ａ２ｂは、ステップＳ１０４において、ステップＳ１０２で検索した動作命令の中で、ターゲットの変数の値が変化する可能性がある動作命令を検索する。
【０１１３】
ターゲットの変数７２に設定された変数「Ｄ２０」は、動作命令４４ｂの第２引数４４ｂ１に記述されている。動作命令４４ｂの命令名「ＭＯＶ」は、第１引数の値を第２引数に転送する命令である。
【０１１４】
従って、動作検索部２１ａ２ｂは、ステップＳ１０４において、ターゲットの変数７２に設定された変数「Ｄ２０」の値が変化する可能性がある動作命令４４ｂを制御プログラム２４ａ１の中から検索することができる。
【０１１５】
動作検索部２１ａ２ｂは、ステップＳ１０６において、ステップＳ１０４で検索された動作命令と命令仕様データ２４ｂとを照合し、ステップＳ１０４での検索結果に基づく情報を、検索結果データ２４ｄに書き込む。
【０１１６】
再び図８を参照すると、動作検索部２１ａ２ｂは、ステップＳ１０６において、行６１を作成する。そして、動作検索部２１ａ２ｂは、変数名「Ｄ２０」、命令名「ＭＯＶ」及び命令種別「動作」を、行６１の項目２４ｄ１，２４ｄ２及び２４ｄ３に書き込む。
【０１１７】
また、動作検索部２１ａ２ｂは、ステップＳ１０４で検索された動作命令４４ｂと命令仕様データ２４ｂの説明文の項目２４ｂ３とを照合する。動作命令４４ｂの第１引数は、定数「Ｋ１５」であり、第２引数は、変数「Ｄ２０」である。従って、動作検索部２１ａ２ｂは、説明文「Ｋ１５がＤ２０に転送される」を作成して、行６１の項目２４ｄ４に書き込む。
【０１１８】
また、動作検索部２１ａ２ｂは、動作命令４４ｂが含まれているプログラム名「ＭＡＩＮ」を、行６１の項目２４ｄ５に書き込む。
【０１１９】
また、動作命令４４ｂは、ＭＡＩＮプログラム２４ａ１ａの第１１ステップ目である。従って、動作命令部２１ａ２ｂは、ステップ番号「１１」を、行６１の項目２４ｄ６に書き込む。
【０１２０】
再び図１２を参照すると、条件検索部２１ａ２ｃは、ステップＳ１０８において、動作検索部２１ａ２ｂによって検索された動作命令を実行する条件を判定する条件命令を、制御プログラム２４ａ１の中から検索する。
【０１２１】
条件検索部２１ａ２ｃは、制御プログラム２４ａ１の中の命令と命令仕様データ２４ｂとを照合することで当該命令の命令種別を取得することにより、条件命令を制御プログラム２４ａ１の中から検索することができる。
【０１２２】
条件検索部２１ａ２ｃによる検索結果は、複数箇所あっても良い。
【０１２３】
なお、条件検索部２１ａ２ｃは、命令名と命令仕様データ２４ｂとを照合することに代えて、制御プログラム２４ａ１を図形的に解析することで、動作命令を取得することとしても良い。
【０１２４】
具体的には、条件検索部２１ａ２ｃは、図９に示す制御プログラム２４ａ１の行４１，４２，４３及び４４のように、１つの行に２つの命令が記述されている場合には、２つの命令の内の左側、つまり制御プログラム２４ａ１の上流側の命令を動作命令として取得しても良い。
【０１２５】
また、動作検索部２１ａ２ｂは、図９に示す制御プログラム２４ａ１の行４５のように、１つの行に２つより多くの命令が記述されている場合には、まず、複数の命令がワイヤードＯＲ接続されている点４５ａ１を見つけ出す。そして、動作検索部２１ａ２ｂは、点４５ａ１より左側、つまり制御プログラム２４ａ１の上流側の命令４５ａを動作命令として取得しても良い。
【０１２６】
これにより、条件検索部２１ａ２ｃは、命令名と命令仕様データ２４ｂとを照合することなく、条件命令を制御プログラム２４ａ１の中から検索することができる。
【０１２７】
再び図１４を参照すると、動作命令４４ｂの図中左側、つまりＭＡＩＮプログラム２４ａ１ａの上流側には、条件命令４４ａが記述されている。
【０１２８】
従って、条件検索部２１ａ２ｃは、ステップＳ１０８において、動作命令４４ｂを実行する条件を判定する条件命令４４ａを、制御プログラム２４ａ１の中から検索することができる。
【０１２９】
再び図１２を参照すると、条件検索部２１ａ２ｃは、ステップＳ１１０において、ステップＳ１０８で検索された条件命令と命令仕様データ２４ｂとを照合し、ステップＳ１０８での検索結果に基づく情報を、検索結果データ２４ｄに書き込む。
【０１３０】
再び図８を参照すると、条件検索部２１ａ２ｃは、ステップＳ１１０において、行６２を作成する。そして、条件検索部２１ａ２ｃは、変数名「Ｄ１０」、命令名「＝」及び命令種別「条件」を、行６２の項目２４ｄ１，２４ｄ２及び２４ｄ３に書き込む。
【０１３１】
また、条件検索部２１ａ２ｃは、ステップＳ１０８で検索された条件命令４４ａと命令仕様データ２４ｂの説明文の項目２４ｂ３とを照合する。条件命令４４ａの第１引数は、変数「Ｄ１０」であり、第２引数は、定数「Ｋ１００００」である。従って、条件検索部２１ａ２ｃは、説明文「Ｄ１０がＫ１００００と等しい」を作成して、行６２の項目２４ｄ４に書き込む。
【０１３２】
また、条件検索部２１ａ２ｃは、条件命令４４ａが含まれているプログラム名「ＭＡＩＮ」を、行６２の項目２４ｄ５に書き込む。
【０１３３】
また、条件命令４４ａは、ＭＡＩＮプログラム２４ａ１ａの第８ステップ目である。従って、条件命令部２１ａ２ｃは、ステップ番号「８」を、行６２の項目２４ｄ６に書き込む。
【０１３４】
再び図１２を参照すると、条件検索部２１ａ２ｃは、ステップＳ１１２において、ステップＳ１１０で検索された条件命令の引数を、新たなターゲットの変数７２に設定する。
【０１３５】
条件検索部２１ａ２ｃによって設定される新たなターゲットの変数７２は、複数あっても良い。また、条件検索部２１ａ２ｃは、制御プログラム２４ａ１をそれ以上遡ることが出来ない場合は、新たなターゲットの変数７２を設定しない。
【０１３６】
図１５は、実施の形態１にかかるエンジニアリングツールの検索処理を説明する図である。
【０１３７】
図１５に示すように、条件命令４４ａは、第１引数４４ａ１「Ｄ１０」と、第２引数「Ｋ１００００」と、を含んでいる。しかし、第２引数「Ｋ１００００」は、定数であって、変数ではない。そこで、条件検索部２１ａ２ｃは、ステップＳ１１２において、第１引数４４ａ１「Ｄ１０」を、新たなターゲットの変数７２に設定する。
【０１３８】
再び図１２を参照すると、検索判定部２１ａ２ｄは、ステップＳ１１４において、検索終了条件が満たされたか否かを判定する。検索終了条件は、以下が例示される。
【０１３９】
第１の例は、ステップＳ１１２で新たなターゲットの変数７２が設定されなかった場合である。つまり、制御プログラム２４ａ１をそれ以上遡ることが出来ない場合である。
【０１４０】
第２の例は、動作検索部２１ａ２ｂ及び条件検索部２１ａ２ｃによるステップＳ１０２からステップＳ１１２までの検索の繰り返し回数が、検索回数データ２４ｃ１に記述された回数に達した場合である。
【０１４１】
これにより、プログラム診断部２１ａ２は、検索が終わらないことを抑制して検索が停止することを確保することができる、つまり検索の停止性を確保することができるという効果を奏する。また、プログラム診断部２１ａ２は、制御プログラム２４ａ１の規模が大きい場合であっても、検索範囲を限定することができるので、制御プログラム２４ａ１の問題の原因を特定する工数を抑制できる効果を奏する。
【０１４２】
第３の例は、条件検索部２１ａ２ｃによりステップＳ１１２で設定された新たなターゲットの変数７２が、検索範囲データ２４ｃ２に記述されたステップ番号の範囲外になった場合である。
【０１４３】
これにより、プログラム診断部２１ａ２は、検索の停止性が確保されるという効果を奏する。また、プログラム診断部２１ａ２は、制御プログラム２４ａ１の規模が大きい場合であっても、検索範囲を限定することができるので、制御プログラム２４ａ１の問題の原因を特定する工数を抑制できる効果を奏する。
【０１４４】
検索判定部２１ａ２ｄは、複数の検索終了条件のＯＲ（論理和）を判定することができる。
【０１４５】
検索判定部２１ａ２ｄは、ステップＳ１１４において、検索条件が満たされていないと判定したら（Ｎｏ）、処理をステップＳ１０２に進める。
【０１４６】
図１６は、実施の形態１にかかるエンジニアリングツールの検索処理を説明する図である。
【０１４７】
図１６に示すように、動作命令４２ｂは、第１引数「Ｄ０」と、第２引数４２ｂ１「Ｄ１０」と、を含んでいる。
【０１４８】
動作検索部２１ａ２ｂは、ステップＳ１０２及びステップＳ１０４において、ターゲットの変数７２に設定された変数「Ｄ１０」が動作命令４２ｂの第２引数４２ｂ１に記述されていることを見つけ出す。そして、動作検索部２１ａ２ｂは、動作命令４２ｂの命令名「ＭＯＶ」と命令仕様データ２４ｂとを照合することで、命令名「ＭＯＶ」の命令種別「動作」を取得する。従って、動作検索部２１ａ２ｂは、動作命令４２ｂを制御プログラム２４ａ１の中から検索することができる。
【０１４９】
再び図８を参照すると、動作検索部２１ａ２ｂは、ステップＳ１０６において、行６３を作成する。そして、動作検索部２１ａ２ｂは、変数名「Ｄ０」、命令名「ＭＯＶ」及び命令種別「動作」を、行６３の項目２４ｄ１，２４ｄ２及び２４ｄ３に書き込む。
【０１５０】
また、動作検索部２１ａ２ｂは、ステップＳ１０４で検索された動作命令４２ｂと命令仕様データ２４ｂの説明文の項目２４ｂ３とを照合する。動作命令４２ｂの第１引数は、変数「Ｄ０」であり、第２引数は、変数「Ｄ１０」である。従って、動作検索部２１ａ２ｂは、説明文「Ｄ０がＤ１０に転送される」を作成して、行６３の項目２４ｄ４に書き込む。
【０１５１】
また、動作検索部２１ａ２ｂは、動作命令４２ｂが含まれているプログラム名「ＭＡＩＮ」を、行６３の項目２４ｄ５に書き込む。
【０１５２】
また、動作命令４２ｂは、ＭＡＩＮプログラム２４ａ１ａの第４ステップ目である。従って、動作命令部２１ａ２ｂは、ステップ番号「４」を、行６３の項目２４ｄ６に書き込む。
【０１５３】
動作命令４２ｂの図中左側、つまりＭＡＩＮプログラム２４ａ１ａの上流側には、条件命令４２ａが記述されている。
【０１５４】
従って、条件検索部２１ａ２ｃは、ステップＳ１０８において、動作命令４２ｂを実行する条件を判定する条件命令４２ａを、制御プログラム２４ａ１の中から検索することができる。
【０１５５】
条件検索部２１ａ２ｃは、ステップＳ１１０において、ステップＳ１０８で検索された条件命令と命令仕様データ２４ｂとを照合し、ステップＳ１０８での検索結果に基づく情報を、検索結果データ２４ｄに書き込む。
【０１５６】
再び図８を参照すると、条件検索部２１ａ２ｃは、ステップＳ１１０において、行６４を作成する。そして、条件検索部２１ａ２ｃは、変数名「Ｍ１００」、命令名「ＬＤ」及び命令種別「条件」を、行６４の項目２４ｄ１，２４ｄ２及び２４ｄ３に書き込む。
【０１５７】
また、条件検索部２１ａ２ｃは、ステップＳ１０８で検索された条件命令４２ａと命令仕様データ２４ｂの説明文の項目２４ｂ３とを照合する。条件命令４２ａの第１引数は、変数「Ｍ１００」である。従って、条件検索部２１ａ２ｃは、説明文「Ｍ１００がＯＮしている」を作成して、行６４の項目２４ｄ４に書き込む。
【０１５８】
また、条件検索部２１ａ２ｃは、条件命令４２ａが含まれているプログラム名「ＭＡＩＮ」を、行６４の項目２４ｄ５に書き込む。
【０１５９】
また、条件命令４２ａは、ＭＡＩＮプログラム２４ａ１ａの第３ステップ目である。従って、条件命令部２１ａ２ｃは、ステップ番号「３」を、行６４の項目２４ｄ６に書き込む。
【０１６０】
条件命令４２ａは、第１引数「Ｍ１００」を含んでいる。そこで、条件検索部２１ａ２ｃは、ステップＳ１１２において、第１引数「Ｍ１００」を、新たなターゲットの変数７２に設定する。
【０１６１】
再び図１２を参照すると、検索判定部２１ａ２ｄは、ステップＳ１１４において、検索条件が満たされていると判定したら（Ｙｅｓ）、処理をステップＳ１１６に進める。
【０１６２】
再び図１６を参照すると、ターゲットの変数７２「Ｍ１００」を含む動作命令は制御プログラム２４ａ１内に存在しない。
【０１６３】
従って、検索判定部２１ａ２ｄは、ステップＳ１１４で検索条件が満たされていると判定して（Ｙｅｓ）、処理をステップＳ１１６に進める。
【０１６４】
再び図１２を参照すると、一覧表示部２１ａ２ｅは、ステップＳ１１６において、検索結果データ２４ｄの内容を表示部２６に一覧表示する。
【０１６５】
図１７は、実施の形態１にかかるエンジニアリングツールのプログラム診断画面を示す図である。一覧表示部２１ａ２ｅは、検索結果データ２４ｄの内容を、プログラム診断画面７０の一覧表示欄８０内に一覧表示する。
【０１６６】
一覧表示欄８０は、プログラム名の項目８１と、ステップ番号の項目８２と、変数名の項目８３と、命令名の項目８４と、命令種別の項目８５と、説明文の項目８６と、を有する。
【０１６７】
一覧表示部２１ａ２ｅは、行９１，９２，９３及び９４内に、検索結果データ２４ｄの行６１，６２，６３及び６４の内容を夫々表示する。
【０１６８】
このように、プログラム診断部２１ａ２は、行９４内に表示されている、問題の原因となった命令の内容及び行９１内に表示されている、問題が発生した命令の内容だけではなく、行９３及び行９２内に表示されている、問題の原因となった命令と問題が発生した命令との間に関与する命令の内容をも併せて、一覧表示することができる。
【０１６９】
これにより、プログラム診断部２１ａ２は、ユーザが問題の原因となった命令と問題が発生した命令との間の全体像を把握することを容易にすることができるという効果を奏する。
【０１７０】
図１８は、実施の形態１にかかるエンジニアリングツールの処理を示すフローチャートである。
【０１７１】
一覧表示部２１ａ２ｅは、ステップＳ２００において、行９１，９２，９３又は９４が選択されたら、選択された行の項目８２ａ内のステップ番号に該当する命令４４ｂ，４４ａ，４２ｂ又は４２ａを表示する。
【０１７２】
これにより、プログラム診断部２１ａ２は、ユーザが所望の命令を直ぐに確認することができるという効果を奏する。
【０１７３】
また、一覧表示欄８０は、プログラム名のフィルタ条件を入力するためのフィルタ条件入力欄８１ａと、ステップ番号のフィルタ条件を入力するためのフィルタ条件入力欄８２ａと、変数名のフィルタ条件を入力するためのフィルタ条件入力欄８３ａと、命令名のフィルタ条件を入力するためのフィルタ条件入力欄８４ａと、命令種別のフィルタ条件を入力するためのフィルタ条件入力欄８５ａと、説明文のフィルタ条件を入力するためのフィルタ条件入力欄８６ａと、を有する。
【０１７４】
図１９は、実施の形態１にかかるエンジニアリングツールの処理を示すフローチャートである。
【０１７５】
一覧表示部２１ａ２ｅは、ステップＳ２０２において、フィルタ条件入力欄８４ａに命令名が入力されたら、検索結果データ２４ｄの行９１，９２，９３及び９４の中で入力されたフィルタ条件に合致する行を一覧表示する。例えば、フィルタ条件入力欄８４ａに「ＭＯＶ」が入力されたら、一覧表示部２１ａ２ｅは、行９１及び９３だけを表示する。
【０１７６】
これにより、プログラム診断部２１ａ２は、ユーザが問題に関係する命令を絞り込むことで問題の原因を特定する工数を抑制できる効果を奏する。
【０１７７】
また、動作検索部２１ａ２ｂは、命令名と命令仕様データ２４ｂとを照合することで、命令名の命令種別「動作」を取得することができる。
【０１７８】
これにより、動作検索部２１ａ２ｂは、動作命令を制御プログラム２４ａ１の中から検索することができる。
【０１７９】
また、条件検索部２１ａ２ｃは、命令名と命令仕様データ２４ｂとを照合することで、命令名の命令種別「条件」を取得することができる。
【０１８０】
これにより、条件検索部２１ａ２ｃは、条件命令を制御プログラム２４ａ１の中から検索することができる。
【０１８１】
また、記憶部２４は、制御プログラム２４ａ１に対して実行される検索の終了条件が記述された検索終了条件データ２４ｃを記憶する。そして、検索判定部２１ａ２ｄは、検索が終了条件を満たしていると判定したら、動作検索部２１ａ２ｂ及び条件検索部２１ａ２ｃによる検索を終了させる。
【０１８２】
これにより、プログラム診断部２１ａ２は、検索の停止性が確保されるという効果を奏する。また、検索判定部２１ａ２ｄは、制御プログラム２４ａ１の規模が大きい場合であっても、検索範囲を限定することができる。従って、プログラム診断部２１ａ２は、制御プログラム２４ａ１の問題の原因を特定する工数を抑制できる効果を奏する。
【０１８３】
また、記憶部２４は、制御プログラム２４ａ１で使用されている全変数の予め定められたタイミングでの値が蓄積される実行データ２４ｅを記憶する。
【０１８４】
スキャン部２１ａ２ｆは、予め定められたタイミングで、制御装置３のメモリ３ａ２をスキャンすることにより、制御プログラム２４ａ１で使用されている全変数の値を取得し、実行データ２４ｅに書き込む。
【０１８５】
これにより、プログラム診断部２１ａ２は、制御装置３から問題が発生した旨の通知を受信したときにスキャンした全変数の値を検索に使用することとすれば、制御装置３で問題が発生したタイミングでの全変数の値に基づいて、制御プログラム２４ａ１の診断を行うことができる。これにより、プログラム診断部２１ａ２は、制御装置３で問題が発生したタイミングでの、制御プログラム２４ａ１の問題を診断することができる。
【０１８６】
また、プログラム診断部２１ａ２は、制御装置３から問題が発生した旨の通知を受信したときより前での全変数の値を検索に使用することとすれば、制御装置３で問題が発生したときより前のタイミングでの全変数の値に基づいて、制御プログラム２４ａ１の診断を行うことができる。これにより、プログラム診断部２１ａ２は、制御装置３で問題が発生したときより前のタイミングでの、制御プログラム２４ａ１の問題を診断することができる。
【０１８７】
また、シミュレーション部２１ａ２ｇは、制御プログラム２４ａ１をシミュレーション実行することにより、制御プログラム２４ａ１で使用されている全変数の値を算出し、実行データ２４ｅに書き込む。
【０１８８】
これにより、プログラム診断部２１ａ２は、制御装置３を動作させなくても、制御プログラム２４ａ１の問題を診断することができる。
【０１８９】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【０１９０】
１  制御システム、２  エンジニアリングツール、３  制御装置、４，５  機械、２１  ＣＰＵ、２１ａ１  プロジェクトデータ作成部、２１ａ２  プログラム診断部、２１ａ２ａ  変数設定部、２１ａ２ｂ  動作検索部、２１ａ２ｃ  条件検索部、２１ａ２ｄ  検索判定部、２１ａ２ｅ  一覧表示部、２１ａ２ｆ  スキャン部、２１ａ２ｇ  シミュレーション部、２４  記憶部、２４ａ  プロジェクトデータ、２４ａ１  制御プログラム、２４ｂ  命令仕様データ、２４ｃ  検索終了条件データ、２４ｄ  検索結果データ、２４ｅ  実行データ。
【図１】
2016166876.tif 000003
【図２】
2016166876.tif 000004
【図３】
2016166876.tif 000005
【図４】
2016166876.tif 000006
【図５】
2016166876.tif 000007
【図６】
2016166876.tif 000008
【図７】
2016166876.tif 000009
【図８】
2016166876.tif 000010
【図９】
2016166876.tif 000011
【図１０】
2016166876.tif 000012
【図１１】
2016166876.tif 000013
【図１２】
2016166876.tif 000014
【図１３】
2016166876.tif 000015
【図１４】
2016166876.tif 000016
【図１５】
2016166876.tif 000017
【図１６】
2016166876.tif 000018
【図１７】
2016166876.tif 000019
【図１８】
2016166876.tif 000020
【図１９】
2016166876.tif 000021
【国際調査報告】
2016166876.tif 000022
2016166876.tif 000023
2016166876.tif 000024