(57)【特許請求の範囲】
【請求項１】
支援装置とプログラマブルコントローラを有するプログラマブルコントローラシステムであって、
前記支援装置は、
ユーザに前記プログラマブルコントローラ用のプログラムを任意に作成させる手段であって、既存のプログラムを編集させることで該プログラムの更新版を作成させるプログラム作成支援手段と、
該更新版のプログラムをコンパイルして機械語オブジェクトを生成するコンパイル手段と、
前記コンパイル手段によって前記機械語オブジェクトが生成される毎に、対応する一意の識別情報を生成すると共に、該生成した識別情報を前記プログラムに係る識別情報記憶部に追加登録する識別情報生成・登録手段と、
ダウンロード許可される場合には、前記更新版のプログラムと対応する前記識別情報とを前記プログラマブルコントローラにダウンロードするダウンロード手段とを有し、
前記コンパイル手段は、前記機械語オブジェクト生成の際に、少なくとも既存変数のアドレスを維持する制約条件を守るように、変数のアドレス割当てを行い、
前記ダウンロード手段は、前記プログラマブルコントローラの前記プログラム記憶手段に記憶されるプログラムと、前記ダウンロード対象となる前記更新版のプログラムとの差分を抽出して一覧表示して、該差分の全部または一部をユーザに選択させて、該選択部分のみを前記プログラマブルコントローラにダウンロードし、
前記プログラマブルコントローラは、
前記プログラマブルコントローラ用のプログラムを記憶するプログラム記憶手段と、
識別情報を記憶する識別情報記憶手段と、
前記ダウンロード手段によってダウンロードされた前記更新版のプログラムと対応する前記識別情報とによって、前記プログラム記憶手段と前記識別情報記憶手段の記憶内容を更新する管理手段とを有し、
前記支援装置の前記ダウンロード手段は、前記識別情報記憶手段に記憶されている識別情報を取得して、該識別情報が前記識別情報記憶部に登録されている場合にはダウンロード許可されると判定することを特徴とするプログラマブルコントローラシステム。
【請求項２】
前記識別情報は、該生成元の支援装置だけでなく他の支援装置であってもこれと同一の識別情報が生成されることはない一意な識別情報であることを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項３】
前記識別情報は、現在日時情報と前記プログラムの識別情報と前記支援装置の識別情報とを用いて生成されることを特徴とする請求項２記載のプログラマブルコントローラシステム。
【請求項４】
識別情報生成・登録手段は、前記生成した識別情報に対応する世代情報を生成して、該識別情報に該世代情報を対応付けて前記識別情報記憶部に追加登録することを特徴とする請求項１〜３の何れかに記載のプログラマブルコントローラシステム。
【請求項５】
支援装置とプログラマブルコントローラを有するプログラマブルコントローラシステムの該支援装置であって、
ユーザに前記プログラマブルコントローラ用のプログラムを任意に作成させる手段であって、既存のプログラムを編集させることで該プログラムの更新版を作成させるプログラム作成支援手段と、
該更新版のプログラムをコンパイルして機械語オブジェクトを生成するコンパイル手段と、
前記コンパイル手段によって前記機械語オブジェクトが生成される毎に、対応する一意の識別情報を生成すると共に、該生成した識別情報を前記プログラムに係る識別情報記憶部に追加登録する識別情報生成・登録手段と、
ダウンロード許可される場合には、前記更新版のプログラムと対応する前記識別情報とを前記プログラマブルコントローラにダウンロードするダウンロード手段とを有し、
前記ダウンロード手段は、前記プログラマブルコントローラに記憶されている、該プログラマブルコントローラが保持・実行しているプログラムに対応する識別情報を取得して、該取得した識別情報が前記識別情報記憶部に登録されている場合にはダウンロード許可されると判定し、
前記コンパイル手段は、前記機械語オブジェクト生成の際に、少なくとも既存変数のアドレスを維持する制約条件を守るように、変数のアドレス割当てを行い、
前記ダウンロード手段は、前記プログラマブルコントローラの前記プログラム記憶手段に記憶されるプログラムと、前記ダウンロード対象となる前記更新版のプログラムとの差分を抽出して一覧表示して、該差分の全部または一部をユーザに選択させて、該選択部分のみを前記プログラマブルコントローラにダウンロードすることを特徴とするプログラマブルコントローラの支援装置。
【請求項６】
支援装置とプログラマブルコントローラを有するプログラマブルコントローラシステムの該支援装置のコンピュータを、
ユーザに前記プログラマブルコントローラ用のプログラムを任意に作成させる手段であって、既存のプログラムを編集させることで該プログラムの更新版を作成させるプログラム作成支援手段と、
該更新版のプログラムをコンパイルして機械語オブジェクトを生成し、該機械語オブジェクト生成の際に、少なくとも既存変数のアドレスを維持する制約条件を守るように、変数のアドレス割当てを行うコンパイル手段と、
前記コンパイル手段によって前記機械語オブジェクトが生成される毎に、対応する一意の識別情報を生成すると共に、該生成した識別情報を前記プログラムに係る識別情報記憶部に追加登録する識別情報生成・登録手段と、
ダウンロード許可される場合には前記更新版のプログラムと対応する前記識別情報とを前記プログラマブルコントローラにダウンロードする手段であって、前記プログラマブルコントローラに記憶されている、該プログラマブルコントローラが保持・実行しているプログラムに対応する識別情報を取得して、該取得した識別情報が前記識別情報記憶部に登録されている場合にはダウンロード許可されると判定し、前記プログラマブルコントローラの前記プログラム記憶手段に記憶されるプログラムと、前記ダウンロード対象となる前記更新版のプログラムとの差分を抽出して一覧表示して、該差分の全部または一部をユーザに選択させて、該選択部分のみを前記プログラマブルコントローラにダウンロードするダウンロード手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、稼働中のプログラマブルコントローラの動作を停止しないでプログラム更新を行える支援装置等に関する。
【背景技術】
【０００２】
プログラマブルコントローラ（ＰＬＣ）に関して、一旦、稼働を開始したら、例えば基本的に定期点検時等以外は停止できない状況で運用されている場合がある。一方、ＰＬＣのプログラムは、例えばバージョンアップ等の理由で変更する必要が生じるケースが少なくない。この為、従来、支援装置等を用いて、ＰＬＣを稼働中でもそのプログラムを変更できるようにしていた。
【０００３】
ＰＬＣが稼働中に、ユーザが支援装置を利用して、ＰＬＣで動作しているプログラムを変更する場合、安全性のために、支援装置が、下記の手順でのみＰＬＣのプログラム変更を行えるようにしている。
【０００４】
まず、ＰＬＣのプログラム変更は、支援装置からのオンライン更新によってのみ行える。オンライン更新する場合には、まず、支援装置をＰＬＣに接続する。また、基本的には、支援装置側で保持しているプログラムに対してユーザが何らかの編集（修正／変更など）を行うことで、新規プログラム（更新版プログラム）が作成され、この新規プログラムをＰＬＣにダウンロードすることで、ＰＬＣプログラムのオンライン更新が成されることになる。
【０００５】
（ａ）支援措置は、ユーザによるプログラムの変更が開始される前に、変更対象になるプログラムとＰＬＣで動作しているプログラムとが一致していることを確認する処理を実行する（認証ステップ）。
【０００６】
（ｂ）支援装置は、両プログラムが一致した場合のみ、プログラムの変更（更新）及び更新版プログラムのＰＬＣへのダウンロードを許可する。これより、上記プログラム一致確認後、ユーザがプログラムの変更を実施し、支援装置は、更新版（バージョンアップ版等）のプログラムをコンパイルして機械語オブジェクトに変換してＰＬＣに送信する。
【０００７】
尚、当然、（プログラム不一致により）上記認証ステップによる認証が失敗した状態でユーザがプログラムを変更した場合には、更新版プログラムはＰＬＣに転送されない（ダウンロードが許可されないので）。
【０００８】
（ｃ）ＰＬＣは、上記機械語オブジェクトを受信後、現在動作している機械語オブジェクトから受信した機械語オブジェクトに切り替えてプログラムを実行する。これは、例えば、実行中のプログラムのスキャンエンドに同期して、プログラムを更新／切換え等する。
【０００９】
しかし、上記の従来手法では、ユーザが変更した内容が即、稼働中のＰＬＣに反映されるため、ユーザのプログラム記述に間違えがある場合、システムに重大な被害を与える可能性がある。この為、上記更新版プログラムについて、別環境（実システムとは別の検証用システム）で動作確認／動作検証を行って、この検証で不具合がないことを確認したうえで実システムに反映させるというのが実状であった。
【００１０】
しかしながら、別環境で正常動作することが確認された更新版プログラムを、そのまま上記支援装置からＰＬＣにダウンロードすることはできない。上記の通り、支援装置は、当該支援装置上で上記一致確認されたプログラムに対して、編集／変更作業が行われて成る更新版プログラムのみ、ＰＬＣへのダウンロードを許可する仕組みであるからである。
【００１１】
この為、ユーザは、別環境で動作を確認した更新版プログラムを稼働中のＰＬＣに反映させるため、上記別環境で検証済みの更新版プログラムを支援装置にコピーすると共に、支援装置において、変更前のプログラム（オリジナルプログラム）を開き、上記（ａ）の認証ステップによってＰＬＣのプログラムと照合させて一致確認した状態にした後、手作業で、更新版プログラムの内容を上記オリジナルプログラムにコピーする等していた。これは、例えば、検証済みの更新版プログラムの内容をテキストエディタ等で参照しながら、上記オリジナルプログラムにコピーペーストする等していた。この作業が煩雑であり、作業時間の無駄が発生していた。またこの様に手作業を実施することにより人為的ミスが発生する可能性があった。
【００１２】
また、稼働中のＰＬＣのプログラムを変更するためには、いくつかの制約条件がある。そこで、プログラムに対する変更が制約条件を満足していることを保障するため、支援装置は、プログラムの一致を確認した後、制約条件内の操作しかユーザに許可しないようにしている。すなわち、プログラムの一致を確認した後、ユーザがこのプログラムに対して所望の変更を行うことで更新版のプログラムを作成し、その後コンパイルが実行されるが、ユーザが制約条件外の変更を行った場合、コンパイルは成功しない。
【００１３】
プログラムを一意な識別情報で管理する方法として、例えば特許文献１に記載の従来技術がある。特許文献１には、プログラムの変更に伴って識別情報を更新し、この更新された識別情報を、前回データとして（プログラムをＰＬＣに転送する際）記憶し、さらに、ＰＬＣのメモリに記憶されている識別情報と、自身が記憶した識別情報とを比較し、最終更新者を判別するＰＬＣシステムが開示されている。このようにして他人が作成したプログラムが不用意に上書きされることを抑制している。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００８−２８２３６２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
ここで、上記のようにプログラムに対する変更が制約条件を満足していることが保障される場合であっても、このプログラムをＰＬＣにダウンロードして更新させると、問題が生じる場合がある。
【００１６】
これは、稼働中のＰＬＣに対する変更に適合したプログラムではないことが原因となる。そして、これは、上記プログラムに対する変更が制約条件を満足している場合にも起こり得る。但し、これは、制約条件を満足していることが保障されるはずであったが、実際には制約条件を満足していなかったものと言うこともできる。
【００１７】
換言すれば、上記従来のコンパイラの機能によってコンパイルが成功するようなプログラムであっても、稼働中のＰＬＣに対する変更に適合したプログラムではないということが起こり得る。
【００１８】
また、上記特許文献１の従来技術では、最新のプログラムを管理することは可能であるが、ユーザが、稼働中のＰＬＣに適合しない不適合プログラムを誤ってＰＬＣに転送させるような、人為的ミスを防ぐことは考慮されていない。
【００１９】
本発明の課題は、ＰＬＣに接続した支援装置によりＰＬＣが稼働中でもプログラム更新が可能であるＰＬＣシステムにおいて、稼働中のＰＬＣに対する変更に適合したプログラムであることを確認して更新することができるようにし、以って適合しないプログラムの転送などによる障害発生を確実に防ぐことができるプログラマブルコントローラシステム、その支援装置等を提供することである。
【課題を解決するための手段】
【００２０】
本発明のプログラマブルコントローラシステムは、支援装置とプログラマブルコントローラを有するプログラマブルコントローラシステムであって、前記支援装置は、ユーザに前記プログラマブルコントローラ用のプログラムを任意に作成させる手段であって、既存のプログラムを編集させることで該プログラムの更新版を作成させるプログラム作成支援手段と、該更新版のプログラムをコンパイルして機械語オブジェクトを生成するコンパイル手段と、前記コンパイル手段によるコンパイルが成功して前記機械語オブジェクトが生成される毎に、対応する一意の識別情報を生成すると共に、該生成した識別情報を前記プログラムに係る識別情報記憶部に追加登録する識別情報生成・登録手段と、ダウンロード許可される場合には、前記更新版のプログラムと対応する前記識別情報とを前記プログラマブルコントローラにダウンロードするダウンロード手段とを有し、前記プログラマブルコントローラは、前記プログラマブルコントローラ用のプログラムを記憶するプログラム記憶手段と、識別情報を記憶する識別情報記憶手段と、前記ダウンロード手段によってダウンロードされた前記更新版のプログラムと対応する前記識別情報とによって、前記プログラム記憶手段と前記識別情報記憶手段の記憶内容を更新する管理手段とを有し、前記支援装置の前記ダウンロード手段は、前記識別情報記憶手段に記憶されている識別情報を取得して、該識別情報が前記識別情報記憶部に登録されている場合にはダウンロード許可されると判定する。
そして、前記コンパイル手段は、前記機械語オブジェクト生成の際に、少なくとも既存変数のアドレスを維持する制約条件を守るように、変数のアドレス割当てを行う。
前記ダウンロード手段は、前記プログラマブルコントローラの前記プログラム記憶手段に記憶されるプログラムと、前記ダウンロード対象となる前記更新版のプログラムとの差分を抽出して一覧表示して、該差分の全部または一部をユーザに選択させて、該選択部分のみを前記プログラマブルコントローラにダウンロードする。
【００２１】
例えばプログラムの更新が２系統に別れて、一方の系統の更新版プログラムがプログラマブルコントローラにダウンロードされて運用されている状態で、他方の系統で最新の更新版プログラムが作成された場合、当該他方の系統の識別情報記憶部には、ＰＬＣの識別情報記憶手段に記憶されている識別情報は登録されていないので、これによってダウンロード不許可にできる。この例では、当該他方の系統の更新版プログラムでは、稼働中のＰＬＣに対する変更に適合したプログラムであることは保障されないからである。
【発明の効果】
【００２２】
本発明のプログラマブルコントローラシステム、その支援装置等によれば、ＰＬＣに接続した支援装置によりＰＬＣが稼働中でもプログラム更新が可能であるＰＬＣシステムにおいて、稼働中のＰＬＣに対する変更に適合したプログラムであることを確認して更新することができるようにし、以って適合しないプログラムの転送などによる障害発生を確実に防ぐことができる。
【図面の簡単な説明】
【００２３】
【図１】本例のＰＬＣシステムの構成図である。
【図２】識別情報管理テーブルの一例である。
【図３】制約条件に係る従来の課題と本手法による課題解決について説明する為の図である。
【図４】プログラム編集とコンパイル時の処理フローチャート図である。
【図５】ダウンロード時の処理フローチャート図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照した本発明の実施の形態について説明する。
図１は、本例のＰＬＣ（プログラマブルコントローラ）システムの構成図である。
本システムは、パソコン等のコンピュータ上で動作する支援装置１０が、ＰＬＣ（プログラマブルコントローラ）２０と接続されて、相互にデータ送受信可能な構成となっている。尚、図示は省略するが、ＰＬＣ２０には何らかの制御対象機器が接続されている。
【００２５】
支援装置１０は、ユーザインターフェース機能部１１、コンパイラ部１２、識別情報生成部１３、識別情報管理部１４等の各種機能部を有する。支援装置１０は、不図示のＣＰＵ／ＭＰＵ等の演算プロセッサや、ハードディスク、メモリ等の記憶装置も有しており、記憶装置には予め所定のアプリケーションプログラムが記憶されている。上記各種機能部の後述する処理機能は、上記不図示の演算プロセッサが、このアプリケーションプログラムを読出し・実行することにより実現される。
【００２６】
尚、本説明において単にプログラムと記した場合には、それは基本的にはＰＬＣ用プログラム（制御プログラム）を意味するものとする。
また、支援装置１０は、ディスプレイ画面や入力装置等も有している。
【００２７】
上記ユーザインターフェース機能部１１は、ユーザが所望のＰＬＣ用プログラムを作成するのを支援する機能を有する。この機能自体は、従来からよく知られたものであるので、ここでは特に説明しないが、概略的には、ユーザインターフェース機能部１１は、ディスプレイに不図示の所定の編集用画面を表示して、この編集用画面上でユーザに所望のＰＬＣ用プログラムを作成させる。ユーザは、キーボード、マウス等の入力装置を操作して、任意のプログラムのソースコード１６を作成する。作成されたプログラム・ソースコード１６は、上記不図示の記憶装置等に記憶される。
【００２８】
コンパイラ部１２は、上記ユーザが作成したソースコード１６を、ターゲット（ＰＬＣ２０）上で動作する機械語オブジェクト１７に変換する。コンパイラ部１２は、この変換（コンパイル）の際に各変数に対するアドレス割当てを行うが、例えば後述する「既存変数のアドレスを固定する」という制約条件を満足すると見做せるようなアドレス割当てを行う。もし、この様な制約条件を満足することができない場合には、コンパイル失敗となる。
【００２９】
上記機械語オブジェクト１７は、通信機能部１５によってＰＬＣ２０にダウンロードされる。但し、その前に、従来で説明したように、別環境（実システムとは別の検証用システム）で更新版プログラムの動作確認／動作検証を行って、検証ＯＫである場合に更新版プログラム（その機械語オブジェクト１７）をＰＬＣ２０にダウンロードすることが望ましい。本手法では、従来のような変更対象になるプログラムとＰＬＣのプログラムとが一致していることを確認する処理（認証ステップ）が無いので、問題なくダウンロードできる。
【００３０】
上記ＰＬＣ用プログラムの作成は、基本的には、既存のプログラムの更新版（バージョンアップ版等）を作成するものである。この様な場合、ユーザは、上記ユーザインターフェース機能部１１の機能により、上記記憶されているソースコード１６のファイルを開いて、所望の変更を行う。この様な、変更／更新版のプログラムは、上記コンパイラ部１２でコンパイルされて機械語オブジェクト１７に変換されて（例えば別環境での動作確認／動作検証を行った後）上記通信機能部１５によって不図示の通信線を介してＰＬＣ２０にダウンロードされる。
【００３１】
ここまで説明した処理機能は、従来より存在する支援装置の既存の処理機能と略同様と見做しても構わない（但し、上記の通り、プログラムの一致する処理（認証ステップ）が無くなっている）。本手法による支援装置１０では、更に下記の処理機能を有する。
【００３２】
まず、上記コンパイル部１２は、コンパイルが成功する毎に、識別情報生成部１３の機能を利用して、一意になるデータとしての識別情報１８を生成させる。この識別情報１８は、識別情報管理部１４で管理する。識別情報１８は、例えば後述する識別情報管理テーブル３０に格納され管理される。また、上記通信機能部１５は、上記機械語オブジェクト１７をＰＬＣ２０にダウンロードする際、これに対応して生成された識別情報１８を付してダウンロードする。
【００３３】
ここで、上記一意になるデータとは、本支援装置１０内に限ったものではなく、他の全ての支援装置１０も含めた話である。例えば、仮に、支援装置Ａ、支援装置Ｂ、支援装置Ｃの３台の支援装置１０があった場合、支援装置Ａにおいてある時点で作成された識別情報１８を仮に識別情報αとするならば、その後もこの支援装置Ａにおいてコンパイル成功毎に識別情報１８が生成されるが、識別情報αが生成されることはない。更に、本手法では、支援装置Ｂと支援装置Ｃにおいても、識別情報αが生成されることはない。これは、上記“ある時点”以降という意味ではなく、“ある時点”以前であっても識別情報αが生成されることはない。
【００３４】
この様な識別情報１８の生成処理については、後に具体例を挙げて説明するが、識別情報生成部１３は、例えば、日付、時刻、ＰＣ固有の情報などを用いて、一意になる情報を生成する。
【００３５】
識別情報管理部１４は、識別情報生成部１３が生成した識別情報１８の世代管理を行う。例えば、図２に示す識別情報管理テーブル３０で識別情報１８を管理する。
図２に示す識別情報管理テーブル３０は、世代３１と識別情報３２より成る。
【００３６】
識別情報３２には、上記識別情報生成部１３で生成された識別情報１８が格納される。世代３１は、新たな識別情報１８が識別情報３２に格納される毎に、当該識別情報３２に対して割当てられる世代管理用の番号であり、本例では図示のように、初期値を‘１’とし、新規レコード追加毎に＋１インクリメントされるものとする。
【００３７】
ここで、上記“コンパイル成功する毎に識別情報１８を生成”とは、“新たなプログラム（更新版）作成毎に識別情報１８を生成”を意味するものと見做してもよい。この場合、図２において世代３１の番号が最も小さい（‘１’の）識別情報３２が、最も古い（初版の）プログラムに対応して生成された識別情報１８であり、世代３１の番号が最も大きい（‘３’の）識別情報３２が、最新版のプログラムに対応して生成された識別情報１８を意味することになる。そして、仮に図２に示す状態で新たな識別情報１８が生成されて識別情報管理テーブル３０に格納される場合には、その世代３１の番号は‘４’となることになる。
【００３８】
また、図１のＰＬＣ２０の構成について簡単に説明するならば、ＰＬＣ２０は通信機能部２１、プログラム実行管理機能部２２等の各種機能部を有する。ここで、ＰＬＣ２０は、不図示のＣＰＵ／ＭＰＵ等の演算プロセッサや、メモリ等の不図示の記憶装置も有しており、記憶装置には予め所定のアプリケーションプログラムが記憶されている。上記各種機能部の後述する処理機能は、上記不図示の演算プロセッサが、このアプリケーションプログラムを読出し・実行することにより実現される。
【００３９】
また、上記不図示の記憶装置には、識別情報２３や機械語オブジェクト２４等が記憶される。ＰＬＣ２０は、機械語オブジェクト２４を実行することで、例えば不図示の制御対象機器の制御等を行う。また、本例では、機械語オブジェクト２４の更新は、ＰＬＣ２０を停止することなく稼働中に行うことを前提とする。
【００４０】
通信機能部２１は、上記支援装置１０と上記不図示の通信線を介してデータ送受信等を行う機能部であり、特に上記通信機能部１５から上記識別情報１８付きの機械語オブジェクト１７がダウンロードされてくると、この識別情報１８を新たな識別情報２３として上書き記憶すると共に、この機械語オブジェクト１７を新たな機械語オブジェクト２４として上記不図示の記憶装置等に記憶する。但し、機械語オブジェクトは上書き記憶ではなく、従って少なくともこの段階では既存の機械語オブジェクト２４はそのまま残っている。運用中であるので既存の機械語オブジェクト２４は実行中であり、その後、所定のタイミングで新たな機械語オブジェクト２４の実行に切り換える。尚、この様な機械語オブジェクト２４の実行の新旧切換えを含めた機械語オブジェクト２４の実行管理は、上記プログラム実行管理機能部２２が行う。既存の機械語オブジェクト２４は、新旧切換えが完了したら削除するようにしてもよい。
【００４１】
ここで、ＰＬＣ２０が稼働中にそのプログラム（機械語オブジェクト２４）の変更を実施するためには、既に述べたように制約条件が存在する。制約条件の一つに「既存変数のアドレスを固定（維持）する」がある。そのため、既存変数のアドレスを固定にするためのコンパイル指定が継続している必要がある。
【００４２】
図３は、この様な制約条件に係る従来の課題と本手法による課題解決について説明する為の図である。
但し、ここでは、図３の説明を行う前に、上記「既存変数のアドレスを固定（維持）する」条件を満たすためのコンパイラ１２の機能について説明する。
【００４３】
これは、例えば本出願人による先願（特願２０１１−１００９９１号）で提案した機能をコンパイラ１２に備えさせればよいが、この例に限らず、例えば当該先願において背景技術として説明した従来技術を用いても良い。ここでは、この従来技術について説明する。
【００４４】
上記先願の背景技術に記載の通り、ＰＬＣが稼動中にそのプログラムを変更する場合は（プログラムのバージョンアップ等）、既に割り付けた変数（既存の変数というものとする）のアドレスを変更することができない（変数の割当位置が変化すると、変更前と変更後とで変数の値がプログラムで正常に扱えないため、誤動作する。；変数のアドレスが変更されることにより、アドレスの変更前と変更後とでデータを引き継ぐことができない）。
【００４５】
そのため、従来技術では、変数を追加しても既存の変数のアドレスが変更されないようにするために予備領域を設けておき、追加した変数（追加変数というものとする）をこの予備領域に割り付けるようにしている。予備領域に追加変数を割り付けることにより、既に割り付けた変数（既存の変数）の割当位置を変更しないで、変数の追加が可能になる。勿論、既存の変数の割当位置（アドレス）は記録しておく必要がある。
【００４６】
例えば初版プログラムでは変数Ａ、変数Ｂがあり、変数Ａは１０００番地、変数Ｂは１００１番地を割当てたとした場合、これら変数の割当位置（アドレス）を記憶しておく。また、予備領域として例えば１００２番地、１００３番地を確保しておく。
【００４７】
その後、ユーザが上記初版プログラムを変更等して作成した第２版プログラムでは、新たな変数Ｃが追加されたとする。この場合、コンパイラは、まず各変数が記憶されているか否かを判定し、この例では変数Ａ，変数Ｂは記憶されているが、変数Ｃは記憶されていない。よって、変数Ａ，変数Ｂは記憶内容に従って１０００番地、１００１番地を割当て、変数Ｃは上記予備領域（例えば１００２番地）を割当てる。
【００４８】
あるいは、上記第２版プログラムが、仮に上記変数Ｃの追加だけでなく、変数Ｂの削除が行われたものとする。この場合、変数Ａは記憶されているが、変数Ｃは記憶されていない。よって、変数Ａは記憶内容に従って１０００番地を割当て、変数Ｃは上記予備領域（例えば１００２番地）を割当てる。
【００４９】
但し、ユーザが、予備領域の数を越えるような変数の追加を伴うプログラムの変更を実施すると、既存の変数のアドレス（割当位置）を変更する必要があり、既存変数のアドレスが変更されると上記の通り正常なデータ引き継ぎができなくなる。この為、ＰＬＣの動作を継続しながらプログラムを変更すること（オンライン変更）はできなくなる。
【００５０】
これに対して、先願では予備領域では足りないような変数の追加があった場合でも対応可能とするものであり、上記「既存変数のアドレスを固定（維持）する」条件を満たすための機能自体は上記従来技術と略同様であってよいので、よって、ここでは特に先願については説明しない。
【００５１】
図３において、まず、識別情報管理テーブル３０の具体例について説明する。この例では、識別情報３２は、簡単の為、ＤＩＤ１、ＤＩＤ２、・・・ＤＩＤ１０等としている。また、ＤＩＤ１が第１世代（世代３１が‘１’）、ＤＩＤ２が第２世代、ＤＩＤ１０が第１０世代であり、この時点ではＤＩＤ１０が最新版のプログラムに対応する識別情報となっている。尚、以下、例えばＤＩＤ１０に対応するプログラムは、プログラムＤＩＤ１０等と記す場合があるものとする。
【００５２】
そして、例えば、初版のプログラムＤＩＤ１は、変数Ａ，変数Ｂを有しており、コンパイラ部１２によるコンパイルの際にこれら各変数に任意のアドレス（１０００番地、１００１番地）が割当てられたものとする。これより、図示のように、ＰＬＣ２０側において、変数Ａは１０００番地、変数Ｂには１００１番地が割り付けられる。
【００５３】
その後、プログラムＤＩＤ１をベースにしてプログラムＤＩＤ２を作成し、更にその後、プログラムＤＩＤ２をベースにしてプログラムＤＩＤ３を作成するというようにして、世代更新を１０世代目のプログラムＤＩＤ１０まで重ねたとする。更に、何れに世代でも上記変数Ａ，Ｂに関しては変更はなかったものとする。この場合、コンパイラ部１２は、プログラムＤＩＤ２〜プログラムＤＩＤ１０までの全てに関して、そのコンパイルの際に上記初版のプログラムＤＩＤ１と同じく、変数Ａには１０００番地、変数Ｂには１００１番地を割当てるようにする。これは、上記制約条件の１つである「既存変数のアドレスを固定（維持）する」を満たすようにするための処理である。
【００５４】
尚、当然、変数のアドレスを再配置するコンパイルを実施する場合には、変数のアドレス固定では無くなるため、制約条件が満足されない。例えば、変数Ａに１００１番地、変数Ｂには１０００番地が割当てられた場合、例えば変数Ａの現在値を読み出すはずが、実際には変数Ｂの現在値を読み出して、これに基づいて値を更新することになるので、正常な動作とならない可能性が高い。
【００５５】
一方、コンパイラ部１２が上記制約条件の１つである「既存変数のアドレスを固定（維持）する」を満たすようにする処理を行うことで、変数のアドレス固定が継続される場合であっても、バックアップなどでプログラムをコピーした場合、別々にユーザがプログラム変更する可能性が存在する。
【００５６】
すなわち、上記の状況において、あるユーザＡがプログラムＤＩＤ１０をベースにして新たな更新版プログラム（プログラムＤＩＤ１１とする）を作成したが、例えば同時期に別のユーザがプログラムＤＩＤ１０をコピーして、このプログラムＤＩＤ１０のコピーをベースにして新たな更新版プログラム（プログラムＤＩＤ１２とする）を作成したものとする。つまり、プログラムＤＩＤ１０までは１系統の更新であったが、２系統に分かれたものとする。
【００５７】
この場合、ＰＬＣが稼動中に安全にプログラムの変更を実施するためには、プログラムの最新の管理ではなく、制約条件の継続性の検査が重要になる。
すなわち、例えば図３に示すように、プログラムＤＩＤ１１では新たな変数Ｃが追加され、プログラムＤＩＤ１２では別の新たな変数Ｄが追加されたものとする。そして、プログラムＤＩＤ１１の方が先にコンパイルされてＰＬＣ２０にダウンロードされたものとする。
【００５８】
この場合、各変数のアドレス割当ては、変数Ａ，Ｂは固定（維持／継続）であるので上記の通り１０００番地、１００１番地となるが、変数Ｃは新たに割当てられることになり例えば１００２番地が割当てられることになる。そして、この様な変数割り当てが成された機械語オブジェクト１７がＰＬＣ２０にダウンロードされて稼働中に新旧切換えて実行されることになる。
【００５９】
その後、プログラムＤＩＤ１２をコンパイルすると、変数のアドレス割当ては、変数Ａ，Ｂは当然１０００番地、１００１番地となり、変数Ｄは例えば１００２番地が割当てられることになる。しかしながら、既に、ＰＬＣ２０側では１００２番地には変数Ｃが割当てられて稼働しているので、プログラムＤＩＤ１２の機械語オブジェクトをＰＬＣ２０に転送して切換えさせると、正常に引き継がれず、正常に動作しない可能性が高いことになる。
【００６０】
あるいは、例えば、プログラムＤＩＤ１１では変数Ｃ、変数Ｄがこの順番で追加されてコンパイルした結果、例えば変数Ｃは1002番地、変数Ｄは1003番地に割り付けられたものとする。このプログラムをＰＬＣ２０に転送して切換えさせた後に、プログラムＤＩＤ１２のコンパイルとＰＬＣ２０へのダウンロードが行われたとする。例えば、プログラムＤＩＤ１２では変数Ｄ→変数Ｃの順番で追加されたとする。これをコンパイラ部１２でコンパイルした結果、例えば変数Ｃは1003番地、変数Ｄは1002番地に割り付けられたものとする。よって、この様なプログラムＤＩＤ１２（その機械語）をＰＬＣ２０に転送して稼働中に切換えさせた場合も、正常に継続されず、ＰＬＣ２０が正常に動作しない可能性が高いことになる。
【００６１】
上述したように、プログラムをコピーしただけであれば制約条件が満たされるが、その後、別々に変更すると制約条件の満たされなくなる（継続性がなくなる）可能性がある。換言すれば、プログラムのコンパイル成功した場合でも、つまり制約条件を満足していると見做される場合であっても、そのプログラムが稼働中のＰＬＣ２０に対する変更に適合したプログラムであることが保障されるわけではない。稼働中のＰＬＣ２０に対する変更に適合したプログラムであることが保障されない場合、ＰＬＣ２０が正常に動作しない可能性があるので、プログラムＤＩＤ１２（その機械語）をＰＬＣ２０にダウンロードできないようにする必要ある。
【００６２】
その為に、本手法では、上記識別情報１８を生成すると共に、テーブル３０に記憶して世代管理している。そして、これらの情報を利用して例えば後述するフローチャート図の処理を行うことで、例えば上記の例の場合、プログラムＤＩＤ１２（その機械語）をＰＬＣ２０にダウンロードできないようにすることができる。
【００６３】
このフローチャート図については後に説明するものとし、ここでは図３を参照して概略的に説明する。
まず、上記コンパイラ部１２によるプログラムＤＩＤ１１のコンパイル完了時、ＰＬＣ２０の状態は、上記機械語オブジェクト２４としてプログラムＤＩＤ１０（その機械語）を記憶・実行しており、上記識別情報２３として‘ＤＩＤ１０’が記憶されている。一方、支援装置１０の状態は、上記テーブル３０に、ＤＩＤ１、ＤＩＤ２、・・・ＤＩＤ９、ＤＩＤ１０、ＤＩＤ１１が記憶されている。この状態においてプログラムＤＩＤ１１のダウンロードが指示された場合、支援装置１０は、上記識別情報２３（ＤＩＤ１０）を取得して、これと同一の識別情報がテーブル３０に記憶されているか否かを判定し、記憶されている場合のみダウンロードを許可する。
【００６４】
この場合、上記の通りテーブル３０にはＤＩＤ１０が記憶されているので、ダウンロードが許可される。その結果、ＰＬＣ２０の状態は、上記機械語オブジェクト２４としてプログラムＤＩＤ１１（その機械語）を記憶・実行しており、上記識別情報２３として‘ＤＩＤ１１’が記憶されている。
【００６５】
その後、例えば別の支援装置（１０’と記すものとする）で上記プログラムＤＩＤ１２が作成され、コンパイラ部１２によるプログラムＤＩＤ１２のコンパイルが行われ、コンパイル成功して機械語が生成されたとする。
【００６６】
尚、上記プログラムＤＩＤ１０のコピーの際に、上記テーブル３０もコピーされているものとする（テーブル３０’とする）。もしテーブル３０’が無ければ上記識別情報２３によるチェック処理自体が実行できないことになり、結局、ダウンロードできないことになる。
【００６７】
上記プログラムＤＩＤ１２のコンパイル完了時、上記テーブル３０’には、ＤＩＤ１、ＤＩＤ２、・・・、ＤＩＤ９、ＤＩＤ１０、ＤＩＤ１２が記憶されていることになる。この状態においてプログラムＤＩＤ１２のダウンロードが指示された場合、支援装置１０’は、上記支援装置１０と同様、上記識別情報２３（このとき、上記の通り“ＤＩＤ１１”となっている）を取得して、これと同一の識別情報がテーブル３０’に記憶されているか否かを判定し、記憶されている場合のみダウンロードを許可する。
【００６８】
ここで、この場合、識別情報２３（ＤＩＤ１１）と同一の識別情報は、テーブル３０’内に存在しないことになるので、ダウンロードは許可されないことになる。このようにして、上記制約条件の１つである「既存変数のアドレスを固定（維持）する」を満たしつつ、ＰＬＣ２０の稼働中にＰＬＣプログラムを更新しても、ＰＬＣ２０の動作に異常が生じることがないようにできる。
【００６９】
尚、上記ＰＬＣ２０には未だプログラムＤＩＤ１０（その機械語）が記憶・実行されている状態で、支援装置１０’からプログラムＤＩＤ１２をダウンロードすることは、許可されることになる。この場合、その後に支援装置１０からプログラムＤＩＤ１１をダウンロードしようとすると、不許可になる。
【００７０】
また尚、例えば仮に、上記ＰＬＣ２０には未だプログラムＤＩＤ１０（その機械語）が記憶・実行されている状態で、上記支援装置１０において上記プログラムＤＩＤ１１のコンパイル完了後、この機械語をＰＬＣ２０にダウンロードせずに、更にプログラムＤＩＤ１１をベースにした更新版プログラム（プログラムＤＩＤ１３とする）が作成されたとする。
【００７１】
これは、例えば、プログラムＤＩＤ１０は変数Ａ，変数Ｂを有しており、プログラムＤＩＤ１１では変数Ｃを追加したが、コンパイル後にユーザが更に変数Ｄを追加する必要性を感じた為、プログラムＤＩＤ１３において更に変数Ｄを追加した場合等が考えられる。この場合、上記テーブル３０には、ＤＩＤ１、ＤＩＤ２、・・・、ＤＩＤ９、ＤＩＤ１０、ＤＩＤ１１、ＤＩＤ１３が記憶されていることになる。そして、ＰＬＣ２０側にはＤＩＤ１０が保持されているので、ＤＩＤ１０がテーブル３０にあることを以ってダウンロード許可されることになる。これより、プログラムＤＩＤ１３がＰＬＣ２０にダウンロードされて更新されることになる。
【００７２】
この場合、１世代分抜かされて（プログラムＤＩＤ１１が抜かされて）更新されることになるが、特に問題が生じるようなことはない。例えば上記の例において、プログラムＤＩＤ１０のコンパイル時には変数Ａ，変数Ｂが、１０００番地、１００１番地に割当てられているものとする。その後、プログラムＤＩＤ１１のコンパイル時には変数Ａ，変数Ｂの１０００番地、１００１番地への割当てが維持されると共に、変数Ｃに対しては例えば１００２番地が割り当てられる。その後、プログラムＤＩＤ１３のコンパイル時には変数Ａ，変数Ｂ、変数Ｃの１０００番地、１００１番地、１００２番地への割当てが維持されると共に、変数Ｄに対しては例えば１００３番地が割り当てられる。
【００７３】
従って、ＰＬＣ２０にプログラムＤＩＤ１０が保持・実行されている状態で、プログラムＤＩＤ１３をダウンロードして更新しても、変数Ａ，変数Ｂのアドレス割当てが変わるわけではなく、動作に問題が生じることはない。
【００７４】
上記の例では、ダウンロード対象のプログラムＤＩＤ１３は、ＰＬＣ２０で保持・実行されているプログラムＤＩＤ１０（マスタプログラム）の次の世代ではないが（換言すればマスタプログラムを直接ベースにして作成されたものではないが）、マスタプログラムが基になった派生プログラム（世代管理されたプログラム）であると言える。この様な場合、上記のようにダウンロードしても特に問題ないので、ダウンロード許可される。
【００７５】
この様に、ダウンロード対象のプログラムが、現在のマスタプログラムが基になった派生プログラムであるか否かをチェックする為に、本手法では上記のように識別情報２３と識別情報１８群（テーブル３０）を用いている。
【００７６】
ここで、例えば、パソコンに搭載されるＯＳやワープロソフト等のプログラムにおいては、その更新プログラムはメーカが作ったものが標準であり、世の中に１つしかないものである。従って、プログラムの更新作業は、メーカーが作った更新プログラムを一方的にインストールすれば、何等問題なくその更新が完結されることになる。
【００７７】
これに対して、ＰＬＣシステムでは、個々の顧客の要求仕様が違うため、一律の機能を提供すればよいというものではなく、顧客毎に違った機能（アプリケーション）を提供する必要がある。このアプリケーションを更新するには、そのときにそのＰＬＣシステムが実際に実行しているプログラムに対して互換性（派生）を保ったプログラムを、ＰＬＣにダウンロードして更新させる必要がある（その個々の機能や既存の変数のアドレス割当てを継承する必要がある）。
【００７８】
この為、ダウンロード対象のプログラムが、ＰＬＣ２０に保持されたプログラム（マスタプログラムというものとする）が基になった派生プログラム（世代管理されたプログラム）であることを確認する必要がある。これを実現するために、上記のように一意の識別情報を用いたチェック処理を行うものである。
【００７９】
上述したように、従来では上記（ａ）の認証ステップによる確認を行っていたのに対して、本手法では、ＰＬＣに保持されたマスタプログラムが基となった派生プログラム（世代管理されたプログラム）であることを確認するようにしたことを特徴としている。すなわち、マスタプログラムを基に世代管理されたプログラムであれば、稼働中のＰＬＣに対する変更に適合したプログラムであると見做すようにしている。世代管理されたプログラムであることを確認する為に、上記一意の識別情報１８を用いて識別情報管理テーブル３０で管理する構成としている。
【００８０】
尚、後述するフローチャートの処理では、上述した特徴に加えて、更に差分ダウンロードを行う処理となっているが、差分ダウンロードは必須ではない。尚、差分ダウンロードとは、例えば上記プログラムＤＩＤ１１（その機械語）をダウンロードする場合には、プログラムＤＩＤ１１においてプログラムＤＩＤ１０とは異なる部分だけをダウンロードするものである。
【００８１】
また、尚、支援装置１０が、最初にＰＬＣ２０にプログラムをダウンロードする場合は、ＰＬＣ２０を停止して、通信機能を利用してＰＬＣ２０にプログラムとその識別情報をダウンロードする。その後、ＰＬＣ２０を稼動状態にする。これは、初期状態では、未だＰＬＣ２０にプログラムが格納されておらず、よって識別情報も格納されていない状態となっており、本手法を適用できない（ダウンロードが許可されない）為であり、ＰＬＣ２０を停止してプログラム等をダウンロードするようにしている（稼働中ではないので問題ない）。
【００８２】
以上説明した処理の具体的処理例を、図４、図５のフローチャート図に示す。
以下、図４、図５のフローチャート図について説明する。
図４は、プログラム編集（更新）とコンパイル時の処理を示す。
【００８３】
図４において、ユーザは、支援装置１０において、任意のソースプログラム（ソースコード１６）を作成する。これは、基本的には、既存のソースプログラムに基づいて何らかの所望の変更を行うことで作成される。そして、ユーザが、作成したソースコード１６のコンパイルを指示することで、コンパイラ部１２が当該ソースコード１６のコンパイルを実行する（ステップＳ１１）。そして、コンパイル成功して（ステップＳ１２、ＹＥＳ）機械語オブジェクト１７が生成されたら、識別情報生成部１３が、生成された機械語オブジェクト１７に対応付ける一意の識別情報１８を生成する（ステップＳ１３）。
【００８４】
上記コンパイルは、制約条件を満たさない場合は、成功しない。これは、例えば上記先願の背景技術として説明した従来技術において、例えば上記「予備領域では足りないような変数の追加があった場合」には、上記「既存変数のアドレスを固定（維持）する」条件を満たさなくなるので、実質的にコンパイル失敗となる。
【００８５】
従って、ステップＳ１２がＹＥＳになる場合には、制約条件を満足するはずの機械語オブジェクト１７が生成されることになり、識別情報１８はこの様な機械語オブジェクト１７に対してのみ生成されてテーブル３０に登録・管理されることになる。但し、この様な機械語オブジェクト１７をＰＬＣ２０にダウンロードして実行させても動作異常が生じる可能性がある（理由は既に述べた）。この為、本手法では、識別情報を用いてダウンロード許可の判定を行う。例えば後述する図５の処理でテーブル３０を参照してダウンロード許可された場合、ダウンロードされる機械語オブジェクト１７は、制約条件（特に、既存変数のアドレスを固定（維持）すること）を満足することが保障されたものとなる。これについては詳しくは後述する。
【００８６】
識別情報１８は、例えば、現在日時情報とプログラムの識別情報と支援装置１０の識別情報とを用いて生成されるものであり（但し、この例に限らない）、その生成元の支援装置１０だけでなく他の支援装置１０であってもこれと同一の識別情報が生成されることはない一意な識別情報である。
【００８７】
ここで、この識別情報１８生成について、具体例を挙げて説明する。
例えば、「識別情報１８＝Ｍａｃ＋ＰＪ＋日時」
によって、識別情報１８を生成する。上記Ｍａｃは支援装置１０のＭＡＣアドレスである。但し、この例に限らず、各支援装置１０を一意に識別できる情報であれば何でも良く、例えば製造番号等であってもよい。上記ＰＪは、プロジェクトファイル名である。つまり、プログラムをプロジェクト単位で管理している場合におけるプロジェクトファイルの名称であるが、フォルダ名などであってもよい。勿論、ＰＪの代わりに例えばプログラムファイル名等を用いてもよい。尚、“プロジェクト”は、例えばIEC61131-3で定義されているが、この定義に限るものではない。例えば、一般的にも、複数のＰＯＵ（プログラム）とそれに付随する設定情報が、プロジェクトの情報としてパソコン等に保存される。
【００８８】
あるいは、プロジェクトは、フォルダ単位で管理されるものであり、フォルダ内にはこのプロジェクトに係る各種ファイル（プログラムファイルや設定情報ファイル等）が格納されるものであって、上記識別情報管理テーブル３０もファイルの１つとして格納されるものであってもよい。
【００８９】
上記日時は、例えば、西暦２０１１年１２月２６日１４時２７分３５．０７８秒等というように、年月日時分秒（秒は１／１００秒）のレベルで示されるものとする。このレベルであれば、支援装置１０が、全く同じ日時に複数の識別情報１８を生成するのは困難であり、他の支援装置１０では全く同じ日時に識別情報１８を生成することは可能であっても今度はＭａｃが異なることになる。従って、例えば上記のように生成される識別番号１８は、必ず一意のものになると見做してよいと言える。
【００９０】
識別情報管理部１４は、上記ステップＳ１３で生成された識別情報１８を、最新の世代として識別情報管理テーブル３０に記憶する（ステップＳ１４）。これは、例えば、テーブル３０における現在の最新の世代３１に対して＋１インクリメントして世代数を１つ増加させ、当該新たな最新の世代数と、上記生成された識別情報１８とを、識別情報管理テーブル３０の新規レコードの世代３１と識別情報３２に格納する。
【００９１】
次に、図５のダウンロード処理について説明する。
ＰＬＣ２０が稼働中にそのプログラムを更新させる為に新たなプログラム（更新版プログラム）を支援装置１０からＰＬＣ２０へダウンロードする場合、本手法では支援装置１０が、上記識別情報管理テーブル３０等を用いて、ダウンロードを許可するか否かを判定する。
【００９２】
すなわち、ユーザ等が支援装置１０をＰＬＣ２０に接続すると、オンラインモード開始となり、支援装置１０はまずＰＬＣ２０から当該ＰＬＣ２０が保持している識別情報２３を取得する（ステップＳ２１）。尚、既に述べたように、識別情報２３は、ＰＬＣ２０が現在、保持・実行している機械語オブジェクト２４に対応する識別情報である。
【００９３】
支援装置１０は、続いて、上記取得した識別情報２３が、識別情報管理テーブル３０内に存在するか否かを判定する。すなわち、識別情報管理テーブル３０の各識別情報３２のなかに、識別情報２３と同一の識別情報が存在するか否かをチェックする（ステップＳ２２）。
【００９４】
もし、識別情報管理テーブル３０内に識別情報２３と一致するものが存在しない場合には（ステップＳ２２，ＮＯ）、ダウンロードは不許可となり、例えば「ダウンロードを実施できない」旨のメッセージを表示する等して（ステップＳ２６）、本処理を終了する。
【００９５】
一方、識別情報管理テーブル３０内に識別情報２３と一致するものが存在する場合には（ステップＳ２２，ＹＥＳ）、ダウンロードを許可するものと判定し、本例では差分のみをダウンロードするので、まず差分部分を求める。
【００９６】
すなわち、ＰＬＣ２０内のプログラムとの照合処理を実施し、相互に異なる部分をＰＬＣに送信する。これは、例えば、プログラムが複数のＰＯＵ（あるいはプログラムファイル等）から成るものである場合には、支援装置１０の上記変更版プログラム１７を構成する各ＰＯＵと、ＰＬＣ２０に保持され動作しているプログラム２４の各ＰＯＵとを比較照合して（ＰＯＵの内容を比較照合して）、完全に一致しない場合には不一致と判定し、“不一致となるＰＯＵ”（差分）を全て抽出して一覧表示する（ステップＳ２３）。尚、ＰＯＵとは、プログラム構成単位を意味し、例えばＰＧ（プログラム）、ＦＢ（ファンクションブロック）、ＦＣＴ（ファンクション）等の種類があるが、この例に限らない。
【００９７】
その後、この差分一覧表示を参照したユーザが、そのなかからダウンロードすべきＰＯＵを任意に選択指定して（勿論、全てを選択してもよい）差分ダウンロード開始指示を出すと（ステップＳ２４，ＹＥＳ）、支援装置１０は、上記“不一致となるＰＯＵ”（差分）であってユーザ指定されたＰＯＵ全てを、ＰＬＣ２０にダウンロードする（ステップＳ２５）。尚、ユーザがダウンロードをキャンセル等した場合には（ステップＳ２４，ＮＯ）、ダウンロードすることなく本処理を終了する。
【００９８】
尚、上記ステップＳ２２の判定がＹＥＳの場合であっても、当該一致確認した識別情報が最新の場合は、ステップＳ２３以降の処理を実行しないようにしてもよい。ＰＬＣ２０の識別情報２３と最新プログラムの識別情報が一致した場合、当該最新プログラムが既にＰＬＣ２０にダウンロードされていることを意味するので、同じプログラムを再度ダウンロードする必要が無いからである。尚、本例ではその世代番号（世代３１）が一番大きい識別情報３２が、最新となる（最新のプログラムに対応するものとなる）。その為に、識別情報３２だけでなく世代３１の情報も生成して格納している。
【００９９】
上記のことから、例えば、ステップＳ２２の判定がＹＥＳの場合、識別情報２３に対応する世代も、この世代が最新の世代（世代３１として登録されている各世代のうち最大）であるか否かも、識別情報管理テーブル３０を参照すれば分かるので、識別情報２３に対応する世代が最新の世代である場合にはステップＳ２３以降の処理を実行せずに本処理を終了し、最新の世代ではない場合にはステップＳ２３以降の処理を実行する。
【０１００】
尚、本処理例では、差分のなかからユーザが任意に選択した一部のみをダウンロードするが、この例に限らず、差分全てを強制的にダウンロードすることで、ＰＬＣ２０の保持プログラムを、最新版へと更新させるようにしてもよい。尚、基本的に、ＰＬＣ２０には最新版のプログラムを保持させる必要がある（そうしないと、支援装置１０側でのモニタ処理に支障がでる）。
【０１０１】
上記のように、世代管理することで、ＰＬＣ２０側に既に最新プログラムがある場合には、無意味なダウンロード処理が実行されずに済み、ユーザは直ちにモニタを行えるようになる。
【０１０２】
尚、上記ソースコード１６や機械語オブジェクト１７、２４等のプログラマブルコントローラにおいて実行させるＰＬＣ用プログラム（制御プログラム）は、プロジェクト（プロジェクトファイルまたはプロジェクトデータ等）単位で管理・実行される場合がある。プロジェクトは、例えば、複数のＰＯＵ（Program Organization Unit）すなわちＰＯＵ群などで構成される。ＰＯＵ群は、ユーザの作成したプログラムを構成する要素全てであり、例えばファンクションやファンクションブロックなどの実行コード等から構成される。
【０１０３】
これより、支援装置１０は、プロジェクト単位でユーザが記述したプログラムや各種設定を管理するものであってもよい。プロジェクトには、複数のプログラム（ＰＯＵ群等）や各種設定情報などが含まれる。本手法は、制約条件の継続性の確認を、プログラム単位だけでなく、プロジェクト単位でも実施可能である。
【０１０４】
稼働中のＰＬＣのプログラムを変更するためには、いくつかの制約条件がある。そこで、プログラムに対する変更が制約条件を満足してあることを保障するため、支援装置は、プログラムの一致を確認した後、制約条件内の操作しかユーザに許可しないようにしている（但し、既に述べたように、必ずしも制約条件を満足していることが保障されるわけではない）。これは、既に従来で述べたコンパイラの機能によるものであり、制約条件を満足しない変更が行われたプログラムは、コンパイル成功しないことになる。しかしながら、コンパイル成功した場合でも、つまり制約条件を満足していることは保障されると見做される場合であっても、稼働中のＰＬＣに対する変更に適合したプログラムであること（本当に制約条件を満足していること）が保障されるわけではない。
【０１０５】
例えばプログラムの更新が２系統に別れて、一方の系統の更新版プログラムがプログラマブルコントローラにダウンロードされて運用されている状態で、他方の系統で最新の更新版プログラムが作成された場合、当該他方の系統の更新版プログラムでは、稼働中のＰＬＣ２０に対する変更に適合したプログラムであることは保障されない。本手法によれば、当該他方の系統の識別情報管理テーブル３０には、ＰＬＣ２０の現在の識別情報２３は登録されていないので、これによってダウンロード不許可にできる。
【０１０６】
これに対して、上述した本手法によれば、変更・更新されたプログラムが、稼働中のＰＬＣに対する変更に適合したプログラムであることを確認して更新することができるため、例えば、システムに適合しないプログラムの転送などによる人為的ミスを確実に防ぐことができる高信頼なプログラマブルコントローラシステムを提供することができる。
【０１０７】
換言すれば、本例の支援装置は、制約条件内でプログラム変更の継続性を、識別情報を管理することにより保証し、ユーザの手作業による更新版プログラムの反映を行う必要なく、支援装置が変更されたプログラムをＰＬＣに転送することにより、人為的ミスの防止、作業時間の低減が可能である。
【符号の説明】
【０１０８】
１０  支援装置
１１  ユーザインターフェース機能部
１２  コンパイラ部
１３  識別情報生成部
１４  識別情報管理部
１５  通信機能部
１６  ソースコード
１７  機械語オブジェクト
１８  識別情報
２０  ＰＬＣ
２１  通信機能部
２２  プログラム実行管理機能部
２３  識別情報
２４  機械語オブジェクト
３０  識別情報管理テーブル
３１  世代
３２  識別情報
【図１】
0005957936.tif 000002
【図２】
0005957936.tif 000003
【図３】
0005957936.tif 000004
【図４】
0005957936.tif 000005
【図５】
0005957936.tif 000006