(57)【特許請求の範囲】
【請求項１】
制御装置により制御される設備の動作をコンピュータで３次元機構モデルによりシミュレーションする設備のシミュレーション方法において、
前記設備を構成する複数の設備装置のうちの一つをオペレータが対象装置として選択する対象装置選択ステップと、
前記対象装置のシミュレーション上の動作を示す動作プログラムをオペレータが作成し、格納する動作プログラム入力ステップと、
前記動作プログラムに基づいて前記対象装置の動作を当該対象装置単体でシミュレーションする単体シミュレーションステップと、
前記単体シミュレーションステップの結果に問題があるか否かを判定する判定ステップと、
前記判定ステップで前記単体シミュレーションステップの結果に問題がないと判定されたとき、前記動作プログラムおよび関連情報を機構属性情報として登録する属性情報作成登録ステップと、
前記設備を構成する設備装置およびその設備装置が行う動作を、シミュレーション動作を行うべき順序に従って、オペレータが選択する動作順序選択ステップと、
前記動作順序選択ステップにて選択された動作の順序を記憶する順序記憶ステップと、
前記動作順序選択ステップにて選択された動作の順序に基づいて前記属性情報作成登録ステップにて登録された動作プログラムの実行タイミングを自動的に編集するタイミング情報設定ステップと、
前記順序記憶ステップで記憶された動作の順序および前記タイミング情報設定ステップにより編集された実行タイミングに従って前記設備のオフラインシミュレーションを行うオフラインシミュレーション実行ステップと、
を含むことを特徴とする設備のシミュレーション方法。
【請求項２】
請求項１記載の設備のシミュレーション方法であって、
前記設備を実際に制御する制御装置との間で前記設備装置を動作させるための動作指令信号と前記設備装置の動作結果を示す動作結果信号とを交換するＩ／Ｏ状態情報交換ステップと、
前記動作指令信号および動作結果信号を前記動作プログラムに対応付ける対応情報をオペレータが入力する対応情報入力ステップと、
前記対応付けられた動作指令信号に基づいて前記動作プログラムを実行するとともに前記動作プログラムの実行結果に応じて前記対応付けられた動作結果信号を出力するオンラインシミュレーション実行ステップと、
前記オンラインシミュレーション実行ステップによるシミュレーション動作をモニタするシミュレーション動作モニタステップと、
前記モニタしたオンラインシミュレーションでのシミュレーション動作と前記オフラインシミュレーションでのシミュレーション動作とを比較して、その比較の結果を表示する比較結果表示ステップと、
を含むことを特徴とする設備のシミュレーション方法。
【請求項３】
制御装置により制御される設備の動作をコンピュータで３次元機構モデルによりシミュレーションする設備のシミュレーションプログラムにおいて、
前記設備を構成する複数の設備装置のうちの一つをオペレータが対象装置として選択する対象装置選択手段と、
前記対象装置のシミュレーション上の動作を示す動作プログラムをオペレータが作成し、格納する動作プログラム入力手段と、
前記動作プログラムに基づいて前記対象装置の動作を当該対象装置単体でシミュレーションする単体シミュレーション手段と、
前記単体シミュレーション手段の結果に問題があるか否かを判定する判定手段と、
前記判定手段で前記単体シミュレーション手段の結果に問題がないと判定されたとき、前記動作プログラムおよび関連情報を機構属性情報として登録する属性情報作成登録手段と、
前記設備を構成する設備装置およびその設備装置が行う動作を、シミュレーション動作を行うべき順序に従って、オペレータが選択する動作順序選択手段と、
前記動作順序選択手段にて選択された動作の順序を記憶する順序記憶手段と、
前記動作順序選択手段にて選択された動作の順序に基づいて前記属性情報作成登録手段にて登録された動作プログラムの実行タイミングを自動的に編集するタイミング情報設定手段と、
前記順序記憶手段で記憶された動作の順序および前記タイミング情報設定手段により編集された実行タイミングに従って前記設備のオフラインシミュレーションを行うオフラインシミュレーション実行手段と、
を含むことを特徴とする設備のシミュレーションプログラム。
【請求項４】
請求項３記載の設備のシミュレーションプログラムであって、
前記設備を実際に制御する制御装置との間で前記設備装置を動作させるための動作指令信号と前記設備装置の動作結果を示す動作結果信号とを交換するＩ／Ｏ状態情報交換手段と、
前記動作指令信号および動作結果信号を前記動作プログラムに対応付ける対応情報をオペレータから受け取る対応情報入力手段と、
前記対応付けられた動作指令信号に基づいて前記動作プログラムを実行するとともに前記動作プログラムの実行結果に応じて前記対応付けられた動作結果信号を出力するオンラインシミュレーション実行手段と、
前記オンラインシミュレーションでのシミュレーション動作をモニタするシミュレーション動作モニタ手段と、
前記モニタしたオンラインシミュレーションでのシミュレーション動作と前記オフラインシミュレーションでのシミュレーション動作とを比較して、その比較の結果を表示する比較結果表示手段と、
を含むことを特徴とする設備のシミュレーションプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、設備装置を構成する機構の動作形態を計算機シミュレーションさせるシミュレーション方法およびシミュレーションプログラムに関する。
【０００２】
【従来の技術】
従来より、コンピュータ内に３次元機構モデルをソフトウェア的に構築することにより、実際の設備装置等を用いることなく当該設備装置の可動部を当該３次元機構モデルによってコンピュータのディスプレイ上で動作させ得る計算機シミュレーション（以下「３Ｄシミュレーション」という。）がある。そして、このような３Ｄシミュレーションによると、一般に、コンピュータのディスプレイ上において、設備装置の可動機構に所望の動作をさせることによって、当該可動機構等を構成する各部品同士が干渉することなく所定の動作を行うことができるか否かの確認や当該可動機構の動作確認等を行うことができる。そのため、当該設備装置の開発時間を短縮したり、また開発コストを削減したりするといった様々なメリットを得ることができる。
【０００３】
ここで、このような３Ｄシミュレーションにおいては、３次元機構モデルとして可動させる機構モデル（以下「３Ｄ機構モデル」という。）を当該各可動機構ごとに用意された所定の動作プログラムによって実行させているのが一般的である。そのため、複数の可動機構同士や複数の設備装置同士を連携させて所定の動作を実行する場合においては、所定のシーケンスチャートに記述された動作順序や動作内容に従って、３Ｄ機構モデルごとの各動作プログラムが協働する。
【０００４】
そこで、一般には、かかる３Ｄ機構モデル間においては、シーケンスチャートによる所定の動作順序の仕様通りに相互に起動タイミングをとるため、例えば、動作指令待ち処理や動作端出力処理等を各動作プログラムに命令記述により適宜追加したり削除するというようなプログラミング作業が、３Ｄシミュレーションの事前準備として行われている。
【０００５】
【発明が解決しようとする課題】
しかしながら、このような３Ｄシミュレーションによると、上述したように、複数の３Ｄ機構モデルを、予定した動作順序の仕様通りに動作させる場合、所定の動作順序の仕様通りに相互に起動タイミングをとるための動作指令待ち処理等を各動作プログラムに命令記述として組み込む必要がある。そのため、３Ｄシミュレーションの対象となる設備装置等の構成が変更されるごとに、各動作プログラムに対し、このような命令記述による設定の変更を施さなければならない。
【０００６】
また、各動作プログラムの動作順序や動作内容を記述するシーケンスチャートにおいても、動作順序の変更や設備装置の追加等があるごとに、当該動作順序や動作内容を設定する記述を変更する必要がある。そのため、シーケンスチャートの作成者が、設備装置ごとに定義されている所定の動作形態（例えばクランプ装置であれば「クランプ」と「アンクランプ」）を熟知していない場合には、変更等の対象となる設備装置に関連する資料等を別途参照しながら、当該設備装置による所定の動作形態をシーケンスチャートに記述する必要がある。
【０００７】
つまり、従来の３Ｄシミュレーションにおいては、対象となる設備装置等の構成、動作順序や動作内容等が変更されるたびに、上述したような煩雑な操作や作業を強いられていたので、当該動作プログラムの開発やシーケンスチャートの作成に時間がかかるとともに、作業工数の増加によるコストの上昇をも招くという問題が存在している。また、人手に頼るため誤り、つまりバグも発生しやすい。
【０００８】
本発明は、上述した課題を解決するためになされたものであり、その目的とするところは、３Ｄ機構モデルを実行させる動作プログラムのプログラミング工数を削減し得る設備のシミュレーション方法および設備のシミュレーションプログラムを提供することにある。
また、本発明の他の目的は、３Ｄ機構モデルを実行させるシーケンスチャートの作成工数を削減し得る設備のシミュレーション方法および設備のシミュレーションプログラムを提供することにある。
【０００９】
【課題を解決するための手段および発明の作用・効果】
上記目的を達成するため、請求項１および３に記載の発明では、制御装置により制御される設備の動作をコンピュータで３次元機構モデルによりシミュレーションする設備のシミュレーションにおいて、前記設備を構成する複数の設備装置のうちの一つをオペレータが対象装置として選択し、該対象装置のシミュレーション上の動作を示す動作プログラムをオペレータが作成・格納し、該動作プログラムに基づいて前記対象装置の動作を当該対象装置単体でシミュレーションする。そして、単体シミュレーションの結果に問題がないと判定されたとき、動作プログラムおよび関連情報を機構属性情報として登録し、前記設備を構成する設備装置およびその設備装置が行う動作を、シミュレーション動作を行うべき順序に従って、オペレータが選択し、この選択された動作の順序を記憶する。そして、この選択された動作の順序に基づいて登録された動作プログラムの実行タイミングを自動的に編集し、記憶された動作の順序および編集された実行タイミングに従って前記設備のオフラインシミュレーションを行うことを技術的特徴とする。
【００１０】
これにより、オペレータは選択した対象装置の動作毎に動作プログラムを作成・格納し、その動作プログラムに基づく当該対象装置単体での単体シミュレーションを直ちに行うことができる。つまり、オペレータが動作プログラムを入力した直後には、オペレータはその動作プログラムの内容を明確に把握しているので、単体シミュレーションの結果、何らかの問題があれば適切な修正を速やかに行うことができる。また、従来は、オペレータが設備装置が行う動作のタイミングを制御するための命令を各設備装置の動作プログラム中に書き込まなければならなかったが、本発明によれば、設備装置およびその設備装置が行う動作を、シミュレーション動作を行うべき順序に従って、オペレータが選択し、この選択された動作の順序に基づいて登録された動作プログラムの実行タイミングを自動的に編集することができる。この結果、動作プログラム開発効率を上げることができ、短時間で且つ間違いの少ない作業が行える。したがって、３Ｄ機構モデルを実行させる動作プログラムのプログラミング工数を削減することができ、また３Ｄ機構モデルを実行させるシーケンスチャートの作成工数を削減することができる。
【００１５】
さらに、請求項２および４に記載の発明では、設備を実際に制御する制御装置との間で交換される、前記設備装置を動作させるための動作指令信号と前記設備装置の動作結果を示す動作結果信号とを、オペレータから受け取った対応情報に基づいて動作プログラムに対応付け、この動作指令信号に基づいて動作プログラムを実行するとともに動作プログラムの実行結果に応じて動作結果信号を出力する。そして、このようなオンラインシミュレーションでのシミュレーション動作と、オフラインシミュレーションでのシミュレーション動作とを比較して、その比較結果を表示することを技術的特徴とする。
【００１６】
これにより、通常、設備の設計段階では、先ずオフラインシミュレーションにより各設備装置が干渉等することなく動作することを確認し、この後に制御装置を接続してオンラインシミュレーションを行うことにより、別途作成した制御装置の制御プログラムの動作を確認するが、本発明によれば、このようなオンラインシミュレーションでのシミュレーション結果とオフラインシミュレーションの結果とを比較することができるので、制御装置の制御プログラムが所期の仕様通りに動作しているか否かを容易かつ確実に判定することができる。
【００１９】
【発明の実施の形態】
以下、本発明のシミュレーション方法およびシミュレーションプログラムを、シミュレーション装置に適用した実施形態について図を参照して説明する。
まず、本実施形態に係るシミュレーション装置２０の構成を図１に基づいて説明する。
【００２０】
図１に示すように、シミュレーション装置２０は、ソフトウェアにより仮想的に構成される設備装置（３Ｄ機構モデル）の動作形態を計算機シミュレーションさせる機能を有するもので、主に、ＣＰＵ２１、ＲＡＭ２２、ＲＯＭ２３、ハードディスク装置（以下「ＨＤＤ」という。）２４、入出力インタフェイス２５、入力装置２６、ディスプレイ２７、通信インタフェイス２８等から構成されており、プログラマブルロジックコントローラ（以下「ＰＬＣ」という。）３０に接続されている。なお、このＰＬＣ３０は、後述するように、オフラインシミュレーション処理のときには用いられることなく、オンラインシミュレーション処理のときに用いられるため、属性情報作成・登録処理やオフラインシミュレーション処理のときはシミュレーション装置２０に接続されている必要はない。
【００２１】
ＣＰＵ２１は、シミュレーション装置２０を制御する中央演算処理装置で、システムバスを介してＲＡＭ２２、ＲＯＭ２３、ＨＤＤ２４、入出力インタフェイス２５等と接続されている。このＣＰＵ２１を制御するシステムプログラムや各制御プログラム等は、ＲＯＭ２３に格納されており、ＣＰＵ２１はこれらのプログラムをＲＯＭ２３から読み出してＲＡＭ２２のワーク領域等に展開することにより、これらのプログラミングをＣＰＵ２１により逐次実行することができる。
【００２２】
ＲＡＭ２２は、ＣＰＵ２１が使用する主記憶空間の一部を構成するもので、システムバスに接続される読み出し・書き込み可能な揮発性記憶装置である。例えばＤＲＡＭ（Dynamic RAM） が使用されている。
【００２３】
ＲＯＭ２３も、システムバスに接続されている読み出し専用記憶装置であり、ＣＰＵ２１が使用する主記憶空間の一部を構成するものである。このＲＯＭ２３には、システムプログラム、入力機能部プログラム２３ａ、３Ｄ動作プログラム実行部プログラム２３ｂ、自動プログラミング処理機能部プログラム２３ｃ、Ｉ／Ｏ処理部プログラム２３ｄ、オフラインシミュレーション実行部２３ｅ等が予め書き込まれているため、ＣＰＵ２１は、ＲＯＭ２３に書き込まれたシステムプログラム等をシステムバスを介して読み出すことにより、所定の処理を実行することができる。なお、入力機能部プログラム２３ａ、３Ｄ動作プログラム実行部プログラム２３ｂ、自動プログラミング処理機能部プログラム２３ｃ、Ｉ／Ｏ処理部プログラム２３ｄ、オフラインシミュレーション実行部２３ｅ等は、ＨＤＤ２４に格納されている場合もある。
【００２４】
ＨＤＤ２４は、ＣＰＵ２１が使用する補助記憶空間を構成するもので、いわゆるハードディスク装置のことである。つまり、ＨＤＤ２４は、磁気ディスクに記録したデータを読み出したり、データを書き込んだりすることのできる補助記憶装置であり、本実施形態では、種々の情報を格納するデータベース（以下「ＤＢ」という。）として主に用いられている。そのため、ＨＤＤ２４には、後述する３Ｄモデル情報ＤＢ２４ａ、３Ｄモデル属性情報ＤＢ２４ｂ、シーケンスチャートＤＢ２４ｃ、動作プログラムＤＢ２４ｄ等として用いられる各種データが格納されているほか、ディスプレイ２７に表示する３Ｄ機構モデルによる設備装置のグラフィックデータも格納されている。
【００２５】
３Ｄモデル情報ＤＢ２４ａは、設備装置を構成する機構の動作形態に関するパラメータを格納するもので、例えば、運動定義として、原点位置、座標系の数、重力、摩擦係数等、また運動属性として、可動範囲、移動速度、加速度等が、各設備装置ごとに格納されている。
【００２６】
３Ｄモデル属性情報ＤＢ２４ｂは、動作プログラム名テーブル２４b1と動作毎Ｉ／Ｏ状態テーブル２４b2とにより構成されている。動作プログラム名テーブル２４b1には、後述する属性情報作成・登録処理によって作成される、所定の設備装置に対応する動作プログラムのファイル名および当該設備装置を構成する機構の動作形態のコメント、である機械構成情報（機構属性情報）が、当該設備装置ごとに登録されている。また、動作毎Ｉ／Ｏ状態テーブル２４b2には、後述するオンラインシミュレーション処理によってされるＩ／Ｏ状態設定表に基く動作毎Ｉ／Ｏ状態情報が、所定の設備装置ごとに登録されている。
【００２７】
シーケンスチャートＤＢ２４ｃは、複数の設備装置同士が連携して所定のシーケンス処理を実行する場合、当該設備装置の動作順序を決定するシーケンスチャートを格納するもので、オフラインシミュレーションあるいはオンラインシミュレーションに用いられるシーケンスチャートが各シーケンス処理ごとに格納されている。なお、本明細書においてオンラインシミュレーションとは、設備を実際に制御する制御装置と接続した状態で、該制御装置との間で変換したＩ／Ｏ状態情報に基づいてシミュレーションを行うことをいい、オフラインシミュレーションとは、シミュレーション装置単体でシミュレーションを行うことをいう。
【００２８】
動作プログラムＤＢ２４ｄは、設備装置を制御することにより所定の一連動作を実行させるためのプログラムを格納するもので、各設備装置の各動作ごとに作成されて格納されている。
【００２９】
入出力インタフェイス２５は、入力装置２６、ディスプレイ２７、通信インタフェイス２８等の入出力装置とＣＰＵ２１等とのデータのやり取りを仲介する装置で、システムバスに接続されている。
【００３０】
入力装置２６は、入力機能部プログラム２３ａ等により必要に応じ所定情報を入力し得るもので、入出力インタフェイス２５を介してシステムバスに接続されている。押圧式のスイッチを所定数並べたキーボードや、いわゆるマウスやトラックボールのようなポインティングデバイスによるもの、あるいはディスプレイ２７の表面に設けられたタッチパネルによるものもある。
【００３１】
ディスプレイ２７は、各プログラムによる出力情報、即ち、計算機シミュレーションの対象となる設備装置を表すグラフィック表示や、選択された設備装置の動作種類一覧表表示等を出力し得る表示装置で、入出力インタフェイス２５を介してシステムバスに接続されている。例えば、ＣＲＴや液晶表示器により構成され、表示面に入力装置２６を構成するタッチパネルを備えるものもある。
【００３２】
通信インタフェイス２８は、ＰＬＣ３０とＣＰＵ２１とのデータ通信を仲介する装置で、入出力インタフェイス２５を介してシステムバスに接続されている。例えば、物理層としてＲＳ−２３２Ｃ、データリンク層としてＢＳＣ手順等によるシリアルデータ伝送によって、データ通信を可能な構成を採る。これにより、ＣＰＵ２１からＰＬＣ３０への制御データの送信や、ＰＬＣ３０からＣＰＵ２１への各種データの受信を可能にしている。なお、シミュレーション装置２０とＰＬＣ３０との電気的な接続形態は、シリアル接続に限られることはなく、例えばＶＭＥバスやIEEE488 に準拠するようなパラレル接続でも良い。
【００３３】
ＰＬＣ３０は、主に、図示しない、ＣＰＵ、ＲＯＭ、ＲＡＭ、入出力制御回路等により構成されている。ＰＬＣ３０は、本来、ＰＬＣ３０に接続された種々のアクチュエータ等の設備装置に動作指示を出したり、設備装置の各種センサから検出情報を取得したりする機能を有する装置であるが、本実施形態では、ＰＬＣ３０は、シミュレーション装置２０内でソフトウェアにより仮想的に構成される設備装置の制御装置としての役割を果たす。そのため、本実施形態におけるＰＬＣ３０には、実際の設備装置は接続されていないが、シミュレーション装置２０内で仮想的に構成される設備装置が実際の設備装置と同様の振舞を行うように構成されている。
【００３４】
なお、このＰＬＣ３０は、本実施形態のように、シミュレーション装置２０の外部に別個に設ける構成を採るほか、シミュレーション装置２０のＣＰＵ２１、ＲＡＭ２２、ＲＯＭ２３等を利用してシミュレーション装置２０内にソフトウェアによる仮想的なＰＬＣ３０を構築しても良い。
【００３５】
ここで、入力機能部プログラム２３ａ、３Ｄ動作プログラム実行部プログラム２３ｂ、自動プログラミング処理機能部プログラム２３ｃ、Ｉ／Ｏ処理部プログラム２３ｄおよびオフラインシミュレーション実行部２３ｅの機能概要等を図２〜図４に基づいて説明する。なお、図２は、３Ｄ機構モデルである設備装置が単体である場合におけるオフラインシミュレーションに係る機能構成を示すブロック図、図３は、同設備装置が複数である場合におけるオフラインシミュレーションに係る機能構成を示すブロック図、図４は、オンラインシミュレーションに係る機能構成を示すブロック図である。
【００３６】
図２〜図４に示すように、入力機能部プログラム２３ａは、オフライン、オンラインのいずれのシミュレーションにおいても使用される。このプログラムは、入力装置２６を介して入力される各入力情報に対し、動作プログラムやシーケンスチャートを作成するために必要な編集をしたり、また編集された動作プログラムやシーケンスチャートを動作プログラムＤＢ２４ｄやシーケンスチャートＤＢ２４ｃに格納したりする機能を有するものである。
【００３７】
図２〜図４に示すように、３Ｄ動作プログラム実行部プログラム２３ｂも、オフライン、オンラインのいずれのシミュレーションにおいても使用されるプログラムで、動作プログラムＤＢ２４ｄに格納された単体シミュレーション用の動作プログラム２４d1やオフラインシミュレーション用の動作プログラム２４d2を展開し、展開された動作プログラムの記述に従って３Ｄ機構モデルによる仮想の設備装置を逐次動作させる機能を有するものである。
【００３８】
図３および図４に示すように、自動プログラミング処理機能部プログラム２３ｃは、設備装置が複数のオフラインシミュレーションおよびオンラインシミュレーションに使用されるプログラムで、後述するように、シーケンスチャートに基づいて動作開始情報および動作終了情報を生成する機能等を有するものである。
【００３９】
図３および図４に示すように、Ｉ／Ｏ処理部プログラム２３ｄは、３Ｄ動作プログラム実行部プログラム２３ｂとオフラインシミュレーション実行部２３ｅあるいはＰＬＣ３０との間のデータの授受経路を切り替え得るプログラムで、シミュレーションの前に、当該シミュレーションがオフラインであるかオンラインであるかを判断して適宜切り替えを行う機能を有するものである。
【００４０】
図３に示すように、オフラインシミュレーション実行部２３ｅは、オフラインシミュレーションのときに使用されるプログラムで、ＰＬＣ３０に代わって、シーケンスチャートの記述に従った動作命令等を３Ｄ動作プログラム実行部プログラム２３ｂに出力したり、また３Ｄ動作プログラム実行部プログラム２３ｂから動作完了情報等を受け取ったりする機能を有するＰＬＣ３０のシミュレータである。
【００４１】
なお、ＰＬＣ３０と３Ｄ動作プログラム実行部プログラム２３ｂとの間を介在する入出力部２３ｆは、両者を仲介するドライバソフトウェアの如きプログラムである。
【００４２】
次に、本実施形態に係るシミュレーション装置２０の作動を図２〜図２０に基づいて説明する。本シミュレーション装置２０は、前述のＲＯＭ２３に格納された入力機能部プログラム２３ａ、３Ｄ動作プログラム実行部プログラム２３ｂ等により制御されることによって、次の３つの処理、即ち、(1) 属性情報作成・登録処理、(2) オフラインシミュレーション処理および(3) オンラインシミュレーション処理を実行する。以下、これら各処理の流れを順に説明する。
【００４３】
(1) 属性情報作成・登録処理（図２、図５〜図７参照）
図５に示すように、属性情報作成・登録処理では、まずステップＳ１０１による所定の表示制御プログラムにより、３Ｄ機構モデルである設備装置を所定の表示位置に配置し、画面表示する処理を行う。即ち、この処理ステップでは、所定の表示制御プログラムが、ＨＤＤ２４に格納されている設備装置（３Ｄ機構モデル）のグラフィックデータに基づいて、ディスプレイ２７の画面上の所定位置に設備装置の３Ｄ機構モデルを配置して表示する処理を行う。これにより、例えば図６に示すように、クランプ装置CL-1、クランプ装置CL-2、溶接装置WL-1、溶接装置WL-2、ワークＷ等が、ディスプレイ２７にグラフィック表示される。
【００４４】
次に、ステップＳ１０３により、シミュレーション装置２０のオペレータ（動作プログラムの開発者）が、オフラインシミュレーション用の動作プログラムを開発しようとする設備装置（以下「対象装置」という。）をディスプレイ２７上のグラフィック表示から選択し、各種パラメータを入力設定する処理を行う。この処理は、前述した入力機能部プログラム２３ａにより行われるもので、図２では「３Ｄモデル情報入力機能」として表されている。
【００４５】
例えば、図６に示す画面表示においては、オペレータによるマウス等の操作によってポインタＰがクランプ装置CL-1を対象装置として選択しているので、入力機能部プログラム２３ａによる３Ｄモデル情報入力機能により、このクランプ装置CL-1に必要なパラメータを入力する処理を行う。パラメータの具体例は、運動定義として、原点位置、座標系の数、重力、摩擦係数等であり、また運動属性として、可動範囲、移動速度、加速度等である。
【００４６】
次のステップＳ１０５では、オペレータが、入力機能部プログラム２３ａにより、対象装置の動作プログラムを作成し、格納する処理を行う。即ち、図２に示される「３Ｄ動作プログラム入力機能」（入力機能部プログラム２３ａ）により、対象装置の動きを３Ｄ機構モデルとして動作させるための命令をオペレータが動作プログラムとして記述する処理と、作成した動作プログラムに任意のファイル名（例えば「CLAMP1」）を付与し、単体シミュレーション用の動作プログラム２４d1として格納する処理を行う。
【００４７】
例えば、図６示す画面表示においてクランプ装置CL-1を選択した場合には、図７(A) に示すような動作プログラムをオペレータが作成する。なお、この動作プログラムは、第１行目にプログラム名が「CLAMP1」である旨、また第２行目に処理の開始命令「BEGIN 」、第３行目に「MOVES 」命令により現在位置からW[1]のポイントへ移動させる旨、そして第４行目に処理の終了命令「END 」が、それぞれ記述されている。
【００４８】
ステップＳ１０５により、オペレータによる動作プログラムの作成が終了すると、ステップＳ１０７により、作成した動作プログラムを単体かつオフラインでシミュレーションする処理（単体オフラインシミュレーション処理）を行う。このステップによる処理は、前述した３Ｄ動作プログラム実行部プログラム２３ｂによって行われるもので、図２に示すように、前ステップＳ１０５により作成された動作プログラムを３Ｄ動作プログラム実行部プログラム２３ｂにロードして実行するものである。
【００４９】
そして、ステップＳ１０９により、オペレータが、ステップＳ１０７によるシミュレーション結果に問題があるか否かを判断し、問題がなければ（Ｓ１０９でＹｅｓ）、ステップＳ１１１に処理を移行する。オペレータの判断によりシミュレーション結果に問題があれば（Ｓ１０９でＮｏ）、ステップＳ１０３に処理を移行して、再度、各種パラメータの設定等を行う処理を行う。
【００５０】
ステップＳ１１１では、シミュレーション結果の良好だった動作プログラムのファイル名と、当該対象装置を構成する機構の動作形態をコメントする動作名と、を動作種類（機械構成情報（機構属性情報））として３Ｄモデル属性情報ＤＢ２４ｂの動作プログラム名テーブル２４b1に登録する処理を行う。このステップによる処理は、入力機能部プログラム２３ａにより行われるもので、図２では「３Ｄモデル情報入力情報機能」として表されている。この動作プログラム名テーブル２４b1は、動作プログラムのファイル名を登録する「動作プログラム名」領域のほか、その対象装置の名称を登録する「装置名」領域、および、その対象装置を構成する機構の動作形態のコメント（動作名）を登録する「コメント（動作名）」領域等により構成されている。動作種類は１つの対象装置に対して複数登録することができる。
【００５１】
例えば、図６に示す画面表示のように、クランプ装置CL-1を選択し動作プログラムを作成した場合には、図７(B) に示すような内容が機構属性情報として動作プログラム名テーブル２４b1に登録される。即ち、動作プログラム名テーブル２４b1の「動作プログラム名」領域にその動作プログラム名「CLAMP1」が、また同「装置名」領域に「クランプ装置１」が、さらに同「コメント（動作名）」領域に「クランプ」が、それぞれ登録される。
【００５２】
３Ｄモデル属性情報に格納した動作種類（機構構成情報）をオペレータが参照する場合には、３Ｄモデル属性情報ＤＢ２４ｂからその内容を読み出し、ディスプレイ２７に表示する。これにより、オペレータは、当該対象装置の動作種類を容易に参照することができる。
【００５３】
(2) オフラインシミュレーション処理（図３、図８〜図１３参照）
図８に示すように、オフラインシミュレーション処理でも、前述した属性情報作成・登録処理のステップＳ１０１と同様、まずステップＳ２０１による所定の表示制御プログラムにより、クランプ装置CL-1、CL-2等の設備装置を３Ｄ機構モデルとしてディスプレイ２７に画面表示する処理を行う（図１１(A) 参照）。
【００５４】
次のステップＳ２０３では、シミュレーション装置２０のオペレータ（シーケンスチャート作成者）が、シーケンスチャートに記述しようとする対象装置をディスプレイ２７上のグラフィック表示から選択する処理を行う。この処理は、前述した入力機能部プログラム２３ａにより行われるもので、図３では「シーケンスチャートデータ入力機能」として表されている。
【００５５】
例えば、図１１(A) に示す画面表示においては、オペレータがマウス等によってクランプ装置CL-1のところにポインタＰを移しクリックすると、図１１(B) に示すようにクランプ装置CL-1の表示色が変化して当該クランプ装置CL-1が選択されたことを明示する。これによりクランプ装置CL-1の選択が行われる。
【００５６】
続くステップＳ２０５では、選択した対象装置の動作種類を３Ｄモデル属性情報ＤＢ２４ｂの動作プログラム名テーブル２４b1から読み出す処理を行う。この処理も、図３に示す「シーケンスチャートデータ入力機能」（入力機能部プログラム２３ａ）により行われるもので、ＲＡＭ２２を介して、動作プログラム名テーブル２４b1から、選択された対象装置に関する動作種類の全てを読み出す。これにより、次のステップＳ２０７による対象装置の動作種類の表示を可能にしている。
【００５７】
ステップＳ２０７では、ステップＳ２０５により読み出した対象装置に関する動作種類を、所定の表示制御プログラムにより一覧表示形式に編集して画面表示する処理を行う。この処理では、図１１(B) に示すように、ステップＳ２０１により画面表示した３Ｄ機構モデルの画面下方に別のウィンドウWd-aを設け、これに当該一覧表を表示する。図１１(B) に示す画面表示の例においては、クランプ装置CL-1に関する動作種類である動作プログラム名「CLAMP1」とそのコメント「クランプ」、および、動作プログラム名「UNCLAMP1」とそのコメント「アンクランプ」が一覧表示されている。
【００５８】
次に、ステップＳ２０９により、オペレータが、シーケンスチャートに記述しようとする対象装置の動作を動作種類の一覧表から選択する処理を行う。この処理も、前述した入力機能部プログラム２３ａにより行われるもので、図３では、「シーケンスチャートデータ入力機能」として表されている。図１１(B) に示す画面表示の例においては、オペレータがマウス等によって動作種類の一覧表中の動作プログラム名「CLAMP1」の表示部分のところにポインタＰ’（同図に示す破線表示）を移しクリックしたことにより、「CLAMP1」の行の表示色が変化し選択されたことを明示している。
【００５９】
ステップＳ２１１以降の処理では、本発明の特徴の１つであるシーケンスチャートの作成処理およびタイミング情報設定処理を行う。ステップＳ２１１では、選択された対象装置の当該動作の情報を、シーケンスチャートに書き込む処理を行う。この処理も、入力機能部プログラム２３ａにより行われるもので、選択された当該動作を所定のシーケンスチャートに追加あるいは挿入する処理を行う。例えば、図１１(B) に示す画面表示においては、クランプ動作を選択しているので、それに対応する動作プログラムとしてオペレータが例えば「CLAMP1」を選択すると、シーケンスチャートの先頭のステップ（ステップ番号１０）の行に当該動作が書き込まれる。次に「UNCLAMP1」が選択されると、シーケンスチャートの次のステップ（ステップ番号２０）の行に当該動作が書き込まれる。図１２には、本処理ステップにより、ステップ番号１０の行にクランプ動作が書き込まれたシーケンスチャートの一例が示されている。
【００６０】
なお、このシーケンスチャートには、処理の順番を示すステップ番号のほかに前ステップ番号の欄がある。これは、前ステップ番号の処理の終了を待って当該処理を行う実行順序制御のために、記載するステップ番号である。また、コメント（動作名）の欄には、簡単な動作名が書き込まれ、装置名の欄には対象装置の名称が書き込まれる。また動作プログラム名の欄には、当該動作プログラムのプログラム名、さらに動作順序の欄には、動作の順番を視覚的に把握可能な矢印が付されている。
【００６１】
次のステップＳ２１３では、オペレータが、シーケンスチャートが完成したか否かを判断する処理を行う。そしてシーケンスチャートが完成したと判断すると（Ｓ２１３でＹｅｓ）、次ステップＳ２１５によるタイミング情報設定処理に処理を移し、未だ完成したと判断することができなければ（Ｓ２１３でＮｏ）、ステップＳ２０３に戻ってシーケンスチャートに記述しようとする次の対象装置を選択する処理を行う。
【００６２】
シーケンスチャートが完成すると、次にステップＳ２１５によるタイミング情報設定処理を行う。この処理は、自動プログラミング処理機能部プログラム２３ｃによって行われるものであり、その詳細は図９に示されている。
図９に示すように、オフラインシミュレーション処理におけるタイミング情報設定処理は、まずステップＳ３０１により、シーケンスチャートから１行分の文字列データを読み込む処理を行う。そして、このステップＳ３０１により読み込んだ文字列データをステップＳ３０３により解析して、ステップ番号（動作終了情報）と前ステップ番号（動作開始情報）を抽出する処理を行う。さらにステップＳ３０５により解析を進めて動作プログラム名を抽出する処理を行い、抽出した動作プログラムの自動プログラミング処理１をステップＳ３０７により行う。
【００６３】
ステップＳ３０７による自動プログラミング処理１の詳細は、図１０に示されている。この図１０に示す動作プログラムの自動プログラミング処理１は、動作プログラムＤＢ２４ｄに格納された動作プログラム（例えば図７(A) に示す動作プログラム）を対象に行う処理で、ここでは、先に説明した属性情報作成・登録処理により動作プログラムＤＢ２４ｄに格納された単体シミュレーション用の動作プログラム２４d1を対象とする。
【００６４】
そのため、当該自動プログラミング処理１では、まずステップＳ４０１により、動作プログラムＤＢ２４ｄから単体シミュレーション用の動作プログラム２４d1を読み出す処理を行う。そして、ステップＳ４０３により、読み出した動作プログラムから１行分の文字列データを読み込む処理を行い、読み込んだ文字列データをステップＳ４０５により解析して、命令語を抽出する処理を行う。
【００６５】
続くステップＳ４０７により、抽出した命令語は動作命令か否かを判断し、動作命令であれば（Ｓ４０７でＹｅｓ）、次ステップＳ４０９により当該動作命令の１行前に前ステップ番号の処理の完了を待つ命令を挿入し、さらに次のステップＳ４１１により当該動作命令の１行後に当該動作命令の完了を通知する命令を挿入して、ステップＳ４１３に処理を移行する。一方、抽出した命令語が動作命令でない場合には（Ｓ４０７でＮｏ）、ステップＳ４１３に処理を移行する。
【００６６】
ステップＳ４１３では、次の行に命令語がある否かを判断し、次の行に命令語があると判断できれば（Ｓ４１３でＹｅｓ）、ステップＳ４０３に戻って次の行の一行分の文字列データを読み込む処理を行う。一方、次の行に命令語があると判断できなければ（Ｓ４１３でＮｏ）、当該動作プログラムの中には、他の動作命令はもう存在しないので、ステップＳ４１５により自動プログラミングした動作プログラムを動作プログラムＤＢ２４ｄに格納する処理を行う。これにより、当該一連の自動プログラミング処理１が終了するので、図９に示すステップＳ３０９に処理を移す。
【００６７】
図９に戻ると、ステップＳ３０９では、シーケンスチャート中の次のステップ番号に文字列データがあるか否かを判断する処理を行う。そして、次のステップ番号に文字列データがあると判断できれば（Ｓ３０９でＹｅｓ）、ステップＳ３０１に戻って次のステップ番号の一行分の文字列データをシーケンスチャートから読み込む処理を行う。一方、次の行に命令語があると判断できなければ（Ｓ３０９でＮｏ）、当該シーケンスチャートの中の全ての文字列データの処理を終了したと判断して、図９に示す一連のタイミング情報設定処理を終了し、図８に示すステップＳ２１７に処理を移す。
【００６８】
ここで、上述したステップＳ２１５によるタイミング情報設定処理を図１３を参照して説明する。なおここでは図１１(B) に示す画面表示の例の場合を想定して説明する。
図１３に示すように、同図上段に示されているシーケンスチャート画面には、ステップ番号１０、２０、３０の各行が表示されている。ここで図９に示すタイミング情報設定処理により、シーケンスチャートのステップ番号２０の１行分の文字列データを読み込むと（Ｓ３０１）、この行には、ステップ番号「２０」、前ステップ番号「１０」、コメント（動作名）「クランプ」、装置名「クランプ装置２」、動作プログラム名「CLAMP2」の文字列が含まれている。そのため、これらの文字列を解析することによって、ステップ番号「２０」と前ステップ番号「１０」とを抽出し（Ｓ３０３）、さらに動作プログラム名「CLAMP2」を抽出する（Ｓ３０５）。これにより、動作開始情報としてステップ番号「２０」、動作終了情報としてステップ番号「１０」、また動作プログラム名として「CLAMP2」を得ることができたので、これらの情報をパラメータとして自動プログラミング処理１（図１０）を呼び出す。
【００６９】
すると、呼び出された自動プログラミング処理１では、パラメータとして受け取った動作プログラム名「CLAMP2」を手掛かりとして動作プログラムＤＢ２４ｄから単体シミュレーション用の動作プログラム２４d1として格納されている動作プログラム「CLAMP2」を読み出す（Ｓ４０１）。読み出された動作プログラム「CLAMP2」は、図１３の中段に示すように、第１行目に「PROGRAM CLAMP2」、第２行目に「BEGIN 」、第３行目に「MOVES W[1]」、第４行目に「END 」の命令語がそれぞれ記述がされている。
【００７０】
このように記述された動作プログラム「CLAMP2」に対し、第１行目から順番に、１行分の文字列データを読み込み（Ｓ４０３）、当該１行分の文字列データから命令語を抽出し（Ｓ４０５）、抽出した命令語が動作命令であるか否かの判断を行い（Ｓ４０７）、動作命令を見つけるまでこれらの処理を繰り返す（Ｓ４０７、Ｓ４１３）。
【００７１】
図１３中段に示す動作プログラム「CLAMP2」の例では、「MOVES 」の文字列が動作命令に相当するので、この「MOVES 」を見つけると（Ｓ４０７でＹｅｓ）、この動作命令（「MOVES 」）の１行前に前ステップ番号の処理の完了を待つ命令、例えば「WaitStepNo(10)」命令を挿入する（Ｓ４０９）。つまり、サブルーチンとして呼び出されたときに受け取ったパラメータのうちの動作開始情報としてステップ番号「１０」に基づいて「WaitStepNo(ｎ)」命令のｎにステップ番号「１０」を設定し、設定済のものを「MOVES 」命令の前に挿入する処理を行う。これにより、クランプ装置２は、ステップ番号１０に記述されたクランプ装置１によるクランプ動作の完了を待って、クランプ動作を実行する。
【００７２】
なお、動作命令とは、設備装置を構成する機構の動作形態を変更させる指令のことで、本実施形態においては、動作命令に該当するものとして「MOVES 」命令のほかに、例えば、円弧動作で移動する「MOVEC 」命令、指定経路に従って移動する「MOVE」命令、現在位置より指定量だけ移動させる「DRAW」命令等がある。
【００７３】
次に同動作命令の１行後に当該動作命令の完了を通知する命令、例えば「EndStepNo(20) 」命令を挿入する（Ｓ４１１）。これも、サブルーチンとして呼び出されたときに受け取ったパラメータのうちの動作終了情報としてステップ番号「２０」に基づいて「EndStepNo(ｎ)」命令のｎにステップ番号「２０」を設定し、それを「MOVES 」命令の後に挿入する処理を行う。なお、このような動作終了情報は、当該クランプ装置２が「WaitStepNo(10)」命令によりステップ番号１０のクランプ装置１によるクランプ動作の完了を待つのと同様、他の設備装置による所定動作の完了を待っている設備装置にその完了を通知するために用いられるものである。上記動作命令の完了を通知する命令や動作命令の完了を待つ命令の代わりに、動作状態を示す変数を直接参照する方式でもよい。
【００７４】
このように自動プログラミング処理１によって、動作開始情報および動作終了情報が自動プログラミングされると、図１３下段に示すような動作プログラム「CLAMP2」（自動プログラミング後）が生成される。
即ち、同図中段に示されている動作プログラム「CLAMP2」（自動プログラミング前）の第３行目に「MOVES W[1]」の一行前に「WaitStepNo(10)」命令、また一行後に「EndStepNo(20) 」命令、がそれぞれ記述されているため、自動プログラミング後のものでは、第１行目に「PROGRAM CLAMP2」、第２行目に「BEGIN 」、第３行目に「WaitStepNo(10)」、第４行目に「MOVES W[1] 」、第５行目に「EndStepNo(20) 」、第６行目に「END 」の命令語がそれぞれ記述がされている。
【００７５】
ここで再び図８に戻る。ステップＳ２１５によるタイミング情報設定処理が完了すると、続くステップＳ２１７では、完成した動作プログラムをオフラインでシミュレーションする処理を行う。
即ち、図３に示す３Ｄ動作プログラム実行部プログラム２３ｂ、Ｉ／Ｏ処理部プログラム２３ｄおよびオフラインシミュレーション実行部２３ｅによって、動作プログラムをオフラインシミュレーションする処理が行われる。この処理では、まずＩ／Ｏ処理部プログラム２３ｄによりオフラインシミュレーション用Ｉ／Ｏに切り替える処理を行うことによって、シミュレーション装置２０とＰＬＣ３０との接続を切り離す。そして、オフラインシミュレーション実行部２３ｅが、完成したシーケンスチャートに従って各動作プログラムに逐次指示を出す。
【００７６】
例えば、図１３の上段に示すシーケンスチャートの例では、まずステップ番号１０の行に記述されている動作プログラム「CLAMP1」によるクランプ動作を実行させるため、オフラインシミュレーション実行部２３ｅは、Ｉ／Ｏ処理部プログラム２３ｄを介して３Ｄ動作プログラム実行部プログラム２３ｂに当該動作プログラムの実行命令を出力する。すると、この動作命令を受けた３Ｄ動作プログラム実行部プログラム２３ｂは、予め実行可能に待機している動作プログラム「CLAMP1」に従ってクランプ動作を実行し、当該動作の完了とともに動作終了情報をオフラインシミュレーション実行部２３ｅに出力する（EndStepNo(10) ）。これにより、次のステップ番号２０の行に記述されている動作プログラム「CLAMP2」は、クランプ動作を実行することができるので（WaitStepNo(10)）、３Ｄ動作プログラム実行部プログラム２３ｂは、次に動作プログラム「CLAMP2」に従ってクランプ動作を実行する（図１３の下段参照）。
【００７７】
このようにステップＳ２１７によるシミュレーション処理が終了すると、次のステップＳ２１９により、オペレータが、ステップＳ２１７によるシミュレーション結果に問題があるか否かを判断し、問題がなければ（Ｓ２１９でＹｅｓ）、一連の本オフラインシミュレーション処理を終了する。オペレータの判断によりシミュレーション結果に問題があれば（Ｓ２１９でＮｏ）、ステップＳ２０３に処理を移行して、再度、オフラインシミュレーションの対象となる対象装置を選択する。
【００７８】
上述したように図８に示すオフラインシミュレーション処理では、ステップＳ２０１によりディスプレイ２７に表示された３Ｄ機構モデルの中から、ステップＳ２０３により対象装置を選択し、選択した対象装置の動作種類（機械構成情報（機構属性情報））をステップＳ２０５により３Ｄモデル属性情報ＤＢ２４ｂから読み出し、読み出した動作種類をステップＳ２０７によりディスプレイ２７に一覧表示する。これにより、例えば設定変更の対象となる対象装置の動作種類を容易に参照することができるので、例えばシーケンスチャートの作成者が、対象装置の動作種類を熟知していない場合であっても、ディスプレイ２７に一覧表示される動作種類から当該対象装置を構成する機構の動作形態を容易に参照することができ、当該対象装置に関連する資料等を別途参照する手間を省くことができる。したがって、３Ｄ機構モデルを実行させるシーケンスチャートの作成工数を削減し得る効果がある。
【００７９】
また、図８に示すオフラインシミュレーション処理では、ステップＳ２０７により表示された動作種類が対象装置単体のものである場合において、ステップＳ２０９により、ディスプレイ２７に表示された動作種類を選択し、ステップＳ２１１により、選択された動作種類をシーケンスチャートに組み込む。これにより、シーケンスチャートの作成者は、ディスプレイ２７に表示された設備装置の中からシミュレーションを希望する対象装置を選択することにより、選択された対象装置がシーケンスチャートに自動的に組み込まれるので、シーケンスチャートの作成者が選択された対象装置の動作種類に関する知識を持っているか否かを問わず、シーケンスチャートを容易に作成することができる。したがって、３Ｄ機構モデルを実行させるシーケンスチャートの作成工数を削減し得る効果がある。
【００８０】
さらに、図８に示すオフラインシミュレーション処理のタイミング情報設定処理（図９）では、複数存在する設備装置同士が連携して所定のシーケンス動作を実行する場合において、ステップＳ３０３により対象装置を構成する機構の動作開始情報および／または動作終了情報をシーケンスチャートに基づいて生成し、ステップＳ３０７により、動作開始情報および／または動作終了情報をオフラインシミュレーションさせる対象装置の動作プログラムに組み込む。これにより、ディスプレイ２７に一覧表示された動作種類を選択すれば、選択された動作種類をシーケンスチャートに組み込むだけでなく、機構の動作開始情報や動作終了情報をも対象装置の動作プログラムに組み込むことから、動作プログラムの開発者は、ディスプレイ２７に表示された動作種類を選択することによって、動作プログラムを容易に変更することができる。したがって、３Ｄ機構モデルを実行させる動作プログラムのプログラミング工数を削減し得る効果がある。
【００８１】
なお、上述したオフラインシミュレーション処理では、ステップＳ４０９において前ステップ番号の処理の完了を待つ命令を動作プログラムに挿入し、またステップＳ４１１において動作命令の完了を通知する命令を動作プログラムに挿入したが、両命令のうち、いずれか一方の命令を動作プログラムに挿入するように処理の流れを構成しても良い。
【００８２】
(3) オンラインシミュレーション処理（図４、図１１、図１４〜図２０参照）図１４に示すように、オンラインシミュレーション処理でも、前述した属性情報作成・登録処理やオフラインシミュレーション処理と同様、まずステップＳ５０１による所定の表示制御プログラムにより、クランプ装置CL-1、CL-2等の設備装置を３Ｄ機構モデルとして所定の表示位置に配置し、ディスプレイ２７に画面表示する処理を行う（図１１(A) 参照）。
【００８３】
次のステップＳ５０３では、シミュレーション装置２０のオペレータ（動作プログラムの開発者）が、オンラインシミュレーション用の動作プログラムを開発しようとする対象装置をディスプレイ２７上のグラフィック表示から選択する処理を行う。この処理は、前述した入力機能部プログラム２３ａにより行われるもので、図４では「３Ｄモデル情報入力機能」として表されている。なお、この対象装置は、前述の図１２に示すオフラインシミュレーション用のシーケンスチャートの画面表示から、選択しても良い。
【００８４】
続くステップＳ５０５では、選択した対象装置の動作毎Ｉ／Ｏ状態情報（動作制御情報）を設定する画面を表示する処理を行う。この処理は、入力機能部プログラム２３ａにより行われるもので、対象装置に該当するＩ／Ｏ状態設定情報を検索し、例えば図１７上段に示すような画面が表示される。この画面表示の例は、図１１(B) に示すグラフィック表示されたクランプ装置１（クランプ装置CL-1）に対応するＩ／Ｏ状態設定画面で、上段に「動作指令情報」、中段に「動作中の出力情報」、下段に「動作端の出力情報」がそれぞれ表示されている。
【００８５】
このＩ／Ｏ状態設定画面において、「ＰＬＣ側のＩ／Ｏ信号を示すシンボル名」は、当該設備装置（クランプ装置１）を構成する機構に付随したソレノイド、電磁弁、位置センサ等の名称のことをいい、例えば、図１７に示す「SOL_A 」はソレノイドＡ、「SOL_B 」はソレノイドＢ、「LS_A」は位置センサＡ、「LS_B」は位置センサＢ、をそれぞれ意味する。
【００８６】
また、同画面において、「信号状態」は、作動中あるいはセンサ出力有りのときを「ＯＮ」、また停止中あるいはセンサ出力無しのときを「ＯＦＦ」に表示している。「シンボル名のコメント」は、「ＰＬＣ側のＩ／Ｏ信号を示すシンボル名」が意味する内容を簡潔に表現したもので、例えば、図１７に示す「SOL_A 」はクランプ命令に対応して出力される信号である意から、「クランプ指令」と表示されている。同様に図１７に示す「SOL_B 」はアンクランプ命令に対応して出力される信号である意から、「アンクランプ指令」と表示されている。
【００８７】
一方、同画面に示す動作中および動作端の出力情報「LS_A」のコメントは、クランプ端におけるセンサ信号である意から「クランプ端」と表示され、同様に動作中、動作端の出力情報「LS_B」のコメントは、アンクランプ端におけるセンサ信号である意から「アンクランプ端」と表示されている。
【００８８】
この処理ステップでは、このように表示されたＩ／Ｏ状態設定画面において、オペレータが、各信号状態を入力する処理を行うことにより、対象装置の動作毎Ｉ／Ｏ状態情報を設定するものである。例えば、図１７下段に示すようなＩ／Ｏ機器仕様として用意されている機器構成資料から、対応するソレノイド、電磁弁、センサーに関するＩ／Ｏ仕様を、開始状態、中間状態および終了状態のそれぞれに応じてＩ／Ｏ状態設定情報に入力する。
【００８９】
当該クランプ装置１の場合には、２つのソレノイドＡ、Ｂと２つの位置センサＡ、Ｂを備えているので、オペレータが、それぞれに対応した開始状態、中間状態、および終了状態のＯＮ／ＯＦＦ情報（図１７下段に示す破線により囲まれたＯＮまたはＯＦＦ）をＩ／Ｏ状態設定情報に順次入力する。
【００９０】
なお、このＩ／Ｏ機器仕様は、ＨＤＤ２４に構成されたＤＢ（データベース）として予め格納しておいて、ステップＳ５０５によるＩ／Ｏ状態設定画面と同様、対象装置に該当するものを検索し画面表示しても良い。これにより、別途、機器構成資料を探したりする手間が省けるので、より一層、動作プログラムやシーケンスチャートの作成工数を削減することができる。
【００９１】
ステップＳ５０５により対象装置の動作毎Ｉ／Ｏ状態情報が設定されると、ステップＳ５０７で設定した動作毎Ｉ／Ｏ状態情報を３Ｄモデル属性情報ＤＢ２４ｂの動作毎Ｉ／Ｏ状態テーブル２４b2に登録する処理を行う。この処理も、入力機能部プログラム２３ａにより行われる。
【００９２】
続くステップＳ５０９では、タイミング情報設定処理を行う。この処理は、自動プログラミング処理機能部プログラム２３ｃによって行われるものであり、その詳細は１５に示されている。
図１５に示すように、オンラインシミュレーション処理におけるタイミング情報設定処理は、まずステップＳ６０１により、図１２に示すようなシーケンスチャートから１行分の文字列データを読み込む処理を行う。そして、このステップＳ６０１により読み込んだ１行分の文字列データをステップＳ６０３により解析して、動作プログラム名を抽出する処理を行い、抽出した動作プログラムは既に自動設定済みであるか否かの判断をステップＳ６０５により行う（自動設定については後述する）。
【００９３】
ステップＳ６０５による判断処理は、シーケンスチャートから読み込んだ１行分の文字列データの中に、ＯＮ／ＯＦＦ情報が含まれているか否かを判断することによって行う。即ち、抽出された動作プログラムが、自動設定済みである場合には、図１９に示すように、動作指令情報等が挿入されたシーケンスチャートが作成されるため、これに対応するＯＮ／ＯＦＦ情報の有無を当該文字列データ中に含まれているか否かを判断することにより、既に自動設定済みであるか否かを判断することができる。
【００９４】
ステップＳ６０５により、動作プログラムは既に自動設定済みであると判断した場合には、当該動作プログラムについては、ステップＳ６０９等による自動プログラミング処理２は必要ないので、ステップＳ６１３に処理を移して次のステップ番号に文字列データがあるか否かの判断を行う。一方、ステップＳ６０５により、動作プログラムは既に自動設定済みであると判断できない場合には、当該動作プログラムには未だ自動設定されていないと判断できるので、次のステップＳ６０７に処理を移す。
【００９５】
ステップＳ６０７では、動作毎Ｉ／Ｏ状態テーブル２４b2に登録された動作毎Ｉ／Ｏ状態情報を３Ｄモデル属性情報ＤＢ２４ｂから読み出す処理を行う。この動作毎Ｉ／Ｏ状態情報は、前述したステップＳ５０５、Ｓ５０７により作成、登録したもので、この読み出しにより当該対象装置に関する動作毎Ｉ／Ｏ状態情報を得ることができる。
【００９６】
次のステップＳ６０９では、ステップＳ６０７によって当該対象装置に関する動作毎Ｉ／Ｏ状態情報と動作プログラム名をパラメータとして自動プログラミング処理２（図１６）を呼び出す。例えば、図１２および図１７に示すＩ／Ｏ状態設定画面の例では、動作プログラム名のパラメータは「CLAMP1」である。
【００９７】
すると、呼び出された自動プログラミング処理２では、ステップＳ７０１により、パラメータとして受け取った動作プログラム名「CLAMP1」を手掛かりとして動作プログラムＤＢ２４ｄからオフラインシミュレーション用の動作プログラム２４d2として格納されている動作プログラム「CLAMP1」を読み出す。読み出された動作プログラム「CLAMP1」は、図１８の中段に示すように、第１行目に「PROGRAM CLAMP1」、第２行目に「BEGIN 」、第３行目に「MOVES W[1]」、第４行目に「END 」の命令語がそれぞれ記述がされている。
【００９８】
そして次のステップＳ７０３により、このように記述された動作プログラム「CLAMP1」に対し、第１行目から順番に、１行分の文字列データを読み込み、ステップＳ７０５により、当該１行分の文字列データから命令語を抽出し、ステップＳ７０７により抽出した命令語が動作命令であるか否かの判断を行う。この判定は、動作命令を見つけるまでこれらの処理を繰り返す（Ｓ７０７、Ｓ７１５）。
【００９９】
図１８中段に示す動作プログラム「CLAMP1」の例では、「MOVES 」の文字列が動作命令に相当するので、この「MOVES 」を見つけると（Ｓ７０７でＹｅｓ）、ステップＳ７０９により、この動作命令（「MOVES 」）の１行前に動作指令情報の信号を出力する命令、例えば「WaitSignal("SOL_A=ON,SOL_B=OFF")」命令を挿入する。つまり、サブルーチンとして呼び出されたときに受け取ったパラメータのうちの動作指令情報の「ＰＬＣ側のＩ／Ｏ信号を示すシンボル名」および「信号状態」を動作制御情報として、これに基づいて動作指令信号を待つ命令を生成し、当該動作命令「MOVES 」の１行前に挿入する処理を行う。これにより、クランプ装置１（クランプ装置CL-1）は、ソレノイドＡからＯＮ情報、ソレノイドＢからＯＦＦ情報が送られて来るのを待ってクランプ動作を実行すること、つまり起動タイミングをとることができる。なお、この動作指令情報は、入力情報に相当する。
【０１００】
次にステップＳ７１１により、同動作命令の１行後に動作開始後の信号を出力する命令を挿入する。通常、クランパの動作中はクランプ端、アンクランプ端の双方の信号がオフするので、例えば「BetweenSignal("LS_A=OFF,LS_B=OFF")」命令を挿入する。これも、サブルーチンとして呼び出されたときに受け取ったパラメータのうちの動作中の出力情報「ＰＬＣ側のＩ／Ｏ信号を示すシンボル名」および「信号状態」を動作制御情報として、これに基づいて動作開始後の信号を出力する命令を生成し、当該動作命令「MOVES 」の１行後に挿入する処理を行う。これにより、クランプ装置１は、動作命令を実行した後、直ちに当該クランプ装置１が動作中であることを他の設備装置に通知することから、それを受けた他の設備装置は当該クランプ装置１が動作中であることを知ることができる。なお、この動作中の出力情報は、出力情報に相当する。
【０１０１】
さらに次のステップＳ７１３によっても、同動作命令の２行後、つまりステップＳ７０９により挿入した動作開始後の信号を出力する命令の１行後に、動作端信号を出力する命令、例えば「EndSignal("LS_A=ON,LS_B=OFF") 」命令を挿入する。これも、サブルーチンとして呼び出されたときに受け取ったパラメータのうちの動作端の出力情報「ＰＬＣ側のＩ／Ｏ信号を示すシンボル名」および「信号状態」を動作制御情報として、これに基づいて動作端の信号を出力する命令を生成し、当該動作命令「MOVES 」の２行後に挿入する処理を行う。これにより、クランプ装置１は、動作命令を実行し、さらに動作開始後の信号を出力する命令を実行した後、直ちに当該クランプ装置１が動作端、つまり動作が終了したことを他の設備装置に通知する。そのため、クランプ装置１から動作端信号を受けた他の設備装置は、当該クランプ装置１の動作端タイミングを起動タイミングとすることができる。なお、この動作端の出力情報は、出力情報に相当する。
【０１０２】
このように自動プログラミング処理２によって、動作開始信号等が自動プログラミングされると、図１８下段に示すような動作プログラム「CLAMP1」（自動プログラミング後）が生成される。
即ち、同図中段に示されている動作プログラム「CLAMP1」（自動プログラミング前）の第３行目に「MOVES W[1]」の一行前に「WaitSignal("SOL_A=ON,SOL_B=OFF")」命令、また一行後に「BetweenSignal("LS_A=OFF,LS_B=OFF")」命令、さらに一行後に「EndSignal("LS_A=ON,LS_B=OFF") 」がそれぞれ記述されているため、自動プログラミング後のものでは、第１行目に「PROGRAM CLAMP1」、第２行目に「BEGIN 」、第３行目に「WaitSignal("SOL_A=ON,SOL_B=OFF")」、第４行目に「MOVES W[1]」、第５行目に「BetweenSignal("LS_A=OFF,LS_B=OFF")」、第６行目に「EndSignal("LS_A=ON,LS_B=OFF") 」、そして７行目に「END 」の命令語がそれぞれ記述がされている。
【０１０３】
ステップＳ７１３による処理が終了すると、ステップＳ７１５により次の行に命令語があるか否かの判断処理を行う。そして、この判断処理により、次の行に命令語があると判断できれば（Ｓ７１５でＹｅｓ）、ステップＳ７０３に処理を移行して、次の行に１行分の文字列データを読み出す処理を行い、前述同様の処理を行う。また当該判断処理により、次の行に命令語があると判断できなければ（Ｓ７１５でＮｏ）、次のステップＳ７１７により自動プログラミングした動作プログラムを動作プログラムＤＢ２４ｄに格納する処理を行う。これにより、当該一連の自動プログラミング処理２が終了するので、図１５に示すステップＳ６１１に処理を移す。
【０１０４】
図１５に戻ると、ステップＳ６１１では、動作指令情報、動作中の出力情報、動作端の出力情報をシーケンスチャートに書き込む処理を行う。この処理は、入力機能部プログラム２３ａにより行われるもので、動作指令情報等をオフラインシミュレーション用のシーケンスチャートに挿入する処理を行う。例えば、図１３上段に示すシーケンスチャートであれば、図１９に示すように、「動作指令情報」、「動作中出力情報」および「動作端出力情報」の各欄が挿入され、クランプ装置１またはクランプ装置２に対応したＯＮ／ＯＦＦ情報が追加される。
【０１０５】
次のステップＳ６１３では、シーケンスチャート中の次のステップ番号に文字列データがあるか否かを判断する処理を行う。そして、次のステップ番号に文字列データがあると判断できれば（Ｓ６１３でＹｅｓ）、ステップＳ６０１に戻って次のステップ番号の一行分の文字列データをシーケンスチャートから読み込む処理を行う。一方、次の行に命令語があると判断できなければ（Ｓ６１３でＮｏ）、当該シーケンスチャートの中の全ての文字列の処理が完了したと判断して、図１５に示す一連のタイミング情報設定処理を終了し、図１４に示すステップＳ５１１に処理を移す。
【０１０６】
ここで再び図１４に戻る。ステップＳ５０９によるタイミング情報設定処理が完了すると、続くステップＳ５１１では、完成した動作プログラムをオンラインでシミュレーションする処理を行う。
即ち、図４に示す３Ｄ動作プログラム実行部プログラム２３ｂ、Ｉ／Ｏ処理部プログラム２３ｄおよびＰＬＣ３０によって、動作プログラムをオンラインシミュレーションする処理が行われる。この処理では、まずＩ／Ｏ処理部プログラム２３ｄによりオンラインシミュレーション用Ｉ／Ｏに切り替える処理を行うことによって、シミュレーション装置２０とＰＬＣ３０とを接続する。そして、ＰＬＣ３０が、別途作成したシーケンスプログラムに従って各動作プログラムに逐次指示を出す。なお、Ｉ／Ｏ処理部プログラム２３ｄのオンラインシミュレーション用Ｉ／Ｏには、図２０に示すようなＰＬＣ側のＩ／Ｏ信号を示すシンボル名に対応する信号状態をセットしたＩ／Ｏ信号テーブルが設けられている。
【０１０７】
例えば、図１９の上段に示すシーケンスチャートの例では、まずステップ番号１０の行に記述されている動作プログラム「CLAMP1」にクランプ動作を実行させるため、ＰＬＣ３０は、Ｉ／Ｏ処理部プログラム２３ｄを介して３Ｄ動作プログラム実行部プログラム２３ｂに当該動作プログラムの実行命令を出力する。このときＩ／Ｏ処理部プログラム２３ｄのＩ／Ｏ信号テーブルには、例えば、図２０に示すように、ソレノイドＡ、Ｂ、Ｃ、Ｄや位置センサＡ、Ｂ、Ｃ、Ｄの信号状態がセットされている。
【０１０８】
動作命令を受けた３Ｄ動作プログラム実行部プログラム２３ｂは、予め実行可能に待機している動作プログラム「CLAMP1」に従って実行するが、動作プログラムに「WaitSignal("SOL_A=ON,SOL_B=OFF")」命令が記述されているため、当該Ｉ／Ｏ信号テーブルを参照しソレノイドＡがＯＮ状態、ソレノイドＢがＯＦＦ状態になるまで「MOVES W[1]」命令の実行、つまりクランプ動作を待つ。そして、WaitSignalの条件が揃うと、クランプ動作を行い、「BetweenSignal("LS_A=OFF,LS_B=OFF")」命令、「EndSignal("LS_A=ON,LS_B=OFF") 」命令を順次実行、つまりＩ／Ｏ処理部プログラム２３ｄに位置センサＡ、Ｂの状態信号を出力する。これにより、当該Ｉ／Ｏ信号テーブルの位置センサＡ、Ｂの信号状態が書き換えられるため、ＰＬＣ３０や他の設備装置にクランプ装置１の状態をリアルタイムに知らせることができる。そして同様に、次のステップ番号２０の行に記述されている動作プログラム「CLAMP2」は、ソレノイドＣがＯＮ状態、ソレノイドＤがＯＦＦ状態になるのを待って、クランプ動作を実行する。
【０１０９】
このようにステップＳ５１３によるシミュレーション処理が終了すると、次のステップＳ５１３により、オペレータが、ステップＳ５１１によるシミュレーション結果に問題があるか否かを判断し、問題がなければ（Ｓ５１３でＹｅｓ）、一連の本オンラインシミュレーション処理を終了する。オペレータの判断によりシミュレーション結果に問題があれば（Ｓ５１３でＮｏ）、ステップＳ５１１に処理を移行して、再度、動作プログラムのシミュレーション処理を行う。
【０１１０】
上述したように図１４に示すオンラインシミュレーション処理では、ステップＳ５０１によりディスプレイ２７に表示された３Ｄ機構モデルの中から、ステップＳ５０３により対象装置を選択し、選択した対象装置の動作毎Ｉ／Ｏ状態情報（動作制御情報（機構属性情報））をステップＳ５０５により３Ｄモデル属性情報ＤＢ２４ｂから読み出しディスプレイ２７に表示する。これにより、対象装置からＰＬＣ３０に送出される出力情報、または対象装置がＰＬＣ３０から受け取る入力情報を容易に参照することができる。つまり、シーケンスチャートの作成者や動作プログラムの開発者が、対象装置を制御するために用いられる動作毎Ｉ／Ｏ状態情報の出力情報や入力情報を熟知していない場合であっても、ディスプレイ２７に表示された３Ｄ機構モデルの中から対象装置を選択すれば、動作毎Ｉ／Ｏ状態情報の出力情報や入力情報がディスプレイ２７に表示されるので、容易に参照することができ、当該対象装置に関連する資料等を別途参照する手間を省くことができる。したがって、３Ｄ機構モデルを実行させるシーケンスチャートの作成工数や動作プログラムのプログラミング工数を削減し得る効果がある。
【０１１１】
また、図１４に示すオンラインシミュレーション処理のタイミング情報設定処理（図１５）では、複数存在する設備装置同士が連携して所定のシーケンス動作を実行する場合において、ステップＳ６０７により対象装置の動作毎Ｉ／Ｏ状態情報（動作制御情報（機構属性情報））に基づいて、動作指令情報、動作中出力情報および動作端出力情報を生成し、ステップＳ６０９により、動作指令情報、動作中出力情報および動作端出力情報をオンラインシミュレーションさせる対象装置の動作プログラムに組み込む。これにより、動作指令情報、動作中出力情報および動作端出力情報を対象装置の動作プログラムに自動的に組み込むことから、動作プログラムの開発者は、動作プログラムを容易に変更することができる。したがって、３Ｄ機構モデルを実行させる動作プログラムのプログラミング工数を削減し得る効果がある。
【０１１２】
(4) シミュレーション結果比較処理（図２１〜図２３参照）
シミュレーション結果比較処理は、オンラインシミュレーションでのシミュレーション動作と、オフラインシミュレーションでのシミュレーション動作とを比較して、その比較結果を表示する処理である。以下、この処理の実施形態の一例を示す。
【０１１３】
図２１は、シミュレーション結果比較処理手順の一例を示すフローチャートである。ステップＳ８０１では、図１４のステップＳ５１１で行われるオンラインシミュレーション処理で実行される動作プログラムの実行順序をモニタする。ステップＳ８０３でモニタ結果を解析し、動作プログラムの実行開始を検出したら、ステップＳ８０５に処理を移行する。ステップＳ８０５では、図２２(A) に示すように動作プログラムの実行順序を記憶する。この処理は、ステップＳ８０７でオンラインシミュレーションの終了が検知されるまで繰り返される。
【０１１４】
ステップＳ８０７でオンラインシミュレーションの終了を検知したら、ステップＳ８０９にて、オンラインシミュレーションでの動作プログラムの実行順序と、オフラインシミュレーション時の動作プログラム実行順序とを比較する。オフラインシミュレーション時の動作プログラム実行順序は、図１３に示すようにシーケンスチャートデータ記憶部に記憶されているものを参照する。
【０１１５】
ステップ８１１では、比較結果をディスプレイ２７に表示する処理を行う。比較の結果、両者の実行順序に違いがなければその旨を表示し、違いがあればその部分をディスプレイ２７に表示する。例えば、Ｉ／Ｏ状態情報の設定ミスにより、「CLAMP1」と「CLAMP2」の動作順序が逆であった場合は、図２２(B) に示すような画面表示をすることにより、オペレータにその内容を知らせる。オペレータはこの画面表示により、Ｉ／Ｏ状態情報の設定ミスがあったことを知ることができ、その修正をすることができる。このような動作順序の間違いは、オペレータがシミュレーションの実行状況をグラフィック表示する画面表示で見ていても気づかない場合があるが、上記の方法によれば、確実に動作順序の間違いを発見できるので、制御装置の制御プログラムのデバックが簡単且つ確実に行える。なお、上記したステップＳ８０１〜Ｓ８１１の処理は、オンラインシミュレーションの処理とは独立かつ並行して行われる。
【０１１６】
以上、説明した発明の実施の形態では、制御装置はシミュレーション装置とは別体の装置として構成されている場合について説明したが、制御装置はコンピュータで動作するソフトウェアとして構成され、シミュレーション装置としての機能を実現するためのソフトウェアと共に、同一のコンピュータで同時並行して実行されるものでもよい。即ち、オンラインシミュレーションにおいては、制御装置で実行される設備を制御するための制御プログラムを仮想的にコンピュータ上で実行し、この実行結果として得られるＩ／Ｏ状態情報に基づいてシミュレーション動作を行うものでもよい。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るシミュレーション装置の構成を示すブロック図である。
【図２】設備装置が単体である場合におけるオフラインシミュレーションに係る機能構成を示すブロック図である。
【図３】設備装置が複数である場合におけるオフラインシミュレーションに係る機能構成を示すブロック図である。
【図４】オンラインシミュレーションに係る機能構成を示すブロック図である。
【図５】設備装置が単体である場合におけるオフラインシミュレーションに係る属性情報作成・登録処理の流れを示すフローチャートである。
【図６】図５に示す３Ｄ機構モデルの画面表示処理による画面表示例を示す説明図である。
【図７】図５に示す属性情報作成・登録処理の説明を補足する説明図で、図７(A) は動作プログラムの一例を示すもので、図７(B) は動作プログラムの登録例を示すものである。
【図８】設備装置が複数である場合におけるオフラインシミュレーション処理の流れを示すフローチャートである。
【図９】図８に示すタイミング情報設定処理の流れを示すフローチャートである。
【図１０】図９に示す自動プログラミング処理１の流れを示すフローチャートである。
【図１１】図８に示すオフラインシミュレーション処理による画面表示例を示す説明図で、図１１(A) は３Ｄ機構モデルの表示例を示すもので、図１１(B) は選択した対象装置の動作種類の一覧表の表示例を示すものである。
【図１２】図８に示すオフラインシミュレーション処理により作成されたシーケンスチャートの一例を示す説明図である。
【図１３】図８に示すオフラインシミュレーション処理の説明を補足する説明図である。
【図１４】オンラインシミュレーション処理の流れを示すフローチャートである。
【図１５】図１４に示すタイミング情報設定処理の流れを示すフローチャートである。
【図１６】図１５に示す自動プログラミング処理２の流れを示すフローチャートである。
【図１７】図１４に示すオンラインシミュレーション処理の説明を補足する説明図である。
【図１８】図１４に示すオンラインシミュレーション処理の説明を補足する説明図である。
【図１９】図１４に示すオンラインシミュレーション処理により作成されたシーケンスチャートの一例を示す説明図である。
【図２０】ＰＬＣ側のＩ／Ｏ信号状態を示す一覧表である。
【図２１】シミュレーション結果比較処理の流れを示すフローチャートである。
【図２２】図２１に示すシミュレーション結果比較処理の説明を補足する説明図である。
【符号の説明】
２０      シミュレーション装置
２１      ＣＰＵ
２２      ＲＡＭ
２３      ＲＯＭ
２３ａ    入力機能部プログラム
２３ｂ    ３Ｄ動作プログラム実行部プログラム
２３ｃ    自動プログラミング処理機能部プログラム
２３ｄ    Ｉ／Ｏ処理部プログラム
２３ｅ    オフラインシミュレーション実行部
２４      ＨＤＤ（情報記録媒体）
２４ａ    ３Ｄモデル情報ＤＢ
２４ｂ    ３Ｄモデル属性情報ＤＢ
２４b1    動作プログラム名テーブル
２４b2    動作毎Ｉ／Ｏ状態テーブル
２４ｃ    シーケンスチャートＤＢ
２４ｄ    動作プログラムＤＢ
２６      入力装置
２７      ディスプレイ（表示装置）
３０      ＰＬＣ（制御装置）
CL-1      クランプ装置１（設備装置）
CL-2      クランプ装置２（設備装置）
WL-1      溶接装置１（設備装置）
WL-2      溶接装置２（設備装置）
Ｗ        ワーク
【図１】
0004198374.tif 000002
【図２】
0004198374.tif 000003
【図３】
0004198374.tif 000004
【図４】
0004198374.tif 000005
【図５】
0004198374.tif 000006
【図６】
0004198374.tif 000007
【図７】
0004198374.tif 000008
【図８】
0004198374.tif 000009
【図９】
0004198374.tif 000010
【図１０】
0004198374.tif 000011
【図１１】
0004198374.tif 000012
【図１２】
0004198374.tif 000013
【図１３】
0004198374.tif 000014
【図１４】
0004198374.tif 000015
【図１５】
0004198374.tif 000016
【図１６】
0004198374.tif 000017
【図１７】
0004198374.tif 000018
【図１８】
0004198374.tif 000019
【図１９】
0004198374.tif 000020
【図２０】
0004198374.tif 000021
【図２１】
0004198374.tif 000022
【図２２】
0004198374.tif 000023