(57)【要約】【課題】支援装置側でＰＬＣプログラムの識別情報の履歴情報を記憶・管理するシステムにおいて、不要な識別情報を判別して削除できる。【解決手段】識別情報生成部２３は、コンパイラ部２２が更新版プログラムのソースコード２６をコンパイルして機械語オブジェクト２７を生成する毎に、対応する一意の識別情報を生成する。識別情報管理部２４は、この識別情報を履歴情報１１に追加記憶すると共に、対応するダウンロード情報１２を生成し、その後、必要に応じて更新する。そして、ダウンロード情報に基づいて不要な識別情報を判別して、この識別情報を履歴情報１１から削除する。【選択図】図２
2016001376.tif 000002
【特許請求の範囲】
【請求項１】
支援装置と複数のコントローラを有するプログラマブルコントローラシステムであって、
前記支援装置は、
前記コントローラ用のプログラムである任意のプログラムやその更新版プログラムが作成される毎に、該コントローラ用プログラムをコンパイルすると共に対応する一意の識別情報を生成するコンパイル手段と、
該識別情報を世代管理する履歴情報を記憶する履歴情報記憶手段と、
該履歴情報の各識別情報に対応付けて、その識別情報に対応する前記コントローラ用プログラムに係わる各コントローラへのダウンロード情報を記憶するダウンロード情報記憶手段と、
該ダウンロード情報に基づいて、前記履歴情報において不要な識別情報を判別して、該識別情報を前記履歴情報から削除する不要情報削除手段と、
を有することを特徴とするプログラマブルコントローラシステム。
【請求項２】
前記不要情報削除手段は、前記ダウンロード情報に基づいて、その識別情報に対応する前記コントローラ用プログラムが、全てのコントローラについて現在使用中ではなく且つ今後ダウンロードされることもないと判定する場合、該識別情報を前記不要な識別情報とすることを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項３】
前記ダウンロード情報は、各識別情報毎に、各コントローラについて「使用中」、「未使用」、「使用済」の何れの状態であるかを示す情報であり、
前記不要情報削除手段は、任意の識別情報に対応する前記状態が全て「使用済」である場合に、その識別情報を前記不要な識別情報と判定することを特徴とする請求項２記載のプログラマブルコントローラシステム。
【請求項４】
前記「未使用」は前記コントローラの次のプログラム更新時にダウンロード予定であることを示し、前記「使用中」は前記コントローラで使用中であることを示し、前記「使用済」はその時点以降に前記コントローラにダウンロードされることはないことを示すことを特徴とする請求項３記載のプログラマブルコントローラシステム。
【請求項５】
前記支援装置は、前記状態を更新する状態更新手段であって、任意の前記コントローラ用プログラムがコンパイルされることに伴って前記履歴情報にその識別情報を追加すると共に該識別情報に対応する前記状態を全て新たな「未使用」とすると共に、既存の「未使用」は全て「使用済」とする状態更新手段を更に有することを特徴とする請求項３または４記載のプログラマブルコントローラシステム。
【請求項６】
前記ダウンロード情報は、各識別情報毎に、その識別情報に対応するコントローラ用プログラムを現在保持・運用していると見做されるコントローラ数であり、
前記不要情報削除手段は、任意の識別情報に対応する前記コントローラ数がゼロとなった場合に、該識別情報を前記不要な識別情報と判定することを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項７】
前記支援装置は、任意の前記コントローラに対して前記コントローラ用プログラムをその前記識別情報と共にダウンロードするダウンロード手段を更に有し、
前記コントローラは、
前記ダウンロードされる前記コントローラ用プログラムとその識別情報とを記憶する記憶手段と、
該記憶手段に記憶されるコントローラ用プログラムを実行するプログラム実行手段と、
を有することを特徴とする請求項１〜６の何れかに記載のプログラマブルコントローラシステム。
【請求項８】
前記支援装置は、
前記コントローラ用プログラムのダウンロード対象のコントローラの前記記憶手段に記憶されている識別情報を取得して、該取得した識別情報が前記履歴情報に含まれていない場合には、前記ダウンロード手段によるダウンロードを許可しない許可手段を更に有することを特徴とする請求項７記載のプログラマブルコントローラシステム。
【請求項９】
支援装置と複数のコントローラを有するプログラマブルコントローラシステムにおける該支援装置であって、
前記コントローラ用のプログラムである任意のプログラムやその更新版プログラムが作成される毎に、該コントローラ用プログラムをコンパイルすると共に対応する一意の識別情報を生成するコンパイル手段と、
該識別情報を世代管理する履歴情報を記憶する履歴情報記憶手段と、
該履歴情報の各識別情報に対応付けて、その識別情報に対応する前記コントローラ用プログラムに係わる各コントローラへのダウンロード情報を記憶するダウンロード情報記憶手段と、
該ダウンロード情報に基づいて、前記履歴情報において不要な識別情報を判別して、該識別情報を前記履歴情報から削除する不要情報削除手段と、
を有することを特徴とするプログラマブルコントローラシステムの支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、稼働中のプログラマブルコントローラの動作を停止しないでプログラム更新を行えるシステム等に関する。
【背景技術】
【０００２】
従来、オンライン変更によるプログラム更新を安全に行う方法が、例えば特許文献１等で提案されている。
特許文献１の発明は、稼働中のＰＬＣ（コントローラ）に対する変更に適合したプログラムであることを確認したうえで、当該ＰＬＣのプログラムを更新することができる発明である。その為に、支援装置において、任意の更新版プログラムのソースコードをコンパイルしたら、これによって生成した機械語オブジェクトに対応する一意の識別情報を生成してリスト（識別情報管理テーブル）に追加登録する。そして、最新版の機械語オブジェクトをＰＬＣにダウンロードする際に、ＰＬＣの現在の識別情報を取得して、これが上記リストに登録されているか否かを判定し、登録されている場合のみダウンロードを許可する。
【０００３】
特許文献１の発明は、特に、任意の支援装置から他の支援装置へバックアップ等の為にプログラムがコピーされ、その後、他の支援装置においてもこのプログラムの更新版が作成されてＰＬＣにダウンロードされる等の状況を想定している。
【０００４】
特許文献１の発明では、コントローラを停止することなくＰＬＣのプログラムの更新を安全に行う方法として、支援装置側で更新版プログラムのコンパイル毎に生成される固有の識別情報を、世代を含めた履歴情報（上記リスト）として記憶・管理する。そして、コントローラ側で記憶・実行しているプログラムの識別情報が、支援装置側の上記リストに存在するか否かによって、コントローラへの更新版プログラムのダウンロードを許可するか否かを判定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１６８０３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、特許文献１の図１．図３等に示す例ではＰＬＣは１台であるが、ＰＬＣが複数台あっても構わない。また、これら複数のＰＬＣが、同じプログラム（但し、バージョンが異なっていても良い）を実行する構成となる場合もある。その一例を例えば図８に示す。
【０００７】
図８に示す例では、支援装置１００Ａのリスト１０１ａには、識別情報‘0000-0000’（世代１）、識別情報‘0000-0001’（世代２）、識別情報‘0000-0002’（世代３）が格納されている。また、ここでは、世代２のプログラムが他の支援装置１００Ｂにコピーされていたものとする。そして、支援装置１００Ｂにおいて、このコピープログラムに基づく更新版プログラムが作成されると共に、その識別情報として‘0001-0003’が付与されたものとする。これより、支援装置１００Ｂのリスト１０１ｂには、図示のように、識別情報‘0000-0000’（世代１）、識別情報‘0000-0001’（世代２）、識別情報‘0001-0003’（世代３）が格納されていることになる。
【０００８】
一方、図では４台のＰＬＣ１１０（１１０ａ、１１０ｂ，１１０ｃ，１１０ｄ）を示すが、ここでは全てのＰＬＣ１１０に対して支援装置１００Ａからプログラムがダウンロードされているものとする。図示の例では、ＰＬＣ１１０ａには世代３のプログラムが格納されており、ＰＬＣ１１０ｂには世代１のプログラムが格納されており、ＰＬＣ１１０ｃ、１１０ｄには世代２のプログラムが格納されているものとする。そして、これより、各ＰＬＣ１１０が保持している識別情報は、図示の通り、ＰＬＣ１１０ａは‘0000-0002’、ＰＬＣ１１０ｂは‘0000-0000’、ＰＬＣ１１０ｃ、１１０ｄは‘0000-0001’となっている。
【０００９】
そして、図示の状態で、上記支援装置１００Ａが、４台のＰＬＣ１１０全てに対してプログラムをダウンロードしようとした場合、まず、ＰＬＣ１１０ａに関しては、その識別情報‘0000-0002’は支援装置１００Ａのリスト１０１ａに存在するが、これは最新の世代（世代３）であることから、ダウンロードは必要ないと判定される。また、ＰＬＣ１１０ｂに関しては、その識別情報‘0000-0000’は支援装置１００Ａのリスト１０１ａに存在するので、ダウンロードは許可される。また、ＰＬＣ１１０ｃ、１１０ｄに関しても、その識別情報‘0000-0001’は支援装置１００Ａのリスト１０１ａに存在するので、ダウンロードは許可される。
【００１０】
一方で、図示の状態において、上記支援装置１００Ｂが、４台のＰＬＣ１１０全てに対してプログラムをダウンロードしようとした場合、まず、ＰＬＣ１１０ａに関しては、その識別情報‘0000-0002’は、支援装置１００Ｂのリスト１０１ｂには存在しないので、ダウンロードは許可されない。一方、ＰＬＣ１１０ｂに関しては、その識別情報‘0000-0000’は支援装置１００Ｂのリスト１０１ｂに存在するので、ダウンロードは許可される。また、ＰＬＣ１１０ｃ、１１０ｄに関しても、その識別情報‘0000-0001’は支援装置１００Ｂのリスト１０１ｂに存在するので、ダウンロードは許可される。
【００１１】
もし、支援装置１００Ｂが、上記ダウンロード許可されたＰＬＣ１１０ｂ，１１０ｃ，１１０ｄ全てに対して、自装置の最新のプログラム（識別情報‘0001-0003’のプログラム）をダウンロードしてプログラム更新させた場合、その後、支援装置１００Ａは、これらＰＬＣ１１０ｂ，１１０ｃ，１１０ｄに対してはダウンロード許可されないことになる。一方、支援装置１００Ｂは、その後も、ＰＬＣ１１０ａに関してはダウンロード許可されないことになる。この為、この例では、その後、ＰＬＣ１１０ｂ，１１０ｃ，１１０ｄのプログラム更新は支援装置１００Ｂが行うことになり、ＰＬＣ１１０ａのプログラム更新は支援装置１００Ａが行うことになる。
【００１２】
換言すれば、その後は、ＰＬＣ１１０ｂ，１１０ｃ，１１０ｄは支援装置１００Ｂによるプログラム更新の対象であるが、ＰＬＣ１１０ａは支援装置１００Ｂによるプログラム更新の対象ではないことになる。また、その後は、ＰＬＣ１１０ｂ，１１０ｃ，１１０ｄは支援装置１００Ａによるプログラム更新の対象ではないが、ＰＬＣ１１０ａは支援装置１００Ａによるプログラム更新の対象となる。
【００１３】
特許文献１の発明では、例えば上述したようにして、オンラインによるプログラム更新時に、上記識別情報を利用してコントローラがプログラム更新の対象かどうかの判別を実施することにより、更新プログラムの継続性を保証するものである。
【００１４】
従来の上記特許文献１の技術では、支援装置側は、更新を重ねるプログラムに係わる各識別情報を、世代を含めた履歴情報（上記リスト）として管理し、オンラインでのプログラム更新時、コントローラ側にダウンロードされて運用中のプログラムの識別情報が、支援装置側の上記履歴情報内に存在するか否かによって、そのコントローラがその支援装置によるプログラム更新の対象であるか否かの判別を行っている。
【００１５】
ここで、特許文献１の従来技術では、ＰＬＣのプログラム（特に各更新版）をコンパイルする毎に、固有の識別情報を生成して、これを当該プログラムに対応付ける。そのため、オンラインによるプログラム更新を実施した後、次のプログラム更新（ダウンロード）を行うまでの間にユーザが複数回コンパイルを実施すると、その都度識別情報が増加するが、ダウンロード時に必要となる識別情報は最新の識別情報であり、途中でコンパイルした識別情報は無駄になる。しかしながら、無駄であっても履歴情報に残っている。
【００１６】
更に、従来の技術では、コントローラ側ではオンラインによるプログラム更新を実施すると、コントローラ側にダウンロードされている識別情報は、新しい識別情報で上書きされるが、支援装置側では過去の古い世代の識別情報も上記リストに残してあり、オンラインによるプログラム更新を継続していくにつれ、支援装置側で記憶・管理している上記リスト（履歴情報）が、肥大化していくことになる。
【００１７】
また、先述のとおり、任意のコントローラがプログラム更新の対象かどうかの判別が、上記履歴情報内を検索することによって行われる為、上記履歴情報の肥大化は、支援装置内の空き領域を単に圧迫するという問題だけでなく、オンラインによるプログラム更新の処理時間が安定せず、徐々に増大するという問題を引き起こす。
【００１８】
本発明の課題は、支援装置側でＰＬＣプログラムの識別情報の履歴情報を記憶するシステムにおいて、不要な識別情報を判別して削除することで、支援装置側の履歴情報の肥大化を防ぎ、以って安定したオンライン変更を実現させるプログラマブルコントローラ、その支援装置等を、提供することである。
【課題を解決するための手段】
【００１９】
本発明のプログラマブルコントローラシステムは、支援装置と複数のコントローラを有するプログラマブルコントローラシステムであって、支援装置が下記の構成を有する。
・前記コントローラ用のプログラムである任意のプログラムやその更新版プログラムが作成される毎に、該コントローラ用プログラムをコンパイルすると共に対応する一意の識別情報を生成するコンパイル手段；
・該識別情報を世代管理する履歴情報を記憶する履歴情報記憶手段；
・該履歴情報の各識別情報に対応付けて、その識別情報に対応する前記コントローラ用プログラムに係わる各コントローラへのダウンロード情報を記憶するダウンロード情報記憶手段；
・該ダウンロード情報に基づいて、前記履歴情報において不要な識別情報を判別して、該識別情報を前記履歴情報から削除する不要情報削除手段。
【発明の効果】
【００２０】
本発明のプログラマブルコントローラシステム、その支援装置によれば、支援装置側でＰＬＣプログラムの識別情報の履歴情報を記憶するシステムにおいて、不要な識別情報を判別して削除することで、支援装置側の履歴情報の肥大化を防ぎ、以って安定したオンライン変更を実現させることができる。
【図面の簡単な説明】
【００２１】
【図１】本例のプログラマブルコントローラシステムの概略構成図である。
【図２】プログラマブルコントローラシステムの機能図である。
【図３】管理情報の状態遷移例を示す図である。
【図４】管理情報の具体例である。
【図５】コンパイルの際のダウンロード情報の更新処理のフローチャート図である。
【図６】ＰＬＣのプログラム更新の際のダウンロード情報の更新処理のフローチャート図である。
【図７】ダウンロード情報としてコントローラ数を用いる例を説明する図である。
【図８】特許文献１のプログラマブルコントローラの構成・データ例である。
【発明を実施するための形態】
【００２２】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本例のプログラマブルコントローラシステムの概略構成図である。
尚、本説明では、プログラマブルコントローラを、ＰＬＣあるいは単にコントローラと記す場合もあるものとする。
【００２３】
図示のプログラマブルコントローラシステムは、支援装置１０と、各ＰＬＣ１（１ａ，１ｂ，１ｃ，１ｄ）等を有する。
尚、ここでは支援装置１０は１台のみ示すが、上記従来の図８のように複数台存在してもよい。
【００２４】
支援装置１０、各ＰＬＣ１の処理機能については、図２に示すものとし、後に説明するものとし、ここでは支援装置１０、各ＰＬＣ１が記憶する情報について図示・説明する。
すなわち、まず、各ＰＬＣ１には、上記特許文献１と同様、支援装置１０から任意の世代のプログラムが、その識別情報と共にダウンロードされて、これらが記憶される。尚、この様なコントローラ用のプログラムを、ＰＬＣプログラム等と記すものとするが、単にプログラムと記した場合にも、それは基本的にＰＬＣプログラムを意味するものとする。
【００２５】
また、支援装置１０は、上記特許文献１と同様、任意のＰＬＣプログラム（任意の初版プログラムまたはその更新版プログラム）のソースコードをコンパイルして機械語オブジェクトを生成する毎に、このＰＬＣプログラムに対応する識別情報を生成して上述したリスト（図示の履歴情報１１）に追加記憶する。その際、世代を付与する。世代は、例えば、１，２，３、・・・の順に付与するものであり、番号が小さいほど古い世代であり、任意の時点で最も大きい番号が、最新世代を意味することになる。
【００２６】
任意のプログラムについて新規作成時及び各更新の際にそれぞれ一意の識別情報が作成されて、この識別情報を世代に対応付けて履歴情報１１に追加記憶する。これより、履歴情報１１は、図示のように、各世代１１ａが対応付けられた各識別情報１１ｂが記憶されることになる。換言すれば、履歴情報１１は、識別情報を世代管理する為の情報と言える。
【００２７】
基本的には、任意の時点における最新世代のＰＬＣプログラムを、その識別情報と共に、任意のＰＬＣ１にダウンロードする。
この様な、識別情報の世代管理自体は、上記特許文献１と同様であってよいが、本例では更に図１に示すダウンロード情報１２を記憶管理する。これは、図示の例では、上記履歴情報１１の各世代１１ａ（各識別情報１１ｂ）に対応付けて、その世代のプログラムに関する各ＰＬＣ１のダウンロード状態（本例では「使用済」、「使用中」、「未使用」）が、記憶管理される。つまり、各世代のプログラムについて、各コントローラ毎に、その時点で「使用済」、「使用中」、「未使用」の何れの状態であるのかが、記憶されることになる。
【００２８】
尚、各ＰＬＣ１毎にそれぞれ対応するダウンロード情報１２があるものと見做しても良い。つまり、図示のダウンロード情報１２は、この様なＰＬＣ１毎のダウンロード情報１２を纏めて示すものと見做しても構わない。
【００２９】
ここで、上記「未使用」は、そのコントローラの次の更新時にその識別情報１１ｂのプログラムがダウンロードされる予定であることを意味する。但し、ダウンロードされる前に、新たな更新版プログラムが生成された場合には、ダウンロードされることなく「使用済」となる。詳しくは後述する。
【００３０】
また、上記「使用中」は、現在、そのコントローラにその識別情報１１ｂのプログラムが保持されて運用中の状態であることを意味している。
また、上記「使用済」は、その時点以降にそのコントローラにその識別情報１１ｂのプログラムがダウンロードされることは無いことを意味している。
【００３１】
上記ダウンロード情報１２の生成・更新処理や、ダウンロード情報１２を用いて履歴情報１１から不要な情報を削除する処理については、図２以降を参照して後述する。
概略的に説明するならば、支援装置１０は、管理情報（履歴情報１１とダウンロード情報１２）を、コンパイル時またはダウンロード実施時に随時更新していく。そして、ある世代の識別情報１１ｂに対して、全てのコントローラのダウンロード状態が「使用済」となった場合に、その世代の識別情報１１ｂは、不要となった古い世代の識別情報であると見做して削除するようにする。また、その際、識別情報だけでなく当該識別情報に対応するダウンロード状態も一緒に削除するようにしてもよい。詳しくは後述する。
【００３２】
また、支援装置１０は、各ＰＬＣ１を識別用ＩＤ（例えば、ＭＡＣアドレス）によって一意に特定できる。例えば、図示のコントローラ情報１３における“PLC-ID”１３ｂが、上記識別用ＩＤの一例である。
【００３３】
ここで、支援装置１０は、図示のコントローラ情報１３も記憶・管理するようにしてもよい。コントローラ情報１３は、ＰＬＣ名１３ａとPLC-ID１３ｂから成る。PLC-ID１３ｂは、上記の通り、上記識別用ＩＤの一例である。ＰＬＣ名１３ａは、例えば各ＰＬＣ１に付与される任意の名称等である。各ＰＬＣ１には、予め自己の識別情報（PLC-ID）が記憶されている。支援装置１０は、例えば、各ＰＬＣ１からそのPLC-IDを取得して、これを上記コントローラ情報１３のPLC-ID１３ｂに格納すると共に、任意の名称を生成してＰＬＣ名１３ａに格納する。このＰＬＣ名１３ａは、図示のようにダウンロード情報１２にも用いられる。
【００３４】
図２は、上記プログラマブルコントローラシステムの機能図である。
本システムは、パソコン等のコンピュータ上で動作する支援装置１０が、不図示の通信線によって各ＰＬＣ１と接続されて、相互にデータ送受信可能な構成となっている。尚、図示は省略するが、各ＰＬＣ１には何らかの制御対象機器が接続されている。
【００３５】
支援装置１０は、ユーザインターフェース機能部２１、コンパイラ部２２、識別情報生成部２３、識別情報管理部２４等の各種機能部を有する。支援装置１０は、不図示のＣＰＵ／ＭＰＵ等の演算プロセッサや、ハードディスク、メモリ等の記憶装置も有しており、記憶装置には予め所定のアプリケーションプログラムが記憶されている。上記各種機能部の後述する処理機能は、上記不図示の演算プロセッサが、このアプリケーションプログラムを読出し・実行することにより実現される。
【００３６】
尚、本説明において単にプログラムと記した場合には、それは基本的には上記ＰＬＣプログラム（制御プログラム）を意味するものとする。
また、支援装置１０は、ディスプレイ画面や入力装置等も有している。
【００３７】
上記ユーザインターフェース機能部２１は、ユーザが所望のＰＬＣプログラムのソースコード２６を作成するのを支援する機能を有する。この機能自体は、従来からよく知られた既存機能であるので、ここでは特に詳細には説明しないが、概略的には、ユーザインターフェース機能部２１は、ディスプレイに不図示の所定の編集用画面を表示して、この編集用画面上でユーザに所望のＰＬＣプログラムのソースコード２６を作成させる。ユーザは、キーボード、マウス等の入力装置を操作して、任意のプログラムのソースコード２６を作成する。作成されたプログラム・ソースコード２６は、上記不図示の記憶装置等に記憶される。
【００３８】
上記ＰＬＣプログラムの作成は、任意の新規プログラムの作成あるいは既存のプログラムの更新版（バージョンアップ版等）を作成するものである。本手法は、主に各更新版プログラムに関するものとなる。更新版プログラムの作成作業は、例えばユーザが、上記ユーザインターフェース機能部２１の機能により、既存のソースコード２６のファイルを開いて、所望の変更を行うことで、更新版のソースコード２６を作成する。この様な、更新版のプログラム・ソースコード２６は、上記コンパイラ部２２でコンパイルされる。
【００３９】
コンパイラ部２２は、上記ユーザが作成したソースコード２６を、ターゲット（ＰＬＣ１）上で動作する機械語オブジェクト２７に変換する。この変換（コンパイル）処理において各変数に対するアドレス割当てが行われる。この様なコンパイル処理自体は、一般的な既存技術であるので、ここでは特に説明しない。
【００４０】
コンパイラ部２２は、更に、上記特許文献１の発明と同様、コンパイル実行毎に、そのＰＬＣプログラムに対して一意の識別情報を割り当てる。この識別情報の生成は、識別情報生成部２３が行う。上記機械語オブジェクト２７は、その識別情報と共に、通信機能部２５によってＰＬＣ１にダウンロードされる。但し、その前に、特許文献１と同様に、別環境（実システムとは別の検証用システム）で更新版プログラムの動作確認／動作検証を行って、検証ＯＫである更新版プログラム（その機械語オブジェクト２７）のみがＰＬＣ１にダウンロード可能とすることが望ましい。
【００４１】
尚、上記一意の識別情報の意味や生成方法は、特許文献１と同様であり特に詳細には説明しないが、１つの支援装置１０に関してだけでなく他の支援装置１０も含めて、同じ識別情報が生成されることはない。
【００４２】
また、上記識別情報生成部２３によって生成された識別情報は、履歴情報１１に追加記憶される。この履歴情報１１は、上記特許文献１における識別情報管理テーブル３０に相当するので、特に詳細には説明しないが、任意のプログラムに関して特にその各更新版に対応する識別情報を記憶するものであり、各識別情報を世代管理する為のものである。
【００４３】
履歴情報１１は、例えば図１や図４に示すように、上記各識別情報１１ｂが格納されており、各識別情報１１ｂには“世代”１１ａが対応付けられている。“世代”１１ａは、各識別情報１１ｂに対して割当てられる世代管理用の番号であり、本例では図示のように、初期値を‘１’とし、新規レコード追加毎に＋１インクリメントされるものとする。よって、“世代”１１ａの番号が最も小さい識別情報１１ｂが、最も古い（初版の）プログラムに対応して生成された識別情報であることになる。
【００４４】
この様な履歴情報１１の生成・管理は、識別情報管理部２４が実行する。
この様な履歴情報１１の生成・管理自体は、上記特許文献１と同様であってよいが、本例の支援装置１０では、更に、履歴情報１１に対応付けてダウンロード情報１２が生成・記憶される。ダウンロード情報１２の管理も、識別情報管理部２４が実行する。また、図２には示していないが、識別情報管理部２４は、更に、図１に示すコントローラ情報１３を生成・管理するものであってもよい。
【００４５】
識別情報管理部２４は、例えば、履歴情報１１の各識別情報１１ｂに対応付けて、その識別情報に対応する更新版プログラムに係わる各ＰＬＣ１毎のダウンロード情報１２を記憶する。また、ダウンロード情報１２を更新する。尚、図示の管理情報記憶部３０には、この様な管理情報（履歴情報１１＋ダウンロード情報１２）が記憶される。
【００４６】
ダウンロード情報１２は、例えば後述するダウンロード状態（「使用中」、「未使用」、「使用済」）であるが、この例に限らず、後述するコントローラ数等であってもよい。
識別情報管理部２４は、例えば、ダウンロード情報１２に基づいて、履歴情報１１において不要な識別情報１１ｂを判別して、該不要な識別情報１１ｂを履歴情報１１から削除する。尚、逐一述べないが基本的に、不要な識別情報１１ｂを削除する際にはその世代１１ａの情報も一緒に削除する。更に、対応するダウンロード情報１２も一緒に削除するようにしてもよい。
【００４７】
識別情報管理部２４は、例えば、ダウンロード情報１２に基づいて、その識別情報１１ｂのプログラムが全てのコントローラについて「現在使用中ではなく且つ今後ダウンロードされることもない」と判定する場合、該識別情報１１ｂを上記不要な識別情報と判定する。これは、例えば後述する一例では、履歴情報１１における任意の識別情報１１ｂについて、それに対応するダウンロード情報１２（ダウンロード状態）が全て後述する「使用済」であった場合に、この識別情報１１ｂを上記不要な識別情報と見做すものであるが、この例に限らない。
【００４８】
尚、識別情報管理部２４の処理機能において特に上述した履歴情報１１において不要な識別情報１１ｂを判別して削除する処理機能を、不要情報削除機能と呼ぶものとし、ダウンロード情報１２の更新に係わる機能を状態更新機能と呼ぶものとする。
【００４９】
この状態更新機能は、例えば、任意のＰＬＣプログラム（特に更新版プログラム）がコンパイルされることに伴ってその識別情報を履歴情報１１に追加する際に、この識別情報１１ｂに対応する上記ダウンロード状態を全て新たな「未使用」とすると共に、既存の「未使用」は全て「使用済」とする。
【００５０】
また、上記ダウンロード情報１２は、上記ダウンロード状態の例に限らない。例えば、ダウンロード情報１２は、各識別情報毎に、その識別情報のプログラムを現在保持・運用していると見做されるＰＬＣ１の数（後述する図７に示すコントローラ数５１）であってもよい。但し、他の支援装置１０がＰＬＣ１のプログラムを変更する場合もあるので、このコントローラ数５１が、正しいとは限らない。つまり、その識別情報のプログラムを実際に現在保持・運用しているＰＬＣ１の数が、コントローラ数５１よりも少ない場合もあり得る。
【００５１】
上記不要情報削除機能は、例えば、任意の識別情報１１ｂに対応する上記コントローラ数５１がゼロとなった場合に、該識別情報１１ｂを上記不要な識別情報と判定する。
また、特に図示・説明しないが、支援装置１０は更に上記特許文献１と略同様の機能を有していても良い。例えば、任意のＰＬＣプログラム（特に更新版プログラム）のダウンロード対象のＰＬＣ１から、当該ＰＬＣ１に記憶されている識別情報を取得して、該取得した識別情報が履歴情報１１に含まれていない場合には、この更新版プログラムのダウンロードを許可しない機能を有するものであってもよい。
【００５２】
尚、上記「取得した識別情報が履歴情報１１に含まれている」ことを確認する処理は、ダウンロード対象のＰＬＣ１において現在、保持・運用されているプログラムが、ダウンロード対象のプログラム（最新版のプログラム等）の祖先に相当するか否かを判定する処理と言える。逆に言えば、最新版のプログラム等が、ダウンロード対象のＰＬＣ１のプログラムの子孫に相当するか否かを判定する処理と言える。尚、プログラムの更新は、祖先から子孫へと世代を重ねることに相当し、子孫は祖先の内容を引き継ぐことが必要とされる。
【００５３】
また、図２のＰＬＣ１の構成について簡単に説明するならば、ＰＬＣ１は通信機能部４１、プログラム実行管理機能部４２等の各種機能部を有する。ここで、ＰＬＣ１は、不図示のＣＰＵ／ＭＰＵ等の演算プロセッサや、メモリ等の不図示の記憶装置も有しており、記憶装置には予め所定のアプリケーションプログラムが記憶されている。上記各種機能部の後述する処理機能は、上記不図示の演算プロセッサが、このアプリケーションプログラムを読出し・実行することにより実現される。
【００５４】
また、上記不図示の記憶装置には、識別情報４３や機械語オブジェクト４４等が記憶される。ＰＬＣ１は、機械語オブジェクト４４を実行することで、例えば不図示の制御対象機器の制御等を行う。また、本例では、特許文献１と同様、機械語オブジェクト４４の更新は、ＰＬＣ１を停止することなく稼働中に行うことを前提とする。
【００５５】
ＰＬＣ１の構成・処理動作は、特許文献１と同様であってよいので、その一部について、以下、簡単に説明する。
通信機能部４１は、上記支援装置１０と上記不図示の通信線を介してデータ送受信等を行う機能部であり、特に上記識別情報付きの機械語オブジェクト２７がダウンロードされてくると、この識別情報を新たな識別情報４３として上書き記憶すると共に、この機械語オブジェクト２７を新たな機械語オブジェクト４４として上記不図示の記憶装置等に記憶する。
【００５６】
支援装置１０は、特許文献１と同様、必要に応じて上記識別情報４３を読み出して、ダウンロード許可判定等を行う。
図３は、上記管理情報（履歴情報１１＋ダウンロード情報１２）の状態遷移例を示す図である。
【００５７】
尚、図３では、簡単の為、ダウンロード情報１２は、任意の一台のＰＬＣ１に対応するダウンロード情報１２のみを示すものとする。
まず、更新版ではない新規のプログラムのソースコード２６が作成された場合、そのコンパイル処理の際に、識別情報を割り当てて、この識別情報を世代‘１’として履歴情報１１に登録する。この履歴情報１１への新規登録時に、新規登録した識別情報１１ｂに対応するダウンロード状態を、全てのＰＬＣについて「未使用」とする。上記の通り、図３では１台のＰＬＣ１についてのみ示すが、例えば図１の例では４台のＰＬＣ１ａ〜１ｄ全てについて「未使用」となることになる。
【００５８】
上記の通り、「未使用」は、その識別情報１１ｂのプログラムが、そのＰＬＣ１の次の更新時にダウンロードされる予定であることを意味しているが、図３の例では、次の更新時となる前に、上記プログラムの更新が行われた場合を示している。この場合、この更新版プログラムのコンパイル処理の際に、識別情報‘0000-0001’が世代‘２’として履歴情報１１に登録される。更に、これに対応するダウンロード情報１２に「未使用」が登録される。更に、既存の世代（ここでは世代‘１’のみである）のダウンロード情報１２は、「未使用」は全て「使用済」に変更する。
【００５９】
尚、上記の通り、「使用済」は、それ以降、そのプログラムはそのＰＬＣ１にダウンロードされることはないことを意味している。そして、一度もＰＬＣ１にダウンロードされることなく「使用済」となるプログラムも、あり得る。
【００６０】
そして、上記の状態のとき、ＰＬＣ１の次のプログラム更新が行われることになったものとする。これは、例えばユーザが任意に指定するが、この例に限らない。よって、この例では、上記世代‘２’の更新版プログラムが、その識別情報‘0000-0001’と共に、ＰＬＣ１にダウンロードされることになる。そして、これに伴って、この識別情報‘0000-0001’に対応するダウンロード情報１２を、「未使用」から「使用中」に変更する。
【００６１】
その後も、同様にして、新たな更新版プログラムが作成される毎に、そのコンパイル処理に伴って、新たな識別情報が新たな世代と共に履歴情報１１に追加登録されると共に、この新たな識別情報１１ｂに対応付するダウンロード情報１２を「未使用」とする。更に、既存世代のダウンロード情報１２のなかで「未使用」となっているものは「使用済」に変更する。
【００６２】
また、ＰＬＣ１のプログラム更新時となる毎に、その時点での最新の世代の更新版プログラム（換言すれば、その識別情報１１ｂに対応するダウンロード情報１２が「未使用」となっている更新版プログラム）を、その識別情報と一緒にＰＬＣ１にダウンロードすると共に、当該ダウンロード情報１２を「未使用」から「使用中」に変更する。更に、それまで「使用中」となっていた古い世代のダウンロード情報１２を、当該「使用中」から「使用済」に変更する。
【００６３】
図示の例では、上記世代‘２’の更新版プログラムをＰＬＣ１にダウンロード後、支援装置１０側において何度も更新版プログラムの作成が行われ、その都度、上記のように管理情報（履歴情報１１＋ダウンロード情報１２）の更新が行われたものとする。そして、その間、ＰＬＣ１のプログラム更新は、行われなかったものとする。
【００６４】
これより、図示のように、上記世代‘２’に対応するダウンロード情報１２が上記「使用中」のままの状態となっており、最新の世代‘ｍ’の識別情報‘0000-000m’に対応するダウンロード情報１２は「未使用」となっており、これら以外の世代全ては、ダウンロード情報１２が「使用済」となっている。
【００６５】
この状態で、ＰＬＣ１のプログラム更新が行われた場合、上記世代‘２’のダウンロード情報１２は上記「使用中」から「使用済」に変更され、上記世代‘ｍ’のダウンロード情報１２は上記「未使用」から「使用中」に変更されることになる。
【００６６】
その後、更に、世代‘ｍ＋１’の更新版プログラムが作成されると、最新の世代‘ｍ＋１’の識別情報‘0000-000m+1’に対応するダウンロード情報１２は、全てのコントローラについて「未使用」となることになる。
【００６７】
尚、上記の通り、図３に示すダウンロード情報１２の遷移は、任意の１台のコントローラについてのみ示すが、実際には他の各コントローラに関しても同様にしてダウンロード情報の遷移が行われることになる。そして、各世代毎に全てのコントローラのダウンロード情報１２が「使用済」となっているか否かを判別することによって、その世代の識別情報が削除可能か否かを判定することになる。すなわち、任意の世代に対応するダウンロード情報１２が全コントローラについて「使用済」となっている場合には、この世代に関する情報は必要ないものと見做して削除する。これは、例えば上記のように、削除対象となった世代１１ａと識別情報１１ｂのレコードを履歴情報１１から削除するものである。これによって履歴情報１１のデータ量を削減できる。但し、この例に限らず、更に、ダウンロード情報１２のなかで削除対象の識別情報１１ｂに対応するレコードも、一緒に削除してもよい。これによって、管理情報のデータ量を削減できる。
【００６８】
例えば、上記管理情報（履歴情報１１＋ダウンロード情報１２）が、例えば、図４に示す状態となった場合には、世代‘１’は削除対象であると判定される。これより、例えば、世代‘１’の識別情報（0000-0000）等と、これに対応するダウンロード情報１２（全て「使用済」）は、削除される。これによって、管理情報のデータ量を削減できる。
【００６９】
また、図示の状態で履歴情報１１から世代‘１’の情報を削除しても、上記特許文献１の発明の動作には、何等問題は生じない。特許文献１の発明の場合、基本的に必要となるのは、「使用中」と「未使用」の情報であるので、図４の例の状態では世代‘１’の情報は削除しても問題ないことになる。尚、これより、図４の例において例えば世代‘２’までも削除した場合、ＰＬＣ１ａ，１ｂ，１ｄについては問題はないが、ＰＬＣ１ｃについては問題があることになる。
【００７０】
ここで、支援装置１０において、上記の通り、コンパイル処理毎に、あるいは任意のＰＬＣ１のプログラム更新（ダウンロード）を行う際に、上記管理情報の更新が行われることになる。これについて、以下、図５、図６を参照して説明する。
【００７１】
コンパイルの際のダウンロード情報１２の更新処理は、概略的には図３で説明したように、新たに登録された識別情報１１ｂに対しては「未使用」に設定し、既存の識別情報１１ｂに対しては「未使用」は「使用済」に変更する処理となる。また、この場合、新たに生成された識別情報が履歴情報１１に登録されることで、全てのコントローラに影響が及ぶため、全てのコントローラに対して上記処理を実施する必要がある。
【００７２】
図５は、コンパイルの際のダウンロード情報の更新処理のフローチャート図である。
尚、図示の処理開始時には、コンパイル処理に伴う履歴情報１１の更新は、既に実行されているものとする。これより、履歴情報１１には新たな識別情報１１ｂが追加されているが、この新規の識別情報１１ｂに対応するダウンロード情報１２は、未登録の状態である。この状態で、図５の処理が実行開始される。
【００７３】
図５の処理では、履歴情報１１から任意の１つの識別情報１１ｂを読み出す毎に（ステップＳ１１）、これを処理対象としてステップＳ１２〜Ｓ１９の処理を実行することを繰り返す。
【００７４】
まず、上記処理対象の識別情報１１ｂが、上記今回追加された新規の識別情報であるか否かを判定する（ステップＳ１２）。これは、例えば上記のように新規の識別情報１１ｂに対応するダウンロード情報１２は、未だ登録されていないことによって、判別可能であるが、他の方法であっても構わない。
【００７５】
処理対象の識別情報１１ｂが、上記新規の識別情報である場合には（ステップＳ１２，ＹＥＳ）、この識別情報１１ｂに対応するダウンロード情報１２を、全てのＰＬＣ１について「未使用」に設定する（ステップＳ１３，Ｓ１４）。そして、ステップＳ１１に戻り、次の処理対象を決定する。但し、全ての世代を処理対象として処理実行済みの場合には（ステップＳ１５，ＹＥＳ）本処理を終了する。
【００７６】
一方、処理対象が既存の識別情報である場合には（ステップＳ１２，ＮＯ）、処理対象の識別情報１１ｂに対応するダウンロード情報１２のうちの１つを読み出して（ステップＳ１６）、読み出したダウンロード情報１２（ダウンロード状態）が「未使用」である場合には（ステップＳ１７，ＹＥＳ）、この「未使用」を「使用済」に変更して（ステップＳ１８）、ステップＳ１９へ移行する。一方、読み出したダウンロード状態が「未使用」以外である場合には（「使用中」または「使用済」である場合には）（ステップＳ１７，ＮＯ）、何も行わずにステップＳ１９へ移行する。
【００７７】
処理対象の識別情報１１ｂに対応するダウンロード情報１２のなかに未処理のダウンロード情報１２がある場合には（ステップＳ１９，ＮＯ）、ステップＳ１６に戻り、上記処理を繰り返す。処理対象のダウンロード情報１２全てについて処理実行したら（ステップＳ１９，ＹＥＳ）、上記ステップＳ１５の処理へ移行する。
【００７８】
図６は、任意のＰＬＣのプログラム更新の際のダウンロード情報の更新処理のフローチャート図である。
任意のＰＬＣ１への任意のプログラムのダウンロードの際には、上述したように、このダウンロード対象のＰＬＣ１に係わるダウンロード情報１２において最新の世代の識別情報に対応するダウンロード状態は、「未使用」から「使用中」に変更する。更に、このＰＬＣ１に係わるダウンロード情報１２において、このＰＬＣ１で運用中であったプログラムの識別情報に対応するダウンロード状態を、「使用中」から「使用済」に変更する。
【００７９】
また、上記のようにこの場合は、ダウンロード対象のＰＬＣ１に係わるダウンロード情報１２のみが更新対象となる。その為に、例えば、上記コントローラ情報１３を利用して、対象コントローラから読み出した識別子（例えば、ＭＡＣアドレス）によって対象コントローラを特定した上で、この対象コントローラに係わるダウンロード情報１２を更新対象とする。
【００８０】
この例に応じて、図６の処理例では、まず、プログラムのダウンロード対象のＰＬＣ１からその識別子（例えば、上記PLC-ID）を読み出すことで、処理対象のコントローラを識別する（ステップＳ２１）。
【００８１】
そして、ダウンロード対象のＰＬＣ１が、新規のコントローラであるか否かを判定する（ステップＳ２２）。これは、例えば、上記読み出した識別子が、上記コントローラ情報１３に登録されていない場合には、新規のコントローラと見做す。当然、この場合には、このコントローラに関するダウンロード情報１２は存在しないことになる。
【００８２】
これより、ダウンロード対象が新規のコントローラである場合には（ステップＳ２２，ＹＥＳ）、下記のステップＳ２３の処理を実行する。
ステップＳ２３の処理は、例えばまず、上記読み出した識別子をコントローラ情報１３のPLC-ID１３ｂに登録する。その際、任意に生成したＰＬＣ名１３ａと対応付けて登録する。更に、このＰＬＣ名１３ａを用いて、新規コントローラに関するダウンロード情報１２を新規作成する。このダウンロード情報１２は、例えば、その時点での最新世代に対してのみ「未使用」とし、それ以外の世代は全て「使用済」とする。尚、ここでは、ＰＬＣ名１３ａにおける例えば‘１ａ’が、ダウンロード情報１２における“ＰＬＣ１ａ”を意味するものとする。
【００８３】
以上のステップＳ２３の処理を実行したら、履歴情報１１から最新世代の識別情報１１ｂを読み出すと共に（ステップＳ２７）、上記ダウンロード対象のＰＬＣ１に係わるダウンロード情報１２における最新世代のダウンロード状態を、「未使用」から「使用中」に変更する（ステップＳ２８）。
【００８４】
尚、特に図示していないが、上記ステップＳ２７で読み出した識別情報に対応する更新版プログラム、すなわち現時点での最新の更新版プログラムを、当該識別情報と一緒に上記ダウンロード対象のＰＬＣ１にダウンロードする処理等も実行される。
【００８５】
一方、上記ダウンロード対象のＰＬＣ１が、新規のコントローラではない場合には（ステップＳ２２，ＮＯ）、上記コントローラ情報１３から読み出した識別子に対応するＰＬＣ名１３ａを取得して、該当するダウンロード情報１２を特定する（ステップＳ２４）。仮に、取得したＰＬＣ名１３ａ＝「ＰＬＣ１ｃ」であったとするならば、図４の例では、図上右から２番目の列のダウンロード情報１２が、特定されることになる。
【００８６】
そして、上記ダウンロード対象のＰＬＣ１から識別情報を読み出して、これが履歴情報１１に登録されているか否かを判定する（ステップＳ２５）。尚、特に図示しないが、もし履歴情報１１に登録されていないならば、上記特許文献１と同様、ダウンロードは許可されない。これより、例えばステップＳ２６に移行することなく、本処理を中断・終了する。
【００８７】
一方、上記読み出した識別情報が履歴情報１１に登録されているならば、この識別情報に対応するダウンロード状態が「使用中」であることを確認したうえで、この「使用中」を「使用済」に変更する（ステップＳ２６）。その後は、上記ステップＳ２７、Ｓ２８の処理を実行して、本処理を終了する。
【００８８】
尚、もし、読み出した識別情報に対応するダウンロード状態が「使用中」ではなかった場合には、例えばエラー表示等を行うが、この例に限らない。
以上、本例のプログラマブルコントローラシステムについて説明したが、この説明の例に限るものではない。例えば、上記説明の例では、その識別情報に対応する全てのダウンロード状態が「使用済」となったか否かを、識別情報等の削除に係わる判定方法としたが、識別情報等の削除に係わる判定方法は、この例に限らない。例えば、図７に示すコントローラ数５１が‘０’になったか否かを、識別情報等の削除に係わる判定方法としてもよい。これについて、以下、図７の具体例を参照して説明する。
【００８９】
図７に示す例では、履歴情報１１の各世代（各識別情報）に対応付けて、コントローラ数５１を格納・管理する。尚、このコントローラ数５１は、ダウンロード情報１２の他の例と見做してもよい。つまり、ダウンロード情報１２の一例が上述したダウンロード状態（「使用中」、「使用済」、「未使用」）であり、ダウンロード情報１２の他の例が図示のコントローラ数５１であると見做しても構わない。
【００９０】
コントローラ数は、初期状態では例えば「ＮＵＬＬ」となっており、その世代（識別情報）のプログラムが、初めてＰＬＣ１にダウンロードされたときに“１”となる。つまり、任意の世代（識別情報）のプログラムがＰＬＣ１にダウンロードされたときに、その世代のコントローラ数がＮＵＬＬ状態であればコントローラを‘１’にし、ＮＵＬＬ以外であればコントローラ数を＋１インクリメントする。
【００９１】
よって、上記コントローラが‘１’となった後は、その世代（識別情報）のプログラムがＰＬＣ１へダウンロードされる毎に、コントローラ数５１は＋１インクリメントされる。一方で、上記ステップＳ２６に相当する処理が行われる毎に、その世代（識別情報１１ｂ）のコントローラ数５１を−１デクリメントする。つまり、各世代（識別情報１１ｂ）に対応するコントローラ数５１は、任意のときにその時点でその世代（識別情報）のプログラムを保持・運用していると見做されるＰＬＣ１の数を意味することになる。
【００９２】
これより、コントローラ数５１がゼロとなった世代の識別情報１１ｂ等は、不要となった古い世代の識別情報等であると判断して、削除するようにする。その際、対応するコントローラ数５１の情報も一緒に削除するようにしてもよい。
【００９３】
このように、方法は様々であってよく、基本的には、ダウンロード情報１２に基づいて、その識別情報１１ｂのプログラムが全てのコントローラについて「現在使用中ではなく且つ今後ダウンロードされることもない」と判定する場合に、該識別情報１１ｂ等を不要な識別情報等と見做して削除するようにすればよい。尚、ダウンロード情報１２は、例えば上記ダウンロード状態や上記コントローラ数５１等であるが、これらの例に限らない。
【００９４】
あるいは、任意のコントローラへプログラムをダウンロードする際、上記特許文献１の判定処理によりダウンロード許可されなかった場合、このコントローラに係わるダウンロード情報１２を、削除するようにしてもよい。この場合、このコントローラのプログラム更新等は、他の支援装置１０が行う状態となっているはずであるので、このコントローラに関する情報は必要なくなったからである。
【００９５】
以上説明したように、本手法のプログラマブルコントローラシステムでは、その支援装置は、例えば一例としては、世代管理された識別情報毎に各コントローラへのダウンロード状態（未使用、使用中、使用済）を示すダウンロード情報を記憶・管理し、新たな更新版プログラムのコンパイル処理実行毎に、あるいは更新版プログラムを任意のコントローラにダウンロードする毎に、ダウンロード情報を更新する。そして、全てのコントローラのダウンロード状態が「使用済」となった世代の識別情報を削除する。
【００９６】
この様な本手法のプログラマブルコントローラシステム、その支援装置によれば、コンパイル毎に生成される固有の識別情報の履歴を管理することにより、稼働中のコントローラを停止することなくプログラムを更新できるシステムに関して、不要となって識別情報を判別して削除することができる。これによって、識別情報の履歴が増大することを防止でき、以って、動作が重くなるといった不安定なことが無くなり、ユーザに対して余計な不安を抱かせることなく、快適な操作性を提供することができる。
【符号の説明】
【００９７】
１（１ａ，１ｂ，１ｃ，１ｄ）  ＰＬＣ（プログラマブルコントローラ）
１０  支援装置
１１  履歴情報
１１ａ  世代
１１ｂ  識別情報
１２  ダウンロード情報
１３  コントローラ情報
１３ａ  ＰＬＣ名
１３ｂ  PLC-ID
２１  ユーザインターフェース機能部
２２  コンパイラ部
２３  識別情報生成部
２４  識別情報管理部
２５  通信機能部
２６  ソースコード
２７  機械語オブジェクト
３０  管理情報記憶部
４１  通信機能部
４２  プログラム実行管理機能部
４３  識別情報
４４  機械語オブジェクト
５１  コントローラ数
【図２】
2016001376.tif 000003
【図４】
2016001376.tif 000004
【図５】
2016001376.tif 000005
【図６】
2016001376.tif 000006
【図７】
2016001376.tif 000007
【図１】
2016001376.tif 000008
【図３】
2016001376.tif 000009
【図８】
2016001376.tif 000010