(57)【特許請求の範囲】
【請求項１】
ＣＰＵユニットと、通信ユニットと、周辺ユニットとが、内部バスを介して接続されたプログラマブルコントローラであって、
前記通信ユニットは、前記内部バスに対するアクセス権の獲得／開放をするバスマスタ機能を持ち、
前記通信ユニットは、前記周辺ユニットのメモリに格納されるＩＯデータを記憶保持するキャッシュメモリを有し、そのキャッシュメモリの構造は、前記周辺ユニットのユニット単位で分割されており、その分割されたユニット単位が更新チェックや、キャッシュメモリのＩＯリフレッシュの実行単位に設定され、
前記通信ユニットは、
前記キャッシュメモリに前記周辺ユニットのＩＯデータを記憶させてから予め設定された有効期間を経過したか否かを判断する判断手段と、
前記通信ユニットが外部からのメッセージを受信した際に、そのメッセージで指定された周辺ユニットに対応する、キャッシュメモリに格納されたＩＯデータの保持期間についての前記判断手段の判断結果が、有効期間を経過していない場合には、前記キャッシュメモリに保存されているその周辺ユニットのＩＯデータに基づいてレスポンスデータを作成し、有効期間を経過している場合には、前記内部バスのアクセス権を獲得して前記周辺ユニットにアクセスして更新されたＩＯデータを取得し、その取得したＩＯデータに基づいてレスポンスデータを作成する手段と、
を備えたことを特徴とするプログラマブルコントローラ。
【請求項２】
前記通信ユニットが、前記取得したＩＯデータに基づいて前記キャッシュメモリのＩＯリフレッシュを実行する手段を備えたことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
キャッシュメモリに記憶保持されたＩＯデータを使用するか否か判断を行なうことなく指定された周辺ユニットにアクセスし、その周辺ユニットのメモリに格納されたＩＯデータを取得し、取得したＩＯデータに基づいてレスポンスを返す処理を実行するキャッシュＯＦＦモードを備えたことを特徴とする請求項１または２に記載のプログラマブルコントローラ。
【請求項４】
プログラマブルコントローラ用の通信ユニットであって、
プログラマブルコントローラの内部バスに対するアクセス権の獲得／開放をするバスマスタ機能を持ち、
プログラマブルコントローラを構成する周辺ユニットのメモリに格納されるＩＯデータを記憶保持するキャッシュメモリを有し、
前記キャッシュメモリの構造は、前記周辺ユニットのユニット単位で分割されており、その分割されたユニット単位が更新チェックや、キャッシュメモリのＩＯリフレッシュの実行単位に設定され、
前記キャッシュメモリに前記周辺ユニットのＩＯデータを記憶させてから予め設定された有効期間を経過したか否かを判断する判断手段と、
前記通信ユニットが外部からのメッセージを受信した際に、そのメッセージで指定された周辺ユニットに対応する、キャッシュメモリに格納されたＩＯデータの保持期間についての前記判断手段の判断結果が、有効期間を経過していない場合には、前記キャッシュメモリに保存されているその周辺ユニットのＩＯデータに基づいてレスポンスデータを作成し、有効期間を経過している場合には、前記内部バスのアクセス権を獲得して前記周辺ユニットにアクセスして更新されたＩＯデータを取得し、その取得したＩＯデータに基づいてレスポンスデータを作成する手段と、
を備えたことを特徴とする通信ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラマブルコントローラおよび通信ユニットに関するものである。
【背景技術】
【０００２】
ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）におけるネットワークシステムは、生産設備の制御を司る１または複数のＰＬＣ（プログラマブルコントローラ）と、そのＰＬＣにより動作が制御される機器とが、制御系のネットワークに接続される。それらＰＬＣと機器は、その制御系のネットワークを介してサイクリックに通信を行なうことで、ＩＯデータの送受を行ない、生産設備を制御する。
【０００３】
ＰＬＣは、制御プログラムに基づいて演算実行するＣＰＵユニット、センサやスイッチなどの入力機器を接続してそれらのオン・オフ信号を入力信号として取り込む入力ユニット、アクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット、ネットワークに接続された他の装置とデータの送受を行なう通信ユニット、各ユニットに電源を供給する電源ユニット、などの複数のユニットを組み合わせることにより構成されている。
【０００４】
また、ＦＡでは、複数台のＰＬＣなどの制御装置をネットワークに接続し、それら複数の制御装置間で協調制御を行なう場合がある。協調制御を行なう場合、たとえばＰＬＣに接続された入出力機器のデータを、ネットワークを介して各ＰＬＣ間で相互にデータ交換することが行われる。ＰＬＣ間でデータを交換する方式としては、ＰＬＣから他のＰＬＣへデータ交換要求のメッセージを送信し、そのレスポンスとしてＰＬＣ入出力ユニットのデータを受信するコマンドレスポンス方式によるデータ交換や、予め設定された情報に基づいて、定期的に各ＰＬＣがＩ／Ｏデータの送受信を行うようなデータリンク方式がある。
【０００５】
ネットワークに接続されたＰＬＣ同士がデータを送受する場合、ＰＬＣの構成ユニットの一つである通信ユニットを介して行なわれる。そして、通信ユニットは、データを送受信する機能を備えるだけであるため、いずれの方式においても、データリンクのＩ／Ｏアクセス処理、メッセージ送信のＩ／Ｏデータの取得など、入出力ユニットのメモリへのアクセスが必要な処理は、実行できない。そこで、係るメモリへのアクセスはバスマスタであるＣＰＵユニットが実行可能であるため、通信ユニットは、ＣＰＵユニットに対してＩ／Ｏアクセスの要求を通知する必要があった。
【０００６】
そのため、Ｉ／Ｏデータの交換等を行なう都度、ＣＰＵユニットでＩ／Ｏアクセス処理が行なわれるため、高頻度なデータ交換の場合、ＣＰＵユニットの負荷が大きくなり、本来のＣＰＵユニットの機能である制御に影響が生じるおそれがある。従って、入出力ユニット等の周辺ユニットへのアクセスにＣＰＵユニットを介することを必要とするデータ交換方式では、ユーザは、ＰＬＣの高速制御と、ネットワーク上の高速・高頻度なデータ交換を両立させることができなかった。
【０００７】
一方、特許文献１や特許文献２に示すように、複数のＣＰＵユニットを備え、それらのＣＰＵユニットが独立して各入出力ユニットをアクセスすることが可能なマルチバスマスタ機能を備えたプログラマブルコントローラが開示されている。この発明を利用して、通信ユニットが入出力ユニットのＩ／Ｏメモリ等にアクセスする機能を備えることで、ＣＰＵユニットの負担が減る。
【特許文献１】特開平５−１７３９８５号公報
【特許文献２】特開平５−１７３９８６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、データ交換サイクルの高速化、データの大容量化が要求される背景においては、データ交換時の通信装置のバスアクセスによる急激なバストラフィックの増大という課題が発生し、通信ユニット、ＣＰＵユニット両方への影響が大きく、通信ユニットがＣＰＵユニットを介さず、直接周辺ユニットにアクセスできるだけでは、上記の課題を解決することはできない。
【０００９】
この発明の目的は、ネットワークに接続された他の装置からのデータ交換要求にリアルタイムに応答するとともに、内部バスのトラフィックを軽減し、プログラマブルコントローラの制御への影響を低減できるプログラマブルコントローラおよび通信ユニットを提供することにある。
【課題を解決するための手段】
【００１０】
この発明によるプログラマブルコントローラは、ＣＰＵユニットと、通信ユニットと、周辺ユニットとが、内部バスを介して接続されたプログラマブルコントローラであって、通信ユニットは、内部バスに対するアクセス権の獲得／開放をするバスマスタ機能を備えるようにした。ＣＰＵユニットもバスマスタ機能を備えているため、このプログラマブルコントローラはマルチバスマスタ機能を備えたものとなる。そして、通信ユニットは、周辺ユニットのメモリに格納されるＩＯデータを記憶保持するキャッシュメモリを有し、そのキャッシュメモリの構造は、周辺ユニットのユニット単位で分割されており、その分割されたユニット単位が更新チェックや、キャッシュメモリのＩＯリフレッシュの実行単位に設定した。さらに、通信ユニットは、前記キャッシュメモリに前記周辺ユニットのＩＯデータを記憶させてから予め設定された有効期間を経過したか否かを判断する判断手段と、前記通信ユニットが外部からのメッセージを受信した際に、そのメッセージで指定された周辺ユニットに対応する、キャッシュメモリに格納されたＩＯデータの保持期間についての前記判断手段の判断結果が、有効期間を経過していない場合には、前記キャッシュメモリに保存されているその周辺ユニットのＩＯデータに基づいてレスポンスデータを作成し、有効期間を経過している場合には、前記内部バスのアクセス権を獲得して前記周辺ユニットにアクセスして更新されたＩＯデータを取得し、その取得したＩＯデータに基づいてレスポンスデータを作成する手段と、を備えるようにした。
【００１１】
周辺ユニットは、実施形態では入出力ユニットに対応するが、制御ユニットその他のユニットでも良い。また、ＣＰＵユニットや通信ユニット（マルチバスマスタ機能の有無を問わず）のメモリに対応するキャッシュメモリを備えても良い。また、プログラマブルコントローラが複数の通信ユニットを備えている場合、少なくとも１つの通信ユニットが上記の機能を備えていればよい。
【００１２】
本発明では、周辺ユニットのメモリの内容が更新されていない場合には、メッセージを受信した際に、キャッシュメモリに格納されたＩＯデータに基づいてレスポンスを返すため、高速なデータ交換サイクルを実現することができる。さらに、メッセージの受信の都度バスのアクセス権を獲得して周辺ユニットのメモリにアクセスし、ＩＯデータを取得する必要がないので、バストラフィックを軽減することができる。また、係るデータ交換を通信ユニットが実行するため、ＣＰＵユニットの負荷が軽減される。
【００１３】
さらに、キャッシュのＩＯリフレッシュ等は、メッセージプロトコルに含まれる宛先情報に基づいてアクセス対象を判断し、該当する周辺ユニットのみに対してのＩＯリフレッシュやダイレクトアクセスを行なうため、メッセージ送信側は、あたかも、周辺ユニットに直接接続しているように見える。そして、メッセージ送信側が、ばらばらのタイミングで異なる周辺ユニットのデータ交換要求のメッセージを送信したとしても、それぞれの応答に対して、適切なリアルタイム性の確保と、最低限のＩＯリフレッシュで応答ができる。
【００１５】
有効期間を適宜に設定することで、キャッシュメモリに記憶保持されているＩＯデータと、実際の周辺ユニットのメモリに格納されたＩＯデータとが同一になる確率を可及的に高めることができる。これにより、キャッシュメモリに基づいて作成したレスポンスデータは、実I/Oデータに近い値となる。しかも、メッセージを受信する都度、更新の有無を確認する必要がないので、簡易となる。
【００１６】
通信ユニットは、取得したＩＯデータに基づいてキャッシュメモリのＩＯリフレッシュを実行する手段を備えるとよい。キャッシュメモリのＩＯリフレッシュのタイミングは任意に設定できるが、このように、メッセージの受信に伴いＩＯデータを取得した際に行なうことで、無用なＩＯリフレッシュを無くすことができる。すなわち、データ交換要求があまりこないものに対して頻繁にＩＯリフレッシュを行なうことがなくなり、バストラフィックの低減を図ることができる。
【００１７】
さらに本発明は、キャッシュメモリに記憶保持されたＩＯデータを使用するか否か判断を行なうことなく指定された周辺ユニットにアクセスし、その周辺ユニットのメモリに格納されたＩＯデータを取得し、取得したＩＯデータに基づいてレスポンスを返す処理を実行するキャッシュＯＦＦモードを備えるとよい。
【００１８】
また、本発明の通信ユニットは、プログラマブルコントローラ用の通信ユニットであって、プログラマブルコントローラの内部バスに対するアクセス権の獲得／開放をするバスマスタ機能を持つ。そして、プログラマブルコントローラを構成する周辺ユニットのメモリに格納されるＩＯデータを記憶保持するキャッシュメモリを有し、そのキャッシュメモリの構造は、周辺ユニットのユニット単位で分割されており、その分割されたユニット単位が更新チェックや、キャッシュメモリのＩＯリフレッシュの実行単位に設定する。さらに、前記キャッシュメモリに前記周辺ユニットのＩＯデータを記憶させてから予め設定された有効期間を経過したか否かを判断する判断手段と、前記通信ユニットが外部からのメッセージを受信した際に、そのメッセージで指定された周辺ユニットに対応する、キャッシュメモリに格納されたＩＯデータの保持期間についての前記判断手段の判断結果が、有効期間を経過していない場合には、前記キャッシュメモリに保存されているその周辺ユニットのＩＯデータに基づいてレスポンスデータを作成し、有効期間を経過している場合には、前記内部バスのアクセス権を獲得して前記周辺ユニットにアクセスして更新されたＩＯデータを取得し、その取得したＩＯデータに基づいてレスポンスデータを作成する手段と、を備える。
【発明の効果】
【００１９】
本発明では、ネットワークに接続された他の装置からのデータ交換要求にリアルタイムに応答するとともに、内部バスのトラフィックを軽減し、プログラマブルコントローラの制御への影響を低減できる。
【発明を実施するための最良の形態】
【００２０】
図１は、本発明のＰＬＣを含むネットワークシステムの一例を示している。このネットワークシステムは、複数のネットワークに、パソコン，ＰＬＣ，その他の機器等が接続されている。図１では、便宜上各ネットワーク１，２に接続されるＰＬＣ１０のみ接続されている状態を示している。第１ネットワーク１には、３つのＰＬＣ１０（＃０，＃１，＃２）が接続され、第２ネットワーク２には、３つのＰＬＣ１０（＃０，＃３，＃４）が接続されている。ここで、ＰＬＣ１０に付随して記載された“＃ｎ”は、ネットワークにおけるＰＬＣのノード番号である。
【００２１】
ＰＬＣ１０は、ラダープログラムなどの実行を行なうＣＰＵユニット１１と、ネットワークに接続するための通信ユニット１２と、入出力ユニット１３や制御ユニット１４などの各種のユニットと、から構成される。入出力ユニットは、例えば基本Ｉ／Ｏユニットや高機能Ｉ／Ｏユニットなどがある。制御ユニット１４は、モーションコントローラユニットその他の高機能ユニットなどがある。ＰＬＣ１０は、これら各ユニットをバックプレーンの所定のスロットに装着することで構成される。各ユニットは、スロットに装着することでバックプレーン内部に配置された内部バスに接続され、バスを介してのユニット間のデータ通信が可能となる。
【００２２】
ＰＬＣ１０は、通信ユニット１２によりネットワークに接続される。そして、ネットワーク上のＰＬＣ１０間では、メッセージによってデータ交換が行われる。リクエストメッセージの送信タイミングは、通信ユニット自身が予め設定された周期に基づいて定周期で送信する場合と、プログラムで記述されたメッセージ送信実行のタイミングでイベント的に送信する場合がある。
【００２３】
本実施形態では、ＣＰＵユニット１１と通信ユニット１２が、バスマスタとなり、バス権を確保して他のユニットのメモリにアクセス可能となる。その他のユニットは、周辺ユニットとなる。２つのネットワーク１，２に接続されているＰＬＣ１０（＃０）を例にすると、１つのＣＰＵユニット１１（＃０）と、２つの通信ユニット１２（＃１，＃２）と、２つの入出力ユニット１３（＃１，＃２）と、１つの制御ユニット１４とを備えている。もちろん、図示省略しているが、電源ユニットも備えている。
【００２４】
図３は、そのＰＬＣ１０（＃０）の各ユニットの内部構成（ハードウェアブロック）を示している。ＣＰＵユニット１１は、ツール装置と接続するためのツールインタフェース１１ａと、そのツールインタフェース１１ａを介してツール装置からダウンロードされたユーザプログラム等を演算実行するＭＰＵ１１ｂと、ＭＰＵ１１ｂが演算実行する際にワークメモリとして使用したり他のユニットのＩＯデータ等を記憶するメモリ１１ｄと、ＰＬＣの内部バス（ＰＬＣバス，バックプレーンバス）１０ａに接続し他のユニットとデータ通信を行なうバスインタフェース１１ｃと、を備えている。バスインタフェース１１ｃは、ＡＳＩＣで構成される。各処理部の基本的な機能は、従来のものと同様である。
【００２５】
通信ユニット１２は、通信インタフェース１２ａと、ＭＰＵ１２ｂと、バスインタフェース１２ｃと、キャッシュメモリ１２ｄと、を備えている。通信インタフェース１２ａは、ネットワーク１，２に接続され、ネットワーク１，２に対するデータの送受を行なう。通信コントローラ１２ｅは、ＭＰＵ１２ｂからの指示に従い、ネットワーク１，２に接続された他のＰＬＣ宛の送信メッセージを作成し、通信インタフェース１２ａを介して送信したり、通信インタフェース１２ａを介して取得したメッセージを解析し、所定の受信処理を実行したりする。
【００２６】
ＭＰＵ１２ｂは、通信コントローラ１２ｅから取得したデータ要求メッセージに基づき必要なデータを取得すると共にレスポンスデータを生成し通信コントローラ１２ｅに返したり、定時的或いはＣＰＵユニット１１からの送信要求に伴い送信メッセージを生成し通信コントローラ１２ｅに渡したりする。
【００２７】
バスインタフェース１２ｃは、ＰＬＣの内部バス１０ａに接続し他のユニットとデータ通信を行なう。このバスインタフェース１２ｃは、ＡＳＩＣで構成される。上述した通信ユニット１２における各処理部の基本的な機能は、従来のものと同様である。
【００２８】
ここで本実施形態では、通信ユニット１２にバスマスタ機能を与えた。これにより、図４に示すように、ＭＰＵ１２ｂは、バスインタフェース１２ｃを介して自己のキャッシュメモリ１２ｄに対してデータの読み書きができるとともに、内部バス１０ａ経由で他の周辺ユニット（例えば入出力ユニット１３）のメモリ１３ｄにアクセスしてデータの読み書きを行なうことができる。もちろん、バスマスタは、周辺ユニットだけでなく、バスインタフェースを介して他のバスマスタのメモリに直接アクセス可能であるため、ＭＰＵ１２ｂは、ＣＰＵユニット１１のメモリ１１ｄや他の通信ユニット１１のキャッシュメモリ１２ｄに対してもアクセスしてデータの読み書きが行なえる。
【００２９】
また、このように複数のユニットにバスマスタ機能を設けたことで、その複数のバスマスタの内部バス１０ａへのアクセスが競合した場合、バスインタフェースでアービトレーションされる。アービトレーションの方法は、アクセス要求がなされた順番で処理を行なう。また、バスインタフェースにおけるアービトレーションは、予めバスマスタの優先度を設定することにより、優先度が高く設定されたバスマスタからのアクセスを優先的に実行するようにしてもよい。
【００３０】
入出力ユニット１３は、ＩＯインタフェース１３ａと、ＭＰＵ１３ｂと、バスインタフェース１３ｃと、メモリ１３ｄと、を備えている。ＩＯインタフェース１３ａは、接続されたＩ／Ｏ機器とデータの送受を行なう。Ｉ／Ｏ機器が入力機器の場合、ＩＯインタフェース１３ａは、その入力機器からのＩＯデータをＭＰＵ１３ｂに渡す。Ｉ／Ｏ機器が出力機器の場合、ＩＯインタフェース１３ａは、ＭＰＵ１３ｂからの指示に従いその出力機器に対してＩＯデータを出力する。ＭＰＵ１３ｂは、バスインタフェース１３ｃを介してメモリ１３ｄにアクセスし、ＩＯデータの読み書きをしたり、ＩＯインタフェース１３ａを介してＩ／Ｏ機器とデータの送受を行なったりする。
【００３１】
同様に、制御ユニット１４は、ＩＯインタフェース１４ａと、ＭＰＵ１４ｂと、バスインタフェース１４ｃと、メモリ１４ｄと、を備えている。ＩＯインタフェース１４ａは、接続された制御機器とデータの送受を行なう。ＭＰＵ１４ｂは、バスインタフェース１４ｃを介してメモリ１４ｄにアクセスしてＩＯデータの読み書きをしたり、ＩＯインタフェース１４ａを介して制御機器とデータの送受を行ない制御機器の動作を制御したりする。
【００３２】
入出力ユニット１３や制御ユニット１４は、バスマスタ機能を備えていないため、他のユニットのメモリにアクセスすることはできない。これら入出力ユニット１３と制御ユニット１４における各処理部の基本的な機能は、従来のものと同様である。
【００３３】
図２に示すように、本発明では、通信ユニット１２は、バスマスタ機能を備えているため、予め他のユニット（例えば入出力ユニッ１３）のメモリ１３ｄにアクセスし、そのメモリ１３ｄに格納されたＩＯデータを読み出すと共に、自己のキャッシュメモリ１２ｄに読み出したＩＯデータを格納しておく。
【００３４】
これにより、他のＰＬＣ（＃１，＃２）から、ＰＬＣ１０（＃０）に対して入出力ユニット１３（＃１，＃２）のＩＯデータについてのデータ要求メッセージが発せられた場合、そのメッセージを受信した通信ユニット１２は、自己のキャッシュメモリ１２ｄに予め保存していた各ＩＯデータを読み出し、レスポンスを返す。その結果、データ要求メッセージを受信する都度、入出力ユニットのメモリにアクセスする必要が無く、内部バス１０ａのバストラフィックを軽減しつつ、高速なデータ交換を行なえる。
【００３５】
図４は、バスマスタとなる通信ユニット１２のソフトウェア機能の相関図を示している。通信物理層は、通信インタフェース１２ａに対応し、バス物理層は、バスインタフェース１２ｃに対応する。（１）通信ドライバは、外部との通信を行うドライバであり、ネットワーク層の各通信プロトコルでカプセル化されたリクエストメッセージの送受信を行なう。
（２）ＶＰＮサーバ／クライアントは、送受信するデータの宛先の制御の解析を行なう。すなわち、通信インタフェース１２ａで受信したメッセージを解析して宛先ユニットＩＤを取得し、プロキシに通知する。受信したメッセージに対するレスポンスを返す相手先アドレスも取得し、管理する。また、データ送信時は、宛先ユニットＩＤから送信メッセージを作成する。
（３）プロキシは、キャッシュメモリ１２ｄのＩＯリフレッシュの制御を行う。すなわち、他のＰＬＣからのデータ要求メッセージをＶＰＮサーバ／クライアント経由で受信した場合、要求を受けたデータが、キャッシュメモリ１２ｄに格納されているものが最新のものか否かを判断し、最新のものの場合にはキャッシュメモリ１２ｄに格納されているデータを取得し、最新のものでない場合にはその要求を受けたデータが格納された実際のユニットのメモリにアクセスして取得し、レスポンスを返すようにする。この最新のものか否かの判断アルゴリズムは、後述する。
（４）キャッシュメモリ管理部は、ユニットＩＤに対応するキャッシュメモリエリアの物理アドレス、および、そのデータを管理する。プロキシからの要求に従い、キャッシュデータの送受をする。
（５）バスマスタ管理部は、ユニットＩＤに対応するバスの物理アドレスを管理する。管理する物理アドレスは、更新レジスタのアドレス、Ｉ／Ｏメモリエリアのアドレスなどである。
（６）バスドライバは、バスアクセスのためのドライバであり、内部バスのアクセス権を取得して内部バス１０ａを介してのデータの読み書きを行ない、処理終了後に取得した内部バスのアクセス権を離す。
【００３６】
次に、メモリマップおよび、メモリの割付方法について説明する。図６は、バスマスタ（通信ユニット１２）のＭＰＵ１２ｂからのメモリの見え方と、周辺ユニット（入出力ユニット１３）のＭＰＵ１３ｂからのメモリの見え方と、を示している。ＰＬＣ１０（＃０）では、入出力ユニット１３は２つ備えていたが、ここでは３つの入出力ユニット１３（＃１，＃２，＃３）を備えた例を示している。
【００３７】
入出力ユニット１３はバスマスタでないため、そのＭＰＵ１３ｂは、自己のメモリ１３ｄに格納されたＩＯデータ（Ｉ／Ｏメモリ＃ｎ）と、そのＩＯデータの更新の有無を示す更新レジスタ＃ｎとが見え、他のユニットのメモリに格納されたデータは見えない。
【００３８】
通信ユニット１２はバスマスタであるので、そのＭＰＵ１２ｂは、自己のキャッシュメモリ１２ｄに格納されたデータ（各入出力ユニットのＩＯデータのキャッシュデータ）と、他の各ユニット（入出力ユニット１３）のメモリ１３ｄに格納されたデータ（ＩＯデータと、更新レジスタ）と、を見ることができる。
【００３９】
周辺ユニットのメモリは、バス上にマッピングされる。すなわち、各ユニットのＩ／Ｏメモリの割付は、ユニット番号順にユニークに設定し、各ユニットの更新レジスタの割付はスロット位置から順にユニークに割り付ける。具体的には、
Ｉ／Ｏメモリ割付＝開始アドレス＋ユニット番号＊１ユニットのメモリ容量
更新レジスタ割付＝開始アドレス＋スロット番号＊更新レジスタ容量
により設定される。ここで、バス上にマッピングされるＩ／Ｏメモリ割付の場合の開始アドレスは、バスアクセスエリア先頭アドレスとし、更新レジスタ割付の場合の開始アドレスは更新レジスタ先頭アドレスとする。
【００４０】
さらに、本実施形態では、バス上にマッピングされるＩ／Ｏメモリの割付方法と、キャッシュメモリ１２ｄにおける各Ｉ／Ｏメモリの割付方法を同じにしている。つまり、あるＩＯデータに対する読み書きを行なう場合、データ開始アドレスをバスアクセスエリア先頭アドレスに設定すると実際の入出力ユニット１３のメモリ１３ｄにアクセスし、該当のＩＯデータの読み書きを行なうことができ、開始アドレスをキャッシュメモリのメモリ先頭アドレスに設定するとキャッシュメモリ１２ｄにアクセスし、該当のＩＯデータの読み書きを行なうことができる。
【００４１】
図７，図８は、周辺ユニット（入出力ユニット１３）のメモリ１３ｄのメモリマップを示している。図７に示すように、メモリ１３ｄは、Ｉ／Ｏメモリエリアと更新レジスタエリアに分けられる。Ｉ／Ｏメモリエリアは、実I／Ｏ機器のIＯデータが格納されるエリアである。更新レジスタエリアは、各バスマスタユニット専用の更新レジスタからなる。更新レジスタは、Ｉ／Ｏメモリエリアに格納されたＩＯデータが更新されたか否かの情報を格納する。バスマスタユニットが周辺ユニットにアクセスする場合に使用する更新レジスタは、バスマスタユニットのスロット位置から一意に決まる。すなわち、仮にバスマスタが最大８個設定される場合、図７に示すように、バスマスタ＃０用更新レジスタ，バスマスタ＃１用更新レジスタ，……バスマスタ＃７用更新レジスタというように８個のレジスタがスロット番号の順に割り付けられる。図７において、バスマスタ＃ｎ用更新レジスタは、スロット番号＝ｎに装着されたバスマスタユニットが使用する。
【００４２】
また、１つの更新レジスタのデータサイズは１Ｗである。バスマスタ更新レジスタは、その１Ｗのデータのうち、２ｂｉｔを意味のあるデータとして使用する。バスマスタ、もしくは周辺ユニットが周辺ユニットのメモリのデータを更新した場合は、対応するｂｉｔが”１”となる。
【００４３】
バスマスタ側の更新ｂｉｔは、バスマスタ内のＭＰＵがバス経由で周辺ユニットのメモリを更新した際に、その周辺ユニットにおける自己用の更新レジスタのバスマスタ側更新ｂｉｔに“１”を書き込む。周辺ユニットはバスマスタ側更新ｂｉｔが“１”となりＩ／Ｏメモリエリアが更新されたことを知り、周辺ユニットがデータを刈り取った場合、周辺ユニットの該当ｂｉｔに０を書き込む。
【００４４】
同様に、周辺ユニット側装置側更新ｂｉｔは、周辺ユニット内のＭＰＵがその周辺ユニットのメモリを更新した際に、周辺ユニットが全てのバスマスタ用更新レジスタの周辺ユニット側更新ｂｉｔに“１”を書き込む。バスマスタがデータを刈り取った場合、バスマスタが自己用の更新レジスタの周辺ユニット側更新ｂｉｔに“０”を書き込む。バスマスタ用更新レジスタにおけるバスマスタ側更新ｂｉｔと、周辺ユニット側更新ｂｉｔとの“０／１”の組み合わせから、下記表の４つの状態がある。
【表１】
0004766252.tif 000002
【００４５】
図８に示すように、Ｉ／Ｏメモリエリアは、実機のＩＯデータを格納する“Ｉ／Ｏデータ領域”と、そのＩ／Ｏデータ領域内のデータのアドレスを特定するための“ＩＯデータ領域情報”とを備えている。このＩＯデータ領域情報は、ＩＯメモリエリアの先頭に格納されており、“ＩＮデータサイズ”，“ＩＮデータ領域先頭アドレス”，“ＯＵＴデータサイズ”，“ＯＵＴデータ領域先頭アドレス”の４つの領域が設定されている。バスマスタは、このＩＯデータ領域情報を用いてＩＮデータの取得や、ＯＵＴデータの出力を行なう。このＩＯデータ領域情報は、周辺ユニットごとに定義され、周辺ユニットが初期設定時に設定する。
【００４６】
図９は、バスマスタ（通信ユニット１２）のＭＰＵ１２ｂおよび周辺ユニット（入出力ユニット１３）のＭＰＵ１３ｂが、その周辺ユニット（入出力ユニット１３）のメモリ１３ｄに対してアクセスする際のアクセス方向を示している。“ＩＯデータ領域情報”に対しては、周辺ユニットである入出力ユニット１３のＭＰＵ１３ｂが書き込み、バスマスタである通信ユニット１２のＭＰＵ１２ｂが読み出す。“ＩＮデータ領域”に対しては、入出力ユニット１３のＭＰＵ１３ｂが書き込み、通信ユニット１２のＭＰＵ１２ｂが読み出す。一方、“ＩＮデータ領域”に対しては、通信ユニット１２のＭＰＵ１２ｂが書き込み、入出力ユニット１３のＭＰＵ１３ｂが読み出す。そして、“更新レジスタ領域”に対しては、通信ユニット１２のＭＰＵ１２ｂと入出力ユニット１３のＭＰＵ１３ｂとが、共に読み書きをする。
【００４７】
この“更新レジスタ領域”に対する書き込みは、以下のようになる。バスマスタ（通信ユニット１２）から周辺ユニット（入出力ユニット１３）のＯＵＴデータ領域を更新した場合、ＭＰＵ１２ｂは更新レジスタ領域の全レジスタに対して、バスマスタ側更新ｂｉｔに１（ＯＮ）を書き込む。バスマスタがＩＮデータ領域のデータを取得する場合、ＭＰＵ１２ｂは該当する更新レジスタのみを読み込む。そして、バスマスタがＩＮデータ領域の更新データを刈り取った場合、ＭＰＵ１２ｂは、該当する更新レジスタの周辺ユニット側更新ｂｉｔのみに対して０（ＯＦＦ）を書き込む。
【００４８】
一方、入出力ユニット１３がＩＮデータ領域を更新する場合、ＭＰＵ１３ｂは更新レジスタ領域の全レジスタに対して、周辺ユニット側更新ｂｉｔに１（ＯＮ）を書き込む。実際には、図１６に示すフローチャートのように、ＭＰＵ１３ｂは、メモリのアクセス権を獲得（Ｓ１１）後に、入力データの書き込み（Ｓ１２）と周辺ユニット側更新ｂｉｔの書き込み（Ｓ１３）をし、その後、メモリのアクセス権を解放する（Ｓ１４）処理を実行する。
【００４９】
入出力ユニット１３がＯＵＴ領域のデータを取得する場合、ＭＰＵ１３ｂは該当する更新レジスタのみを読み込む。入出力ユニット１３がＯＵＴ領域の更新データを刈り取った場合、ＭＰＵ１３ｂは該当する更新レジスタのバスマスタ側更新ｂｉｔに対して０（ＯＦＦ）を書き込む。実際には、図１７に示すフローチャートのように、ＭＰＵ１３ｂは、メモリのアクセス権を獲得（Ｓ２１）後に、出力データの刈り取り（Ｓ２２）とバスマスタ側更新ｂｉｔの書き込み（Ｓ２３）をし、その後、メモリのアクセス権を解放する（Ｓ２４）処理を実行する。
【００５０】
このようにすることで、バスマスタのＭＰＵは、バスマスタ側更新ｂｉｔを確認することで、キャッシュメモリ１２ｄに格納されたキャッシュデータが最新のもの（入出力ユニットのメモリに格納されているものと同じ内容）であるか否かを判断できる。
【００５１】
図１０は、キャッシュメモリ１２ｄのメモリマップを示している。図示するように、周辺ユニットのユニット番号順に、Ｉ／Ｏメモリ用キャッシュメモリエリアを割り付けている。これにより、バスマスタのＭＰＵ１２ｂが各周辺ユニットのＩ／Ｏデータをキャッシュする領域は、対象となる周辺ユニットのユニット番号から一意に決まる。I／Ｏメモリ用キャッシュエリアの先頭アドレスは、キャッシュメモリ管理機能において一元的に管理される。具体的なアドレスは、
Ｉ／Ｏメモリ割付＝開始アドレス＋ユニット番号＊１ユニットのメモリ容量
により求められる。
【００５２】
次に、具体的なメッセージの送受信の手順を説明しつつ、各ユニットの機能を説明する。メッセージ送信には、ＣＰＵユニット１１がリクエストメッセージを生成して送信するものと、通信ユニット１２が定周期でリクエストメッセージを生成して送信するものの２種類がある。
【００５３】
図１１は、ＣＰＵユニット１１がメッセージ送信を行う場合の動作フローを示している。メッセージ送信側のＰＬＣ１０のＣＰＵユニット１１は、ユーザプログラムの演算実行に伴いリクエストメッセージを生成し（Ｔ１）、そのメッセージを通信ユニット１２に転送する（Ｔ２）。通信ユニット１２は、ＣＰＵユニット１１からのリクエストメッセージを取得すると（Ｔ３）、その取得したメッセージをネットワークへ送信する（Ｔ４）。このＴ１からＴ４の各処理は、基本的に従来のものと同様である。
【００５４】
メッセージ受信側のＰＬＣ１０は、通信ユニット１２がメッセージを受信する（Ｔ５）と、キャッシュ制御を実行し（Ｔ６）、レスポンスを生成する（Ｔ７）。つまり、通信ユニット１２のＭＰＵ１２ｂは、キャッシュメモリ１２ｄに格納された現在のキャッシュデータを利用可能か否かを判断し、利用可能な場合にはそのキャッシュデータに基づいてレスポンスを生成し、利用できない場合には内部バス経由で指定された他のユニットのメモリにアクセスしてデータを取得し、取得したデータに基づいてレスポンスを生成する。実際には、その取得したデータをキャッシュメモリに格納し、更新されたキャッシュメモリの内容に基づいてレスポンスを生成する。次いで、ＭＰＵ１２ｂは、生成されたレスポンスを送信する（Ｔ８）。なお、この受信側の詳細な処理は、後述する。
【００５５】
メッセージ送信側のＰＬＣ１０の通信ユニット１２は、ネットワークを介してレスポンスが返送されてくるのを待つ。そして、通信ユニット１２は、レスポンスを受信した（Ｔ９）ならば、受信したレスポンスを解析し、周辺ユニット或いはＣＰＵユニットのメモリにデータを反映させ、内部バス１０ａ経由でＣＰＵユニット１１に対して完了通知を送る（Ｔ１０）。
【００５６】
図１２は、上記のリクエストメッセージとそれに対するレスポンスメッセージのデータ構造を示している。リクエストメッセージは、ネットワークヘッダと、メッセージ種別と、キャッシュＯＮ／ＯＦＦと、宛先ＩＤと、送信元ＩＤと、を備えている。
【００５７】
ネットワークヘッダは、各ネットワークに応じた通信プロトコルで規定されたヘッダであり、通信コントローラが生成する。メッセージ種別は、リクエストメッセージか、レスポンスメッセージか、また、リクエスト内容が、データリード要求か、データライト要求かを表す。キャッシュＯＮ／ＯＦＦは、ネットワークで接続された他のＰＬＣでのキャッシュアクセス方法を指定する。これがＯＦＦの場合、受信側は必ず実機のメモリに格納されたＩＯメモリデータを読み取り、レスポンスデータを返すようになる。つまり、図５のソフトウェア機能ブロック図では、プロキシを介することなく、“通信ドライバ−ＶＰＮサーバ／クライアント−バスドライバ”の経路でデータの送受を行なうことになる。宛先ＩＤと送信元ＩＤとは、ともに「ＰＬＣのノードアドレス＋ユニット番号」で表される。ＰＬＣのノードアドレスは、ネットワーク上でＰＬＣ固有に割り当てられる番号であり、この番号でネットワーク上のＰＬＣを一意に特定できる。
【００５８】
ユニークに割り当てられ、ユニット番号は、ＰＬＣを構成する各ユニットごとに固有に割り当てされ、ＰＬＣのメモリエリアにも割り当てることができる。これにより、ネットワーク上に存在するＣＰＵユニット，通信ユニット並びに、周辺ユニットは、すべて個別のＩＤ（ユニットＩＤ）を持つことになる。
【００５９】
図１１におけるＴ１０のデータ反映処理は、具体的には図１３に示すフローチャートを実行する。まず受信したレスポンスから、宛先ＩＤを取り出す（Ｓ１）。宛先ＩＤは、ＰＬＣのノードアドレスと該当ユニットのユニット番号の組み合わせからなる。
【００６０】
次いで、ＭＰＵ１２ｂは、宛先ＩＤのユニット番号から、宛先ユニットの物理アドレスを算出するとともに（Ｓ２）、内部バスのアクセス権を取得する（Ｓ３）。そして、ＭＰＵ１２ｂは、算出した物理アドレスに取得したレスポンスデータのＩＯメモリデータを書き込む（Ｓ４）。これにより、リクエストメッセージで要求したデータが所望のメモリに書き込まれる。その後、ＭＰＵ１２ｂは、取得した内部バスのアクセス権を解放し、データ反映処理を完了する（Ｓ５）。
【００６１】
図１４は、通信ユニット１２が定周期でリクエストメッセージを送信する場合の動作フローを示している。定周期で送信するリクエストメッセージは、サイクリック受信制御情報として所定の記憶エリアに記憶保持される（図１５参照）。そこで、ＭＰＵ１２ｂは、送信周期になったならば、その記憶保持されたリクエストメッセージを取得し（Ｔ１１）、その取得したメッセージをネットワークへ送信する（Ｔ１２）。なお、サイクリック通信制御情報は、通信ユニットに対してツール装置などから設定される。
【００６２】
メッセージ受信側のＰＬＣ１０は、通信ユニット１２がメッセージを受信する（Ｔ５）と、キャッシュ制御を実行し（Ｔ６）、レスポンスを生成し（Ｔ７）、生成されたレスポンスを送信する（Ｔ８）。
【００６３】
メッセージ送信側のＰＬＣ１０の通信ユニット１２は、Ｔ１２のリクエストメッセージの送信が完了（ＡＣＫの受信等）したならば、ネットワークを介してレスポンスが返送されてくるのを待つ（Ｔ１３）。受信の有無は、ＭＰＵ１２ｂとは別に動作する通信コントローラがレスポンスを受信すると、受信フラグをＯＮにするので、このＴ１３の判断は、係る受信フラグがＯＮか否かにより行なう。なお、送信したリクエストメッセージに対するレスポンスを処理した後、未処理のレスポンスがない場合にはＴ１３の分岐判断がＮｏとなり、Ｔ１１に飛び、次の定周期のリクエストメッセージの送信のための処理を行なう。
【００６４】
そして、通信ユニット１２のＭＰＵ１２ｂは、受信フラグがＯＮ（Ｔ１３でＹｅｓ）になると、レスポンスを受信するとともに、受信したレスポンスを解析する（Ｔ１４）。そして、周辺ユニット或いはＣＰＵユニットのメモリにデータを反映させ、内部バス経由でＣＰＵユニット１１に対して完了通知を送る（Ｔ１０）。
【００６５】
次に、メッセージ受信側の動作を説明する。図１８から図２０は、データ要求のメッセージを受信した通信ユニットの機能を説明するフローチャートである。また、図２１は、それらのフローチャートをプロトコルレベルで記載したものである。
【００６６】
まず、通信ドライバは、メッセージを受信すると、ネットワークヘッダ等のメッセージ中の不要なデータを削除した後、ＶＰＮサーバ／クライアントに渡す（Ｓ３１）。ＶＰＮサーバ／クライアントは、通信ドライバから渡されたメッセージ中の宛先ＩＤからユニット番号を取得し、バスの物理アドレスと、キャッシュ物理アドレスを求める（Ｓ３２）。さらに、キャッシュモード（ＯＮ／ＯＦＦ）を取得し（Ｓ３３）、そのモードの内容を確認する（Ｓ３４）。
【００６７】
そして、モードがキャッシュＯＮの場合、図１８に示すように、プロキシはリアルタイムモードを実行する。つまり、宛先ユニットの更新レジスタを取得し（Ｓ３５）、更新レジスタの周辺ユニット側更新ｂｉｔが１になっているか否かを判断する（Ｓ３６）。ｂｉｔが０の場合（Ｓ３６がＮｏ）、宛先ユニットのメモリに格納されたデータと、それに対応するキャッシュメモリ１２ｄに格納されたデータが同じであるため、プロキシは、キャッシュメモリ１２ｄからデータを読み出す。一方、ｂｉｔが1の場合（Ｓ３６でＮｏ）には、宛先ユニットについてのキャッシュメモリのＩＯリフレッシュを行なう（Ｓ３７）。つまり、プロキシは、キャッシュ物理アドレスとばす物理アドレスをＩ／Ｏドライバに渡し、Ｉ／Ｏドライバが取得しアドレスに従ってバス状のＩ／Ｏメモリから該当するデータを読み込むと共に、キャッシュメモリに書き込む。これにより、ＩＯリフレッシュ実行後のキャッシュメモリの内容は実機のメモリと同一内容となる。その後、プロキシは、キャッシュメモリ１２ｄからデータを読み出す（Ｓ３８）。プロキシは、この読み出しデータをＶＰＮサーバ／クライアントに渡す。
【００６８】
ＶＰＮサーバ／クライアントは、プロキシから渡されたデータに基づきレスポンスデータを作成し、通信ドライバに渡す（Ｓ３９）。通信ドライバは、受け取ったレスポンスデータをネットワークに送信する（Ｓ４０）。
【００６９】
つまり、この例では、実際に周辺装ユニットデータが更新されているかどうかを、更新レジスタの値をチェックすることで確認し、更新されていなければ、キャッシュメモリのデータをレスポンスする。逆に、更新されている場合は、キャッシュメモリのＩＯリフレッシュを行う。
【００７０】
Ｓ３１のメッセージ受信処理が、図１１，図１４のＴ５に対応する。同じく、Ｓ３９とＳ４０がそれぞれＴ７とＴ８に対応する。そして、Ｓ３２からＳ３８の一連の処理が、Ｔ６のキャッシュ制御に対応する。
【００７１】
図１９は、キャッシュ制御の変形例である。この例では、ＩＯデータをレスポンス時に、キャッシュメモリのデータをレスポンスするか、キャッシュメモリをＩＯリフレッシュしてからレスポンスするかを、各キャッシュメモリのＩ／Ｏメモリ領域ごとに設定された有効期間に応じて判断する。つまり、プロキシは、宛先のキャッシュの有効期間を取得し（Ｓ４５）、対象となるＩＯメモリ領域のキャッシュデータが有効期間を経過したか否かを判断し（Ｓ４６）、超過していた場合（Ｓ４６でＹｅｓ）はキャッシュメモリのＩＯリフレッシュを行なった（Ｓ３７）後、有効期間のカウントをリセットする（Ｓ４９）。そして、プロキシは、有効期間経過前、或いはＩＯリフレッシュ後に、キャッシュメモリからデータを読み出す（Ｓ３８）。プロキシは、この読み出しデータをＶＰＮサーバ／クライアントに渡す。なお、有効期間は、キャッシュメモリの各ＩＯメモリ毎（ユニット毎）に設定できる。
【００７２】
ＶＰＮサーバ／クライアントは、プロキシから渡されたデータに基づきレスポンスデータを作成し、通信ドライバに渡す（Ｓ３９）。通信ドライバは、受け取ったレスポンスデータをネットワークに送信する（Ｓ４０）。
【００７３】
一方、処理ステップＳ３４の分岐判断で、モードがキャッシュＯＦＦとなっていた場合には、図２０に示すフローチャートを実行する。すなわち、キャッシュＯＦＦの場合、実際の周辺ユニットのメモリアドレスに格納されたデータに基づいてレスポンスを返すことから、バスのアクセス権を獲得し（Ｓ６５）、周辺ユニットにアクセスしその周辺ユニットのメモリアドレスからデータを読み込んだ後（Ｓ６６）、バスのアクセス権を開放する（Ｓ６７）。その他の処理は、上述したものと同じである。
【００７４】
図２２，図２３は、本発明の別の実施形態の要部を示している。この実施形態では、１つのリクエストメッセージにおける宛先として複数の周辺ユニットを指定できようにしている。係る機能を実現するため、図２２に示すように、リクエストメッセージは、宛先ＩＤと送信元ＩＤのペアを複数格納することができるようにした。これに伴い、レスポンスメッセージも、宛先ＩＤ，送信元ＩＤ，データサイズ，ＩＯメモリデータの組（１台のユニット分）をひとまとめとして、複数組分を格納できるようにした。
【００７５】
この実施形態の受信側通信ユニットは、図２３に示すフローチャートを実行する機能を有する。すなわち、処理ステップＳ３１からＳ３４までは、上述した実施形態と同様である。そして、処理ステップＳ３４の分岐判断でリクエストメッセージで指定されたモード（キャッシュＯＮ／ＯＦＦ）に従い、所定のキャッシュ制御処理を実行する（Ｓ７０）。つまり、“図１８のＳ３５からＳ３８”，“図１９のＳ４５，Ｓ４６，Ｓ３７，Ｓ４９，Ｓ３８”，“図２０のＳ６５からＳ６７”のいずれかの処理を実行する。
【００７６】
その後、ＶＰＮサーバ／クライアントは、レスポンスデータを作成し（Ｓ３９）、未処理の宛先ＩＤが残っているか否かを判断し（Ｓ７１）、残っている場合には処理ステップＳ３２に戻り次の宛先ＩＤ取り出し、Ｓ３３，Ｓ３４，Ｓ７０，Ｓ３９の一連の処理を実行する。このとき、レスポンスデータの作成処理（Ｓ３９）では、作成する都度、それまでに作成していたレスポンスデータ（宛先ＩＤ，送信元ＩＤ，データサイズ，Ｉ／Ｏメモリデータ）の後ろに連結する。
【００７７】
そして、リクエストメッセージで指定された全ての宛先ＩＤについてのレスポンスデータを生成したならば、通信ドライバはレスポンスデータを送信する（Ｓ４０）。
【図面の簡単な説明】
【００７８】
【図１】本発明のプログラマブルコントローラを含むネットワークシステムの一例を示す図である。
【図２】データ交換の一例を示す図である。
【図３】ＰＬＣ１０（＃０）の各ユニットの内部構成を示すブロック図である。
【図４】各ＭＰＵのメモリアクセスを説明する図である。
【図５】通信ユニットのソフトウェア機能図である。
【図６】各ユニットのＭＰＵからみたメモリの見え方の一例を示す図である。
【図７】周辺ユニット（入出力ユニット）のメモリのデータ構造の一例を示す図である。
【図８】Ｉ／Ｏメモリエリアのデータ構造の一例を示す図である。
【図９】周辺ユニット（入出力ユニット）のメモリに対するバスマスタと周辺ユニットのＭＰＵのアクセスを説明する図である。
【図１０】キャッシュメモリのデータ構造の一例を示す図である。
【図１１】メッセージの送受信を説明する動作フローである。
【図１２】メッセージのデータ構造の一例を示す図である。
【図１３】受信したレスポンスの反映処理を示すフローチャートである。
【図１４】メッセージの送受信を説明する動作フローである。
【図１５】サイクリック受信制御情報の一例を示す図である。
【図１６】入力データ反映処理を示すフローチャートである。
【図１７】出力データ反映処理を示すフローチャートである。
【図１８】メッセージ受信側の機能を説明するフローチャートである。
【図１９】メッセージ受信側の機能を説明するフローチャートである。
【図２０】メッセージ受信側の機能を説明するフローチャートである。
【図２１】メッセージ受信側の処理を説明する図である。
【図２２】別の実施形態におけるメッセージのデータ構造の一例を示す図である。
【図２３】別の実施形態におけるメッセージ受信側の機能を説明するフローチャートである。
【符号の説明】
【００７９】
１０  ＰＬＣ
１１  ＣＰＵユニット
１２  通信ユニット
１３  入出力ユニット
１４  制御ユニット
【図１】
0004766252.tif 000003
【図２】
0004766252.tif 000004
【図３】
0004766252.tif 000005
【図４】
0004766252.tif 000006
【図５】
0004766252.tif 000007
【図６】
0004766252.tif 000008
【図７】
0004766252.tif 000009
【図８】
0004766252.tif 000010
【図９】
0004766252.tif 000011
【図１０】
0004766252.tif 000012
【図１１】
0004766252.tif 000013
【図１２】
0004766252.tif 000014
【図１３】
0004766252.tif 000015
【図１４】
0004766252.tif 000016
【図１５】
0004766252.tif 000017
【図１６】
0004766252.tif 000018
【図１７】
0004766252.tif 000019
【図１８】
0004766252.tif 000020
【図１９】
0004766252.tif 000021
【図２０】
0004766252.tif 000022
【図２１】
0004766252.tif 000023
【図２２】
0004766252.tif 000024
【図２３】
0004766252.tif 000025