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