(57)【要約】【課題】異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見すること。【解決手段】制御装置１０において実行される複数の異なるプログラミング言語を開発するための開発支援装置５０であって、予め作成された共有変数リファレンスであって、複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数のための共有変数リファレンスＴＢＬ１と、複数の異なるプログラミング言語のソースコードを入力する入力部７１と、共有変数リファレンスＴＢＬ１に基づいて、入力された複数の異なるプログラミング言語のソースコードにおいて、共有変数が参照されているか否かを判定する判定部７３ｄとを備える。【選択図】図３
2019160079.tif 000002
【特許請求の範囲】
【請求項１】
制御装置において実行される複数の異なるプログラミング言語を開発するための開発支援装置であって、
予め作成された共有変数リファレンスであって、前記複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数のための共有変数リファレンスと、
前記複数の異なるプログラミング言語のソースコードを入力する入力部と、
前記共有変数リファレンスに基づいて、入力された前記複数の異なるプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定する判定部と、
を備える開発支援装置。
【請求項２】
エラーメッセージを出力するエラーメッセージ出力部を備え、
前記判定部は、
前記複数の異なるプログラミング言語のソースコードのうち、一のプログラミング言語のソースコード中において前記共有変数が参照されていると判定した場合に、当該参照されている前記共有変数が、他のプログラミング言語のソースコード中において参照されているか否かを判定し、参照されていないと判定された場合には、エラー状態であることを出力し、
前記エラーメッセージ出力部は、前記判定部により、前記エラー状態であることが出力された場合には、エラーメッセージを出力する、
請求項１に記載の開発支援装置。
【請求項３】
エラーメッセージを出力するエラーメッセージ出力部を備え、
前記判定部は、
前記共有変数が、前記複数の異なるプログラミング言語のソースコード中における、いずれのプログラミング言語のソースコード中においても参照されていないと判定した場合、または、いずれかのプログラミング言語のソースコード中おいてのみ参照されていると判定した場合には、エラー状態であることを出力し、
前記エラーメッセージ出力部は、前記判定部により、前記エラー状態であることが出力された場合には、エラーメッセージを出力する、
請求項１に記載の開発支援装置。
【請求項４】
前記複数の異なるプログラミング言語のソースコード、および前記ソースコードのアウトラインの少なくともいずれか一方を表示する表示部と、
前記表示部に表示される前記共有変数を選択する選択部と、
前記判定部により、前記共有変数が参照されていると判定された場合に、当該ソースコードにおける前記前記共有変数の参照箇所を特定する参照部と、を備え、
前記判定部は、
前記表示部に表示される前記複数の異なるプログラミング言語のソースコードまたはアウトラインのうち、一のプログラミング言語のソースコードまたはアウトラインにおいて、前記選択部により前記共有変数が選択された場合に、当該一のプログラミング言語のソースコード、および他のプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定する、
請求項１に記載の開発支援装置。
【請求項５】
制御装置において実行される複数の異なるプログラミング言語を開発するための開発支援方法であって、
前記複数の異なるプログラミング言語のソースコードを入力するステップと、
予め作成された共有変数リファレンスであって、前記複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数のための共有変数リファレンスに基づいて、入力された前記複数の異なるプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定するステップと、
を備える開発支援方法。
【請求項６】
制御装置において実行される複数の異なるプログラミング言語を開発するための開発支援装置の開発支援プログラムであって、前記プログラムは、コンピュータに、
前記複数の異なるプログラミング言語のソースコードを入力するステップと、
予め作成された共有変数リファレンスであって、前記複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数のための共有変数リファレンスに基づいて、入力された前記複数の異なるプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定するステップと、
を実行させる開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、制御装置において実行される複数の異なるプログラミング言語を開発するための開発支援装置、開発支援方法、および開発支援プログラムに関する。
【背景技術】
【０００２】
ロボットを制御するシステムにおいては、ロボット制御に用いるプログラムは、例えばＶ＋言語で作成し、シーケンス制御に用いるプログラムは、例えば、国際電気標準会議（International Electrotechnical Commission:ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラム言語（以下、ＩＥＣ言語とする）で作成している。
【０００３】
これらのプログラムを用いてロボットのアプリケーションを構築するためには、両プログラム間でデータをやり取りしてタイミングを合わせるためのインタロック処理を行ったり、あるいは片方の言語側でなければ取得できないデータをもう片方の言語側と共有したりすることが必要になる。
【０００４】
従来は、特許文献１のように、ロボット制御に用いるプログラムを実行するプロセッサと、シーケンス制御に用いるプログラムに用いるプログラムを実行するプロセッサとを、共有メモリによりバス結合し、両プログラム間でのデータのやり取りを行っている。
【０００５】
このようなデータのやり取りは、両プログラムにおいては、それぞれのプログラムで同一名称の共有変数を定義することで行われる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−７２９２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、両言語のプログラムは異なる画面で作成され、通常、別々の担当者により作成される。したがって、両言語のプログラム間のインタフェースとして取り決めた共有変数を、実装し忘れたり、あるいは、共有変数名を誤って実装したりする場合には、両プログラムが正しく機能しないことが発生すると想定される。 
【０００８】
そこで、この発明の課題は、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することのできる開発支援装置、開発支援方法、および開発支援プログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、この開示の開発支援装置は、
制御装置において実行される複数の異なるプログラミング言語を開発するための開発支援装置であって、
予め作成された共有変数リファレンスであって、前記複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数のための共有変数リファレンスと、
前記複数の異なるプログラミング言語のソースコードを入力する入力部と、
前記共有変数リファレンスに基づいて、入力された前記複数の異なるプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定する判定部と、
を備えることを特徴とする。
【００１０】
上述の開発支援装置では、複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数が定義されると、当該共有変数のための共有変数リファレンスが作成される。共有変数リファレンスは、開発支援装置に入力されるようにしてもよいし、あるいは、開発支援装置がアクセス可能な外部装置に記憶されていてもよい。
【００１１】
複数の異なるプログラミング言語のソースコードは、前記開発支援装置とは別の装置で作成され、前記開発支援装置の入力部により前記開発支援装置に入力される。
【００１２】
前記開発支援装置の判定部は、前記共有変数リファレンスを参照して前記共有変数を読み取り、入力された前記複数の異なるプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定する。
【００１３】
上述の開発支援装置によれば、共有変数リファレンスに基づいて、複数の異なるプログラミング言語のソースコードにおいて共有変数が参照されているか否かが判定されるので、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することが可能となる。
【００１４】
一実施形態の開発支援装置は、
エラーメッセージを出力するエラーメッセージ出力部を備え、
前記判定部は、
前記複数の異なるプログラミング言語のソースコードのうち、一のプログラミング言語のソースコード中において前記共有変数が参照されていると判定した場合に、当該参照されている前記共有変数が、他のプログラミング言語のソースコード中において参照されているか否かを判定し、参照されていないと判定された場合には、エラー状態であることを出力し、
前記エラーメッセージ出力部は、前記判定部により、前記エラー状態であることが出力された場合には、エラーメッセージを出力する、
ことを特徴とする。
【００１５】
この一実施形態の開発支援装置では、判定部は、複数の異なるプログラミング言語のソースコードのうち、一のプログラミング言語のソースコード中において共有変数が参照されているかどうかを判定する。一のプログラミング言語のソースコード中において共有変数が参照されていると判定した場合には、参照されている共有変数が、他のプログラミング言語のソースコード中において参照されているか否かを判定する。その結果、参照されていないと判定された場合には、エラー状態であることを出力し、エラーメッセージを出力する。
【００１６】
上述の開発支援装置によれば、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することができる。
【００１７】
一実施形態の開発支援装置は、
エラーメッセージを出力するエラーメッセージ出力部を備え、
前記判定部は、
前記共有変数が、前記複数の異なるプログラミング言語のソースコード中における、いずれのプログラミング言語のソースコード中においても参照されていないと判定した場合、または、いずれかのプログラミング言語のソースコード中おいてのみ参照されていると判定した場合には、エラー状態であることを出力し、
前記エラーメッセージ出力部は、前記判定部により、前記エラー状態であることが出力された場合には、エラーメッセージを出力する、
ことを特徴とする。
【００１８】
この一実施形態の開発支援装置では、判定部は、共有変数が、複数の異なるプログラミング言語のソースコード中において参照されているか否かを判定する。いずれのプログラミング言語のソースコード中においても参照されていないと判定した場合にはエラー状態であることを出力し、エラーメッセージを出力する。また、いずれかのプログラミング言語のソースコード中おいてのみ参照されていると判定した場合にも、エラー状態であることを出力し、エラーメッセージを出力する。
【００１９】
上述の開発支援装置によれば、共有変数の実装漏れ、共有変数名の誤り、無駄な共有変数の存在等を確認することができ、プログラムのデバッグを円滑に行うことが可能となる。
【００２０】
一実施形態の開発支援装置は、
前記複数の異なるプログラミング言語のソースコード、および前記ソースコードのアウトラインの少なくともいずれか一方を表示する表示部と、
前記表示部に表示される前記共有変数を選択する選択部と、
前記判定部により、前記共有変数が参照されていると判定された場合に、当該ソースコードにおける前記前記共有変数の参照箇所を表示する参照部と、を備え、
前記判定部は、
前記表示部に表示される前記複数の異なるプログラミング言語のソースコードまたはアウトラインのうち、一のプログラミング言語のソースコードまたはアウトラインにおいて、前記選択部により前記共有変数が選択された場合に、当該一のプログラミング言語のソースコード、および他のプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定する、
ことを特徴とする。
【００２１】
この一実施形態の開発支援装置では、判定部は、表示部に表示される複数の異なるプログラミング言語のソースコードまたはアウトラインのうち、一のプログラミング言語のソースコードまたはアウトラインにおいて、選択部により共有変数が選択されたかどうかを判断する。判断の結果、共有変数が選択された場合には、この一のプログラミング言語のソースコードだけでなく、他のプログラミング言語のソースコードにおいても、共有変数が参照されているか否かを判定する。
【００２２】
上述の開発支援装置によれば、共有変数が、全てのプログラムにおいて正しく参照されているか否かを容易に把握することができる。その結果、共有変数の実装漏れ、共有変数名の誤り、無駄な共有変数の存在等を確認することができ、プログラムのデバッグを円滑に行うことが可能となる。
【００２３】
上記課題を解決するため、この開示の開発支援方法は、
制御装置において実行される複数の異なるプログラミング言語を開発するための開発支援方法であって、
前記複数の異なるプログラミング言語のソースコードを入力するステップと、
予め作成された共有変数リファレンスであって、前記複数の異なるプログラミング言語のソースコードにおいて参照され、メモリを共有する共有変数のための共有変数リファレンスに基づいて、入力された前記複数の異なるプログラミング言語のソースコードにおいて、前記共有変数が参照されているか否かを判定するステップと、を備える、
ことを特徴とする。
【００２４】
この開示の開発支援方法によれば、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することができる。
【００２５】
上記課題を解決するため、この開示の開発支援プログラムは、上記開発支援方法をコンピュータに実行させるためのプログラムである。
【００２６】
この開示のプログラムをコンピュータに実行させることによって、上記開発支援方法を実施することができる。
【発明の効果】
【００２７】
以上より明らかなように、この開示の開発支援装置、開発支援方法および開発支援プログラムによれば、共有変数リファレンスに基づいて、複数の異なるプログラミング言語のソースコードにおいて共有変数が参照されているか否かが判定されるので、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することができる。
【図面の簡単な説明】
【００２８】
【図１】第１実施形態におけるロボット制御システム１００の概略構成を示すブロック図である。
【図２】開発支援装置のハードウエア構成を示す図である。
【図３】開発支援装置の機能ブロック図である。
【図４】表示装置に表示される表示画面を示す図である。
【図５】アーム型ロボットとエンドエフェクタの動作を説明する図である。
【図６】図５に示す動作を実現するためのＶ＋言語によるプログラムとＩＥＣ言語によるプログラムのフローチャートである。
【図７】図５に示す動作を実現するためのＶ＋言語によるプログラムとＩＥＣ言語によるプログラムを示す図である。
【図８】共有変数のチェック処理の流れを示すフローチャートである。
【図９】共有変数のチェック処理の流れを示すフローチャートである。
【図１０】リファレンス情報表示部に表示されたグローバル変数テーブルの例を示す図である。
【図１１】エラーメッセージボックスの一例を示す図である。
【図１２】図１２（Ａ）は部品が実装された基板をヒートシンクに取り付ける処理を示す図であり、図１２（Ｂ）は図１２（Ａ）の処理を第２実施形態におけるアーム型ロボットとエンドエフェクタにより実行する際のこれらの動作を説明するための図である。
【図１３】図１２（Ｂ）に示す動作を実現するためのＶ＋言語によるプログラムとＩＥＣ言語によるプログラムのフローチャートである。
【図１４】図１２（Ｂ）に示す動作を実現するためのＶ＋言語によるプログラムとＩＥＣ言語によるプログラムの一例を示す図である。
【図１５】グローバル変数テーブルの一例を示す図である。
【図１６】第３実施形態におけるプロジェクトメニューの一例を示す図である。
【図１７】共有変数のチェック処理の流れを示すフローチャートである。
【図１８】クロスリファレンス表示画面の一例を示す図である。
【図１９】ラダー言語で記述されたプログラムの一例を示す図である。
【図２０】ＳＴ言語で記述されたプログラムの一例を示す図である。
【図２１】Ｖ＋言語で記述されたプログラムの一例を示す図である。
【図２２】アウトプットウィンドウの一例を示す図である。
【図２３】第４実施形態における開発支援装置の機能ブロック図である。
【図２４】プログラム表示部に表示されるＶ＋言語で記述されたプログラムのソースコードと、ＩＥＣ言語で記述されたプログラムのソースコードの例を示す図である。
【図２５】共有変数チェック処理の流れを示すフローチャートである。
【図２６】クロスリファレンスウィンドウの一例を示す図である。
【発明を実施するための形態】
【００２９】
以下、この発明の実施の形態を、図面を参照しながら詳細に説明する。
【００３０】
（第１実施形態）
図１は、第１実施形態におけるロボット制御システム１００の概略構成を示すブロック図である。図１に示すように、ロボット制御システム１００は、コントローラ（制御装置）１０と、アーム型ロボット２０と、エンドエフェクタコントローラ３０と、エンドエフェクタ４０と、開発支援装置５０とを備える。
【００３１】
コントローラ１０は、一例として、ＰＬＣ（Programmable Logic Controller）であり、アーム型ロボット２０の動作を制御するロボット制御プログラムと、エンドエフェクタ４０の動作を制御するシーケンス制御プログラムとを実行し、制御信号を出力する。
【００３２】
アーム型ロボット２０は、一例として、６軸の垂直多関節ロボットであり、コントローラ１０と通信可能に接続されている。アーム型ロボット２０は、サーボモータ等の動力源を備えており、ロボット制御プログラムに基づいてコントローラ１０から出力される制御信号によりサーボモータを駆動し、各関節軸を動作させる。
【００３３】
エンドエフェクタコントローラ３０は、コントローラ１０と通信可能に接続されている。エンドエフェクタコントローラ３０は、シーケンス制御プログラムに基づいてコントローラ１０から出力される制御信号により、エンドエフェクタ４０内のサーボモータを駆動する。
【００３４】
エンドエフェクタ４０は、アーム型ロボット２０の先端部に取り付けられ、一例として、部品を把持する機構等を備えている。エンドエフェクタ４０は、エンドエフェクタコントローラ３０と通信可能に接続されており、エンドエフェクタコントローラ３０から出力される制御信号に基づいて、エンドエフェクタ４０内のサーボモータを駆動し、部品の把持等の動作を行う。
【００３５】
開発支援装置５０は、一例として、パーソナルコンピュータ等のコンピュータであり、コントローラ１０と通信可能に接続されている。開発支援装置５０は、コントローラ１０で実行されるロボット制御プログラムおよびシーケンス制御プログラムをコントローラ１０にダウンロードする機能、これらのプログラムをデバッグする機能、並びに、これらのプログラムをシミュレートする機能等を有している。
【００３６】
本実施形態では、開発支援装置５０は、第１プログラミング端末６０および第２プログラミング端末６１と通信可能に接続されている。ロボット制御プログラムは、パーソナルコンピュータ等の第１プログラミング端末６０により作成され、開発支援装置５０にダウンロードされる。また、シーケンス制御プログラムは、パーソナルコンピュータ等の第２プログラミング端末６１により作成され、開発支援装置５０にダウンロードされる。なお、ロボット制御プログラムおよびシーケンス制御プログラムは、開発支援装置５０において作成するようにしてもよい。
【００３７】
開発支援装置５０は、コンピュータに、予めインストールしてあるソフトウェアを起動することにより、上述の機能を実現する。このソフトウェアには、本発明の開発支援プログラムが含まれている。開発支援装置５０のハードウエア構成は、図２に示すように、入力装置５１と、表示装置５２と、中央演算装置５３と、記憶装置５４と、通信Ｉ／Ｆ５５とを備えている。入力装置５１は、一例として、キーボード，ポインティングデバイスから構成される。表示装置５２は、一例として、ディスプレイから構成される。中央演算装置１３は、一例として、ＣＰＵから構成される。記憶装置１４は、不揮発性記憶装置と揮発性記憶装置とを備えており、不揮発性記憶装置は、ロボット制御プログラムおよびシーケンス制御プログラムの他、後述するアウトライン情報、クロスリファレンス情報、およびグローバル変数テーブル等を記憶する。また中央演算装置１３の実行時のワークメモリとして揮発性記憶装置が適宜使用される。通信Ｉ／Ｆ５５は、例えば、ＲＳ２３２Ｃ等のシリアル回線のインタフェースであり、コントローラ１０との通信を行う。通信Ｉ／Ｆ５５他の通信回線のインタフェースでもよい。
【００３８】
図３は、本実施形態における開発支援装置５０の機能ブロック図である。開発支援装置５０は、入力処理部７１、表示処理部７２、演算部７３、記憶部７４、および通信処理部７５として機能する。入力処理部７１は、入力装置５１からの入力を処理する。表示処理部７２は、表示装置５２に出力する表示データを作成する。演算部７３はユーザプログラム編集部７３ａ、アウトライン情報生成部７３ｂ、クロスリファレンス情報生成部７３ｃ、および判定部７３ｄを含む。演算部７３のこれらの機能の詳細については後述する。記憶部７４は、ユーザプログラム記憶部７４ａ、アウトライン情報記憶部７４ｂ、クロスリファレンス情報記憶部７４ｃ、およびグローバル変数テーブル記憶部７４ｄを含む。これらの記憶部の詳細については後述する。
【００３９】
図４は、表示装置５２に表示される表示画面を示している。図４に示すように、表示装置５２の表示画面は、プログラム表示部５２ａと、アウトライン情報表示部５２ｂと、リファレンス情報表示部５２ｃとを備えている。プログラム表示部５２ａは、ロボット制御プログラムおよびシーケンス制御プログラムのソースコードを表示する。アウトライン情報表示部５２ｂは、ロボット制御プログラムおよびシーケンス制御プログラムの構成を示すアウトライン情報を表示する。
【００４０】
アウトライン情報表示部５２ｂに表示するアウトライン情報は、アウトライン情報生成部７３ｂが作成し、記憶部７４内のアウトライン情報記憶部７４ｂに格納する。そして、表示処理部７２は、プログラム表示部５２ａに表示されているロボット制御プログラムまたはシーケンス制御プログラムプログラムについてのアウトライン情報をアウトライン情報表示部５２ｂに表示する。
【００４１】
アウトライン情報は、ロボット制御プログラムやシーケンス制御プログラムの構成の概要を示す情報のことであり、ロボット制御プログラムやシーケンス制御プログラムに使用されている所定の構成要素をそのプログラムの先頭から順に抽出したものである。
【００４２】
リファレンス情報表示部５２ｃは、リファレンス対象入力欄５２ｃ−１と、リファレンス情報表示欄５２ｃ−２とを備えている。リファレンス対象入力欄５２ｃ−１に、オペランドを入力することに、このオペランドと同一のオペランドを持つ命令についてのクロスリファレンス情報が、リファレンス情報表示欄５２ｃ−２に表示される。また、リファレンス対象入力欄５２ｃ−１に、共有変数を入力することにより、この共有変数を使用する命令についてのクロスリファレンス情報が、リファレンス情報表示欄５２ｃ−２に表示される。
【００４３】
本実施形態では命令のオペランドに相当する接点番号やメモリ番号にそれぞれ対応させて変数名をつけることができ、変数名を用いたプログラム編集が可能となっている。プログラム表示部５２ａ、アウトライン情報表示部５２ｂ、およびリファレンス情報表示部５２ｃにもオペランドを変数名で表示することができる。もちろん、このような変数名を利用せずに、接点番号や、メモリ番号を利用して表示してもよい。
【００４４】
本実施形態では、ロボット制御プログラムとシーケンス制御プログラムとの双方で参照される共有変数のチェックが可能となっている。共有変数のチェックを行う場合には、リファレンス情報表示部５２ｃのリファレンス対象入力欄５２ｃ−１に共有変数を入力することにより、リファレンス情報表示欄５２ｃ−２にクロスリファレンス情報が表示される。詳しくは後述する。
【００４５】
次に、本実施形態における共有変数のチェック処理について説明する。本実施形態では、一例として、アーム型ロボットをワークの位置まで移動させ、エンドエフェクタでワークを掴み、その状態でアーム型ロボットを別の位置に移動させる場合のプログラムにおける共有変数のチェック処理について説明する。ロボット制御プログラムは、本実施形態では、Ｖ＋言語を用いている。シーケンス制御プログラムは、ＩＥＣ言語で記述されたプログラムであり、本実施形態では、一例として、ＳＴ言語を用いている。
【００４６】
図５は、アーム型ロボットとエンドエフェクタの以上のような動作を説明する図である。図６は、以上のような動作を実現するためのＶ＋言語によるプログラムとＩＥＣ言語によるプログラムのフローチャートである。図７は、以上のような動作を実現するためのＶ＋言語によるプログラムとＩＥＣ言語によるプログラムのソースコードを示す図である。
【００４７】
この例では、図５に示すように、まず、アーム型ロボット２０のアーム２０ａを、ワークWの近くまで移動させる（Ｓ１：ロボットアームの移動）。次に、エンドエフェクタ４０を移動させてエンドエフェクタ４０によりワークＷをピックする（Ｓ２：ロボットアームの移動）。この間、アーム型ロボット２０は、ワークＷのピックが完了するまで待機する（Ｓ３：ワークのピック完了まで待つ）。そして、ワークＷのピックが完了すると、アーム型ロボット２０のアーム２０ａを、別の位置まで移動させる（Ｓ４：ロボットアームの移動）。
【００４８】
以上のような動作を、図６のフローチャートで説明する。図６に示すように、ロボット制御プログラムであるＶ＋言語で記述されたプログラムでは、まず、アーム型ロボット２０のアーム２０ａを、ワークWの近くの所定位置まで移動させる（Ｓ１）。次に、アーム型ロボット２０のアーム２０ａの所定位置への移動が完了すると、共有変数を用いてタイミングフラグをＯＮにする（Ｓ１−１）。この共有変数は、ＩＥＣ言語で記述されたプログラムにおいても参照されており、タイミングフラグをＯＮすることは、ＩＥＣ言語で記述されたプログラムに対してのエンドエフェクタの制御の実行通知になっている。
【００４９】
ＩＥＣ言語で記述されたプログラムは、タイミングフラグがＯＮになると、エンドエフェクタ４０の制御を開始し、ワークＷをピックする（Ｓ２）。この間、Ｖ＋言語で記述されたプログラムは待機する（Ｓ３）。ＩＥＣ言語で記述されたプログラムは、エンドエフェクタ４０によるワークＷのピックが完了すると、共有変数を用いてタイミングフラグをＯＦＦにする（Ｓ３−１）。タイミングフラグをＯＦＦすることは、Ｖ＋言語で記述されたプログラムに対してのエンドエフェクタの制御の完了通知になっている。Ｖ＋言語で記述されたプログラムは、タイミングフラグがＯＦＦになると、アーム型ロボット２０のアーム２０ａを、別位置まで移動させる（Ｓ４）。
【００５０】
図７に示す例では、reqHandCloseが共有変数として用いられており、reqHandCloseは、Ｖ＋言語で記述されたプログラムとＩＥＣ言語で記述されたプログラムとの両方で参照されている。reqHandClose = TRUE という文がタイミングフラグをＯＮにすることを表しており、reqHandClose = FALSE という文がタイミングフラグをＯＦＦにすることを表している。
【００５１】
以上のように、本実施形態では、Ｖ＋言語で記述されたプログラムとＩＥＣ言語で記述されたプログラムとの間で、reqHandCloseという共有変数をお互いに確認することにより、アーム型ロボット２０とエンドエフェクタ４０の動作を制御している。したがって、いずれかのプログラムでreqHandCloseという共有変数を用いることを忘れてしまったり、あるいは、reqHandCloseとは異なる名称の共有変数を用いたりした場合には、プログラムがそこで停止し、アーム型ロボット２０とエンドエフェクタ４０が所期の動作を行わないということになる。
【００５２】
そこで、本実施形態では、このような共有変数の実装ミスを防ぐために、ＩＥＣ言語で記述されたプログラムのコンパイル処理時、共有変数のチェック処理を行っている。図８および図９は、本実施形態における共有変数のチェック処理の流れを示すフローチャートである。
【００５３】
図８においては、共有変数のチェック処理以外のコンパイル処理に必要なステップの記載を省略している。開発支援装置５０にＶ＋言語で記述されたプログラムとＩＥＣ言語で記述されたプログラムがダウンロードされ、コンパイル処理が開始されると、開発支援装置５０の入力処理部７１は、ソースコードＡの読み込み（Ｓ１０）と、ソースコードＢの読み込み（Ｓ１１）を行う。この例では、Ｖ＋言語で記述されたプログラムのソースコードをソースコードＡとし、ＩＥＣ言語で記述されたプログラムのソースコードをソースコードＢとしている。
【００５４】
ソースコードＡとソースコードＢの読み込みが完了すると、判定部７３ｄは、共有変数チェック処理を行う（Ｓ１２）。図９は、共有変数チェック処理のサブルーチンを示すフローチャートである。図９に示すように、中央演算装置５３は、まず、ソースコードＡにおける共有変数の存在確認を行う。共有変数の存在確認は、図１０に示すグローバル変数テーブルＴＢＬ１を用いて行う。
【００５５】
グローバル変数テーブルＴＢＬ１は、本実施形態では、第２プログラミング端末６１において、ＩＥＣ言語でプログラムを作成する際に作成され、ＩＥＣ言語で記述されたプログラムを開発支援装置５０にダウンロードする際に一緒にダウンロードされる。
【００５６】
共有変数のチェックを行う場合、プログラム表示部５２ａに表示させたグローバル変数テーブルＴＢＬ１に共有変数をあらかじめ登録する必要がある。
【００５７】
図１０に示すように、グローバル変数テーブルＴＢＬ１は、共有変数の名称を示す欄、データ型を示す欄、変数共有を行うか否かを示す欄、共有変数チェックを行うか否かを示す欄等を有している。変数共有を行うか否かを示す欄、および共有変数チェックを行うか否かを示す欄が設けられているのは、後に使用する可能性のある共有変数を予約しておくこと等を考慮したものである。
【００５８】
図１０に示す例では、変数reqHandCloseにおける変数共有を行うか否かを示す欄のチェックボックスにチェックが付けられ、さらに共有変数チェックを行うか否かを示す欄のチェックボックスにチェックが付けられている。中央演算装置５３は、グローバル変数テーブルＴＢＬ１から共有変数reqHandCloseを読み取り、ソースコードＡ、つまり、ＩＥＣ言語で記述されたプログラムのソースコードに、共有変数が記述されているかどうかを確認する（Ｓ２０）。この例の場合には、共有変数reqHandCloseが記述されているかどうかを確認する。
【００５９】
判定部７３ｄは、確認の結果、ソースコードＡに共有変数が存在しないと判断した場合には（Ｓ２１：ＮＯ）、チェック結果をＯＫに設定して（Ｓ２４）、サブルーチンを抜ける。図７に示す例では、ＩＥＣ言語で記述されたプログラムのソースコードに共有変数reqHandCloseが記述されているので、判定部７３ｄは、ソースコードＡに共有変数が存在すると判断する（Ｓ２１：ＹＥＳ）。次に、ソースコードＢ、つまり、Ｖ＋言語で記述されたプログラムのソースコードに、共有変数が記述されているかどうかを確認する（Ｓ２２）。この例の場合には、共有変数reqHandCloseが記述されているかどうかを確認する。図７に示す例では、Ｖ＋言語で記述されたプログラムのソースコードに共有変数reqHandCloseが記述されているので、判定部７３ｄは、ソースコードＢに共有変数が存在すると判断する（Ｓ２３：ＹＥＳ）。この場合には、判定部７３ｄは、チェック結果をＯＫに設定して（Ｓ２４）、サブルーチンを抜ける。しかし、判定部７３ｄは、ソースコードＢに共有変数が存在しないと判断した場合には（Ｓ２３：ＮＯ）、チェック結果をＮＧに設定して（Ｓ２５）、サブルーチンを抜ける。
【００６０】
図８に示すように、共有変数チェック（Ｓ１２）の結果、チェック結果がＯＫだった場合には（Ｓ１３：ＹＥＳ）、中央演算装置５３は、開発支援装置５０の表示装置５２の画面に、コンパイルが成功したことを示す表示を行う（Ｓ１４）。しかし、共有変数チェック（Ｓ１２）の結果、チェック結果がＮＧだった場合には（Ｓ１３：ＮＯ）、中央演算装置５３は、図１１に示すようなエラーメッセージボックスＭ１を開発支援装置５０の表示装置５２の画面に表示する（Ｓ１５）。
【００６１】
図１１は、エラーメッセージボックスＭ１の一例を示す図である。図１１に示すように、エラーメッセージボックスＭ１には、エラーメッセージＭ１１、エラー対象の共有変数の名称Ｍ１２、「はい」ボタンＭ１３、および「いいえ」ボタンＭ１４が表示される。図１１の例では、エラーメッセージＭ１１として、「以下の共有変数がプログラムの中で使われていません。コンパイルを続けますか？」というメッセージが表示される。エラー対象の共有変数の名称Ｍ１２としては、reqHandCloseという名称が表示される。
【００６２】
ユーザは、このようなエラーメッセージボックスＭ１を確認し、コンパイルを続ける場合には、「はい」ボタンＭ１３をクリックし、コンパイルを中止する場合には「いいえ」ボタンＭ１４をクリックする。
【００６３】
図８にように、判定部７３ｄは、エラーメッセージボックスＭ１において、「はい」ボタンＭ１３が選択されたと判断すると（Ｓ１６：ＹＥＳ）、開発支援装置５０の表示装置５２の画面に、コンパイルが成功したことを示す表示を行う（Ｓ１４）。しかし、判定部７３ｄは、エラーメッセージボックスＭ１において、「いいえ」ボタンＭ１３が選択されたと判断すると（Ｓ１６：ＮＯ）、開発支援装置５０の表示装置５２の画面に、コンパイルが失敗したことを示す表示を行う
【００６４】
以上のように、本実施形態によれば、コンパイル処理時に、グローバル変数テーブルを用いて共有変数のチェックを行うので、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することができる。
【００６５】
上述した実施形態では、ＩＥＣ言語でプログラムを記述する際にグローバル変数テーブルを作成する例について説明したが、Ｖ＋言語でプログラムを記述する際にグローバル変数テーブルを作成してもよい。
【００６６】
上述した実施形態では、グローバル変数テーブルに、変数共有を行うか否かを示す欄、および共有変数チェックを行うか否かを示す欄を設ける態様について説明したが、これらの欄を設けない態様であってもよい。
【００６７】
（第２実施形態）
次に、本開示の第２実施形態について添付図面を参照しつつ説明する。図１２は、本実施形態におけるアーム型ロボットとエンドエフェクタの動作を説明するための図である。本実施形態では、アーム型ロボットの押し付け動作を実現するためのプログラムにおける共有変数のチェック処理について説明する。
【００６８】
この例では、図１２（Ａ）に示すように、部品が実装された基板８０を、ヒートシンク８１に取り付けるために、部品が実装された基板８０をヒートシンク８１に押し付ける動作をアーム型ロボット２０により行う。
【００６９】
この場合のエンドエフェクタ４０には、図示を省略する力覚センサを備えており、押し付け動作中の圧力値を、力覚センサにより取得する。図１２（Ｂ）に示すように、アーム型ロボット２０には、力覚センサを備えるエンドエフェクタ４０が取り付けられている。
【００７０】
押し付け動作を行うには、まず、アーム型ロボット２０のアーム２０ａに取り付けられたエンドエフェクタ４０を、ワークWに押し付ける（Ｓ３０：ロボットアームの押し付け）。この時、エンドエフェクタ４０に備えられた力覚センサにより、押し付け中の圧力値を取得し、圧力値を共有変数に代入して、圧力値をアーム型ロボット２０と共有する（Ｓ３１：圧力値の共有）。アーム型ロボット２０は、共有変数を介して、圧力値を取得し（Ｓ３２：圧力値の取得）、押し付け動作を、圧力値がしきい値を超えるまで継続する（Ｓ３２：圧力値がしきい値を超えるまで継続）。アーム型ロボット２０は、圧力値がしきい値を超えた場合には、押し付け動作を停止し、ワークＷから離間する。
【００７１】
以上のような動作を、図１３のフローチャートで説明する。図１３に示すように、ロボット制御プログラムであるＶ＋言語で記述されたプログラムでは、アーム型ロボット２０のアーム２０ａを、ワークWに押し付ける（Ｓ３０）。ＩＥＣ言語で記述されたプログラムは、エンドエフェクタ４０に備えられた力覚センサにより、押し付け中の圧力値を取得し、圧力値を共有変数に代入して、圧力値をアーム型ロボット２０と共有する（Ｓ３１）。Ｖ＋言語で記述されたプログラムは、共有変数を介して、圧力値を取得し（Ｓ３２）、押し付け動作を、圧力値がしきい値を超えるまで継続する（Ｓ３３）。Ｖ＋言語で記述されたプログラムは、圧力値がしきい値を超えた場合には、押し付け動作を停止し、アーム型ロボット２０のアーム２０ａをワークＷから離間させる。
【００７２】
図１４に示す例では、presValueが共有変数として用いられており、presValueは、Ｖ＋言語で記述されたプログラムとＩＥＣ言語で記述されたプログラムとの両方で参照されている。presValue :=  N1_Ch1_Analog_Input_Value という文が、ＩＥＣ言語で記述されたプログラムにおいて、圧力値を共有変数に代入する処理を表している。また、WHILE presValue < 2000 DO という文が、Ｖ＋言語で記述されたプログラムにおいて、圧力値がしきい値を超えるまで押し付け動作を継続する処理を表している。
【００７３】
本実施形態における共有変数のチェック処理のフローチャートは、第１実施形態において説明した図８と図９に示すフローチャートと同じなので、説明を省略する。但し、共有変数の存在確認は、図１５に示すグローバル変数テーブルＴＢＬ２を用いて行う。図１６に示すグローバル変数テーブルＴＢＬ２においては、presValueが共有変数として登録されている。
【００７４】
以上のように、本実施形態によれば、コンパイル処理時に、グローバル変数テーブルを用いて共有変数のチェックを行うので、異なるプログラム間で定義した共有変数の実装漏れや共有変数名の間違いを、プログラムの実行前に適切に発見することができる。
【００７５】
（第３実施形態）
次に、本開示の第３実施形態について添付図面を参照しつつ説明する。第１実施形態および第２実施形態においては、ＩＥＣ言語で記述されたプログラムのコンパイル処理の際に共有変数のチェック処理を行う態様について説明した。しかし、本実施形態では、コンパイル処理の実行後に、共有変数チェックの項目８２が選択されると、共有変数のチェック処理を行う。
【００７６】
本実施形態における開発支援装置５０のハードウエア構成および機能ブロックの構成は、図２および図３に示す第１実施形態における開発支援装置５０のハードウエア構成および機能ブロックの構成と同様である。
【００７７】
本実施形態では、図１６に示すように、開発支援装置５０の表示装置５２の画面上で、プロジェクトタブ８０を選択すると、プロジェクトメニュー８１が表示される。このプロジェクトメニュー８１から共有変数チェックの項目８２を選択することにより、、共有変数のチェック処理が行われる。なお、本実施形態では、Ｖ＋言語で記述されたプログラムのソースコードと、ＩＥＣ言語で記述されたプログラムのソースコードとの入力は既に完了しており、ＩＥＣ言語で記述されたプログラムのコンパイル処理についても既に完了しているものとする。
【００７８】
また、本実施形態では、ＩＥＣ言語で記述されたプログラムとして、図１９に示すようなラダー言語で記述されたプログラムと、図２０に示すようなＳＴ言語で記述されたプログラムとを用いる。
【００７９】
図１７は、本実施形態における共有変数のチェック処理の流れを示すフローチャートである。共有変数のチェック処理が開始されると、クロスリファレンス情報生成部７３ｃは、グローバル変数テーブルから、共有変数の抽出を行う（Ｓ４０）。グローバル変数テーブルは、第１実施形態および第２実施形態で示したグローバル変数テーブルＴＢＬ１，ＴＢＬ２と同様のグローバル変数テーブルを用いる。
【００８０】
次に、クロスリファレンス情報生成部７３ｃは、抽出した共有変数について、Ｖ＋言語で記述されたプログラムのソースコードと、ＩＥＣ言語で記述されたプログラムのソースコードとにおけるクロスリファレンスを実行する（Ｓ４１）。つまり、クロスリファレンス情報生成部７３ｃは、Ｖ＋言語で記述されたプログラムのソースコードと、ＩＥＣ言語で記述されたプログラムのソースコードに対して、共有変数が使用されている箇所を参照し、そのプログラム名、ステップ番号、アドレス、言語、パス等をクロスリファレンス情報としてクロスリファレンス情報記憶部７４ｃに記憶させる。抽出した共有変数が複数ある場合には、順次、個々の共有変数について以上のようなクロスリファレンスを実行する。
【００８１】
例えば、図１９に示すように、ラダー言語で記述されたプログラムにおいて共有変数shared１、shared2、in1、in2が用いられ、図２０に示すように、ＳＴ言語で記述されたプログラムにおいて共有変数shared3とshared4が用いられていたとする。さらに、図２１で示すように、Ｖ＋言語で記述されたプログラムにおいては、共有変数shared1とshared3が用いられていたとする。
【００８２】
判定部７３ｄは、まず、共有変数shared１についてクロスリファレンスを実行し（Ｓ４１）、ＩＥＣ言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムとの両方において使用されていないかを判定する（Ｓ４２）。次に、ＩＥＣ言語で記述されたプログラムのみで使用されているか、あるいは、Ｖ＋言語で記述されたプログラムのみで使用されているかを判定する（Ｓ４３）。
【００８３】
この例の場合は、共有変数shared１は、ラダー言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムで使用されているので（Ｓ４２：ＮＯ、Ｓ４３：ＮＯ）、ステップＳ４６まで進む。判定部７３ｄは、全ての共有変数についてチェックが完了したかどうかを判断し（Ｓ４６）、この場合にはまだ完了していないので（Ｓ４６：ＮＯ）、再びステップＳ４１に戻り、次に共有変数shared2についてクロスリファレンスを実行する（Ｓ４１）。
【００８４】
共有変数shared2は、ラダー言語で記述されたプログラムのみにおいて使用されているので（Ｓ４２：ＮＯ、Ｓ４３：ＹＥＳ）、判定部７３ｄは、エラーメッセージを生成し（Ｓ４４）、表示処理部７２は、図２１に示すアウトプットウィンドウ１１０に、「警告：共有変数"shared2"は、ＩＥＣプログラムでのみ使用されています。:Program0」と登録する。ここで、Program0は、図１９に示すラダー言語で記述されたプログラムを示している
【００８５】
判定部７３ｄは、全ての共有変数についてチェックが完了したかどうかを判断し（Ｓ４６）、この場合にはまだ完了していないので（Ｓ４６：ＮＯ）、再びステップＳ４１に戻り、次に共有変数shared3についてクロスリファレンスを実行する（Ｓ４１）。
【００８６】
共有変数shared3は、ＳＴ言語で記述されたプログラムのみにおいて使用されているので（Ｓ４２：ＮＯ、Ｓ４３：ＹＥＳ）、判定部７３ｄは、エラーメッセージを生成し（Ｓ４４）、表示処理部７２は、図２２に示すアウトプットウィンドウ１１０に、「警告：共有変数"shared3"は、Ｖ＋プログラムでのみ使用されています。:Program2」と登録する。ここで、Program2は、図２１に示すＶ＋言語で記述されたプログラムを示している
【００８７】
以下、同様にして、全ての共有変数についてチェックを行い、判定部７３ｄが、全ての共有変数についてチェックが完了したと判定した場合には（Ｓ４６：ＹＥＳ）、表示処理部７２は、アウトプットウィンドウ１１０に、上述のように登録したエラーメッセージを表示させ（Ｓ４７）、判定部７３ｄは、共有変数のチェックを終了する。
【００８８】
以上のような処理の結果。最終的に、図２２に示すアウトプットウィンドウ１１０が表示される。アウトプットウィンドウ１１０は、リファレンス情報表示部５２ｃに表示させてもよいし、プログラム表示部５２ａに表示させてもよい。
【００８９】
また、本実施形態では、アウトプットウィンドウ１１０に加えて、図１８のようなクロスリファレンス表示画面１０３を表示させてもよい。クロスリファレンス表示画面１０３は、リファレンス情報表示部５２ｃに表示される。
【００９０】
図１８において、Program0は、図１９に示すラダー言語で記述されたプログラムに相当し、Program1は、図２０に示すＳＴ言語で記述されたプログラムに相当する。また、Program2は、図２１に示すＶ＋言語で記述されたプログラムに相当する。
【００９１】
図１８に示すように、共有変数shared１は、ラダー言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムで使用されている。共有変数shared2は、ラダー言語で記述されたプログラムのみにおいて使用されている。共有変数shared3は、ＳＴ言語で記述されたプログラムのみ
【００９２】
また、共有変数shared4は、ＳＴ言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムで使用されている。そして、共有変数shared5は、いずれのプログラムでも使用されていない。なお、変数in1、in2は、共有変数ではない。
【００９３】
したがって、図１８に示す例の場合には、共有変数shared2、shared3、shared5について、図２１に示すようなエラーメッセージが表示されることになる。
【００９４】
以上のように、本実施形態によれば、ＩＥＣ言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムとの少なくともいずれか一方のプログラムにおいて、共有変数が使用されていないというエラーメッセージを表示する。その結果、共有変数の実装漏れ、共有変数名の誤り、無駄な共有変数の存在等を確認することができ、プログラムのデバッグを円滑に行うことが可能となる。
【００９５】
（第４実施形態）
次に、本開示の第３実施形態について添付図面を参照しつつ説明する。第１実施形態および第２実施形態においては、ＩＥＣ言語で記述されたプログラムのコンパイル処理の際に共有変数のチェック処理を行う態様について説明した。また、第３実施形態では、コンパイル処理の実行後に、共有変数のチェック処理を行う態様について説明した。
【００９６】
本実施形態は、ＩＥＣ言語で記述されたプログラムのソースコード、またはＶ＋言語で記述されたプログラムのソースコードをプログラム表示部５２ａに表示させ、ソースコードのうち、共有変数が選択された場合に、ＩＥＣ言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムとの両方において、選択された共有変数の参照箇所をクロスリファレンス情報として表示する。
【００９７】
図２３は、本実施形態における開発支援装置５０の機能ブロック図である。第１実施形態において図３で示した機能ブロック図と異なるところは、演算部７３が、構成要素選択部７３ｅと、本実施形態における判定部としての共有変数処理部７３ｆを備えているところである。構成要素選択部７３ｅは、アウトライン情報表示部５２ｂに表示されるアウトライン情報のうち、変数がユーザによってクリック等された場合に、当該変数を、共有変数チェック処理を行う変数として選択する。また、共有変数処理部７３ｆは、構成要素選択部７３ｅによって選択された変数が、共有変数リファレンスに存在する場合には、ＩＥＣ言語で記述されたプログラムと、Ｖ＋言語で記述されたプログラムとにおいて、共有変数として参照されているか否かを判定する。本実施形態において、参照部として機能するクロスリファレンス情報生成部７３ｃは、共有変数処理部７３ｆにより、ＩＥＣ言語で記述されたプログラム、またはＶ＋言語で記述されたプログラムにおいて、選択された共有変数が参照されていると判定された際に、当該共有変数が使用されている箇所を特定する。
【００９８】
図２４は、本実施形態において、プログラム表示部５２ａに表示されるＶ＋言語で記述されたプログラムのソースコードと、ＩＥＣ言語で記述されたプログラムのソースコードの例を示している。図２４において、符号９０で示された箇所が、共有変数である。この例の場合には、reqHandCloseが共有変数である。
【００９９】
プログラム表示部５２ａには、いずれか一方のプログラムのソースコードを表示させてもよいし、両方のプログラムのソースコードを表示させてもよい。なお、本実施形態では、Ｖ＋言語で記述されたプログラムのソースコードと、ＩＥＣ言語で記述されたプログラムのソースコードとの入力は既に完了しており、ＩＥＣ言語で記述されたプログラムのコンパイル処理についても既に完了しているものとする。
【０１００】
図２５は、本実施形態における共有変数チェック処理の流れを示すフローチャートである。図２５に示す処理は、所定時間ごとに繰り返し実行される。共有変数のチェック処理が開始されると、共有変数処理部７３ｆは、ユーザによって変数がクリック等され、構成要素選択部７３ｅによって変数が選択されたか否かを判断する（Ｓ５０）。共有変数処理部７３ｆは、変数が選択されていないと判断した場合には（Ｓ５０：ＮＯ）、図２５に示す処理を抜ける。しかし、共有変数処理部７３ｆは、変数が選択されたと判断した場合には（Ｓ５０：ＹＥＳ）、次に、選択された変数が、共有変数リファレンスに存在するかどうかを判断する（Ｓ５１）。本実施形態における共有変数リファレンスは、上述した実施形態と同様に、グローバル変数テーブルであってもよいし、グローバル変数テーブルとは別のリファレンスであってもよい。
【０１０１】
共有変数処理部７３ｆは、選択された変数が、共有変数リファレンスに存在しないと判断した場合には（Ｓ５１：ＮＯ）、図２５に示す処理を抜ける。しかし、共有変数処理部７３ｆは、選択された変数が、共有変数リファレンスに存在すると判断した場合には（Ｓ５１：ＹＥＳ）、共有変数リファレンスから、当該変数の抽出を行う（Ｓ５２）。
【０１０２】
次に、共有変数処理部７３ｆは、抽出された変数について、例えば、ＩＥＣ言語で記述されたプログラムのソースコードにおいて、参照されているかどうかを判定する（Ｓ５３）。クロスリファレンス情報生成部７３ｃは、共有変数処理部７３ｆによって、抽出された変数が、ＩＥＣ言語で記述されたプログラムのソースコードにおいて参照されていると判定された場合には、ＩＥＣ言語で記述されたプログラムのソースコードに対して、抽出された変数が使用されている箇所を参照し、そのプログラム名、ステップ番号、アドレス、言語、パス等をクロスリファレンス情報としてクロスリファレンス情報記憶部７４ｃに記憶させる（Ｓ５４）。
【０１０３】
次に、共有変数処理部７３ｆは、全てのプログラムにおいて、共有変数についてのクロスリファレンスが完了したかどうかを判断する（Ｓ５５）。この例の場合には、共有変数処理部７３ｆは、まだＶ＋言語で記述されたプログラムのソースコードにおいて、共有変数についてのクロスリファレンスが完了していないと判断し（Ｓ５５：ＮＯ）、再びステップＳ５３の処理に戻る。
【０１０４】
共有変数処理部７３ｆは、前記抽出された変数について、Ｖ＋言語で記述されたプログラムのソースコードにおいて、参照されているかどうかを判定する（Ｓ５３）。クロスリファレンス情報生成部７３ｃは、共有変数処理部７３ｆによって、抽出された変数が、ＩＥＣ言語で記述されたプログラムのソースコードにおいて参照されていると判定された場合には、ＩＥＣ言語で記述されたプログラムのソースコードに対して、抽出された変数が使用されている箇所を参照し、そのプログラム名、ステップ番号、アドレス、言語、パス等をクロスリファレンス情報としてクロスリファレンス情報記憶部７４ｃに記憶させる（Ｓ５４）。
【０１０５】
共有変数処理部７３ｆは、全てのプログラムにおいて、共有変数についてのクロスリファレンスが完了したかどうかを判断する（Ｓ５５）。この例の場合には、全てのプログラムについて、共有変数のクロスリファレンスが完了したと判断し（Ｓ５５：ＹＥＳ）、クロスリファレンス情報記憶部７４ｃに記憶させたクロスリファレンス情報を、クロスリファレンスウィンドウに表示させ（Ｓ５６）、図２５に示す処理を終了する。
【０１０６】
図２６に、クロスリファレンスウィンドウ２００の一例を示す。クロスリファレンスウィンドウ２００は、リファレンス情報表示部５２ｃに表示される。図２６に示すクロスリファレンスウィンドウ２００は、リファレンス対象表示欄２０１、設定項目表示欄２０２、発生箇所表示欄２０３、詳細情報表示欄２０４、リファレンス表示欄２０５等を備えている。
【０１０７】
リファレンス対象表示欄２０１には、共有変数のクロスリファレンスを行ったプログラムの名前と、選択された共有変数とが表示される。図２６に示す「ロボットハンド制御」は、ＩＥＣ言語で記述されたプログラムの名前を示している。reqHandCloseは、選択された共有変数である。
【０１０８】
設定項目表示欄２０２には、クロスリファレンスの対象となった共有変数が表示される。図２６の例の場合には、reqHandCloseと表示される。発生箇所表示欄２０３には、設定項目に表示された共有変数が参照されたプログラム名が表示される。この例の場合には、ロボットハンド制御、およびロボット制御と表示される。「ロボット制御」は、Ｖ＋で記述されたプログラムの名前を示している。
【０１０９】
詳細情報表示欄２０４には、発生箇所表示欄２０３に表示されたプログラムにおいて、設定項目表示欄２０２に表示された共有変数が参照されたプログラムのソースコードにおける行番号が表示される。リファレンス表示欄２０５には、詳細情報表示欄２０４に表示された行番号におけるソースコードが表示される。
【０１１０】
以上のように、本実施形態によれば、一つのプログラムにおいて、共有変数を選択するだけで、当該プログラムにおける共有変数の参照箇所だけでなく、他のプログラムにおける当該共有変数の参照箇所についても、クロスリファレンスウィンドウ２００に表示される。
【０１１１】
したがって、ユーザは、クロスリファレンスウィンドウ２００に表示された内容を見ることによって、共有変数が、全てのプログラムにおいて正しく参照されているか否かを容易に把握することができる。その結果、共有変数の実装漏れ、共有変数名の誤り、無駄な共有変数の存在等を確認することができ、プログラムのデバッグを円滑に行うことが可能となる。
【０１１２】
上述の説明では、プログラム表示部５２ａに表示したプログラムのソースコード上で変数を選択する態様について説明したが、本発明はこのような態様に限定される訳ではない。例えば、アウトライン情報をアウトライン表示部５２ｂに表示させ、アウトライン情報上で変数を選択する態様にも適用可能である。
【０１１３】
アウトライン情報は、ＩＥＣ言語で記述されたプログラム、またはＶ＋言語で記述されたプログラムの構成の概要を示す情報のことであり、これらのプログラムに使用されている所定の構成要素を、これらのプログラムの先頭から順に抽出したものである。
【０１１４】
この場合でも、一つのプログラムのアウトライン情報において、共有変数を選択するだけで、当該プログラムにおける共有変数の参照箇所だけでなく、他のプログラムにおける当該共有変数の参照箇所についても、クロスリファレンスウィンドウ２００に表示させることができる。
【０１１５】
したがって、ユーザは、クロスリファレンスウィンドウ２００に表示された内容を見ることによって、共有変数が、全てのプログラムにおいて正しく参照されているか否かを容易に把握することができる。その結果、共有変数の実装漏れ、共有変数名の誤り、無駄な共有変数の存在等を確認することができ、プログラムのデバッグを円滑に行うことが可能となる。
【０１１６】
第１実施形態、第２実施形態、および第４実施形態においては、ＩＥＣ言語で記述されたプログラムとして、ＳＴ言語で記述されたプログラムのみを用いた態様について説明したが、これらの実施形態においても、第３実施形態と同様に、ＩＥＣ言語で記述されたプログラムとして、ＳＴ言語で記述されたプログラムと、ラダー言語で記述されたプログラムとの両方を用いることが可能である。
【０１１７】
以上の実施形態は例示であり、この発明の範囲から離れることなく様々な変形が可能である。上述した複数の実施の形態は、それぞれ単独で成立し得るものであるが、実施の形態同士の組みあわせも可能である。また、異なる実施の形態の中の種々の特徴も、それぞれ単独で成立し得るものであるが、異なる実施の形態の中の特徴同士の組みあわせも可能である。
【符号の説明】
【０１１８】
１０  制御装置
５０  開発支援装置
５１  入力部
５３  判定部
ＴＢＬ１  グローバル変数テーブル（共有変数リファレンス）
【図１】
2019160079.tif 000003
【図２】
2019160079.tif 000004
【図３】
2019160079.tif 000005
【図４】
2019160079.tif 000006
【図５】
2019160079.tif 000007
【図６】
2019160079.tif 000008
【図７】
2019160079.tif 000009
【図８】
2019160079.tif 000010
【図９】
2019160079.tif 000011
【図１０】
2019160079.tif 000012
【図１１】
2019160079.tif 000013
【図１２】
2019160079.tif 000014
【図１３】
2019160079.tif 000015
【図１４】
2019160079.tif 000016
【図１５】
2019160079.tif 000017
【図１６】
2019160079.tif 000018
【図１７】
2019160079.tif 000019
【図１８】
2019160079.tif 000020
【図１９】
2019160079.tif 000021
【図２０】
2019160079.tif 000022
【図２１】
2019160079.tif 000023
【図２２】
2019160079.tif 000024
【図２３】
2019160079.tif 000025
【図２４】
2019160079.tif 000026
【図２５】
2019160079.tif 000027
【図２６】
2019160079.tif 000028