(57)【要約】【課題】第１プログラミング言語で記載された第１ソースコードで宣言された共有変数を、第２プログラミング言語で記載された第２ソースコードの第２プログラムの開発者が効率的に把握することを支援することが可能であるプログラム開発支援システム、プログラム開発支援方法及びプログラム開発支援プログラムを提供する。【解決手段】プログラム開発支援システムは、第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、第１ソースコードから抽出する共有変数抽出部と、共有変数抽出部によって抽出された共有変数を示す情報を、第２ソースコードの開発画面に表示させる表示制御部とを備える。【選択図】図１
2019160074.tif 000002
【特許請求の範囲】
【請求項１】
第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、前記第１ソースコードから抽出する共有変数抽出部と、
前記共有変数抽出部によって抽出された前記共有変数を示す情報を、前記第２ソースコードの開発画面に表示させる表示制御部と
を備えるプログラム開発支援システム。
【請求項２】
前記表示制御部は、前記第２ソースコードと前記共有変数を示す情報とを前記第２ソースコードの開発画面に表示させる、請求項１に記載のプログラム開発支援システム。
【請求項３】
前記表示制御部は、前記第１ソースコードを前記第２ソースコードの開発画面に表示させる、請求項２に記載のプログラム開発支援システム。
【請求項４】
前記共有変数を示す情報をデータテーブルに登録する登録部を更に備え、
前記表示制御部は、前記第２ソースコードの開発画面に前記データテーブルを表示させる、請求項１から請求項３のいずれか一項に記載のプログラム開発支援システム。
【請求項５】
前記登録部は、前記第１ソースコードから抽出された前記共有変数のうちのいずれかの前記共有変数を示す情報が前記データテーブルに登録されていない場合、未登録の前記共有変数を示す情報を前記データテーブルに登録する、請求項４に記載のプログラム開発支援システム。
【請求項６】
情報処理装置が実行するプログラム開発支援方法であって、
第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、前記第１ソースコードから抽出するステップと、
抽出された前記共有変数を示す情報を、前記第２ソースコードの開発画面に表示させるステップと
を含むプログラム開発支援方法。
【請求項７】
コンピュータに、
第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、前記第１ソースコードから抽出する手順と、
抽出された前記共有変数を示す情報を、前記第２ソースコードの開発画面に表示させる手順と
を実行させるためのプログラム開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発支援システム、プログラム開発支援方法及びプログラム開発支援プログラムに関する。
【背景技術】
【０００２】
ＰＬＣ（Programmable Logic Controller）等のコントローラは、ロボットの動作を制御するロボット制御と、エンドエフェクタ等の機器の動作を制御するシーケンス制御との同期制御を実行する場合がある。ロボット制御のプログラムのソースコードと、シーケンス制御のプログラムのソースコードとは、それぞれ異なるプログラミング言語で記載されることがある。例えば、ロボット制御のプログラムのソースコードは、インタプリタ型言語を用いて記載される場合がある。シーケンス制御のプログラムのソースコードは、国際電気標準会議（IEC: International Electrotechnical Commission）によるコンパイラ型言語の一つであるＩＥＣ６１１３１−３を用いて記載される場合がある。
【０００３】
プログラムの開発を支援するプログラム開発支援システムは、異なるプログラミング言語のソースコードを作成する開発環境を提供する。そして、プログラム開発支援システムは、コンパイラ型言語で記載されたソースコードにビルド処理を実行することによって、実行ファイルを生成する。工場等に設置されるコントローラは、インタプリタ型言語のソースコードと生成された実行ファイルとに基づいて、ロボット制御及びシーケンス制御の同期制御を実行する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−１９２１７２号公報
【特許文献２】特開２００８−２７６５２６号公報
【特許文献３】特開２０１２−１６４１７８号公報
【特許文献４】特開２００９−１４００２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このように、異なるプログラミング言語で記載されたソースコード間において同一の変数が共有される場合がある。以下の説明では、このような変数を「共有変数」という。異なるプログラミング言語で記載されるソースコードは例えば作成者が互いに異なる場合があり、各ソースコードの作成者は、他のプログラミング言語を用いたソースコードにおいて用いられている共有変数を効率的に把握できない場合があった。その結果、異なるプログラミング言語で記載されたソースコード間において、共有変数の記載に不備が生じ、正しい実装ができない場合があった。
【０００６】
このような共有変数に関する問題は、ＰＬＣにおけるロボット制御及びシーケンス制御のためのプログラムの開発のみに特有の問題ではない。このような共有変数に関する問題は、異なるプログラミング言語（例えば第１プログラミング言語及び第２プログラミング言語）でそれぞれ記載されたソースコード（例えば第１ソースコード及び第２ソースコード）を作成する場合に共通する問題である。
【０００７】
上記事情に鑑み、本発明は、第１プログラミング言語で記載された第１ソースコードで宣言された共有変数を、第２プログラミング言語で記載された第２ソースコードの作成者が効率的に把握することを可能とするプログラム開発支援システム、プログラム開発支援方法及びプログラム開発支援プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
本発明の一態様は、第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、前記第１ソースコードから抽出する共有変数抽出部と、前記共有変数抽出部によって抽出された前記共有変数を示す情報を、前記第２ソースコードの開発画面に表示させる表示制御部とを備えるプログラム開発支援システムである。
【０００９】
本発明の一態様は、上記のプログラム開発支援システムであって、前記表示制御部は、前記第２ソースコードと前記共有変数を示す情報とを前記第２ソースコードの開発画面に表示させる。
【００１０】
本発明の一態様は、上記のプログラム開発支援システムであって、前記表示制御部は、前記第１ソースコードを前記第２ソースコードの開発画面に表示させる。
【００１１】
本発明の一態様は、上記のプログラム開発支援システムであって、前記共有変数を示す情報をデータテーブルに登録する登録部を更に備え、前記表示制御部は、前記第２ソースコードの開発画面に前記データテーブルを表示させる。
【００１２】
本発明の一態様は、上記のプログラム開発支援システムであって、前記登録部は、前記第１ソースコードから抽出された前記共有変数のうちのいずれかの前記共有変数を示す情報が前記データテーブルに登録されていない場合、未登録の前記共有変数を示す情報を前記データテーブルに登録する。
【００１３】
本発明の一態様は、情報処理装置が実行するプログラム開発支援方法であって、第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、前記第１ソースコードから抽出するステップと、抽出された前記共有変数を示す情報を、前記第２ソースコードの開発画面に表示させるステップとを含むプログラム開発支援方法である。
【００１４】
本発明の一態様は、コンピュータに、第１プログラミング言語で記載された第１ソースコードと第２プログラミング言語で記載された第２ソースコードとにおいてメモリで共有される変数である共有変数を、前記第１ソースコードから抽出する手順と、抽出された前記共有変数を示す情報を、前記第２ソースコードの開発画面に表示させる手順とを実行させるためのプログラム開発支援プログラムである。
【発明の効果】
【００１５】
本発明により、第１プログラミング言語で記載された第１ソースコードで宣言された共有変数を、第２プログラミング言語で記載された第２ソースコードの作成者が効率的に把握することが可能である。
【図面の簡単な説明】
【００１６】
【図１】プログラム開発支援システムの構成例を示す図である。
【図２】第１ソースコードの例を示す図である。
【図３】グローバル変数テーブルの第１例を示す図である。
【図４】第２ソースコードの第１例を示す図である。
【図５】グローバル変数テーブルの表示の第１例である。
【図６】グローバル変数テーブルの表示の第２例である。
【図７】グローバル変数テーブルの表示の第３例である。
【図８】グローバル変数テーブルの第２例を示す図である。
【図９】第２ソースコードの第２例を示す図である。
【図１０】警告の出力例を示す図である。
【図１１】プログラム開発支援装置がグローバル変数テーブルに共有変数を登録する手順の例を示すフローチャートである。
【図１２】警告をプログラム開発支援装置が出力する手順の例を示すフローチャートである。
【図１３】コントローラが実行する同期制御の例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
本発明の実施形態について、図面を参照して詳細に説明する。
【００１８】
図１は、プログラム開発支援システム１の構成例を示す図である。プログラム開発支援システム１は、第１プログラミング言語で記載された１以上の第１ソースコードを含む第１プログラムと、第２プログラミング言語で記載された１以上の第２ソースコードを含む第２プログラムとの開発を支援するシステムである。第１プログラミング言語として、ロボット制御のプログラム開発に用いられるインタプリタ型言語がある。第２プログラミング言語の具体例として、コンパイラ型言語の一つであるシーケンス制御のプログラム開発に用いられるＩＥＣ６１１３１−３がある。
【００１９】
プログラム開発支援システム１は、第１プログラミング端末２と、第２プログラミング端末３と、通信回線４と、プログラム開発支援装置５とを備える。プログラム開発支援システム１は、コントローラ６と通信可能である。コントローラ６は、ロボット７、エンドエフェクタコントローラ８及びエンドエフェクタ９と通信可能である。
【００２０】
第１プログラミング端末２は、パーソナルコンピュータ等の情報処理装置である。第１プログラミング端末２は、第１プログラムを開発するためにユーザによって使用される。第１プログラミング端末２は、ＬＡＮ（Local Area Network）等の通信回線４を介して、プログラム開発支援装置５と通信する。
【００２１】
第１プログラミング端末２は、表示部２０及び入力部２１を備える。表示部２０は、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ、有機ＥＬ（Electro Luminescence）ディスプレイ等の画像表示装置である。表示部２０は、第１ソースコードの開発画面の画像を、第１ソースコードの開発環境の一つとして表示する。入力部２１は、キーボード、ポインティングデバイス（マウス、タブレット等）、ボタン、タッチパネル等の既存の入力装置を用いて構成される。入力部２１は、ユーザの指示を第１プログラミング端末２に入力する際にユーザによって操作される。
【００２２】
第１プログラミング端末２は、第１ソースコードの開発画面を示すデータをプログラム開発支援装置５から受信する。第１プログラミング端末２は、受信された開発画面を表示部２０に表示させる。第１プログラムの開発者は、開発画面を参照しながら入力部２１を操作することによって第１ソースコードを作成する。第１プログラミング端末２を経由して作成された第１ソースコードはプログラム開発支援装置５に保存される。
【００２３】
第２プログラミング端末３は、パーソナルコンピュータ等の情報処理装置である。第２プログラミング端末３は、第２プログラミング言語で記載された第２ソースコードで表される第２プログラムを開発するためにユーザによって使用される。第２プログラミング端末３は、通信回線４を介して、プログラム開発支援装置５と通信する。第２プログラミング端末３は、表示部３０及び入力部３１を備える。表示部３０は、ＣＲＴディスプレイ、液晶ディスプレイ、有機ＥＬディスプレイ等の画像表示装置である。表示部３０は、第２ソースコードの開発画面の画像を、第２ソースコードの開発環境の一つとして表示する。入力部３１は、キーボード、ポインティングデバイス、ボタン、タッチパネル等の既存の入力装置を用いて構成される。入力部３１は、ユーザの指示を第２プログラミング端末３に入力する際にユーザによって操作される。
【００２４】
第２プログラミング端末３は、第２ソースコードの開発画面を示すデータをプログラム開発支援装置５から受信する。第２プログラミング端末３は、受信された開発画面を表示部３０に表示させる。第２プログラムの開発者は、開発画面を参照しながら入力部３１を操作することによって第２ソースコードを作成する。第２プログラミング端末３を経由して作成された第２ソースコードは、プログラム開発支援装置５に保存される。
【００２５】
プログラム開発支援装置５は、パーソナルコンピュータやサーバ等の情報処理装置である。プログラム開発支援装置５は、第１プログラミング端末２の表示部２０に第１ソースコードの開発画面を表示させることによって、第１ソースコードの開発を支援する。プログラム開発支援装置５は、第２プログラミング端末３の表示部３０に第２ソースコードの開発画面を表示させることによって、第２ソースコードの開発を支援する。プログラム開発支援装置５は、第２プログラミング端末３を経由した作成された第２ソースコードを保存し、コントローラ６を動作させるための実行ファイルを生成する。以下、プログラム開発支援装置５の詳細について説明する。
【００２６】
プログラム開発支援装置５は、通信部５０と、メモリ５１と、記憶装置５２と、演算処理部５３と、バス５４とを備える。通信部５０、メモリ５１、記憶装置５２及び演算処理部５３は、それぞれ通信可能にバス５４によって接続されている。
【００２７】
通信部５０は、通信インターフェースである。通信部５０は、所定の通信プロトコルに基づいて、第１プログラミング端末２、第２プログラミング端末３及びコントローラ６と通信する。
【００２８】
メモリ５１は、ＲＡＭ（Random Access Memory）等の揮発性の記録媒体である。メモリ５１は、演算処理部５３によって実行されるプログラムを記憶する。
【００２９】
記憶装置５２は、磁気ハードディスク装置や半導体記憶装置等の記憶装置である。記憶装置５２は、不揮発性の記憶装置であることが望ましい。記憶装置５２は、第１プログラム５２０と、グローバル変数テーブル５２１と、第２プログラム５２２とを記憶する。記憶装置５２は、複数のプロジェクトが開発されている場合には、第１プログラム５２０、グローバル変数テーブル５２１及び第２プログラム５２２をプロジェクトごとに記憶する。この場合、第１プログラム５２０、グローバル変数テーブル５２１及び第２プログラム５２２は、プロジェクトファイルとして記憶されてもよい。
【００３０】
第１プログラム５２０は、ロボット７の動作を制御するロボット制御のプログラムである。第１プログラム５２０は、１以上の第１ソースコード５２３によって構成される。
【００３１】
グローバル変数テーブル５２１は、グローバル変数に関する情報を有するデータテーブルである。グローバル変数テーブル５２１は、１又は複数のグローバル変数レコードを有する。グローバル変数レコードは、第１プログラム５２０において宣言されたグローバル変数に関する情報を有する。各グローバル変数レコードは、名称、データ型、変数共有及びコメント等の値を有する。名称は、グローバル変数の名前の文字列を示す。データ型は、グローバル変数の値のデータ型を示す。変数共有は、異なるプログラミング言語のソースコードの間で共有されるグローバル変数であるか否かを示す。変数共有について詳細に説明する。
【００３２】
本実施形態におけるグローバル変数には、共有変数として用いられる共有グローバル変数と、共有変数としては用いられない非共有グローバル変数とがある。共有グローバル変数は、共有変数の一具体例である。変数共有が“する”である場合、そのグローバル変数レコードが示すグローバル変数は、共有グローバル変数である。共有グローバル変数は、第１プログラム５２０の第１ソースコード５２３と第２プログラム５２２の第２ソースコード５２４との間で共有される。例えば、変数共有が“する”である場合、そのグローバル変数レコードが示すグローバル変数は、第１プログラム５２０の第１ソースコード５２３と第２プログラム５２２の第２ソースコード５２４とのいずれか一方で宣言されれば、他のプログラムのソースコードにおいて宣言されていなくても使用することが可能となり、代入されている値を参照することや変更することが可能となる。一方、変数共有が“しない”である場合、そのグローバル変数レコードが示すグローバル変数は、非共有グローバル変数である。
【００３３】
第２プログラム５２２は、エンドエフェクタ９の動作を制御するシーケンス制御のプログラムである。第２プログラム５２２は、１以上の第２ソースコード５２４によって構成される。第２ソースコード５２４は、第２プログラム５２２の実行前において第２ソースコード５２４に対してビルド処理が実行されることによって、実行ファイル（バイナリファイル）に変換される。
【００３４】
演算処理部５３は、ＣＰＵ（Central Processing Unit）等のプロセッサを用いて構成される。演算処理部５３は、プログラム開発支援装置５の不揮発性記憶装置に予め記憶されているプログラムを、メモリ５１に展開することによって実行する。演算処理部５３は、プログラムを実行することによって、取得部５３０、抽出部５３１（共有変数抽出部）、登録部５３２、表示制御部５３３、ビルド実行部５３４及びプログラム記録部５３５として機能する。以下、各機能について説明する。
【００３５】
取得部５３０は、第１プログラム５２０の第１ソースコード５２３を、記憶装置５２から取得する。取得部５３０は、第２プログラム５２２の第２ソースコード５２４を、記憶装置５２から取得する。
【００３６】
抽出部５３１は、グローバル変数を第１ソースコード５２３から抽出する。抽出部５３１は、共有グローバル変数を抽出する機能部（共有変数抽出部）として機能する。抽出部５３１は、例えば共有グローバル変数であることを示す予め定められた文字列を第１ソースコード５２３において検索することによって、共有グローバル変数を抽出する。共有グローバル変数であることを示す予め定められた文字列の具体例として、文字列「ＳＧＬＯＢＡＬ」がある。また、抽出部５３１は、非共有グローバル変数を第１ソースコード５２３から抽出する。抽出部５３１は、例えば非共有グローバル変数であることを示す予め定められた文字列を第１ソースコード５２３において検索することによって、非共有グローバル変数を抽出する。非共有グローバル変数であることを示す予め定められた文字列の具体例として、文字列「ＧＬＯＢＡＬ」がある。
【００３７】
抽出部５３１の処理は、所定のタイミングで実行される。所定のタイミングは、例えば３０分周期や１時間周期のように特定の時間周期であってもよい。所定のタイミングは、グローバル変数テーブル５２１を更新する旨の命令を第１プログラミング端末２又は第２プログラミング端末３から取得したタイミングであってもよい。所定のタイミングは、ビルド実行部５３４がビルド処理実行するタイミングであってもよい。抽出が行われるタイミングは、上述した例に限定されない。
【００３８】
登録部５３２は、グローバル変数テーブル５２１に、第１ソースコード５２３から抽出されたグローバル変数を示す情報を登録する。例えば、登録部５３２は、抽出されたグローバル変数の文字列及びデータ型に基づいてグローバル変数レコードを生成し、生成されたグローバル変数レコードをグローバル変数テーブル５２１に登録してもよい。表示制御部５３３は、第１プログラミング端末２からの要求に応じて、記憶装置５２に記憶されているプロジェクトファイルを第１プログラミング端末２に出力する。これによって、第１プログラミング端末２の表示部２０は、第１ソースコード５２３及びグローバル変数テーブル５２１等のプロジェクトファイルを表示することが可能である。
【００３９】
登録部５３２は、グローバル変数を第１ソースコード５２３から抽出する処理を抽出部５３１が実行した場合、第１ソースコード５２３から抽出された全ての共有変数がグローバル変数テーブル５２１に共有変数として登録されているか否かを判定する。第１ソースコード５２３から抽出された共有変数がグローバル変数テーブル５２１に共有変数として登録されていない場合、登録部５３２は、未登録の共有変数を示す情報をグローバル変数テーブル５２１に登録する。
【００４０】
登録部５３２は、さらに、グローバル変数テーブル５２１に共有変数として登録されているグローバル変数全てについて、第１ソースコード５２３から抽出されたか否か判定する。グローバル変数テーブル５２１に共有変数として登録されているにもかかわらず、第１ソースコード５２３から抽出されていないグローバル変数が存在した場合、該当するグローバル変数に関する情報を、警告指示とともに表示制御部５３３に出力する。
【００４１】
表示制御部５３３は、第２プログラミング端末３からの要求に応じて、記憶装置５２に記憶されているプロジェクトファイルを第２プログラミング端末３に出力する。これによって、第２プログラミング端末３の表示部３０は、第２ソースコード５２４及びグローバル変数テーブル５２１等のプロジェクトファイルを表示することが可能である。また、表示制御部５３３は、警告指示を登録部５３２から受けた場合、警告に対応するグローバル変数に関する情報と警告のメッセージとを、第１プログラミング端末２及び第２プログラミング端末３に出力する。
【００４２】
ビルド実行部５３４は、第１ソースコード５２３において宣言されている全ての共有変数がグローバル変数テーブル５２１に共有変数として登録されている場合、第２プログラム５２２の第２ソースコード５２４に対してビルド処理を実行することによって実行ファイルを生成する。
【００４３】
プログラム記録部５３５は、通信部５０によって第１プログラミング端末２から取得された第１プログラム５２０を、記憶装置５２に記録する。プログラム記録部５３５は、通信部５０によって第２プログラミング端末３から取得された第２プログラム５２２を、記憶装置５２に記録する。
【００４４】
次に、具体例を用いてプログラム開発支援装置５の処理の詳細について説明する。
図２は、第１ソースコード５２３の例を示す図である。図２では、文字列「ＳＧＬＯＢＡＬ」と、変数のデータ型がブール型であることを表す文字列「ＢＯＯＬ」と、変数の名称を表す文字列「ｒｅｑＨａｎｄＣｌｏｓｅ」とが、第１ソースコード５２３に記載されている。文字列「ＳＧＬＯＢＡＬ」は、宣言されたグローバル変数が共有変数であることを表す文字列である。共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」は、一例として、エンドエフェクタ９によってワークを掴むことを要求するためのグローバル変数である。図２では、抽出部５３１は、文字列「ＳＧＬＯＢＡＬ」によって宣言された共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」を、第１ソースコード５２３から抽出する。
【００４５】
図３は、グローバル変数テーブル５２１の第１例を示す図である。図３に示されたグローバル変数テーブル５２１は、第１プログラム５２０に共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」が宣言されている場合における、グローバル変数テーブル５２１の例である。図３では、登録部５３２は、共有変数を示す名称「ｒｅｑＨａｎｄＣｌｏｓｅ」、データ型「ＢＯＯＬ」等を、共有変数を示す情報としてグローバル変数テーブル５２１に登録する。
【００４６】
登録部５３２は、文字列「ＳＧＬＯＢＡＬ」の記載によって宣言された共有変数であるグローバル変数に対応付けて、グローバル変数テーブル５２１における変数共有の欄に「する」を登録する。登録部５３２は、「ＧＬＯＢＡＬ」等の予め定められた文字列の記載によって宣言された非共有変数であるグローバル変数に対応付けて、グローバル変数テーブル５２１における変数共有の欄に「しない」を登録する。
【００４７】
なお、第１ソースコード５２３から抽出されていない共有変数がグローバル変数テーブル５２１に共有変数として登録されている場合、登録部５３２は、グローバル変数テーブル５２１において、抽出されていない共有変数に対応付けられた変数共有の欄に「しない」を登録してもよい。
【００４８】
図４は、第２ソースコード５２４の第１例を示す図である。図４では、第１ソースコード５２３で宣言された共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」が、第２ソースコード５２４で使用されている。「ＩＦ  ｒｅｑＨａｎｄＣｌｏｓｅ  ＝  ＴＲＵＥ  ＴＨＥＮ」と記載されている箇所は、第２プログラム５２２のタスクにおいて、第１プログラム５２０のタスクからの通知を待つ処理である。「ｒｅｑＨａｎｄＣｌｏｓｅ  ：＝  ＦＡＬＳＥ；」と記載されている箇所は、第２プログラム５２２のタスクにおいて、第１プログラム５２０のタスクに通知を出力する処理である。
【００４９】
なお、共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」を含むインクルードファイルを第２ソースコード５２４に対応付けるビルド処理を演算処理部５３が実行することによって、第２プログラム５２２は、第２ソースコード５２４において改めて宣言されていない共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」を使用することが可能である。インクルードファイルは、例えばグローバル変数テーブル５２１がテキスト形式に変換されることによって生成される。
【００５０】
図５は、グローバル変数テーブル５２１の表示の第１例である。第２ソースコード５２４とグローバル変数テーブル５２１とは、第２プログラミング端末３の表示部３０における第２ソースコード５２４の開発画面に並べて表示される。スクロールバー６００は、グローバル変数テーブル５２１をスクロールさせるための操作用画像である。第２プログラム５２２の開発者は、第１ソースコード５２３で宣言された共有変数を、表示部３０に表示されたグローバル変数テーブル５２１によって確認する。図５では、第２プログラム５２２の開発者は、第１ソースコード５２３で宣言された共有変数の一覧をグローバル変数テーブル５２１で確認した上で、共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」を第２ソースコード５２４に実装することができる。
【００５１】
図６は、グローバル変数テーブル５２１の表示の第２例である。第１ソースコード５２３と第２ソースコード５２４とグローバル変数テーブル５２１とは、表示部３０における第２ソースコード５２４の開発画面に並べて表示されてもよい。
【００５２】
図７は、グローバル変数テーブル５２１の表示の第２例である。グローバル変数テーブル５２１は、表示部３０における第２ソースコード５２４の開発画面に全画面表示されてもよい。
【００５３】
次に、共有変数の記載に不備がある場合について説明する。
図８は、グローバル変数テーブル５２１の第２例を示す図である。図８に示されたグローバル変数テーブル５２１は、第１プログラム５２０の第１ソースコード５２３に共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」ではなく共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」が宣言されている場合における、グローバル変数テーブル５２１の例である。
【００５４】
図９は、第２ソースコード５２４の第２例を示す図である。図９では、第２プログラム５２２の開発者は、表示部３０に表示された図８のグローバル変数テーブル５２１に基づいて、第２ソースコード５２４に共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」を実装する。
【００５５】
第２ソースコード５２４に共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」が実装された後で、第１プログラム５２０の開発者が第１ソースコード５２３における共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」を誤って「ｒｅｑＨａｎｄＣｌｏｓｅ」と書き換えた場合、第１プログラム５２０は共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」を参照し、第２プログラム５２２は共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」を参照することになる。したがって、第２プログラム５２２の第２ソースコード５２４は、第１ソースコード５２３で宣言されている共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」を、メモリで共有することができない。第１プログラム５２０の第１ソースコード５２３と第２プログラム５２２の第２ソースコード５２４と共有変数をメモリで共有することができない場合、コントローラ６は、ロボット制御とシーケンス制御との同期制御を実行することができない。同期制御をコントローラ６が実行することができないことを防ぐため、プログラム開発支援装置５は、グローバル変数テーブル５２１における共有変数の登録の有無をチェックする処理を所定周期で実行し、共有変数の記載に不備がある場合には第１プログラミング端末２及び第２プログラミング端末３に対して警告を出力する必要がある。
【００５６】
なお、第１プログラム５２０の開発者は、図３に示されたグローバル変数テーブル５２１を、第１プログラミング端末２及び登録部５３２を介して手動操作で書き換えることが可能である。図２に示された第１ソースコード５２３に共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」が宣言されているにもかかわらず、図３に示されたグローバル変数テーブル５２１に第１プログラム５２０の開発者が誤記によって共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」を図８のように登録してしまった場合でも、第１ソースコード５２３に共有変数「ｓｔａｒｔＨａｎｄＣｌｏｓｅ」が宣言されていないことについて、プログラム開発支援装置５は、第１プログラミング端末２及び第２プログラミング端末３に対して警告を出力する必要がある。
【００５７】
図１０は、警告の出力例を示す図である。登録部５３２は、グローバル変数テーブル５２１を記憶装置５２から取得する。登録部５３２は、第１ソースコード５２３及び第２ソースコード５２４を、記憶装置５２から取得する。登録部５３２は、グローバル変数テーブル５２１に共有変数として登録されているグローバル変数全てについて、第１ソースコード５２３において宣言されているか否か判定する。
【００５８】
表示制御部５３３は、グローバル変数テーブル５２１に共有変数として登録されているにもかかわらず、第１ソースコード５２３から抽出されていないグローバル変数が存在した場合、第１プログラミング端末２及び第２プログラミング端末３に警告を出力する。
【００５９】
図８のグローバル変数テーブル５２１には、図２の第１ソースコード５２３の共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」が登録されていない。この場合、表示制御部５３３は、第１ソースコード５２３の共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」がグローバル変数テーブル５２１に登録されていない旨の警告を、第１プログラミング端末２及び第２プログラミング端末３に出力する。
【００６０】
表示制御部５３３は、エラーの概要を表す「グローバル変数に定義されていない変数名です。」と、グローバル変数テーブル５２１に基づくエラーである旨を表す「変数テーブル」と、エラーの発生箇所を表す「ｒｅｑＨａｎｄＣｌｏｓｅ、名称」とを、第１プログラミング端末２及び第２プログラミング端末３に出力する。
【００６１】
コントローラ６は、ＰＬＣ等のコントローラである。コントローラ６は、通信部６０と、記憶装置６１と、メモリ６２と、演算処理部６３と、コントローラ６においてデータを転送するバス６４とを備える。
【００６２】
通信部６０は、プログラム開発支援装置５と通信する。通信部６０は、プログラム開発支援装置５から取得された第１プログラム５２０の第１ソースコード５２３を、記憶装置６１に記録する。通信部６０は、プログラム開発支援装置５から取得された実行ファイルを、記憶装置６１に記録する。通信部６０は、ＥｔｈｅｒＣＡＴ（登録商標）等の通信プロトコルに基づいて、ロボット７及びエンドエフェクタコントローラ８と通信する。通信部６０は、演算処理部６３による同期制御に応じて、ロボット７及びエンドエフェクタコントローラ８に制御信号を送信する。
【００６３】
記憶装置６１は、フラッシュメモリ、ハードディスクドライブ等の不揮発性の記録媒体（非一時的な記録媒体）である。記憶装置６１は、プログラム開発支援装置５から取得された第１ソースコード５２３及び実行ファイルを記憶する。第１ソースコード５２３及び実行ファイルは、プログラム開発支援装置５の起動時に、記憶装置６１からメモリ６２に展開される。
【００６４】
メモリ６２は、ＲＡＭ等の揮発性の記録媒体である。共有変数は、第１プログラム５２０の第１ソースコード５２３と第２プログラム５２２の第２ソースコード５２４との間で、メモリ６２において共有される。
【００６５】
演算処理部６３は、第１プログラム５２０の第１ソースコード５２３を順次実行することによって、ロボット７の動作を制御する。演算処理部６３は、第２プログラム５２２の実行ファイルに基づいて、エンドエフェクタ９の動作を制御する。演算処理部６３は、第２プログラム５２２の実行ファイルをメモリ６２から取得し、第２プログラム５２２の実行ファイルを実行する。
【００６６】
演算処理部６３は、第１プログラム５２０と第２プログラム５２２とを、互いに異なるタスクによって実行する。演算処理部６３は、図２に示された第１ソースコード５２３のフラグ処理「ｒｅｑＨａｎｄＣｌｏｓｅ＝ＴＲＵＥ」を実行する場合、メモリ６２における共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」の値をＴＲＵＥに変更する。演算処理部６３は、図４に示されているようにメモリ６２における共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」の値がＦＡＬＳＥに変更された場合、図２に示された第１ソースコード５２３の「ＷＨＩＬＥ  ｒｅｑＨａｎｄＣｌｏｓｅ  ＤＯ」以降の処理を実行する。
【００６７】
ロボット７は、工場等に設置される。ロボット７は、制御信号をコントローラ６から取得する。ロボット７に備えられたアーム７０は、取得された制御信号に応じて動作する。例えば、アーム７０は、予め定められた範囲を制御信号に応じて移動する。
【００６８】
エンドエフェクタコントローラ８は、工場等に設置される。エンドエフェクタコントローラ８は、制御信号をコントローラ６から取得する。エンドエフェクタコントローラ８は、例えばサーボアンプを備える。エンドエフェクタコントローラ８は、制御信号に応じて電流を生成し、生成された電流をエンドエフェクタ９に出力する。
【００６９】
エンドエフェクタ９は、多指ハンド又はネジ回し器等の末端効果器である。エンドエフェクタ９は、アーム７０の先端に取り付けられる。エンドエフェクタ９は、多指ハンドである場合、エンドエフェクタコントローラ８から取得された電流に応じてワークを掴む。エンドエフェクタ９は、エンドエフェクタ９が多指ハンドである場合、エンドエフェクタコントローラ８から取得された電流に応じてワークを放してもよい。エンドエフェクタ９は、エンドエフェクタ９がネジ締め器である場合、エンドエフェクタコントローラ８から取得された電流に応じてネジを締める。
【００７０】
次に、プログラム開発支援システム１の動作例を説明する。
図１１は、プログラム開発支援装置５がグローバル変数テーブル５２１に共有変数を登録する手順の例を示すフローチャートである。第１プログラム５２０の開発者は、表示部２０に表示された開発環境の画像を見ながら第１プログラミング端末２を使用することによって、少なくとも一つの第１ソースコード５２３を作成する。第１プログラミング端末２を経由して作成された第１ソースコード５２３は、プログラム開発支援装置５に保存される。第１プログラム５２０の開発者は、第１プログラミング端末２の使用を終了する。プログラム記録部５３５は、第１プログラミング端末２から送信された第１プログラム５２０を、記憶装置５２に記録する。
【００７１】
取得部５３０は、図３に例として示されたグローバル変数テーブル５２１を、記憶装置５２から取得する（ステップＳ１０１）。取得部５３０は、第１プログラム５２０の第１ソースコード５２３（図２参照）を、記憶装置５２から取得する（ステップＳ１０２）。抽出部５３１は、「ｒｅｑＨａｎｄＣｌｏｓｅ」等の共有変数を第１ソースコード５２３から抽出する（ステップＳ１０３）。
【００７２】
登録部５３２は、第１ソースコード５２３から抽出された全ての共有変数がグローバル変数テーブル５２１に共有変数として登録されているか否かを判定する（ステップＳ１０４）。抽出された全ての共有変数がグローバル変数テーブル５２１に登録されている場合（ステップＳ１０４：ＹＥＳ）、登録部５３２は、抽出された共有変数をグローバル変数テーブル５２１に改めて登録することなく処理を進める。
【００７３】
抽出された共有変数のうちのいずれかの共有変数がグローバル変数テーブル５２１に登録されていない場合（ステップＳ１０４：ＮＯ）、登録部５３２は、未登録の共有変数をグローバル変数テーブル５２１に登録する（ステップＳ１０５）。第２プログラム５２２の開発者は、第２プログラミング端末３を起動する。第２プログラミング端末３は、例えばグローバル変数テーブル５２１を、プログラム開発支援装置５に要求する。表示制御部５３３は、第２プログラミング端末３から要求されたグローバル変数テーブル５２１を、例えば図５、６及び７の少なくとも一つに示されているように第２プログラミング端末３に表示する（ステップＳ１０６）。
【００７４】
図１２は、警告をプログラム開発支援装置５が出力する手順の例を示すフローチャートである。取得部５３０は、図３に例として示されたグローバル変数テーブル５２１を、記憶装置５２から取得する（ステップＳ２０１）。取得部５３０は、第１プログラム５２０の第１ソースコード５２３（図２参照）を、記憶装置５２から取得する（ステップＳ２０２）。抽出部５３１は、「ｒｅｑＨａｎｄＣｌｏｓｅ」等の共有変数を第１ソースコード５２３から抽出する（ステップＳ２０３）。
【００７５】
登録部５３２は、第１ソースコード５２３から抽出された全ての共有変数がグローバル変数テーブル５２１に共有変数として登録されているか否かを判定する（ステップＳ２０４）。抽出された全ての共有変数がグローバル変数テーブル５２１に登録されている場合（ステップＳ２０４：ＹＥＳ）、表示制御部５３３は、警告を第２プログラミング端末３に出力することなく処理を終了する。
【００７６】
第１ソースコード５２３から抽出された共有変数のうちのいずれかの共有変数がグローバル変数テーブル５２１に登録されていない場合（ステップＳ２０４：ＮＯ）、表示制御部５３３は、第１ソースコード５２３のいずれかの共有変数がグローバル変数テーブル５２１に登録されていない旨の警告を、例えば図１０に示されているように、第１プログラミング端末２及び第２プログラミング端末３に表示する（ステップＳ２０５）。
【００７７】
図１３は、コントローラ６が実行する同期制御の例を示すフローチャートである。演算処理部６３は、ステップＳ３０１とステップＳ３０２とステップＳ３０６とステップＳ３０７とを、第１プログラム５２０の第１ソースコード５２３のタスク処理として実行する。演算処理部６３は、ステップＳ３０３からステップＳ３０５までを、第２プログラム５２２の実行ファイルのタスク処理として実行する。
【００７８】
演算処理部６３は、記憶装置６１からメモリ６２に展開された第１プログラム５２０の第１ソースコード５２３に基づいて、アーム７０を所定の位置まで移動する（ステップＳ３０１）。演算処理部６３は、メモリ６２における共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」の値をＴＲＵＥに変更することによって、第２プログラム５２２の実行ファイルのタスクに、アーム７０の移動完了を通知する（ステップＳ３０２）。
【００７９】
演算処理部６３は、第２プログラム５２２の実行ファイルのタスクにおいて、アーム７０の移動完了の通知を待つ（ステップＳ３０３）。演算処理部６３は、記憶装置６１からメモリ６２に展開された第２プログラム５２２の実行ファイルに基づいて、エンドエフェクタ９を動作させる（ステップＳ３０４）。演算処理部６３は、メモリ６２における共有変数「ｒｅｑＨａｎｄＣｌｏｓｅ」の値をＦＡＬＳＥに変更することによって、第１プログラム５２０の第１ソースコード５２３のタスクに、エンドエフェクタ９の動作完了を通知する（ステップＳ３０５）。
【００８０】
演算処理部６３は、第１プログラム５２０の第１ソースコード５２３のタスクにおいて、エンドエフェクタ９の動作完了の通知を待つ（ステップＳ３０６）。演算処理部６３は、記憶装置６１からメモリ６２に展開された第１プログラム５２０の第１ソースコード５２３に基づいて、アーム７０を所定の位置まで移動する（ステップＳ３０７）。
【００８１】
以上のように、第１プログラム５２０の第１ソースコード５２３は、インタプリタ型言語である第１プログラミング言語で記載される。第２プログラム５２２の第２ソースコード５２４は、共有変数を参照可能なコンパイラ型言語である第２プログラミング言語で記載される。プログラム開発支援システム１は、共有変数を参照可能な第１プログラム５２０及び第２プログラム５２２の開発を支援するシステムである。プログラム開発支援システム１は、抽出部５３１（共有変数抽出部）と、表示制御部５３３（表示制御部）とを備える。抽出部５３１は、共有変数を第１ソースコード５２３から抽出する。表示制御部５３３は、抽出された共有変数を示す情報を、第２プログラム５２２の開発画面に表示させる。
【００８２】
これによって、プログラム開発支援システム１は、第１プログラミング言語で記載された第１ソースコードで宣言された共有変数を、第２プログラミング言語で記載された第２ソースコードの作成者が効率的に把握することを可能とする。
【００８３】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００８４】
演算処理部５３が実行する処理の一部は、ＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェアを用いて実現されてもよい。演算処理部６３についても同様である。
【００８５】
共有変数は、第２ソースコード５２４で宣言されてもよい。この場合、抽出部５３１は、第２ソースコード５２４において共有変数を抽出する。登録部５３２は、第２ソースコード５２４から抽出された共有変数を、グローバル変数テーブル５２１に登録する。共有変数は、第１ソースコード５２３及び第２ソースコード５２４の両方で宣言されてもよい。この場合、抽出部５３１は、第１ソースコード５２３及び第２ソースコード５２４から、共有変数を抽出する。登録部５３２は、第１ソースコード５２３から抽出された共有変数と第２ソースコード５２４から抽出された共有変数との両方を、グローバル変数テーブル５２１に登録する。
【００８６】
（変形例）
図１１に示されたフローチャートは、第１プログラム５２０の開発者が第１プログラミング端末２の使用を続けている状況で実行されてもよい。すなわち、第１プログラミング端末２は、作成された第１ソースコード５２３をプログラム開発支援装置５において保存する。第１プログラム５２０の開発者は、第１プログラミング端末２の使用を終了することなく、第１プログラミング端末２の使用を続ける。この状況で、プログラム記録部５３５は、第１プログラミング端末２を経由して作成された第１プログラム５２０を、記憶装置５２に記録する。そして、プログラム開発支援装置５は、ステップＳ１０１以降の動作を実行する。
【符号の説明】
【００８７】
１…プログラム開発支援システム、２…第１プログラミング端末、３…第２プログラミング端末、４…通信回線、５…プログラム開発支援装置、６…コントローラ、７…ロボット、８…エンドエフェクタコントローラ、９…エンドエフェクタ、２０…表示部、２１…入力部、３０…表示部、３１…入力部、５０…通信部、５１…メモリ、５２…記憶装置、５３…演算処理部、５４…バス、６０…通信部、６１…記憶装置、６２…メモリ、６３…演算処理部、６４…バス、７０…アーム、５２０…第１プログラム、５２１…グローバル変数テーブル、５２２…第２プログラム、５２３…第１ソースコード、５２４…第２ソースコード、５３０…取得部、５３１…抽出部、５３２…登録部、５３３…表示制御部、５３４…ビルド実行部、５３５…プログラム記録部、６００…スクロールバー
【図１】
2019160074.tif 000003
【図２】
2019160074.tif 000004
【図３】
2019160074.tif 000005
【図４】
2019160074.tif 000006
【図５】
2019160074.tif 000007
【図６】
2019160074.tif 000008
【図７】
2019160074.tif 000009
【図８】
2019160074.tif 000010
【図９】
2019160074.tif 000011
【図１０】
2019160074.tif 000012
【図１１】
2019160074.tif 000013
【図１２】
2019160074.tif 000014
【図１３】
2019160074.tif 000015