(57)【要約】      （修正有）【課題】制御プログラムの変更履歴とダウンロード履歴とを対応付けて管理することのできる開発システムおよびサポート装置を提供する。【解決手段】制御システム１ａは、作成部２２０ａと、管理部３００ａと、送信部２８０ａとを備える。送信部は、ＰＬＣに制御プログラムを送る場合に、管理部が制御プログラムを管理する際に用いる変更ＩＤ３２４を合わせて送る。【選択図】図１
2020009297.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御する制御装置に向けられた開発システムであって、
制御装置で実行される制御プログラムを作成または編集する作成部と、
制御装置で実行される制御プログラムの変更履歴を、各変更段階の制御プログラムを特定するための第１識別情報を用いて管理する管理部と、
前記作成部が作成または編集した制御プログラムを前記管理部が管理することで当該制御プログラムに付された第１識別情報と、当該制御プログラムに基づく制御装置で実行可能なコードとを、制御装置へ送信する送信部とを備える、開発システム。
【請求項２】
前記制御装置に送信された第１識別情報と、送信先の制御装置を特定するための第２識別情報とを関連付けて格納する記憶部をさらに備える、請求項１に記載の開発システム。
【請求項３】
制御装置に送信されたコードまたは当該コードの元となる制御プログラムから当該制御プログラムの識別子である第３識別情報を算出する演算部をさらに備え、
前記記憶部は、制御装置に送信された制御プログラムの第３識別情報を第１識別情報および第２識別情報に関連付けて格納する、請求項２に記載の開発システム。
【請求項４】
前記演算部は、制御装置において実行されている制御プログラムから第３識別情報を演算し、
前記演算部が演算した第３識別情報と、前記制御装置から得られる第１識別情報とが関連付けて前記記憶部に格納されているか否かを確認する確認部をさらに備え、
前記送信部は、前記確認部が制御装置において実行されている制御プログラムから算出された第３識別情報と、当該制御装置から得られる第１識別情報とが関連付けて前記記憶部に格納されていると判定したことを条件に、前記作成部が作成または編集した制御プログラムに付された第１識別情報と、前記作成部が作成または編集した制御プログラムに基づく制御装置で実行可能なコードとを、当該制御装置に送信する、請求項３に記載の開発システム。
【請求項５】
制御対象を制御する制御装置に向けられたサポート装置であって、
制御装置で実行される制御プログラムを作成または編集する作成部と、
制御装置で実行される制御プログラムの変更履歴を、各変更段階の制御プログラムを特定するための第１識別情報を用いて管理する管理部と、
前記作成部が作成または編集した制御プログラムを前記管理部が管理することで当該制御プログラムに付された第１識別情報と、当該制御プログラムに基づく制御装置で実行可能なコードとを、制御装置へ送信する送信部とを備える、サポート装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象を制御する制御装置に向けられる開発システムおよびサポート装置に関する。
【背景技術】
【０００２】
様々な製造現場において、ＰＬＣ（Programmable Logic Controller）などの制御装置が導入されている。このような制御装置は、一種のコンピュータであり、製造装置や製造設備などに応じて設計された制御プログラムが実行される。このような制御プログラムは、制御装置とは別に用意されたサポート装置を用いて作成される。
【０００３】
制御装置において実行される制御プログラムは、製造装置や製造設備に不具合が見つかった場合や、製造装置を制御する際のパラメータを変更する場合など、比較的頻繁に更新される。また、制御プログラムを更新したことにより不具合が生じることもあり、製造現場においては、更新前の状態に戻すことができるように、更新履歴を取るニーズが存在する。
【０００４】
たとえば、特開２００２−１６９６９３号公報（特許文献１）は、プログラムエディタ装置から送られた制御プログラムをＰＬＣに送信するプログラマブル表示器が制御プログラム自体やアクセス日時などからなる履歴データを蓄積し、ＰＬＣに異常が発生した場合に蓄積された履歴データから制御プログラムを読み出してＰＬＣにインストールする技術を開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−１６９６９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年、制御プログラムの高度化により、複数人または複数のグループで協同して制御プログラムを作成する機会が増えており、開発段階における制御プログラムの変更履歴の管理も求められている。そのため、制御装置において実行される制御プログラムの管理は、開発環境での管理（制御プログラムの変更履歴の管理）と、制御装置を実際に利用する利用環境での管理（制御プログラムのダウンロード履歴の管理）とを要し、ユーザへの負担がかかるという課題がある。
【０００７】
本発明は、上記課題を解決することを目的とするものであって、制御プログラムの変更履歴とダウンロード履歴とを対応付けて管理することのできる開発システムおよびサポート装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本開示の一例によれば、制御対象を制御する制御装置に向けられた開発システムが提供される。開発システムは、制御装置で実行される制御プログラムを作成または編集する作成部と、制御装置で実行される制御プログラムの変更履歴を、各変更段階の制御プログラムを特定するための第１識別情報を用いて管理する管理部と、作成部が作成または編集した制御プログラムを管理部が管理することで制御プログラムに付された第１識別情報と、制御プログラムに基づく制御装置で実行可能なコードとを、制御装置へ送信する送信部とを含む。
【０００９】
この開示によれば、制御装置に送られた制御プログラムと、管理部が管理している制御プログラムとを第１識別情報によって対応付けることができる。その結果、制御装置に送られた制御プログラムを、変更履歴と紐付けて管理することができる。
【００１０】
上述の開示において、開発システムは、制御装置に送信された第１識別情報と、送信先の制御装置を特定するための第２識別情報とを関連付けて格納する記憶部をさらに含む。
【００１１】
この開示によれば、制御プログラムを受けた制御装置と、その制御プログラムの変更段階との関係を記憶することができるため、いずれの制御装置に、どのような制御プログラムが送られたのかを、ユーザが容易に把握することができる。また、制御プログラムに不具合があった場合に、その不具合のある制御プログラムよりも前に制御装置に送られていた制御プログラムを変更ＩＤと変更履歴とから特定することができるため、ロールバック等の作業を容易に行なうことができる。
【００１２】
上述の開示において、開発システムは、制御装置に送信されたコードまたは当該コードの元となる制御プログラムから制御プログラムの識別子である第３識別情報を算出する演算部をさらに含む。記憶部は、制御装置に送信された制御プログラムの第３識別情報を第１識別情報および第２識別情報に関連付けて格納する。
【００１３】
この開示によれば、制御プログラムの変更履歴を参照しなくとも、制御装置で実行されている制御プログラムが書き換わったか否かを判別することができる。
【００１４】
上述の開示において、演算部は、制御装置において実行されている制御プログラムから第３識別情報を演算する。開発システムは、演算部が演算した第３識別情報と、制御装置から得られる第１識別情報とが関連付けて記憶部に格納されているか否かを確認する確認部をさらに含んでもよい。送信部は、確認部が制御装置において実行されている制御プログラムから算出された第３識別情報と、制御装置から得られる第１識別情報とが関連付けて記憶部に格納されていると判定したことを条件に、作成部が作成または編集した制御プログラムに付された第１識別情報と、作成部が作成または編集した制御プログラムに基づく制御装置で実行可能なコードとを、制御装置に送信する。
【００１５】
この開示によれば、制御装置で実行されている制御プログラムが書き換わっており、その制御プログラムに関するダウンロード履歴が格納されていない場合に、その履歴を残し忘れてしまうことを防止することができる。
【００１６】
本開示の別の一例によれば、制御対象を制御する制御装置に向けられたサポート装置が提供される。サポート装置は、制御装置で実行される制御プログラムを作成または編集する作成部と、制御装置で実行される制御プログラムの変更履歴を、各変更段階の制御プログラムを特定するための第１識別情報を用いて管理する管理部と、作成部が作成または編集した制御プログラムを管理部が管理することで制御プログラムに付された第１識別情報と、制御プログラムに基づく制御装置で実行可能なコードとを、制御装置へ送信する送信部とを備える。
【００１７】
この開示によれば、制御装置に送られた制御プログラムと、管理部が管理している制御プログラムとを第１識別情報によって対応付けることができる。
【発明の効果】
【００１８】
制御装置に送られた制御プログラムと、管理部が管理している制御プログラムとを第１識別情報によって対応付けることができ、制御プログラムの変更履歴と制御装置への制御プログラムの送信とを対応付けて管理することができる。その結果、ユーザの管理負担を軽減することができる。
【図面の簡単な説明】
【００１９】
【図１】本実施の形態に係る制御システムの適用場面を模式的に示す図である。
【図２】本実施の形態に係る制御システムの概略構成を示す模式図である。
【図３】本発明の実施の形態に係るＰＬＣのハードウェア構成を示す模式図である。
【図４】本発明の実施の形態に係るサポート装置のハードウェア構成を示す模式図である。
【図５】本発明の実施の形態に係る管理サーバのハードウェア構成を示す模式図である。
【図６】管理サーバの機能構成の一例を示す模式図である。
【図７】ＰＬＣに実行形式プログラムをダウンロードする手順の一例を示すシーケンス図である。
【図８】変更履歴の表示例を示す図である。
【図９】ＰＬＣに制御プログラムをダウンロードする際に機能するサポート装置の機能構成の一例を示す模式図である。
【図１０】サポート装置がモニタに表示する変更履歴の表示例である。
【図１１】全ダウンロード履歴の表示例である。
【図１２】一の変更段階の制御プログラムのダウンロード履歴の表示例である。
【発明を実施するための形態】
【００２０】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２１】
§１  適用例
まず、図１を参照して、本発明が適用される場面の一例について説明する。図１は、本実施の形態に係る制御システム１ａの適用場面を模式的に示す図である。制御システム１ａは、作成部２２０ａと、管理部３００ａと、送信部２８０ａとを備える。
【００２２】
作成部２２０ａは、制御装置の一例であるＰＬＣ（プログラマブルコントローラ）１００において実行される制御プログラムを作成または編集する。具体的には、ユーザから入力操作に基づいて、作成部２２０ａは制御プログラムを作成または編集する。なお、作成部２２０ａは新たに制御プログラムを作成することも、既にある制御プログラムを編集することも可能である。
【００２３】
管理部３００ａは、作成部２２０ａによって作成または編集された制御プログラムの変更履歴を管理する。具体的には、管理部３００ａは、各変更段階の制御プログラムを特定するための変更ＩＤ３２４を用いて管理する。
【００２４】
送信部２８０ａは、作成部２２０ａによって作成または編集された制御プログラムが管理部３００ａによって管理されることで付された変更ＩＤ３２４と、その制御プログラムに基づくＰＬＣ１００で実行可能なコードである実行形式プログラム５０２とをＰＬＣ１００に送信する。
【００２５】
制御プログラムに基づくＰＬＣ１００で実行可能なコードとは、典型的にはオブジェクト形式のプログラムであるが、ＰＬＣ１００がソースコードをオブジェクト形式のコードに変換する機能を有している場合にはソースコードを含み、ＰＬＣ１００が制御プログラムをどのように実行するかによってコードの種類は異なる。
【００２６】
このように、制御システム１ａにおいて、送信部２８０ａは、ＰＬＣ１００に制御プログラムを送る場合に、管理部３００ａがその制御プログラムを管理する際の識別情報である変更ＩＤ３２４を合わせて送る。そのため、ＰＬＣ１００に送られた制御プログラムと、管理部３００ａが管理している制御プログラムとを変更ＩＤ３２４によって対応付けることができ、ＰＬＣ１００に送った制御プログラムを、変更履歴と紐付けて管理することができる。その結果、ユーザの管理負担を軽減することができる。
【００２７】
なお、図１に示す各機能を制御システム１ａが備えるものとしたが、図１に示す各機能を、ＰＬＣ１００に向けられたサポート装置２００ａが備えてもよい。
【００２８】
§２  具体例
以下、本発明の具体例として、本実施の形態に係る制御システム１のより詳細な構成および処理について説明する。
【００２９】
＜Ａ．制御システム１の全体構成例＞
図２は、本実施の形態に係る制御システム１の概略構成を示す模式図である。制御システム１は、制御対象を制御するＰＬＣ１００に向けられている。より具体的には、制御システム１は、ＰＬＣ１００が制御対象を制御するために実行する制御プログラムの変更履歴や各ＰＬＣ１００にダウンロードされている制御プログラムを管理するための環境を提供する。制御システム１は、ＰＬＣ１００と、ＰＬＣ１００に接続されるサポート装置２００と、ＰＬＣ１００で実行される制御プログラムのバージョンを管理するための管理サーバ３００とを含む。図１に示す制御システム１の構成は一例であって、管理サーバ３００に接続可能なサポート装置２００を複数備えてもよい。また、サポート装置２００が管理サーバ３００の機能を備えてもよい。
【００３０】
ＰＬＣ１００は、制御対象を制御する制御装置の一例である。ＰＬＣ１００は、典型的には、制御プログラムを含む各種プログラムを実行する主体であるＣＰＵユニット１０と、ＣＰＵユニット１０などへ電力を供給する電源ユニット１２と、フィールドからの信号を遣り取りするＩ／Ｏ（Input/Output）ユニット１４とを含む。Ｉ／Ｏユニット１４は、ＣＰＵユニット１０とシステムバス１１を介して接続されている。
【００３１】
サポート装置２００は、制御対象を制御する制御装置であるＰＬＣ１００に向けられた装置であって、制御プログラムの開発を支援する。サポート装置２００とＰＬＣ１００とは、接続ケーブル２０などを介して互いに通信可能に接続される。なお、サポート装置２００とＰＬＣ１００との間の通信は、各種の産業用イーサネット（登録商標）であるフィールドネットワークによって実現されてもよい。サポート装置２００は、ＰＬＣ１００で実行される制御プログラムを含む各種プログラムを開発するための環境を提供する機能、ＰＬＣ１００に対して制御プログラムおよび各種情報を設定する機能、運転中のＰＬＣ１００の状態値を取得する機能などを含む。さらに、サポート装置２００は、ユーザによる制御プログラムの開発を支援するため、デバック機能やシミュレーション機能を有していてもよい。サポート装置２００は、本願発明のサポート装置の一例である。
【００３２】
管理サーバ３００は、制御プログラムの変更履歴と、制御プログラムをＰＬＣ１００にダウンロードした履歴（ダウンロード履歴）とを管理する。管理サーバ３００は、変更履歴を、各変更段階の制御プログラムを特定するための変更ＩＤ（IDentifier）３２４によって管理する。より具体的には、管理サーバ３００は、変更ＩＤ３２４で管理されるバージョン情報３２２を変更段階ごとに記憶する。バージョン情報３２２は、変更ＩＤ３２４が示す変更段階における制御プログラムに関する情報と、その変更段階の状況を示す情報とを含む。たとえば、管理サーバ３００は、サポート装置２００から制御プログラムの保存指示を受け付けると、保存対象の制御プログラムをバージョン情報３２２として記憶する。
【００３３】
管理サーバ３００は、制御プログラムをＰＬＣ１００にダウンロードした履歴を記憶する。より具体的には、管理サーバ３００は、ＰＬＣ１００に制御プログラムをダウンロードする度にサポート装置２００によって生成されるダウンロード情報３３２を記憶する。管理サーバ３００は、本願発明の管理部の一例である。なお、制御プログラムの変更履歴と、ダウンロード履歴を記憶するための記憶領域を管理サーバ３００が備えるとしたが、この記憶領域は、管理サーバ３００と通信可能な別の装置が備えてもよい。また、変更履歴とダウンロード履歴とが異なる記憶装置に記憶されるようにしてもよい。
【００３４】
管理サーバ３００とサポート装置２００とは、ローカルネットワーク２２などを介して互いに通信可能に接続される。本実施の形態においては、管理サーバ３００は、サポート装置２００と別体に形成されているものとするが、管理サーバ３００の機能を一のサポート装置２００が備えていてもよい。また、管理サーバ３００は、インターネットなどの外部ネットワークを介してサポート装置２００と通信可能に接続されてもよい。
【００３５】
＜Ｂ．ＰＬＣ１００のハードウェア構成＞
図３は、本発明の実施の形態に係るＰＬＣ１００のハードウェア構成を示す模式図である。ＰＬ１００は、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１０２と、チップセット１０４と、主メモリ１０６と、不揮発性メモリ１１０と、内部バスコントローラ１２２と、フィールドバスコントローラ１２４と、ＵＳＢ（Universal Serial Bus）コネクタ１２６と、メモリカードインターフェイス１２８とを含む。
【００３６】
プロセッサ１０２およびチップセット１０４は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、プロセッサ１０２は、チップセット１０４から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０４は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、プロセッサ１０２に必要な命令コードを生成する。さらに、チップセット１０４は、プロセッサ１０２での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００３７】
主メモリ１０６は、揮発性の記憶領域であり、ＰＬＣ１００への電源投入後にプロセッサ１０２で実行されるべき各種プログラムを格納する。主メモリ１０６は、プロセッサ１０２による各種プログラムの実行時の作業用メモリとしても使用される。このような主メモリ１０６としては、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）といったデバイスが用いられる。
【００３８】
不揮発性メモリ１１０は、ＰＬＣ１００としての機能を提供するためのソフトウェア群であるシステムプログラム１１２と、ユーザにおける制御目的に応じて作成されるユーザプログラムのうち、ＰＬＣ１００のプロセッサ１０２で実行可能なオブジェクトプログラム形式になっている実行形式プログラム５０２、および各種パラメータといったデータを不揮発的に格納する。これらのプログラムやデータは、必要に応じて、プロセッサ１０２がアクセスできるように主メモリ１０６にコピーされる。このような不揮発性メモリ１１０としては、半導体メモリであるフラッシュメモリや、ハードディスクドライブのような磁気記録媒体や、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒体といったデバイスが用いられる。
【００３９】
本実施の形態において「制御プログラム」は、ＰＬＣの基本的な機能を提供するためのシステムプログラム１１２と、制御対象に応じて任意に設計されるユーザプログラムとを包含する概念である。すなわち、システムプログラム１１２および実行形式プログラム５０２は、制御プログラムの一例である。但し、制御プログラムは、制御対象に応じて任意に設計されるプログラムのみを含む場合もある。
【００４０】
内部バスコントローラ１２２は、ＰＬＣ１００と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、Ｉ／Ｏユニット１４などが挙げられる。
【００４１】
フィールドバスコントローラ１２４は、ＰＬＣ１００とフィールドバスを通じて連結される各種の駆動機器とデータを遣り取りするインターフェイスである。このような駆動機器の一例として、たとえば、サーボドライバや、ロボットコントローラ、視覚センサなどが挙げられる。
【００４２】
内部バスコントローラ１２２およびフィールドバスコントローラ１２４は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータ（測定値を含む）を取得することができる。また、内部バスコントローラ１２２および／またはフィールドバスコントローラ１２４は、駆動機器との間でデータを遣り取りするためのインターフェイスとしても機能する。
【００４３】
ＵＳＢコネクタ１２６は、サポート装置２００とＰＬＣ１００とを接続するための通信インターフェイスである。典型的には、サポート装置２００から転送される実行形式プログラム５０２などは、ＵＳＢコネクタ１２６を介してＰＬＣ１００に取込まれ、不揮発性メモリ１１０に格納される。
【００４４】
メモリカードインターフェイス１２８は、外部記憶媒体の一例であるメモリカード１３０（たとえば、ＳＤカード）を着脱可能に構成されており、メモリカード１３０に対してデータを書き込み、メモリカード１３０からデータを読出すことが可能になっている。なお、メモリカード１３０を介して実行形式プログラム５０２をＰＬＣ１００にダウンロードしてもよい。
【００４５】
＜Ｃ．サポート装置のハードウェア構成＞
図４は本発明の実施の形態に係るサポート装置２００のハードウェア構成を示す模式図である。サポート装置２００は、典型的には、汎用のコンピュータで構成される。なお、サポート装置２００は、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
【００４６】
サポート装置２００は、プロセッサ２０１と、主メモリ２０２と、不揮発性メモリ２１０と、ＵＳＢコネクタ２０４と、キーボード２０５と、マウス２０６と、モニタ２０７と、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）ドライブ２０８と、ネットワークインターフェイス２０９とを含む。これらのコンポーネントは、内部バス２０３などを介して互いにデータ通信可能に接続される。
【００４７】
プロセッサ２０１は、不揮発性メモリ２１０に格納されている各種プログラムを実行する。主メモリ２０２は、プロセッサ２０１でのプログラム実行に必要なデータを格納するための作業領域を提供する。不揮発性メモリ２１０は、例えば、ハードディスクドライブやＳＳＤ（Flash Solid State Drive）などで構成され、プロセッサ２０１で実行されるプログラムを格納する。
【００４８】
不揮発性メモリ２１０には、エディタプログラム２１３と、コンパイラプログラム２１４と、デバッガプログラム２１５と、通信プログラム２１６と、管理プログラム２１７とを含むＰＬＣサポートプログラム２１２が格納されている。各プログラムは、典型的には、ＣＤ−ＲＯＭ９に格納された状態で流通して、ＣＤ−ＲＯＭドライブ２０８によって読取られ、不揮発性メモリ２１０へ格納される。なお、ＰＬＣサポートプログラム２１２に含まれる各プログラムを上位のホストコンピュータなどからネットワークを通じてダウンロードするように構成してもよい。
【００４９】
エディタプログラム２１３は、ユーザプログラムであるソースプログラム５０４を作成するための入力および編集といった機能を提供する。コンパイラプログラム２１４は、ソースプログラム５０４をコンパイルして、ＰＬＣ１００のプロセッサ１０２で実行可能なオブジェクトプログラム形式の実行形式プログラム５０２を生成する機能を提供する。デバッガプログラム２１５は、ソースプログラム５０４に対してデバッグを行うための機能を提供する。通信プログラム２１６は、ＰＬＣ１００との通信および管理サーバ３００との通信に係る機能を提供する。また、通信プログラム２１６は、ユーザプログラムをＰＬＣ１００にダウンロードするための機能を提供する。
【００５０】
管理プログラム２１７は、変更履歴およびダウンロード履歴を管理サーバ３００に格納するためにサポート装置２００が実行する各種機能を提供する。たとえば、ダウンロード情報３３２を生成する機能、ＰＬＣ１００にダウンロードするユーザプログラムを決定する機能、制御プログラムの変更履歴およびダウンロード履歴をモニタ２０７に表示する機能を提供する。
【００５１】
ＵＳＢコネクタ２０４は、サポート装置２００とＰＬＣ１００とを接続するための通信インターフェイスである。典型的には、ＰＬＣ１００から転送される実行形式プログラム５０２などは、ＵＳＢコネクタ２０４を介してＰＬＣ１００に取込まれる。
【００５２】
キーボード２０５とマウス２０６とは、ユーザ操作を受け付ける入力部として機能する。モニタ２０７は、情報をユーザに提示するための表示部として機能し、本願発明の表示部の一例である。
【００５３】
＜Ｄ．管理サーバのハードウェア構成＞
図５は本発明の実施の形態に係る管理サーバ３００のハードウェア構成を示す模式図である。管理サーバ３００は、プロセッサ３０１と、主メモリ３０２と、不揮発性メモリ３１０と、ネットワークインターフェイス３０４とを含む。これらのコンポーネントは、内部バス３０５などを介して互いにデータ通信可能に接続される。
【００５４】
プロセッサ３０１は、不揮発性メモリ３１０に保存された管理プログラム３０６を実行することで、ネットワークインターフェイス３０４を介してサポート装置２００から送られる制御プログラムの変更履歴およびダウンロード履歴を管理するための各種処理を実行する。主メモリ３０２は、プロセッサ３０１でのプログラム実行に必要なデータを格納するための作業領域を提供する。不揮発性メモリ３１０は、例えば、ハードディスクドライブやＳＳＤ（Flash Solid State Drive）などで構成され、プロセッサ３０１で実行される管理プログラム３０６、バージョン情報３２２およびダウンロード情報３３２を格納する。
【００５５】
管理サーバ３００で実行される管理プログラム３０６などの各種プログラムは、ネットワークインターフェイス３０４を介してサポート装置２００から不揮発性メモリ３１０へ格納される。なお、管理プログラム３０６などの各種プログラムは、不揮発性メモリ３１０に予め記憶されていてもよい。また、このような各種プログラムは、いわゆるインターネットに接続されている情報提供事業者によってダウンロード可能なプログラムプロダクトとして提供される場合もある。また、このような各種プログラムは、その他の記憶媒体に格納されて、プログラムプロダクトとして流通している場合もある。このような各種プログラムは、読取装置によりその記憶媒体から読み取られて、あるいは、ネットワークインターフェイス３０４等を介してダウンロードされた後、不揮発性メモリ３１０に格納される。
【００５６】
＜Ｅ.管理サーバ３００によって管理されるデータ＞
図６を参照して、管理サーバ３００によって管理されるデータについて説明する。図６は、管理サーバ３００の機能構成の一例を示す模式図である。管理サーバ３００は、変更履歴格納部３２０と、ダウンロード履歴格納部３３０と、保存処理部３４０と、出力対象決定部３５０と、出力部３６０とを備える。変更履歴格納部３２０およびダウンロード履歴格納部３３０は、いずれも不揮発性メモリ３１０により実現される。保存処理部３４０と、出力対象決定部３５０と、出力部３６０とは、プロセッサ３０１が管理プログラム３０６を実行することで実現される。
【００５７】
変更履歴格納部３２０は、制御プログラムの変更履歴を格納するための記憶領域である。変更履歴格納部３２０には、各変更段階の制御プログラムが格納されている。具体的には、変更履歴格納部３２０には、変更段階ごとにバージョン情報３２２が格納されている。バージョン情報３２２は、変更ＩＤ３２４と、プログラム情報３２６と、履歴情報３２８とを含む。変更ＩＤ３２４は、いずれの変更段階の制御プログラムであるかを特定するための識別子である。プログラム情報３２６は、変更ＩＤ３２４が示す変更段階の制御プログラムに展開するための情報である。履歴情報３２８は、変更された日時、変更したユーザ、任意に入力可能なコメントなどを含む情報であって、変更ＩＤ３２４が示す変更段階の制御プログラムが生成されたときの状況を示す情報である。なお、プログラム情報３２６は、変更ＩＤ３２４が示す変更段階の制御プログラムに展開することができる情報であればよく、たとえば、変更前の制御プログラムと変更後の制御プログラムとの差分情報であってもよい。
【００５８】
ダウンロード履歴格納部３３０は、制御プログラムをＰＬＣにダウンロードした履歴を格納するための記憶領域であって、本願発明の記憶部の一例である。ダウンロード履歴格納部３３０には、サポート装置２００からＰＬＣ１００に制御プログラムがダウンロードされる際に、サポート装置２００と管理サーバ３００とが通信可能に接続されている場合に、ダウンロード情報３３２が格納される。ダウンロード情報３３２は、ダウンロードした制御プログラムに付与されている変更ＩＤ３２４と、ダウンロード先のＰＬＣ１００を特定するためのデバイスＩＤ３３４と、プログラムＩＤ３３６とを含む。デバイスＩＤ３３４は、サポート装置２００を介してＰＬＣ１００から送られるデータであって、たとえば、個々のＰＬＣ１００の各々に予め割り振られているシリアルナンバーである。プログラムＩＤ３３６は、ダウンロードした制御プログラムから一意に得られるデータであって、サポート装置２００によって生成されるデータである。ダウンロード情報３３２は、サポート装置２００からＰＬＣ１００に制御プログラムが送られたときにサポート装置２００が生成する情報であって、サポート装置２００から送られ、ダウンロード履歴格納部３３０に格納される。
【００５９】
保存処理部３４０は、格納先決定部３４２と、バージョン情報生成部３４４と、ＩＤ付与部３４６とを備える。格納先決定部３４２は、サポート装置２００から送られる情報を、変更履歴格納部３２０およびダウンロード履歴格納部３３０のうちのいずれの格納部に格納するかを決定する。たとえば、ソースプログラム５０４がサポート装置２００から送られた場合、格納先決定部３４２は、格納先を変更履歴格納部３２０に決定する。一方、サポート装置２００が生成したダウンロード情報３３２がサポート装置２００から送られた場合、格納先決定部３４２は、格納先をダウンロード履歴格納部３３０に決定し、ダウンロード情報３３２をダウンロード履歴格納部３３０に格納する。
【００６０】
バージョン情報生成部３４４は、ソースプログラム５０４がサポート装置２００から送られた場合に、送られたソースプログラム５０４からバージョン情報３２２を生成する。具体的には、ソースプログラム５０４からプログラム情報３２６および履歴情報３２８を生成する。
【００６１】
ＩＤ付与部３４６は、バージョン情報生成部３４４が生成したバージョン情報３２２に変更ＩＤ３２４を付与し、変更履歴格納部３２０に変更ＩＤ３２４を付与したバージョン情報３２２を格納する。より具体的には、変更ＩＤ３２４は、各変更段階のプログラム情報３２６および履歴情報３２８などから任意に算出されるデータであって、たとえば、変更前のソースプログラムを示す識別子と、履歴情報３２８とから一意に算出される。
【００６２】
出力対象決定部３５０は、サポート装置２００からの取得指示を受けて、指示内容に応じた出力対象を決定し、決定した出力対象を出力部３６０からサポート装置２００に出力させる。たとえば、制御プログラムの変更履歴をモニタ２０７に表示することを目的としてサポート装置２００から取得指示を受けた場合、変更の過程を示す情報を変更履歴格納部３２０およびダウンロード履歴格納部３３０から生成して、出力部３６０に出力させる。また、最新の変更段階の取得指示を受けた場合、最新の変更段階を変更ＩＤ３２４に基づいて特定し、特定した変更段階のバージョン情報３２２を出力部３６０から出力させる。また、特定のＰＬＣ１００についてのダウンロード履歴を表示することを目的としてサポート装置２００から取得指示を受けた場合、ダウンロード履歴格納部３３０から特定のＰＬＣ１００を示すデバイスＩＤ３３４と一致するデバイスＩＤ３３４を含むダウンロード情報３３２を特定し、そのダウンロード情報３３２に基づいてダウンロード履歴を生成して出力部３６０に出力させる。
【００６３】
＜Ｆ．ダウンロード時の流れ＞
図７は、ＰＬＣ１００に実行形式プログラム５０２をダウンロードする手順の一例を示すシーケンス図である。図７に示す例においては、ユーザが管理サーバ３００によって管理されている制御プログラムをサポート装置２００上で編集し、編集後の制御プログラムをＰＬＣ１００にダウンロードするものとする。
【００６４】
ユーザがサポート装置２００に対してアクセスし、制御プログラムの作成の開始を指示したとする（シーケンスＳＱ２）。サポート装置２００は、制御プログラムの作成開始指示を受けて、管理サーバ３００に変更履歴を取得するための要求を送信する（シーケンスＳＱ４）。このとき、サポート装置２００は、変更履歴に加えてダウンロード履歴についても要求するようにしてもよい。管理サーバ３００は、変更履歴格納部３２０から変更履歴を抽出してサポート装置２００に送る（シーケンスＳＱ６）。
【００６５】
サポート装置２００は、変更履歴に基づいて表示内容を形成してモニタ２０７に変更履歴を表示する（ステップＳ２２）。図８は、変更履歴の表示例を示す図である。たとえば、図８に示すように、サポート装置２００は、変更履歴格納部３２０に格納されている情報に基づいて、一の制御プログラムについての履歴表示４００がされ、どのような変更過程で開発が進められているかを視覚的にユーザに通知する。
【００６６】
ユーザは、いずれの変更段階における制御プログラムに対して編集を行うかを選択する（シーケンスＳＱ８）。たとえば、ユーザは、マウス２０６を操作して、モニタ２０７に表示されている複数の変更段階のうちの一の変更段階を選択する。図８に示す例では、「Ｅ」と表示された段階の制御プログラムが選択されたものとする。また、この場合に、編集対象の制御プログラムであることを示す第１アイコン４１０を選択した制御プログラムに付して表示してもよい。
【００６７】
サポート装置２００は、選択された変更段階の制御プログラムを取得するための要求を送信する（シーケンスＳＱ１０）。管理サーバ３００は、要求を受けて、変更履歴格納部３２０から選択された変更段階を示すバージョン情報３２２から、その変更段階のソースプログラム５０４を再生する（ステップＳ３２）。管理サーバ３００は生成したソースプログラム５０４と変更段階を示すバージョン情報３２２に含まれる変更ＩＤ３２４とをサポート装置２００に送る（シーケンスＳＱ１２）。
【００６８】
ユーザは、送られたソースプログラム５０４に基づいてプログラムの編集を行う（シーケンスＳＱ１４）。その後、ユーザから編集したプログラムをＰＬＣ１００にダウンロードするための指示を受けたとする（シーケンスＳＱ１６）。
【００６９】
サポート装置２００は、ＰＬＣ１００との通信を確認するため、ＰＬＣ１００に接続を要求する（シーケンスＳＱ１８）。ＰＬＣ１００は、サポート装置２００に対して接続状況の結果を返す（シーケンスＳＱ２０）。なお、ＰＬＣ１００は、ＰＬＣ１００からの返信がない場合に、その旨をモニタ２０７に表示してユーザに通知する。
【００７０】
サポート装置２００は、ＰＬＣ１００との接続を確認した後、制御プログラムに対して他の変更が加えられていないかを確認する。具体的には、編集前の制御プログラムに対して他のサポート装置等から変更が加えられたか否かを管理サーバ３００が管理している変更履歴から判断する。たとえば、サポート装置２００は、シーケンスＳＱ１２において管理サーバ３００から送られた変更ＩＤ３２４を管理サーバ３００に送る（シーケンスＳＱ２２）。すなわち、変更前のソースプログラム５０４の変更段階を示す変更ＩＤをサポート装置２００は管理サーバ３００に送る。管理サーバ３００は、送られた変更ＩＤによって特定される変更段階が全変更段階のうちのいずれの変更段階であるかを特定する（ステップＳ３４）。
【００７１】
管理サーバ３００は特定結果をサポート装置２００に送る（シーケンスＳＱ２４）。サポート装置２００は、送られた特定結果に基づいて、編集前のソースプログラム５０４に対して変更が加えられているか否かを判断する（ステップＳ２３）。
【００７２】
サポート装置２００は、変更が加えられていると判断した場合（ステップＳ２３においてＹＥＳ）、シーケンスＳＱ１４において行った編集後のソースプログラム５０４に加えられた変更を反映し（ステップＳ２４）、反映したソースプログラム５０４をダウンロード対象に決定する（ステップＳ２５）。
【００７３】
なお、サポート装置２００は、変更を反映する場合に、シーケンスＳＱ１４において行った編集箇所を変更する必要があるような場合に、ユーザに通知するようにしてもよい。また、サポート装置２００は、変更が加えられていることを通知し、その変更を反映するか否かをユーザに選択させるようにしてもよい。
【００７４】
一方、管理サーバ３００は、変更が加えられていないと判断した場合（ステップＳ２３においてＮＯ）、シーケンスＳＱ１４において行った編集後のソースプログラムをダウンロード対象に決定する（ステップＳ２６）。
【００７５】
サポート装置２００は、ダウンロード対象のソースプログラム５０４をコンパイルして実行形式プログラム５０２を得る（シーケンスＳＱ２６）。
【００７６】
サポート装置２００は、ＰＬＣ１００に対して排他権を要求する（シーケンスＳＱ２８）。排他権は、一のＰＬＣ１００に対しては同時に２以上の実行形式プログラムをダウンロードすることができないようにするための権利であって、ＰＬＣ１００につき１つ設けられている。サポート装置２００は、実行形式プログラムのダウンロードが完了するまでは排他権を保持し、ダウンロードが完了すると排他権をＰＬＣ１００に返還する。
【００７７】
ＰＬＣ１００は、排他権をサポート装置２００に送る（シーケンスＳＱ３０）。なお、ＰＬＣ１００が排他権を他のサポート装置等に渡している場合、ダウンロードをキャンセルしてもよく、また、排他権が返還されるまで待機してもよい。
【００７８】
排他権をサポート装置２００が保持している間は、排他権を保持しているサポート装置２００からしかＰＬＣ１００の内部データを変更することができない。
【００７９】
サポート装置２００は、ＰＬＣ１００が実行している制御プログラムを、ダウンロード対象の実行形式プログラム５０２に書き換えてもよいかを判断するため、ＰＬＣ１００の内部データを確認する（シーケンスＳＱ３２）。なお、内部データの確認方法については後述する。ＰＬＣ１００は、内部データの確認を受けてＰＬＣ１００が備えるデータ（内部データ）をサポート装置２００に送る（シーケンスＳＱ３４）。内部データには、ＰＬＣ１００のデバイスＩＤ３３４が含まれる。
【００８０】
サポート装置２００は、ダウンロード対象として決定したソースプログラム５０４を管理サーバ３００の管理対象とするため、ソースプログラム５０４を管理サーバ３００に送る（シーケンスＳＱ３６）。管理サーバ３００は、送られたソースプログラム５０４からバージョン情報３２２を生成して、変更ＩＤ３２４を付与し、バージョン情報３２２を変更履歴格納部３２０に格納するための保存処理を実行する（ステップＳ３６）。その後、管理サーバ３００は、保存処理によってダウンロード対象のソースプログラム５０４に対して付与された変更ＩＤ３２４をサポート装置２００に送る（シーケンスＳＱ３８）。
【００８１】
サポート装置２００は、ステップＳ２５またはステップＳ２６において決定したダウンロード対象のソースプログラム５０４からプログラムＩＤ３３６を算出する（ステップＳ２７）。プログラムＩＤ３３６は、ハッシュ関数を用いてソースプログラム５０４から算出される、制御プログラムの識別情報である。なお、プログラムＩＤ３３６は、実行形式プログラム５０２からハッシュ関数を用いて算出できるような構成であってもよい。
【００８２】
サポート装置２００は、シーケンスＳＱ２６において得られた実行形式プログラム５０２と、シーケンスＳＱ３８で得られた変更ＩＤ３２４と、ステップＳ２７において得られたプログラムＩＤ３３６とをＰＬＣ１００にダウンロードする（シーケンスＳＱ４０）。
【００８３】
ＰＬＣ１００は、ダウンロード結果をサポート装置２００に送る（シーケンスＳＱ４２）。サポート装置２００は、ダウンロード情報を生成して（ステップＳ２８）、生成したダウンロード情報３３２を管理サーバ３００に送る（シーケンスＳＱ４４）。管理サーバ３００は、送られたダウンロード情報３３２をダウンロード履歴格納部３３０に格納する（ステップＳ３８）。また、サポート装置２００は、排他権をＰＬＣ１００に返還して（シーケンスＳＱ４６）、ダウンロードに係る処理は完了する。
【００８４】
すなわち、図７に示した一連のダウンロードに係る処理が完了した段階で、ＰＬＣ１００には、実行形式プログラム５０２と、その実行形式プログラム５０２の制御プログラムに対して管理サーバ３００が付した変更ＩＤ３２４と、ダウンロードされた実行形式プログラム５０２のプログラムＩＤ３３６とが記憶されている。また、管理サーバ３００には、ＰＬＣ１００に実行形式プログラム５０２がダウンロードされた履歴としてダウンロード情報３３２が格納される。ダウンロード情報３３２は、変更ＩＤ３２４とプログラムＩＤ３３６とデバイスＩＤ３３４とからなる。すなわち、ダウンロード情報３３２と、バージョン情報３２２とを突き合わせることで、いずれのＰＬＣ１００に、いずれの変更段階の制御プログラムがダウンロードされているかを、ダウンロード情報３３２に基づいて特定することができる。
【００８５】
また、ＰＬＣ１００に実行形式プログラム５０２に加えて、変更ＩＤ３２４がダウンロードされるため、バージョン情報３２２と、ＰＬＣ１００にダウンロードされた情報とを突き合わせることで、そのＰＬＣ１００にダウンロードされている制御プログラムが、いずれの変更段階の制御プログラムであるかを容易に特定することができる。
【００８６】
＜Ｇ．ダウンロード処理に係るサポート装置２００の機能構成＞
図９は、ＰＬＣ１００に制御プログラムをダウンロードする際に機能するサポート装置２００の機能構成の一例を示す模式図である。サポート装置２００は、作成部２２０と、ダウンロード対象決定部２３０と、コンパイル部２４０と、プログラムＩＤ生成部２５０と、プログラム管理部２６０と、確認部２７０と、ダウンロード部２８０とを備える。これらの各機能構成は、プロセッサ２０１が、ＰＬＣサポートプログラム２１２を実行することで実現される。
【００８７】
作成部２２０は、ユーザの操作に従ってソースプログラム５０４を作成または編集する。作成部２２０が作成または編集したソースプログラム５０４は、たとえば、不揮発性メモリ２１０に一時的に保存される。作成部２２０は、本願発明の作成部の一例である。
【００８８】
ダウンロード対象決定部２３０は、ユーザからのダウンロード指示を受けて、ＰＬＣ１００にダウンロードする制御プログラムを決定する。具体的には、図７に示したシーケンスＳＱ２２、ステップＳ２３〜ステップＳ２６の処理を実行して、ダウンロード対象を決定する。換言すると、管理サーバ３００の変更履歴格納部３２０に格納されているバージョン情報３２２から、不揮発性メモリ２１０に保存されている編集後のソースプログラム５０４がいずれの変更段階であるかを特定して、ダウンロード対象の制御プログラムを決定する。ダウンロード対象決定部２３０は、編集後のソースプログラム５０４に、変更を反映する場合（ステップＳ２４）、不揮発性メモリ２１０に保存されているソースプログラム５０４に変更を反映する。
【００８９】
コンパイル部２４０は、ダウンロード対象のソースプログラム５０４から実行形式プログラムを生成する。
【００９０】
プログラムＩＤ生成部２５０は、ソースプログラム５０４からプログラムＩＤ３３６を生成する。具体的には、プログラムＩＤ生成部２５０は、ハッシュ関数を用いてプログラムＩＤ３３６を算出し、本願発明の演算部の一例である。
【００９１】
プログラム管理部２６０は、ダウンロード対象のソースプログラム５０４を管理サーバ３００に送り、管理サーバ３００から変更ＩＤ３２４を受け取る。
【００９２】
確認部２７０は、ＰＬＣ１００において実行されている制御プログラムのダウンロード履歴が管理サーバ３００のダウンロード履歴格納部３３０に格納されているか否かを確認する、本願発明の確認部の一例である。具体的には、確認部２７０は、ＰＬＣ１００にダウンロードされているプログラムＩＤ３３６および変更ＩＤ３２４、ならびに、ＰＬＣ１００の識別子であるデバイスＩＤ３３４を、ＰＬＣ１００から取得する。確認部２７０は、取得したデバイスＩＤ３３４、変更ＩＤ３２４、およびプログラムＩＤ３３６のセットからなるダウンロード情報３３２がダウンロード履歴格納部３３０に格納されているか否かを判断する。格納されていない場合、ＰＬＣ１００にダウンロードされている制御プログラムの履歴がダウンロード履歴格納部３３０に格納されていないことを意味する。一方、格納されている場合は、ＰＬＣ１００にダウンロードされている制御プログラムのダウンロード履歴および変更履歴が管理サーバ３００によって管理されていることを意味する。
【００９３】
確認部２７０は、ダウンロード指示を受けたことに基づいて、ＰＬＣ１００において実行されている制御プログラムのダウンロード履歴が管理サーバ３００のダウンロード履歴格納部３３０に格納されているか否かを確認する。確認結果をダウンロード部２８０に送る。また、確認部２７０は、ＰＬＣ１００との通信を開始したことを以て、ＰＬＣ１００において実行されている制御プログラムのダウンロード履歴の有無を確認してもよい。
【００９４】
ダウンロード部２８０は、確認部２７０から送られた確認結果に基づいてダウンロードを継続するか否かを決定する。具体的には、ＰＬＣ１００において実行されている制御プログラムのダウンロード履歴がない場合、ダウンロード部２８０は、ダウンロードの継続を中止する。一方、ＰＬＣ１００において実行されている制御プログラムのダウンロード履歴がある場合、ダウンロードの継続を決定する。ダウンロード部２８０は、排他権に関する制御を行う排他権制御部２８２と、ダウンロードを実行する実行部２８４と、ダウンロード情報を生成するダウンロード情報生成部２８６とを備える。ここで、ダウンロード部２８０は、本願発明の送信部の一例である。
【００９５】
排他権制御部２８２は、確認部２７０の確認結果に基づいてダウンロード部２８０がダウンロードの継続を決めたことを以て、ＰＬＣ１００に排他権を要求する。排他権制御部２８２は、実行形式プログラム５０２のダウンロードが完了するまでは排他権を保持し、ダウンロードが完了すると排他権をＰＬＣ１００に返還する。
【００９６】
たとえば、ＰＬＣ１００が実行形式プログラムをダウンロードしている間、あるいは、ＰＬＣ１００にダウンロードされている制御プログラムに対する編集が行なわれている間は、排他権の要求は拒否される。
【００９７】
実行部２８４は、排他権制御部２８２が排他権を取得したことを以て、実行形式プログラム５０２、デバイスＩＤ３３４と、変更ＩＤ３２４とをＰＬＣ１００に送る。
【００９８】
ダウンロード情報生成部２８６は、ＰＬＣ１００からのダウンロード結果を受けて、ダウンロード情報３３２を生成する。このとき、ダウンロード情報生成部２８６は、コメントの入力を可能にしてもよい。
【００９９】
＜Ｈ．ダウンロード情報およびＰＬＣ１００に送られた変更ＩＤ３２４の活用例＞
本実施の形態において、管理サーバ３００、サポート装置２００、およびＰＬＣ１００が互いに通信可能に接続された環境の下では、ＰＬＣ１００にダウンロードされた制御プログラムは管理サーバ３００の管理下におくことができる。以下、ダウンロード履歴およびＰＬＣ１００に送られた変更ＩＤ３２４およびプログラムＩＤ３３６の活用例について説明する。
【０１００】
（ｈ１．ＰＬＣ１００にダウンロードされた制御プログラムの確認）
サポート装置２００は、ＰＬＣ１００との接続を開始したときに、ＰＬＣ１００が備える変更ＩＤ３２４、実行形式プログラム５０２、およびプログラムＩＤ３３６を取得する。取得した実行形式プログラム５０２をソースプログラム５０４に変換して、プログラムＩＤ生成部２５０がプログラムＩＤ３３６を再演算する。サポート装置２００の確認部２７０は、再計算によって得られたプログラムＩＤ３３６とＰＬＣ１００から取得したプログラムＩＤ３３６とが一致しているか否かを確認し、確認結果をモニタ２０７に表示することでユーザに通知してもよい。
【０１０１】
たとえば、ＰＬＣ１００から取得した実行形式プログラム５０２から再計算されたプログラムＩＤ３３６と、ＰＬＣ１００から取得したプログラムＩＤ３３６とは一致しないということは、ＰＬＣ１００が備える実行形式プログラム５０２はプログラムＩＤ３３６とともにダウンロードされたときから書き換えられており、制御プログラムが管理サーバ３００に管理されていない虞がある。
【０１０２】
なお、ＰＬＣ１００に実行形式プログラム５０２をダウンロードするときに、併せてプログラムＩＤ３３６をＰＬＣ２００に送ることで、サポート装置２００が管理サーバ３００のダウンロード履歴格納部３３０にアクセスすることができない環境下であっても、書き換わっているか否かを特定可能である。なお、この場合、実行形式プログラム５０２が書き換わったとしてもプログラムＩＤ３３６は更新されないことを前提とする。
【０１０３】
実行形式プログラム５０２の書き換わったときにプログラムＩＤ３３６も更新される場合であっても、サポート装置２００と管理サーバ３００とが互いに通信可能に接続されていれば、実行形式プログラム５０２が書き換わっているか否かを判断することができる。具体的には、サポート装置２００は、ＰＬＣ１００にダウンロードされている実行形式プログラム５０２から再計算したプログラムＩＤ３３６と、ＰＬＣ１００から取得した変更ＩＤ３２４およびデバイスＩＤ３３４との組み合わせからなるダウンロード情報３３２がダウンロード履歴格納部３３０に格納されているか否かを確認する。一致するダウンロード情報３３２がある場合、サポート装置２００は、ＰＬＣ１００にダウンロードされている制御プログラムは管理サーバ３００によって管理されていると判断し、一致するダウンロード情報３３２がない場合、ＰＬＣ１００にダウンロードされている制御プログラムは管理サーバ３００によって管理されていないと判断する。
【０１０４】
（ｈ２．変更履歴およびダウンロード履歴の表示例）
図１０〜図１２を参照して変更履歴およびダウンロード履歴の表示方法について説明する。図１０は、サポート装置２００がモニタ２０７に表示する変更履歴の表示例である。図１１は、全ダウンロード履歴の表示例である。図１２は、一の変更段階の制御プログラムのダウンロード履歴の表示例である。サポート装置２００は、変更履歴格納部３２０に格納されたバージョン情報３２２に基づいて制御プログラムの変更履歴を履歴表示４００としてモニタ２０７に表示する。
【０１０５】
たとえば、Ｅアイコン４５０に対して編集を行っている場合、第１アイコン４１０をＥアイコン４５０に付すように表示される。その後、編集が完了し、管理サーバ３００によって管理されると、Ｆアイコン４２０が表示される。
【０１０６】
また、サポート装置２００にＰＬＣ１００が接続されている場合に、そのＰＬＣ１００が実行している制御プログラムがいずれの変更段階の制御プログラムであるかが第２アイコン４３２を付すことで示される。具体的には、第１タブ４３０が操作されると、ＰＬＣ１００が実行している制御プログラムを示すアイコンに第２アイコン４３２が付される。図１０に示す例では、Ｅアイコン４５０が示す変更段階の制御プログラムをＰＯＣ１００が実行している。
【０１０７】
ダウンロード履歴の全てを表示するための第２タブ４４０が操作されると、図１１に示すように、サポート装置２００は、全てのダウンロード履歴を示す履歴表示４４２をモニタ２０７に表示する。一のダウンロード履歴を選択して、削除ボタン４４４を操作すると、選択したダウンロード履歴（ダウンロード情報３３２）が削除される。また、一のダウンロード履歴を選択して編集ボタン４４６を操作すると、選択したダウンロード履歴のコメント欄を編集することができる。
【０１０８】
サポート装置２００は、選択された一の変更段階の制御プログラムのダウンロード履歴を表示する。たとえば、Ｅアイコン４５０が選択されると、図１２に示すように、サポート装置２００は、Ｅアイコン４５０が示す変更段階の制御プログラムをダウンロードした履歴が示された履歴表示４５２をモニタ２０７に表示する。具体的には、サポート装置２００は、一の変更段階が選択されると、選択された一の変更段階の変更ＩＤ３２４を含むダウンロード情報３３２を管理サーバ３００に要求する。管理サーバ３００は、ダウンロード履歴格納部３３０から選択された一の変更段階の変更ＩＤ３２４を含むダウンロード情報３３２を抽出し、サポート装置２００に送る。サポート装置２００は、選択された変更段階の制御プログラムがダウンロードされた履歴を履歴表示４４２としてモニタ２０７に表示する。削除ボタン４５４および編集ボタン４５６の機能は、削除ボタン４４４および編集ボタン４４６と同じ機能であるため説明を割愛する。
【０１０９】
また、ユーザは、図１０に示す変更履歴から、一の変更段階の制御プログラムを選択し、選択した制御プログラムをＰＬＣ１００にダウンロードすることができる。たとえば、Ｅアイコン４５０が示す変更段階の制御プログラムに対しての編集をユーザが完了し、管理サーバ３００に保存すると、Ｆアイコン４２０が新たに変更履歴に追加される。ユーザは、Ｆアイコン４２０を選択して、ＰＬＣ１００へのダウンロードを指示することで、Ｅアイコン４５０が示す変更段階の制御プログラムに対して行った編集後の制御プログラムをＰＬＣ１００に送ることができる。ＰＬＣ１００に新たにダウンロードすると、図１２に示すように、破線で示した新たなダウンロード履歴４４８が追加される。
【０１１０】
このように、ＰＬＣ１００にダウンロードされている制御プログラムが、各変更段階のうちのいずれの変更段階の制御プログラムであるかをユーザに示すことで、ユーザは、容易に制御プログラムのアップデートまたはロールバックを行うことができる。その結果、ＰＬＣ１００の動作に異常がある場合に、容易に対処することができ、ＰＬＣ１００の動作に異常が発生して動作を停止した場合であっても早急に復旧させることができる。
【０１１１】
＜Ｉ．作用・効果＞
以上のように、本実施の形態において、作成部２２０によって作成されたソースプログラム５０４は、ユーザからのダウンロード指示を受けて管理サーバ３００に送られ変更ＩＤ３２４が付与される。そして、ＰＬＣ１００には変更ＩＤ３２４と実行形式プログラム５０２とが送られる。すなわち、ＰＬＣ１００に、管理サーバ３００が管理している変更ＩＤ３２４が送られるため、ＰＬＣ１００に送られた実行形式プログラム５０２と、管理サーバ３００が管理している制御プログラムとを変更ＩＤ３２４によって対応付けることができる。
【０１１２】
また、ＰＬＣ１００に送信された変更ＩＤ３２４と、送信先のＰＬＣ１００を特定するためのデバイスＩＤ３３４とを関連付けて格納するダウンロード履歴格納部３３０を管理サーバ３００は備える。すなわち、制御プログラムをダウンロードしたＰＬＣ１００と、その制御プログラムの変更段階との関係が記憶されるため、いずれのＰＬＣ１００に、どのような制御プログラムが送られたのかを、ユーザが容易に把握することができる。また、ＰＬＣ１００が実行中の制御プログラムに不具合があった場合に、以前ダウンロードされていた制御プログラムを容易に特定することができ、容易にロールバック等の作業を行うことができる。
【０１１３】
また、サポート装置２００がＰＬＣ１００に制御プログラムを送信したときに、ＰＬＣ１００に送信された制御プログラムのプログラムＩＤ３３６と、送信された制御プログラムに付された変更ＩＤ３２４と、送信先のＰＬＣ１００のデバイスＩＤ３３４とをダウンロード履歴格納部３３０に格納される。そのため、ＰＬＣ１００が実行している制御プログラムが管理サーバ３００とサポート装置２００を介して接続されていない状況で書き換わった場合に、ＰＬＣ１００において実行されている制御プログラムからプログラムＩＤ３３６を再計算すれば、ダウンロード履歴格納部３３０を参照することで、制御プログラムが書き換わったか否かを判断できる。
【０１１４】
また、サポート装置２００は確認部２７０を備え、確認部２７０は、ＰＬＣ１００において実行されている制御プログラムから得られるプログラムＩＤ３３６と、ＰＬＣ１００から取得された制御プログラムの変更ＩＤ３２４とを含むダウンロード情報３３２を検索し、一致するダウンロード情報３３２があるか否かを確認する。そのため、ユーザは、自身でダウンロード履歴格納部３３０内を検索することなく、ＰＬＣ１００において実行されている制御プログラムが書き換わっているか否かを判断することができる。
【０１１５】
また、実行部２８４は、確認部２７０がＰＬＣ１００において実行されている制御プログラムのダウンロード履歴がダウンロード履歴格納部３３０に格納されていることを条件にＰＬＣ１００にダウンロード対象の制御プログラムを送る。そのため、制御プログラムが書き換わっており、書き換わった後の制御プログラムのダウンロード履歴を残し忘れてしまうことを防止することができる。
【０１１６】
§３  変形例
本実施の形態において、管理サーバ３００が、サポート装置２００と別体で形成されており、管理サーバ３００の機能をサポート装置２００が備えていないものとして説明した。サポート装置２００が管理サーバ３００の機能を備えていてもよい。たとえば、管理サーバ３００の機能をサポート装置２００が備えることで、管理サーバ３００とサポート装置２００との通信が切断されている状況であっても、ダウンロード履歴、および変更履歴を残すことができる。この場合、サポート装置２００は、管理サーバ３００との通信が再開されたときに、切断中に蓄積されたダウンロード履歴および変更履歴を管理サーバ３００にアップロードするようにしてもよい。
【０１１７】
§４  付記
以上のように、上記の実施の形態および変形例は以下のような開示を含む。
【０１１８】
＜構成１＞
制御対象を制御する制御装置に向けられた開発システム（１，１ａ）であって、
制御装置で実行される制御プログラムを作成または編集する作成部（２２０，２２０ａ）と、
制御装置で実行される制御プログラムの変更履歴を、各変更段階の制御プログラムを特定するための第１識別情報（３２４）を用いて管理する管理部（３００，３００ａ）と、
前記作成部が作成または編集した制御プログラムを前記管理部が管理することで当該制御プログラムに付された第１識別情報と、当該制御プログラムに基づく制御装置で実行可能なコード（５０４）とを、制御装置（１００）へ送信する送信部（２８０，２８０ａ）とを備える、開発システム。
【０１１９】
＜構成２＞
前記制御装置に送信された第１識別情報と、送信先の制御装置を特定するための第２識別情報（３３４）とを関連付けて格納する記憶部（３３０）をさらに備える、構成１に記載の開発システム。
【０１２０】
＜構成３＞
制御装置に送信されたコードまたは当該コードの元となる制御プログラムから当該制御プログラムの識別子である第３識別情報（３３６）を算出する演算部（２５０）をさらに備え、
前記記憶部は、制御装置に送信された制御プログラムの第３識別情報を第１識別情報および第２識別情報に関連付けて格納する、構成２に記載の開発システム。
【０１２１】
＜構成４＞
前記演算部は、制御装置において実行されている制御プログラムから第３識別情報を演算し、
前記演算部が演算した第３識別情報と、前記制御装置から得られる第１識別情報とが関連付けて前記記憶部に格納されているか否かを確認する確認部（２７０）をさらに備える、構成３に記載の開発システム。
【０１２２】
＜構成５＞
前記送信部は、前記確認部が制御装置において実行されている制御プログラムから算出された第３識別情報と、当該制御装置から得られる第１識別情報とが関連付けて前記記憶部に格納されていると判定したことを条件に、前記作成部が作成または編集した制御プログラムに付された第１識別情報と、前記作成部が作成または編集した制御プログラムに基づく制御装置で実行可能なコードとを、当該制御装置に送信する、構成４に記載の開発システム。
【０１２３】
＜構成６＞
制御対象を制御する制御装置に向けられたサポート装置（２００，２００ａ）であって、
制御装置で実行される制御プログラムを作成または編集する作成部（２２０，２２０ａ）と、
制御装置で実行される制御プログラムの変更履歴を、各変更段階の制御プログラムを特定するための第１識別情報を用いて管理する管理部（３００ａ）と、
前記作成部が作成または編集した制御プログラムを前記管理部が管理することで当該制御プログラムに付された第１識別情報と、当該制御プログラムに基づく制御装置で実行可能なコードとを、制御装置へ送信する送信部（２８０，２８０ａ）とを備える、サポート装置。
【０１２４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。また、実施の形態および各変形例において説明された発明は、可能な限り、単独でも、組合せても、実施することが意図される。
【符号の説明】
【０１２５】
１，１ａ  制御システム、９  ＣＤ−ＲＯＭ、１０  ＣＰＵユニット、１１  システムバス、１２  電源ユニット、１４  Ｉ／Ｏユニット、２０  接続ケーブル、２２  ローカルネットワーク、１００  ＰＬＣ、１０２，０１，３０１  プロセッサ、１０４  チップセット、１０６，２０２，３０２  主メモリ、１１０，２１０，３１０  不揮発性メモリ、１１２  システムプログラム、１２２  内部バスコントローラ、１２４  フィールドバスコントローラ、１２６，２０４  ＵＳＢコネクタ、１２８  メモリカードインターフェイス、１３０  メモリカード、２００  サポート装置、２０３，３０５  内部バス、２０５  キーボード、２０６  マウス、２０７  モニタ、２０８  ＣＤ−ＲＯＭドライブ、２０９，３０４  ネットワークインターフェイス、２１２  ＰＬＣサポートプログラム、２１３  エディタプログラム、２１４  コンパイラプログラム、２１５  デバッカプログラム、２１６  通信プログラム、２１７，３０６  管理プログラム、２２０，２２０ａ  作成部、２３０  ダウンロード対象決定部、２４０  コンパイル部、２５０  プログラムＩＤ生成部、２６０  プログラム管理部、２７０  確認部、２８０  ダウンロード部、２８０ａ  送信部、２８２  排他権制御部、２８４  実行部、２８６  ダウンロード情報生成部、３００  管理サーバ、３００ａ  管理部、３２２  変更履歴格納部、３２４  変更ＩＤ、３２６  プログラム情報、３２８  履歴情報、３３０  ダウンロード履歴格納部、３３２  ダウンロード情報、３３４  デバイスＩＤ、３３６  プログラムＩＤ、３４０  保存処理部、３４２  格納先決定部、３４４  バージョン情報生成部、３４６  ＩＤ付与部、３５０  出力対象決定部、３６０  出力部、４００，４４２，４５２  履歴表示、４１０  第１アイコン、４２０  Ｆアイコン、４３０  第１タブ、４３２  第２アイコン、４４０  第２タブ、４４４，４５４  削除ボタン、４４６，４５６  編集ボタン、４４８  ダウンロード履歴、４５０  Ｅアイコン、５０２  実行形式プログラム、５０４  ソースプログラム。
【図１】
2020009297.tif 000003
【図２】
2020009297.tif 000004
【図３】
2020009297.tif 000005
【図４】
2020009297.tif 000006
【図５】
2020009297.tif 000007
【図６】
2020009297.tif 000008
【図７】
2020009297.tif 000009
【図８】
2020009297.tif 000010
【図９】
2020009297.tif 000011
【図１０】
2020009297.tif 000012
【図１１】
2020009297.tif 000013
【図１２】
2020009297.tif 000014