(57)【要約】【課題】  ファンクションブロックを含む制御プログラムのデバッグ処理を効率よくスムーズに行なうことができるデバッグ装置を提供すること【解決手段】    ファンクションブロックを含む制御プログラムを構成する各ステップを１ステップずつ実行するデバッグ装置において、次の実行位置がファンクションブロックの場合（図（ａ））に、そのファンクションブロック内のプログラムを連続実行し、制御プログラムにおけるファンクションプログラムの実行後のステップに実行位置を移行させるステップオーバー機能と、次の実行位置がファンクションブロックの場合に、そのファンクションブロック内のプログラムの先頭位置を次の実行位置にするステップイン機能と、次の実行位置がファンションブロック内のプログラムのステップの場合に、前記次の実行位置からそのファンクションブロックの最後までを連続実行し、そのファンクションブロックの実行後のステップに実行位置を移行させるステップアウト機能を設けた。【選択図】        図５
2007102385.tif 000002
【特許請求の範囲】
【請求項１】
ファンクションブロックを含む制御プログラム用のデバッグ装置であって、
制御プログラムを構成する各ステップを１ステップずつ実行する１ステップ実行手段と、
前記１ステップ実行手段による次の実行位置がファンクションブロックの場合に、そのファンクションブロック内のプログラムを連続実行し、前記制御プログラムにおける前記ファンクションプログラムの実行後のステップに実行位置を移行させるステップオーバーを実行するステップオーバー実行手段と、
前記１ステップ実行手段による次の実行位置がファンクションブロックの場合に、そのファンクションブロック内のプログラムの先頭位置を次の実行位置にするステップインを行なうステップイン実行手段と、
を備えたことを特徴とするデバッグ装置。
【請求項２】
前記１ステップ実行手段による次の実行位置がファンションブロック内のプログラムのステップの場合に、前記次の実行位置からそのファンクションブロックの最後までを連続実行し、そのファンクションブロックの実行後のステップに実行位置を移行させるステップアウトを実行するステップアウト実行手段を備えたことを特徴とする請求項１に記載のデバッグ装置。
【請求項３】
前記制御プログラムは、ファンクションブロック内にファンクションブロック（子）が記述された階層構造のプログラムであり、
前記１ステップ実行手段により前記ファンクションブロック内のプログラムを１ステップずつ実行し、次の実行位置が前記ファンクションブロック（子）の場合、前記ステップイン実行手段を稼働させると前記ファンクションブロック（子）内のプログラムの先頭位置を次の実行位置に設定し、そのファンクションブロック（子）内を１ステップ実行可能にするように構成したことを特徴とする請求項１又は２に記載のデバッグ装置。
【請求項４】
前記制御プログラムは、ファンクションブロック内にファンクションブロック（子）が記述された階層構造のプログラムであり、
前記１ステップ実行手段により前記ファンクションブロック内のプログラムを１ステップずつ実行し、次の実行位置が前記ファンクションブロック（子）の場合、前記ステップイン実行手段を稼働させると前記ファンクションブロック（子）内のプログラムの先頭位置を次の実行位置に設定し、そのファンクションブロック（子）内を１ステップ実行可能にし、
前記１ステップ実行手段による次の実行位置が前記ファンクションブロック（子）内のプログラムのステップの場合に、前記ステップアウト実行手段が稼働されると、前記次の実行位置からそのファンクションブロック（子）の最後までを連続実行し、前記ファンクションブロックのプログラム中の前記ファンクションブロック（子）の実行後のステップに実行位置を移行させるように構成したことを特徴とする請求項２に記載のデバッグ装置。
【請求項５】
前記制御プログラムは、ファンクションブロック内にファンクションブロック（子）が記述された階層構造のプログラムであり、
前記１ステップ実行手段により前記ファンクションブロック内のプログラムを１ステップずつ実行し、次の実行位置が前記ファンクションブロック（子）の場合、前記ステップオーバー実行手段を稼働させると前記ファンクションブロック（子）のプログラムを連続実行し、前記ファンクションブロック内における前記ファンクションブロック（子）の実行後のステップに実行位置を移行させるように構成したことを特徴とする請求項１から４のいずれか１項に記載のデバッグ装置。
【請求項６】
前記制御プログラム中に記述されたファンクションブロックを特定するプログラム識別情報と、そのファンクションブロック内のプログラムにおける一時停止させるステップ位置情報と、を関連づけたブレークポイント管理情報を格納する記憶手段と、
前記ファンクションブロック内を連続実行中に前記記憶手段に格納されたブレークポイント管理情報に基づき、現在実行中のステップが、前記記憶手段に格納された前記ブレークポイント管理情報で特定されるファンクションブロックの該当ステップ位置か否かを判断し、該当する場合にプログラム実行を一時停止する手段と、
を備えたことを特徴とする請求項１から５のいずれか１項に記載のデバッグ装置。
【請求項７】
前記プログラム識別情報は、ファンクションブロックのインスタンス識別情報を含むものであることを特徴とする請求項６に記載のデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファンクションブロックを含む制御プログラム用のデバッグ装置に関するものである。
【背景技術】
【０００２】
プログラマブルコントローラ（以降、「ＰＬＣ」と称する）の制御プログラムの開発では、ＩＥＣ−６１１３１−３の各種言語により、開発対象に応じた言語が利用できるようになっている。開発段階では、設計した制御プログラムの検証・動作チェックを行なうため、一般にデバッグ装置を用いたデバッグ処理が行なわれる。このデバッグ装置は、実機に替わって制御プログラムを実行するシミュレータと、そのシミュレータの動作を制御する制御手段を備えている。
【０００３】
係る動作の制御としては、実行命令の入力を受ける都度、制御プログラムを１ステップ（１命令）ずつ実行するステップ実行や、制御プログラムの全体を１回あるいは停止命令がくるまで繰り返し実行するスキャン実行などがある。また、予めブレークポイントを設定しておき、スキャン実行中にそのブレークポイントの位置に来た場合に、プログラムの実行を一時停止する制御もある。そのように適宜の手法で、プログラムを実行したり、停止したりし、そのときのメモリの状態を確認することで、正常に動作しているか否かや、問題が発生した場合には、その問題の発生箇所を特定し、修正する。係るデバッグ装置としては、従来、特許文献１等に開示されたものがある。
【特許文献１】特開２００１−６７２４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、ＩＥＣ−６１１３１−３で規定されるプログラムを構成する要素の１つとしてファンクションブロックと称されるものがある。このファンクションブロックの記述目的の１つとして、プログラムの隠蔽による表示プログラム量の削減による設計・保守の容易化がある。このファンクションブロックの実現方法はインスタンスという概念で作成される。よって、ファンクションブロックの実体は１つ存在し、メインの制御プログラム上では１又は複数のインスタンスが記述され、プログラムの実行位置がそのファンクションブロックの記述された位置に至ると、サブルーチンプログラムのように上記のファンクションブロックの実体に記述された各命令を順に実行し、最後の命令まで実行すると再び、元の位置に復帰し、メインプログラム上における次の命令を実行する。
【０００５】
従って、デバッグ時にステップ実行を選択した場合、ファンクションの内部についても常に１ステップずつ実行するため、作業が煩雑で非効率である。特に、ファンクションブロックで記述したプログラムの場合、ファンクションブロック内のプログラムはすでに完成していることが多く、メインの制御プログラム全体をデバッグしている最中にファンクションブロックを構成するプログラムを検証・デバッグする必要性を生じることは少ない。さらに、同一のファンクションブロックは、１つのメインの制御プログラム中に複数回使用されることもあり、係る場合には、その同一内容のファンクションブロックのインスタンスが出現する都度、１ステップずつ実行させるため、煩雑である。
【０００６】
また、ファンクションブロックの内部にブレークポイントを設定することは、困難である。すなわち、ファンクションブロックの実現方法がインスタンスという概念で作成されるため、制御プログラム上に同一のファンクションブロックが複数使用されている場合でも、ファンクションブロックのプログラムの実体が一つしか存在しないので、単にファンクションブロックを構成するプログラムのある位置のステップにブレークポイントを設定した場合、全てのファンクションブロックのインスタンスにおいて、設定したブレークポイントで一時停止してしまうという問題がある。
【０００７】
たとえば、ファンクションブロックがあるロボットの制御をするプログラムの場合であって、ロボットＡ，ロボットＢの２つの制御に用いるとする。このとき、ロボットＡについては、ある位置に設定したブレークポイントで一時停止させたいが、ロボットＢについては一時停止させたくないという要求があるが、上記の例ではロボットＢの制御のためにファンクションブロックのプログラムの実行中にも設定されたブレークポイントで一時停止してしまい、要求に対応できない。
【０００８】
また、ロボットＡとロボットＢとでそれぞれ別々の位置にブレークポイントを設定したいという要求があるが、仮に２つの位置にブレークポイントを設定すると、ロボットＡの制御実行時とロボットＢの制御実行時にそれぞれ２つのブレークポイントの位置で一時停止することになるので、係る要求にも対応できない。
【０００９】
この発明は、ファンクションブロックを含む制御プログラムのデバッグ処理を効率よくスムーズに行なうことができるデバッグ装置を提供することを目的とする。さらに、ファンクションブロック内にも実用的なブレークポイントの設定を行なうことができるようにしたデバッグ装置を提供することを他の目的とする。
【課題を解決するための手段】
【００１０】
上記した目的を達成するため、本発明に係るデバッグ装置は、ファンクションブロックを含む制御プログラム用のデバッグ装置であって、制御プログラムを構成する各ステップを１ステップずつ実行する１ステップ実行手段と、前記１ステップ実行手段による次の実行位置がファンクションブロックの場合に、そのファンクションブロック内のプログラムを連続実行し、前記制御プログラムにおける前記ファンクションプログラムの実行後のステップに実行位置を移行させるステップオーバーを実行するステップオーバー実行手段と、前記１ステップ実行手段による次の実行位置がファンクションブロックの場合に、そのファンクションブロック内のプログラムの先頭位置を次の実行位置にするステップインを行なうステップイン実行手段と、を備えて構成した。
【００１１】
本発明では、ステップオーバー実行手段と、ステップイン実行手段の２つの機能を設けることで、ユーザは、ステップ実行位置がファンクションブロックの先頭に来たときに、そのファンクションブロックの内部に入り込んでステップ実行しながら検証するか（ステップイン）、そのファンクションブロック内に入り込むことなく、当該ファンクションブロックを連続実行させ次のステップに移行するか（ステップオーバー）を選択的することができ、状況に応じた適切な処理を効率的に行える。
【００１２】
前記１ステップ実行手段による次の実行位置がファンションブロック内のプログラムのステップの場合に、前記次の実行位置からそのファンクションブロックの最後までを連続実行し、そのファンクションブロックの実行後のステップに実行位置を移行させるステップアウトを実行するステップアウト実行手段を備えるとよい。
【００１３】
このように、ステップアウト実行手段を設けることで、一旦ステップインによりファンクションブロックの内部に入り込み、必要な箇所までステップ実行して検証し、それ以降は連続実行させることができる。よって、係る必要な箇所以降の各ステップに対して、１ステップ実行命令を与える作業を省略できるので、作業性がさらに向上する。
【００１４】
前記制御プログラムは、ファンクションブロック内にファンクションブロック（子）が記述された階層構造のプログラムであり、前記１ステップ実行手段により前記ファンクションブロック内のプログラムを１ステップずつ実行し、次の実行位置が前記ファンクションブロック（子）の場合、前記ステップイン実行手段を稼働させると前記ファンクションブロック（子）内のプログラムの先頭位置を次の実行位置に設定し、そのファンクションブロック（子）内を１ステップ実行可能にするように構成するとよい。
【００１５】
また、前記制御プログラムは、ファンクションブロック内にファンクションブロック（子）が記述された階層構造のプログラムであり、前記１ステップ実行手段により前記ファンクションブロック内のプログラムを１ステップずつ実行し、次の実行位置が前記ファンクションブロック（子）の場合、前記ステップイン実行手段を稼働させると前記ファンクションブロック（子）内のプログラムの先頭位置を次の実行位置に設定し、そのファンクションブロック（子）内を１ステップ実行可能にし、前記１ステップ実行手段による次の実行位置が前記ファンクションブロック（子）内のプログラムのステップの場合に、前記ステップアウト実行手段が稼働されると、前記次の実行位置からそのファンクションブロック（子）の最後までを連続実行し、前記ファンクションブロックのプログラム中の前記ファンクションブロック（子）の実行後のステップに実行位置を移行させるように構成することもできる。
【００１６】
さらに、前記制御プログラムは、ファンクションブロック内にファンクションブロック（子）が記述された階層構造のプログラムであり、前記１ステップ実行手段により前記ファンクションブロック内のプログラムを１ステップずつ実行し、次の実行位置が前記ファンクションブロック（子）の場合、前記ステップオーバー実行手段を稼働させると前記ファンクションブロック（子）のプログラムを連続実行し、前記ファンクションブロック内における前記ファンクションブロック（子）の実行後のステップに実行位置を移行させるように構成することもできる。
【００１７】
上述した「ファンクションブロック（子）」は、「ファンクションブロック」との関係で相対的に１層分下位層であることを意味している。従って、例えば、ファンクションブロックＡの中にファンクションブロックＢが存在し、さらにそのファンクションブロックＢの中にファンクションブロックＣが存在するような場合、ファンクションブロックＡとファンクションブロックＢの関係では、ファンクションブロックＡが「ファンクションブロック」でファンクションブロックＢが「ファンクションブロック（子）」となる。また、ファンクションブロックＢとファンクションブロックＣの関係では、ファンクションブロックＢが「ファンクションブロック」でファンクションブロックＣが「ファンクションブロック（子）」となる。
【００１８】
一方、前記制御プログラム中に記述されたファンクションブロックを特定するプログラム識別情報と、そのファンクションブロック内のプログラムにおける一時停止させるステップ位置情報と、を関連づけたブレークポイント管理情報を格納する記憶手段と、前記ファンクションブロック内を連続実行中に前記記憶手段に格納されたブレークポイント管理情報に基づき、現在実行中のステップが、前記記憶手段に格納された前記ブレークポイント管理情報で特定されるファンクションブロックの該当ステップ位置か否かを判断し、該当する場合にプログラム実行を一時停止する手段と、を備えるとよい。前記プログラム識別情報は、例えば、ファンクションブロックのインスタンス識別情報を含むものとすることができる。ブレークポイント管理情報は、実施の形態では、ブレークポイント管理テーブルに対応する。
【００１９】
このようにすると、同一のファンクションブロックのインスタンスが制御プログラム中に複数存在しても、各インスタンスを特定できるので、各インスタンスごとに一時停止させるステップ位置を定義できる。よって、同一のファンクションブロックであっても、あるファンクションブロックのインスタンスでは一時停止することなく連続実行させ、別のインスタンスでは一時停止させることができる。また、一時停止させる位置も、それぞれのインスタンスに固有に設定できるので、作業性が向上する。
【発明の効果】
【００２０】
本発明では、ステップインやステップオーバーなどの機能を設けたため、状況に応じてそれらの機能を使い分けることで、ファンクションブロックを含む制御プログラムのデバッグ処理を効率よくスムーズに行なうことができる。さらに、個々のファンクションブロックのインスタンスごとに一時停止するステップ位置（ブレークポイント）が設定できるため、ファンクションブロック内にも実用的なブレークポイントの設定を行なうことができる。
【発明を実施するための最良の形態】
【００２１】
図１は、本発明に係るデバッグ装置の一実施の形態を示している。デバッグ装置は、たとえばパソコン等のコンピュータに、アプリケーションプログラムをインストールすることで構成される。従って、ハードウェア構成としては、図１に示すように、キーボード，ポインティングデバイス等の入力装置１と、表示装置２と、装置本体（ＣＰＵ本体）３と、を備えている。装置本体３は、操作部１１と、プログラム制御部１２と、プログラム実行部１３と、制御プログラム格納領域１４と、プログラム制御情報領域１５と、プログラム実行作業領域１６と、Ｉ／Ｏ領域１７と、を備えている。操作部１１，プログラム制御部１２並びにプログラム実行部１３は、ＣＰＵで実行されるアプリケーションプログラムで実現される。制御プログラム格納領域１４，プログラム制御情報領域１５，プログラム実行作業領域１６並びにＩ／Ｏ領域１７は、ＲＡＭやハードディスクなどの各種記憶手段により実現される。
【００２２】
操作部１１は、制御プログラムデバッグを行なうための操作画面を表示装置２に出力したり、入力装置１からの入力を受け付け、その受け付けた入力をプログラム制御部１２に渡す。図２は、操作画面の一例を示している。この操作画面の配置レイアウトは、画面の上部に、制御プログラムの実行コマンドを与える各種実行操作ボタンＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６，……を配置し、左側にはプログラム構成を表示するプロジェクトツリー表示領域Ｒ１を配置し、右側にはデバッグ対象の制御プログラムを表示するプログラム表示領域Ｒ２を配置している。プログラム表示領域Ｒ２中には、現在実行中のステップ（命令）を示す矩形状のカーソルＣ１が表示される。後述するように、このカーソルＣ１は、ブレークポイントを設定するステップ位置を特定する際にも使用する。実行操作ボタンＢ１，Ｂ２，Ｂ３は、ステップ実行する際に使用する操作ボタンである。１スキャン実行操作ボタンＢ４は、制御プログラムを先頭から最後まで１回（１スキャン）だけ連続して実行する命令を与えるものである。連続実行操作ボタンＢ５は、制御プログラムを繰り返し実行する連続実行命令を与えるものである。また、実行停止ボタンＢ６は、連続実行操作ボタンＢ５の押下（クリック）により連続実行しているプログラム実行を停止させる命令を与えるものである。
【００２３】
プログラム制御部１２は、操作部１１から受け取った実行コマンドに基づき実行ステップを決定し、プログラム実行部１３に決定した実行ステップの実行要求をしたり、操作部１１から受け取ったブレークコマンドの設定位置により、ブレークポイントを管理するブレークポイント管理テーブルを作成し、プログラム制御情報領域１５に格納する処理を行なう。
【００２４】
プログラム実行部１３は、プログラム制御部１２からの要求、及びプログラム制御部１２が設定するプログラム制御情報（本実施の形態では、ブレークポイント管理テーブル）により、制御プログラムを実行したり、停止したりする。
【００２５】
制御プログラム格納領域１４は、ＰＬＣの制御プログラムを格納する記憶エリアであり、メモリの所定の領域に設定される。プログラム実行部１３は、この制御プログラム格納領域１４に格納された制御プログラムを読み出して実行する。
【００２６】
プログラム制御情報領域１５は、プログラム制御部１２で作成したブレークポイント管理テーブルなどのプログラム制御情報を格納する記憶エリアであり、メモリの所定の領域に設定される。
【００２７】
プログラム実行作業領域１６は、ＰＬＣの内部メモリに相当すると共に、プログラム実行部１３が制御プログラムを実行する際に使用するワークメモリとなる記憶エリアであり、ＲＡＭの所定の領域に設定される。Ｉ／Ｏ領域１７は、ＰＬＣのＩ／Ｏメモリに相当する記憶エリアであり、ＲＡＭの所定の領域に設定される。
【００２８】
プログラム実行部１３が実行する制御プログラムは、本実施の形態では、図２のプログラム表示領域Ｒ２に表示したように、ファンクションブロックを含み、ラダー言語で記述されたプログラムである。図２に示した制御プログラムの場合、ファンクションで作ったプログラム（ＦＢ＿Ａ）は、インスタンスとしてプログラムＳｔａｔｉｏｎＮｏ１内のＲｏｂｏｔ＿１とＲｏｂｏｔ＿２及びプログラムＳｔａｔｉｏｎＮｏ２内のＲｏｂｏｔ＿３とＲｏｂｏｔ＿４として利用され、それぞれの設備の制御を行う。
【００２９】
図３（ａ）は、ファンクションブロック（ＦＢ＿Ａ）のプログラムの一部を示している。図３（ｂ）に示すように、制御プログラムに中にファンクションブロックに対応する矩形状のボックスを記述すると、図３（ｂ）に示す制御プログラムの各命令を順次実行しファンクションブロックに至ると、図３（ａ）に示すファンクションブロック内のプログラムを最後まで実行し、次いで、図３（ｂ）に示すファンクションブロックの次の命令を実行する。
【００３０】
図３（ｂ）では、Ｒｏｂｏｔ＿１、Ｒｏｂｏｔ＿２の制御を、ファンクションブロック（ＦＢ＿Ａ）で行なう。同一のファンクションブロック（ＦＢ＿Ａ）のインスタンスであるＲｏｂｏｔ＿１とＲｏｂｏｔ＿２は、プログラム実行作業領域１６内に、それぞれ作業領域が設定され（図３（ｃ）参照）、個別に入力データを与えることで、制御対象のＲｏｂｏｔを制御する。このようにそれぞれに作業領域が設定されるため、同一のファンクションブロックのプログラムを実行しても、Ｉ／Ｏデータ等が異なり、それぞれの制御対象に応じた制御を行なうことができる。
【００３１】
図４に示すように、ファンクションブロック（ＦＢ＿Ａ）を構成するプログラム中に、ファンクションブロック（ＦＢ−Ｂ）を記述することができる。このように、ファンクションブロックは、多重階層化構造の記述ができる。
【００３２】
本実施の形態では、プログラム制御部１２が、ステップ実行時の機能として、「ステップオーバー」，「ステップイン」，「ステップアウト」の３つの機能を備えるようにした。これら３つの機能は、いずれも、ファンクションブロックに関する実行において使用するものである。
【００３３】
図５（ａ）に示すように、ステップオーバーは、実行対象の命令（現ステップ位置）を示すカーソルＣ１が、ファンクションブロックの先頭にある場合に、そのファンクションブロック内を連続実行し、次のステップへ移動するものである（図５（ｂ）参照）。換言すると、ステップオーバーを実行するコマンドは、ファンクションブロックを１ステップとして実行するコマンドといえる。これにより、ファンクションブロック内の各命令をステップ実行する処理を省略でき、デバッグ作業が効率的に行える。これは、ファンクションブロックのデバッグが不要な場合に、有効な機能である。
【００３４】
ステップインは、実行対象の命令（現ステップ位置）を示すカーソルＣ１がファンクションブロックの先頭にある場合に、ファンクションブロック内の最初のステップへ移動するものである（図５（ｃ）参照）。つまり、ステップインを実行するコマンドは、ファンクションブロック内の先頭ステップで停止するコマンドといえる。これにより、ファンクションブロック内のプログラムをステップ実行することが可能になる。ファンクションブロック内のプログラムについても検証したい場合に有効な機能である。
【００３５】
ステップアウトは、いったんステップインを実行してファンクションブロック内に入り、１命令ずつステップ実行している場合に、そのファンクションブロック内の残りステップを連続実行し、ファンクションブロック呼出し側のファンクションブロック実行後のステップへ移動するものである。このステップアウトを実行するコマンドは、ファンクションブロック内の残りステップを連続実行し、ファンクションブロック呼出し元のファンクションブロックの次ステップで停止するコマンドといえる。ファンクションブロックの内部をステップ実行して途中まで検証し、それ以降の命令の検証が不要な場合に、その後も１ステップずつステップ実行する作業が省略できる。
【００３６】
このようにステップオーバーと、ステップインの２つの機能を設けることで、ユーザは、ファンクションブロックの先頭に来たときに、そのファンクションブロックの内部に入り込んでステップ実行しながら検証するか（ステップイン）、そのファンクションブロック内に入り込むことなく、当該ファンクションブロックを連続実行させ次のステップに移行するか（ステップオーバー）を選択的することができ、状況に応じた適切な処理を効率的に行える。
【００３７】
さらに、ステップアウトを設けることで、ファンクションブロックの内部について、必要な箇所までステップ実行して検証し、それ以降は連続実行させることでステップ実行コマンドをファンクションブロック内の全てのステップごとに１ステップ実行命令を入力する作業を省略できるので、作業性がさらに向上する。
【００３８】
本実施の形態では、上述した３つの機能と、通常のステップ実行とを、３つの実行操作ボタンＢ１，Ｂ２，Ｂ３により実行するようにした。すなわち、Ｂ１は、ステップインボタンである。ファンクションの先頭のときにこのステップインボタンＢ１が押されると、ファンクションブロック内の最初のステップへ移動する。つまり、上述したステップイン機能を実行する。ファンクションブロックの先頭以外、つまり、通常の命令や、ファンクションブロックの内部のときにこのステップインボタンＢ１が押されると、１ステップ実行する。
【００３９】
Ｂ２は、ステップオーバーボタンである。ファンクションブロックの先頭のときに、このステップオーバーボタンＢ２が押されると、ファンクションブロック内を連続実行する。つまり、上述したステップオーバー機能を実行する。ファンクションブロックの先頭以外、つまり、通常の命令や、ファンクションブロックの内部のときにこのステップオーバーボタンＢ２が押されると、１ステップ実行する。
【００４０】
Ｂ３は、ステップアウトボタンである。ファンクションブロック内の先頭，ファンクションブロックの途中のいずれの場合でも、ステップアウトボタンＢ３が押されると、そのファンクションブロック内の残りを連続実行する。なお、ファンクションブロックの外の通常命令の位置でこのステップアウトボタンＢ３が押されると、１ステップ実行する。
【００４１】
つまり、ファンクションブロックの外部の通常の命令の位置では、３つのボタンＢ１，Ｂ２，Ｂ３のいずれも、１ステップ実行する命令を意味する。もちろん、本実施の形態では、３つのボタンＢ１，Ｂ２，Ｂ３により３つの機能と通常の１ステップ実行の命令の４種類をコマンドの入力を可能としたが、本発明はこれに限ることはなく、１ステップ実行の命令入力用のボタンをさらに設けても良いし、ステップオーバーと、ステップアウトを兼用することで、２つのボタンで実現するようにしても良く、実現手法は各種の対応がとれる。後者の兼用は、ファンクションブロックの先頭位置で兼用ボタンが押された場合には、ステップオーバーを実行し、ファンクションブロックの内部の時に兼用ボタンが押された場合には、ステップアウトを実行するようにすればよい。
【００４２】
図６は、上述した３つの機能と１ステップ実行を行なうプログラム制御部１２の機能を示すフローチャートである。プログラム制御部１２は、操作部１１から受け取った実行コマンド（Ｂ１，Ｂ２，Ｂ３の押下）に基づき実行ステップ（停止ステップ）を決定し、決定した内容に基づきプログラム実行部１３に制御プログラムの所定ステップの実行要求を与える。
【００４３】
このフローチャートは、１ステップ実行モードの時に動作する。すなわち、図２に示す操作画面において、１スキャン実行操作ボタンＢ４あるいは連続実行操作ボタンＢ５の押下に伴なう連続実行をしていない場合が、１ステップ実行モードである。
【００４４】
１ステップ実行モードにおいて、ステップインボタンＢ１，ステップオーバーボタンＢ２，ステップアウトボタンＢ３のいずれが押されること（コマンド入力）を待つ。そして、ステップオーバーボタンＢ２が押された場合、次のステップがファンクションブロックか否かを判断する（Ｓ１１）。具体的には、カーソルＣ１が、図５（ａ）に示すようにファンクションブロックの先頭位置にあるか否かにより判断する。次のステップがファンクションブロックの場合（Ｓ１１がＹｅｓ）、ファンクションブロック内を連続実行し、そのファンクションブロックの次ステップで停止するように停止位置をセットする（Ｓ１２）。これに基づき、プログラム実行部１３は、ファンクションブロック内を連続実行する。カーソルＣ１は、停止位置であるファンクションブロックの次ステップに移行する。
【００４５】
また、コマンド入力待ちの時に、ステップインボタンＢ１が押された場合、次のステップがファンクションブロックか否かを判断する（Ｓ１３）。次のステップがファンクションブロックの場合（Ｓ１３がＹｅｓ）、ファンクションブロック内の先頭ステップで停止するように停止位置をセットする（Ｓ１４）。これを受けて、プログラム実行部１３は、ファンクションブロック内の先頭のステップに飛ぶ。また、操作部１１は、そのファンクションブロックのプログラムをプログラム表示領域Ｒ２に表示するとともに、カーソルＣ１を、その表示されたファンクションブロックの先頭のステップに位置させる。
【００４６】
また、コマンド入力待ちの時に、ステップアウトボタンＢ３が押された場合、ファンクションブロック内を実行中か否かを判断する（Ｓ１５）。これは、カーソルＣ１が、ファンクションブロックのプログラムを構成するステップ（先頭か否かを問わず）に位置しているか否かにより判断できる。ファンクションブロック内を実行中の場合（Ｓ１５がＹｅｓ）、ファンクションブロック呼出し元のファンクションブロックの次ステップで停止する停止位置をセットする（Ｓ１６）。これに基づき、プログラム実行部１３は、現在のステップ以降のファンクションブロック内のステップを連続実行する。カーソルＣ１は、停止位置であるファンクションブロックの次ステップに移行する。
【００４７】
いずれのコマンドを入力された場合も、各分岐判断Ｓ１１，Ｓ１３，Ｓ１５の判断結果がＮｏの場合には、１ステップ実行する（Ｓ１７）。つまり、プログラム実行部１３は、カーソルＣ１がおかれた現ステップを実行し、次ステップで停止する。
【００４８】
上述したファンクションブロックについての処理は、ファンクションブロック内にファンクションブロックが記述されている場合、係る内部のファンクションブロックについてもと同様の処理を行なう。これにより、たとえば図７（ａ）に示すように、ファンクションブロックの内部のステップを、ステップオーバー／ステップインの実行により、１ステップずつ実行し、ファンクションブロック（親）内のファンクションブロック（子）まで移動する（図７（ｂ）参照）。この段階で、ステップアウトボタンＢ３が押されると、ファンクションブロック（子）の内部に入る前であるため、図７（ｃ）に示すように、ファンクションブロック（親）の残りのステップ（ファンクション（子）も含めて）を連続実行し、そのファンクションブロック（親）の次のステップに移る。
【００４９】
図７（ｂ）の状態で、ステップオーバーボタンＢ２が押されると、そのファンクション（子）を連続実行し、ファンクションブロック（親）の次のステップに移行する（図７（ｄ）参照）。そして、図７（ｂ）の状態で、ステップインボタンＢ１が押されると、そのファンクション（子）内に入り込み、先頭のステップに移行する（図７（ｅ）参照）。このファンクションブロック（子）の内部プログラムについても、通常のファンクションブロックと同様に処理する。つまり、ステップオーバー／ステップインの実行により、１ステップずつ実行するし、ステップアウトによりそのファンクションブロック（子）の残りのステップを連続実行し、ファンクションブロック（親）の次のステップに移行する（図７（ｄ）参照）。また、ステップオーバー／ステップインの実行を繰り返し行ない、ファンクションブロック内の最終ステップ実行後は、ファンクションブロック呼出し側のファンクションブロック実行後のステップへ移動する（図７（ｅ）→図７（ｄ），図７（ｄ）→図７（ｅ）参照）。
【００５０】
図８は、プログラム制御情報領域１５に格納されるブレークポイント管理テーブルのデータ構造の一例を示している。このブレークポイント管理テーブルは、プログラム識別情報と、ＰＯＵ名と、ブレークポイント位置（プログラムのステップ位置）とを関連付けたテーブルである。図２のプロジェクトツリー表示領域Ｒ１に表示されたプロジェクトツリーから明らかなように、同一のファンクションブロック（ＦＢ＿Ａ）が、タスク＿０００で２つ（Ｒｏｂｏｔ＿１とＲｏｂｏｔ＿２）とタスク＿００１で２つ（Ｒｏｂｏｔ＿３とＲｏｂｏｔ＿４）の合計４箇所で使用されている。
【００５１】
単純に、ファンクションブロック（ＦＢ＿Ａ）のプログラム自体のステップ位置にブレークポイントを設定すると、４つのインスタンスの全てにおいて、同じステップ位置でブレークして停止してしまう。しかし、実際には、たとえばＲｏｂｏｔ＿１とＲｏｂｏｔ＿４では、ブレークして停止させたいが、Ｒｏｂｏｔ＿２とＲｏｂｏｔ＿３ではブレークすることなくそのまま連続実行させたいという要求がある。さらに、ブレークさせたいＲｏｂｏｔ＿１とＲｏｂｏｔ＿４において、それぞれ異なるステップ位置で停止させたいという要求もある。これは、同一のファンクションブロックを使用していても、制御対象が異なるため、各制御対象ごとにブレークの必要性の有無や、停止させたいブレークポイントが異なる（たとえば、Ｒｏｂｏｔ＿１の６番目のステップと、とＲｏｂｏｔ＿４の１０番目のステップ）ためである。
【００５２】
そこで、本実施の形態では、タスクＮｏ．とインスタンス識別情報とからなるプログラム識別情報により、対象となるインスタンスを一意に特定する。さらに、係るプログラム識別情報と、プログラムのステップ位置とを管理することで、特定のファンクションブロックのインスタンスに対し、それぞれのブレークポイント設定位置を識別するようにした。
【００５３】
プログラム実行部１３は、制御プログラムの連続実行中に、ブレークポイント管理テーブルに格納された情報に基づき現在のステップ位置がブレークして停止すべきステップか否かを判断し、ブレークポイントでない場合には、そのままステップを実行し、ブレークポイントの場合には停止する処理を行なう。そして、ブレークポイントか否かは、プログラム識別とＰＯＵ名とステップ位置が一致したことを条件にブレークポイントと判断する。換言すると、プログラム識別とＰＯＵ名とステップ位置とのうち、１つでも異なるものがあればブレークポイントではないと判断し、そのステップを実行する。
【００５４】
図８に示すブレークポイント管理テーブルの場合、プログラム識別情報が、「タスク＿０００￥ＳｔａｔｉｏｎＮｏ１￥Ｒｏｂｏｔ＿１」のファンクションブロック（ＦＢ＿Ａ）は、６番目のステップでブレークするという条件が格納され、「タスク＿００１￥ＳｔａｔｉｏｎＮｏ２￥Ｒｏｂｏｔ＿４」のファンクションブロック（ＦＢ＿Ａ）は、１０番目のステップでブレークするという条件が格納されているため、ＳｔａｔｉｏｎＮｏ１のＲｏｂｏｔ＿１の６番目のステップではブレークにより停止するが、１０番目のステップでは停止しない。逆に、ＳｔａｔｉｏｎＮｏ２のＲｏｂｏｔ＿４は、１０番目のステップではブレークにより停止するが、６番目のステップでは停止しない。さらに、ＳｔａｔｉｏｎＮｏ１のＲｏｂｏｔ＿２や、ＳｔａｔｉｏｎＮｏ２のＲｏｂｏｔ＿３を連続実行中には、ブレークされることなく最後まで連続実行される（６番目のステップや１０番目のステップでは停止しない）。
【００５５】
係るブレークポイント管理テーブルの登録処理は、プログラム制御部１２が、図９に示すフローチャートを実行することで行なう。まず、操作部１１を介してブレークポイントが選択（入力）されるのを待つ（Ｓ２１）。具体的には、図１０に示すように、プログラム表示領域Ｒ２に表示されたプログラム中の命令（ステップ）のうち、カーソルＣ１で指定された命令についてブレークポイントの設定命令を受け付ける。すなわち、ユーザは、入力装置１を操作し、表示されたプログラムにおいて、ブレークポイントに設定したい命令（ステップ）にカーソルＣ１を移動させる。その状態で、入力装置１を操作し、そのカーソルＣ１が指している命令を、ブレークポイントとして登録する指示を与える。係る指示は、たとえば、設定画面中に所定の登録ボタンを表示し、その登録ボタンをクリックする他、各種の手法がとれる。
【００５６】
ついで、ブレークポイントに指定された命令（ステップ）が、ファンクションブロック内のものか否かを判断する（Ｓ２２）。そして、ファンクションブロック内の場合には、プログラム識別情報の欄に、タスクＮｏ．とインスタンス識別情報を登録し（Ｓ２３）、ＰＯＵ名の欄にＰＯＵ名を登録し（Ｓ２４）、位置の欄にステップ位置（番号）を登録する（Ｓ２４）。上記のプログラム識別情報やＰＯＵ名やステップ位置は、操作部１１を介して与えられる。プログラム表示領域Ｒ２に表示されたプログラムが、プロジェクトツリー表示領域Ｒ１におけるどのプログラムであるかは、デバッグ装置側で関連付けられてわかっているため、プログラムの任意の命令（ステップ）の上にカーソルＣ１を置いた場合、そのプログラムについてのプログラム識別情報や、ＰＯＵ名を操作部１１が認識でき、また、カーソルＣ１にて指定されたステップ位置も操作部１１が認識できる。よって、ブレークポイント管理テーブルに登録するのに必要な情報は、操作部１１を介してプログラム制御部１２が取得できる。たとえば図８に示すＲｏｂｏｔ＿１やＲｏｂｏｔ＿４についてのブレークポイントは、係る処理を実行して登録される。
【００５７】
一方、選択されたブレークポイントがファンクションブロック外の場合には、プログラム識別情報の欄に、タスクＮｏ．を登録し（Ｓ２６）、ＰＯＵ名の欄にＰＯＵ名を登録し（Ｓ２７）、位置の欄にステップ位置（番号）を登録する（Ｓ２８）。たとえば図８に示すＳｔａｔｉｏｎＮｏ３＿Ｒｏｂｏｔ５についてのブレークポイントは、係る処理を実行して登録される。
【００５８】
一方、プログラム実行部１３は、ステップオーバーやステップアウトにより、ファンクションブロック内を連続実行する場合に、図１１に示すフローチャートを実行する。すなわち、ファンクションプログラム内の連続実行が開始されると、次に実行するステップを算出する（Ｓ３２）。すなわち、基本的には、ステップ番号順に実行するが、ジャンプ命令等があり、必ずしも次のステップ番号とは限らないため、この処理ステップで次に実行するステップを決定する。
【００５９】
次に実行するステップが決まると、その決定したステップが、ブレークポイント管理テーブルに登録されているステップ位置・ＰＯＵ名と一致するか否かを判断する（Ｓ３３）。そして、一致している場合（Ｓ３３でＹｅｓ）には、プログラム識別番号（情報）と一致しているか否かを判断する（Ｓ３４）。そして、一致している場合（Ｓ３４でＹｅｓ）には、ブレークポイントと判断し、プログラムの実行を停止する（Ｓ３５）。また、Ｓ３３とＳ３４の分岐判断で、いずれかがＮｏの場合には、次のステップはブレークポイントではないので、Ｓ３２で求めたステップを実行する（Ｓ３６）。その後、処理ステップＳ３２に戻り、上述した処理を繰り返し実行する。
【００６０】
次に、Ｒｏｂｏｔ＿４のファンクションブロックをステップオーバーにより連続実行する場合を例に挙げて説明する。係る場合、ステップを順次実行し、次ステップが、６番目のステップになったとする。すると、ＰＯＵ名はＦＢ＿Ａで、ステップ位置も６番目となり、ブレークポイント管理テーブルに登録された情報と一致するため、処理ステップＳ３３の分岐判断は、Ｙｅｓとなる。しかし、プログラム識別情報は、異なるため、処理ステップＳ３４の分岐判断はＮｏとなり、６番目のステップは実行される。
【００６１】
そして、さらに処理が進み、次ステップが、１０番目のステップになったとする。すると、ＰＯＵ名はＦＢ＿Ａで、ステップ位置も１０番目となり、ブレークポイント管理テーブルに登録された情報と一致するため、処理ステップＳ３３の分岐判断は、Ｙｅｓとなる。さらに、プログラム識別情報も一致するため、処理ステップＳ３４の分岐判断もＹｅｓとなるので、プログラム実行がそのステップ位置で停止する。
【００６２】
これに対し、Ｒｏｂｏｔ＿２やＲｏｂｏｔ＿３のファンクションブロックをステップオーバーにより連続実行した場合、いずれも、６番目と１０番目のステップで処理ステップＳ３３の分岐判断がＹｅｓとなるものの、プログラム識別情報が一致しないため、処理ステップＳ３４の分岐判断はＮｏとなり、最後のステップまでブレークされることなく実行される。このように、本実施の形態では、各ファンクションブロックのインスタンスごとにそれぞれ固有の位置にブレークポイントの設定をすることができる。
【００６３】
図１１では示していないが、最終ステップまで実行されたならば、そのファンクションブロックについてのプログラム実行が完了するため、上述したステップオーバーやステップアウトの処理により、ファンクションプログラムの次のステップに移行する。
【図面の簡単な説明】
【００６４】
【図１】本発明の好適な一実施の形態を示すブロック図である。
【図２】操作画面の一例を示す図である。
【図３】ファンクションブロックを説明する図である。
【図４】ファンクションブロックを説明する図である。
【図５】ステップオーバーとステップインとステップアウトを説明する概念図である。
【図６】プログラム制御部の機能を示すフローチャートである。
【図７】ファンクションブロック内にファンクションブロックが記述されている場合のステップオーバーとステップインとステップアウトを説明する図である。
【図８】ブレークポイント管理テーブルのデータ構造の一例を示す図である。
【図９】プログラム制御部が持つ、ブレークポイントの登録機能を説明するフローチャートである。
【図１０】ブレークポイントの登録の作用を説明する図である。
【図１１】プログラム実行部が持つ、ブレーク処理機能を説明するフローチャートである。
【符号の説明】
【００６５】
１１  操作部
１２  プログラム制御部
１３  プログラム実行部
１４  制御プログラム格納領域
１５  プログラム制御情報領域
１６  プログラム実行作業領域
１７  Ｉ／Ｏ領域
【図１】
2007102385.tif 000003
【図２】
2007102385.tif 000004
【図３】
2007102385.tif 000005
【図４】
2007102385.tif 000006
【図５】
2007102385.tif 000007
【図６】
2007102385.tif 000008
【図７】
2007102385.tif 000009
【図８】
2007102385.tif 000010
【図９】
2007102385.tif 000011
【図１０】
2007102385.tif 000012
【図１１】
2007102385.tif 000013