(57)【要約】【課題】あるプログラムモジュール内に使用されているメモリが他のサブルーチンプログラムやサブルーチンプログラムでないプログラムモジュールでも使用されているかどうかを一目で理解できるような表示を提供できる制御プログラム開発支援装置を提供すること。【解決手段】制御プログラムを読み出し、使用されているメモリアドレスのサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムを呼び出すプログラムモジュール間での重複使用状況を解析する解析手段と、解析手段で解析した結果を表示する解析結果表示手段とを備え、サブルーチンプログラム毎に他のサブルーチンプログラムやサブルーチンプログラムを呼び出すプログラムモジュールとの使用メモリアドレスの重複使用状況を表示可能とする。【選択図】図９
2006294013.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムモジュールと複数のサブルーチンプログラムで構成される制御プログラムを解析する制御プログラムの開発支援装置であって、
制御プログラムを読み出し、使用されているメモリアドレスのサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムを呼び出すプログラムモジュール間での重複使用状況を解析する解析手段と、
解析手段で解析した結果を表示する解析結果表示手段とを備え、
サブルーチンプログラム毎に他のサブルーチンプログラムやサブルーチンプログラムを呼び出すプログラムモジュールとの使用メモリアドレスの重複使用状況を表示可能とする、ことを特徴とする制御プログラム開発支援装置。
【請求項２】
解析手段は、使用メモリアドレスの重複使用状況を解析する場合、重複使用されるメモリアドレスのサイズを抽出し、
解析結果表示手段は、解析手段で抽出された重複使用メモリアドレスのサイズをサブルーチンプログラム名と共に表示する、ことを特徴とする請求項１に記載の制御プログラム開発支援装置。
【請求項３】
コンピュータを、
複数のプログラムモジュールと複数のサブルーチンプログラムで構成される制御プログラムを読み出し、使用されているメモリアドレスのサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムを呼び出すプログラムモジュール間での重複使用状況を解析する解析手段と、
解析手段で解析した結果を表示する解析結果表示手段とを備え、
サブルーチンプログラム毎に他のサブルーチンプログラムやサブルーチンプログラムを呼び出すプログラムモジュールとの使用メモリアドレスの重複使用状況を表示可能とする制御プログラム開発支援装置として機能させるコンピュータプログラム。
【請求項４】
解析手段は、使用メモリアドレスの重複使用状況を解析する場合、重複使用されるメモリアドレスのサイズを抽出し、
解析結果表示手段は、解析手段で抽出された重複使用メモリアドレスのサイズをサブルーチンプログラム名と共に表示する、ことを特徴とする請求項３に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル・コントローラ（以下、ＰＬＣと言う）の制御プログラム（ユーザプログラム）を開発する場合等に好適な制御プログラム開発支援装置に関するものである。
【背景技術】
【０００２】
ＰＬＣで実行される制御プログラム（ユーザプログラム）の作成を支援するものとして制御プログラム開発支援装置（以下、開発支援装置）が知られている。この開発支援装置を使ってユーザプログラムを作成する際には、既存プログラムの流用がしばしば行なわれる。
【０００３】
通常、ユーザプログラムは、複数のプログラムモジュールから構成されており、さらには、あるプログラムモジュール内において他のプログラムモジュールをサブルーチンプログラムとして呼び出すように構成されることがある。このようなサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムでない（サブルーチンプログラムを呼び出す側）プログラムモジュール間で共通に参照されるメモリアドレスが存在する。
【０００４】
このように異なるプログラムモジュール間で共通に参照されるメモリアドレスが存在する場合は、そのプログラムモジュールを流用する際は注意が必要となる。これを怠ると、予期せぬ誤動作の原因となる。
【０００５】
あるメモリアドレスがユーザプログラム内のどこに使用されているか検索するためのものとしては、クロスリファレンスと称される参照テーブルが知られている。なお、クロスリファレンスを利用する検索については、各種の公知技術が知られている（例えば、特許文献１参照）。
【０００６】
クロスリファレンス表示例が図１４に示されている。この例では、メモリアドレス「Ａ２００．１１」がプログラム名「新規プログラム１」なるプログラムを構成するセクション名「セクション１」なるプログラムモジュール内で使用されていることを示している。さらに、そのプログラムモジュール内の使用場所として、プログラムアドレスが「０」であり、命令語「ＬＤ」のオペランドとして使用されていることを表している。
【特許文献１】特開２００３−２４３２６９公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来のクロスリファレンス表示は、あるメモリアドレスが使用されているプログラムモジュールの名称やプログラムモジュール内での使用場所等を当該メモリアドレスを行の先頭として同一行に並べて表示するというメモリアドレス中心の表示となっている。したがって、あるサブルーチンプログラム内で使用されているメモリが他のサブルーチンプログラムやサブルーチンプログラムを呼び出す側のプログラムモジュールでも使用されているかどうかを一目で理解できるものではなかったため、使い勝手が悪いと言う問題点が指摘されている。
【０００８】
この発明は、上述の問題点に着目してなされたものであり、その目的とするところは、あるプログラムモジュール内に使用されているメモリが他のサブルーチンプログラムやサブルーチンプログラムを呼び出す側のプログラムモジュールでも使用されているかどうかを一目で理解できるような表示を提供できる制御プログラム開発支援装置を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の制御プログラム開発支援装置は、複数のプログラムモジュールと複数のサブルーチンプログラムで構成される制御プログラムを解析する制御プログラムの開発支援装置であって、制御プログラムを読み出し、使用されているメモリアドレスのサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムを呼び出すプログラムモジュール間での重複使用状況を解析する解析手段と、解析手段で解１析した結果を表示する解析結果表示手段とを備え、サブルーチンプログラム毎に他のサブルーチンプログラムやサブルーチンプログラムを呼び出すプログラムモジュールとの使用メモリアドレスの重複使用状況を表示可能とする、ことを特徴とするものである。
【００１０】
このような構成によれば、あるプログラムモジュール内に使用されているメモリが他のサブルーチンプログラムやサブルーチンプログラムを呼び出す側のプログラムモジュールでも使用されているかどうかを一目で理解できるような表示をユーザに提供することができる。
【００１１】
本発明の好ましい実施の形態においては、解析手段は、使用メモリアドレスの重複使用状況を解析する場合、重複使用されるメモリアドレスのサイズを抽出し、解析結果表示手段は、解析手段で抽出された重複使用メモリアドレスのサイズをサブルーチンプログラム名と共に表示するようにしてもよい。
【００１２】
このような構成によれば、どのサブルーチンプログラムとの間でどの程度のメモリ容量が重複しようされているかをユーザは表示に基づいて的確に把握することができる。
【００１３】
別の一面から見た本発明は、そのような開発支援装置をパソコンに実現させることができるコンピュータプログラムとして把握することもできる。
【発明の効果】
【００１４】
本発明によれば、あるプログラムモジュール内に使用されているメモリが他のサブルーチンプログラムやサブルーチンプログラムでないプログラムモジュールでも使用されているかどうかを一目で理解できるような表示をユーザに提供することができる。
【発明を実施するための最良の形態】
【００１５】
以下に、この発明に係る制御プログラム開発支援装置の好適な実施の一形態を添付図面を参照しながら詳細に説明する。
【００１６】
本発明の制御プログラム開発支援装置は、例えばパソコンに所定のアプリケーションソフトをインストールすることによって実現することができる。ここで、パソコンのハードウェア構成については種々の文献において周知であるから、この明細書においては詳細な説明は省略する。
【００１７】
サブルーチンでのメモリ使用状況の説明図が図１に示されている。ＰＬＣのプログラムは、複数のプログラムモジュールから構成されており、さらには、あるプログラムモジュール内において他のプログラムモジュールをサブルーチンプログラムとして読み出すように構成されることがある。このようなサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムを呼び出す側のプログラムモジュール間で共通に参照されるメモリアドレスが存在する。
【００１８】
サブルーチン間でのメモリ使用状況の説明図が図１に示されている。図１では、ＰＬＣのユーザプログラムは複数の「タスク」と呼ばれるプログラム単位で構成され、各タスクは、複数の「セクション」と呼ばれるプログラムモジュールで構成され、さらに、各セクションは「サブルーチン」と呼ばれるサブルーチンプログラムを含んで構成されている例を示している。
【００１９】
図１に示されるＰＬＣのユーザプログラムは、タスク名称が制御Ａと制御Ｂと制御Ｃとからなる３個のタスクを有する。制御Ａのタスク内にはセクション名称が制御Ａ＿１のセクションが含まれており、さらにこの制御Ａ＿１のセクション内にはサブルーチン名称がＳＵＢ１のサブルーチンが含まれている。
【００２０】
制御Ｂ（タスク）内には制御Ｂ＿１（セクション）が含まれており、この制御Ｂ＿１（セクション）内にはさらにＳＵＢ２（サブルーチン）が含まれている。制御Ｃ（タスク）内には制御Ｃ＿１（セクション）が含まれており、この制御Ｃ＿１（セクション）内にはＳＵＢ３（サブルーチン）がさらに含まれている。ＰＬＣのメモリ内には、入出力リレー領域、内部補助リレー領域、保持リレー領域、特殊補助リレー領域、データメモリ領域、拡張データメモリ領域などのメモリエリアがそれぞれ設けられている。
【００２１】
それらの中で、入出力リレー領域（Ａ）は、制御Ａ（タスク）内のＳＵＢ１（サブルーチン）によって使用される。また、保持リレー領域（Ｂ）は、制御Ａ（タスク）内のＳＵＢ１（サブルーチン）と制御Ｂ（タスク）内のＳＵＢ２（サブルーチン）とに共用される。また、データメモリ領域（Ｃ）は、制御Ｂ（タスク）内の制御Ｂ＿１（セクション）と制御Ｂ＿１（セクション）に含まれるＳＵＢ２（サブルーチン）とで共用される。また、拡張データメモリ領域（Ｄ）は、制御Ｂ（タスク）内のＳＵＢ２（サブルーチン）と、制御Ｃ（タスク）内の制御Ｃ＿１（セクション）と、制御Ｃ＿１（セクション）内のＳＵＢ３（サブルーチン）とで共用される。
【００２２】
これを踏まえて、サブルーチンからコールされるメモリを下記のように分類することができる。
（１）１つのサブルーチン内でのみ使用される領域（Ａ）
（２）２つ以上のサブルーチン内で使用される領域（Ｂ）
（３）１つのサブルーチン内と通常ルーチンで使用される領域（Ｃ）
（４）２つ以上のサブルーチン内と通常ルーチンで使用される領域（Ｄ）
【００２３】
次に、本発明装置を実現するために、例えばパソコンにインストールされるべき、サブルーチン間のメモリ使用状況の解析処理を示すフローチャートが図２に示されている。
【００２４】
同図において処理が開始されると、サブルーチン毎の使用メモリ一覧を解析する処理（ステップ２０１）が、全サブルーチンについて順次実行される（ステップ２０２ＮＯ）。
【００２５】
サブルーチン毎の使用メモリ一覧の解析処理（ステップ２０１）が全サブルーチンについて終了すると（ステップ２０２ＹＥＳ）、サブルーチン間で同じメモリを使用している箇所の抽出が行われ（ステップ２０３）、この抽出結果に基づいて、一覧表の作成が行われ、作成された一覧表はパソコンの画面に表示される（ステップ２０４）。なお、ステップ２０３でメモリアドレスの重複使用を抽出する際に、その重複されているメモリアドレスで指定されるメモリエリアの合計サイズをメモリエリアの種別毎に求め、その求めたサイズをステップ２０４の処理で画面表示するように構成しても良い。
【００２６】
次に、ユーザプログラムの構造の一例を示す説明図が図３に示されている。このユーザプログラムは、ＰＬＣ１内に、タスク１とタスク２とからなる２個のタスクを含んでいる。タスク１内にはセクション１が含まれ、セクション１内には１個のサブルーチンＳＵＢ１が含まれている。このサブルーチンＳＵＢ１は、ＤＭ０，ＤＭ１，ＤＭ２で表される３個のメモリアドレスを使用している。
【００２７】
タスク２内にはセクション１が含まれており、このセクション１内にはサブルーチンＳＵＢ２が含まれている。このサブルーチンＳＵＢ２は、ＤＭ１０，ＥＭ０，ＷＲ１０で表される３個のメモリアドレスを使用している。この例で、「ＤＭ」、「ＥＭ」、「ＷＲ」は、メモリエリアの種別を表す文字列である。「ＤＭ」、「ＥＭ」、「ＷＲ」に続く数字は、当該メモリエリア種別内でのアドレスを表している。このようにメモリエリアの種別を表す文字列と、そのメモリエリア種別内でのアドレスを表す数字との組み合わせでメモリアドレスを表現することがある。
【００２８】
換言すれば、ＰＬＣ１のタスク１／セクション１内のサブルーチンＳＵＢ１でメモリＤＭ０〜ＤＭ２を使用すると共に、ＰＬＣ１のタスク２／セクション１内のサブルーチンＳＵＢ２でメモリＤＭ１０／ＥＭ０／ＷＲ１０を使用しているのである。
【００２９】
このようなユーザプログラムを作成した場合、パソコンのＲＡＭ内に保存されているデータの説明図が図４に示されている。同図に示されるように、ユーザが作成したプログラムは、ＲＡＭアドレス、メモリアドレス、ＳＵＢ番号に分けてパソコンのＲＡＭ内に保存される。ポインタＰの位置に着目して具体的に説明すると、ＲＡＭアドレス１にはメモリアドレス「ＤＭ０」とＳＵＢ１を識別するデータ「１」が保存されている。図４の例では、ＳＵＢ１、ＳＵＢ２を識別するデータとしてそれぞれ「１」、「２」が対応している。
【００３０】
次に、サブルーチン単位使用のメモリ一覧表示処理のフローチャートが図５に示されている。このフローチャートに示されるプログラムをパソコンにインストールすることによって、本発明に係る制御プログラム開発支援装置が実現される。
【００３１】
同図において処理が開始されると、サブルーチン番号レジスタ（ＳＵＢ＿Ｎｏ）が初期値「１」に設定される。続くステップ５０２においては、ポインタＰにサブルーチン番号レジスタ（ＳＵＢ＿Ｎｏ）のＲＡＭアドレスを入力する。続くステップ５０３においては、カウンタ（Ｎｕｍ）に初期値「１」を設定する（ステップ５０３）。
【００３２】
続くステップ５０４においては、サブルーチン番号レジスタ（ＳＵＢ＿Ｎｏ）とカウンタ（Ｎｕｍ）とに基づいてメモリアドレスの取得を行う（ステップ５０４）。続くステップ５０５においては、取得されたメモリアドレスに基づいて、ＳＵＢ［ＳＵＢ＿Ｎｏ］［ＮＵＭ］を求める。
【００３３】
続くステップ５０６においては、ポインタＰおよびカウンタＮｕｍをプラス１更新する。続くステップ５０７においては、取得されたメモリアドレスが０であるか否かを判定する。ここで０であれば（ステップ５０７ＮＯ）、再びステップ５０４へ戻って、先と同様の処理を実行する。これに対してメモリアドレスが０と判定されると（ステップ５０７ＹＥＳ）、ステップ５０８へ進んで、サブルーチン番号ＳＵＢ＿Ｎｏをプラス１更新する。
【００３４】
続くステップ５０９では、以上一連の処理をあらかじめ登録されているサブルーチン番号（ＳＵＢ＿Ｎｏ）数分だけ繰り返したかどうかの判定を行い、未だ繰り返し数に達していなければ（ステップ５０９ＮＯ）、ステップ５０２へ戻って以上の処理を繰り返す。これに対して、登録されている繰り返し数に達していれば（ステップ５０９ＹＥＳ）、プログラムの実行を終了する。
【００３５】
図４に示されるデータに対して、図５に示されるプログラムが実行されると、その結果、下記のようなデータが生成される。
ＳＵＢ［１］［１］＝ＤＭ０
ＳＵＢ［１］［２］＝ＤＭ１
ＳＵＢ［１］［３］＝ＤＭ２
ＳＵＢ［２］［１］＝ＤＭ１０
ＳＵＢ［２］［２］＝ＥＭ０
ＳＵＢ［２］［３］＝ＷＲ１０
ここで、データのフォーマットは、ＰＬＣ１［ＳＵＢ＿Ｎｏ］［設定値］とされている。
【００３６】
以上得られたデータに基づく描画処理のフローチャートが図６に示されている。同図において処理が開始されると、ステップ６０１においては、初期化処理（ｉ＝１，ｊ＝１）が実行される。
【００３７】
続くステップ６０２においては、描画用の演算処理（描画［ｉ］［ｊ］＝ＰＬＣ１［ｉ］［ｊ］が実行される。続くステップ６０３においては、画素の更新処理（ｊ＝ｊ＋１）が行われる。続くステップ６０４においては、ＰＬＣ１［ｉ］［ｊ］の値が０であるか否かの判定を行う。
【００３８】
ここで判定結果が０であれば、ステップ６０２へ戻って、以上の処理が繰り返される。これに対して、判定結果が０であれば（ステップ６０４ＹＥＳ）、ステップ６０５へ進んで、画素の更新処理（ｊ＝１，ｉ＝ｉ＋１）が実行される。
【００３９】
続くステップ６０６では、ＰＬＣ１［ｉ］［ｊ］が０であるか否かの判定が行われる。ここで判定結果が０でなければ（ステップ６０６ＮＯ）、ステップ６０２へ戻って同様な処理が実行されるのに対し、判定結果が０であれば（ステップ６０６ＹＥＳ）、プログラムの実行は終了する。
【００４０】
このような描画処理によってパソコンの画面上に得られた解析結果の表示例の説明図が図７に示されている。同図に示されるように、この表示態様によれば、サブルーチン内で使用しているメモリがひと目でわかる。
【００４１】
最後に、より具体的な例を挙げて、サブルーチンの解析処理について説明する。
【００４２】
サブルーチン内メモリ使用状況の一例を示す図が図８に、解析結果の表示例を示す図が図９にそれぞれ示されている。
【００４３】
図８に示されるＰＬＣのプログラムは、制御Ａ（タスク）と制御Ｂ（タスク）とからなる２個のタスクを含んでいる。制御Ａ（タスク）内には、制御Ａ＿１（セクション）が含まれ、さらにこの制御Ａ＿１（セクション）内にはＳＵＢ１（サブルーチン）が含まれている。
【００４４】
同様にして、制御Ｂ（タスク）内には制御Ｂ＿１（セクション）が含まれており、この制御Ｂ＿１（セクション）内には、ＳＵＢ２（サブルーチン）とＳＵＢ３（サブルーチン）とからなる２個のサブルーチンが含まれている。
【００４５】
一方、ＰＬＣのメモリ内には、入出力リレー領域、内部補助リレー領域、保持リレー領域、特殊補助リレー領域、データメモリ領域、拡張データメモリ領域がそれぞれ設けられている。
【００４６】
それらの中で、内部補助リレー領域は、制御Ａ（タスク）内に存在するＳＵＢ１（サブルーチン）と制御Ｂ（タスク）内に含まれるＳＵＢ２（サブルーチン）とで共用される。
【００４７】
また、メモリ内のデータメモリ領域は、制御Ｂ（タスク）内の制御Ｂ＿１（セクション）とＳＵＢ３（サブルーチン）とで共用される。
【００４８】
換言すれば、このＰＬＣのプログラムは、２つのタスク（制御Ａ，制御Ｂ）と２つのセクション（制御Ａ＿１，制御Ｂ＿１）から構成され、図示のように同じメモリを複数のサブルーチンで共有していることとなる。
【００４９】
このようなＰＬＣのプログラムを解析すると、図９に示されるような解析結果の表示が得られる。図から明らかなように、この表示例にあっては、パソコンの画面上には横長長方形状の領域が描かれ、この領域は左右方向へ３列に分割される。各分割領域には、サブルーチン、リンク先サブルーチン、リンク点数がそれぞれ割り付けられる。
【００５０】
サブルーチンは、左右方向３列にさらに分割され、左から順にサブルーチン、タスク、セクションがそれぞれ割り付けられる。
【００５１】
サブルーチン列は、上下３段に分割され、順にＳＵＢ１，ＳＵＢ２，ＳＵＢ３が割り付けられる。
【００５２】
タスクの列は、同様にして各サブルーチンに対応させて、制御Ａ，制御Ｂ，制御Ｂといったように、タスクの種別が格納される。
【００５３】
さらに、セクションの列についても、制御Ａ，制御Ｂ内にそれぞれ含まれるセクションが、制御Ａ＿１，制御Ｂ＿１，制御Ｂ＿１のように割り付けられる。
【００５４】
同様に、リンク先サブルーチンの列についても、左右方向３列に分割され、左から順にサブルーチン、タスク、セクションがそれぞれ割り付けられる。
【００５５】
サブルーチンの列は、さらに上下に３段に分割され、先ほどと同様にサブルーチンのそれぞれが、ＳＵＢ２，ＳＵＢ１，なしといったように割り付けられる。
【００５６】
また、タスクの列については、各サブルーチンに対応して上下３段に分割され、順に制御Ｂ，制御Ａ，制御Ｂのように割り付けられる。
【００５７】
さらに、セクションの列についても、上下３段に分割され、各段には順に制御Ｂ＿１，制御Ａ＿１，制御Ｂ＿１のように各タスク内のセクションが割り付けられる。
【００５８】
最後に、リンク点数の列については、左右方向５列に分割され、各列には入出力リレー、内部補助リレー、保持リレー、特殊補助リレー、データメモリ等のメモリエリア種別がそれぞれ割り付けられる。このリンク点数は、メモリエリアの種別毎にサブルーチン間で重複使用されているメモリのサイズを表している。例えば、表示例のデータ列の１行目からは、ＳＵＢ１とＳＵＢ２との間で内部補助リレーが１０点分重複使用されていることがわかる。また、３行目からは、ＳＵＢ３と制御Ｂ（タスク）の制御Ｂ＿１（セクション）との間でデータメモリが２０点分重複使用されていることがわかる。
【００５９】
このような表示態様によれば、サブルーチン間の相関が表示され、サブルーチン間のメモリ使用状況／共有状況を的確に把握することが可能となる。
【００６０】
次に、サブルーチン階層構造の例が図１０に示されている。プログラム内で部品化できる箇所、または再利用できる箇所をサブルーチンにするのが通例である。また、プログラム内の複数のサブルーチンはそれらの使用状況により階層構造が構成されている。複数セクション（制御１〜制御５）からサブルーチン（ＳＵＢ．１〜ＳＵＢ．１０）が呼び出されて、サブルーチンの階層構造になっている例をもとに解説する。なお、図中矢印（→）はサブルーチンの呼び出しを行っていることを示している。
【００６１】
図から明らかなように、階層０にある制御１は、階層１にあるＳＵＢ．１（Ａ）とＳＵＢ．２（Ａ）とを呼び出す。同様にして、階層０にある制御２は、階層１にあるＳＵＢ．１（Ａ）およびＳＵＢ．２（Ａ）を呼び出す。
【００６２】
階層０にある制御３は、階層１にあるＳＵＢ．３（Ａ）を呼び出す。階層０にある制御４は、階層２にあるＳＵＢ．６（Ｃ）を呼び出す。階層０にある制御５は、階層２にあるＳＵＢ．７（Ｃ）を呼び出す。階層１にあるＳＵＢ．１（Ａ）は、階層２にあるＳＵＢ．４（Ｂ）およびＳＵＢ．５（Ｂ）を呼び出す。階層１にあるＳＵＢ．３（Ａ）は、階層２にあるＳＵＢ．６（Ｃ）とＳＵＢ．７（Ｃ）とを呼び出す。階層２にあるＳＵＢ．４（Ｂ）は、階層３にあるＳＵＢ．８（Ｂ）を呼び出す。階層２にあるＳＵＢ．６（Ｃ）は、階層３にあるＳＵＢ．９（Ｂ）を呼び出す。
【００６３】
サブルーチンの分類を示す図が図１１に示されている。同図に示されるように、図１０に示されたサブルーチンの階層構造は、図１１の表に示されるように分類される。
【００６４】
すなわち、第１の分類は、単独ないし複数の通常プログラムからのみコールされるサブルーチンであり、図１０において（Ａ）に相当する。
【００６５】
第２の分類は、単独ないし複数のサブルーチンからのみコールされるサブルーチンであって、図１０における（Ｂ）に相当する。
【００６６】
第３の分類は、通常プログラムとサブルーチンの両方からコールされるサブルーチンであり、図１０の（Ｃ）に相当する。
【００６７】
第４の分類は、全くコールされていないサブルーチンであり、図１０の（Ｄ）に相当する。
【００６８】
最後に、サブルーチン使用例を示す図が図１２に、サブルーチン解析結果の表示例が図１３にそれぞれ示されている。本発明によれば、図１２に示されるように、複数のサブルーチンが存在する場合、これを本発明に従って解析することによって、図１３に示されるような表示が得られる。このような表示態様によれば、階層（サブルーチンの呼び出し状況）を的確に把握することができる。
【００６９】
このように本発明によれば、複数のプログラムモジュールと複数のサブルーチンプログラムで構成される制御プログラムを解析する制御プログラムの開発支援装置であって、制御プログラムを読み出し、使用されているメモリアドレスのサブルーチンプログラム間や、サブルーチンプログラムとサブルーチンプログラムを呼び出すプログラムモジュール間での重複使用状況を解析する解析手段と、解析手段で解析した結果を表示する解析表示手段とを備え、サブルーチンプログラム毎に他のサブルーチンプログラムやサブルーチンプログラムを呼び出すプログラムモジュールとの使用メモリアドレスの重複使用状況を表示可能としたものである。
【００７０】
以上の実施例で説明したサブルーチンの他の実施例としては、ＰＬＣのユーザプログラムを記述するラダー図等で使用されるファンクションブロックにも適用できることは言うまでもない。
【産業上の利用可能性】
【００７１】
本発明によれば、あるプログラムモジュール内に使用されているメモリが他のサブルーチンプログラムやサブルーチンプログラムを呼び出すプログラムモジュールでも使用されているかどうかを一目で理解できるような表示をユーザに提供することができる。
【図面の簡単な説明】
【００７２】
【図１】サブルーチン間でのメモリ使用状況の説明図である。
【図２】サブルーチン間のメモリ使用状況の解析処理を示すフローチャートである。
【図３】ユーザプログラムの構造の一例を示す説明図である。
【図４】パソコンのＲＡＭ内に保存されたデータの説明図である。
【図５】ＳＵＢ単位使用のメモリ一覧表示処理のフローチャートである。
【図６】描画処理のフローチャートである。
【図７】解析結果の表示例の説明図である。
【図８】サブルーチン内メモリ使用状況の一例を示す図である。
【図９】解析結果の表示例を示す図である。
【図１０】サブルーチン階層構造例を示す図である。
【図１１】サブルーチンの分類を示す図である。
【図１２】サブルーチン使用例を示す図である。
【図１３】サブルーチン解析結果の表示である。
【図１４】クロスリファレンス表示例を示す図である。
【符号の説明】
【００７３】
ＳＵＢ  サブルーチン
（Ａ）〜（Ｄ）  メモリ領域
【図１】
2006294013.tif 000003
【図２】
2006294013.tif 000004
【図３】
2006294013.tif 000005
【図４】
2006294013.tif 000006
【図５】
2006294013.tif 000007
【図６】
2006294013.tif 000008
【図７】
2006294013.tif 000009
【図８】
2006294013.tif 000010
【図９】
2006294013.tif 000011
【図１０】
2006294013.tif 000012
【図１１】
2006294013.tif 000013
【図１２】
2006294013.tif 000014
【図１３】
2006294013.tif 000015
【図１４】
2006294013.tif 000016