(57)【要約】  プログラム管理システムは、プログラムＰｖ２を編集してプログラムＰｖ３を作成し、コンパイルによって、プログラムＰｖ２との差分に対応する実行モジュールＭ３を作成するプログラミング支援装置と、制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置と、を備える。管理装置は、実行モジュールＭ１を実行中のＰＬＣに実行モジュールＭ３が書き込まれる場合には、プログラムＰｖ３と、実行モジュールＭ３に固有の情報と、プログラムＰｖ３がコンパイル済みであることを示すコンパイルフラグとを管理し、実行モジュールＭ３がＰＬＣに書き込まれない場合には、プログラムＰｖ３と、実行モジュールＭ１に固有の情報と、プログラムＰｖ３が未コンパイルであることを示すコンパイルフラグとを管理する。
2019229845.tif 000002
【特許請求の範囲】
【請求項１】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで被制御機器を制御する制御装置に接続されるとともに、前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成するプログラミング支援装置と、
前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置と、
を備え、
前記プログラミング支援装置は、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記管理装置に前記第２バージョンのプログラムと、前記第２バージョンの実行モジュールに固有の情報とを送信し、前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記管理装置に前記第２バージョンのプログラムを送信し、
前記管理装置は、前記第２バージョンのプログラムおよび前記第２バージョンの実行モジュールに固有の情報を受信した場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第２バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みであることを示す情報に設定し、前記第２バージョンの実行モジュールに固有の情報を受信せず前記第２バージョンのプログラムを受信した場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第１バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みでないことを示す情報に設定する、
ことを特徴とするプログラム管理システム。
【請求項２】
前記プログラミング支援装置は、前記第２バージョンのプログラムを編集して作成した第３バージョンのプログラムをコンパイルする際に、前記コンパイル情報がコンパイル済みであることを示す場合には、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成し、前記コンパイル情報がコンパイル済みでないことを示す場合には、前記第１バージョンのプログラム、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって前記第３バージョンの実行モジュールを作成する、
ことを特徴とする請求項１に記載のプログラム管理システム。
【請求項３】
前記プログラミング支援装置は、前記第２バージョンの実行モジュールを作成する前に、前記第１バージョンのプログラムが前記最新バージョンのプログラムであるか否かを判定し、前記最新バージョンのプログラムである場合には、前記第２バージョンの実行モジュールを作成し、前記最新バージョンのプログラムでない場合には、前記第２バージョンの実行モジュールを作成しない、
ことを特徴とする請求項１または２に記載のプログラム管理システム。
【請求項４】
前記プログラミング支援装置は、前記第２バージョンの実行モジュールを作成する前に、前記管理装置で管理されている第１バージョンの実行モジュールと、前記制御装置で実行されている第１バージョンの実行モジュールとが同じであるか否かを判定し、同じである場合には、前記第２バージョンの実行モジュールを作成し、同じでない場合には、前記第２バージョンの実行モジュールを作成しない、
ことを特徴とする請求項１から３のいずれか１つに記載のプログラム管理システム。
【請求項５】
前記プログラミング支援装置は、複数の前記制御装置に接続され、
前記管理装置は、複数の前記制御装置に対して共通の、前記第２バージョンのプログラム、前記第２バージョンの実行モジュール、および前記コンパイル情報を管理する、
ことを特徴とする請求項１から４のいずれか１つに記載のプログラム管理システム。
【請求項６】
前記コンパイル情報は、前記管理装置または前記プログラミング支援装置によって設定され、前記管理装置で管理される、
ことを特徴とする請求項１から５のいずれか１つに記載のプログラム管理システム。
【請求項７】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで被制御機器を制御する制御装置に接続されるとともに、前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成するプログラミング支援部を備え、
前記プログラミング支援部は、
前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置に接続され、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記管理装置に前記第２バージョンのプログラムと、前記第２バージョンの実行モジュールに固有の情報とを送信し、前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記管理装置に前記第２バージョンのプログラムを送信する、
ことを特徴とするプログラミング支援装置。
【請求項８】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで制御装置が被制御機器を制御する制御ステップと、
前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成するプログラム編集ステップと、
コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成する実行モジュール作成ステップと、
前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理ステップと、
を含み、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第２バージョンのプログラムに固有の情報を用いて前記第２バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みであることを示す情報に設定し、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第１バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みでないことを示す情報に設定する、
ことを特徴とするプログラム管理方法。
【請求項９】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで制御装置が被制御機器を制御している際に、前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成する作成ステップと、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置に、前記第２バージョンのプログラムおよび前記第２バージョンの実行モジュールに固有の情報を送信し、前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記管理装置に前記第２バージョンのプログラムを送信する送信ステップと、
をコンピュータに実行させる、
ことを特徴とするプログラミング支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを管理するプログラム管理システム、プログラミング支援装置、プログラム管理方法、およびプログラミング支援プログラムに関する。
【背景技術】
【０００２】
制御装置の一例であるＰＬＣ（Programmable  Logic  Controller：プログラマブルロジックコントローラ）は、制御用のプログラムがコンパイルされることによって作成された実行モジュールを用いて動作する。この制御用のプログラムは、ユーザによって編集され、新しいバージョンのプログラムとなる場合がある。この場合において、新しいバージョンのプログラムと古いバージョンのプログラムとの差分がコンパイルされることによって新しいバージョンの実行モジュールが作成され、古いバージョンの実行モジュールを用いて動作しているＰＬＣに対し、新しいバージョンの実行モジュールが書き込まれる場合がある。このような、動作中のＰＬＣに対して実行モジュールの更新を行う処理は、実行中書き込みまたはラン（ＲＵＮ）中書き込みと呼ばれる。【０００３】
特許文献１に記載のプログラマブルコントローラシステムは、プログラムから作成された実行モジュールに識別情報を対応付けている。このプログラマブルコントローラシステムは、実行中書き込みを行う前に、ＰＬＣへのダウンロード対象の実行モジュールが、ＰＬＣで実行中のマスタ版から作成された派生版であるか否かを識別情報に基づいて判断し、派生版である場合にダウンロードを許可している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１６８０３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１に記載の技術を含め一般的に、支援装置が、プログラムを編集しコンパイルして実行モジュールを作成すると、作成した実行モジュールをＰＬＣに書き込んでいない場合であっても、作成した実行モジュールの元のプログラムを、最新のプログラムとして管理していた。【０００６】
最新として管理されているプログラムに対して編集が行われコンパイルが行われると、このコンパイルで作成された実行モジュールとＰＬＣで実行中の実行モジュールとの間で整合が取れなくなるため、ＰＬＣへの実行中書き込みを行っていない。【０００７】
この場合、ＰＬＣに書き込まなかった実行モジュールを特定し、上記コンパイルで作成された実行モジュールと併せて、ＰＬＣへの実行中書き込みを行う必要がある。あるいは、ＰＬＣで実行中の実行モジュールのコンパイル元のプログラムを特定し、当該プログラムとの差分の実行モジュールを作成し直した上で、ＰＬＣへの実行中書き込みを行う必要がある。このような実行モジュールの特定またはコンパイルの再実行が必要になるため、プログラムの開発効率が悪化するといった問題があった。【０００８】
本発明は、上記に鑑みてなされたものであって、効率良くプログラムを開発することができるプログラム管理システムを得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明のプログラム管理システムは、第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで被制御機器を制御する制御装置に接続されるとともに、第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、第１バージョンのプログラムと第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成するプログラミング支援装置を備える。また、本発明のプログラム管理システムは、制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置を備える。プログラミング支援装置は、第１バージョンの実行モジュールを実行中の制御装置に対して第２バージョンの実行モジュールを書き込む場合には、管理装置に第２バージョンのプログラムと、第２バージョンの実行モジュールに固有の情報とを送信し、第１バージョンの実行モジュールを実行中の制御装置に対して第２バージョンの実行モジュールを書き込まない場合には、管理装置に第２バージョンのプログラムを送信する。管理装置は、第２バージョンのプログラムおよび第２バージョンの実行モジュールに固有の情報を受信した場合には、第２バージョンのプログラムを最新バージョンのプログラムとして管理し、第２バージョンの実行モジュールを制御装置で実行中の実行モジュールとして管理し、コンパイル情報をコンパイル済みであることを示す情報に設定する。管理装置は、第２バージョンの実行モジュールに固有の情報を受信せず第２バージョンのプログラムを受信した場合には、第２バージョンのプログラムを最新バージョンのプログラムとして管理し、第１バージョンの実行モジュールを制御装置で実行中の実行モジュールとして管理し、コンパイル情報をコンパイル済みでないことを示す情報に設定する。
【発明の効果】
【００１０】
本発明にかかるプログラム管理システムは、効率良くプログラムを開発することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態にかかるプログラム管理システムの構成を示す図
【図２】実施の形態にかかる管理装置がプロジェクトデータの管理を開始するタイミングで記憶している情報を説明するための図
【図３】実施の形態にかかるプログラム管理システムにおいて、プログラムが編集されるもののＰＬＣには書き込まれない場合の処理手順を示すフローチャート
【図４】図３の処理が実行された後に実施の形態にかかる管理装置が記憶している情報を説明するための図
【図５】実施の形態にかかるプログラム管理システムにおいて、プログラムが編集されてＰＬＣに書き込まれる場合の処理手順を示すフローチャート
【図６】図５の処理が実行された後に実施の形態にかかる管理装置が記憶している情報を説明するための図
【図７】実施の形態にかかるプログラミング支援装置を実現するハードウェア構成を示す図
【発明を実施するための形態】
【００１２】
以下に、本発明の実施の形態にかかるプログラム管理システム、プログラミング支援装置、プログラム管理方法、およびプログラミング支援プログラムを図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１３】
実施の形態．
図１は、本発明の実施の形態にかかるプログラム管理システムの構成を示す図である。プログラム管理システム１は、プログラムＰをコンパイルすることによって作成した実行モジュールＭｘを管理するとともに、新たに作成された実行モジュールＭｘを用いてＰＬＣ１０に実行中書き込みを行うシステムである。プログラム管理システム１は、ＰＬＣ１０で実行中の実行モジュールＭｘのバージョンと、これから実行中書き込みを実施しようとした際に読み出してきた実行モジュールＭｘのバージョンとを一致させるよう、実行モジュールＭｘを管理する。
【００１４】
プログラムＰは、複数のユーザによって編集可能であり、ユーザによって編集されると、新しいバージョンのプログラムＰとなる。新しいバージョンのプログラムＰがコンパイルされると新しいバージョンの実行モジュールＭｘが生成される。プログラムＰの例は、後述するプログラムＰｖ１〜Ｐｖ３であり、実行モジュールＭｘの例は、後述する実行モジュールＭ１〜Ｍ３である。
【００１５】
実行中書き込みは、ＰＬＣ１０の動作を停止しないでＰＬＣ１０の実行モジュールを更新する処理である。実行中書き込みでは、特定の実行モジュールを用いて動作しているＰＬＣ１０に対し、新しいバージョンの実行モジュールが書き込まれる。実行中書き込みの際には、ＰＬＣ１０に前回書き込み時との差分となる実行モジュールがＰＬＣ１０に書き込まれる。本実施の形態では、プログラム管理システム１が、ＰＬＣ１０で実行中の実行モジュールＭｘのバージョンを管理し、ＰＬＣ１０で実行中の実行モジュールＭｘに対応する適切な実行モジュールＭｘにのみ、実行中書き込みを許可する。
【００１６】
プログラム管理システム１は、産業用機械を制御する制御装置の一例であるＰＬＣ１０と、管理装置２０と、プログラミング支援装置３０とを備えている。
【００１７】
ＰＬＣ１０は、実行モジュールＭｘを格納しており、この実行モジュールＭｘを用いて産業用機械といった被制御機器を制御する。プログラミング支援装置３０は、産業用機械を制御するためのプログラムＰをコンパイルすることによってプログラムＰから実行モジュールＭｘを作成するコンピュータである。プログラム管理装置である管理装置２０は、プログラムＰのバージョン管理および実行モジュールＭｘのバージョン管理を行うコンピュータである。
【００１８】
管理装置２０には、１または複数のプログラミング支援装置３０が接続されている。また、１または複数のプログラミング支援装置３０は、それぞれＰＬＣ１０に接続されている。管理装置２０の一例は、サーバであり、プログラミング支援装置３０の一例はクライアント装置である。
【００１９】
プログラミング支援装置３０は、プログラミング支援ツールであるプログラミング支援部３１と、記憶部３９とを備えている。プログラミング支援部３１は、プログラムＰの作成を支援する機能を有している。具体的には、プログラミング支援部３１は、プログラムＰを作成する機能と、プログラムＰを編集する機能と、プログラムＰをコンパイルする機能とを備えている。また、プログラミング支援部３１は、プログラムＰおよび実行モジュールＭｘを、外部装置である管理装置２０に送信する機能と、実行モジュールＭｘをＰＬＣ１０に書き込む機能と、管理装置２０で管理されている、コンパイルフラグ２３、プログラムＰおよび実行モジュールＭｘを読み出す機能とを備えている。
【００２０】
プログラムＰを作成する機能の具体例は、ユーザからの指示に従ってプログラムＰを作成する機能であり、プログラムＰを編集する機能の具体例は、ユーザからの指示に従ってプログラムＰを編集する機能である。プログラムＰをコンパイルする機能は、プログラムＰをコンパイルすることによって、プログラムＰから実行モジュールＭｘを作成する機能である。プログラムＰをコンパイルする機能であるコンパイラは、ソースコードであるプログラムＰを、機械語である実行モジュールＭｘに変換する。なお、プログラミング支援部３１は、複数のプログラムＰに対して実行モジュールＭｘを作成してもよいし、プログラムＰ毎に実行モジュールＭｘを作成してもよい。
【００２１】
プログラミング支援部３１が管理装置２０に送信するプログラムＰおよび実行モジュールＭｘは、プログラミング支援部３１が作成または編集したものである。また、プログラミング支援部３１がＰＬＣ１０に書き込む実行モジュールＭｘは、プログラミング支援部３１が作成または編集したものである。
【００２２】
また、プログラミング支援部３１が管理装置２０から読み出すプログラムＰおよび実行モジュールＭｘは、プログラミング支援部３１で、以前に作成または編集したものである。なお、プログラミング支援部３１が管理装置２０から読み出すプログラムＰおよび実行モジュールＭｘは、他のプログラミング支援装置３０で作成または編集されたものであってもよい。
【００２３】
記憶部３９は、プログラムＰおよび実行モジュールＭｘを管理するためのデータであるプロジェクトデータ２２を記憶する。このプロジェクトデータ２２は、プログラミング支援部３１がプロジェクトデータ２２を編集する際に、プログラミング支援部３１が管理装置２０から読み出したものである。プロジェクトデータ２２内には、コンパイルフラグ２３と、プログラムＰと、実行モジュールＭｘとが含まれている。
【００２４】
プログラムＰは、編集されて新しいバージョンのプログラムＰとなった後にコンパイルされると、実行モジュールＭｘも新しいバージョンとなる。したがって、プログラミング支援部３１が、新しいバージョンのプログラムＰをコンパイルして新しいバージョンの実行モジュールＭｘを作成した場合には、新しいバージョンの実行モジュールＭｘが記憶部３９で記憶される。このように、記憶部３９は、プログラミング支援部３１がプロジェクトデータ２２を編集すると、編集後のプロジェクトデータ２２を記憶する。
【００２５】
コンパイル情報であるコンパイルフラグ２３は、プロジェクトデータ２２に含まれるプログラムＰがコンパイル済みであるか否かを示すフラグである。プロジェクトデータ２２に複数のプログラムＰが含まれる場合、コンパイルフラグ２３では、コンパイル済みであるか否かの情報がプログラム毎に示される。
【００２６】
プログラミング支援装置３０は、ユーザからの指示に従ってプログラムＰを編集してこのプログラムＰを保存しておく場合と、ユーザからの指示に従って編集したプログラムＰをコンパイルしてＰＬＣ１０に実行中書き込みをする場合とがある。プログラミング支援装置３０は、ユーザからの指示に従って編集したプログラムＰをコンパイルしてＰＬＣ１０に実行中書き込みをする場合、編集したプログラムＰと、ＰＬＣ１０で実行中の実行モジュールＭｘに対応するプログラムＰとの差分を算出し、差分に対応する実行モジュールを作成する。差分に対応する実行モジュールの例は、後述する実行モジュールＭ３である。プログラミング支援装置３０は、差分の実行モジュールＭ３を用いて、ＰＬＣ１０に実行中書き込みを行い、さらに差分の実行モジュールＭ３を管理装置２０に保存させる。なお、プログラミング支援装置３０は、編集したプログラムＰの実行モジュールと、ＰＬＣ１０で実行中の実行モジュールＭｘとの差分に対応する実行モジュールを作成してもよい。この場合も、差分に対応する実行モジュールの例は、後述する実行モジュールＭ３である。
【００２７】
編集したプログラムＰとＰＬＣ１０で実行中の実行モジュールＭｘに対応するプログラムＰとの差分は、プログラムＰへの編集で追加された特定の行などである。なお、プロジェクトデータ２２内のプログラムＰが複数のプログラムである場合、編集したプログラムＰとＰＬＣ１０で実行中の実行モジュールＭｘに対応するプログラムＰとの差分は、複数のプログラムのうちの特定のプログラムの全体であってもよい。
【００２８】
なお、プログラミング支援ツールであるプログラミング支援部３１は、エンジニアリングツールの一部であってもよい。エンジニアリングツールは、プログラミング支援装置３０が、ユーザからの指示に従って、ＰＬＣ１０への各種設定を行うためのアプリケーションソフトウェアである。
【００２９】
管理装置２０は、バージョン管理ツールであるバージョン管理部２１と、記憶部２９とを備えている。バージョン管理部２１は、プログラミング支援装置３０から送られてくるプロジェクトデータ２２を管理する。具体的には、バージョン管理部２１は、プログラミング支援装置３０から送られてくる実行モジュールＭｘおよびプログラムＰを管理する。また、バージョン管理部２１は、コンパイルフラグ２３およびバージョン情報２５を管理する。
【００３０】
バージョン管理部２１は、プログラミング支援装置３０からプロジェクトデータ２２を受信すると、このプロジェクトデータ２２を記憶部２９に記憶させる。したがって、プログラムＰがプログラミング支援装置３０で編集されて新しいバージョンのプログラムＰとなった場合には、新しいバージョンのプログラムＰが記憶部２９で記憶される。
【００３１】
記憶部２９は、バージョン管理部２１からの指示に従ってプロジェクトデータ２２を記憶する。記憶部２９で記憶されるプロジェクトデータ２２も、記憶部３９で記憶されるプロジェクトデータ２２と同様にコンパイルフラグ２３、プログラムＰおよび実行モジュールＭｘを含んでいる。また、記憶部２９は、バージョン情報２５を記憶する。
【００３２】
なお、記憶部２９は、複数のプロジェクトデータ２２を記憶してもよい。また、各プロジェクトデータ２２には、複数のプログラムＰが含まれていてもよい。バージョン管理部２１は、プログラミング支援装置３０内に配置されてもよいし、プログラミング支援装置３０および管理装置２０以外に配置されてもよい。
【００３３】
バージョン管理部２１は、プログラムＰがプログラミング支援装置３０で編集されて新しいバージョンとなった際にコンパイルフラグ２３を更新する。バージョン管理部２１は、プログラムＰが編集された後にコンパイルされなければ、コンパイルフラグ２３を未コンパイルに設定し、プログラムＰが編集された後にコンパイルされると、コンパイルフラグ２３をコンパイル済みに設定する。本実施の形態では、後述するように、実行モジュールＭｘがＰＬＣ１０に書き込まれる場合にはコンパイルフラグ２３がコンパイル済みに設定されるので、コンパイルフラグ２３は、ＰＬＣ１０に実行モジュールＭｘが書き込まれたか否かを示すフラグであるともいえる。
【００３４】
また、バージョン管理部２１は、プログラミング支援装置３０から送られてくるプログラムＰと、このプログラムＰのバージョンとに基づいて、バージョン情報２５を編集する。バージョン情報２５は、バージョン管理部２１によって管理される情報である。バージョン情報２５では、プログラムＰと、プログラムＰのバージョンとが対応付けされている。例えば、プログラムＰの一例であるプログラムＰｖ１が第１バージョンであり、プログラムＰの一例であるプログラムＰｖ２が第２バージョンである場合、バージョン情報２５では、プログラムＰｖ１と第１バージョンを示す情報とが対応付けされ、プログラムＰｖ２と第２バージョンを示す情報とが対応付けされている。
【００３５】
バージョン管理部２１は、新しいバージョンのプログラムＰがプログラミング支援装置３０から送られてくると、この新しいバージョンとプログラムＰとを対応付けしてバージョン情報２５に登録する。
【００３６】
ここで、プログラムＰが編集された場合の、実行モジュールＭｘの管理手順および管理装置２０で管理される情報について説明する。図２は、実施の形態にかかる管理装置がプロジェクトデータの管理を開始するタイミングで記憶している情報を説明するための図である。なお、図２では、プログラムＰの一例であるプログラムＰｖ１と、実行モジュールＭｘの一例である実行モジュールＭ１が作成された場合について説明する。
【００３７】
プログラミング支援部３１は、第１バージョンのプログラムＰｖ１を作成すると、このプログラムＰｖ１をコンパイルすることによって第１バージョンの実行モジュールである実行モジュールＭ１を作成する。そして、プログラミング支援部３１は、作成した実行モジュールＭ１をＰＬＣ１０に送信し、ＰＬＣ１０に書き込む。このとき、プログラミング支援部３１は、作成したプログラムＰｖ１および実行モジュールＭ１を含んだプロジェクトデータ２２を作成し、作成したプロジェクトデータ２２を管理装置２０に送信する。これにより、ＰＬＣ１０は、実行モジュールＭ１を用いて産業用機械の制御を開始し、管理装置２０は、プロジェクトデータ２２を記憶部２９で記憶する。このとき、管理装置２０のバージョン管理部２１は、プログラムＰｖ１とともに実行モジュールＭ１を受信しているので、プログラムＰｖ１に対応するコンパイルフラグ２３をコンパイル済みに設定する。
【００３８】
これにより、図２に示すように、記憶部２９では、コンパイル済みに設定されたコンパイルフラグ２３と、プログラムＰｖ１と、実行モジュールＭ１と、を含んだプロジェクトデータ２２が記憶される。この場合において、バージョン管理部２１は、バージョン情報２５に、プログラムＰｖ１を識別する情報と、プログラムＰｖ１のバージョンを示すバージョン番号とを登録する。このバージョン番号は、ユーザによって指定されるものである。バージョン管理部２１は、例えば、プログラムＰｖ１のバージョンに「ver.1」が指定された場合、第１バージョンのプログラムＰｖ１を識別する情報と、第１バージョンであることを示す「ver.1」とを対応付けしてバージョン情報２５に登録する。プログラムＰｖ１を識別する情報の例は、プログラムＰｖ１の名称である。
【００３９】
この後、ユーザが、プログラムＰｖ１を編集したい場合がある。この場合、プログラミング支援部３１は、ユーザからの指示に従って管理装置２０からプログラムＰｖ１を読み出し、記憶部３９に記憶させる。そして、プログラミング支援部３１は、ユーザからの指示に従ってプログラムＰｖ１を編集する。この場合において、ユーザは、プログラムＰｖ１を編集するだけで、ＰＬＣ１０には反映させない場合と、プログラムＰｖ１を編集した後、プログラムＰｖ１をＰＬＣ１０に反映させたい場合とがある。
【００４０】
ここで、第１のユーザと第２のユーザとによってプログラム編集が実行される場合について説明する。第１のユーザは、プログラムＰｖ１を編集して後述のプログラムＰｖ２を作成するだけで、プログラムＰｖ２に対応する実行モジュールＭ２をＰＬＣ１０には書き込まないものとする。その後、第２のユーザは、プログラムＰｖ２を編集して後述のプログラムＰｖ３を作成し、その後、プログラムＰｖ３をコンパイルしてＰＬＣ１０に反映させるものとする。このような、ユーザによる処理の手順について説明する。以下の説明では、第１バージョンのプログラムＰｖ１から、第２バージョンのプログラムＰｖ２が作成され、第２バージョンのプログラムＰｖ２から第３バージョンのプログラムＰｖ３が作成される場合について説明する。したがって、第１バージョンのプログラムＰｖ１がコンパイルされると第１バージョンの実行モジュールＭ１となり、第２バージョンのプログラムＰｖ２がコンパイルされると第２バージョンの実行モジュールＭ２（図示せず）となり、第３バージョンのプログラムＰｖ３がコンパイルされると第３バージョンの実行モジュールＭ３となる。
【００４１】
図３は、実施の形態にかかるプログラム管理システムにおいて、プログラムが編集されるもののＰＬＣには書き込まれない場合の処理手順を示すフローチャートである。第１のユーザであるユーザＡＡがプログラムＰｖ１を編集する場合、ユーザＡＡからの指示に従ってプログラミング支援装置３０のプログラミング支援部３１は、管理装置２０からプログラムＰｖ１、コンパイルフラグ２３および実行モジュールＭ１を読み出して取得する（ステップＳ１０）。このプログラムＰｖ１、コンパイルフラグ２３および実行モジュールＭ１は、記憶部３９で記憶される。
【００４２】
この後、プログラミング支援装置３０のプログラミング支援部３１は、ユーザＡＡからの指示に従ってプログラムＰｖ１を編集し、新しいバージョンのプログラムＰｖ２を作成する（ステップＳ２０）。プログラミング支援部３１は、プログラムＰｖ２をプログラムＰｖ１と同じファイル名で作成し、バージョン番号を更新する。例えば、ユーザＡＡが、プログラムＰｖ２のバージョンに「ver.2」を指定すると、プログラミング支援部３１は、プログラムＰｖ２と「ver.2」とを対応付ける。
【００４３】
この後、プログラミング支援装置３０のプログラミング支援部３１は、管理装置２０のバージョン管理部２１に、「ver.2」に対応付けされたプログラムＰｖ２を送信する（ステップＳ３０）。このとき、プログラミング支援部３１は、読み出したプログラムＰｖ１に対応するプロジェクトデータ２２を指定して、バージョン管理部２１にプログラムＰｖ２を送信する。
【００４４】
これにより、管理装置２０のバージョン管理部２１は、指定されたプロジェクトデータ２２にプログラムＰｖ２を含める。すなわち、管理装置２０の記憶部２９が、プログラムＰｖ２を記憶する。さらに、管理装置２０では、プログラムＰｖ２に対応する実行モジュールＭ２が送られてきていないので、管理装置２０のバージョン管理部２１が、プログラムＰｖ２のコンパイルフラグ２３を未コンパイルに変更する（ステップＳ４０）。また、バージョン管理部２１は、プログラムＰｖ２を識別する情報と、プログラムＰｖ２のバージョンを示す「ver.2」とを対応付けしてバージョン情報２５に登録する。
【００４５】
なお、プログラミング支援部３１は、ユーザＡＡからの指示に従ってプログラムＰｖ２をコンパイルし、これによりプログラムＰｖ２に対応する実行モジュールＭ２を作成してもよい。この場合であっても、プログラミング支援部３１は、ユーザＡＡから、ＰＬＣ１０への実行モジュールＭ２の書き込み指示が無かった場合には、実行モジュールＭ２をＰＬＣ１０へも管理装置２０へも送信しない。これにより、ＰＬＣ１０内の実行モジュールＭ１と管理装置２０で管理している実行モジュールＭ１との同一性を維持できる。なお、実行中書き込みをしない場合には、ステップＳ１０でコンパイルフラグ２３および実行モジュールＭ１の取得を省略してもよい。
【００４６】
図４は、図３の処理が実行された後に実施の形態にかかる管理装置が記憶している情報を説明するための図である。図３の処理が実行されることにより、管理装置２０のバージョン管理部２１は、プログラムＰｖ２を記憶部２９に記憶させる。具体的には、バージョン管理部２１は、プログラムＰｖ１のファイル名で記憶されていたファイルを、プログラムＰｖ２の内容に変更する。したがって、記憶部２９では、ファイル名を維持したままプログラムＰｖ１の内容がプログラムＰｖ２の内容に変更される。なお、プログラムＰｖ１は、記憶部２９内でプログラムＰｖ２が保存される領域とは別の領域に保存しておいてもよい。この場合、バージョン管理部２１は、プログラムＰｖ２の代わりに、プログラムＰｖ１とプログラムＰｖ２との差分を記憶部２９に記憶させてもよい。
【００４７】
また、バージョン管理部２１は、プログラムＰｖ２のコンパイルフラグ２３をコンパイル済みから未コンパイルに書き換える。また、実行モジュールＭ１は、更新されない。したがって、記憶部２９は、未コンパイルを示すコンパイルフラグ２３と、プログラムＰｖ２と、実行モジュールＭ１とを含んだプロジェクトデータ２２を記憶する。
【００４８】
このように、プログラムＰｖ１が編集されるだけの場合、編集後のプログラムＰｖ２は、コンパイルされることなく管理装置２０に送信されて、管理装置２０の記憶部２９で記憶される。この場合において、バージョン管理部２１は、バージョン情報２５にプログラムＰｖ２を識別する情報と、プログラムＰｖ２のバージョンを示すバージョン番号とを登録する。このバージョン番号は、ユーザによって指定されるものである。バージョン管理部２１は、例えば、プログラムＰｖ２のバージョンに「ver.2」が指定された場合、第２バージョンのプログラムＰｖ２を識別する情報と、第２バージョンを示す「ver.2」とを対応付けしてバージョン情報２５に登録する。
【００４９】
図５は、実施の形態にかかるプログラム管理システムにおいて、プログラムが編集されてＰＬＣに書き込まれる場合の処理手順を示すフローチャートである。第２のユーザであるユーザＢＢは、ユーザＡＡが用いたプログラミング支援装置３０でプログラムＰｖ２を編集してもよいし、ユーザＡＡが用いたプログラミング支援装置３０とは異なるプログラミング支援装置でプログラムＰｖ２を編集してもよい。ここでは、ユーザＢＢが、ユーザＡＡの用いたプログラミング支援装置３０でプログラムＰｖ２を編集する場合について説明する。以下に説明するステップＳ１１０からＳ１７０の処理は、プログラミング支援装置３０によって実行される処理であり、ステップＳ１８０の処理は、管理装置２０によって実行される処理である。
【００５０】
ユーザＢＢがプログラムＰｖ２を編集する場合、ユーザＢＢからの指示に従ってプログラミング支援装置３０のプログラミング支援部３１は、管理装置２０からプログラムＰｖ２、コンパイルフラグ２３および実行モジュールＭ１を読み出して取得する（ステップＳ１１０）。このプログラムＰｖ２、コンパイルフラグ２３および実行モジュールＭ１は、記憶部３９で記憶される。
【００５１】
この後、プログラミング支援装置３０のプログラミング支援部３１は、ユーザＢＢの指示に従ってプログラムＰｖ２を編集し、プログラムＰｖ３を作成する（ステップＳ１２０）。さらに、プログラミング支援装置３０のプログラミング支援部３１は、ＰＬＣ１０へのプログラムＰｖ３の書き込み指示をユーザＢＢから受付けると（ステップＳ１３０）、管理装置２０から取得したプログラムＰｖ２が最新バージョンのプログラムであるか否かを判定する（ステップＳ１４０）。
【００５２】
ここで、管理装置２０から取得したプログラムＰｖ２が最新バージョンのプログラムであるか否かを判定する理由について説明する。ユーザＡＡおよびユーザＢＢのように、複数人がプログラム編集を行う場合、ユーザＢＢがプログラム編集を行っている間に、他のユーザＣＣによってプログラム編集が行われる場合がある。例えば、ユーザＢＢがプログラムＰｖ２からプログラムＰｖ３を作成している間に、ユーザＣＣが、プログラムＰｖ２からプログラムＰｖ４を作成する場合がある。プログラムＰｖ３が記憶部２９に登録される前にプログラムＰｖ４が記憶部２９に登録されると、プログラムＰｖ４が最新バージョンのプログラムとなり、プログラムＰｖ２は最新バージョンでなくなる。このような状況で、ユーザＢＢが作成したプログラムＰｖ３がＰＬＣ１０に書き込まれると、最新でないプログラムＰｖ２に対する編集で作成されたプログラムＰｖ３がＰＬＣ１０に書き込まれることとなり、プログラムＰｖ３とプログラムＰｖ４との整合性が取れなくなる。このため、プログラミング支援部３１は、ＰＬＣ１０にプログラムＰｖ３を書き込む前に、管理装置２０から取得したプログラムＰｖ２が最新バージョンのプログラムであるか否かを判定する。
【００５３】
管理装置２０から取得したプログラムＰｖ２が最新バージョンのプログラムでない場合（ステップＳ１４０、Ｎｏ）、プログラムＰｖ３は、最新バージョンでないプログラムから編集されたものとなっているので、プログラミング支援装置３０のプログラミング支援部３１は、ＰＬＣ１０への書き込みは不可であると判定する（ステップＳ１５０）。このように、プログラミング支援部３１は、プログラムＰｖ２が最新バージョンのプログラムでない場合には、実行モジュールＭ２を作成しない。
【００５４】
一方、管理装置２０から取得したプログラムＰｖ２が最新バージョンのプログラムである場合（ステップＳ１４０、Ｙｅｓ）、プログラミング支援装置３０のプログラミング支援部３１は、ＰＬＣ１０内の実行モジュールＭ１と、管理装置２０から取得した実行モジュールＭ１とが同一であるか否かを確認する（ステップＳ１５５）。
【００５５】
プログラミング支援部３１は、例えば、実行モジュールＭ１のバイナリーデータのハッシュ値を比較することによって、実行モジュールＭ１の同一性を判定する。この場合、プログラミング支援部３１は、ＰＬＣ１０内の実行モジュールＭ１のバイナリーデータから第１のハッシュ値を算出し、これから実行中書き込みを実施しようとした際に管理装置２０から取得した実行モジュールＭ１のバイナリーデータから第２のハッシュ値を算出する。そして、プログラミング支援部３１は、算出した第１のハッシュ値と第２のハッシュ値とを比較する。プログラミング支援部３１は、この比較結果に基づいて、ＰＬＣ１０内の実行モジュールＭ１と、これから実行中書き込みを実施しようとした際に管理装置２０から取得した実行モジュールＭ１と、が同一であるか否かを判定する。
【００５６】
プログラミング支援部３１が、第１のハッシュ値と第２のハッシュ値とを比較することによって実行モジュールＭ１の同一性を判定する場合、プログラミング支援部３１は、実行モジュールＭ１の代わりに第２のハッシュ値を管理装置２０に送信しておいてもよい。すなわち、プログラミング支援部３１は、実行モジュールＭ１の代わりに、実行モジュールＭ１に固有の情報を管理装置２０に送信しておけばよい。これにより、プログラミング支援部３１は、管理装置２０から実行モジュールＭ１に固有の情報を取得することができるので、ＰＬＣ１０内の実行モジュールＭ１と、管理装置２０で管理されている実行モジュールＭ１とが同一であるか否かを確認することができる。実行モジュールＭ１に固有の情報は、実行モジュールＭ１そのものであってもよい。なお、プログラミング支援部３１は、実行モジュールＭ１のバイナリーデータを上述した方法に限らず何れの方法で比較してもよい。
【００５７】
ＰＬＣ１０内の実行モジュールＭ１と、管理装置２０から取得した実行モジュールＭ１とが同一でない場合（ステップＳ１５５、Ｎｏ）、何らかの異常が発生している可能性があるので、プログラミング支援装置３０のプログラミング支援部３１は、ＰＬＣ１０への書き込みは不可であると判定する（ステップＳ１５０）。この場合、プログラミング支援部３１は、実行モジュールＭ２を作成しない。このように、プログラミング支援部３１は、ＰＬＣ１０内の実行モジュールＭ１と、管理装置２０から取得した実行モジュールＭ１とが同一でない場合には、実行モジュールＭ２を作成しない。
【００５８】
ＰＬＣ１０内の実行モジュールＭ１と、管理装置２０から取得した実行モジュールＭ１とが同一である場合（ステップＳ１５５、Ｙｅｓ）、プログラミング支援装置３０のプログラミング支援部３１は、編集後のプログラムであるプログラムＰｖ３のコンパイルを行うことによって、プログラムＰｖ３に対応する実行モジュールＭ３を作成する（ステップＳ１５６）。このように、プログラミング支援部３１は、プログラムＰｖ２が最新バージョンのプログラムであり、かつＰＬＣ１０内の実行モジュールＭ１と、管理装置２０から取得した実行モジュールＭ１とが同一である場合には、実行モジュールＭ３を作成する。
【００５９】
プログラミング支援部３１は、例えば、コンパイルフラグ２３に基づいて、編集後のプログラムであるプログラムＰｖ３と、ＰＬＣ１０で実行中の実行モジュールＭ１に対応するプログラムＰｖ１との差分を算出し、差分をコンパイルすることによって、差分のプログラムＰｖ３に対応する実行モジュールＭ３を作成する。すなわち、ここでは、プログラムＰｖ２のコンパイルフラグ２３が未コンパイルなので、プログラミング支援部３１は、プログラムＰｖ３とプログラムＰｖ２との差分と、プログラムＰｖ２とプログラムＰｖ１との差分と、の合計を用いて実行モジュールＭ３を作成する。
【００６０】
さらに、プログラミング支援装置３０のプログラミング支援部３１は、作成した実行モジュールＭ３をＰＬＣ１０に送信しＰＬＣ１０に書き込む（ステップＳ１６０）。この場合において、ＰＬＣ１０は、編集前のプログラムＰｖ２に対応する実行モジュールＭ１を用いて動作中である。この場合であっても、ＰＬＣ１０は、差分の実行モジュールＭ３を適用することによって、実行モジュールＭ３の実行中書き込みを行う。ＰＬＣ１０は、実行モジュールＭ１をループ処理しているので、差分の実行モジュールＭ３は、つぎのループの先頭から適用される。
【００６１】
また、プログラミング支援装置３０のプログラミング支援部３１は、作成したプログラムＰｖ３、および作成した実行モジュールＭ３を管理装置２０に送信する（ステップＳ１７０）。このように、本実施の形態では、プログラミング支援部３１は、実行モジュールＭ３をＰＬＣ１０に書き込む場合には、プログラムＰｖ３および実行モジュールＭ３を管理装置２０に送信する。これにより、管理装置２０のバージョン管理部２１は、プログラミング支援部３１からのプログラムＰｖ３を最新バージョンのプログラムとして記憶部２９に記憶させる。また、管理装置２０のバージョン管理部２１は、プログラミング支援部３１からの実行モジュールＭ３を最新の実行モジュールＭ３として記憶部２９に記憶させる。さらに、管理装置２０のバージョン管理部２１は、プログラムＰｖ３とともに実行モジュールＭ３を受信したので、プログラムＰｖ３のコンパイルフラグ２３をコンパイル済みに変更する（ステップＳ１８０）。このステップＳ１７０，Ｓ１８０の処理は、管理装置２０に保存されるプログラムＰｖ３とＰＬＣ１０に書き込まれた実行モジュールＭ３に対応するプログラムＰｖ３との間に乖離が起きないようにするための処理である。
【００６２】
なお、本実施の形態では、ＰＬＣ１０で実行している実行モジュールＭｘと、管理装置２０で管理されている実行モジュールＭｘとが同一となるので、ステップＳ１５５の処理は省略されてもよいが、同一性を確認するためには、ステップＳ１５５の処理を実行する方が望ましい。
【００６３】
図６は、図５の処理が実行された後に実施の形態にかかる管理装置が記憶している情報を説明するための図である。図５の処理が実行されることにより、管理装置２０のバージョン管理部２１は、プログラムＰｖ３を記憶部２９に記憶させる。具体的には、バージョン管理部２１は、プログラムＰｖ２のファイル名で記憶されていたファイルを、プログラムＰｖ３の内容に変更する。したがって、記憶部２９では、ファイル名を維持したままプログラムＰｖ２の内容がプログラムＰｖ３の内容に変更される。なお、プログラムＰｖ２は、記憶部２９内でプログラムＰｖ３が保存される領域とは別の領域に保存しておいてもよい。この場合、バージョン管理部２１は、プログラムＰｖ３の代わりにプログラムＰｖ２とプログラムＰｖ３との差分を記憶部２９に記憶させてもよい。
【００６４】
また、バージョン管理部２１は、プログラムＰｖ３のコンパイルフラグ２３を未コンパイルからコンパイル済みに書き換える。また、バージョン管理部２１は、実行モジュールＭ３を記憶部２９に記憶させる。具体的には、バージョン管理部２１は、実行モジュールＭ１のファイル名で記憶されていたファイルを、実行モジュールＭ３の内容に変更する。したがって、記憶部２９では、ファイル名を維持したまま実行モジュールＭ１の内容が実行モジュールＭ３の内容に変更される。これにより、記憶部２９は、コンパイル済みを示すコンパイルフラグ２３と、プログラムＰｖ３と、実行モジュールＭ３とを含んだプロジェクトデータ２２を記憶する。
【００６５】
このように、プログラムＰｖ３がコンパイルされる場合、プログラムＰｖ３に対応する実行モジュールＭ３が、管理装置２０の記憶部２９で記憶される。この場合において、バージョン管理部２１は、バージョン情報２５にプログラムＰｖ３を識別する情報と、プログラムＰｖ３のバージョンを示すバージョン番号とを登録する。このバージョン番号は、ユーザによって指定されるものである。バージョン管理部２１は、例えば、プログラムＰｖ３のバージョンに「ver.3」が指定された場合、第３バージョンのプログラムＰｖ３を識別する情報と、第３バージョンを示す「ver.3」とを対応付けしてバージョン情報２５に登録する。
【００６６】
なお、プログラムＰｖ１からプログラムＰｖ２が作成されていない場合には、プログラムＰｖ１からプログラムＰｖ３が作成される。この場合、プログラムＰｖ１が第１バージョンのプログラムであり、プログラムＰｖ３が第２バージョンのプログラムである。また、実行モジュールＭ１が第１バージョンの実行モジュールであり、実行モジュールＭ３が第２バージョンの実行モジュールである。
【００６７】
このように、本実施の形態では、プログラミング支援部３１が、実行モジュールＭ３をＰＬＣ１０に送信する際に、実行モジュールＭ３と、編集後のプログラムＰｖ３とを管理装置２０に送信する。そして、管理装置２０のバージョン管理部２１が、差分の実行モジュールＭ３と、編集後のプログラムＰｖ３とを記憶部２９に格納し、さらに、編集後のプログラムＰｖ３に対応するコンパイルフラグ２３を、コンパイル済みに設定する。
【００６８】
これにより、プログラム管理システム１は、ＰＬＣ１０内の実行モジュールＭｘと、管理装置２０から取得した実行モジュールＭｘとを一致させることができる。また、プログラミング支援装置３０は、管理装置２０に実行モジュールＭ１を送信しているので、実行モジュールＭ３を作成する際には、ＰＬＣ１０からではなく管理装置２０から実行モジュールＭ１を取得することができる。管理装置２０はＰＬＣ１０よりも処理能力が高く、また通信速度も速いので、プログラミング支援装置３０は、ＰＬＣ１０から実行モジュールＭ１を取得するよりも、管理装置２０から実行モジュールＭ１を取得する方が短時間で実行モジュールＭ１を取得することができる。
【００６９】
なお、第１のユーザであるユーザＡＡと第２のユーザであるユーザＢＢは、同一人物であってもよいし、異なる人物であってもよい。また、コンパイルフラグ２３は、プログラミング支援部３１が設定してもよい。この場合、プログラミング支援部３１は、設定したコンパイルフラグ２３を管理装置２０に送信する。これにより、管理装置２０がプログラミング支援部３１から送られてきたコンパイルフラグ２３を記憶する。
【００７０】
ここで、プログラミング支援装置３０のハードウェア構成について説明する。図７は、実施の形態にかかるプログラミング支援装置を実現するハードウェア構成を示す図である。
【００７１】
プログラミング支援装置３０は、表示装置１０１、入力装置１０２、プロセッサ１０３、メモリ１０４および通信装置１０５を含むハードウェア１００で実現される。表示装置１０１は、情報を表示する装置であり、液晶ディスプレイが例示されるがこれに限定されるものではない。
【００７２】
入力装置１０２は、プログラミング支援部３１に対して文字を含む各種情報を入力するための装置であり、キーボード、マウス、ポインティングデバイスおよびタッチパネルが例示されるが、これらに限定されるものではない。入力装置１０２は、ユーザによる各種操作を受け付ける場合に使用される。すなわち、入力装置１０２は、プログラミング支援部３１がユーザからの指示を受け付ける場合に使用される。
【００７３】
通信装置１０５は、管理装置２０との間、およびＰＬＣ１０との間で通信を実行する。通信装置１０５は、管理装置２０からコンパイルフラグ２３、プログラムＰおよび実行モジュールＭｘといった各種データを受信し、プログラミング支援部３１が作成したプログラムＰおよび実行モジュールＭｘといった各種データを管理装置２０に送信する。また、通信装置１０５は、プログラミング支援部３１が作成した実行モジュールＭｘをＰＬＣ１０に送信し、ＰＬＣ１０に格納されている実行モジュールＭｘのバイナリーデータをＰＬＣ１０から受信する。
【００７４】
プログラミング支援装置３０が有するプログラミング支援部３１の機能は、プロセッサ１０３およびメモリ１０４により実現される。プロセッサ１０３は、ＣＰＵ（Central  Processing  Unit：中央処理装置）、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、又はＤＳＰ（Digital  Signal  Processor）ともいう。記憶部３９は、メモリ１０４により実現される。メモリ１０４は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）などを含んでいる。
【００７５】
すなわち、プログラミング支援部３１の機能は、ソフトウェア、ファームウェア、又はソフトウェアとファームウェアとの組合せにより実現される。ソフトウェア及びファームウェアはプログラムとして記述され、メモリ１０４に記憶される。プロセッサ１０３は、メモリ１０４に記憶されたプログラムを読み出して実行することにより、プログラミング支援部３１の機能を実現する。このプログラムは、プログラミング支援部３１が実行する手順をコンピュータに実行させるものであるともいえる。
【００７６】
なお、プログラミング支援部３１の機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。また、管理装置２０も、プログラミング支援装置３０と同様の構成を有したハードウェア１００で実現することができる。
【００７７】
このように、プログラム管理システム１は、実行モジュールＭｘの管理を行っているので、プログラム開発時に複数のユーザがプログラムＰを編集するような場合であっても、ＰＬＣ１０への実行中書き込みを容易に実現することができる。
【００７８】
また、管理装置２０で管理される実行モジュールＭｘは、ＰＬＣ１０に書き込んだ際の実行モジュールＭｘと常に同様のものになるので、プログラム管理システム１は、実行モジュールＭｘのバージョン管理を行いつつ実行中書き込みが可能となる。なお、プログラム管理システム１は、複数のＰＬＣ１０を有していてもよい。この場合、管理装置２０は、ＰＬＣ１０毎に実行モジュールＭｘを管理する。なお、管理装置２０は、複数のＰＬＣ１０に対して共通の実行モジュールＭｘを管理することにより、複数のＰＬＣ１０に対して共通の実行モジュールＭｘを書き込むことが可能となる。
【００７９】
このように実施の形態によれば、プログラムＰｖ２が作成されても実行モジュールＭ２がＰＬＣ１０に書き込まれない場合には、この実行モジュールＭ２は管理装置２０に送信されない。この場合、管理装置２０は、プログラムＰｖ２と、実行モジュールＭ１と、未コンパイルを示すコンパイルフラグ２３とを記憶しておく。また、プログラムＰｖ３が作成されて実行モジュールＭ３がＰＬＣ１０に書き込まれる場合には、管理装置２０は、プログラムＰｖ３と、実行モジュールＭ３と、コンパイル済みに設定されたコンパイルフラグ２３とを記憶しておく。これにより、プログラミング支援装置３０で作成された実行モジュールがＰＬＣ１０に反映されていない場合であっても、ＰＬＣ１０で実行中の実行モジュールのバージョンと、管理装置２０が記憶している実行モジュールのバージョンとを一致させることができる。また、管理装置２０で最新のプログラムを記憶することができるとともに、この最新のプログラムがコンパイル済みであるか否かを管理することができる。この結果、プログラミング支援装置３０が管理装置２０で記憶しているプログラムを読み出して編集しコンパイルした場合に、ＰＬＣ１０への実行中書き込みが禁止されることが少なくなる。また、プログラミング支援装置３０で作成された実行モジュールＭ２をＰＬＣ１０に反映しないような運用も可能となる。したがって、効率良くプログラムを開発することができる。
【００８０】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【００８１】
１  プログラム管理システム、２０  管理装置、２１  バージョン管理部、２２  プロジェクトデータ、２３  コンパイルフラグ、２５  バージョン情報、２９  記憶部、３０  プログラミング支援装置、３１  プログラミング支援部、３９  記憶部、Ｍ１，Ｍ３，Ｍｘ  実行モジュール、Ｐ，Ｐｖ１〜Ｐｖ３  プログラム。
【図１】
2019229845.tif 000003
【図２】
2019229845.tif 000004
【図３】
2019229845.tif 000005
【図４】
2019229845.tif 000006
【図５】
2019229845.tif 000007
【図６】
2019229845.tif 000008
【図７】
2019229845.tif 000009
【手続補正書】
【提出日】平成31年4月1日(2019.4.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで被制御機器を制御する制御装置に接続されるとともに、前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成するプログラミング支援装置と、
前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置と、
を備え、
前記プログラミング支援装置は、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記管理装置に前記第２バージョンのプログラムと、前記第２バージョンの実行モジュールに固有の情報とを送信し、前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記管理装置に前記第２バージョンのプログラムを送信し、
前記管理装置は、前記第２バージョンのプログラムおよび前記第２バージョンの実行モジュールに固有の情報を受信した場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第２バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みであることを示す情報に設定し、前記第２バージョンの実行モジュールに固有の情報を受信せず前記第２バージョンのプログラムを受信した場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第１バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みでないことを示す情報に設定し、
前記プログラミング支援装置は、前記第２バージョンのプログラムを編集して作成した第３バージョンのプログラムをコンパイルする際に、前記コンパイル情報がコンパイル済みであることを示す場合には、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成し、前記コンパイル情報がコンパイル済みでないことを示す場合には、前記第１バージョンのプログラム、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって前記第３バージョンの実行モジュールを作成する、
ことを特徴とするプログラム管理システム。
【請求項２】
前記プログラミング支援装置は、前記第２バージョンの実行モジュールを作成する前に、前記第１バージョンのプログラムが前記最新バージョンのプログラムであるか否かを判定し、前記最新バージョンのプログラムである場合には、前記第２バージョンの実行モジュールを作成し、前記最新バージョンのプログラムでない場合には、前記第２バージョンの実行モジュールを作成しない、
ことを特徴とする請求項１に記載のプログラム管理システム。
【請求項３】
前記プログラミング支援装置は、前記第２バージョンの実行モジュールを作成する前に、前記管理装置で管理されている第１バージョンの実行モジュールと、前記制御装置で実行されている第１バージョンの実行モジュールとが同じであるか否かを判定し、同じである場合には、前記第２バージョンの実行モジュールを作成し、同じでない場合には、前記第２バージョンの実行モジュールを作成しない、
ことを特徴とする請求項１または２に記載のプログラム管理システム。
【請求項４】
前記プログラミング支援装置は、複数の前記制御装置に接続され、
前記管理装置は、複数の前記制御装置に対して共通の、前記第２バージョンのプログラム、前記第２バージョンの実行モジュール、および前記コンパイル情報を管理する、
ことを特徴とする請求項１から３のいずれか１つに記載のプログラム管理システム。
【請求項５】
前記コンパイル情報は、前記管理装置または前記プログラミング支援装置によって設定され、前記管理装置で管理される、
ことを特徴とする請求項１から４のいずれか１つに記載のプログラム管理システム。
【請求項６】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで被制御機器を制御する制御装置に接続されるとともに、前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成するプログラミング支援部を備え、
前記プログラミング支援部は、
前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置に接続され、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記管理装置に前記第２バージョンのプログラムと、前記第２バージョンの実行モジュールに固有の情報とを送信し、前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記管理装置に前記第２バージョンのプログラムを送信し、
前記プログラミング支援部は、前記第２バージョンのプログラムを編集して作成した第３バージョンのプログラムをコンパイルする際に、前記コンパイル情報がコンパイル済みであることを示す場合には、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成し、前記コンパイル情報がコンパイル済みでないことを示す場合には、前記第１バージョンのプログラム、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって前記第３バージョンの実行モジュールを作成する、
ことを特徴とするプログラミング支援装置。
【請求項７】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで制御装置が被制御機器を制御する制御ステップと、
前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成するプログラム編集ステップと、
コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成する実行モジュール作成ステップと、
前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理ステップと、
を含み、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第２バージョンのプログラムに固有の情報を用いて前記第２バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みであることを示す情報に設定し、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記第２バージョンのプログラムを前記最新バージョンのプログラムとして管理し、前記第１バージョンの実行モジュールを前記制御装置で実行中の実行モジュールとして管理し、前記コンパイル情報をコンパイル済みでないことを示す情報に設定し、
前記第２バージョンのプログラムを編集して作成した第３バージョンのプログラムをコンパイルする際に、前記コンパイル情報がコンパイル済みであることを示す場合には、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成し、前記コンパイル情報がコンパイル済みでないことを示す場合には、前記第１バージョンのプログラム、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって前記第３バージョンの実行モジュールを作成する、
ことを特徴とするプログラム管理方法。
【請求項８】
第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで制御装置が被制御機器を制御している際に、前記第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、前記第１バージョンのプログラムと前記第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成する第１の作成ステップと、
前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込む場合には、前記制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、前記最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置に、前記第２バージョンのプログラムおよび前記第２バージョンの実行モジュールに固有の情報を送信し、前記第１バージョンの実行モジュールを実行中の前記制御装置に対して前記第２バージョンの実行モジュールを書き込まない場合には、前記管理装置に前記第２バージョンのプログラムを送信する送信ステップと、
前記第２バージョンのプログラムを編集して作成した第３バージョンのプログラムをコンパイルする際に、前記コンパイル情報がコンパイル済みであることを示す場合には、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成し、前記コンパイル情報がコンパイル済みでないことを示す場合には、前記第１バージョンのプログラム、前記第２バージョンのプログラムおよび前記第３バージョンのプログラムを用いたコンパイルによって前記第３バージョンの実行モジュールを作成する第２の作成ステップと、
をコンピュータに実行させる、
ことを特徴とするプログラミング支援プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
上述した課題を解決し、目的を達成するために、本発明のプログラム管理システムは、第１バージョンのプログラムを用いたコンパイルが行われることによって作成された第１バージョンの実行モジュールで被制御機器を制御する制御装置に接続されるとともに、第１バージョンのプログラムを編集して第２バージョンのプログラムを作成し、コンパイルによって、第１バージョンのプログラムと第２バージョンのプログラムとの差分に対応する第２バージョンの実行モジュールを作成するプログラミング支援装置を備える。また、本発明のプログラム管理システムは、制御装置で実行中の実行モジュールと、最新バージョンのプログラムと、最新バージョンのプログラムがコンパイル済みであるか否かを示すコンパイル情報と、を管理する管理装置を備える。プログラミング支援装置は、第１バージョンの実行モジュールを実行中の制御装置に対して第２バージョンの実行モジュールを書き込む場合には、管理装置に第２バージョンのプログラムと、第２バージョンの実行モジュールに固有の情報とを送信し、第１バージョンの実行モジュールを実行中の制御装置に対して第２バージョンの実行モジュールを書き込まない場合には、管理装置に第２バージョンのプログラムを送信する。管理装置は、第２バージョンのプログラムおよび第２バージョンの実行モジュールに固有の情報を受信した場合には、第２バージョンのプログラムを最新バージョンのプログラムとして管理し、第２バージョンの実行モジュールを制御装置で実行中の実行モジュールとして管理し、コンパイル情報をコンパイル済みであることを示す情報に設定する。管理装置は、第２バージョンの実行モジュールに固有の情報を受信せず第２バージョンのプログラムを受信した場合には、第２バージョンのプログラムを最新バージョンのプログラムとして管理し、第１バージョンの実行モジュールを制御装置で実行中の実行モジュールとして管理し、コンパイル情報をコンパイル済みでないことを示す情報に設定する。プログラミング支援装置は、第２バージョンのプログラムを編集して作成した第３バージョンのプログラムをコンパイルする際に、コンパイル情報がコンパイル済みであることを示す場合には、第２バージョンのプログラムおよび第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成し、コンパイル情報がコンパイル済みでないことを示す場合には、第１バージョンのプログラム、第２バージョンのプログラムおよび第３バージョンのプログラムを用いたコンパイルによって第３バージョンの実行モジュールを作成する。
【国際調査報告】
2019229845.tif 000010
2019229845.tif 000011