(57)【要約】【課題】少ないオーバヘッドでサブルーチンに関するトレース情報を記録し、異常発生時のサブルーチンＣＡＬＬのタイミングをトレースすること。【解決手段】呼び出し元サブルーチンの呼び出しステップ番号（ＣＳ＿Ｎ）、呼び出し先サブルーチンのポインタ番号（ＲＳ＿Ｎ）、呼び出し先サブルーチンの実行結果（ＲＳ＿Ｒ）を格納するデータテーブル２３と、前記ＣＳ＿Ｎおよび前記ＲＳ＿Ｎの格納位置を示すＣＡＬＬポインタ２４（Ｐ１）と、前記ＲＳ＿Ｒの格納位置を示すＲＥＴポインタ２５（Ｐ２）と、データテーブル２３への記録を指示するトレースポイント付ポインタが呼び出し先サブルーチンにあるときに、前記ＣＳ＿Ｎおよび前記ＲＳ＿Ｎを夫々Ｐ１が示す位置に格納し、呼び出し先サブルーチンからの復帰処理時に、前記ＲＳ＿ＲをＰ２が示す位置に格納する格納手段を備える。【選択図】　　　図２
2004021614.tif 000002
【特許請求の範囲】
【請求項１】
プログラムから階層的に呼び出されるサブルーチンの実行情報をトレースするトレースデータ処理装置において、
呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果を格納するデータテーブルと、
前記呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を格納する位置を示す第１のポインタと、
前記呼び出し先サブルーチンの実行結果を格納する位置を示す第２のポインタと、
前記データテーブルへの記録を指示するトレースポイント付ポインタが、前記呼び出し先サブルーチンにあるときに前記呼び出し元サブルーチンの呼び出しステップ番号および前記呼び出し先サブルーチンのポインタ番号を夫々前記第１のポインタが示す位置に格納し、前記呼び出し先サブルーチンからの復帰処理時に、この呼び出し先サブルーチンの処理結果を前記第２のポインタが示す位置に格納する格納処理手段と、
を備えることを特徴とするトレースデータ処理装置。
【請求項２】
前記データテーブルに格納された前記サブルーチンの呼び出し回数を保持する第１のカウンタと、
前記サブルーチンの実行処理後の復帰回数を保持する第２のカウンタと、
をさらに備え、
前記呼び出し先サブルーチンに前記トレースポイント付ポインタがあるときに前記第１のカウンタの値を増加させ、
前記トレースポイント付ポインタを有する前記呼び出し先サブルーチンからの復帰処理時に、前記第１のカウンタの値を増加させ、前記第２のカウンタの値を減少させることを特徴とする請求項１に記載のトレースデータ処理装置。
【請求項３】
前記第１のポインタの値をｎとし、前記第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出することを特徴とする請求項２に記載のトレースデータ処理装置。
【請求項４】
プログラムから階層的に呼び出されるサブルーチンの実行情報をトレースするトレースデータ処理方法において、
データテーブルに呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果を格納し、
前記データテーブルへの記録を指示するトレースポイント付ポインタが前記呼び出し先サブルーチンにあるときに、第１のポインタが示す位置に、前記呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を格納し、
第２のポインタが示す位置に、前記呼び出し先サブルーチンからの復帰処理時に前記呼び出し先サブルーチンの処理結果を格納することを特徴とするトレースデータ処理方法。
【請求項５】
前記呼び出し先サブルーチンに前記トレースポイント付ポインタがあるときに、前記データテーブルに格納された前記サブルーチンの呼び出し回数を保持する第１のカウンタの値を増加させ、
前記トレースポイント付ポインタを有する前記呼び出し先サブルーチンからの復帰処理時に、前記第１のカウンタの値を増加させ、前記サブルーチンの実行処理後の復帰回数を保持する前記第２のカウンタの値を減少させることを特徴とする請求項４に記載のトレースデータ処理方法。
【請求項６】
前記第１のポインタの値をｎとし、前記第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出することを特徴とする請求項５に記載のトレースデータ処理方法。
【請求項７】
請求項４〜６のいずれか一つに記載された方法をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、コントローラに搭載されるプログラムのサブルーチンの呼び出し経路と、異常発生時のサブルーチンの呼び出しタイミングとをトレースできるトレースデータ処理装置、トレースデータ処理方法およびその方法を実行するためのプログラムに関するものである。
【０００２】
【従来の技術】
最近の工場では、ＦＡシステム（ファクトリー・オートメーション・システム）を活用した生産活動が行われることが多い。このＦＡシステムとは、生産機器、搬送機器等の機器と、生産計画、生産管理等の生産行為とを総合的に制御するような、自動化と情報化とを兼ね備えた制御システムのことを指してこう呼んでいる。
【０００３】
図８は、ＦＡシステムにおけるシステム構成の一例を示し図である。同図において、コントローラ８１は、システムバスを介して接続されたインテリジェントユニット８２や非インテリジェントユニット８３を制御する。インテリジェントユニット８２には、Ｉ／Ｏ機器８４、サーボモータ８５、センサ８６、ランプ、アクチュエータ８７等の様々な制御機器が接続され、非インテリジェントユニット８３には、スイッチ、出力機器、電光管等８８が接続されている。また、これらの制御機器等は、夫々外部との物理的な入出力、通信、データ変換などを行っている。コントローラ８１は、内部にマイクロプロセッサ（ＭＰＵ）を搭載しており、このＭＰＵに搭載されたユーザの制御プログラムを実行させ、システム全体の動作を制御している。
【０００４】
ところで、コントローラの制御プログラムをデバッグする場合などにおいて、ある実行されたサブルーチンがどのような経路で呼び出されたかを履歴としてトレースしたい場合がある。さらに、サブルーチン内で異常が発生するような場合には、そのトレースデータを元に異常が発生した場合の経路を辿ってデバッグしたいと考えるのは制御プログラムの開発者の心理である。
【０００５】
図９は、従来技術のコントローラの内部構成を示すブロック図である。９１はＭＰＵであり、ユーザの制御プログラムを実行し、システム全体の動作を制御する。９２はワークＲＡＭ、９３はシステムＲＯＭである。システムＲＯＭ９３にはコントローラの動作を制御するシステムプログラムが記述されており、このシステムプログラムがユーザの制御プログラムを実行することで、システム全体の制御が実行される。ワークＲＡＭ９２は、ＭＰＵ９１がシステムＲＯＭ９３に格納されたシステムプログラムを実行する際に使用する作業（ワーク）に用いるメモリである。すなわち、一時的に保存する必要があるデータを退避したり、コントローラ外部との入出力時に発生したデータを蓄えるために使用する。
【０００６】
また、図９において、９４はユーザＲＡＭ、９５はパラメータ、９６はユーザプログラム、９７はデバイスメモリである。ユーザの制御プログラムはユーザプログラム９６に格納される。その際、デバイスメモリ９７はユーザの制御プログラム実行時のワ−クエリアとして使われる。パラメータ９５は制御プログラムの実行時の条件が与えられる。９８はアドレスバス、９９はデータバスである。アドレスバス９８はＭＰＵ９１がワークＲＡＭ９２、システムＲＯＭ９３、ユーザＲＡＭ９４、デバイスメモリ９７にアクセスするために使用し、データバス９９は各メモリとのデータの読み出しまたは書き込みに使用する。システムＲＯＭ９３は読み出し専用メモリである。
【０００７】
図１０は、従来技術のコントローラの制御プログラムの動作の一例を示す図である。ステップＳ１０２０１〜Ｓ１０２０５までがメインプログラムの記述である。まず、ステップＳ１０２０１で実行条件ａを読み出し、実行条件が成立した時、ステップＳ１０２０２でポインタＰａから始まるサブルーチンを呼び出し、ステップＳ１０２０３で実行条件ｂを読み出し、実行条件が成立した時、ステップＳ１０２０４でポインタＰｂから始まるサブルーチンを呼び出す。なお、ステップＳ１０２０５はメインプログラムの終了をあらわす命令（ＦＥＮＤ命令）を示している。
【０００８】
つぎに、ＰａはステップＳ１０２０２で呼び出されたサブルーチンの先頭を示すポインタであり、ステップＳ１０２０６で実行条件Ｐａａを読み出し、実行条件が成立した時、ステップＳ１０２０７でポインタＰｃｏｍから始まるサブルーチンを呼び出す。このサブルーチンの実処理終了後、ステップＳ１０２０８〜Ｓ１０２０９の命令を実行し、ステップＳ１０２１０でサブルーチンから復帰する命令（ＲＥＴ命令）を実行する。同様に、ＰｂはステップＳ１０２１１で呼び出されたサブルーチンの先頭を示すポインタであり、ステップＳ１０２１１で実行条件Ｐｂｂを読み出し、実行条件が成立した時、ステップＳ１０２１２でポインタＰｃｏｍから始まるサブルーチンを呼び出す。このサブルーチンの実処理終了後、ステップＳ１０２１３〜Ｓ１０２１４の命令を実行し、ステップＳ１０２１５でサブルーチンから復帰する命令（ＲＥＴ命令）を実行する。
【０００９】
Ｐｃｏｍは、ステップＳ１０２０７またはＳ１０２１２で呼び出されたサブルーチンの先頭を示すポインタであり、ステップＳ１０２１６で実行条件Ｐｃｃを読み出し、実行条件が成立した時、ステップＳ１０２１７でサブルーチンの実処理を開始し、ステップＳ１０２１８〜Ｓ１０２１９の命令を実行し、ステップＳ１０２２０でサブルーチンから復帰する命令（ＲＥＴ命令）を実行する。なお、ステップＳ１０２２１は全てのプログラムの終了を意味する命令（ＥＮＤ命令）を示している。
【００１０】
図１１は、従来技術におけるコントローラのサブルーチンプログラムの処理を示す図である。同図に示すように、通常コントローラは、外部からの入力処理、プログラム実行、外部への出力処理を一周期として繰り返すことでプログラムを実行している。この一周期の時間をスキャンタイムと呼ぶ。また、プログラム実行中にサブルーチン呼び出しが発生すると、メインプログラムの実行が一旦中断され、サブルーチン呼び出しのポインタに応じたプログラムが実行され、サブルーチンプログラムの実行が終了すると、サブルーチン呼び出し発生時のつぎの命令へ復帰し、中断していたプログラムの処理が再開される。
【００１１】
サブルーチンはプログラミングテクニックのなかでも大変重要な概念であり、プログラムを効率よく開発し、読みやすいプログラムを作成する上で、欠くことのできない考え方である。その中で、特に、サブルーチンを必要とする理由の一つは、「同じことを何度も書かずに済ませる」ことができることである。プログラムを作っているとプログラムの流れの中の異なる場面で、まったく同じ処理をする必要があったり、ほとんど同じ処理だけれど、微妙に違うような処理がしばしば現れる。できればそういった処理は共用できるものを一つ記述しておき、つぎからはその記述を利用したいものである。そこで何度も出てくる処理はプログラム本体（メインルーチン）とは別の場所に一つだけ作ることにして、その処理が必要になったときにそれを呼び出すという方法が考え出された。
【００１２】
図１２は、サブルーチンの処理概念を示す説明図である。同図の例では、メインルーチンによって処理Ａが３回呼び出され（同図に示すタイミング１２１、１２３、１２５）、また、メインルーチンによって処理Ｂが１回呼び出されている（同図に示すタイミング１２７）。このようにメインルーチンとは別の場所に記述され、プログラム本体から呼び出されるためのあるまとまった処理を行うプログラムのことをサブルーチンと呼ぶ。なお、同じサブルーチンを別々の場所から呼び出すとしても、復帰する際は、毎回別々の場所へ復帰することとなる（同図に示すタイミング１２２、１２４、１２６、１２８）。
【００１３】
図１３は、ＣＡＬＬ命令とＲＥＴ命令とスタックの概念を示す説明図である。スタックとは、「最後に格納したデータを最初に取り出す」動作のことをいう。スタックは本を積み上げる行為に似ている。本を積み上げていくと、最初に取り出せるのは最後に積み上げた本である。すなわち、スタックに幾つかのデータを積んだとすると、最初に取り出せるのは最後に積んだデータである。このスタックを実現するために用意されているのがスタックポインタ（ＳＰ）である。ポインタと呼ばれることからもわかるように、スタックポインタはスタックエリアのメモリを指し示す役割を持っており、常にスタックトップ（積み上げられたスタックの一番上）を指している。
【００１４】
このスタックの状態がサブルーチンの呼び出しに応じてどのように推移するのかを、図１３を用いて説明する。まず、ＣＡＬＬ命令実行前のスタックの状態は、「▲１▼ＣＡＬＬ命令実行前のスタックの状態」であるとする。ステップＳ１０４０１でＣＡＬＬ命令が実行されると、つぎに実行すべき命令のアドレスを示す“ｂｂｂ”がスタックに積まれる。このとき、スタックポインタは、つぎのスタック処理のためにポインタが更新される。すなわち、スタックポインタは、この“ｂｂｂ”が積まれた場所に移動する。同時に、スタックの状態は、「▲２▼ＣＡＬＬ命令実行後のスタックの状態」のようになる。さらに、ステップＳ１０４０２でＣＡＬＬ命令が実行されると、つぎに実行すべき命令のアドレスを示す“ｃｃｃ”がスタックに積まれ、スタックポインタはつぎのスタック処理のために更新され、スタックの状態は、「▲３▼ＣＡＬＬ命令実行後のスタックの状態」のようになる。この状態で、「▲４▼サブルーチン実処理実行」が行われると、ステップＳ１０４０４でステップＳ１０４０２に対応するＲＥＴ命令が実行され、つぎに実行すべき命令のアドレス“ｃｃｃ”がスタックから取り出され、つぎのスタック処理のためにポインタが更新され、スタックの状態は、「▲５▼ＲＥＴ命令実行後のスタックの状態」のようになる。
【００１５】
同様に、ステップＳ１０４０５でステップＳ１０４０１に対応するＲＥＴ命令が実行され、つぎに実行すべき命令のアドレス“ｂｂｂ”がスタックから取り出され、つぎのスタック処理のためにポインタが更新され、スタックの状態は、「▲６▼ＲＥＴ命令実行後のスタックの状態」のようになる。このように、一連のサブルーチンの呼び出し処理が終了すると、最終的には呼び出し前の状態、すなわち「▲１▼ＣＡＬＬ命令実行前のスタックの状態」に戻る。
【００１６】
このように、メインルーチンの途中からサブルーチンにジャンプしても、ＲＥＴ命令実行時に、つぎに実行するべき命令のアドレスをスタックから取り出すことができるので、スタックポインタの管理を行っているだけで、メインルーチンをサブルーチンに分割して、プログラムの可読性を向上することができる。
【００１７】
図１４は、従来技術におけるＣＡＬＬ命令とＲＥＴ命令の動作の一例を示す図である。同図では、図１０のプログラムが図９のユーザプログラム９６にどのように格納されているのか具体的に示している。
【００１８】
図１４において、ステップＳ１０６０１には「ＬＤ　実行条件ａ」（実行条件ａの読出し命令）、ステップＳ１０６０２には「ＣＡＬＬ　Ｐａ」（ポインタＰａから始まるサブルーチン呼び出し命令）、ステップＳ１０６０３には「ＬＤ　実行条件ｂ」（実行条件ｂの読出し命令）、ステップＳ１０６０４には「ＣＡＬＬ　Ｐｂ」（ポインタＰｂから始まるサブルーチン呼び出し命令）、ステップＳ１０６０５には「ＦＥＮＤ」（メインプログラムの終了を意味する命令）が夫々格納されている。
【００１９】
つぎに、ステップＳ１０６０６には「ＬＤ　実行条件Ｐａａ」（実行条件Ｐａａの読出し命令）、ステップＳ１０６０７には「ＣＡＬＬ　Ｐｃｏｍ」（ポインタＰｃｏｍから始まるサブルーチン呼び出し命令）、ステップＳ１０６０８〜Ｓ１０６０９には命令ＡＡ〜ＡＺ、ステップＳ１０６１０には「ＲＥＴ」（サブルーチンＰａから復帰する命令）が夫々格納されている。
【００２０】
また、ステップＳ１０６１１には「ＬＤ　実行条件Ｐｂｂ」（実行条件Ｐｂｂの読出し命令）、ステップＳ１０６１２には「ＣＡＬＬ　Ｐｃｏｍ」（ポインタＰｃｏｍから始まるサブルーチン呼び出し命令）、ステップＳ１０６１３〜Ｓ１０６１４には命令ＢＡ〜ＢＺ、ステップＳ１０６１５には「ＲＥＴ」（サブルーチンＰから復帰する命令）が夫々格納されている。
【００２１】
最後に、ステップＳ１０６１６には「ＬＤ　実行条件Ｐｃｃ」（実行条件Ｐｃｃの読出し命令）、ステップＳ１０６１７〜Ｓ１０６１９には命令ＣＡ〜ＣＺ、ステップＳ１０６２０には「ＲＥＴ」（サブルーチンＰｃｏｍから復帰する命令）、ステップＳ１０６２１には、「ＥＮＤ」（全てのプログラムの終了を意味する命令）が夫々格納されている。
【００２２】
つぎに、図１４を用いて、ＣＡＬＬ命令とＲＥＴ命令の概念を説明する。処理の開始は、図１０に示すように、「ＬＤ　実行条件ａ」が成立しているか否かを判断するところから開始される。ステップＳ１０６０１で「ＬＤ　実行条件ａ」が成立していると判断した場合は、ステップＳ１０６０２で「ＣＡＬＬ　Ｐａ」を実行する。このとき、「ＣＡＬＬ　Ｐａ」のつぎに実行すべき命令のステップ番号（ステップＳ１０６０３）をスタックに積み、処理１４１で示すように、ステップＳ１０６０６へジャンプする。
【００２３】
ステップＳ１０６０６で「ＬＤ　実行条件Ｐａａ」が成立していると判断した場合は、ステップＳ１０６０７で「ＣＡＬＬ　Ｐｃｏｍ」を実行する。このとき、「ＣＡＬＬ　Ｐｃｏｍ」のつぎに実行すべき命令のステップ番号（ステップＳ１０６０８）をスタックに積み、処理１４２で示すように、ステップＳ１０６１６へジャンプする。
【００２４】
ステップＳ１０６１６で「ＬＤ　実行条件Ｐｃｃ」が成立していると判断した場合は、ステップＳ１０６１７で「命令ＣＡ」を実行し、ステップＳ１０６１８で「命令ＣＢ」を実行し、以下順次、命令を実行し、ステップＳ１０６１９で「命令ＣＺ」を実行し、最後にステップＳ１０６２１でＲＥＴ命令を実行する。このとき、スタックに積んだ「つぎに実行すべき命令のステップ番号（ここではステップＳ１０６０８）」を読み出し、処理１４３で示すように、ステップＳ１０６０８へジャンプする。
【００２５】
ステップＳ１０６０８で「命令ＡＡ」を実行し、以下順次、命令を実行し、ステップＳ１０６０９で「命令ＡＺ」を実行し、最後にステップＳ１０６１０でＲＥＴ命令を実行する。このとき、さらにスタックに積んだ「つぎに実行すべき命令のステップ番号（ここではステップＳ１０６０３）」を読み出し、処理１４４で示すように、ステップＳ１０６０３へジャンプする。以下処理１４５〜処理１４８についても同様な処理の繰り返しになるので、説明は省略する。
【００２６】
【発明が解決しようとする課題】
近年、コンピュータプログラムはオブジェクト指向化が進み、ＯＡ、ＦＡといった対象分野を問わず、標準化されたプログラムを使おうとする傾向が強い。特に、ＦＡ分野において唯一の国際標準規格であるＩＥＣ６１１３１−３の影響を受け、ラダー、リストによるプログラミングからファンクションブロック（ＦＢ）またはファンクションブロックダイアグラム（ＦＢＤ）によるプログラミングに移行する動きがある。このＩＥＣ６１１３１−３規格によれば、よく使うプログラムを部品化（ＦＢ化）し、メインプログラムにてＦＢを使うことができるので、プログラム全体の見通しがよくなり、開発効率は一見向上したかのように錯覚する。
【００２７】
ＦＢは、よく使うプログラム部品だからこそＦＢ化されているのであり、メインプログラムの数箇所で複数回に渡って使われている可能性が大である。いま、ＦＢ内で異常発生したときのことを考えてみる。例えば、ＦＢ内でサブルーチンをＣＡＬＬし、サブルーチン内で異常が発生した場合などである。この場合、メインプログラムのどこから呼び出されたのか、どのタイミングで異常発生したのかわからなければ、デバッグすることができない。
【００２８】
しかしながら、上述した従来技術の場合、サブルーチン呼び出しの順番をトレースすることはできないという欠点があった。また、特開平７−１４１２２２、特開平４−３３６６３１、特開平２−２９４８４５、特開昭６４−４８１３３、特開昭５９−２２１７５３号公報などに示される従来技術は、異常発生のタイミングをトレースすることができなかったり、あるいは、たとえできたとしても特別な手段を用いる必要があった。
【００２９】
この発明は上記に鑑みてなされたものであり、少ないオーバヘッドでサブルーチンに関するトレース情報を記録し、異常発生時のサブルーチンＣＡＬＬのタイミングをトレースできるトレースデータ処理装置、トレースデータ処理方法およびその方法を実行するためのプログラムを得ることを目的とする。
【００３０】
【課題を解決するための手段】
上記目的を達成するため、この発明にかかるトレースデータ処理装置は、プログラムから階層的に呼び出されるサブルーチンの実行情報をトレースするトレースデータ処理装置において、呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果を格納するデータテーブルと、前記呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を格納する位置を示す第１のポインタと、前記呼び出し先サブルーチンの実行結果を格納する位置を示す第２のポインタと、前記データテーブルへの記録を指示するトレースポイント付ポインタが、前記呼び出し先サブルーチンにあるときに前記呼び出し元サブルーチンの呼び出しステップ番号および前記呼び出し先サブルーチンのポインタ番号を夫々前記第１のポインタが示す位置に格納し、前記呼び出し先サブルーチンからの復帰処理時に、この呼び出し先サブルーチンの処理結果を前記第２のポインタが示す位置に格納する格納処理手段とを備えることを特徴とする。
【００３１】
この発明によれば、データテーブルには、呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果が格納され、第１のポインタが示す位置に、呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号が格納され、第２のポインタが示す位置に、呼び出し先サブルーチンの実行結果が格納され、格納処理手段は、データテーブルへの記録を指示するトレースポイント付ポインタが呼び出し先サブルーチンにあるときに、呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を夫々第１のポインタが示す位置に格納し、呼び出し先サブルーチンからの復帰処理時に、この呼び出し先サブルーチンの処理結果を第２のポインタが示す位置に格納することができる。
【００３２】
つぎの発明にかかるトレースデータ処理装置は、上記の発明において、前記データテーブルに格納された前記サブルーチンの呼び出し回数を保持する第１のカウンタと、前記サブルーチンの実行処理後の復帰回数を保持する第２のカウンタとをさらに備え、前記呼び出し先サブルーチンに前記トレースポイント付ポインタがあるときに前記第１のカウンタの値を増加させ、前記トレースポイント付ポインタを有する前記呼び出し先サブルーチンからの復帰処理時に、前記第１のカウンタの値を増加させ、前記第２のカウンタの値を減少させることを特徴とする。
【００３３】
この発明によれば、データテーブルに格納されたサブルーチンの呼び出し回数を保持する第１のカウンタと、サブルーチンの実行処理後の復帰回数を保持する第２のカウンタとが備えられ、呼び出し先サブルーチンにトレースポイント付ポインタがあるときに第１のカウンタの値を増加させ、トレースポイント付ポインタを有する呼び出し先サブルーチンからの復帰処理時に、第１のカウンタの値を増加させ、第２のカウンタの値を減少させる。
【００３４】
つぎの発明にかかるトレースデータ処理装置は、上記の発明において、前記第１のポインタの値をｎとし、前記第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出することを特徴とする。
【００３５】
この発明によれば、第１のポインタの値をｎとし、第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出することができる。
【００３６】
つぎの発明にかかるトレースデータ処理方法は、上記の発明において、プログラムから階層的に呼び出されるサブルーチンの実行情報をトレースするトレースデータ処理方法において、データテーブルに呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果を格納し、前記データテーブルへの記録を指示するトレースポイント付ポインタが前記呼び出し先サブルーチンにあるときに、第１のポインタが示す位置に、前記呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を格納し、第２のポインタが示す位置に、前記呼び出し先サブルーチンからの復帰処理時に前記呼び出し先サブルーチンの処理結果を格納することを特徴とする。
【００３７】
この発明によれば、データテーブルに呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果を格納し、データテーブルへの記録を指示するトレースポイント付ポインタが呼び出し先サブルーチンにあるときに、第１のポインタが示す位置に、呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を格納し、第２のポインタが示す位置に、呼び出し先サブルーチンからの復帰処理時に呼び出し先サブルーチンの処理結果を格納することができる。
【００３８】
つぎの発明にかかるトレースデータ処理方法は、上記の発明において、前記呼び出し先サブルーチンに前記トレースポイント付ポインタがあるときに、前記データテーブルに格納された前記サブルーチンの呼び出し回数を保持する第１のカウンタの値を増加させ、前記トレースポイント付ポインタを有する前記呼び出し先サブルーチンからの復帰処理時に、前記第１のカウンタの値を増加させ、前記サブルーチンの実行処理後の復帰回数を保持する前記第２のカウンタの値を減少させることを特徴とする。
【００３９】
この発明によれば、呼び出し先サブルーチンにトレースポイント付ポインタがあるときに、データテーブルに格納されたサブルーチンの呼び出し回数を保持する第１のカウンタの値を増加させ、トレースポイント付ポインタを有する呼び出し先サブルーチンからの復帰処理時に、第１のカウンタの値を増加させ、サブルーチンの実行処理後の復帰回数を保持する第２のカウンタの値を減少させる。
【００４０】
つぎの発明にかかるトレースデータ処理方法は、上記の発明において、前記第１のポインタの値をｎとし、前記第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出することを特徴とする。
【００４１】
この発明によれば、第１のポインタの値をｎとし、第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出することができる。
【００４２】
つぎの発明にかかるプログラムは、上記の発明のいずれか一つに記載された方法をコンピュータに実行させるプログラムであり、そのプログラムがコンピュータ読み取り可能となり、これによって、上記の発明のいずれか一つの動作をコンピュータによって実行することができる。
【００４３】
【発明の実施の形態】
以下に添付図面を参照して、この発明にかかるトレースデータ処理装置、トレースデータ処理方法およびその方法を実行するためのプログラムの好適な実施の形態を詳細に説明する。
【００４４】
図１は、この発明にかかるコントローラの制御プログラムの動作の一例を示す図である。ステップＳ１０１〜Ｓ１０５までがメインプログラムの記述である。まず、ステップＳ１０１で実行条件ａを読み出し、実行条件が成立した時、ステップＳ１０２でポインタＰａから始まるサブルーチンを呼び出し、ステップＳ１０３で実行条件ｂを読み出し、実行条件が成立した時、ステップＳ１０４でポインタＰｂから始まるサブルーチンを呼び出す。なお、ステップＳ１０５はメインプログラムの終了をあらわす命令（ＦＥＮＤ命令）を示している。
【００４５】
つぎに、ＰａはステップＳ１０２で呼び出されたサブル−チンの先頭を示すポインタであり、ステップＳ１０６で実行条件Ｐａａを読み出し、実行条件が成立した時、ステップＳ１０７でポインタＰｃｏｍから始まるサブルーチンを呼び出す。このサブルーチンの実処理終了後、ステップＳ１０８〜Ｓ１０９の命令を実行し、ステップＳ１１０でサブルーチンから復帰する命令（ＲＥＴ命令）を実行する。同様に、ＰｂはステップＳ１０４で呼び出されたサブルーチンの先頭を示すポインタであり、ステップＳ１１１で実行条件Ｐｂｂを読み出し、実行条件が成立した時、ステップＳ１１２でポインタＰｃｏｍから始まるサブルーチンを呼び出す。このサブルーチンの実処理終了後、ステップＳ１１３〜Ｓ１１４の命令を実行し、ステップＳ１１５でサブルーチンから復帰する命令（ＲＥＴ命令）を実行する。
【００４６】
ところで、ＰｃｏｍはステップＳ１０７またはＳ１１２で呼び出されたサブルーチンの先頭を示すポインタであるが、このＰｃｏｍは“ｔｐ（トレースポイント）”で修飾されている点に特徴があり、従来技術との相違点である。なお、このｔｐについては、後で詳述する。
【００４７】
その後の処理は従来技術で説明したのと同様に、ステップＳ１１６で実行条件Ｐｃｃを読み出し、実行条件が成立した時、ステップＳ１１７でサブルーチンの実処理を開始し、ステップＳ１１８〜Ｓ１１９の命令を実行し、ステップＳ１２０でサブルーチンから復帰する命令（ＲＥＴ命令）を実行する。なお、ステップＳ１２１は全てのプログラムの終了を意味する命令（ＥＮＤ命令）である。
【００４８】
図２は、この発明にかかる階層構造プログラムの実施の概念を示す説明図である。同図において、２１はＣＡＬＬカウンタ、２２はＲＥＴカウンタ、２３はデータテーブル、２４はＣＡＬＬポインタ、２５はＲＥＴポインタを夫々示している。
【００４９】
ＣＡＬＬポインタ２４とＲＥＴポインタ２５は、▲１▼呼び出し元サブルーチンの呼び出しステップ番号、▲２▼呼び出し先サブルーチンのポインタ番号、▲３▼呼び出し先サブルーチンの実行結果の３つの情報をひとつのブロックとしてデータテーブル２３に格納するためのポインタである。また、ＣＡＬＬカウンタ２１とＲＥＴカウンタ２２はＣＡＬＬポインタ２４とＲＥＴポインタ２５の算出に用いるためのＣＡＬＬ処理とＲＥＴ処理の回数を格納するための作業（ワーク）エリアである。
【００５０】
図３は、この発明にかかるＣＡＬＬ命令とＲＥＴ命令の動作の一例を示す図である。同図は、図１のプログラムが図９に示すユーザプログラム９６にどのように格納されているのかを具体的に示す図である。図１４に示す従来技術と比較して、ステップＳ３１５の「ＲＥＴ」とステップＳ３１６の「ＬＤ　実行条件Ｐｃｃ」との間に、ステップＳ３２２の「ｔｐ」が格納されている。その他、命令が格納される位置や呼び出しの動作については、従来技術で説明した内容と同一であるので、説明を省略する。
【００５１】
図４は、この発明にかかるＣＡＬＬ処理の処理手順を示すフローチャートである。同図を用いて、通常のＣＡＬＬ処理とｔｐ付ポインタを呼び出した場合のＣＡＬＬ処理とを比較しながら説明する。
【００５２】
まず、ステップＳ４０１でスタックポインタを読出し、ステップＳ４０２でスタックポインタの指す位置のつぎの位置に実行するステップ番号を格納し、ステップＳ４０３でスタックポインタを更新し、ステップＳ４０４で呼び出し先のサブルーチンポインタ番号を読み出す。ここまでは、通常のＣＡＬＬ処理と何ら変わる処理ではない。
【００５３】
つぎに、ステップＳ４０５でＣＡＬＬするポインタが、ｔｐ付ポインタであるか否かを判断する。ステップＳ４０５でＣＡＬＬするポインタが、ｔｐ付ポインタの場合には、ステップＳ４０７へ移行し、図２に示すデータテーブル２３のＣＡＬＬポインタ２４を読出し、ステップＳ４０８でＣＡＬＬポインタ２４の指す位置に呼び出し元ステップ番号を格納し、ステップＳ４０９でＣＡＬＬポインタ２４の更新を行い、ステップＳ４１０で呼び出し先サブルーチンのポインタ番号を読出し、ステップＳ４１１でＣＡＬＬポインタ２４の指す位置に呼び出し先サブルーチンのポインタ番号を格納し、ステップＳ４１２でＣＡＬＬポインタ２４を更新し、ステップＳ４１３で、図２に示すＣＡＬＬカウンタ２１を更新し、ステップＳ４１４でＣＡＬＬポインタ２４を、図２に示すＲＥＴポインタ２５にコピーする。ステップＳ４１５でｔｐ付ポインタ呼び出しフラグを、図９に示すワークＲＡＭ９２にセットしておき、ステップＳ４１６で呼び出したポインタ番号の指すステップ番号の処理を実行する。なお、上記のステップＳ４０１〜Ｓ４０４の処理からステップＳ４１６の処理に移行する流れが通常の処理の流れである。
【００５４】
一方、ステップＳ４０５の処理において、ＣＡＬＬするポインタがｔｐ付ポインタでない場合には、さらに、ステップＳ４０６でワークＲＡＭ９２に格納されたｔｐ付ポインタ呼び出しフラグがセットされているか否かを判断する。このｔｐ付ポインタ呼び出しフラグがセットされている場合には、ステップＳ４０７からの処理を実行し、ｔｐ付ポインタ呼び出しフラグがセットされていない場合には、ステップＳ４１６の処理を実行する。
【００５５】
図５は、図４のＣＡＬＬ処理に対応したＲＥＴ処理の処理手順を示すフローチャートである。同図を用いて、ＲＥＴ処理の流れについて説明する。
【００５６】
まず、ステップＳ５０２で、図２に示すＣＡＬＬカウンタ２１が“０”か否かを判断する。このＣＡＬＬカウンタ２１が“０”の場合には、ｔｐ付きのサブルーチンＣＡＬＬ処理は行われていないので、通常のＲＥＴ処理を行うために、ステップＳ５１０へ移行し、ステップＳ５１０でスタックポインタを読出し、ステップＳ５１１でスタックからつぎに実行するステップ番号を読み出し、ステップＳ５１２で読み出したステップ番号の命令を実行する。
【００５７】
一方、ステップＳ５０２でＣＡＬＬカウンタ２１が“０”でない場合には、ｔｐ付きのサブルーチンＣＡＬＬ処理が行われた場合であり、ステップＳ５０３で、図２に示すＲＥＴカウンタ２２を読み出し、ステップＳ５０４でＲＥＴカウンタ２２を更新し、ステップＳ５０５でＲＥＴカウンタ２２の値（ｍ）を用いてＲＥＴポインタ２５の演算を行う。このＲＥＴポインタ２５の演算内容は、ＲＥＴポインタ２５＝ＣＡＬＬポインタ２４−｛（ｍ−１）×３＋１｝の計算式で行う。さらに、ステップＳ５０６でＲＥＴポインタ２５演算結果の指す位置にＲＥＴ処理結果を格納し、ステップＳ５０７でＲＥＴ処理が終了を示すために、ＣＡＬＬカウンタ２１を更新する。
【００５８】
つぎに、ステップＳ５０８でＣＡＬＬカウンタ２１の値を再度確認し、この値が０であれば、ｔｐ付ポインタ呼び出し処理が全て終了しており、ステップＳ５０９でｔｐ付ポインタ呼び出しフラグをクリアし、ステップＳ５１０に移行し、通常のＲＥＴ処理を行う。また、ステップＳ５０８でＣＡＬＬカウンタ２１の値が０でなければ、ｔｐ付ポインタ呼び出し処理が完了していないので、ｔｐ付ポインタ呼び出しフラグはクリアせず、ステップＳ５１０に移行して通常のＲＥＴ処理を行う。
【００５９】
図６は、ｔｐ付き呼び出しのＣＡＬＬ処理が行われたときのデータテーブル等の動きを示す説明図である。同図は、図２に示すデータテーブル２３、ＣＡＬＬポインタ（ＣＰ）２４、ＲＥＴポインタ（ＲＰ）２５、ＣＡＬＬカウンタ２１、ＲＥＴカウンタ２２が、初期状態からＣＡＬＬ命令の実行と共に推移する様子を示している。なお、ＣＡＬＬのネスト（深さ）は“５”であり、全てｔｐ付き呼び出しのＣＡＬＬ処理が実行されたものとしている。
【００６０】
図６において、初期状態では、ＣＡＬＬカウンタ、ＲＥＴカウンタは共に“０”であり、ＣＰ、ＲＰは図示しない所定の位置に設定されている。１回目のＣＡＬＬ命令が実行されると、ＣＡＬＬカウンタがインクリメント（＋１）され、すなわち“１”に設定され（図４のステップＳ４１３の処理に対応）、ＣＰがインクリメント（＋３）され（図４のステップＳ４０９、Ｓ４１２の処理に対応）、ＲＰもＣＰと同じポインタ値にセットされる（図４のステップＳ４１４の処理に対応）。したがって、ＣＰ、ＲＰは、図６の位置６１のポインタがセットされることになる。
【００６１】
同様に、２回目のＣＡＬＬ命令が実行されると、ＣＡＬＬカウンタがインクリメント（＋１）され、すなわち“２”に設定され、ＣＰがインクリメント（＋３）され、ＲＰもＣＰと同じポインタ値にセットされる。したがって、ＣＰ、ＲＰは、位置６２のポインタがセットされる。以下、５回目のＣＡＬＬ命令が実行されると、最終的には、ＣＡＬＬカウンタが“５”に設定され、ＣＰ、ＲＰは、位置６５のポインタがセットされる。
【００６２】
図７は、図６のＣＡＬＬ処理が行われた後に、ＲＥＴ命令が実行されるときのデータテーブル等の動きを示す説明図である。同図は、図２に示すデータテーブル２３、ＣＡＬＬポインタ（ＣＰ）２４、ＲＥＴポインタ（ＲＰ）２５、ＣＡＬＬカウンタ２１、ＲＥＴカウンタ２２が、図６の状態からＲＥＴ命令の実行と共に推移する様子を示している。
【００６３】
図７において、ＲＥＴ命令が実行されていない状態は、図６において５回目のＣＡＬＬ命令が実行された状態と同一である。すなわち、ＣＡＬＬカウンタ２５は“５”に設定され、ＲＥＴカウンタは“０”に設定され、ＣＰ、ＲＰは、位置６５のポインタがセットされている。１回目のＲＥＴ命令が実行されると、ＲＥＴカウンタがインクリメント（＋１）され、すなわち“１”に設定され（図５のステップＳ５０４の処理に対応）、ＣＡＬＬカウンタがディクリメント（−１）され、すなわち“４”に設定され（図５のステップＳ５０７の処理に対応）、ＣＰの値はそのままであり、ＲＰがディクリメント（−１）され、位置６６のポインタがセットされる（図５のステップＳ５０５の演算処理に対応）。
【００６４】
同様に、２回目のＲＥＴ命令が実行されると、ＲＥＴカウンタがインクリメント（＋１）され、すなわち“２”に設定され、ＣＡＬＬカウンタがディクリメント（−１）され、すなわち“３”に設定され、ＣＰの値はそのままであり、ＲＰがディクリメント（−３）され、位置６７のポインタがセットされる。以下、５回目のＲＥＴ命令が実行されると、最終的には、ＣＡＬＬカウンタが“０”に設定され、ＲＥＴカウンタが“５”に設定され、ＣＰは位置６５のポインタのままであり、ＲＰは位置７０のポインタがセットされる。
【００６５】
例えば、図７において、３回目のＲＥＴ命令が実行され、４回目のＲＥＴ命令が実行される前にエラーが発生したと仮定すると、ＲＰは位置６９のポインタには更新されず、位置６８のポインタのままである。このとき、ＣＡＬＬカウンタ値、ＲＥＴカウンタ値、ＲＰの値の情報から、どの呼び出し処理でエラーが発生したのかを判定することができる。また、エラーが発生した位置（この例では、位置６８）のポインタをＸとすると、Ｘ−１には呼び出し先のポインタ番号が設定され、Ｘ−２には呼び出し元のステップ番号が設定されているので、これらの情報からエラーの発生の原因を探求するためのプログラム実行情報を得ることができる。
【００６６】
このトレース処理は、▲１▼呼び出し元サブルーチンの呼び出しステップ番号、▲２▼呼び出し先サブルーチンのポインタ番号、▲３▼呼び出し先サブルーチンの実行結果の３つの情報のみで構成されるため、少ないオーバヘッドで階層構造プログラムに関する実行情報を得ることができる。また、トレース情報だけでなく、サブルーチンの実行結果の情報も含んでいるため、正常に終了した処理においても、処理結果そのものの妥当性に関して評価できるので、効率のよいデバックをすることができる。
【００６７】
以上詳述してきたように、この発明にかかるトレースデータ処理装置、トレースデータ処理方法およびその方法を実行するプログラムによれば、構造化されたプログラムを処理する情報処理装置のプログラム実行に関し、階層構造をもつ構造化プログラムの実行において、階層構造プログラムの実行タイミングをトレース（追跡）することができ、実行の途中でエラーが発生した場合にそのエラー要因とプログラムの実行タイミングを把握でき、かつ少ないオーバヘッドで階層構造プログラムに関する実行情報を得ることができる。
【００６８】
【発明の効果】
以上説明したように、この発明によれば、データテーブルには、呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果が格納され、第１のポインタが示す位置に、呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号が格納され、第２のポインタが示す位置に、呼び出し先サブルーチンの実行結果が格納され、格納処理手段は、データテーブルへの記録を指示するトレースポイント付ポインタが呼び出し先サブルーチンにあるときに、呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を夫々第１のポインタが示す位置に格納し、呼び出し先サブルーチンからの復帰処理時に、この呼び出し先サブルーチンの処理結果を第２のポインタが示す位置に格納するようにしているので、サブルーチンのネストが深い段階でエラーが発生してもＣＡＬＬ命令の動きを順番にトレースすることができ、かつ、どのＣＡＬＬ処理の段階でエラーが発生したのかをトレースできるので、サブルーチンを多用した標準化プログラムのデバッグ効率の向上が期待できるという効果を奏する。また、１回のＣＡＬＬ処理に要する情報は、▲１▼呼び出し元サブルーチンの呼び出しステップ番号、▲２▼呼び出し先サブルーチンのポインタ番号、▲３▼呼び出し先サブルーチンの実行結果の３情報のみなので、少ないオーバヘッドで上記の効果が得られるというさらなる効果がある。さらに、通常のＣＡＬＬ処理と本ＣＡＬＬ処理は使い分けが可能なので、必要に応じて、ＦＢやＦＢＤを使うようなところにｔｐ付ポインタを使うことで、デバッグ効率の向上、処理効率の向上、メモリ資源の効率的な使用が可能になる等ユーザにとって、最適なデバッグ手段を提供できるという効果を奏する。
【００６９】
つぎの発明によれば、データテーブルに格納されたサブルーチンの呼び出し回数を保持する第１のカウンタと、サブルーチンの実行処理後の復帰回数を保持する第２のカウンタとが備えられ、呼び出し先サブルーチンにトレースポイント付ポインタがあるときに第１のカウンタの値を増加させ、トレースポイント付ポインタを有する呼び出し先サブルーチンからの復帰処理時に、第１のカウンタの値を増加させ、第２のカウンタの値を減少させるようにしているので、サブルーチンのネストが深い段階でエラーが発生してもＣＡＬＬ命令の動きを順番にトレースすることができ、かつ、どのＣＡＬＬ処理の段階でエラーが発生したのかをトレースできるので、サブルーチンを多用した標準化プログラムのデバッグ効率の向上が期待できるという効果を奏する。また、通常のＣＡＬＬ処理と本ＣＡＬＬ処理は使い分けが可能なので、必要に応じて、ＦＢやＦＢＤを使うようなところにｔｐ付ポインタを使うことで、デバッグ効率の向上、処理効率の向上、メモリ資源の効率的な使用が可能になる等ユーザにとって、最適なデバッグ手段を提供できるという効果を奏する。
【００７０】
つぎの発明によれば、第１のポインタの値をｎとし、第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出するようにしているので、サブルーチンのネストが深い段階でエラーが発生してもＣＡＬＬ命令の動きを順番にトレースすることができ、かつ、どのＣＡＬＬ処理の段階でエラーが発生したのかをトレースできるので、サブルーチンを多用した標準化プログラムのデバッグ効率の向上が期待できるという効果を奏する。
【００７１】
つぎの発明によれば、データテーブルに呼び出し元サブルーチンの呼び出しステップ番号、呼び出し先サブルーチンのポインタ番号および呼び出し先サブルーチンの実行結果を格納し、データテーブルへの記録を指示するトレースポイント付ポインタが呼び出し先サブルーチンにあるときに、第１のポインタが示す位置に、呼び出し元サブルーチンの呼び出しステップ番号および呼び出し先サブルーチンのポインタ番号を格納し、第２のポインタが示す位置に、呼び出し先サブルーチンからの復帰処理時に呼び出し先サブルーチンの処理結果を格納するようにしているので、サブルーチンのネストが深い段階でエラーが発生してもＣＡＬＬ命令の動きを順番にトレースすることができ、かつ、どのＣＡＬＬ処理の段階でエラーが発生したのかをトレースできるので、サブルーチンを多用した標準化プログラムのデバッグ効率の向上が期待できるという効果を奏する。また、１回のＣＡＬＬ処理に要する情報は、▲１▼呼び出し元サブルーチンの呼び出しステップ番号、▲２▼呼び出し先サブルーチンのポインタ番号、▲３▼呼び出し先サブルーチンの実行結果の３情報のみなので、少ないオーバヘッドで上記の効果が得られるというさらなる効果がある。さらに、通常のＣＡＬＬ処理と本ＣＡＬＬ処理は使い分けが可能なので、必要に応じて、ＦＢやＦＢＤを使うようなところにｔｐ付ポインタを使うことで、デバッグ効率の向上、処理効率の向上、メモリ資源の効率的な使用が可能になる等ユーザにとって、最適なデバッグ方法を提供できるという効果を奏する。
【００７２】
つぎの発明によれば、呼び出し先サブルーチンにトレースポイント付ポインタがあるときに、データテーブルに格納されたサブルーチンの呼び出し回数を保持する第１のカウンタの値を増加させ、トレースポイント付ポインタを有する呼び出し先サブルーチンからの復帰処理時に、第１のカウンタの値を増加させ、サブルーチンの実行処理後の復帰回数を保持する第２のカウンタの値を減少させるようにしているので、サブルーチンのネストが深い段階でエラーが発生してもＣＡＬＬ命令の動きを順番にトレースすることができ、かつ、どのＣＡＬＬ処理の段階でエラーが発生したのかをトレースできるので、サブルーチンを多用した標準化プログラムのデバッグ効率の向上が期待できるという効果を奏する。また、通常のＣＡＬＬ処理と本ＣＡＬＬ処理は使い分けが可能なので、必要に応じて、ＦＢやＦＢＤを使うようなところにｔｐ付ポインタを使うことで、デバッグ効率の向上、処理効率の向上、メモリ資源の効率的な使用が可能になる等ユーザにとって、最適なデバッグ方法を提供できるという効果を奏する。
【００７３】
つぎの発明によれば、第１のポインタの値をｎとし、第２のカウンタの値をｍとするときに、前記第２のポインタの値ｐを、
ｐ＝ｎ−（（ｍ−１）×３＋１）
の計算式で算出するようにしているので、サブルーチンのネストが深い段階でエラーが発生してもＣＡＬＬ命令の動きを順番にトレースすることができ、かつ、どのＣＡＬＬ処理の段階でエラーが発生したのかをトレースできるので、サブルーチンを多用した標準化プログラムのデバッグ効率の向上が期待できるという効果を奏する。
【００７４】
つぎの発明にかかるプログラムによれば、上記の発明のいずれか一つに記載された方法をコンピュータに実行させるようにしたので、そのプログラムがコンピュータ読み取り可能となり、これによって、上記の発明のいずれか一つの動作をコンピュータによって実行することができるという効果を奏する。
【図面の簡単な説明】
【図１】この発明にかかるコントローラの制御プログラムの動作の一例を示す図である。
【図２】この発明にかかる階層構造プログラムの実施の概念を示す説明図である。
【図３】この発明にかかるＣＡＬＬ命令とＲＥＴ命令の動作の一例を示す図である。
【図４】この発明にかかるＣＡＬＬ処理の処理手順を示すフローチャートである。
【図５】図４のＣＡＬＬ処理に対応したＲＥＴ処理の処理手順を示すフローチャートである。
【図６】ｔｐ付き呼び出しのＣＡＬＬ処理が行われたときのデータテーブル等の動きを示す説明図である。
【図７】図６のＣＡＬＬ処理が行われた後に、ＲＥＴ命令が実行されるときのデータテーブル等の動きを示す説明図である。
【図８】ＦＡシステムにおけるシステム構成の一例を示す図である。
【図９】従来技術のコントローラの内部構成を示すブロック図である。
【図１０】従来技術のコントローラの制御プログラムの動作の一例を示す図である。
【図１１】従来技術におけるコントローラのサブルーチンプログラムの処理を示す図である。
【図１２】サブルーチンの処理概念を示す説明図である。
【図１３】ＣＡＬＬ命令とＲＥＴ命令とスタックの概念を示す説明図である。
【図１４】従来技術におけるＣＡＬＬ命令とＲＥＴ命令の動作の一例を示す図である。
【符号の説明】
２１　ＣＡＬＬカウンタ、２２　ＲＥＴカウンタ、２３　データテーブル、２４　ＣＡＬＬポインタ、２５　ＲＥＴポインタ、６１，６２，６３，６４，６５，６６，６７，６８，６９，７０　位置、８１　コントローラ、８２　インテリジェントユニット、８３　非インテリジェントユニット、８４　Ｉ／Ｏ機器、８５　サーボモータ、８６　センサ、８７　アクチュエータ、８８　スイッチ、出力機器、電光管等、９１　ＭＰＵ、９２　ワークＲＡＭ、９３　システムＲＯＭ、９４　ユーザＲＡＭ、９５　パラメータ、９６　ユーザプログラム、９７　デバイスメモリ、９８　アドレスバス、９９　データバス、１２１，１２２，１２３，１２４，１２５，１２６，１２７，１２８　タイミング、１４１，１４２，１４３，１４４，１４５，１４６，１４７，１４８　処理。
【図１】
2004021614.tif 000003
【図２】
2004021614.tif 000004
【図３】
2004021614.tif 000005
【図４】
2004021614.tif 000006
【図５】
2004021614.tif 000007
【図６】
2004021614.tif 000008
【図７】
2004021614.tif 000009
【図８】
2004021614.tif 000010
【図９】
2004021614.tif 000011
【図１０】
2004021614.tif 000012
【図１１】
2004021614.tif 000013
【図１２】
2004021614.tif 000014
【図１３】
2004021614.tif 000015
【図１４】
2004021614.tif 000016