(57)【要約】【課題】  ＩＯ更新処理において、ＩＯデータが更新されているか否かに関わらず全てのＩＯデータを更新するためにＩＯデータ更新処理に時間がかかり、スキャン時間が長くなってしまうという課題を解決する。【解決手段】  ＩＯチャンネル毎に０で初期化されるカウンタを設け、プログラムブロックを起動したときにこのカウンタに１を加算し、プログラムブロックを停止するときにこのカウンタから１を減算して、ＩＯデータ更新処理の時に、このカウンタの値が０でないときのみＩＯデータを更新するようにした。更新処理が行われないＩＯのデータ更新を行わないので、処理時間を短くすることができる。【選択図】                    図１
2005174042.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを複数のプログラムブロックに分割し、これらのプログラムブロックを実行した後にＩＯデータの更新処理を行う操作を繰り返すプログラマブルコントローラにおいて、
全ての前記プログラムブロックのいずれかでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納される全体ＩＯ更新テーブルと、
前記全体ＩＯ更新テーブル内の前記ＩＯ単位の識別記号毎に設けられ、起動時に第１の値にセットされるカウンタと、
前記プログラムブロック毎に設けられ、そのプログラムブロックでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納されるブロックＩＯ更新テーブルと、
前記プログラムブロックを順番に実行し、前記プログラムブロックを起動するときに、そのプログラムブロックの前記ブロックＩＯ更新テーブルを参照してこのブロックＩＯ更新テーブルに格納された前記ＩＯ単位の識別記号に対応する前記カウンタに第２の値を加算し、前記プログラムブロックを停止するときに、そのプログラムブロックの前記ブロックＩＯ更新テーブルを参照してこのブロックＩＯ更新テーブルに格納された前記ＩＯ単位の識別記号に対応する前記カウンタから前記第２の値を減算する命令実行処理部と、
前記カウンタを参照し、このカウンタが前記第１の値でないときにそのカウンタに対応するＩＯ単位のＩＯデータ更新処理を実行し、前記カウンタの値が前記第１の値であるときに、そのカウンタに対応するＩＯ単位のＩＯデータ更新処理を実行しないＩＯデータ更新処理部と、
を備えたことを特徴とするプログラマブルコントローラ。
【請求項２】
前記カウンタは、前記全体ＩＯ更新テーブルに内蔵されていることを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
前記ＩＯ単位はＩＯチャンネル単位であることを特徴とする請求項１若しくは請求項２記載のプログラマブルコントローラ。
【請求項４】
前記ＩＯ単位はＩＯモジュール単位であることを特徴とする請求項１若しくは請求項２記載のプログラマブルコントローラ。
【請求項５】
前記ＩＯ単位はＩＯ端子単位であることを特徴とする請求項１若しくは請求項２記載のプログラマブルコントローラ。
【請求項６】
前記プログラムブロックは、前記ＩＯ単位毎に分割するようにしたことを特徴とする請求項１若しくは請求項５いずれかに記載のプログラマブルコントローラ。
【請求項７】
複数のプログラムブロックに分割され、これらのプログラムブロックを実行した後にＩＯデータの更新処理を行う操作を繰り返すプログラマブルコントローラにおいて、
全ての前記プログラムブロックのいずれかでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納される全体ＩＯ更新テーブルと、
前記全体ＩＯ更新テーブル内の前記ＩＯ単位の識別記号毎に設けられるフラグと、
前記プログラムブロック毎に設けられ、そのプログラムブロックでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納されるブロックＩＯ更新テーブルと、
前記プログラムブロックを実行する前に全ての前記フラグを第１の値にし、前記ブロックプログラムを実行するときに、そのプログラムブロックの前記ブロックＩＯ更新テーブルを参照してこのブロックＩＯ更新テーブルに格納された前記ＩＯ単位の識別記号に対応する前記フラグを第２の値にする命令実行処理部と、
前記フラグを参照し、このフラグが前記第２の値であるときにそのフラグに対応するＩＯ単位のＩＯデータ更新処理を実行し、前記フラグの値が前記第１の値であるときに、そのフラグに対応するＩＯ単位のＩＯデータ更新処理を実行しないＩＯデータ更新処理部と、
を備えたことを特徴とするプログラマブルコントローラ。
【請求項８】
前記フラグは、前記全体ＩＯ更新テーブルに内蔵されていることを特徴とする請求項７記載のプログラマブルコントローラ。
【請求項９】
前記ＩＯ単位はＩＯチャンネル単位であることを特徴とする請求項７若しくは請求項８記載のプログラマブルコントローラ。
【請求項１０】
前記ＩＯ単位はＩＯモジュール単位であることを特徴とする請求項７若しくは請求項８記載のプログラマブルコントローラ。
【請求項１１】
前記ＩＯ単位はＩＯ端子単位であることを特徴とする請求項７若しくは請求項８記載のプログラマブルコントローラ。
【請求項１２】
前記プログラムブロックは、前記ＩＯ単位毎に分割するようにしたことを特徴とする請求項７若しくは請求項１１いずれかに記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラに関し、特にＩＯデータ更新処理時間を短くすることができるプログラマブルコントローラに関するものである。
【背景技術】
【０００２】
本発明が前提とするようなプログラマブルコントローラに関連する先行技術文献として、次のようなものが挙げられる。
【０００３】
【特許文献１】特開２００３−２７１２１０号明細書
【０００４】
図７にプログラマブルコントローラの構成を示す。プログラマブルコントローラはＣＰＵモジュール４および複数のＩＯモジュール５で構成され、これらのモジュールはバス７で接続されている。高機能ＩＯモジュール６は演算機能を有するＩＯモジュールであり、必要に応じて使用される。
【０００５】
ＩＯモジュール５（または高機能ＩＯモジュール６）はセンサ等（図示せず）から信号を取りこみ、またアクチュエータ（図示せず）に制御信号を出力する。ＣＰＵモジュール４は、その内部に格納されたプログラムを実行してＩＯモジュール５のデータを更新する。
【０００６】
図８にＣＰＵモジュール４の動作を示す。ＣＰＵモジュール４の動作は命令実行処理部が行うプログラム実行処理とＩＯデータ更新処理部が実行するＩＯデータ更新処理に分割することができる。先ず内部に格納されたプログラムを実行するプログラム実行処理が行われ、その後バス７を介してＩＯモジュール５（または高機能ＩＯモジュール６）に対してデータの読み込みと書き出しを行うＩＯデータ更新処理が行われる。
【０００７】
このプログラム実行処理とＩＯデータ更新処理は繰り返し実行される。この繰り返しの１つを１スキャンと言う。また、プログラムは処理単位毎にプログラムブロックに分割されており、このプログラムブロック毎に起動と停止ができるようになっている。
【０００８】
ＩＯデータ更新処理はＩＯ更新テーブルを用いて行われる。図９にＩＯ更新テーブルの構成を示す。ＩＯ更新テーブル８にはプログラム全体で使用されるＩＯモジュールの番号８１と、各ＩＯモジュールに含まれるＩＯチャンネルの番号８２が含まれる。ＩＯデータ更新処理は、スキャン毎にこのＩＯ更新テーブル８で指定されるＩＯモジュールおよびＩＯチャンネルのデータを順番に更新する。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、このようなプログラマブルコントローラには次のような課題があった。ＩＯデータ更新処理は、実際にＩＯデータが更新されたかどうかに関わらず、ＩＯ更新テーブル８にその番号が格納されている全てのＩＯモジュールおよびＩＯチャンネルに対して、スキャン毎にデータ更新処理を実行する。
【００１０】
ＩＯ更新テーブル８にはプログラムでアクセスされる可能性のある全てのＩＯモジュールおよびＩＯチャンネルの番号が格納されている。そのため、そのスキャンでデータが更新されなかったＩＯモジュールおよびＩＯチャンネルに対してもデータ更新処理を実行する。その結果、常に最大のデータがバス７に転送されるためデータ更新処理に時間がかかり、スキャン時間が長くなってしまうという課題があった。
【００１１】
従って本発明が解決しようとする課題は、データが更新されないＩＯのデータ更新処理を行わないことにより、バスの転送量を減らしてスキャン時間を短縮することができるプログラマブルコントローラを提供することにある。
【課題を解決するための手段】
【００１２】
このような課題を達成するために、本発明のうち請求項１記載の発明は、プログラムを複数のプログラムブロックに分割し、これらのプログラムブロックを実行した後にＩＯデータの更新処理を行う操作を繰り返すプログラマブルコントローラにおいて、
全ての前記プログラムブロックのいずれかでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納される全体ＩＯ更新テーブルと、前記全体ＩＯ更新テーブル内の前記ＩＯ単位の識別記号毎に設けられ、起動時に第１の値にセットされるカウンタと、前記プログラムブロック毎に設けられ、そのプログラムブロックでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納されるブロックＩＯ更新テーブルと、前記プログラムブロックを順番に実行し、前記プログラムブロックを起動するときに、そのプログラムブロックの前記ブロックＩＯ更新テーブルを参照してこのブロックＩＯ更新テーブルに格納された前記ＩＯ単位の識別記号に対応する前記カウンタに第２の値を加算し、前記プログラムブロックを停止するときに、そのプログラムブロックの前記ブロックＩＯ更新テーブルを参照してこのブロックＩＯ更新テーブルに格納された前記ＩＯ単位の識別記号に対応する前記カウンタから前記第２の値を減算する命令実行処理部と、前記カウンタを参照し、このカウンタが前記第１の値でないときにそのカウンタに対応するＩＯ単位のＩＯデータ更新処理を実行し、前記カウンタの値が前記第１の値であるときに、そのカウンタに対応するＩＯ単位のＩＯデータ更新処理を実行しないＩＯデータ更新処理部とを備えたものである。ＩＯ更新処理の時間を短縮できる。
【００１３】
請求項２記載の発明は、請求項１記載の発明において、前記カウンタを前記全体ＩＯ更新テーブルに内蔵するようにしたものである。構成が簡単になる。
【００１４】
請求項３記載の発明は、請求項１若しくは請求項２記載の発明において、前記ＩＯ単位はＩＯチャンネル単位であることを特徴としたものである。
【００１５】
請求項４記載の発明は、請求項１若しくは請求項２記載の発明において、前記ＩＯ単位はＩＯモジュール単位であることを特徴としたものである。
【００１６】
請求項５記載の発明は、請求項１若しくは請求項２記載の発明において、前記ＩＯ単位はＩＯ端子単位であることを特徴としたものである。
【００１７】
請求項６記載の発明は、請求項１若しくは請求項５いずれかに記載の発明において、前記プログラムブロックは、前記ＩＯ単位毎に分割するようにしたものである。データ更新するＩＯ単位の数を削減することができる。
【００１８】
請求項７記載の発明は、複数のプログラムブロックに分割され、これらのプログラムブロックを実行した後にＩＯデータの更新処理を行う操作を繰り返すプログラマブルコントローラにおいて、
全ての前記プログラムブロックのいずれかでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納される全体ＩＯ更新テーブルと、前記全体ＩＯ更新テーブル内の前記ＩＯ単位の識別記号毎に設けられるフラグと、前記プログラムブロック毎に設けられ、そのプログラムブロックでＩＯデータが更新される可能性のあるＩＯ単位の識別記号が格納されるブロックＩＯ更新テーブルと、前記プログラムブロックを実行する前に全ての前記フラグを第１の値にし、前記プログラムブロックを実行するときに、そのプログラムブロックの前記ブロックＩＯ更新テーブルを参照してこのブロックＩＯ更新テーブルに格納された前記ＩＯ単位の識別記号に対応する前記フラグを第２の値にする命令実行処理部と、前記フラグを参照し、このフラグが前記第２の値であるときにそのフラグに対応するＩＯ単位のＩＯデータ更新処理を実行し、前記フラグの値が前記第１の値であるときに、そのフラグに対応するＩＯ単位のＩＯデータ更新処理を実行しないＩＯデータ更新処理部とを備えたものである。ＩＯ更新処理の時間を短縮できる。
【００１９】
請求項８記載の発明は、請求項７記載の発明において、前記フラグを前記全体ＩＯ更新テーブルに内蔵するようにしたものである。構成が簡単になる。
【００２０】
請求項９記載の発明は、請求項７若しくは請求項８記載の発明において、前記ＩＯ単位はＩＯチャンネル単位であることを特徴としたものである。
【００２１】
請求項１０記載の発明は、請求項７若しくは請求項８記載の発明において、前記ＩＯ単位はＩＯモジュール単位であることを特徴としたものである。
【００２２】
請求項１１記載の発明は、請求項７若しくは請求項８記載の発明において、前記ＩＯ単位はＩＯ端子単位であることを特徴としたものである。
【００２３】
請求項１２記載の発明は、請求項７若しくは請求項１１いずれかに記載の発明において、前記プログラムブロックは、前記ＩＯ単位毎に分割するようにしたものである。データ更新するＩＯ単位の数を削減することができる。
【発明の効果】
【００２４】
以上説明したことから明らかなように、本発明によれば次のような効果がある。
請求項１，２，３，４、５および請求項６の発明によれば、ＩＯ単位毎にカウンタを設け、プログラムブロックを起動したときにこのカウンタに第２の値を加算し、プログラムブロックを停止したときにこのカウンタから第２の値を減算するようにして、カウンタの値が第１の値でないときのみ、そのカウンタに対応するＩＯのＩＯデータ更新処理を行うようにした。
【００２５】
停止しているプログラムブロックで使用しているＩＯ単位のＩＯデータ更新処理を行わないようにすることにより、データ更新するＩＯ単位の数を削減することができる。そのため、バスのデータ転送量を減らして更新処理に要する時間を短くすることができ、スキャン時間を短縮することができるという効果がある。
【００２６】
また、プログラムブロックをＩＯ単位毎に分割することによって、複数のプログラムブロックでデータ更新するＩＯ単位の数を減らすことができるので、データ更新に要する時間をさらに削減することができるという効果もある。
【００２７】
請求項７，８，９，１０、１１および請求項１２の発明によれば、ＩＯ単位毎にフラグを設け、スキャンの最初にこのフラグを第１の値にして、プログラムブロックを実行するときにそのフラグを第２の値にするようにして、フラグが第２の値のＩＯ単位のみ、そのフラグに対応するＩＯ単位のＩＯデータ更新処理を行うようにした。
【００２８】
実行しないプログラムブロックで使用しているＩＯ単位のＩＯデータ更新処理を行わないようにすることにより、データ更新するＩＯ単位の数を削減することができる。そのため、バスのデータ転送量を減らして更新処理に要する時間を短くすることができ、スキャン時間を短縮することができるという効果がある。また、カウンタを使用する場合に比べて構成が簡単になるという効果もある。
【００２９】
さらに、プログラムブロックをＩＯ単位毎に分割することによって、複数のプログラムブロックでデータ更新するＩＯ単位の数を減らすことができるので、データ更新に要する時間をさらに削減することができるという効果もある。
【発明を実施するための最良の形態】
【００３０】
以下本発明を図面を用いて詳細に説明する。なお、背景技術で説明したように、この実施例でもプログラムは処理単位毎にプログラムブロックに分割され、これらのプログラムブロックは個々に起動・停止ができるようになっている。また、この実施例でも、図８に示すように命令実行処理部でプログラム実行処理を行った後にＩＯデータ更新処理部でＩＯデータ更新処理を行うスキャンを繰り返す。
【００３１】
さらに、この実施例では１つの全体ＩＯ更新テーブルと、プログラムブロック毎に設けられるブロックＩＯ更新テーブルを用いてＩＯデータ更新処理を実行する。
【００３２】
図１は全体ＩＯ更新テーブルの構成を示す図である。この全体ＩＯ更新テーブルはプログラム全体でアクセスする可能性のあるＩＯモジュールおよびＩＯチャンネルの番号および各ＩＯチャンネル番号に付随するカウンタが格納されている。ＩＯモジュール番号、ＩＯチャンネル番号は識別記号として用いている。
【００３３】
図１において、１は全体ＩＯ更新テーブルである。１１はＩＯモジュールの番号であり，プログラム全体でアクセスする可能性のあるＩＯモジュールの番号が格納されている。図１ではＩＯモジュール１からｎまでの番号が格納されている。
【００３４】
１２はＩＯチャンネルの番号であり、各ＩＯモジュールに含まれ、かつプログラム全体でアクセスする可能性のあるＩＯチャンネル番号が格納されている。図１ではＩＯモジュール２について、１からｍまでのＩＯチャンネル番号が格納されている。
【００３５】
なお、この図ではＩＯモジュール２に含まれるＩＯチャンネルの番号しか記載されていないが、実際にはＩＯモジュール１およびＩＯモジュール３〜ｎについても、そのＩＯモジュールに含まれ、かつプログラム全体でアクセスする可能性のあるＩＯチャンネルの番号が格納される。１３はカウンタであり、各ＩＯチャンネル番号毎に設けられる。図２には記載されていないＩＯチャンネル番号についても、それぞれカウンタが設けられる。
【００３６】
このカウンタの値を調べることにより、そのＩＯチャンネルがアクセスされたかどうかを知ることができる。なお、このカウンタ１３は全体のプログラムが起動するときに、ゼロに初期化されるものとする。
【００３７】
図２に、各プログラムブロック毎に設けられるブロックＩＯ更新テーブルの構成を示す。このブロックＩＯ更新テーブルには、そのプログラムブロックでアクセスされる可能性のある全てのＩＯモジュールおよびＩＯチャンネルの番号が格納されている。
【００３８】
図２において、２はブロックＩＯ更新テーブルである。２１はＩＯモジュールの番号であり、そのプログラムブロックでアクセスする可能性があるＩＯモジュールの番号が格納されている。図２では、ＩＯモジュール１〜ｐの番号が格納されている。
【００３９】
２２はＩＯチャンネルの番号であり、各ＩＯモジュールに含まれ、かつそのプログラムブロックでアクセスする可能性のあるＩＯチャンネルの番号が格納されている。図２では、ＩＯモジュール２について、ＩＯチャンネル１〜ｑの番号が格納されている。
【００４０】
なお、図２には記載されていないが、ＩＯモジュール１，３〜ｐについても、そのＩＯモジュールに含まれ、かつそのプログラムブロックでアクセスされる可能性のあるＩＯチャンネルの番号が格納される。
【００４１】
図３に各プログラムブロックが起動、停止するときの処理のフローチャートを示す。図３において、（Ａ）はプログラムブロックが起動するとき、（Ｂ）は停止するときのフローである。起動するときは、そのプログラムブロックに属するブロックＩＯ更新テーブル２を参照して、登録されている全てのＩＯチャンネルについて、全体更新テーブルのカウンタ１３に１を加算する。
【００４２】
プログラムブロックを停止するときは、そのプログラムブロックに属するブロックＩＯ更新テーブル２を参照して、登録されている全てのＩＯチャンネルについて、全体更新テーブルのカウンタ１３から１を減算する。
【００４３】
すなわち、プログラムブロックが起動すると、そのプログラムブロックでアクセスする可能性のあるＩＯチャンネルに付属するカウンタ１３のカウント値が１増加し、プログラムブロックが停止すると１減少する。
【００４４】
１つのＩＯチャンネルは複数のプログラムブロックでアクセスされる場合があるので、カウンタ値がゼロでないとそのＩＯチャンネルはどれかのプログラムブロックでアクセスされている可能性があり、ゼロであると全てのプログラムブロックでアクセスされている可能性がないことがわかる。
【００４５】
図４はＩＯデータ更新処理のフローを示すフローチャートである。図４において、（４−１）でＩＯチャンネルに付属しているカウンタ１３の値がゼロであるかをチェックする。そして、ゼロでないと（４−２）でそのＩＯチャンネルのデータ更新処理を行い、ゼロであると（４−３）でそのＩＯチャンネルのデータ更新処理を行わない。そして、（４−４）で全てのカウンタ１３をチェックしたかを確認し、チェックしていれば終了し、チェックしていないカウンタ１３があると、（４−１）に戻る。
【００４６】
前述したように、アクセスされる可能性のないＩＯチャンネルに付属するカウンタのカウント値はゼロになる。従って、図４フローチャートに示す処理を行うことにより、アクセスする可能性のないＩＯチャンネルのデータ更新処理を行わないようにすることができる。そのため、データ転送量を削減することができ、スキャン時間を短縮することが可能になる。なお、カウンタの初期値はゼロでなくてもよく、加算、減算する値は１でなくてもよい。
【００４７】
図５および図６の本発明の他の実施例を示す。図５は全体ＩＯ更新テーブルの構成である。なお、図１と同じ要素には同一符号を付し、説明を省略する。図５において、３は全体ＩＯ更新テーブルであり、ＩＯモジュールの番号１１およびＩＯチャンネルの番号１２が格納されている。
【００４８】
３１はフラグであり、図１実施例のカウンタ１３の代わりに各ＩＯチャンネルに設けられる。このフラグ３１は１ビットのレジスタであり、オンとオフの２つの値を取る。なお、ブロックＩＯ更新テーブルは図２と同じなので、説明を省略する。
【００４９】
図６にこの実施例の動作を説明するためのフローチャートを示す。このフローチャートは１スキャンの動作を表したものである。最初に（６−１）で全てのフラグ３１をオフにする。次に、（６−２）でプログラム実行処理を行う。
【００５０】
このとき、各プログラムブロック中でそのプログラムブロックのブロックＩＯ更新テーブルを参照して、そのブロック更新テーブルに登録されているＩＯチャンネルに付属するフラグ３１をオンにする。また、新たにプログラムブロックが起動されたときも、同様にフラグ３１をオンにする。
【００５１】
プログラムの実行処理が終了すると、ＩＯデータ更新処理を行う。（６−３）で全体更新テーブル３のフラグ３１がオンになっているかを順番に調べて、オンであれば（６−４）でそのチャンネルのＩＯデータ更新処理を行い、オフであると（６−５）で更新処理を行わない。
【００５２】
次に、（６−６）で全てのフラグ３１をチェックしたかを調べて、チェックしていないフラグがあると（６−３）に戻り、全てのフラグ３１がチェック済みであるとＩＯデータ更新処理を終了して、次のスキャンを実行する。このようにすることにより、アクセスする可能性のないＩＯチャンネルの更新処理を行わないようにすることができるので、スキャン時間を短縮することができる。なお、フラグのオン、オフは逆であってもよい。
【００５３】
なお、これらの実施例では複数のプログラムブロックがＩＯチャンネルを共用していると、共用している全てのプログラムブロックが停止しないとそのＩＯチャンネルのデータ更新処理が行われることになる。従って、ＩＯチャンネル毎にプログラムブロックを作成して、複数のプログラムブロックがＩＯチャンネルを共用しないようにした方がＩＯ更新処理の時間を短縮することができる。
【００５４】
なお、これらの実施例ではＩＯチャンネル毎にカウンタ１３あるいはフラグ３１を設けるようにしたが、ＩＯモジュールあるいはＩＯ端子毎、あるいはその他のＩＯ単位毎にカウンタ１３あるいはフラグ３１を設けるようにしてもよい。
【図面の簡単な説明】
【００５５】
【図１】全体ＩＯ更新テーブルの構成図である。
【図２】ブロックＩＯ更新テーブルの構成図である。
【図３】ブロックプログラムの起動、停止時の処理を示すフローチャートである。
【図４】ＩＯ更新処理のフローチャートである。
【図５】他の実施例の全体ＩＯ更新テーブルの構成図である。
【図６】他の実施例のＩＯ更新処理のフローチャートである。
【図７】プログラマブルコントローラの構成図である。
【図８】プログラマブルコントローラの動作を示すフローチャートである。
【図９】従来のＩＯ更新テーブルの構成図である。
【符号の説明】
【００５６】
１、３  全体ＩＯ更新テーブル
１１、２１  ＩＯモジュールの番号
１２、２２  ＩＯチャンネルの番号
１３  カウンタ
２  ブロックＩＯ更新テーブル
３１  フラグ
【図１】
2005174042.tif 000003
【図２】
2005174042.tif 000004
【図３】
2005174042.tif 000005
【図４】
2005174042.tif 000006
【図５】
2005174042.tif 000007
【図６】
2005174042.tif 000008
【図７】
2005174042.tif 000009
【図８】
2005174042.tif 000010
【図９】
2005174042.tif 000011