以下、本発明の一側面に係る実施の形態(以下、「本実施形態」とも表記する)を、図面に基づいて説明する。
§1 適用例
図1を用いて、本発明が適用される場面の一例について説明する。図1は、本実施形態に係る制御システム1の概要を示す図である。制御システム1は、制御装置100と、端末装置200と、を備えている。
制御装置100は、PLC(Programmable Logic Controller)であり、制御対象である複数のフィールド機器50に接続されている。フィールド機器50は、例えば、I/O装置51、工作機械52、およびベルトコンベアのサーボモータ53等である。
制御装置100は、制御対象のフィールド機器50に応じたプログラムを実行することによりフィールド機器50等の外部機器からの情報収集および外部機器への動作制御の少なくともいずれか一方を行う。制御装置100は、複数のフィールド機器50のそれぞれを制御することで、生産ラインと各フィールド機器50とを同期制御する。
制御装置100によって実行される複数のプログラムのそれぞれは、互いに同じ言語によって記述されているものもあるし、互いに異なる言語によって記述されているものもある。制御装置100には、例えば、ラダー言語により記述されたPLCプログラム、および、Java(登録商標)により記述されたプログラム等の複数のプログラムが実行可能に記憶されている。なお、プログラムの種類としては、他にロボット用言語により記述されたロボットプログラム、G−コードにより記述されたNCプログラムなどが挙げられる。制御装置100によって実行されるこれらのプログラムのそれぞれは、端末装置200に対する操作によって、ユーザが編集可能である。
端末装置200は、制御装置100と通信し、制御装置100によって実行される複数のプログラムのそれぞれを編集可能に表示する。端末装置200は、制御装置100によって実行される、互いに異なる言語によって記述された複数のプログラムを1つの開発環境で編集可能とする開発ツールをユーザに提供する。
このように、制御システム1は、制御装置100が複数のプログラムを実行することにより外部機器からの情報収集および外部機器への動作制御の少なくともいずれか一方を行うとともに、端末装置200が、制御装置100によって実行される複数のプログラムを編集可能とする開発ツールをユーザに提供する。
§2 構成例
〔第1の実施形態〕
図2〜図7に基づいて、本発明の第1の実施形態に係る制御システム1の構成について詳細に説明する。図2は、第1の実施形態の制御システム1の要部構成を示すブロック図である。図3の(a)及び(b)は制御システム1によって生成されるプログラム一覧の一例を示す図である。図4〜図6の(a)は、制御システム1によって生成される共有変数一覧の例を示す図であり、図4〜図6の(b)は、共有変数一覧を集計して生成されるプログラム一覧の例を示す図である。図7の(a)〜(d)は、端末装置200におけるプログラム一覧の表示例を示す図である。
(制御装置100の構成)
制御装置100は、例えば産業用コントローラであり、PLCを好適に用いることができる。
制御装置100は、制御部110と、ストレージ180と、を備えている。
ストレージ180は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの不揮発性記憶装置で構成されている。ストレージ180には、互いに異なる言語によって記述されている複数のプログラムが実行可能に記憶されている。図2には、一例として、A言語で記述されたA言語プログラム181と、B言語で記述されたB言語プログラム185とがストレージ180に格納されている場合が示されている。
A言語プログラム181は、インタプリタ型のプログラムである。A言語プログラム181は、プログラム内で使用している共有変数の情報をソースコードによって保持している。なお、A言語プログラム181は、プログラム内で使用している共有変数の情報を、当該情報が書き込まれた共有変数使用情報ファイル183によって保持していてもよい。
B言語プログラム185は、インタプリタ型のプログラム、又はコンパイル型のプログラムである。B言語プログラム185は、プログラム内で使用している共有変数の情報を、当該情報が書き込まれた共有変数使用情報ファイル186によって保持している。
このように、ストレージ180は、互いに異なる言語で記述された複数のプログラム181,185の夫々を、プログラム内で使用されている変数の情報とともに実行可能に記憶している。
制御部110は、制御装置100の各部を統括的に制御する演算処理部であり、図示は省略するが、CPU(Central Processing Unit)、MPU(Micro Processing Unit)などと称される演算部、および作業領域としてのメモリなどで構成される。制御装置100は、1又は複数の制御部110を有していてもよい。
制御部110は、プログラム実行部120と、プログラム管理部130と、を含んでいる。
プログラム実行部120は、ストレージ180に格納された各種プログラムを読出して、主メモリに展開して実行することで、制御対象の外部機器からの情報収集および、当該外部機器への動作制御の少なくともいずれか一方を実現する。
プログラム管理部130は、ストレージ180に格納された複数のプログラムを管理する。プログラム管理部130は、ストレージ180に格納された複数のプログラムを1つの管理部で統括的に管理する構成であってもよいし、プログラム毎に個別の管理部で各プログラムを管理する構成であってもよい。本実施形態では、プログラム管理部130が、ストレージ180に格納された複数のプログラム毎に個別の管理部を備えている場合を例に説明する。
プログラム管理部130は、A言語プログラム管理部140と、B言語プログラム管理部150と、プログラム一覧集計部160と、を含んでいる。
A言語プログラム管理部140は、ストレージ180に格納されているA言語プログラム181で使用されている共有変数を管理する。A言語プログラム管理部140は、A言語プログラム181で使用されている共有変数の一覧を作成する共有変数一覧作成部141を有している。
共有変数一覧作成部141は、インタプリタ型言語で実装されたA言語プログラム181のソースコード182を解析することで、共有変数一覧を作成してもよい。A言語プログラム181が、ストレージ180に共有変数使用情報ファイル183とともに格納されている場合には、共有変数一覧作成部141は、共有変数使用情報ファイル183を参照して、共有変数一覧を作成してもよい。
共有変数一覧作成部141は、A言語プログラム181において、各共有変数が読み込みで使用されるか、書き込みで使用されるかの情報を含む共有変数一覧を作成する。また、共有変数一覧作成部141は、各共有変数のA言語プログラム181における使用箇所のファンクション名、及び行番号の少なくとも何れか一方を含む共有変数一覧を作成する。
また、共有変数一覧作成部141は、プログラム実行部120によってA言語プログラム181が実行された際の、A言語プログラム181における各共有変数の使用履歴を蓄積する。共有変数一覧作成部141は、各共有変数のA言語プログラム181における使用履歴の情報を含む共有変数一覧を作成する。
B言語プログラム管理部150は、ストレージ180に格納されているB言語プログラム185で使用されている共有変数を管理する。B言語プログラム管理部150は、B言語プログラム185で使用されている共有変数の一覧を作成する共有変数一覧作成部151を有している。共有変数一覧作成部151は、コンパイラ型言語で実装されたB言語プログラム185に対応付けてストレージ180に記憶されている共有変数使用情報ファイル186を参照して、共有変数一覧を作成する。
共有変数一覧作成部151は、B言語プログラム185において、各共有変数が読み込みで使用されるか、書き込みで使用されるかの情報を含む共有変数一覧を作成する。また、共有変数一覧作成部151は、各共有変数のB言語プログラム185における使用箇所のファンクション名、及び行番号の少なくとも何れか一方を含む共有変数一覧を作成する。
また、共有変数一覧作成部151は、プログラム実行部120によってB言語プログラム185が実行された際の、B言語プログラム185における各共有変数の使用履歴を蓄積する。共有変数一覧作成部151は、各共有変数のB言語プログラム185における使用履歴の情報を含む共有変数一覧を作成する。
このように、プログラム管理部130は、ストレージ180に格納されている複数のプログラムで使用されている共有変数の一覧をプログラム毎に作成する。プログラム一覧集計部160は、共有変数一覧作成部141,151によって複数プログラム毎に作成された、複数の共有変数一覧を集計して、各共有変数の使用元のプログラムの情報を含むプログラム一覧を作成する。
図3の(a)に示すように、プログラム一覧は、共有変数の識別子が、使用元のプログラムの識別子に対応付けられた表の態様であってもよい。使用元のプログラムの識別子は、例えば、ユーザがプログラムに設定した名前であってもよいし、プログラムのファイル名であってもよいし、プログラムのファイルパスであってもよいし、これらの複数を組み合わせたものであってもよい。
また、プログラム一覧は、各共有変数と、共有変数の使用元のプログラムに関する情報と、含んでいればよく、表の態様に限定されるものではない。また、表の態様であっても、図3の(b)に示すように、共有変数の一つ識別子に対して、複数の使用元のプログラムの識別子を対応付けた表の態様であってもよい。
図4の(a)に示すように、共有変数一覧作成部141,151によって作成された共有変数一覧には、各共有変数が定義で使用されているか、読み込みで使用されるか、書き込みで使用されるかの情報が含まれている。プログラム一覧集計部160は、共有変数一覧作成部141,151によって作成された、複数の共有変数一覧を参照して、共有変数を、使用元のプログラムにおいて、定義で使用されているか、読み込みで使用されているか、書き込みで使用されているかで別々に集計してもよい。図4の(b)は、共有変数を、使用元のプログラムにおいて、定義で使用されているか、読み込みで使用されているか、書き込みで使用されているかで別々に集計して作成されたプログラム一覧の例を示している。
このように、プログラム一覧集計部160は、共有変数を、使用元のプログラムにおいて、定義で使用されているか、読み込みで使用されているか、書き込みで使用されているかで別々に集計するため以下のような効果が得られる。即ち、ユーザが所定の共有変数の使用元を把握しようとする場合に、当該共有変数を定義しているプログラム、書き込んでいるプログラム、読み込んでいるプログラムをそれぞれ別々に把握することができる。よって、ユーザは各プログラムの内容の確認、及び共有変数の使用元の調査を効率良く、短時間で行うことができる。
これにより、例えば、ある共有変数が意図しない値になっているとき、ユーザは、当該共有変数の書き込みを行っているプログラムの一覧のみを確認することで原因を特定することができ、当該共有変数の読み込みを行っているプログラムの一覧は確認する必要がない。
また、共有変数一覧作成部141,151によって作成された共有変数一覧には、各共有変数の、プログラムにおける使用箇所のファンクション名、及び行番号の少なくとも何れかが含まれていてもよい。図5の(a)は、各共有変数の、プログラムにおける使用箇所のファンクション名、及び行番号の少なくとも何れかを含む共有変数一覧の例を示している。プログラム一覧集計部160は、共有変数一覧作成部141,151によって作成された、複数の共有変数一覧を参照して、共有変数を、使用元のプログラムにおける、使用箇所のファンクション名、及び行番号の少なくとも何れか一方に基づいて集計してもよい。
図5の(b)は、共有変数を、使用元のプログラムにおける、使用箇所のファンクション名、及び行番号の少なくとも何れか一方に基づいて集計して作成されたプログラム一覧の例を示している。このように、プログラム一覧集計部160は、共有変数を、使用元のプログラムにおける、使用箇所のファンクション名、及び行番号の少なくとも何れか一方に基づいて集計するため、ユーザは、プログラム一覧を参照することで、共有変数の使用元をより詳細に把握することができる。
また、共有変数一覧作成部141,151によって作成された共有変数一覧には、各共有変数のプログラムにおける使用履歴の情報が含まれている。図6の(a)は、各共有変数のプログラムにおける使用履歴の情報を含む共有変数一覧の例を示している。プログラム一覧集計部160は、共有変数一覧作成部141,151によって作成された、複数の共有変数一覧を参照して、共有変数の使用元のプログラムにおける使用履歴の情報を含むプログラム一覧を作成してもよい。図6の(b)は、共有変数の使用元のプログラムにおける使用履歴の情報を含むプログラム一覧の例を示している。
(端末装置200の構成)
端末装置200は、一般的なPC端末、およびタブレット端末等であり、ユーザ操作を受け付ける入力機能と、演算結果等をグラフィカルに表示する表示機能とを備える装置である。端末装置200は、制御装置100において実行される複数のプログラムのそれぞれのソースコードを、ユーザ操作によって編集するエディタとして機能する。
端末装置200は、端末装置200の各部を統括的に制御するエディタ制御部210を備えている。エディタ制御部210は、プログラム一覧取得部211と、プログラム一覧表示部212とを備えている。
プログラム一覧取得部211は、制御装置100のプログラム一覧集計部160が作成したプログラム一覧を、制御装置100から取得する。
プログラム一覧表示部212は、プログラム一覧取得部211が取得したプログラム一覧をグラフィカルに表示する。
図7の(a)に示すように、プログラム一覧表示部212は、共有変数と、共有変数の使用元のプログラムとが対応付けられたプログラム一覧を表形式で表示してもよい。また、図7の(b)に示すように、プログラム一覧表示部212は、共有変数と、共有変数の使用元のプログラムとを、図形式で対応付けて表示してもよい。図7の(b)に示した例では、プログラム一覧表示部212は、共有変数である「status」を、「PressSafetyWatcher」と、「PressStatusWatcher」との二つのプログラムで使用されていることを図形式で示している。
また、図7の(c)に示すように、プログラム一覧表示部212は、共有変数と、共有変数の使用元のプログラムとを、テキスト形式で対応付けて表示してもよい。また、図7の(d)に示すように、プログラム一覧表示部212は、共有変数にマウスのカーソールを被せると、当該共有変数の使用元のプログラムの一覧を、ツールチップで表示してもよい。
(制御装置100の処理の流れについて)
図8は、制御装置100における、プログラム一覧作成処理の流れを示すフローチャートである。制御装置100は、ストレージ180に記憶している複数のプログラムの少なくとも何れか1つに更新が行われた場合に、プログラム一覧作成処理を実行してもよい。また、制御装置100は、端末装置200を介して、ユーザがストレージ180に記憶している複数のプログラムの少なくとも何れか1つを編集する操作を行った場合に、プログラム一覧作成処理を実行してもよい。
制御部110のプログラム管理部130は、ストレージ180における所定のプログラムフォルダ内に格納されている全てのプログラムを列挙する(ステップS1)
プログラム管理部130は、全てのプログラムについて、繰り返し処理、又は並行処理によって、各言語プログラム管理部140,150において、共有変数一覧作成部141,151の機能により、下記のステップS3の処理を実行する(ステップS2)。
共有変数一覧作成部141,151は、各プログラムが定義している変数、読み込み又は書き込みで使用している変数の一覧である共有変数一覧を作成する(ステップS3)。
プログラム管理部130は、全てのプログラムについて、ステップS3の処理が終了するまで待機する(ステップS4)。
プログラム管理部130は、全てのプログラムについて、ステップS3の処理が終了したら、ステップS3で作成した複数の共有変数一覧を、プログラム一覧集計部160の機能により集計し、各共有変数の使用元のプログラムの情報を含む一覧であるプログラム一覧を作成し、保持する(ステップS5)。
(端末装置200の処理の流れについて)
図9は、端末装置200における、プログラム一覧を表示する処理の流れを示すフローチャートである。
端末装置200は、端末装置200においてユーザが、制御装置100によって実行可能に記憶されている複数のプログラムによって使用されている共有変数の使用元のプログラム一覧の表示を要求する操作を行った場合に、プログラム一覧を表示する処理を実行する。端末装置200は、ユーザが、制御装置100によって実行可能に記憶されている複数のプログラムの少なくとも何れか1つの編集を開始する操作を行った場合に、プログラム一覧を表示する処理を実行してもよい。
端末装置200のエディタ制御部210は、ユーザによる各共有変数の使用元のプログラム一覧の表示要求を受け付ける(ステップS11)。
エディタ制御部210は、プログラム一覧取得部211の機能により、制御装置100のプログラム管理部130から、各共有変数の使用元のプログラム一覧を取得する(ステップS12)。
エディタ制御部210は、プログラム一覧取得部211によって取得した各共有変数の使用元のプログラム一覧をプログラム一覧表示部212の機能により表示する(ステップS13)。
このように、制御システム1は、制御装置100において生成された各共有変数の使用元の情報を含むプログラム一覧を、端末装置200に表示してユーザに提示することができる。この構成によれば、互いに異なる言語で記述された複数のプログラム間で、共有変数が異なる目的で用いられている場合であっても、共有変数が使用されているプログラム、及び各プログラムにおける共有変数の使用目的をユーザが容易に把握することができる。よって、ユーザは、複数のプログラムの解読に時間をかけることなく、共有変数の削除、又は共有変数の値の変更などの編集を行うことができる。
(端末装置200におけるプログラム編集処理の流れについて)
上述したように、ユーザは、端末装置200に対する操作で、制御装置100によって実行される複数のプログラムのソースコードをそれぞれ編集することができる。端末装置200には、プログラム181,185のソースコードが保存されている。プログラム181,185のソースコードは、端末装置200のプログラムエディタにて作成されて、端末装置200に保存されていてもよい。また、制御装置100に格納されているプログラム181のソースコード182のコピーが、端末装置200に送信されて、端末装置200に保存されてもよい。また、プログラム181のソースコード182は、不図示の別の装置、例えばソースコードを管理するサーバ等から、端末装置200に送信されて、端末装置200に保存されてもよい。
ユーザは、端末装置200において、ソースコードの開発、及びソースコードの編集を行うことができる。インタプリタ型のプログラムでは、端末装置200においてユーザによって開発、又は編集されたソースコードは、制御装置100に送信され、ストレージ180に格納される。コンパイル型のプログラムでは、端末装置200においてユーザによって開発、又は編集されたコードがビルドされた後に、制御装置100へと転送されて、ストレージ180に格納される。
端末装置200は、ユーザが端末装置200に保存されているソースコードを編集し、1又は複数のプログラムで使用されている共有変数を削除する操作を行った際に、当該共有変数の削除による1又は複数のプログラムに対する影響をユーザに提示する処理を行うことができてもよい。図10は、ユーザが共有変数を削除する操作を行った場合の端末装置200による処理の流れを示すフローチャートである。
ユーザが端末装置200に対して共有変数を削除する操作を行うと、端末装置200のエディタ制御部210は、ユーザによる操作内容を受け付ける(ステップS21)。
エディタ制御部210は、プログラム一覧取得部211の機能により、制御装置100のプログラム管理部130から、各共有変数の使用元のプログラム一覧を取得し、取得したプログラム一覧を参照して、対象の共有変数を使用するプログラムの存在を確認する(ステップS22)。
エディタ制御部210は、対象の共有変数を使用するプログラムが存在するか否かを判定する(ステップS23)。エディタ制御部210は、対象の共有変数を使用するプログラムが存在すると判定すると(ステップS23でYES)、ステップS24に進む。エディタ制御部210は、対象の共有変数を使用するプログラムが存在しないと判定すると(ステップS23でNO)、ステップS26に進む。
エディタ制御部210は、対象の共有変数を使用するプログラムが存在する旨と、対象の共有変数を本当にユーザが削除を望むのか否かを確認する表示を行う(ステップS24)。図11は、エディタ制御部210によって端末装置200の表示画面に表示される確認画面の一例を示す図である。図11に示すように、端末装置200の表示画面には、対象の共有変数が使用されているプログラム一覧が表示される。
例えば、ユーザが共有変数である「status」を削除する操作を行った場合、エディタ制御部210は、「status」を共有変数として使用しているプログラムである「PressSafetyWatcher」、及び「PressStatusWatcher」を表示する。また、エディタ制御部210は、共有変数「status」が使用されている各プログラム「PressSafetyWatcher」、及び「PressStatusWatcher」のファイル名、及びファイルパス等をプログラムの名称とともに表示してもよい。なお、エディタ制御部210が表示する、対象の共有変数を使用するプログラムが存在する旨の確認画面の形式は、図11に示したダイアログ形式に限られるものではない。
確認画面には、対象の共有変数を削除するか、又は対象の共有変数の削除をキャンセルするかをユーザが操作によって選択指示することができる操作ボタン、又はチェックボックス等が表示される。ユーザは、確認画面に表示されたこれらの操作ボタン、又はチェックボックスに対して任意の操作を行うことで、対象の共有変数を削除する、又は対象の共有変数の削除をキャンセルすることを指示する操作を行うことができる。
エディタ制御部210は、確認画面に対する操作で、ユーザが対象の共有変数の削除を許可したか否かを判定する(ステップS25)。エディタ制御部210は、ユーザが対象の共有変数の削除を許可したと判定すると(ステップS25でYES)、ステップS26に進む。エディタ制御部210は、ユーザが対象の共有変数の削除を許可しなかった(キャンセルした)と判定すると(ステップS25でNO)、処理を終了する。
エディタ制御部210は、端末装置200に保存されている複数のプログラム181,185のソースコードのそれぞれに対して、対象の共有変数を削除する編集を行う(ステップS26)。
このように、端末装置200のプログラム一覧表示部212は、共有変数を削除する操作がユーザによって行われた場合に、削除対象の共有変数を使用するプログラムの一覧を表示することができてもよい。これにより、ユーザは、削除対象の共有変数が、どのプログラムで使用されているのかを容易に把握することができ、削除するか否かの判断を容易に行うことができる。
(制御装置100、及び端末装置200による処理の流れの変形例)
上述のように、制御装置100が、プログラム181,185の更新時や、ユーザによる編集時に、予めプログラム一覧を作成しておくことで、ユーザが、端末装置200においてプログラム一覧の表示を要求した際に、速やかに、プログラム一覧をユーザに提示することができる。
一方で、制御装置100は、ユーザが端末装置200に対する操作によってプログラム一覧の表示を要求した際に、プログラム一覧を作成する構成であってもよい。
図12は、ユーザが端末装置200に対する操作によってプログラム一覧の表示を要求した際に、制御装置100がプログラム一覧を作成する場合の、制御装置100と、端末装置200との間の処理の流れを示すシーケンス図である。
端末装置200のエディタ制御部210は、ユーザによる各共有変数の使用元のプログラム一覧の表示要求を受け付ける(ステップS31)。
エディタ制御部210は、プログラム一覧取得部211の機能により、制御装置100のプログラム管理部130に対して、各共有変数の使用元のプログラム一覧の作成指示を送信する(ステップS32)。
制御装置100の制御部110は、プログラム管理部130を介して、端末装置200のエディタ制御部210から、各共有変数の使用元のプログラム一覧の作成指示を受信し、まず、ストレージ180における所定のプログラムフォルダ内に格納されている全てのプログラムを列挙する(ステップS33)
プログラム管理部130は、全てのプログラムについて、繰り返し処理、又は並行処理によって、各言語プログラム管理部140,150において、共有変数一覧作成部141,151の機能により、下記のステップS35の処理を実行する(ステップS34)。
共有変数一覧作成部141,151は、各プログラムが定義している変数、読み込み又は書き込みで使用している変数の一覧である共有変数一覧を作成する(ステップS35)。
プログラム管理部130は、全てのプログラムについて、ステップS35の処理が終了するまで待機する(ステップS36)。
プログラム管理部130は、全てのプログラムについて、ステップS35の処理が終了したら、ステップS35で作成した複数の共有変数一覧を、プログラム一覧集計部160の機能により集計し、各共有変数の使用元のプログラムの情報を含む一覧であるプログラム一覧を作成し、端末装置200にプログラム一覧が終了した旨通知する(ステップS37)。
端末装置200のエディタ制御部210は、プログラム一覧取得部211の機能により、制御装置100のプログラム管理部130から、各共有変数の使用元のプログラム一覧を取得する(ステップS38)。
エディタ制御部210は、プログラム一覧取得部211によって取得した各共有変数の使用元のプログラム一覧をプログラム一覧表示部212の機能により表示する(ステップS39)。
〔第2の実施形態〕
本発明の第2の実施形態について、以下に説明する。なお、説明の便宜上、上記第1の実施形態にて説明した部材と同じ機能を有する部材については、同じ符号を付記し、その説明を繰り返さない。
図13は、第2の実施形態に係る制御システム2の要部構成を示すブロック図である。図13に示すように、第2の実施形態の制御システム2では、共有変数の使用元のプログラムの情報を含むプログラム一覧を作成するプログラム一覧集計部412が、制御装置300ではなく、端末装置400に備えられている点で、第1の実施形態の制御システム1とは構成を異にする。なお、制御装置300の構成は、プログラム管理部330がプログラム一覧集計部412を備えていない点の他は、第1の実施形態の制御装置100の構成と同様であるため、その説明を省略する。
端末装置400は、端末装置400の各部を統括的に制御する演算装置であるエディタ制御部410を備えている。エディタ制御部410は、共有変数一覧取得部411と、プログラム一覧集計部412と、プログラム一覧表示部413と、を含んでいる。共有変数一覧取得部411は、制御装置300のプログラム管理部330から、複数の共有変数一覧作成部141,151によって作成された共有変数一覧のそれぞれを取得する。
プログラム一覧集計部412は、共有変数一覧取得部411が制御装置300から取得した複数の共有変数一覧を集計して、各共有変数の使用元のプログラムの情報を含むプログラム一覧を作成する。プログラム一覧表示部413は、プログラム一覧集計部412が作成したプログラム一覧を表示画面に表示する。
(制御装置300の処理の流れについて)
図14は、制御装置300における、共有変数一覧作成処理の流れを示すフローチャートである。制御装置300は、ストレージ180に記憶している複数のプログラムの少なくとも何れか1つに更新が行われた場合に、共有変数一覧作成処理を実行してもよい。また、制御装置300は、端末装置400を介して、ユーザがストレージ180に記憶している複数のプログラムの少なくとも何れか1つを編集する操作を行った場合に、共有変数一覧作成処理を実行してもよい。
制御部310のプログラム管理部330は、ストレージ180における所定のプログラムフォルダ内に格納されている全てのプログラムを列挙する(ステップS41)
プログラム管理部330は、全てのプログラムについて、繰り返し処理、又は並行処理によって、各言語プログラム管理部140,150において、共有変数一覧作成部141,151の機能により、下記のステップS43の処理を実行する(ステップS42)。
共有変数一覧作成部141,151は、各プログラムが定義している変数、読み込み又は書き込みで使用している変数の一覧である共有変数一覧を作成する(ステップS43)。
プログラム管理部330は、全てのプログラムについて、ステップS43の処理が終了するまで待機する(ステップS44)。
(端末装置400の処理の流れについて)
図15は、端末装置400における、プログラム一覧を表示する処理の流れを示すフローチャートである。
端末装置400は、端末装置400においてユーザが、制御装置300によって実行可能に記憶されている複数のプログラムによって使用されている共有変数の使用元のプログラム一覧の表示を要求する操作を行った場合に、プログラム一覧を表示する処理を実行する。端末装置400は、ユーザが、制御装置300によって実行可能に記憶されている複数のプログラムの少なくとも何れか1つの編集を開始する操作を行った場合に、プログラム一覧を表示する処理を実行してもよい。
端末装置400のエディタ制御部410は、ユーザによる各共有変数の使用元のプログラム一覧の表示要求を受け付ける(ステップS51)。
エディタ制御部410は、共有変数一覧取得部411の機能により、制御装置300のプログラム管理部330から、各プログラムの共有変数一覧を取得する(ステップS52)。
エディタ制御部410は、プログラム一覧集計部412の機能により、ステップS52で取得した複数の共有変数一覧を集計し、各共有変数の使用元のプログラムの情報を含む一覧であるプログラム一覧を作成し、保持する(ステップS53)。
エディタ制御部410は、プログラム一覧集計部412によって作成した各共有変数の使用元のプログラム一覧をプログラム一覧表示部413の機能により表示する(ステップS54)。
(制御装置300、及び端末装置400による処理の流れの変形例)
上述のように、制御装置300が、プログラム181,185の更新時や、ユーザによる編集時に、予めプログラム一覧を作成しておくことで、ユーザが、端末装置400においてプログラム一覧の表示を要求した際に、速やかに、プログラム一覧をユーザに提示することができる。
一方で、制御装置300は、ユーザが端末装置400に対する操作によってプログラム一覧の表示を要求した際に、プログラム一覧を作成する構成であってもよい。
図16は、ユーザが端末装置400に対する操作によってプログラム一覧の表示を要求した際に、制御装置300がプログラム一覧を作成する場合の、制御装置300と、端末装置400との間の処理の流れを示すシーケンス図である。
端末装置400のエディタ制御部410は、ユーザによる各共有変数の使用元のプログラム一覧の表示要求を受け付ける(ステップS61)。
エディタ制御部410は、共有変数一覧取得部411の機能により、制御装置300のプログラム管理部330に対して、各プログラムの共有変数一覧の作成指示を送信する(ステップS62)。
制御装置300の制御部310は、プログラム管理部330を介して、端末装置400のエディタ制御部410から、各プログラムの共有変数一覧の作成指示を受信し、まず、ストレージ180内に格納されている全てのプログラムを列挙する(ステップS63)。
プログラム管理部330は、全てのプログラムについて、繰り返し処理、又は並行処理によって、各言語プログラム管理部140,150において、共有変数一覧作成部141,151の機能により、下記のステップS65の処理を実行する(ステップS64)。
共有変数一覧作成部141,151は、各プログラムが定義している変数、読み込み又は書き込みで使用している変数の一覧である共有変数一覧を作成する(ステップS65)。
プログラム管理部330は、全てのプログラムについて、ステップS65の処理が終了するまで待機する(ステップS66)。プログラム管理部330は、全てのプログラムについて、ステップS65の処理が終了した後、共有変数一覧作成が終了した旨を端末装置400に通知してもよい。
端末装置400のエディタ制御部410は、共有変数一覧取得部411の機能により、制御装置300のプログラム管理部330から、各プログラムの共有変数一覧を取得する(ステップS67)。
エディタ制御部410は、プログラム一覧集計部412の機能により、ステップS67で取得した各プログラムの共有変数一覧を集計し、各共有変数の使用元のプログラムの情報を含む一覧であるプログラム一覧を作成し保持する(ステップS68)。
エディタ制御部410は、プログラム一覧集計部412によって作成された各共有変数の使用元の情報を含むプログラム一覧をプログラム一覧表示部413の機能により表示する(ステップS69)。
このように、制御システム2は、制御装置300において生成された各プログラムの共有変数一覧を、端末装置400が取得し、端末装置400において各共有変数の使用元の情報を含むプログラム一覧を生成することができてもよい。この構成によれば、互いに異なる言語で記述された複数のプログラム間で、共有変数が異なる目的で用いられている場合であっても、共有変数が使用されているプログラム、及び、各プログラムにおける共有変数の使用目的をユーザが容易に把握することができる。よって、ユーザは、複数のプログラムの解読に時間をかけることなく、共有変数の削除、又は共有変数の値の変更などの編集を行うことができる。
〔第3の実施形態〕
本発明の第3の実施形態について、以下に説明する。なお、説明の便宜上、上記第1の実施形態にて説明した部材と同じ機能を有する部材については、同じ符号を付記し、その説明を繰り返さない。
図17は、第3の実施形態に係る制御システム3の要部構成を示すブロック図である。図17に示すように、第3の実施形態の制御システム3は、制御装置500と、端末装置600と、を備えている。
制御装置500は、制御部510と、ストレージ180と、を備えている。
ストレージ180には、A言語で記述されたA言語プログラム181と、B言語で記述されたB言語プログラム185とが格納されている。A言語プログラム181は、プログラム内で使用している共有変数の情報を、当該情報が書き込まれた共有変数使用情報ファイル184によって保持している。B言語プログラム185は、プログラム内で使用している共有変数の情報を、当該情報が書き込まれた共有変数使用情報ファイル187によって保持している。
図18は、共有変数使用情報ファイル184,187の一例を示す図である。図18に示すように、共有変数使用情報ファイル184,187には、プログラムで使用されている変数を共有変数として使用しているとみなす条件が書き込まれている。変数を共有変数として使用しているとみなす条件は、例えば、変数名の一部に含まれていてもよい。
変数を共有変数として使用しているとみなす条件は、GROUP_1,GROUP_2,GROUP_3と各プログラムにおける使用状況に応じてグループ分けされていてもよい。例えば、GROUP_1は、当該変数がA言語プログラム181、及びB言語プログラム185で使用されていることを示してもよい。GROUP_2は、当該変数がA言語プログラム181のみで使用されていることを示してもよい。GROUP_3は、当該変数がB言語プログラム185のみで使用されていることを示してもよい。なお、これらの条件は、後述する端末装置600の共有変数使用元有無判定部612に予めその定義が保持されている。
例えば、変数名が「press_shared_variable」である共有変数について、共有変数使用情報ファイル184,187には、変数を共有変数として使用しているとみなす条件、例えば、GROUP_1,GROUP_2が書き込まれている。また、当該共有変数について、共有変数使用情報ファイル184,187には、変数の型名「SAFETY_STATUS」と、当該型名の変数を共有変数として使用しているとみなす条件、例えば、GROUP_3,GROUP_4が書き込まれている。変数を共有変数として使用しているとみなす条件は、変数名、又は変数の型名の部分一致、前方一致、後方一致、完全一致の何れかで設定可能であってもよい。
制御装置500の制御部510は、プログラム実行部120と、プログラム管理部530と、を備えている。プログラム管理部530は、A言語プログラム管理部540と、B言語プログラム管理部550と、共有変数使用条件一覧集計部560と、を含んでいる。
A言語プログラム管理部540は、ストレージ180に格納されているA言語プログラム181で使用されている共有変数を管理する。A言語プログラム管理部540は、A言語プログラム181で使用されているとみなす共有変数の条件一覧を作成する共有変数条件一覧作成部541を有している。
B言語プログラム管理部550は、ストレージ180に格納されているB言語プログラム185で使用されている共有変数を管理する。B言語プログラム管理部550は、B言語プログラム185で使用されているとみなす共有変数の条件一覧を作成する共有変数条件一覧作成部551を有している。
共有変数条件一覧作成部541,551は、各プログラムの共有変数使用情報ファイル184,187を参照して、共有変数条件一覧を作成する。共有変数条件一覧作成部541,551は、共有変数使用情報ファイル184,187に含まれている変数名、又は変数の型名に対応付けられた、当該変数を共有変数として使用しているとみなす条件に基づいて、共有変数条件一覧を作成する。
共有変数使用条件一覧集計部560は、共有変数条件一覧作成部541,551によって複数プログラム毎に作成された、複数の共有変数条件一覧を集計して、各共有変数を使用しているとみなす条件の一覧である共有変数使用条件一覧を作成する。共有変数使用条件一覧集計部560は、各プログラムが変数を共有変数として使用しているとみなす条件を集計することで、共有変数使用条件一覧を作成する。
端末装置600は、端末装置600の各部を統括的に制御する演算装置であるエディタ制御部610を備えている。エディタ制御部610は、共有変数使用条件一覧取得部611と、共有変数使用元有無判定部612と、共有変数使用元表示部613と、を含んでいる。共有変数使用条件一覧取得部611は、制御装置500のプログラム管理部530から、共有変数使用条件一覧集計部560によって作成された共有変数使用条件一覧を取得する。
共有変数使用元有無判定部612は、共有変数使用条件一覧取得部611が制御装置500から取得した共有変数使用条件一覧を参照して、各共有変数の使用元のプログラムの有無を判定する。共有変数使用元有無判定部612は、共有変数使用条件一覧に含まれる各共有変数と、予めその定義を保持している当該共有変数が使用されているとみなす条件とに応じて、各共有変数を使用しているプログラムを判定する。
共有変数使用元有無判定部612は、例えば、GROUP_1はA言語プログラム181及びB言語プログラム185で使用されている共有変数、GROUP_2はA言語プログラム181のみで使用されている共有変数、GROUP_3はB言語プログラム185で使用されている共有変数、という共有変数が使用されているとみなす条件の定義を予め保持している。共有変数使用元有無判定部612は、これらの条件に基づいて、共有変数使用条件一覧取得部611が制御装置500から取得した共有変数使用条件一覧に記されている共有変数について使用元のプログラムを判定する。例えば、共有変数使用元有無判定部612は、共有変数使用条件一覧に記されている共有変数の変数名の一部に「GROUP_1」が含まれている変数については、A言語プログラム181及びB言語プログラム185で使用されている共有変数であると判定する。
共有変数使用元表示部613は、共有変数使用元有無判定部612の判定結果を端末装置600の表示画面に表示する。
(制御装置500の処理の流れについて)
図19は、制御装置500における、共有変数使用条件一覧作成処理の流れを示すフローチャートである。制御装置500は、ストレージ180に記憶している複数のプログラムの少なくとも何れか1つに更新が行われた場合に、共有変数使用条件一覧作成処理を実行してもよい。また、制御装置500は、端末装置600を介して、ユーザがストレージ180に記憶している複数のプログラムの少なくとも何れか1つを編集する操作を行った場合に、共有変数使用条件一覧作成処理を実行してもよい。
制御部510のプログラム管理部530は、ストレージ180における所定のプログラムフォルダ内に格納されている全てのプログラムを列挙する(ステップS71)
プログラム管理部530は、全てのプログラムについて、繰り返し処理、又は並行処理によって、各言語プログラム管理部540,550において、共有変数条件一覧作成部541,551の機能により、下記のステップS73の処理を実行する(ステップS72)。
共有変数条件一覧作成部541,551は、各プログラムの共有変数使用情報ファイル184,187を参照し、各変数を各プログラムの共有変数として使用しているとみなす条件の一覧を作成する(ステップS73)。
プログラム管理部530は、全てのプログラムについて、ステップS73の処理が終了するまで待機する(ステップS74)。
(端末装置600の処理の流れについて)
図20は、端末装置600における、各変数の使用元のプログラムを表示する処理の流れを示すフローチャートである。
端末装置600は、端末装置600においてユーザが、制御装置500によって実行可能に記憶されている複数のプログラムによって使用されている各変数の使用元のプログラムの表示を要求する操作を行った場合に、各変数の使用元のプログラムを表示する処理を実行する。端末装置600は、ユーザが、端末装置600に保存されている複数のプログラムのソースコードの少なくとも何れか1つの編集を開始する操作を行った場合に、各変数の使用元のプログラムを表示する処理を実行してもよい。
端末装置600のエディタ制御部610は、ユーザによる各変数の使用元のプログラムの表示要求を受け付ける(ステップS81)。
エディタ制御部610は、共有変数使用条件一覧取得部611の機能により、制御装置500のプログラム管理部530から、各変数を各プログラムの共有変数として使用しているとみなす条件の一覧である共有変数使用条件一覧を取得する(ステップS82)。
エディタ制御部610は、共有変数使用元有無判定部612の機能により、ステップS82で取得した共有変数使用条件一覧を参照し、予め設定されている条件と、共有変数使用条件一覧に記載されている条件とを照らし合わせて、各共有変数の使用元のプログラムの有無を判定する。エディタ制御部610は、共有変数使用元表示部613の機能により、共有変数使用元有無判定部612の判定結果を端末装置600の表示画面に表示する(ステップS83)。
このように、制御システム3においては、制御装置500において実行可能に格納されている各プログラムが、各変数を共有変数として使用しているとみなす条件が書き込まれた共有変数使用情報ファイルを備えている。よって、プログラムがインタプリタ型の言語出記述されていても、コンパイラ型の言語で記述されていても、複数のプログラム間で使用されている共有変数を用いているプログラムの有無を判定し、ユーザに判定結果を提示することができる。よって、ユーザは、複数のプログラムの解読に時間をかけることなく、共有変数の削除、又は共有変数の値の変更などの編集を行うことができる。
〔ソフトウェアによる実現例〕
制御装置100の制御ブロック(特に共有変数一覧作成部141,151、及びプログラム一覧集計部160)、及び端末装置200の制御ブロック(特にプログラム一覧取得部211、及びプログラム一覧表示部212)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、ソフトウェアによって実現してもよい。
後者の場合、制御装置100、及び端末装置200は、各機能を実現するソフトウェアであるプログラムの命令を実行するコンピュータを備えている。このコンピュータは、例えば1つ以上のプロセッサを備えていると共に、前記プログラムを記憶したコンピュータ読み取り可能な記録媒体を備えている。そして、前記コンピュータにおいて、前記プロセッサが前記プログラムを前記記録媒体から読み取って実行することにより、本発明の目的が達成される。前記プロセッサとしては、例えばCPU(Central Processing Unit)を用いることができる。前記記録媒体としては、「一時的でない有形の媒体」、例えば、ROM(Read Only Memory)等の他、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、前記プログラムを展開するRAM(Random Access Memory)などをさらに備えていてもよい。また、前記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して前記コンピュータに供給されてもよい。なお、本発明の一態様は、前記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。