(57)【特許請求の範囲】
【請求項１】
ステップ及びトランジションの情報を含む制御プログラムを記憶する第１記憶部と、
第２記憶部と、
前記第１記憶部に記憶された制御プログラムを実行して被制御装置を制御する実行部と、
前記制御プログラムを実行中に、前記第１記憶部に記憶された前記制御プログラムを書換える実行中書換え指示と、前記制御プログラムの変更部分を示す差分情報とを受信する通信部と、
前記実行中書換え指示を受信する毎に、書換え前の前記制御プログラムと、前記差分情報と、前記制御プログラムのうち実行中のステップを示す活性情報とを含むバックアップ情報を、複数の前記バックアップ情報のそれぞれの順序を示す順序情報と共に前記第２記憶部に記憶させ、前記差分情報に基づいて前記制御プログラムを書換える書換え制御部と、
を備えることを特徴とする制御装置。
【請求項２】
前記通信部は、前記制御プログラムを書換え前の状態に戻すロールバック指示を受信し、
前記ロールバック指示を受信する毎に、前記順序情報に基づいて選択した前記バックアップ情報を用いて、前記第１記憶部に記憶された前記制御プログラムを書換えると共に、選択した前記バックアップ情報に含まれる前記活性情報が示すステップから前記制御プログラムの実行を開始するように前記実行部に指示するロールバック制御部、
をさらに備えることを特徴とする請求項１に記載の制御装置。
【請求項３】
前記通信部は、前記バックアップ情報を要求するデータ要求を受信し、
前記ロールバック制御部は、前記データ要求に応じて、前記第２記憶部に記憶されたバックアップ情報を要求元の装置に返送することを特徴とする請求項２に記載の制御装置。
【請求項４】
請求項３に記載の制御装置の前記制御プログラムを編集する編集装置であって、
前記実行中書換え指示と前記差分情報とを前記制御装置に送信した後、前記データ要求を前記制御装置に送信して前記バックアップ情報を取得し、取得した前記バックアップ情報に含まれる変更前の前記制御プログラムを前記順序情報に従って表示部に表示する編集部、
を備えることを特徴とする編集装置。
【請求項５】
ステップ及びトランジションの情報を含む制御プログラムを実行中に書換える複数回の実行中書換えの指示を受信した後、前記実行中書換えが行われる前の状態に前記制御プログラムを戻す複数回のロールバックの指示を受信すると、前記ロールバックの指示を受信した回数前の前記実行中書換えの指示を受信した時点で実行中であったステップから前記制御プログラムの実行を開始することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムを実行して被制御装置を制御する制御装置と、制御プログラムを編集可能な編集装置とに関する。
【背景技術】
【０００２】
制御プログラムを実行して被制御装置を制御するプログラマブルロジックコントローラ（以下、ＰＬＣ（Programmable  Logic  Controller）と称する）などの制御装置が、産業機械の分野で利用されている。制御装置の動作を変更する場合、制御プログラムを編集して、制御装置が実行する制御プログラムを書換える必要がある。【０００３】
特許文献１には、制御プログラムを停止させずに実行中の制御プログラムを書換えることが可能な制御装置が開示されている。この構成により、制御装置および被制御装置の動作効率を向上させることができる。この制御装置は、書換え前後の制御プログラムと、制御プログラムを書換える際に実行している制御プログラムの部分とを一時記憶しており、一時記憶した情報を、制御プログラムを書換えた後に削除している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−３０９９１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１には、制御プログラムを書換えた後、元の制御プログラムに戻すロールバック機能については記載されていない。制御プログラムを書換えた後、制御プログラムの内容を変更する必要が生じた際、書換え前の制御プログラムに戻すことがある。特許文献１に記載の制御装置では、制御プログラムをロールバックするためには、手作業で元の状態に書き換えた後、実行中の制御プログラムを書き換える必要があり、手間がかかるという問題があった。【０００６】
本発明は、上記に鑑みてなされたものであって、制御プログラムを書換えた後、制御プログラムを書換え前の状態に容易に戻すことが可能な制御装置を得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明にかかる制御装置は、ステップ及びトランジションの情報を含む制御プログラムを記憶する第１記憶部と、第２記憶部と、第１記憶部に記憶された制御プログラムを実行して被制御装置を制御する実行部と、制御プログラムを実行中に、第１記憶部に記憶された制御プログラムを書換える実行中書換え指示と、制御プログラムの変更部分を示す差分情報とを受信する通信部と、制御プログラムを書換える書換え制御部とを備える。書換え制御部は、実行中書換え指示を受信する毎に、書換え前の制御プログラムと、差分情報と、制御プログラムのうち実行中のステップを示す活性情報とを含むバックアップ情報を、複数のバックアップ情報のそれぞれの順序を示す順序情報と共に第２記憶部に記憶させ、差分情報に基づいて制御プログラムを書換えることを特徴とする。
【発明の効果】
【０００８】
本発明にかかる制御装置は、制御プログラムを書換えた後、制御プログラムを書換え前の状態に容易に戻すことが可能であるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施の形態１にかかる制御装置および編集装置の構成を示す図
【図２】図１に示す制御装置が実行する制御プログラムの説明図
【図３】図１に示す制御装置および編集装置の機能を実現する処理回路の一例を示す図
【図４】図１に示す編集装置が行う制御プログラムの編集の一例を示す図
【図５】図１に示す制御装置の実行する制御プログラムを書換える動作を示すシーケンス図
【図６】図１に示す編集装置が表示する実行中書換え指示画面を示す図
【図７】図１に示す編集装置が表示する確認画面を示す図
【図８】図１に示す書換え制御部が行うバックアップ処理において、第２記憶部に記憶される情報を示す図
【図９】図５に示した書換え動作中に第１記憶部および第２記憶部に記憶される情報の具体例を示す図
【図１０】本発明の実施の形態２にかかる制御装置の実行する制御プログラムをロールバックする動作を示すシーケンス図
【図１１】本発明の実施の形態２にかかる編集装置が表示するロールバック機能を選択する画面を示す図
【図１２】図１１に示すロールバック機能を選択する画面からリンクされたロールバック実行画面を示す図
【図１３】図１２に示すプログラム表示ボタンからリンクされたロールバックプログラム表示画面を示す図
【図１４】図１２に示すロールバック実行画面がロールバック実行後に更新されて表示されるロールバック実行画面を示す図
【図１５】図１０に示したロールバック動作中に第１記憶部および第２記憶部に記憶されている情報の具体例を示す図
【図１６】図１０に示す動作においてロールバック処理の実行エラーが発生する条件を示す図
【図１７】図１０のロールバック処理を行う際に制御装置が実行する動作を示すフローチャート
【図１８】本発明の実施の形態１および２の効果の一例を示す図
【発明を実施するための形態】
【００１０】
以下に、本発明の実施の形態にかかる制御装置および編集装置を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態１．
図１は、本発明の実施の形態１にかかる制御装置１および編集装置３の構成を示す図である。制御装置１は、制御プログラムを実行して被制御装置２を制御する。制御装置１は、例えばＰＬＣなどであり、加工装置、検査装置など生産現場で用いられる被制御装置２を制御する。編集装置３は、制御装置１が実行する制御プログラムを編集する装置である。編集装置３は、ＰＣ（Personal  Computer）などの情報処理装置であり、制御プログラムを編集する編集アプリケーションを実行する。
【００１２】
制御装置１は、第１記憶部１１と、実行部１２と、通信部１３と、書換え制御部１４と、第２記憶部１５と、ロールバック制御部１６とを有する。第１記憶部１１は、制御プログラムを記憶する。実行部１２は、第１記憶部１１に記憶された制御プログラムを読み出して実行することにより、被制御装置２を制御する。通信部１３は、編集装置３などの外部装置との通信インタフェースである。書換え制御部１４は、第１記憶部１１に記憶された制御プログラムの書換えを制御する。書換え制御部１４は、通信部１３を介して編集装置３から実行中書換え指示を受信する毎に、実行中書換え指示と共に受信する差分情報に従って、第１記憶部１１に記憶された制御プログラムを書換える。
【００１３】
差分情報は、制御プログラムの変更部分を示す。書換え制御部１４は、制御プログラムを書換える前に、実行中の制御プログラムを第２記憶部１５にバックアップすると共に、バックアップした制御プログラムをロールバックする際に必要な情報をバックアップ情報として第２記憶部１５に記憶する。バックアップ情報は、例えば、変更前の制御プログラムと、制御プログラムのうち実行中の箇所を示す活性情報と、差分情報とを含む。書換え制御部１４は、編集装置３から受信した差分情報をそのままバックアップ情報として記憶してもよいし、差分情報のデータ形式を変換するなど差分情報に基づいて生成した情報をバックアップ情報として記憶してもよい。ロールバック制御部１６は、第２記憶部１５に記憶されたバックアップ情報を用いて、制御プログラムをロールバックする。書換え制御部１４は、制御プログラムの書換えを行う度にバックアップ情報を生成して、バックアップ情報が生成された順序を示す順序情報と共に第２記憶部１５に記憶する。このため、ロールバック制御部１６は、複数回のロールバックを行うことが可能であり、ロールバックを行う度に制御プログラムを１つずつ過去の状態に戻すことができる。
【００１４】
編集装置３は、通信部３１と、編集部３２と、入出力部３３と、記憶部３４とを有する。通信部３１は、制御装置１などの外部装置との通信インタフェースである。編集部３２は、制御装置１が実行する制御プログラムを編集する。入出力部３３は、ユーザの入力操作に従った入力信号を生成する入力部の機能と、表示画面などを出力する出力部の機能とを有する。入出力部３３は、例えば、入力部の機能と出力部の機能とを合わせ持つタッチパネル、または、マウスなどのポインティングデバイス、キーボードといった入力装置および表示装置により構成される。記憶部３４は、編集装置３が実行する編集プログラム、編集プログラムの実行中に生成されるデータなどを記憶する。編集部３２は、入出力部３３が生成する入力信号に基づいて、制御装置１が実行する制御プログラムを編集することができる。
【００１５】
図２は、図１に示す制御装置１が実行する制御プログラムの説明図である。制御プログラムＰｒｏｇ１は、ブロックＢＬ０から構成されている。図２の例では、１つの制御プログラムが１つのブロックから構成されているが、１つの制御プログラムが複数のブロックから構成される場合もある。制御プログラムＰｒｏｇ１は、ブロックＢＬ０が、複数のステップと移行条件である複数のトランジションとから構成されているＳＦＣ（Sequential  Function  Chart）プログラムである。ステップは、制御装置１が行う一連の動作におけるそれぞれの動作単位を示しており、各ステップは、トランジションで連結されている。制御装置１がＳＦＣプログラムを実行する際には、若番ブロックから順に実行し、ステップの実行とトランジションが成立したか否かの判定とを繰り返し、トランジションが成立している場合、次のステップを順に実行する。図２に示す制御プログラムＰｒｏｇ１の場合、制御装置１は、ブロックＢＬ０のステップＳ０を実行した後、トランジションＴＲ０を判定してトランジションＴＲ０が成立している場合、次にステップＳ１を実行する。以下同様に、制御装置１は、トランジションＴＲ１の判定、ステップＳ２の実行、トランジションＴＲ２の判定、ステップＳ３の実行、およびトランジションＴＲ３の判定を行い、最後のステップＳ４まで実行する。トランジションが成立していない場合、制御装置１は、実行中のブロックの処理を終了する。
【００１６】
図３は、図１に示す制御装置１および編集装置３の機能を実現する処理回路９２の一例を示す図である。図３に示す処理回路９２は、メモリ９３とプロセッサ９４とを備える。制御装置１の第１記憶部１１、実行部１２、書換え制御部１４、第２記憶部１５およびロールバック制御部１６と、編集装置３の編集部３２および記憶部３４とは、メモリ９３に記憶されたコンピュータプログラムをプロセッサ９４が読み出して実行することにより実現される。メモリ９３は、例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリーなどの不揮発性または揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスクなどの記憶装置である。プロセッサ９４は、ＣＰＵ（Central  Processing  Unit）であり、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、ＤＳＰ（Digital  Signal  Processor）などとも呼ばれる。なお、実行部１２が実行する制御プログラムを記憶する領域である第１記憶部１１と、バックアップ情報を記憶する領域である第２記憶部１５とは、１つの記憶装置により実現されてもよいし、複数の記憶装置により実現されてもよい。
【００１７】
また、制御装置１の各機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。このように、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせによって、上述の各機能を実現することができる。
【００１８】
続いて、図１に示す制御装置１および編集装置３が行う実行中書換えについて具体例を用いて説明する。図４は、図１に示す編集装置３が行う制御プログラムＰｒｏｇ１の編集の一例を示す図である。
【００１９】
編集装置３は、制御プログラムＰｒｏｇ１の第１版を編集して第２版を生成し、制御装置１に実行中書換えを指示した後、さらに第２版を編集して第３版を生成し、制御装置１に実行中書換えを指示する。その後、編集装置３は、制御プログラムＰｒｏｇ１の第３版を第２版に書換えるロールバックを指示し、さらに制御プログラムＰｒｏｇ１の第２版を第１版に書換えるロールバックを指示する。
【００２０】
制御プログラムＰｒｏｇ１の第２版は、第１版にステップＳ５およびＳ６を追加する変更を行ったものであり、第３版は、第２版にステップＳ７およびステップＳ８を追加する変更を行ったものである。制御プログラムＰｒｏｇ１の第１版を第２版に書換える実行中書換え指示を制御装置１が受信したときには、制御装置１の実行部１２は、制御プログラムＰｒｏｇ１のブロックＢＬ０のステップＳ０を実行中である。制御プログラムＰｒｏｇ１の第２版を第３版に書換える実行中書換え指示を制御装置１が受信したときには、制御装置１の実行部１２は、ステップＳ１を実行中である。また、制御プログラムＰｒｏｇ１の第１版から第２版に編集したときの変更部分は、アドレス「２０」から「３１」までであり、第２版から第３版に編集したときの変更部分は、アドレス「３２」から「４１」までである。
【００２１】
ユーザは、編集装置３を用いて、既存のステップの動作内容、ステップ間を接続するトランジションを編集したり、新たなステップおよびトランジションを追加したりして、制御プログラムＰｒｏｇ１を編集することが可能である。新たなステップおよびトランジションの追加は、ステップを示すオブジェクトである四角いブロック、トランジションを示すオブジェクトである横線などのオブジェクトを画面上でドラッグアンドドロップ操作して並べることにより行われる。
【００２２】
図５は、図１に示す制御装置１の実行する制御プログラムを書換える動作を示すシーケンス図である。編集装置３の編集部３２は、ユーザの操作に従って、制御プログラムＰｒｏｇ１の第１版を編集して第２版を生成する（ステップＳ１０１）。制御プログラムＰｒｏｇ１の編集が終わると、編集装置３の編集部３２は、制御装置１に実行中書換え指示と、制御プログラムＰｒｏｇ１の第１版と第２版との差分を示す差分情報とを送信する（ステップＳ１０２）。
【００２３】
図６は、図１に示す編集装置３が表示する実行中書換え指示画面４０を示す図である。この実行中書換え指示画面４０は、編集部３２が制御プログラムＰｒｏｇ１の編集を終えた後、入出力部３３の表示部に表示することが可能な画面である。実行中書換え指示画面４０に表示されたメニューの中から、「プログラム変換＋実行中書換え」を選択すると、編集部３２は、画面上で編集されたオブジェクトが示す動作をプログラムに変換すると共に、制御プログラムＰｒｏｇ１の第１版と第２版とのプログラムの差分を示す差分情報を生成する。
【００２４】
「プログラム変換＋実行中書換え」が選択された後、ロールバック機能が無効になっている場合、編集部３２は、入出力部３３にロールバック機能選択画面４２を表示させてもよい。ロールバック機能選択画面４２は、ロールバック機能を有効にする操作を受け付ける画面である。
【００２５】
図７は、図１に示す編集装置３が表示する確認画面４３を示す図である。図６に示すロールバック機能選択画面４２で「はい」を選択したとき、または、予めロールバック機能が有効になっている場合には実行中書換え指示画面４０で「プログラム変換＋実行中書換え」を選択した直後、図７に示す確認画面４３が表示される。確認画面４３は、実行中書換えに関する現在の設定の概要を示しており、オプション設定ボタンが操作されると、実行中書換えに関する設定を変更することが可能である。確認画面４３で「はい」ボタン４４が操作されると、実行中書換えの実行が確定され、編集部３２は、実行中書換え指示と、差分情報とを制御装置１に送信する。
【００２６】
図５の説明に戻る。編集装置３が送信した実行中書換え指示および差分情報を通信部１３が受信すると、制御装置１の書換え制御部１４は、制御プログラムＰｒｏｇ１を書換える前に、バックアップ処理＃１を実行する（ステップＳ１０３）。具体的には、書換え制御部１４は、実行中書換え指示を受信する毎に、バックアップ情報を複数のバックアップ情報のそれぞれの順序を示す順序情報と共に第２記憶部１５に記憶する。
【００２７】
図８は、図１に示す書換え制御部１４が行うバックアップ処理において、第２記憶部１５に記憶される情報を示す図である。書換え制御部１４は、第２記憶部１５に複数のバックアップ情報のそれぞれの順序を示す順序情報と共に、バックアップ情報を記憶する。バックアップ情報は、変更前の制御プログラムＰｒｏｇ１と、制御プログラムＰｒｏｇ１のうち実行中のステップを示す活性情報と、制御プログラムＰｒｏｇ１の変更部分を特定するための差分情報とを含む。
【００２８】
図５の説明に戻る。バックアップ処理＃１が完了すると、書換え制御部１４は、ステップＳ１０２で受信した差分情報に基づいて、制御プログラムＰｒｏｇ１の実行中書換え＃１を実行する（ステップＳ１０４）。ステップＳ１０４の実行中書換え＃１によって、実行部１２が実行する制御プログラムＰｒｏｇ１は、第１版から第２版に書換えられる。実行中書換え＃１が終わると、書換え制御部１４は、実行中書換え＃１が完了したことを通知する完了通知を編集装置３に送信する（ステップＳ１０５）。
【００２９】
編集装置３の編集部３２は、完了通知を受信すると、制御プログラムを読み込んで表示し、表示した制御プログラムに対するユーザの操作を受け付ける。編集部３２は、ユーザの操作に従って、制御プログラムＰｒｏｇ１の第２版を編集して第３版を生成する（ステップＳ１０６）。制御プログラムＰｒｏｇ１の編集が終わると、編集部３２は、制御装置１に実行中書換え指示と、制御プログラムＰｒｏｇ１の第２版と第３版との差分を示す差分情報とを送信する（ステップＳ１０７）。
【００３０】
編集装置３が送信した実行中書換え指示および差分情報を通信部１３が受信すると、制御装置１の書換え制御部１４は、制御プログラムＰｒｏｇ１を書換える前に、バックアップ処理＃２を実行する（ステップＳ１０８）。具体的には、書換え制御部１４は、実行中書換え指示を受信する毎に、バックアップ情報を複数のバックアップ情報のそれぞれの順序を示す順序情報と共に第２記憶部１５に記憶する。このとき、書換え制御部１４は、バックアップ処理＃１において第２記憶部１５に記憶したバックアップ情報を上書きすることなく、バックアップ処理＃１のバックアップ情報を残したまま、バックアップ処理＃２のバックアップ情報を追加で記憶する。
【００３１】
バックアップ処理＃２が完了した後、書換え制御部１４は、ステップＳ１０７で受信した差分情報に基づいて、制御プログラムＰｒｏｇ１の実行中書換え＃２を行う（ステップＳ１０９）。ステップＳ１０９の実行中書換え＃２によって、実行部１２が実行する制御プログラムＰｒｏｇ１は、第２版から第３版に書換えられる。実行中書換え＃２が終わると、書換え制御部１４は、実行中書換え＃２が完了したことを通知する完了通知を編集装置３に送信する（ステップＳ１１０）。
【００３２】
図９は、図５に示した書換え動作中に第１記憶部１１および第２記憶部１５に記憶される情報の具体例を示す図である。
【００３３】
制御プログラムＰｒｏｇ１を変更する前、制御装置１の第１記憶部１１には、実行中の制御プログラムＰｒｏｇ１がブロック毎に記憶されている。第２記憶部１５に準備された変更前の制御プログラムを退避するエリアには、まだ制御プログラムＰｒｏｇ１が記憶されていない。このとき、バックアップ情報はまだないため、バックアップ情報を記憶する領域には値「０」が記憶されている。
【００３４】
実行中書換え＃１の前に行われるバックアップ処理＃１において、書換え制御部１４は、第１記憶部１１に記憶されている変更前の制御プログラムＰｒｏｇ１のうち、変更された部分のプログラムを含むバックアップ情報を、複数のバックアップ情報のそれぞれの順序を示す順序情報と共に第２記憶部１５に記憶させる。バックアップ情報は、変更前の制御プログラムＰｒｏｇ１と、制御プログラムＰｒｏｇ１の変更部分を特定するための情報である差分情報と、制御プログラムＰｒｏｇ１のうち実行中の部分を示す活性情報とを含む。具体的には、変更前の制御プログラムＰｒｏｇ１は、実行中書換え＃１によって書換えられる部分のプログラムであるブロックＢＬ０プログラムがバックアップ情報として第２記憶部１５に記憶される。差分情報は、図９に示す例では、プログラム名、ブロック名、ステップ名、変更部分のスタートアドレスおよびエンドアドレスである。活性情報は、実行中のステップについては値「１」となり、実行中でない場合に値「０」となる。制御プログラムＰｒｏｇ１、差分情報、および活性情報の他に、バックアップ情報には、変更前の制御プログラムＰｒｏｇ１の書換え対象部分であるブロックＢＬ０プログラムを記憶した退避エリアの先頭アドレスおよび最終アドレスが含まれる。また順序情報は、それぞれのバックアップ情報の順序を示す情報であれば内容を問わない。順序情報は、それぞれのバックアップ情報の日付情報、管理番号などである。またバックアップ情報が生成された順に、予めバックアップ情報を記憶する領域を決めておいてもよい。この場合、それぞれのバックアップ情報が記憶された領域自体が順序情報となる。
【００３５】
具体的には、図９に示す例では、実行中書換え＃１の前に実行されるバックアップ処理＃１において、書換え制御部１４は、変更前の制御プログラムＰｒｏｇ１のブロックＢＬ０プログラムを第２記憶部１５の退避エリアに記憶させる。書換え制御部１４は、変更前の制御プログラムＰｒｏｇ１のブロックＢＬ０プログラムを記憶した記憶領域のアドレスとして、先頭アドレス「１００００」および最終アドレス「１００５０」を第２記憶部１５に記憶させ、変更部分を示す差分情報として、プログラム名Ｐｒｏｇ１、ブロック名ＢＬ０、ステップ名Ｓ５，Ｓ６を第２記憶部１５に記憶させる。ここで第２記憶部１５の退避エリアに記憶される制御プログラムＰｒｏｇ１は、図４に示す第１版であり、変更部分は含まれておらず、変更部分のスタートアドレス、エンドアドレスはいずれも０のままである。また書換え制御部１４は、バックアップ情報を生成した日付情報として、バックアップ情報を生成した日付である「２０１６１１１５」を記憶する。なお、ここでは日付情報としたが、より細かくバックアップ情報を生成した時点を特定するために、日時情報としてもよい。また、書換え制御部１４は、管理番号の最大値として「１」を第２記憶部１５に書き込む。そして、実行中の制御プログラムＰｒｏｇ１がブロックＢＬ０のステップ０を実行しているため、書換え制御部１４は、ステップ０の値が「１」である活性情報を記憶する。上記のバックアップ情報を記憶した後、書換え制御部１４は、実行中書換え＃１を実行して、第１記憶部１１の実行中の制御プログラムＰｒｏｇ１を記憶する領域である第１記憶部１１に変更後のＢＬ０プログラムを書き込む。
【００３６】
続いて実行中書換え＃２の前に実行されるバックアップ処理＃２では、書換え制御部１４は、変更前の制御プログラムＰｒｏｇ１のブロックＢＬ０プログラムを第２記憶部１５の退避エリアに記憶する。このとき書換え制御部１４は、バックアップ処理＃１によって記憶したブロックＢＬ０プログラムとは異なる記憶領域に変更前のブロックＢＬ０プログラムを記憶する。書換え制御部１４は、変更前の制御プログラムＰｒｏｇ１のブロックＢＬ０プログラムを記憶した記憶領域のアドレスとして、先頭アドレス「１００５０」および最終アドレス「１０１００」を記憶し、変更部分を示す差分情報として、プログラム名Ｐｒｏｇ１、ブロック名ＢＬ０、ステップ名Ｓ７，Ｓ８、および変更部分の個数「１」、スタートアドレス「２０」、エンドアドレス「３１」を記憶する。また書換え制御部１４は、バックアップ情報を生成した日付情報として、バックアップ情報を生成した日付である「２０１６１１１６」を記憶する。また、書換え制御部１４は、管理番号の最大値を「２」に更新する。そして、実行中の制御プログラムＰｒｏｇ１がブロックＢＬ０のステップ１を実行しているため、書換え制御部１４は、ステップ１の値が「１」である活性情報を生成して記憶する。上記のバックアップ情報を記憶した後、書換え制御部１４は、実行中書換え＃２を実行して、第１記憶部１１の実行中の制御プログラムＰｒｏｇ１を記憶する領域である第１記憶部１１に変更後のＢＬ０プログラムを書き込む。
【００３７】
以上説明したように、本発明の実施の形態１によれば、制御装置１が制御プログラムＰｒｏｇ１を実行中に、実行中書換え指示を受信する毎に、バックアップ情報が記憶される。バックアップ情報は、変更前の制御プログラムと、制御プログラムの変更部分を特定するための差分情報と、制御プログラムのうち実行中のステップを示す活性情報とを含む。バックアップ情報は、複数のバックアップ情報のそれぞれの順序を示す順序情報と共に記憶される。このため、制御プログラムＰｒｏｇ１を書換えた後、バックアップ情報を用いて元の状態に戻すロールバック処理を複数回行うことが可能になる。このとき、バックアップ情報には活性情報が含まれているため、ロールバックした後に、制御プログラムＰｒｏｇ１の実行状態も元の状態に戻すことが可能になる。
【００３８】
実施の形態２．
図１０は、本発明の実施の形態２にかかる制御装置１の実行する制御プログラムをロールバックする動作を示すシーケンス図である。本実施の形態２にかかる制御装置１および編集装置３の構成は、実施の形態１と同様であるためここでは説明を省略する。なお、以下に説明するロールバック処理は、実施の形態１において、実行中書換え＃１および実行中書換え＃２が実行された後に行われるとする。このため、ロールバック処理の開始時点では、バックアップ処理＃１およびバックアップ処理＃２によって生成された２つのバックアップ情報が制御装置１の第２記憶部１５に記憶されていることとする。
【００３９】
ユーザが編集装置３の入出力部３３を用いてロールバック機能を選択する（ステップＳ２０１）と、編集部３２は、制御装置１にバックアップ情報を要求するメッセージであるデータ要求を送信する（ステップＳ２０２）。
【００４０】
制御装置１がデータ要求を受信すると、通信部１３を介してロールバック制御部１６に入力される。ロールバック制御部１６は、第２記憶部１５に記憶されたバックアップ情報を取得する（ステップＳ２０３）。第２記憶部１５に複数のバックアップ情報が記憶されている場合、ロールバック制御部１６は、複数のバックアップ情報を取得する。ロールバック制御部１６は、取得したバックアップ情報を編集装置３に送信する（ステップＳ２０４）。
【００４１】
編集装置３の編集部３２は、制御装置１から取得したバックアップ情報を用いて、ロールバック実行画面を表示する（ステップＳ２０５）。
【００４２】
図１１は、本発明の実施の形態２にかかる編集装置３が表示するロールバック機能を選択する機能選択画面４５を示す図である。この機能選択画面４５は、ロールバック実行メニュー４６を含み、図１０のステップＳ２０１では、ユーザがロールバック実行メニュー４６を操作することで、ロールバック機能が選択されて、ステップＳ２０２のデータ要求が送信される。
【００４３】
ロールバック実行メニュー４６を操作した後、制御装置１にバックアップ情報が記憶されていなかった場合、編集部３２は、入出力部３３の表示装置を用いて、ロールバックエラー画面４７を表示する。ロールバックエラー画面４７は、バックアップ情報が制御装置１内に存在しないことを通知するメッセージを含む。
【００４４】
図１２は、図１１に示すロールバック機能を選択する画面からリンクされたロールバック実行画面４８−１を示す図である。図１１に示すロールバック実行メニュー４６を操作した後、制御装置１からバックアップ情報を取得すると、編集部３２は、ロールバック実行画面４８−１を表示する。ロールバック実行画面４８−１は、制御装置１から取得した複数のバックアップ情報と、それぞれのバックアップ情報に含まれる制御プログラムを表示するためのプログラム表示ボタン４９と、ロールバックの実行を指示するためのロールバック実行ボタン５０とを含む。
【００４５】
図１２に示すロールバック実行画面４８−１は、２つのバックアップ情報を含んでいる。各バックアップ情報は、それぞれのバックアップ情報の順序を示す「Ｎｏ．」と、対象の制御プログラムを示す「プログラム名」と、バックアップ情報が生成された「日付」と、書換えによって変更される「変更部分」と、ロールバックしたときに書換えられる制御プログラムの内容を表示するための「プログラム表示」ボタンとを含む。バックアップ情報は、順序を示す数字が大きいほど新しく、最新のバックアップ情報がロールバック対象となる。図１２の例では、２番目のバックアップ情報がロールバック対象である。
【００４６】
図１３は、図１２に示すプログラム表示ボタン４９からリンクされたロールバックプログラム表示画面５１を示す図である。図１２に示すプログラム表示ボタン４９が押下されると、編集部３２は、押下されたプログラム表示ボタン４９に対応する制御プログラムＰｒｏｇ１を表示するロールバックプログラム表示画面５１を表示する。このロールバックプログラム表示画面５１は、対応する制御プログラムが示されており、編集装置３のユーザは、ロールバックプログラム表示画面５１を参照することで、ロールバックした場合に制御プログラムＰｒｏｇ１がどの状態に戻るのかを確認することができる。
【００４７】
図１０の説明に戻る。入出力部３３が図１２に示すロールバック実行画面４８−１のロールバック実行ボタン５０の押下を検知する（ステップＳ２０６）と、入出力部３３は、検知した操作内容を示す操作情報を編集部３２に入力する。編集部３２は、入力された操作情報に基づいて、ロールバック指示を制御装置１に送信する（ステップＳ２０７）。
【００４８】
制御装置１のロールバック制御部１６は、ロールバック指示を受信すると、順序情報に基づいて、最新のバックアップ情報を選択する（ステップＳ２０８）。ロールバック制御部１６は、選択したバックアップ情報を用いて、制御プログラムの書換えを行う（ステップＳ２０９）。ロールバック制御部１６は、選択したバックアップ情報に含まれる活性情報が示すステップから制御プログラムＰｒｏｇ１を実行する（ステップＳ２１０）。この例では、制御プログラムＰｒｏｇ１のブロックＢＬ０のステップ１から制御プログラムＰｒｏｇ１が実行される。ロールバック制御部１６は、ロールバック処理に用いたバックアップ情報を１つ削除する（ステップＳ２１１）。その後、ロールバック制御部１６は、ロールバック完了通知を編集装置３に送信する（ステップＳ２１２）。
【００４９】
編集装置３の編集部３２は、ロールバック完了通知を受信すると、ロールバック実行画面を更新して表示する（ステップＳ２１３）。図１４は、図１２に示すロールバック実行画面３８−１がロールバック実行後に更新されて表示されるロールバック実行画面４８−２を示す図である。ロールバック処理が１回実行されてバックアップ情報が１つ削除されたので、残る１つのバックアップ情報を含むロールバック実行画面４８−２が表示される。
【００５０】
入出力部３３が図１４に示すロールバック実行画面４８−２のロールバック実行ボタン５０の押下を検知する（ステップＳ２１４）と、入出力部３３は、検知した操作内容を示す操作情報を編集部３２に入力する。編集部３２は、入力された操作情報に基づいて、ロールバック指示を制御装置１に送信する（ステップＳ２１５）。
【００５１】
制御装置１のロールバック制御部１６は、ロールバック指示を受信すると、順序情報に基づいて、最新のバックアップ情報を選択する（ステップＳ２１６）。ロールバック制御部１６は、選択したバックアップ情報を用いて、制御プログラムの書換えを行う（ステップＳ２１７）。ロールバック制御部１６は、選択したバックアップ情報に含まれる活性情報が示すステップから制御プログラムＰｒｏｇ１を実行する（ステップＳ２１８）。この例では、制御プログラムＰｒｏｇ１のブロックＢＬ０のステップ０から制御プログラムＰｒｏｇ１が実行される。ロールバック制御部１６は、ロールバック処理に用いたバックアップ情報を１つ削除する（ステップＳ２１９）。その後、ロールバック制御部１６は、ロールバック完了通知を編集装置３に送信する（ステップＳ２２０）。
【００５２】
図１５は、図１０に示したロールバック動作中に第１記憶部１１および第２記憶部１５に記憶されている情報の具体例を示す図である。
【００５３】
図１０に示す動作を開始する時点では、第１記憶部１１および第２記憶部１５に記憶されている情報は、図９の「実行中書換え＃２」の状態である。図１０のステップＳ２１１において、ロールバック制御部１６がバックアップ情報を１つ削除すると、図１５のロールバック＃２に示すように、管理番号２のバックアップ情報が削除されて、管理番号の最大値が「１」に更新される。その後、ステップＳ２１９において、ロールバック制御部１６がバックアップ情報をさらに１つ削除すると、図１５のロールバック＃１に示すように、管理番号１のバックアップ情報が削除されて、管理番号の最大値も削除される。
【００５４】
図１６は、図１０に示す動作においてロールバック処理の実行エラーが発生する条件を示す図である。制御装置１が実行する制御プログラムは切り替えられる場合がある。実行中の制御プログラムが切り替えられた場合、本実施の形態２においては、異なる制御プログラムへのロールバックが指示された場合、エラー処理としてロールバックを行わない。具体的には、図１６に示すように、制御プログラムＰｒｏｇ１の第１版のブロックＢＬ０を実行中であり、その後実行中書換えを行って、制御プログラムＰｒｏｇ１の第２版のブロックＢＬ０に書換えたとする。この場合、実行中の制御プログラムＰｒｏｇ１を第２版から第１版にロールバックすることが可能である。
【００５５】
実行中の制御プログラムがＰｒｏｇ１の第２版から制御プログラムＰｒｏｇ２の第１版に切り替えられた場合、この状態で制御プログラムＰｒｏｇ１のロールバック実行ボタンが押下されても、ロールバック対象の制御プログラムと実行中の制御プログラムとが異なる場合、エラー処理が行われてロールバック処理は実行されない。制御プログラムＰｒｏｇ２の第１版のブロックＢＬ０を実行中に実行中書換えが行われて、制御プログラムＰｒｏｇ２の第２版に書換えられた場合、ロールバック処理によって制御プログラムＰｒｏｇ２の第１版にロールバックすることは可能である。しかしながら、制御プログラムＰｒｏｇ２の第２版を実行中に制御プログラムＰｒｏｇ１のロールバック実行ボタンが押下されても、ロールバック処理は実行されない。
【００５６】
図１７は、図１０のロールバック処理を行う際に制御装置１が実行する動作を示すフローチャートである。制御装置１のロールバック制御部１６は、編集装置３からロールバック指示を受信する（ステップＳ３０１）。ロールバック制御部１６は、ロールバック対象の制御プログラムと実行部１２が実行中の制御プログラムとを比較して、ロールバック対象の制御プログラムは実行中の制御プログラムであるか否かを判断する（ステップＳ３０２）。ロールバック対象の制御プログラムが実行中の制御プログラムである場合（ステップＳ３０２：Ｙｅｓ）、ロールバック制御部１６は、ロールバックを実行する（ステップＳ３０３）。ロールバック対象の制御プログラムが実行中の制御プログラムでない場合（ステップＳ３０２：Ｎｏ）、ロールバック制御部１６は、エラー処理を行う（ステップＳ３０４）。エラー処理の内容は、例えばエラーメッセージを表示することであり、ロールバック処理は実行されない。
【００５７】
図１８は、本発明の実施の形態１および２の効果の一例を示す図である。本発明の実施の形態１では、バックアップ情報が制御装置１の内蔵する第２記憶部１５に記憶される。そして、実施の形態２では、ロールバックを行う際に、編集装置３は、制御装置１からバックアップ情報を取得して表示し、ロールバック指示ボタンが押下されると、ロールバック指示が制御装置１に送信される。このため、制御プログラムの編集を行った編集装置３と、ロールバック指示を出力する編集装置３とは同一の装置でなくてもよい。例えば図１８に示すように、制御装置＃１の制御プログラムを編集していた編集装置＃１が他の用途で使用中であって、制御装置＃１にロールバック指示を出力することができない状態において、制御装置＃１の制御プログラムをロールバックする必要が生じた場合、編集装置＃３が制御装置＃１にロールバック指示を送信することができる。
【００５８】
以上説明したように、本発明の実施の形態２によれば、ロールバック制御部１６は、ロールバック指示を受信する毎に、複数のバックアップ情報から順序情報に基づいて選択したバックアップ情報を用いて、第１記憶部１１に記憶された制御プログラムを書換えると共に、選択したバックアップ情報に含まれる活性情報が示すステップから制御プログラムの実行を開始するように実行部１２に指示する。この構成により、ロールバック指示を受信する毎に、１つずつ制御プログラムを元の状態に戻して複数回のロールバックを実現することが可能になる。このとき、活性情報が示す部分から制御プログラムが実行されるため、実行状態まで書換え前の状態に戻すことが可能になる。
【００５９】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【００６０】
１  制御装置、２  被制御装置、３  編集装置、１１  第１記憶部、１２  実行部、１３  通信部、１４  書換え制御部、１５  第２記憶部、１６  ロールバック制御部、３１  通信部、３２  編集部、３３  入出力部、３４  記憶部、４０  実行中書換え指示画面、４２  ロールバック機能選択画面、４３  確認画面、４５  機能選択画面、４６  ロールバック実行メニュー、４７  ロールバックエラー画面、４８−１，４８−２  ロールバック実行画面、４９  プログラム表示ボタン、５０  ロールバック実行ボタン、９２  処理回路、９３  メモリ、９４  プロセッサ。
【要約】
制御装置（１）は、ステップおよびトランジションの情報を含む制御プログラムを記憶する第１記憶部（１１）と、第２記憶部（１５）と、第１記憶部（１１）に記憶された制御プログラムを実行して被制御装置（２）を制御する実行部（１２）と、制御プログラムを実行中に、第１記憶部（１１）に記憶された制御プログラムを書換える実行中書換え指示と、制御プログラムの変更部分を示す差分情報とを受信する通信部（１３）と、実行中書換え指示を受信する毎に、書換え前の制御プログラムと、差分情報と、制御プログラムのうち実行中のステップを示す活性情報とを含むバックアップ情報を、複数のバックアップ情報のそれぞれの順序を示す順序情報と共に第２記憶部（１５）に記憶させ、差分情報に基づいて制御プログラムを書換える書換え制御部（１４）と、を備えることを特徴とする。【図１】
0006305667.tif 000002
【図２】
0006305667.tif 000003
【図３】
0006305667.tif 000004
【図４】
0006305667.tif 000005
【図５】
0006305667.tif 000006
【図６】
0006305667.tif 000007
【図７】
0006305667.tif 000008
【図８】
0006305667.tif 000009
【図９】
0006305667.tif 000010
【図１０】
0006305667.tif 000011
【図１１】
0006305667.tif 000012
【図１２】
0006305667.tif 000013
【図１３】
0006305667.tif 000014
【図１４】
0006305667.tif 000015
【図１５】
0006305667.tif 000016
【図１６】
0006305667.tif 000017
【図１７】
0006305667.tif 000018
【図１８】
0006305667.tif 000019