(57)【特許請求の範囲】
【請求項１】
汎用ＣＰＵによって構成されるデバッグ機能を備えたプログラマブルコントローラであって、
所与のプログラムを前記汎用ＣＰＵのマシン語へコンパイルする時に、前記プログラムのステップ単位で前記マシン語のＮＯＰ命令を挿入する手段と、
前記ＮＯＰ命令が挿入された前記マシン語の番地の各々を記憶する切れ目テーブルを、前記プログラムが呼び出すサブルーチン単位で作成する手段と、
ステップイン時に使用される制御ルーチンまたはステップオーバー時に使用される制御ルーチンへの分岐命令を実行時に記憶させるためのＪＭＰテーブルを生成する手段と、
ブレーク設定の実行時に、ブレーク処理ルーチンから、ステップイン用またはステップオーバー用のデバッグタスクを起動して、ステップイン実行コマンドまたはステップオーバ実行コマンドを待ち受ける手段と、
前記いずれかのコマンドを受け付けた時に、前記プログラムのメインルーチンにおける前記マシン語に挿入された前記ＮＯＰ命令を、前記ＪＭＰテーブルを参照する命令に書き替えると共に、前記ＪＭＰテーブルの記憶内容として、ステップイン時には、前記ステップイン時に使用される制御ルーチンへの呼び出し命令を記憶させ、ステップオーバー時には、前記ステップオーバー時に使用される制御ルーチンへの呼び出し命令を記憶させる手段と、
前記ステップイン時に使用される制御ルーチンの実行により、前記切れ目テーブルを参照して、前記プログラムの前記メインルーチンの前記マシン語に挿入された前記ブレーク処理ルーチンへの分岐命令を、前記ＮＯＰ命令に書き替えると共に、前記サブルーチンの前記マシン語に挿入された前記ＮＯＰ命令を、前記ブレーク処理ルーチンへの分岐命令に書き替える手段と、
前記ステップオーバー時に使用される制御ルーチンの実行により、前記切れ目テーブルを参照して、前記プログラムの前記メインルーチンの前記マシン語に挿入された前記ブレーク処理ルーチンへの分岐命令を、前記ＮＯＰ命令に書き替える手段と、
を備えたことを特徴とするプログラマブルコントローラ。
【請求項２】
前記ＪＭＰテーブルの記憶内容として、ステップイン時には、前記ステップイン時に使用される制御ルーチンへの呼び出し命令に代えて前記ステップイン時に使用される制御ルーチンの処理開始番地を記憶させ、ステップオーバー時には、前記ステップオーバーに使用される制御ルーチンへの呼び出し命令に代えて前記ステップオーバー時に使用される制御ルーチンの処理開始番地を記憶させる手段を備えたことを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
所与のプログラムを前記汎用ＣＰＵのマシン語へコンパイルする時に、前記プログラムのステップ単位での前記ＮＯＰ命令の挿入を行わずに、前記マシン語にコンパイルする手段と、
前記切れ目テーブルに代えて、前記ＮＯＰ命令が挿入されなかった前記マシン語の番地の各々を記憶する切れ目テーブルを、前記プログラムが呼び出すサブルーチン単位で作成する手段と、を備え、ブレーク設定時またはステップ実行時には、前記切れ目テーブルに記憶された前記マシン語を退避してから、前記ブレーク処理ルーチンを実行した後、前記退避しておいたマシン語を復元すると共に、前記復元したマシン語以降の命令を実行することを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項４】
前記ステップオーバー時は、前記プログラムの前記メインルーチンにおける、ブレーク位置の次に実行する前記マシン語に挿入された前記ＮＯＰ命令を、ブレーク処理への分岐命令に書き替える手段と、
前記ステップオーバー時に使用される制御ルーチンにおいて、呼び出された直後に、前記ＪＭＰテーブルの記憶内容を前記ステップオーバー実行コマンドを受け付ける前の状態に戻す手段と、
を備えたことを特徴とする請求項１記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラマブルコントローラに係り、特に、汎用ＣＰＵを使用して、ユーザプログラムのブレーク設定された一部の命令をブレーク処理への分岐命令に置き換えると共に、デバッグ時に、デバッグ済のサブルーチンをステップオーバすることができるプログラマブルコントローラに関する。
【背景技術】
【０００２】
従来、プログラマブルコントローラ（プログラマブルロジックコントローラと呼ばれることもある）は、シーケンス命令実行を高速に行わせるための、大規模専用ＬＳＩなどに代表される専用ハードウェアを備えたものが主流であった。専用ハードウェアを備えているため、後述するブレーク処理や、ステップ処理の実行も、ハードウェアによってサポートされていた。このようなハードウェアでブレーク処理や、ステップ処理をサポートさせる方式の場合、ブレーク設定された位置の命令を特殊な命令に置き換えて割込みを発生させ、ブレーク成立チェックルーチンへの分岐を行い、ブレークが成立した場合にブレーク状態を作り出すことが可能であった。しかしながら、この方式には、
（１）専用プロセッサは高価である、
（２）専用プロセッサは専用のマシン語体系を有し、システムプログラム開発が比較的困難である、
というデメリットも存在していた。
【０００３】
近年、パソコン、携帯端末などの普及により、市販の汎用ＣＰＵの技術革新が進み、高速実行が可能なＣＰＵでも、非常に安価に入手することが可能になってきた。また、ＣＰＵが汎用であるため、ファームウェアの開発ツールを、市場から豊富に調達することも可能になってきたので、このような汎用ＣＰＵを用いたプログラマブルコントローラも開発されるようになってきている。
【０００４】
例えば、このような汎用ＣＰＵを用いたプログラマブルコントローラの例として、特許文献１に見られるように、シーケンス命令（制御プログラムの命令）の１命令につき、数個のマシン語を組合せることによって、シーケンス命令実行を行わせる提案が知られている。
【特許文献１】特開２００２−９９３１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、上記背景技術で述べた従来のプログラマブルコントローラにあっては、そのアプリケーションが、ラダー図、テキスト記述言語などのシーケンス言語命令の集合体で構成されている。
前述の特許文献１に見られるように、汎用ＣＰＵを用いたプログラマブルコントローラでは、シーケンス命令の１命令につき、数個のマシン語によってシーケンス命令実行を実現している例が知られている。
【０００６】
また、プログラマブルコントローラにおけるデバッグサポート方式としては、指定した条件、命令位置で実行を一時中断させるブレーク機能（「条件停止」とも呼ばれている）や、ブレーク状態から１命令ずつ実行しては再度ブレーク状態になるステップ機能によってサポートする方式などがある。
以下の説明では、プログラム、ファンクションブロック、ファンクションの定義については、プログラマブルコントローラにおける記述言語規格のＩＥＣ６１１３１−３に準ずるものとして説明を省略する。
【０００７】
従来、ユーザは、プログラミング支援装置にてプログラミングを行い、作成したプログラムをプログラマブルコントローラに転送し、実行させてプログラムのテストを行っているが、その際にシーケンスプログラムの任意の位置で前述のブレーク処理を実行させたいことがあり、また、前述のステップ処理の実行も、シーケンス命令単位で行いたい場合がある。即ち、シーケンス命令単位でのブレーク指定を可能にすることや、ステップ処理を実行させる機能を実現して欲しいとの要求がある。
【０００８】
なお、前述の先行技術（特許文献１に開示された技術）では、デバッガなるソフトウェアをプログラミング支援装置に含み、かつ内部ではＣ言語ソースコードや、Ｃソースデバッガを内蔵させており、制御プログラムの作成のために必要なハードウェア資源以外にも、多量の資源を準備しなければならないといった問題点がある。また、プログラマブルコントローラ側（即ち実行装置側）も、アプリケーション実行機能とは別にＣソースデバッガとのインタフェースのためのソフトウェア、ハードウェア資源を備えなければならず、コストアップを招くといった問題がある。
【０００９】
よって、追加のソフト資源やハード資源が少なくて済み、また割込み発生命令などの汎用性に乏しい特殊命令が不要なデバッグサポート機能、さらには、一般的なＣＰＵを用いても実現可能な方式を用いてデバッグサポート機能を実現することが望ましい。
図１６は、プログラマブルコントローラの一般的なアプリケーション構成を示す構成図である。
【００１０】
同図に示すように、プログラマブルコントローラのアプリケーションには、親となるプログラム（メインルーチン）から、共通使用可能なユーザプログラムまたはユーティリティプログラム（以下、「ＰＯＵ」と略すことがある）として記述されたサブルーチンであるユーザファンクション（以下、「ＵＦＣＴ」と略すことがある）や、ユーザファンクションブロック（以下、「ＵＦＢ」または単に「ＦＢ」と略すことがある）を呼び出して、前記ＵＦＣＴや、ＵＦＢでの実行を終えた後、リターン命令により前記プログラムの次のステップに実行位置が戻ってくるといった構成のものがある。即ち、このようなアプリケーションのメインルーチンは、ＰＯＵを呼び出すシーケンスだけで構成することができる。
【００１１】
一般に、デバッグの初期の頃は、まずステップを順次実行していき、コール命令（即ち、ＰＯＵ等の呼び出し命令）に遭遇した時、例えば、呼び先のＵＦＣＴまたはＵＦＢの先頭でブレークさせ、さらにステップを進めていき、前記ＵＦＣＴまたはＵＦＢの動作確認を行う方法を採用することが多い。この方法は、「ステップイン」と呼ばれている。
次に、デバッグがある程度進み、呼び先のＵＦＣＴまたはＵＦＢの動作確認が既に完了している場合以降のデバッグである場合は、ステップインを実行しなくても、ＵＦＣＴまたはＵＦＢについては一気に実行を済ませてリターンしてきたところでブレークさせた方がプログラムのデバッグ効率が良い。このようなステップは「ステップオーバ」と呼ばれている。
【００１２】
従来のようにステップイン実行しかできないプログラマブルコントローラの場合は、ユーザが動作確認を既に終えているＵＦＣＴや、ＵＦＢを含んだプログラムを作成し、このプログラムのデバッグを行う際に、例えばＵＦＣＴを呼ぶ前と呼んだ後とで、前記プログラム内の変数内容を確認したいといった場合に、前記プログラムから、このＵＦＣＴの実行へと、ステップを進めることになるが、前記ＵＦＣＴからリターンするところまでステップを進めないと、制御の流れは前記プログラムに戻って来ないため、非常に不便であり時間も掛かる。
【００１３】
従って、このような場合には、ステップオーバが威力を発揮することになり、その実現が本発明の課題である。
本発明は、上記従来の問題点に鑑みてなされたものであって、汎用マイコンを使用して、ステップオーバの機能を備えるプログラマブルコントローラを提供することを目的としている。
【課題を解決するための手段】
【００１４】
上記課題を解決するために、本発明に係るプログラマブルコントローラは、汎用ＣＰＵによって構成されるデバッグ機能を備えたプログラマブルコントローラであって、所与のプログラムを前記汎用ＣＰＵのマシン語へコンパイルする時に、前記プログラムのステップ単位で前記マシン語のＮＯＰ命令を挿入する手段と、前記ＮＯＰ命令が挿入された前記マシン語の番地の各々を記憶する切れ目テーブルを、前記プログラムが呼び出すサブルーチン単位で作成する手段と、ステップイン時に使用される制御ルーチンまたはステップオーバ時に使用される制御ルーチンへの分岐命令を実行時に記憶させるためのＪＭＰテーブルを生成する手段と、ブレーク設定の実行時に、ブレーク処理ルーチンから、ステップイン用またはステップオーバ用のデバッグタスクを起動して、ステップイン実行コマンドまたはステップ実行コマンドを待ち受ける手段と、前記いずれかのコマンドを受け付けた時に、前記プログラムのメインルーチンにおける前記マシン語に挿入された前記ＮＯＰ命令を、前記ＪＭＰテーブルを参照する命令に書き替えると共に、前記ＪＭＰテーブルの記憶内容として、ステップイン時には、前記ステップイン時に使用される制御ルーチンへの呼び出し命令を記憶させ、ステップオーバ時には、前記ステップオーバ時に使用される制御ルーチンへの呼び出し命令を記憶させる手段と、前記ステップイン時に使用される制御ルーチンの実行により、前記切れ目テーブルを参照して、前記プログラムの前記メインルーチンの前記マシン語に挿入された前記ブレーク処理ルーチンへの分岐命令を、前記ＮＯＰ命令に書き替えると共に、前記サブルーチンの前記マシン語に挿入された前記ＮＯＰ命令を、前記ブレーク処理ルーチンへの分岐命令に書き替える手段と、前記ステップオーバ時に使用される制御ルーチンの実行により、前記切れ目テーブルを参照して、前記プログラムの前記メインルーチンの前記マシン語に挿入された前記ブレーク処理ルーチンへの分岐命令を、前記ＮＯＰ命令に書き替える手段と、を備えたことを特徴とするプログラマブルコントローラを提供するものである。
【００１５】
また、前記プログラマブルコントローラにおける前記ＪＭＰテーブルの記憶内容として、ステップイン時には、前記ステップイン時に使用される制御ルーチンへの呼び出し命令に代えて前記ステップイン時に使用される制御ルーチンの処理開始番地を記憶させ、ステップオーバ時には、前記ステップオーバに使用される制御ルーチンへの呼び出し命令に代えて前記ステップオーバ時に使用される制御ルーチンの処理開始番地を記憶させる手段を備えたことを特徴とする。
【００１６】
さらに、前記プログラマブルコントローラにおいて、所与のプログラムを前記汎用ＣＰＵのマシン語へコンパイルする時に、前記プログラムのステップ単位での前記ＮＯＰ命令の挿入を行わずに、前記マシン語にコンパイルする手段と、
前記切れ目テーブルに代えて、前記ＮＯＰ命令が挿入されなかった前記マシン語の番地の各々を記憶する切れ目テーブルを、前記プログラムが呼び出すサブルーチン単位で作成する手段と、を備え、ブレーク設定時またはステップ実行時には、前記切れ目テーブルに記憶された前記マシン語を退避してから、前記ブレーク処理ルーチンを実行した後、前記退避しておいたマシン語を復元すると共に、前記復元したマシン語以降の命令を実行することを特徴とする。
【００１７】
さらに、前記プログラマブルコントローラにおいて、前記ステップオーバー時は、前記プログラムの前記メインルーチンにおける、ブレーク位置の次に実行する前記マシン語に挿入された前記ＮＯＰ命令を、ブレーク処理への分岐命令に書き替える手段と、前記ステップオーバー時に使用される制御ルーチンにおいて、呼び出された直後に、前記ＪＭＰテーブルの記憶内容を前記ステップオーバー実行コマンドを受け付ける前の状態に戻す手段と、を備えたことを特徴とする。
【発明の効果】
【００１８】
以上説明したように、本発明のプログラムコントローラによれば、特殊な命令や割込み発生命令を備えた特異なマイコンを使用する必要がなく、一般的な汎用マイコンを使用して、ブレーク処理や、ステップインやステップオーバといったデバッグサポート機能を実現することが可能となるので、追加するハード、ソフトが少なくなり、コストの安いプログラムコントローラを提供することができる効果がある。
【００１９】
また、ユーザプログラムが、ファンクションブロックやファンクションといった共通使用のユーザプログラム（またはユーティリティプログラム）を呼び出すシーケンスを含む構成である場合、即ち、構造化や階層化がなされたプログラム構成の場合であっても、平坦な構成のユーザプログラムと同様に、ステップインや、ステップオーバの機能を実行することができる効果がある。
【発明を実施するための最良の形態】
【００２０】
以下、本発明のプログラムコントローラの最良の実施形態について、図面を参照して詳細に説明する。
図１は、本発明の実施形態に係るプログラムコントローラの全体構成を示す構成図及びデバッグタスクを示す説明図である。
本発明の実施形態に係るプログラムコントローラは、ステップオーバの他に、ステップインも可能な構造となっている。
【００２１】
図１において、本実施形態のプログラムコントローラは、ローダとのコマンドインタフェースを担うローダサーバ１と、コマンドの前処理及び後処理を行うデバッグタスク２と、を備える。
ローダサーバ１からは、コマンドに応じた関数が呼ばれ、デバッグタスク２へ処理を依頼する構造となっている。ステップインコマンド用関数としてStepIn(11)、ステップオーバコマンド用関数としてStepOver(12)、継続起動コマンド用関数としてContRun(13)を備えている。この構成は、プログラムコントローラ本体が備えるソフトウェアの構造を機能毎に纏めた構成であり、本発明では、この構成に限らず、コマンド処理できるソフトウェアであれば構成要素とすることができる。
【００２２】
以下、図１を参照しながら、本実施形態に係るプログラムコントローラで実行されるデバッグタスクについて説明する。
デバッグタスク２（図１）は、プログラムの先頭において、ステップ実行中ビット（ステップイン実行中ビットおよびステップオーバ実行中ビット）を参照して、いずれのステップ処理を実行中かをチェックし、ステップイン実行中であればステップイン後処理を行う。
【００２３】
この後処理が完了すると、デバッグタスク２は前記ステップイン実行完了イベントをローダコマンド処理部(StepIn (11)) に対して発行し、ローダコマンド処理部は完了イベント受信により、ローダサーバ１へ完了応答を通知する。完了イベントを発行した後、デバッグタスク２はコマンド待ちとなり、次のコマンド（ステップイン実行コマンドまたはステップオーバ実行コマンドまたは継続起動コマンド）を待つ。
【００２４】
一方、ステップオーバ実行中であればステップオーバ後処理を行う。この後処理が完了すると、デバッグタスク２はステップオーバ実行完了イベントをローダコマンド処理部(StepOver(12))に対して発行し、ローダコマンド処理部は完了イベント受信により、ローダサーバ１へ完了応答を通知する。完了イベントを発行した後デバッグタスク２はコマンド待ちとなり、次のコマンドを待つ。
【００２５】
次に、シーケンスプログラムとシーケンス命令切れ目テーブルについて説明する。
図２は、シーケンス命令が記述されたプログラムとシーケンス命令切れ目テーブルとの関係を示す説明図である。
図２（ａ）はシーケンス命令が記述されたプログラム、図２（ｂ）は汎用ＣＰＵのマシン語プログラム、図２（ｃ）はシーケンス命令切れ目テーブルを、それぞれ示す。
【００２６】
ユーザによるシーケンスプログラム（図２（ａ））をコンパイルすることにより、シーケンス命令の１命令が複数個の汎用ＣＰＵマシン語に変換され、同時に前記シーケンス命令の切れ目毎に前記汎用ＣＰＵマシン語のＮＯＰ命令が挿入されて成るプログラム（図２（ｂ））と、シーケンス命令切れ目テーブル（図２（ｃ））が作成される。このシーケンス命令切れ目テーブルは、ＰＯＵ毎に生成される。
【００２７】
図２に示すように、このシーケンス命令切れ目テーブルは、ＰＯＵの先頭を０としたオフセットで表現され、シーケンス命令の１命令毎にオフセット値(X1,X2,,,,,,XN)が列挙される。ここで、このオフセット値は汎用ＣＰＵのマシン語ＰＣ（プログラムカウンタ）単位であり、バイトアドレスで表現される。
図３は、ブレーク設定時の動作を説明する説明図である。また、図４は、命令置換テーブルを示す説明図である。
【００２８】
ステップ実行は、ブレーク状態でステップコマンドを受けることにより行われるものであるが、ブレーク状態を作り出すためのブレーク設定コマンド処理(SetBreak(21))と、ブレーク成立条件テーブルと、命令置換テーブル（図４）と、をプログラマブルコントローラ本体に備える。
ブレーク設定は、ローダサーバ１からプログラマブルコントローラへのブレーク設定コマンドによって行われる。ブレーク設定コマンドは、ＰＯＵ種別、ＰＯＵ番号、ＰＯＵ内相対アドレス、及びブレーク成立条件といったデータで構成される。
【００２９】
ＰＯＵ内相対アドレスはマシン語アドレスではなく、シーケンス命令単位の指定である。ブレーク設定コマンドデータを解釈し、ブレーク成立条件の退避、命令置換テーブルの作成、アプリケーションのＰＯＵ（以下、アプリＰＯＵと略す）への命令置き換え操作を行う。
この命令置き換え操作では、ＰＯＵ内相対アドレスｎを検索キーにして切れ目テーブルから読み出したＮ番目のオフセット値と、該当するＰＯＵ先頭アドレス（メモリの何番地からＰＯＵが割り付けられているかが記述されているプログラムエントリテーブルから取得する）を加算してマイコン絶対アドレスを求め、このようにして算出されたマイコン絶対アドレスに格納されているＮＯＰ命令をブレーク処理への分岐命令に書き替える。これにより、アプリケーションプログラムのブレーク位置にはブレーク処理への分岐命令が仕組まれているので、スキャンの度に、制御の流れは後述するブレーク処理（図５参照）へ移る。
【００３０】
また、ブレーク設定の削除を行う時のために、図４に示す構成の命令置換テーブルが作成される。この命令置換テーブルは、コマンドで与えられたＰＯＵ種別、ＰＯＵ番号、及びＰＯＵ内相対アドレスを格納するフィールドの他、置き換えを行う命令の番地を示すマイコン絶対アドレスを保管するフィールド、置き換えを行う前の命令を保管するフィールド、及び置き換えをした後の命令を保管するフィールドによって構成される。
【００３１】
図５は、ブレーク処理の動作を説明するフローチャートである。
同図に示すように、ブレーク処理では、ステップイン実行中、またはステップオーバ実行中または、ブレーク条件成立、のいずれかにより、デバッグタスクを起動する。
このデバッグタスクはアプリケーションタスクより高い優先度にしておき、デバッグタスク実行中は、例え起動設定した定周期タイミングになったとしてもアプリケーションタスクは実行されず、ブレーク状態が保たれる。ちなみに、マルチタスク実行に関しては、μＩＴＲＯＮなどのＯＳ（オペレーティングシステム）によって管理及び実行が可能であるので、ここでは一般的な技術として詳細説明は省く。
【００３２】
ステップイン実行中か否かは、ステップイン実行中ビットを参照して判断する。ステップオーバ実行中かどうかはステップオーバ実行中ビットを参照して判断する。ブレーク条件成立かどうかは、ブレーク成立条件テーブル（図３）を参照して判断する。ステップ実行中でなく、ブレーク条件も非成立ならばデバッグタスクを起動せず、アプリＰＯＵへ戻る。
【００３３】
以下、請求項１に対応する実施態様について説明する。
図６は、ブレーク位置からのステップオーバ処理の動作を示す説明図である。
図７は、ブレーク位置からのステップオーバ処理の動作を示す説明図（続き）である。
図８は、継続起動コマンドによる継続起動の動作を説明する図である。
同図では、ローダコマンド処理部とデバッグタスクとの間で、待ち合わせをしている様子が示されている。
【００３４】
図９は、ブレーク機能実現過程におけるＰＯＵの遷移を示す説明図である。
同図に示すように、ＰＯＵ内のシーケンス命令切れ目の命令は、ブレーク機能実現過程において全置換される。
図１０は、ブレーク発生時の呼び出し命令をオフセット対応に記憶するＪＭＰテーブルの説明図である。図１０（ａ）は通常実行時、図１０（ｂ）はステップイン実行時、図１０（ｃ）はステップオーバ実行時、のＪＭＰテーブルをそれぞれ示す。
【００３５】
以下、図６〜１０を参照して、ブレーク位置から実行されるステップオーバ処理の動作を説明をする。
１例として、プログラムからＵＦＢをコールする構成のアプリケーションの運転中に、ブレーク設定コマンドにより設定した条件が成立し、ブレーク状態となっている時点で、ステップオーバ実行コマンドが送られてきたケースについて説明する。
【００３６】
図７において、ブレーク状態（Ｐ１）なので、ブレーク処理（Ｐ２→Ｐ３）に移り、デバッグタスクにてコマンド待ちをしている（Ｐ４）。ステップオーバ実行コマンドを受けると、ステップオーバ前処理を呼び（Ｐ５）、この前処理の中でＪＭＰテーブルをステップオーバ用に書き換える（Ｐ６）。続けて、プログラム内の全切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令に置き換え（図９参照）、ステップオーバ実行中ビットをＯＮにした（Ｐ７）後、ブレーク処理に戻る（Ｐ８）。
【００３７】
その後、アプリケーションプログラムに戻り（Ｐ９）、次に実行すべきシーケンス命令がコール命令（例えば図７に示す「CAL FB,1」）であった場合、アプリケーションプログラムからＪＭＰテーブルのオフセットa（図１０）を参照して、コールマクロ先に記憶されている命令（コール命令マクロStart＿UFBD2へのジャンプ命令）をさらに実行する（即ち、UFB1へ制御の流れを渡す）（Ｐ１０）。
【００３８】
以下、このコールマクロ先に記憶されている内容（即ち、Start＿UFBD2へのジャンプ命令）について説明する。
この命令は、通常時はJMP Start＿UFBとなっているが、ステップオーバ前処理によってJMP Start＿UFBD2（請求項１記載のステップオーバ時の制御ルーチン）に書き換えられているため、ここでは、Start＿UFBD2へとジャンプする（Ｐ１１）。
【００３９】
Start＿UFBD2では通常のＵＦＢのコール処理に加えて、移動元プログラムを元のＮＯＰ命令に戻す（Ｐ１２）。その後、通常の場合のStart＿UFBと同様に、呼び出し先のＦＢへと移動する（Ｐ１３）。これにより、実行位置が呼び出し先ＦＢ先頭に移るが、そこにはブレーク処理への分岐命令が置かれていないため、通常どおりに命令を順次実行していく。即ち、ブレークすることなくリターン命令になるまで実行する。この実行がリターン命令に至ると、JMP End＿UFBDに従い、ステップ実行用リターン命令マクロ(End＿UFBD)へ飛ぶ（Ｐ１４）。このマクロの実行により、移動元ＦＢの全置換されたＮＯＰ命令を元の命令に戻す（詳細は後述する）。次に、移動先プログラムの全切れ目をブレーク処理への分岐命令に置換した後（Ｐ１５）、移動先のＰＯＵに移って直ぐにブレーク処理へ飛び（Ｐ１６→１７）、ステップオーバ実行中ビットがＯＮになっているのでデバッグタスクを起動しステップオーバ後処理を呼ぶ（Ｐ１８）。
【００４０】
ここで、移動元ＦＢの全置換された命令を元の命令に戻す処理は、即ち、ブレーク処理へのコール命令をＮＯＰ命令にする処理であるが、ブログラムからステップオーバ実行して、ＦＢ１へ実行位置が移動してきた場合には、ＦＢ１は全置換されていないため、全切れ目はＮＯＰ命令のままであるから、結局ＮＯＰ命令がＮＯＰ命令に置き換わることになり、即ち、変化がないものになる。
【００４１】
しかし、ＦＢ内でブレークしていて、そこでステップオーバ実行コマンドを受けた場合にはＦＢの全切れ目はＮＯＰ命令からブレーク処理へのコール命令へと全置換がなされるため、この場合に備えて前記リターン命令マクロ内で全置換された命令を元の命令に戻すステップが必要となる。
以下、デバッグタスクにおけるステップオーバ後処理（Ｐ１８）以降を説明する。
【００４２】
ステップオーバ実行中ビットがＯＮになっているため、ステップオーバ後処理へと進み、ローダコマンド処理部（StepOver(12)、図１参照）へのステップ実行完了通知と、ステップオーバ実行中ビットをＯＦＦにする処理とを行い、次のコマンド待ち状態となる（即ち、ブレーク状態となる）。一方、ステップ実行完了通知を受けたローダコマンド処理部は、ローダサーバ１に完了応答を返す。以上によりステップオーバ実行の一連の処理を終える。
【００４３】
その後、継続起動コマンドがローダサーバ１によって与えられた場合に、デバッグタスク内の継続起動処理（図８）内にて、命令復元（プログラム内の全切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令へ置き換えてあるものを、ＮＯＰ命令に戻す処理）とＪＭＰテーブルの復元（ステップ用コールマクロへのＪＭＰ命令を通常用コールマクロへのＪＭＰ命令に書き戻す）とを行い、デバッグタスクを終了する。デバッグタスクを終了するとブレーク処理に戻り、さらにブレーク処理からアプリケーションプログラムへ戻る。なお、前述の命令復元の処理によりブレーク処理へのＣＡＬＬ命令は解除されているので、再度ブレーク処理に飛んで来ることはない。
【００４４】
次に、ステップイン実行動作を説明する。
図１１は、ブレーク位置からのステップイン処理の動作を示す説明図である。
図１２は、ブレーク位置からのステップイン処理の動作を示す説明図（続き）である。
１例として、プログラムからＵＦＢを呼び出す構成のアプリケーションを運転中に、ブレーク設定コマンドにより設定した条件が成立し、ブレーク状態となっているところで、ステップイン実行コマンドが送られてきたケースについて、図１１，１２を参照して説明する。
【００４５】
図１２において、ブレーク状態（Ｑ１）なので、ブレーク処理（Ｑ２→Ｑ３）に移り、デバッグタスクにてコマンド待ちをしている（Ｑ４）。ステップイン実行コマンドを受けると、ステップイン前処理を呼び（Ｑ５）、この前処理の中でＪＭＰテーブルをステップイン用に書き換える（Ｑ６）。続けて、ＰＯＵ内の全切れ目のＮＯＰ命令をブレーク処理へのＣＡＬＬ命令に置き換え（図９参照）、ステップイン実行中のビットをＯＮにした（Ｑ７）後、ブレーク処理に戻る（Ｑ８）。
【００４６】
その後、アプリケーションプログラムに戻り（Ｑ９）、次に実行すべきシーケンス命令がコール命令（例えば、図１２に示すように「CAL FB,1」）であった場合、アプリケーションプログラムからＪＭＰテーブルのオフセットａ（図１０）を参照して、コールマクロ先に記憶されている命令（コール命令マクロStart＿UFBDへのジャンプ命令）をさらに実行する（即ち、UFB1に制御の流れを渡す）（Ｑ１０）。
【００４７】
この命令は、通常時はJMP Start＿UFBとなっているが、ステップイン実行前処理によってJMP Start＿UFBD（請求項１記載のステップイン時の制御ルーチン）に書き換えられているため、ここでは、Start＿UFBDへとジャンプする（Ｑ１１）。Start＿UFBDでは通常のＵＦＢコール処理に加えて、移動元プログラムの全置換されたＪＭＰ命令を元のＮＯＰ命令に戻し（Ｑ１２）、移動先ＦＢ（ここではＵＦＢ１）の全切れ目のＮＯＰ命令をブレーク処理へのコール命令に置換する（Ｑ１３）。その後、通常のStart＿UFBと同様に、呼び出し先のＦＢへと移動する（Ｑ１４）。呼び出し先のＦＢの先頭にはブレーク処理へのコール命令が置かれているため、ＦＢに移って直ぐにブレーク処理へ飛び（Ｑ１５→Ｑ１６）、ステップイン実行中ビットがＯＮになっているのでデバッグタスクを起動し、ステップイン後処理へ進み（Ｑ１７）、ローダコマンド処理部（StepIn(11)、図１参照）へのステップ実行完了通知と、ステップイン実行中ビットをＯＦＦにする処理とを行い、次のコマンド待ち状態となる（即ち、ブレーク状態となる）。一方、ステップ実行完了通知を受けたローダコマンド処理部は、ローダサーバ１に完了応答を返す。以上によりステップイン実行の一連の処理を終える。
【００４８】
その後、継続起動コマンドがローダサーバ１によって与えられた場合に、デバッグタスク内の継続起動処理（図８）内にて、命令復元（アプリケーションのＦＢ内の全切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令へ置き換えてあるものを、ＮＯＰ命令に戻す処理）とＪＭＰテーブルの復元（即ち、ステップ用コールマクロへのＪＭＰ命令を通常用コールマクロへのＪＭＰ命令に書き戻す）とを行い、デバッグタスクを終了する。デバッグタスクを終了するとブレーク処理に戻り、さらにブレーク処理からアプリケーションのＦＢへ戻る。なお、前述の命令復元の処理によりブレーク処理へのＣＡＬＬ命令は解除されているので、再度ブレーク処理に飛んで来ることはない。
【００４９】
以上のように、ステップオーバ実行およびステップイン実行が可能である。
以下、請求項２に対応する実施態様について説明する。
図１３は、ブレーク発生時の呼び出し番地をオフセット対応に記憶するＪＭＰテーブルの説明図である。図１３（ａ）は通常実行時、図１３（ｂ）はステップイン実行時、図１３（ｃ）はステップオーバ実行時、のＪＭＰテーブルをそれぞれ示す。
【００５０】
ブレークするまでの形態は前述したとおりである。ブレーク状態でステップオーバ実行コマンドを受けると、図１３に示すようにステップオーバ前処理でＪＭＰテーブル上のコール／リターン命令マクロの番地を通常用のものからステップオーバ用のものへ書き換える。また一方、コール／リターンをするマシン語部分は、ＪＭＰテーブルから番地を読み込んだ上、マクロ先頭へと実行位置が移るようにコンパイラで生成されている。前処理以降の処理は前述のとおりである。
【００５１】
継続起動コマンドが与えられた場合に、通常用の命令マクロの番地に復元する。これにより、以後のアプリ実行では通常用命令マクロが実行される。
以下、請求項３に対応する実施態様について説明する。
図１４は、ブレーク機能実現過程におけるＰＯＵの遷移を示す説明図である。図１４（ａ）は通常実行時、図１４（ｂ）はブレークポイント設定時、図１４（ｃ）は継続起動後（即ち、ブレーク解除後）の、ＰＯＵの内容をそれぞれ示す。
【００５２】
前述の請求項１に対応する実施態様では、挿入しておいたＮＯＰ命令をブレーク処理への分岐命令に書き換えたが、請求項３に対応する実施態様では、この処理に代えて、
（１）  ブレーク設定時、ステップコマンド実行時には切れ目の位置のマシン語を退避し、ブレーク処理への分岐命令に書き換える、
（２）  ブレーク処理を終了する際、退避しておいたマシン語を復元し実行位置をアプリケーションプログラムに移す、
を実行するものである。
【００５３】
以下、ブレーク設定時の処理の流れについて図１４を参照して説明する。
ローダサーバ１からブレークポイント設定コマンドがプログラマブルコントローラに与えられることにより、該当ＰＯＵのマシン語（図１４では「マシン語i」）を退避領域へ退避した後、ブレーク処理への分岐命令（図１４に示す例ではＣＡＬＬ命令を使用している）に書き換える。プログラマブルコントローラの実行がブレークポイントに達した場合に、ブレーク処理へと分岐し、プログラマブルコントローラはブレーク状態となり、ブレーク処理内での次のコマンドを待つ。
【００５４】
ブレーク状態の解除は、ローダサーバ１からの継続起動コマンドがプログラマブルコントローラに与えられることにより行われる。継続起動コマンドを受信したら、退避しておいたマシン語をＰＯＵに復元し、実行ＰＣを復元したＰＯＵのマシン語位置に設定する。これにより、ブレーク状態が解除され、「マシン語i」以降のマシン語ステップを実行する。即ち、ブレーク状態が解除される。
【００５５】
図１５は、ステップ実行時の処理手順の１例を示す説明図である。
以下、ステップ実行時の処理の流れについて図１５参照して説明する。
ステップは、ブレーク状態でステップ実行コマンドを与えられることにより実行される。その手順は以下のとおりである。
（１）  全切れ目の命令を退避し、ブレーク処理への分岐命令（図１５に示す例では「ＣＡＬＬブレーク処理」）へ書換える。
【００５６】
（２）  コマンドがステップオーバの場合、ＪＭＰテーブルをステップオーバ用に書換える。また、コマンドがステップインならステップイン用に書き換える。
（３）  ブレーク箇所のＣＡＬＬ命令を退避しておいたマシン語に復元する。
（４）  マシン語iへ実行ＰＣを設定する。
（５）  実行位置がブレーク処理からアプリケーションのＰＯＵへと移動し、マシン語i以降が実行される。
【００５７】
（６）  １ステップ分マシン語を実行するとブレーク処理への分岐命令が出現し、この分岐命令が実行されてブレーク処理に到達する。ここで仮にＵＦＢ／ＵＦＣＴへのコールが含まれていた場合、命令マクロ経由でＵＦＢ／ＵＦＣＴを実行した後、ブレーク処理に至る。
（７）  ブレーク処理に飛ぶことでプログラマブルコントローラは再度ブレーク状態となり、ブレーク処理内で、次のコマンド待ちをする。
【００５８】
（８）  継続起動コマンドを受けた場合、置換のために退避しておいたマシン語を退避領域から読み込み、ＰＯＵへ復元する。また、ＪＭＰテーブルを通常実行用マクロが呼ばれるように書き換える。さらに、実行ＰＣをブレーク位置のマシン語に設定し、ブレーク処理から抜け出る。以上により、プログラマブルコントローラの通常実行状態となる。
以下、請求項４に対応する実施態様について説明する。
【００５９】
図１７は、図１６と同様に、プログラマブルコントローラの一般的なアプリケーション構成図の一例である。図１７では、サブルーチン内で、更にサブルーチンの呼び出しが実行される。
図１８は、図１７にステップオーバ処理時のコントローラ動作の流れを示した説明図である。
【００６０】
図１９は、ブレーク位置からのステップオーバ処理の動作を示す説明図である。
図２０及び図２１は、図１８の各動作時点におけるＰＯＵの状態及びＪＭＰテーブルの状態遷移を示す説明図である。図２０は請求項４、図２１は請求項１における動作を模式的に示しており両者を比較することにより、動作における相違点が補足される。
図２２は、ステップオーバ時の制御ルーチン呼び出しに伴うコール処理とリターン処理を示す説明図である。
【００６１】
前述の請求項１に対応する実施態様に加えて、請求項４に対応する実施態様では、
（１）  ステップオーバ実行時に次の命令位置をステップオーバ用の命令変換テーブルに格納し、該当する次の命令位置の先頭にある切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令に置き換えと、
（２）  ステップオーバ用ＣＡＬＬ処理において、アプリサポートＪＭＰテーブルを通常のものに書き戻しと、
を実施するものである。
【００６２】
なお、ブレークするまでの形態（図１〜図５参照）、ステップオーバ実行コマンドを受けた際の動作（図６参照）、継続起動コマンドによる継続起動の動作（図８参照）、ブレーク機能実現過程におけるＰＯＵの遷移（図９参照）、ＪＭＰテーブルの構成（図１０参照）は、前述の実施態様と同様であるので説明を割愛する。
以下、図１７及び図１９を参照して、ブレーク位置から実行されるステップオーバ処理を説明する。また、図７、図１８、図２０、図２１及び図２２を参照して、請求項４に対応する実施態様と請求項１に対応する実施態様との動作の差異について説明する。
【００６３】
始めに、ブレーク位置から実行されるステップオーバ処理を説明する。
１例として、プログラムからＵＦＢをコールし、該ＵＦＢからＵＦＣＴをコールする構成のアプリケーション（図１７参照）の運転中に、ブレーク設定コマンドにより設定した条件が成立し、ブレーク状態となっている時点で、ステップオーバ実行コマンドが送られてきたケースについて説明する。
【００６４】
図１９において、ブレーク状態（Ｓ１）なので、ブレーク処理（Ｓ２→Ｓ３）に移り、デバッグタスクにてコマンド待ちをしている（Ｓ４）。ステップオーバ実行コマンドを受けると、ステップオーバ前処理を呼び（Ｓ５）、この前処理の中でＪＭＰテーブルをステップオーバ用に書き換える（Ｓ６）。続けて、プログラム内の全切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令へ置き換える（図９参照）。また、ステップオーバ用のブレーク設定をする。ここでは、ブレーク位置の次の命令位置をステップオーバ用の命令変換テーブルに格納する。また、ブレーク位置の次の命令位置において、その先頭にある切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令に置き換える（Ｓ６−１）。ステップオーバ用の命令変換テーブルとしては、前述したブレーク設定の削除を行う時のための命令置換テーブル（図４参照）と同じ構成を用いることにより実現する。前処理の最後として、ステップオーバ実行中ビットをＯＮにした（Ｓ７）後、ブレーク処理に戻る（Ｓ８）。
【００６５】
その後、アプリケーションプログラムに戻り（Ｓ９）、次に実行すべきシーケンス命令がコール命令（例えば図１９に示す「CAL FB,1」）であった場合、アプリケーションプログラムからＪＭＰテーブルのオフセットａ（図１０）を参照して、コールマクロ先に記憶されている命令（コール命令マクロStart＿UFBD2へのジャンプ命令）をさらに実行する（即ち、UFB1へ制御の流れを渡す）（Ｓ１０）。
【００６６】
以下、このコールマクロ先に記憶されている内容（即ち、コール命令マクロStart＿UFBD2へのジャンプ命令）について説明する。
この命令は、通常時はJMP Start＿UFBとなっているが、ステップオーバ前処理によってJMP Start＿UFBD2（請求項１記載のステップオーバ時の制御ルーチン）に書き換えられているため、ここでは、Start＿UFBD2へとジャンプする（Ｓ１１）。
【００６７】
Start＿UFBD2では、通常のＵＦＢのコール処理に加えて、移動元プログラムのＪＭＰ命令でもって全置換された命令を元のＮＯＰ命令に戻す（Ｓ１２）。また、ＪＭＰテーブルをステップオーバ用ＪＭＰテーブルから通常のＪＭＰテーブルに書き戻す（Ｓ１２−１）。この処理により以降の命令実行動作は通常動作と同様になり、その後は書き戻されたＪＭＰテーブルに従い、通常の場合のStart＿UFBと同様に、呼び出し先のＦＢへと移動する（Ｓ１３）。これにより、実行位置が呼び出し先ＦＢ先頭に移るが、そこにはブレーク処理への分岐命令が置かれていないため、通常どおりに命令を順次実行していく。即ち、ブレークすることなくリターン命令になるまで実行する。この実行がリターン命令に至ると、JMP End＿UFBに従い、通常のリターン命令マクロ(End＿UFB)へ飛ぶ（Ｓ１４）。通常のマクロなので、特別な処理はせずに移動先のＰＯＵに移るが（Ｓ１６）、切れ目においてステップオーバ用のブレーク処理へのＣＡＬＬ命令が設定されているので（Ｓ６−１参照）、直ぐにブレーク処理に飛ぶ（Ｓ１７）。ステップオーバ実行中ビットがＯＮになっているのでデバッグタスクを起動しステップオーバ後処理を呼ぶ（Ｓ１８）。ステップオーバ後処理以降については、前述の請求項１に対応する実施態様と同様である。
【００６８】
次に、請求項４に対応する実施態様と請求項１に対応する実施態様との動作の差異について説明する。
プログラムからＵＦＢをコールし、該ＵＦＢからＵＦＣＴをコールする構成のアプリケーション（図１７参照）の運転中におけるステップオーバ処理の動作の流れ（図１８参照）と、図１８の各動作時点におけるＰＯＵの状態及びＪＭＰテーブルの状態遷移について、請求項４に対応する実施態様、請求項１に対応する実施態様の順に説明する。
【００６９】
図２０では、メインルーチンであるＰＧｘｘ、そこから呼び出されるＵＦＢのＦＢｙｙ、さらにＵＦＢから呼び出されるＵＦＣＴのＦＣＴｚｚ、ＪＭＰテーブルの状態について、プログラムの実行位置（図１８の符号Ｒ1〜Ｒ１１）による変化を示している。
（１）請求項４に対応する実施態様の場合、ブレークポイント時（Ｒ１）は通常の状態である。ステップオーバが発生する度（Ｒ２〜Ｒ３）に、前述のプログラム内の全切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令へ置き換える処理（図１９のＳ５参照）により、ＰＧｘｘは切れ目にＮＯＰ命令を有する通常のＰＯＵ（以降、ＮＯＰと略す）から切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令へ置き換えたＰＯＵ（以降、ＣＡＬと略す）になる。ここで、ステップオーバ用のブレーク設定もされ、ステップオーバ実行の次の命令位置をステップオーバ用の命令変換テーブルに格納し、該当する次の命令位置の先頭にある切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令にＰＯＵを置き換える（以降、ＳＴＥＰ ＢＲＥＡＫと略す）（図１９のＳ６−１参照）。また、ＪＭＰテーブルをステップオーバ用（以降、ＳＴＥＰ ＯＶＥＲ ＪＭＰと略す）に書き換える（図１９のＳ６参照）。ここで、ＰＧｘｘにおけるＳＴＥＰ ＢＲＥＡＫによるブレーク処理へのＣＡＬＬ命令は、ＣＡＬにも記述されているので、結果的にＣＡＬだけの場合と同じ処理になり、実際の動作において2度ブレークさせる必要は無い。
【００７０】
続けて、次に実行すべきシーケンス命令がコール命令だった場合（Ｒ４）、移動元プログラムのＣＡＬＬ命令でもって全置換された命令を元のＮＯＰ命令に戻す処理（図１９のＳ１２参照）により、ＰＧｘｘのＣＡＬは解消されるので、ＰＧｘｘはＳＴＥＰ ＢＲＥＡＫ状態になる。続けて、Start＿UFBD2の処理において（図１９のＳ１２−１参照）により、ＪＭＰテーブルはＳＴＥＰ ＯＶＥＲ ＪＭＰから通常のＪＭＰテーブルに戻す。以降、呼び出したＵＦＢに戻るまで（Ｒ４〜Ｒ１０）各状態は変わらず、ＰＧｘｘにおけるＳＴＥＰ ＢＲＥＡＫの対象に至るとブレーク状態になり、継続起動コマンド（Ｒ１１）により通常処理に戻る。
【００７１】
（２）請求項１に対応する実施態様の場合、ブレークポイント時（Ｒ１）は通常の状態である。ステップオーバが発生する度（Ｒ２〜Ｒ３）に、前述のプログラム内の全切れ目ＮＯＰ命令をブレーク処理へのＣＡＬＬ命令へ置き換える処理（図７のＰ７参照）により、ＰＧｘｘは、ＮＯＰからＣＡＬになる。また、ＪＭＰテーブルをＳＴＥＰ ＯＶＥＲ ＪＭＰに書き換える（図７のＰ６）。
【００７２】
続けて、次に実行すべきシーケンス命令がコール命令だった場合（Ｒ４）、移動元プログラムのＣＡＬＬ命令でもって全置換された命令を元のＮＯＰ命令に戻す処理（図７のＰ１２参照）により、ＰＧｘｘはＣＡＬからＮＯＰに戻す。その後処理を続けていくと、ＵＦＣＴをコールするので（Ｒ６）、移動元のＦＢｙｙをＮＯＰに戻すが、元からＮＯＰなので状態は変化しない。処理はＵＦＣＴに移り（Ｒ７）、リターン命令に至る（Ｒ８）と、移動先プログラムの全切れ目をブレーク処理への分岐命令に置換する処理（図７のＰ１５参照）にてＦＢｙｙはＮＯＰからＣＡＬになる。また、移動元のＦＣＴｚｚをＮＯＰに戻すが、元からＮＯＰなので状態は変化しない。その後、ＦＢｙｙに移り、ＦＢｙｙにおける動作（Ｒ９）では、切れ目ごとにブレークすることになる。リターン命令に至る（Ｒ１０）と、移動先プログラムの全切れ目をブレーク処理への分岐命令に置換する処理（図７のＰ１５参照）にてＰＧｘｘはＮＯＰからＣＡＬになる。また、移動元のＦＢｙｙをＣＡＬからＮＯＰに戻す。その後のＰＧｘｘに移り、切れ目でブレークする。以降、継続起動コマンド（Ｒ１１）により、ステップオーバは完了し、ステップオーバ後処理（図７のＰ１８参照）において、ＪＭＰテーブルがＳＴＥＰ ＯＶＥＲ ＪＭＰから通常のＪＭＰテーブルに戻り、通常処理に戻る。
【００７３】
上記から明らかなように、請求項４に対応する実施態様においては、コール命令（Ｒ４）でＵＦＢを呼び出した後は、ＰＧｘｘに戻ってきて次の切れ目でブレークするのに対し、請求項１に対応する実施態様ではＵＦＢでＵＦＣＴを呼出し、戻った直後から切れ目ごとにブレークしてしまう。これは、ステップオーバ時のコール命令における処理の違いによる。
【００７４】
請求項１に対応する実施態様では、図２２（ａ）で示すコール処理で呼出し、図２２（ｃ）で示すリターン処理で復帰する。一方で、請求項４に対応する実施態様の場合では、図２２（ｂ）で示すコール処理で呼出し、図２２（ｄ）で示すリターン処理で復帰する。前者はコール後から復帰までの間はステップオーバ用のルーチンとして動作しているのに対し、後者はコール時点でＪＭＰテーブルや呼び出すルーチンは通常のものに戻してあるので、以後の処理は通常の処理と同等になる。結果、次のブレーク地点である呼出し後の切れ目までは通常の処理となり、図１７に示すような、サブルーチン内で更にサブルーチンの呼び出しが実行される場合でも、ステップオーバ実行が可能になる。
【００７５】
なお、本発明に係るプログラマブルコントローラの各構成要素の処理の少なくとも一部をコンピュータ制御により実行するものとし、かつ、上記処理を、コンピュータに実行せしめるプログラムは、半導体メモリを始め、ＣＤ−ＲＯＭや磁気テープなどのコンピュータ読み取り可能な記録媒体に格納して配付してもよい。そして、少なくともマイクロコンピュータ，パーソナルコンピュータ，汎用コンピュータを範疇に含むコンピュータが、上記の記録媒体から上記プログラムを読み出して、実行するものとしてもよい。
【図面の簡単な説明】
【００７６】
【図１】プログラマブルコントローラの一般的なアプリケーション構成を示す構成図である。
【図２】シーケンス命令が記述されたプログラムとシーケンス命令切れ目テーブルとの関係を示す説明図である。
【図３】ブレーク設定時の動作を説明する説明図である。また、図４は、命令置換テーブルを示す説明図である。
【図４】命令置換テーブルを示す説明図である。
【図５】ブレーク処理の動作を説明するフローチャートである。
【図６】ブレーク位置からのステップオーバ処理の動作を示す説明図である。
【図７】ブレーク位置からのステップオーバ処理の動作を示す説明図（続き）である。
【図８】継続起動コマンドによる継続起動の動作を説明する図である。
【図９】ブレーク機能実現過程におけるＰＯＵの遷移を示す説明図である。
【図１０】ブレーク発生時の呼び出し命令をオフセット対応に記憶するＪＭＰテーブルの説明図である。
【図１１】ブレーク位置からのステップイン処理の動作を示す説明図である。
【図１２】ブレーク位置からのステップイン処理の動作を示す説明図（続き）である。
【図１３】ブレーク発生時の呼び出し番地をオフセット対応に記憶するＪＭＰテーブルの説明図である。
【図１４】ブレーク機能実現過程におけるＰＯＵの遷移を示す説明図である。
【図１５】ステップ実行時の処理手順の１例を示す説明図である。
【図１６】プログラマブルコントローラの一般的なアプリケーション構成を示す構成図である。
【図１７】プログラマブルコントローラの一般的なアプリケーション構成を示す構成図である。
【図１８】階層的なアプリケーションにおけるステップオーバ処理の動作の流れを示す説明図である。
【図１９】ブレーク位置からのステップオーバ処理の動作を示す説明図である。
【図２０】図１８の各動作時点におけるＰＯＵの状態及びＪＭＰテーブルの状態遷移を示す説明図（請求項４）である。
【図２１】図１８の各動作時点におけるＰＯＵの状態及びＪＭＰテーブルの状態遷移を示す説明図（請求項１）である。
【図２２】ステップオーバ時の制御ルーチン呼び出しに伴うコール処理とリターン処理を示す説明図である。
【符号の説明】
【００７７】
１  ローダサーバ
２  デバッグタスク
１１  StepIn（ステップインコマンド用関数）
１２  StepOver（ステップオーバコマンド用関数）
１３  ContRun（継続起動コマンド用関数）
【図１】
0004479738.tif 000002
【図２】
0004479738.tif 000003
【図３】
0004479738.tif 000004
【図４】
0004479738.tif 000005
【図５】
0004479738.tif 000006
【図６】
0004479738.tif 000007
【図７】
0004479738.tif 000008
【図８】
0004479738.tif 000009
【図９】
0004479738.tif 000010
【図１０】
0004479738.tif 000011
【図１１】
0004479738.tif 000012
【図１２】
0004479738.tif 000013
【図１３】
0004479738.tif 000014
【図１４】
0004479738.tif 000015
【図１５】
0004479738.tif 000016
【図１６】
0004479738.tif 000017
【図１７】
0004479738.tif 000018
【図１８】
0004479738.tif 000019
【図１９】
0004479738.tif 000020
【図２０】
0004479738.tif 000021
【図２１】
0004479738.tif 000022
【図２２】
0004479738.tif 000023