(57)【特許請求の範囲】
【請求項１】
複数の実在機器のうち、シミュレーション対象となる実在機器の動作を直接制御する制御手段と、
シミュレーション対象となる実在機器の動作を仮想表示空間で仮想機器により模擬するシミュレーション手段と、
シミュレーション対象となる前記実在機器、及び前記仮想機器の動作シーケンスを、前記実在機器、及び前記仮想機器のタスクに対応したノードをタスクの動作順に接続したツリー構造で設定する設定手段と、
実行すべきノードが記憶される管理バッファと、
前記ツリー構造に設定されたノードのうち実行すべき全てのノードを前記管理バッファに記憶し、記憶したノードが前記仮想機器を動作させるノードの場合は前記シミュレート手段により前記仮想機器を動作させ、前記実在機器を動作させるノードの場合は前記制御手段により前記実在機器を動作させることによりノードの接続順に従って当該ノードを順に実行する実行手段と、
前記実行手段により実行される前記実在機器及び前記仮想機器の動作状態を監視する監視手段とを備え、
前記設定手段は、前記実行手段により並列実行される前記実在機器のノードと前記仮想機器のノードとを前記ツリー構造の同階層に配置し、
前記実行手段は、前記ツリー構造において実行すべき最上位の階層に前記実在機器のノードと前記仮想機器のノードとが配置されていた場合は、前記最上位の階層に配置されたノードを前記管理バッファに記憶して並列実行した後、並列実行した前記ノードのうち実行が終了したノードを削除すると共に当該ノードを親ノードとした場合に連なる子ノードの全てを前記管理バッファに記憶して実行することを繰り返すことを特徴とするシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生産システムを構成する複数の実在機器のうち、シミュレーション対象となる実在機器の動作を仮想表示空間で模擬するシミュレーション装置に関する。
【背景技術】
【０００２】
生産システムを構築する場合に、実在機器の一部を仮想機器に代えて動作させることにより、生産システムの動作の検証を効率化することが提案されており、それらの同期を取る手段として、共有メモリを用いることが提案されている（特許文献１参照）。
【特許文献１】特開２０００−３３０９７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１のものでは、共有メモリ上に実在機器及び仮想機器の入出力信号Ｉ／Ｏに対応する領域をそれぞれ割当て、その実在機器及び仮想機器の動作を入出力Ｉ／Ｏの監視とＯＮ／ＯＦＦ制御でハンドシェイク処理を行うことで同期を取りながら実行する方法であることから、共有メモリ上のフラグの管理（追加、割当、ＯＮ／ＯＦＦ制御）が複雑となる。このため、大規模なシミュレーションでは、実在機器及び仮想機器の動作を制御するための入出力Ｉ／Ｏの接続関係を、動作の同期を取りながら記述するのは極めて困難となる。
また、シミュレーション実行時に実在機器と仮想機器との一部の動作を切換えた場合に、実在機器は自分に搭載されているプログラムに基づいて動作するために、想定したシナリオ通りに動作の同期を図ることができないという問題がある。
【０００４】
本発明は上記事情に鑑みてなされたもので、その目的は、実在機器と仮想機器とを混在させた状態でそれらの動作をシミュレーションする場合に、実在機器及び仮想機器の動作を制御するための接続関係の記述が容易であると共に、実在機器と仮想機器との動作を切換えた場合であっても確実に同期を図ることができるシミュレーション装置を提供することにある。
【課題を解決するための手段】
【０００５】
本発明によれば、実行手段が、設定手段により設定されたツリー構造をなすノードの接続関係に基づいてシミュレート手段により仮想機器を仮想表示空間で動作させたり、実行手段により実在機器を動作させたりするので、実在機器及び仮想機器の動作を制御するための接続関係の記述が容易である。
【０００６】
ここで、実行手段がノードに対応したタスクを順に実行する場合に、設定手段により実在機器のノードと仮想機器のノードとが並列接続されていた場合は、それらのノードに対応するタスクを実行開始すると共に、それらのタスクの全てが実行完了したことを条件として次に接続されているノードに対応したタスクを実行するので、実在機器と仮想機器との動作を切換えた場合であっても確実に同期を図ることができる。
【発明を実施するための最良の形態】
【０００７】
本発明の一実施形態について図面を参照しながら説明する。
図１は、シミュレータの構成を概略的に示すブロック図である。シミュレータ１は、図示しないマイクロコンピュータを主体とするシミュレーション管理部（制御手段、シミュレーション手段、実行手段、監視手段に相当）２、設定部（設定手段に相当）３、モニタリング部４から構成されている。シミュレーション管理部２は、複数の実機（実在機器に相当）５、或いは当該実機５に対応する仮想機（仮想機器に相当）６を動作するための実行用プログラムＡ，Ｂ，Ｃ……を記憶しており、それらの実行用プログラムをタスク管理バッファ７に記憶されたタスクの情報を参照しながら順に実行可能となっている。
【０００８】
実機５は、ゲート（Ｉ／Ｏ）８を通じて電気的にシミュレーション管理部２と接続可能となっている。仮想機６は、図示しない仮想的なゲート（プログラムによる仮想的なＩ／Ｏ）を通じて接続可能となっている。設定部３は、シミュレーション管理部２が、実機５或いは仮想機６の動作シーケンスを実現するためのプログラムを実行する場合の各種設定を行うためのものである。モニタリング部４は、作業者が記述した動作シーケンスを記述したツリー構造（以下、動作ツリーと称する）を表示したり、仮想機６の仮想表示空間での動作をモニタリングしたりするためのものである。
【０００９】
シミュレーション管理部２は、次のような特徴を有する。
（１）シミュレーション管理部２は内部メモリに実行用プログラム（図１にＡ，Ｂ，Ｃ……で示す）を記憶しており、実機５の制御を直接行ったり（従来のものでは、実機内部に動作プログラムが存在する）、仮想機６の制御を仮想表示空間で制御したりするようになっている。
（２）実機５はシミュレーション管理部２のゲート８に電気的に接続され、実機５に対する制御はゲート８を通じて直接行うようになっている。
（３）ゲート８は、実機５に通電可能なようにＯＮ／ＯＦＦ可能となっている。実機５がない（不要な）場合は、ゲート８をＯＦＦするが、対応する仮想機６への接続は常にＯＮ（仮想機６は常に実行可能とするという意味）させる。
（４）実機５及び仮想機６の動作制御はタスクとして管理し、実機５を接続した場合は実機５及び仮想機６のタスクを常に並列化して扱う。
（５）実行時に順次実行のタスクに加えて、並列化された実機５及び仮想機６のタスクの情報をタスク管理バッファ７に積み、タスク完了時にタスク管理バッファ７から消去する。タスク管理バッファ７が空なら動作は全て完了しているので、次の動作に移行する。
【００１０】
上記動作を実現するために設備の動作シーケンスの表現を次のように規定した。
（１）設備動作は、設定部３を起動し、後述のように規定された動作ツリーによる表現で記述する。
（ａ）動作ツリーはノードを階層化した構造で、ノード間の関係（親子、兄弟）で動作シーケンスを表現する。ノードとは、後述するようにフローチャートで記述することが可能な設備の動作を単独で完結する１つの動作となるように規定し直した動作ツリー上のタスクのことである。
（ｂ）ノードの種類により、動作の種類を決定する。
（２）実機５と仮想機６とを混在させた場合は、両者の動作を同期化する。
同期化の手法として、後述するようにタスク管理バッファ７によるタスクの管理を用いた。
【００１１】
さて、設備動作を事前検証する場合は、シミュレータ１により仮想機６のみで動作ツリーを記述し、仮想表示空間で仮想機６を動作させることで確認を行う。次に、シミュレータ１に実機５を接続してより詳細化した動作確認を行うことが必要だが、設備を構成する機器が全て揃っていない段階では検証できないことから、全体の設備動作シーケンスの内、一部の実機５だけが揃った状況でも全体の動作検証を行えるようにした。つまり、一部は実機動作、一部は仮想機動作で構成され、実機動作と仮想機動作は同時、或いは順次実行可能となっている。
【００１２】
ところで、実機５と仮想機６とを実行させた場合に仮想機６が実機よりも動作が速く終了したり、実機５が仮想機６よりも動作が速く終了したりした場合は、実機５と仮想機６との動作が同期しなくなり、次の動作に移行するのに支障を生じる。
【００１３】
そこで、実機５と仮想機６との両方の動作が終了するのを待って次の動作シーケンスに移行するようにした。このように全体の動作シーケンスに矛盾が生じないようにするための動作を「実機と仮想機の同期化」と呼ぶ。この「実機と仮想機の同期化」をプログラムで表現するために、本実施形態では次のような表現のあり方を採用した。
（１）動作シーケンス全体を単独で完結する動作に分割（本発明でいうタスクに分割）
（２）順次動作と並列動作とを区分する。
（３）動作シーケンス全体を後述する決まりにより動作ツリーで構成させる。
ツリー構造の決まりとしては、
（１）順次動作は親子として構成させる。
（２）並列動作は兄弟として構成させる。
（３）動作終了の同期化が必要な動作はサブツリーとして構成させる。
【００１４】
シミュレーション管理部２は、動作ツリーを次のように解釈して動作する。
（１）ノードの親と子の関係はタスクの順次実行を意味し、親ノードから子ノード、孫ノードの順に実行する。
（２）ノードの兄弟の関係は並列実行を意味し、親ノードのタスクが完了した時点で実行を開始する。
（３）子ノードがないノードで一連の順次処理の終わりを意味する。
【００１５】
シミュレーション管理部２は、タスクを次のように実行する。
（１）開始ノードを、最初にタスク管理バッファ７に積む。
（２）タスク管理バッファ７に積まれている全タスクを実行する。
（３）処理が完了したタスクがあれば、親ノードに接続された全ての子ノードをタスク管理バッファ７に積み、親ノードに対応したタスクをタスク管理バッファ７から削除する。
（４）タスク管理バッファ７に積まれている全タスクを実行する。
（５）上記（３）と（４）を繰返す。
（６）タスク管理バッファ７が空になれば、動作完了となる。
【００１６】
図２は、簡略的な動作ツリーの一例を示している。この動作ツリーは、プログラム作成時に設定部３を起動することにより作成されたもので、モニタリング部４に表示されるものである。ノードＡは開始ノード、ノードＢ１，Ｃ１は、ノードＡの子ノードであると同時に兄弟ノード、ノードＢ２はノードＢ１の子ノード、ノードＣ２はノードＣ１の子ノードに相当する。
【００１７】
図３は、図２に示す動作シーケンスの実行順序を示し、図４は、図３に示すように動作シーケンスを実行した場合におけるタスク管理バッファ７に積まれたタスクの変化を示している。シミュレーション管理部２は、動作ツリーを実行する場合は、設定部３により設定された動作ツリーが示すノードの接続関係に基づいてノードに対応するタスクを実行するための実行用プログラムを順に実行するようになっている。つまり、図２に示す動作シーケンスを実行する場合は、動作ツリーが示すノードの接続関係に基づいて開始ノードＡに対応したタスクＡをタスク管理バッファ７に積み、タスクＡを実行するためのプログラムを実行する。タスクＡの実行が終了した場合は、ノードＡに接続されている子ノードであると共に兄弟ノードに対応したタスクＢ１，Ｃ１をタスク管理バッファ７に積み、タスクＢ１，Ｃ１に対応するプログラムを並列実行する。タスクＢ１が先に終了した場合はタスクＢ１を消去すると共にタスクＢ２をタスク管理バッファ７に積み、タスクＢ２に対応するプログラムを実行する。タスクＣ１が終了したところで、タスクＣ１を消去すると共にタスクＣ２をタスク管理バッファ７に積み、タスクＣ２に対応するプログラムを実行する。タスクＣ２の実行が終了したときは、タスクＣ２を消去し、タスク管理バッファ７が空となったところで動作ツリーの全てのタスクの実行が終了する。
【００１８】
次に、上記構成の作用について説明する。
実機設備が導入されるのに先立って、シミュレータ１により仮想機６の動作を確認する。図５は、仮想機６による動作ツリーの一例を示している。仮想設備（仮想機に相当）でパレット供給（ＡＣＴ１）を実行し、パレットが到着したときは、仮想ロボット（仮想機に相当）の移動（ＡＣＴ２−２）を実行し、仮想ロボットが到着したときは、仮想ロボットによりパレット上のロボットワークを取り出す（ＡＣＴ３）という一連の動作シーケンスを想定する。
【００１９】
このような動作シーケンスは、順次動作であることから、上述した動作ツリーの親子ノードの接続関係により記述可能である。
さて、実機５を設置した場合は、実機５と、当該実機５に対応する仮想機６とを並列に実行させ、実機５の実際の動作、或いは動作速度を確認することにより、実機５のプログラムの修正に反映させることができる。
【００２０】
仮想機６だけの動作ならば、親子ノードで記述可能であるが、例えばＡＣＴ２として実機ロボットを動作させる場合は、実機ロボットと仮想ロボットとを並列動作させることにより実機ロボットの動作を確認することになる。つまり、仮想機でパレット供給（ＡＣＴ１）し、実機ロボットの移動（ＡＣＴ２−１）と仮想ロボットの移動（ＡＣＴ２−２）を並列実行させ、両者移動完了でパレット上のワークを取り出すという動作シーケンスを実行することになる。
【００２１】
図６は、このような動作シーケンスを示すフローチャートである。仮想設備によるＡＣＴ１でパレットを移動し、パレットが到着すると、ＡＣＴ２を実行する。つまり、ＡＣＴ２−１として実機ロボットを移動すると同時に、ＡＣＴ２−２として仮想ロボットを移動し、両方のロボットが到着したところで、仮想ロボットによりＡＣＴ３としてロボットワークの取り出しを実行することになる。
【００２２】
上述した動作ツリーの決まりに従って図６のフローチャートをタスクとして表現すると、図７に示すようになる。
（１）ＡＣＴ１のパレットの移動はパレットが到着して完結することから、パレットの移動から到着するまでが１つのタスクＭと規定することができる。
（２）ＡＣＴ２−１の実機ロボットの移動は実機ロボットが到着して完了することから、実機ロボットの移動から到着までを１つのタスクＯ’と規定することができる。
（３）ＡＣＴ２−２の仮想ロボットの移動は仮想ロボットが到着して完了することから、仮想ロボットの移動から到着までを１つのタスクＯと規定することができる。
（４）ＡＣＴ３の仮想ロボットによるロボットワークの取り出しはこれ自体で完了することから、１つのタスクＮと規定することができる。
【００２３】
作業者は、一部の動作で実機５を動作させる場合は、仮想機６をターゲットに動作ツリーを完成して目的の処理を完成させる。この場合、仮想機６に対する処理と並列に実機５に対する動作を記述する必要があると共に、実機動作と仮想機動作の処理時間の違い（終了タイミングの違い）が次の動作に影響を及ぼさないために、サブツリーによりこれらの動作の終了の同期化を図る。尚、終了動作の同期化を図る必要がない場合は、兄弟ノードのみで記述すればよく、サブツリーを用いる必要はない。
【００２４】
図８は、サブツリーを用いて終了の同期化を図る場合の動作ツリーを示す図、図９は、図８の動作ツリーを実行する場合のタスク管理バッファ７に記憶されたタスクの変化を示す図である。実行開始動作であるノードＭには、実機ロボットと仮想ロボットとの動作終了の同期を図る必要から、兄弟ノードとしてペアで使用されるノードＳとノードＸとに接続されている。ノードＳは、モーションＣＡＬＬノードであり、このモーションＣＡＬＬノードによりノードＸに接続されたノードＡが呼出される。これらのモーションＣＡＬＬノード及びノードＡによりサブツリーが構成されている。ノードＸに接続されたノードＡは、モーションＣＡＬＬノードによるモーションＣＡＬＬを受けるノードで、仮想ロボットの移動動作であるノードＯと、実機ロボットの移動動作であるノードＯ’とが兄弟ノードとして接続されている。
【００２５】
図８に示す例の場合、シミュレーション管理部２は、実行開始すると、動作ツリーの開始ノードに対応するタスクＭをタスク管理バッファ７に積むことにより、タスクＭ実行用のプログラムを実行する。これにより、仮想設備によりパレットの移動が実行される。このパレットの移動は、仮想表示空間で行われるようになっており、作業者は、モニタリング部４によりパレットの移動を確認することができる。
【００２６】
シミュレーション管理部２は、仮想表示空間上のパレットの移動を終了すると、タスク管理バッファ７のタスクＭを消去し、動作ツリーに基づいてノードＭの接続関係を判断する。この場合、ノードＭには、ノードＳとノードＸとが兄弟ノードとして接続されていることから、タスク管理バッファ７にノードＳに対応したタスクＳを積む。尚、ノードＸは何も実行しないＮＯＰであることから、タスクＸをタスク管理バッファ７に積むことはない。
【００２７】
シミュレーション管理部２は、タスクＳの実行プログラムにより「ＣＡＬＬ  Ａ」を実行し、ノードＸに接続された子ノードであるノードＡに対応したタスクＡをタスク管理バッファ７に積む。この場合のタスク管理バッファ７はローカルバッファとして機能し、それまでのタスク管理バッファ７はグローバルバッファとして機能するようになる。
【００２８】
ノードＡは、ノードＸと同様に何もしないノードであるが、ノードＸと異なり、接続されている子ノードを直ちに実行するノードである。つまり、ローカルバッファに積まれたタスクＡは直ちに消去され、ノードＡに接続された子ノードであると共に兄弟ノードであるノードＯ及びノードＯ’に対応したタスクＯ及びノードＯ’がタスク管理バッファ７に積まれるようになる。
【００２９】
シミュレーション管理部２は、タスク管理バッファ７に積まれたタスクＯ、Ｏ’に対応したプログラムを並列に実行開始する。これにより、実機ロボットが実際に移動すると同時に仮想ロボットが仮想表示空間で移動する。移動動作が終了した場合は、終了した動作に対応したタスクＯ、Ｏ’を消去する。
図９に示す例では、仮想ロボットの動作が先に終了し、実機ロボットの動作がまだ終了していない場合を示しており、ローカルバッファに積まれたタスクＯが消去されるものの、タスクＯ’は依然としてローカルバッファに積まれている。
【００３０】
シミュレーション管理部２は、タスクＯ’が終了したかを監視しており、タスクＯ’が終了した場合は、ローカルバッファに積まれているタスクＯ’を消去する。これにより、ローカルバッファが空となり、ローカルバッファの機能が終了することから、タスクＳが終了する。
【００３１】
シミュレーション管理部２は、タスクＳが終了したことから、グローバルバッファに積まれていたタスクＳを消去すると共に、動作ツリーに基づいてノードＳに接続されていたノードＮに対応するタスクＮをグローバルバッファ（この場合は、通常のタスク管理バッファ７）に積み、タスクＮの実行用プログラムを実行する。つまり、仮想ロボットによりワークの取り出しを実行し、ワークの取り出しが終了したところで、タスク管理バッファ７に積まれていたタスクＮを消去する。これにより、タスク管理バッファ７が空になり、実行すべきタスクが無くなることから、動作ツリーに基づく全体の動作が完了する。
【００３２】
要するに、動作ツリーとしてサブツリーを用いることにより、あたかもメインルーチンからサブルーチンを呼び出し、サブルーチンの実行が終了したところでメインルーチンに戻るような動作が行われるので、サブツリーの全てのタスクが終了するまで、動作ツリーのノードＳに接続された次のノードＮが実行されることはなく、並列動作されるタスクの終了の同期化を図ることができる。
以上のようにして、動作ツリーによりタスクの動作の順序を記述しながら、サブツリーを用いることにより実機５と仮想機６との並列動作の実行開始及び実行終了の同期化を図ることが可能となる。
【００３３】
一方、実機５と仮想機６とを混在する目的として、上述した生産システム構築の他に安全確保がある。危険な箇所は仮想機６で動作させ、比較的安全な箇所に関しては実機５を使用する。この組み合わせて動作シーケンスが確定すれば、次に仮想機６があった箇所をさらに同様に実機５に置き換えていく手順で安全に設備動作を完成させることが可能となる。
【００３４】
このような実施形態によれば、シミュレータ１のシミュレーション管理部２は、動作ツリーを構成するタスクの接続関係に基づいて、自己に予め記憶している実行用プログラムにより実機５を直接制御すると共に仮想表示空間で仮想機６を制御するように構成されているので、タスクの動作の同期を確実に図ることができると共に、実機５と仮想機６との動作を切換えた場合であっても同期化を維持することができる。従って、実在機器及び仮想機器の入出力信号Ｉ／Ｏに対応する領域をそれぞれ割当て、その実在機器及び仮想機器の動作を入出力Ｉ／Ｏを通じて実際の時間に合わせて同期を取りながら実行する従来例と違って、実機５及び仮想機６の動作を制御するための動作ツリーを構成するタスクの接続関係の記述が容易であると共に、実機５と仮想機６との動作を切換えた場合であっても確実に同期を図ることができる。
【００３５】
しかも、動作ツリーにより、実機５の動作に対応したノードと仮想機６の動作に対応したノードとが兄弟ノードとなるように接続されている場合は、それらの動作を実行するようにしたので、動作ツリーにより実機５と仮想機６との実行開始の同期を図ることができる。
また、モーションＣＡＬＬノードが記述されている場合は、ＣＡＬＬ動作を実行することにより、ＣＡＬＬ動作の動作対象となる全てのタスクの実行が終了するまで次の動作を実行しないので、動作ツリーを用いながら、実機５と仮想機６との実行終了の同期を図ることができる。
【００３６】
（他の実施形態）
本発明は、上記実施形態に限定されることなく、次のように変形または拡張できる。
並列動作による実機５と仮想機６との終了が同期でない場合は、実記５の終了タイミングが仮想機６の終了タイミングに合うように実機５の速度を変更するようにプログラムを自動的に補正するようにしてもよい。
【図面の簡単な説明】
【００３７】
【図１】本発明の一実施形態におけるシミュレータの構成を示す機能ブロック図
【図２】動作ツリーの一例を示す図
【図３】動作順序を示す図２相当図
【図４】タスク管理バッファに積まれているタスクの変化を示す図
【図５】仮想ロボットと実機ロボットとの混在動作を示すモニタ画面図
【図６】仮想ロボットと実機ロボットとの混在動作を示すフローチャート
【図７】タスクと対応させて示す図６相当図
【図８】図７に対応した動作ツリーを示す図
【図９】図８の動作ツリー実行時にタスク管理バッファに積まれているタスクの変化を示す図
【符号の説明】
【００３８】
図面中、１はシミュレータ、２はシミュレーション管理部（制御手段、シミュレーション手段、実行手段、監視手段）、３は設定部（設定手段）、５は実機（実在機器）、６は仮想機（仮想機器）、７はタスク管理バッファである。
【図１】
0004834816.tif 000002
【図２】
0004834816.tif 000003
【図３】
0004834816.tif 000004
【図４】
0004834816.tif 000005
【図５】
0004834816.tif 000006
【図６】
0004834816.tif 000007
【図７】
0004834816.tif 000008
【図８】
0004834816.tif 000009
【図９】
0004834816.tif 000010