以下、実施形態について、図面を参照しつつ詳細に説明する。説明において、同一要素又は同一機能を有する要素には同一の符号を付し、重複する説明を省略する。
〔マシンシステム〕
図1に示すマシンシステム1は、複数のマシンの協働によって、ワークの生産等を行うシステムである。一例として、マシンシステム1は、マシン2と、マシン3A,3Bと、カメラ5と、制御用のコントローラ100,200A,200Bと、設定用のコントローラ300と、シミュレーション装置400とを備える。
マシン2は、ワーク90を搬送する搬送装置であり、荷置台11と、無人搬送車12と、在荷センサ13とを有する。荷置台11は、搬送対象のワーク90を支持する。無人搬送車12は、荷置台11を支持し、予め定められた搬送経路を走行する。在荷センサ13は、例えば荷置台11の重量等に基づいて、荷置台11上にワーク90が存在するか否かを検出する。
マシン3Aは、ワーク90に対するねじ締め作業を行う。例えばマシン3Aは、所謂垂直多関節ロボットであり、ねじ締め用のツール60Aの位置・姿勢を多関節アームにより調節し、ツール60Aによりねじ締め作業を行う。マシン3Bは、マシン3Aによるねじ締め用の作業位置P1にワーク90を配置し、ねじ締め済みのワーク90を作業位置P1から荷置台11上に搬送する。例えばマシン3Bは、所謂垂直多関節ロボットであり、把持用のツール60Bによりワーク90を把持させ、ツール60Bの位置・姿勢を多関節アームにより変更することでワーク90を搬送する。カメラ5は、作業位置P1におけるワーク90の設置状態を検出する。
図2に示すように、マシン3Aは、例えば基部21と、旋回部22と、第一アーム23と、第二アーム24と、手首部25と、先端部26と、アクチュエータ51,52,53,54,55,56と、ツール60Aとを有する。基部21は、作業エリアの床面等に設置される。旋回部22は、鉛直な軸線31まわりに回転可能となるように基部21の上に取り付けられている。例えばマシン3Aは、旋回部22を軸線31まわりに回転可能となるように基部21に取り付ける関節41を有する。第一アーム23は、軸線31に交差(例えば直交)する軸線32まわりに回転可能となるように旋回部22に接続されている。例えばマシン3Aは、第一アーム23を軸線32まわりに回転可能となるように旋回部22に接続する関節42を有する。交差は、いわゆる立体交差のように、ねじれの関係にあることを含む。以下においても同様である。第一アーム23は、軸線32に交差(例えば直交)する一方向に沿って旋回部22から延びている。
第二アーム24は、軸線32に平行な軸線33まわりに回転可能となるように第一アーム23の端部に接続されている。例えばマシン3Aは、第二アーム24を軸線33まわりに回転可能となるように第一アーム23に接続する関節43を有する。第二アーム24は、軸線33に交差(例えば直交)する一方向に沿って第一アーム23の端部から延びるアーム基部27と、同じ一方向に沿ってアーム基部27の端部から更に延びるアーム端部28とを有する。アーム端部28は、アーム基部27に対して軸線34まわりに回転可能である。軸線34は、軸線33に交差(例えば直交)する。例えばマシン3Aは、アーム端部28を軸線34まわりに回転可能となるようにアーム基部27に接続する関節44を有する。
手首部25は、軸線34に交差(例えば直交)する軸線35まわりに回転可能となるようにアーム端部28の端部に接続されている。例えばマシン3Aは、手首部25を軸線35まわりに回転可能となるようにアーム端部28に接続する関節45を有する。手首部25は、軸線35に交差(例えば直行)する一方向に沿ってアーム端部28の端部から延びている。先端部26は、軸線35に交差(例えば直交)する軸線36まわりに回転可能となるように、手首部25の端部に接続されている。例えばマシン3Aは、先端部26を軸線36まわりに回転可能となるように手首部25に接続する関節46を有する。
アクチュエータ51,52,53,54,55,56は、関節41,42,43,44,45,46を駆動する。アクチュエータ51,52,53,54,55,56のそれぞれは、例えば電動モータと、電動モータの動力を関節41,42,43,44,45,46に伝える伝達部(例えば減速機)とを有する。例えばアクチュエータ51は、軸線31まわりに旋回部22を回転させるように関節41を駆動する。アクチュエータ52は、軸線32まわりに第一アーム23を回転させるように関節42を駆動する。アクチュエータ53は、軸線33まわりに第二アーム24を回転させるように関節43を駆動する。アクチュエータ54は、軸線34まわりにアーム端部28を回転させるように関節44を駆動する。アクチュエータ55は、軸線35まわりに手首部25を回転させるように関節45を駆動する。アクチュエータ56は、軸線36まわりに先端部26を回転させるように関節46を駆動する。
アクチュエータ51,52,53,54,55,56が、関節41,42,43,44,45,46を駆動することによって、マシンシステム16の位置・姿勢が自在に調節される。ツール60Aはねじ締め用のツールであり、マシンシステム16に固定されている。このため、マシンシステム16の位置・姿勢が変わるのに対応して、ツール60Aの位置・姿勢も変わる。ツール60Aは、ねじ締めのトルクを検出するトルクセンサ61を有していてもよい。
図3に示すように、マシン3Bは、基部21と、旋回部22と、第一アーム23と、第二アーム24と、手首部25と、先端部26と、アクチュエータ51,52,53,54,55,56と、ツール60Bとを有する。基部21と、旋回部22と、第一アーム23と、第二アーム24と、手首部25と、先端部26と、アクチュエータ51,52,53,54,55,56とは、マシン3Aと同様である。マシン3Bにおいても、アクチュエータ51,52,53,54,55,56が、関節41,42,43,44,45,46を駆動することによって、マシンシステム16の位置・姿勢が自在に調節される。ツール60Bは、ワーク90を把持するロボットハンドであり、マシンシステム16に固定されている。このため、マシンシステム16の位置・姿勢が変わるのに対応して、ツール60Bの位置・姿勢も変わる。ツール60Bは、ワーク90を把持しているか否かを検出する把持センサ62を有していてもよい。
図1に戻り、コントローラ100は、ローカルエリアネットワーク等の通信ネットワーク900を介して、他のコントローラ(例えばコントローラ200A,200B,300)と通信可能である。なお、図示においては、コントローラ100と、コントローラ200A,200B,300と、シミュレーション装置400とが一つの通信ネットワーク900を介して接続されているが、コントローラ100は、複数の通信ネットワークを介してコントローラ200A,200B,300及びシミュレーション装置400と接続されていてもよい。例えばコントローラ100は、制御用の通信ネットワークを介してコントローラ200A,200Bと接続され、制御用の通信ネットワークとは別の通信ネットワークを介してコントローラ300及びシミュレーション装置400と接続されていてもよい。なお、ここでの「接続」は、有線により通信可能となっている状態と、無線により通信可能となっている状態との両方を含む。
例えばコントローラ100は、ホストコントローラであり、複数のコントローラ200A,200B(ローカルコントローラ)をそれぞれ介して、マシン3A,3B(ローカルマシン)を制御する。
また、コントローラ100は、マシン2を更に制御する。なお、コントローラ100とマシン3A,3Bとの間にコントローラ200A,200Bが介在するのと同様に、コントローラ100とマシン2との間に、コントローラ100からの指令に基づきマシン2を制御するローカルコントローラが介在していてもよい。
コントローラ200Aは、通信ネットワーク900を介して、他のコントローラ(例えばコントローラ100,200B,300)と通信可能である。コントローラ200Aは、コントローラ100からの指令に基づいてマシン3Aを制御する。コントローラ200Bは、通信ネットワーク900を介して、他のコントローラ(例えばコントローラ100,200A,300)と通信可能である。コントローラ200Bは、コントローラ100からの指令に基づいてマシン3Bを制御する。
コントローラ300は、通信ネットワーク900を介してコントローラ100,200A,200Bに対する各種設定を行うための端末装置である。コントローラ100,200A,200Bに対する各種設定の具体例としては、制御ゲイン等の各種制御パラメータの設定等が挙げられる。
シミュレーション装置400は、マシン2、及びマシン3A,3Bの動作と、これらの動作に基づく環境変化(例えばワーク90の移動)とをシミュレーションする装置である。シミュレーションとは、マシン2及びマシン3A,3Bを実際に動作させることなく、マシン2及びマシン3A,3Bの動作と、これらの動作に基づく環境変化とを、数値演算によって模擬することを意味する。
図4に示すように、シミュレーション装置400は、モデル記憶部410と、バーチャルコントローラ500と、バーチャルコントローラ600A,600Bとを有する。モデル記憶部410は、マシン2及びマシン3A,3Bと、その周辺環境との三次元モデルを記憶する。三次元モデルは、マシン2及びマシン3A,3Bと、その周辺環境との三次元構造をバーチャル空間VSにおける三次元座標で表した数値データである。バーチャル空間VSは、マシン2及びマシン3A,3Bが実存しない仮想空間である。これに対し、マシン2及びマシン3A,3Bが実存する空間を、以下においては「リアル空間RS」という。
バーチャルコントローラ500は、バーチャルホストコントローラであり、複数のバーチャルコントローラ600A,600B(バーチャルローカルコントローラ)をそれぞれ介して、バーチャルマシンV3A,バーチャルマシンV3Bを制御する。バーチャルマシンV3A,バーチャルマシンV3Bは、マシン3A,3Bの動作の模擬結果をそれぞれ表す数値データであり、リアル空間RSにおけるマシン3A,3Bの動作を模擬するように、バーチャル空間VSにおいて仮想的に動作する。
また、バーチャルコントローラ500は、バーチャルマシンV2を更に制御する。バーチャルマシンV2は、マシン2の動作の模擬結果をそれぞれ表す数値データであり、リアル空間RSにおけるマシン2の動作を模擬するように、バーチャル空間VSにおいて仮想的に動作する。なお、バーチャルコントローラ500とバーチャルマシンV3A,バーチャルマシンV3Bとの間にバーチャルコントローラ600A,600Bが介在するのと同様に、バーチャルコントローラ500とバーチャルマシンV2との間に、バーチャルコントローラ500からの指令に基づきバーチャルマシンV2を制御するバーチャルローカルコントローラが介在していてもよい。
例えばバーチャルコントローラ500は、コントローラ100がマシン2を動作させるためのプログラムに基づいて、時間の経過に応じたマシン2の可動部(無人搬送車12)の動作量を逐次算出する。バーチャルコントローラ500は、マシン2の可動部の動作量を算出する度に、マシン2の可動部の動作量と、三次元モデルとに基づいて、可動部の動作後のバーチャルマシンV2を算出する。
バーチャルコントローラ600Aは、バーチャルコントローラ500からの指令に基づいてバーチャルマシンV3Aを制御する。例えばバーチャルコントローラ600Aは、バーチャルコントローラ500からの指令に基づいて、バーチャル空間VSにおいてバーチャルマシンV3Aを動作させる。例えばバーチャルコントローラ600Aは、バーチャルコントローラ500からの指令と、マシン3Aを動作させるためのプログラムとに基づいて、時間の経過に応じたマシン3Aの可動部(関節41,42,43,44,45,46)の動作量を逐次算出する。バーチャルコントローラ600Aは、マシン3Aの可動部の動作量を算出する度に、マシン3Aの可動部の動作量と、三次元モデルとに基づいて、可動部の動作後のバーチャルマシンV3Aを算出する。
バーチャルコントローラ600Bは、バーチャルコントローラ500からの指令に基づいてバーチャルマシンV3Bを制御する。例えばバーチャルコントローラ600Bは、バーチャルコントローラ500からの指令に基づいて、バーチャル空間VSにおいてバーチャルマシンV3Bを動作させる。例えばバーチャルコントローラ600Bは、バーチャルコントローラ500からの指令と、マシン3Bを動作させるためのプログラムとに基づいて、時間の経過に応じたマシン3Bの可動部(関節41,42,43,44,45,46)の動作量を逐次算出する。バーチャルコントローラ600Bは、マシン3Bの可動部の動作量を算出する度に、マシン3Bの可動部の動作量と、三次元モデルとに基づいて、可動部の動作後のバーチャルマシンV3Bを算出する。
ここで、マシンシステム1は、コントローラ100,200A,200Bの少なくとも一部をバーチャルコントローラ500,600A,600Bに置き換えて動作させ得るように構成されている。例えば、バーチャルコントローラ500,600A,600Bのそれぞれが、通信ネットワーク900を介してコントローラ100,200A,200B(他のコントローラ)と通信可能である。このため、コントローラ100,200A,200Bのそれぞれも、通信ネットワーク900を介してバーチャルコントローラ500,600A,600B(他のコントローラ)と通信可能である。図4に示すように、バーチャルコントローラ500,600A,600Bが、通信ネットワーク900を介して相互通信を行うように構成されていてもよい。
コントローラ100は、コントローラ200A,200Bを介してマシン3A,3Bを制御するのに代えて、バーチャルコントローラ600A,600Bを介してバーチャルマシンV3A,バーチャルマシンV3Bを制御することもできるように構成されている。バーチャルコントローラ500は、バーチャルコントローラ600A,600Bを介してバーチャルマシンV3A,バーチャルマシンV3Bを制御するのに変えて、コントローラ200A,200Bを介してマシン3A,3Bを制御することもできるように構成されている。
このように、コントローラ100,200A,200Bと、バーチャルコントローラ500,600A,600Bとが通信ネットワーク900を介して相互に通信可能である場合、コントローラ300は、通信ネットワーク900を介してコントローラ100,200A,200Bに対する各種設定を行うのと同様に、通信ネットワーク900を介して、バーチャルコントローラ500,600A,600Bに対する各種設定を行うように構成されていてもよい。
コントローラ100,200A,200Bの少なくとも一部がバーチャルコントローラ500,600A,600Bに置き換え得る構成によって、リアル空間RSにおけるマシン2,3A,3Bの動作の少なくとも一部を、バーチャル空間VSにおけるバーチャルマシンV2,V3A,V3Bの動作に置き換えて、システム全体の処理をシミュレーションすることが可能となる。しかしながら、マシン2,3A,3Bの少なくとも一部がバーチャルマシンV2,V3A,V3Bに置き換わると、マシンシステム1の動作を継続させられなくなる場合がある。例えば、マシン2,3A,3Bの動作をバーチャルマシンV2,V3A,V3Bの動作によりシミュレーションすることができたとしても、バーチャルマシンV2,V3A,V3Bの動作ではリアル空間に変化が生じないので、リアル空間の状態に基づく処理をコントローラ100,200A,200B、及びバーチャルコントローラ500,600A,600Bのいずれかにおいて実行できない場合がある。
これに対し、コントローラ100,200A,200B、及びバーチャルコントローラ500,600A,600Bのそれぞれは、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別することと、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行することと、を実行するように構成されている。このように、他のコントローラの制御対象がマシンであるか、バーチャルマシンであるかに応じて、コントローラの処理内容を変更する構成によれば、システム全体の処理を容易にシミュレーションすることができる。
これに対し、コントローラ100,200A,200B、及びバーチャルコントローラ500,600A,600Bのそれぞれは、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別することと、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行することと、を実行するように構成されている。このように、他のコントローラの制御対象がマシンであるか、バーチャルマシンであるかに応じて、コントローラの処理内容を変更する構成によれば、システム全体の処理を容易にシミュレーションすることができる。
更に、コントローラ100,200A,200B、及びバーチャルコントローラ500,600A,600Bのそれぞれは、自コントローラの制御対象がマシンであるか、マシンに対応するバーチャルマシンであるかを判別することと、マシンを制御する場合にはリアル用処理を実行し、バーチャルマシンを制御する場合にはバーチャル用処理を実行するように構成されていてもよい。
以下、リアル用処理と、バーチャル用処理とを具体的に例示する。図5は、マシンシステム1においてマシン2,3A,3Bが行う動作手順を例示するフローチャートである。まず、マシン3Bが、作業位置P1にワーク90を配置する(ステップS101)。作業位置P1にワーク90が配置されたことが、カメラ5により確認されると、マシン3Aが、作業位置P1に配置されたワーク90に対してねじ締めを行う(ステップS102)。次に、マシン3Bが、作業位置P1から荷置台11の上にワーク90を搬送する。荷置台11の上にワーク90が配置されたことが在荷センサ13により確認されると、マシン2がワーク90を搬送する(ステップS104)。
図6は、コントローラ100,200A,200Bのうち、コントローラ200Bがバーチャルコントローラ600Bに置き換えられことにより、マシン2と、マシン3Aと、バーチャルマシンV3Bとが混在して動作する場合を模式的に示している。コントローラ100は、コントローラ200Bがマシン3Bを制御する場合に、次の処理1を含むリアル用処理を実行する。
処理1) 作業位置P1にワーク90を配置する動作をマシン3Bが完了し、ワーク90がカメラ5により検出された後に、ねじ締め(ステップS102)の開始指令をコントローラ200Aに送信する。
図6の場合、バーチャル空間VSにおいて、作業位置P1にワーク90を配置する動作をバーチャルコントローラ600BがバーチャルマシンV3Bに実行させるものの、リアル空間RSにおいては作業位置P1にワーク90が配置されないので、カメラ5によりワーク90が検出されない。そこで、コントローラ100は、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合に、処理1に代えて次の処理2を含むバーチャル用処理を実行する。
処理2) 作業位置P1にワーク90を配置する動作をバーチャルマシンV3Bが完了した後、カメラ5によるワーク90の検出を待機することなく(待機をスキップする処理を行って)、ねじ締め(ステップS102)の開始指令をコントローラ200Aに送信する。
このため、図6の場合においても、上記ステップS102が開始されることとなる。
コントローラ200Aは、コントローラ200Bがマシン3Bを制御する場合に、次の処理2-1を含むリアル用処理を実行する。
処理2-1) ツール60Aによるねじ締め(ステップS102)をマシン3Aに開始させた後、トルクセンサ61により検出されるトルクが所定値に達した場合に、ツール60Aによるねじ締めをマシン3Aに完了させる。
図6の場合、リアル空間RSにおいて作業位置P1にワーク90が配置されていないので、トルクセンサ61により検出されるトルクが所定値に達することはない。そこで、コントローラ200Aは、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合に、処理2-1に代えて次の処理2-2を含むバーチャル用処理を実行する。
処理2-2) ツール60Aによるねじ締め(ステップS102)をマシン3Aに開始させた後、所定時間が経過した後に、ツール60Aによるねじ締めをマシン3Aに完了させる。このため、図6の場合においても、上記ステップS102が完了することとなる。
コントローラ200Bは、上記ステップS102の後、次の処理3-1を含むリアル用処理を実行する。
処理3-1) 作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、ツール60Bによるワーク90の把持が把持センサ62により検出された後に、作業位置P1から荷置台11の上へのワーク90の搬送をマシン3Bに実行させる。
図6の場合、バーチャル空間VSにおいて、作業位置P1のワーク90をツール60Bにより把持する動作をバーチャルコントローラ600BがバーチャルマシンV3Bに実行察せるものの、リアル空間RSにおいてはツール60Bによるワーク90の把持が行われないので、ツール60Bによるワーク90の把持が把持センサ62により検出されることはない。そこで、バーチャルコントローラ600Bは、処理3-1に代えて、次の処理3-2を含むバーチャル用処理を実行する。
処理3-2) 作業位置P1のワーク90をツール60Bにより把持する動作をバーチャルマシンV3Bに実行させた後、把持センサ62による把持の検出を待機することなく(待機をスキップする処理を行って)、作業位置P1から荷置台11の上へのワーク90の搬送をバーチャルマシンV3Bに実行させる。
このため、図6の場合においても、上記ステップS103が実行されることとなる。
コントローラ100は、コントローラ200Bがマシン3Bを制御する場合に、上記ステップS103の後、次の処理4-1を含むリアル用処理を実行する。
処理4-1) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了し、荷置台11の上へのワーク90の配置が在荷センサ13により検出された後に、マシン2によるワーク90の搬送(ステップS104)を開始させる。
図6の場合、バーチャル空間VSにおいて、作業位置P1から荷置台11の上にワーク90を搬送する動作をバーチャルコントローラ600BがバーチャルマシンV3Bに実行させるものの、リアル空間RSにおいては荷置台11の上にワーク90が配置されないので、荷置台11の上へのワーク90の配置が在荷センサ13により検出されることはない。そこで、コントローラ100は、上記処理4-1に代えて、次の処理4-2を含むバーチャル用処理を実行する。
処理4-2) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されるのを待機することなく(待機をスキップする処理を行って)、マシン2によるワーク90の搬送(ステップS104)を開始させる。
このため、図6の場合においても、上記ステップS104が実行されることとなる。
図7は、コントローラ100,200A,200Bのうち、コントローラ200Aがバーチャルコントローラ600Aに置き換えられことにより、マシン2と、バーチャルマシンV3Aと、マシン3Bとが混在して動作する場合を模式的に示している。コントローラ200Aは、次の処理5-1を含むリアル用処理を実行する。
処理5-1) ツール60Aによるねじ締め(ステップS102)をマシン3Aに開始させた後、トルクセンサ61により検出されるトルクが所定値に達した場合に、ツール60Aによるねじ締めをマシン3Aに完了させる。
図7の場合、バーチャル空間VSにおいて、ツール60Aによりねじ締を行う動作をバーチャルコントローラ600AがバーチャルマシンV3Aに実行させるものの、リアル空間RSにおいてはツール60Aによるねじ締めが行われないので、トルクセンサ61により検出されるトルクが所定値に達することはない。そこで、バーチャルコントローラ600Aは、処理5-1に代えて、次の処理5-2を含むバーチャル用処理を実行する。
処理5-2) ツール60Aによるねじ締め(ステップS102)をマシン3Aに開始させた後、所定時間が経過した後に、ツール60Aによるねじ締めをマシン3Aに完了させる。
このため、図7の場合においても、上記ステップS102が完了することとなる。
コントローラ200Bは、コントローラ200Aがマシン3Aを制御する場合に、上記ステップS102の後、次の処理3-1を含むリアル用処理を実行する。
処理6-1) 作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、ツール60Bによるワーク90の把持が把持センサ62により検出された後に、作業位置P1から荷置台11の上へのワーク90の搬送をマシン3Bに実行させる。
図7の場合、リアル空間RSでは、ツール60Aによるねじ締めが行われていないので、ワーク90を一体的に搬送できない場合がある。そこで、コントローラ200Bは、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合に、処理6-1に代えて、次の処理6-2を含むバーチャル用処理を実行する。
処理6-2) 作業位置P1のワーク90をツール60Bにより把持する動作をバーチャルマシンV3Bに実行させることなく(把持をスキップする処理を行って)、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させる。
このため、図7の場合においても、上記ステップS103が実行されることとなる。
コントローラ100は、コントローラ200Aがマシン3Aを制御する場合に、上記ステップS103の後、次の処理7-1を含むリアル用処理を実行する。
処理7-1) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了し、荷置台11の上へのワーク90の配置が在荷センサ13により検出された後に、マシン2によるワーク90の搬送(ステップS104)を開始させる。
図7の場合、リアル空間RSでは荷置台11の上にワーク90が配置されないので、荷置台11の上へのワーク90の配置が在荷センサ13により検出されることはない。そこで、コントローラ100は、上記処理7-1に代えて、次の処理7-2を含むバーチャル用処理を実行する。
処理7-2) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されるのを待機することなく(待機をスキップする処理を行って)、マシン2によるワーク90の搬送(ステップS104)を開始させる。
このため、図7の場合においても、上記ステップS104が実行されることとなる。
図8は、コントローラ100,200A,200Bのうち、コントローラ100がバーチャルコントローラ500に置き換えられことにより、バーチャルマシンV2と、マシン3Aと、マシン3Bとが混在して動作する場合を模式的に示している。コントローラ200Bは、コントローラ100がマシン2を制御する場合に、上記ステップS102の後、次の処理8-1を含むリアル用処理を実行する。
処理8-1) 作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、ツール60Bによるワーク90の把持が把持センサ62により検出された後に、作業位置P1から荷置台11の上へのワーク90の搬送をマシン3Bに実行させる。
図8の場合、リアル空間RSでは、ワーク90を荷置台11の上に配置することができない。そこで、コントローラ200Bは、バーチャルコントローラ500がバーチャルマシンV2を制御する場合に、処理8-1に代えて、次の処理8-2を含むバーチャル用処理を実行する。
処理8-2) 作業位置P1のワーク90をツール60Bにより把持する動作をバーチャルマシンV3Bに実行させることなく(把持をスキップする処理を行って)、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させる。このため、図8の場合においても、上記ステップS103が実行されることとなる。
コントローラ100は、上記ステップS103の後、次の処理9-1を含むリアル用処理を実行する。
処理9-1) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了し、荷置台11の上へのワーク90の配置が在荷センサ13により検出された後に、マシン2によるワーク90の搬送(ステップS104)を開始させる。
図8の場合、リアル空間RSでは荷置台11の上にワーク90が配置されないので、荷置台11の上へのワーク90の配置が在荷センサ13により検出されない。そこで、バーチャルコントローラ500は、上記処理9-1に代えて、次の処理9-2を含むバーチャル用処理を実行する。
処理9-2) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されるのを待機することなく(待機をスキップする処理を行って)、マシン2によるワーク90の搬送(ステップS104)を開始させる。
このため、図8の場合においても、上記ステップS104が実行されることとなる。
以下、コントローラ100,200A,200Bと、バーチャルコントローラ500,600A,600Bと、コントローラ300との構成をより詳細に例示する。
(ホストコントローラ)
コントローラ100は、複数のコントローラ200A,200B,600A,600B(ローカルコントローラ)と通信可能であり、複数のローカルコントローラをそれぞれ介して、マシン3A,3B,V3A,V3Bを制御するホストコントローラである。
図9に示すように、コントローラ100は、機能上の構成(以下、「機能ブロック」という。)として、判別部111と、プログラム記憶部112と、処理部113とを有する。判別部111は、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別する。判別部111は、他のコントローラから受信する情報に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。他のコントローラから受信する情報は、他のコントローラにおける制御情報と、他のコントローラがマシンを制御するかバーチャルマシンをするかを示すフラグとを含んでいてもよく、判別部111は、フラグに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
フラグの一例としては、他のコントローラがマシンを制御するかバーチャルマシンを制御するかに応じて値が変化する数値が挙げられる。より具体的に、フラグは、他のコントローラがマシンを制御する場合には「マシンシステム1」であり、他のコントローラがバーチャルマシンを制御する場合には「0」であるビットデータであってもよい。フラグは、他のコントローラがマシンを制御する場合には「0」であり、他のコントローラがバーチャルマシンを制御する場合には「マシンシステム1」であるビットデータであってもよい。以下、他のコントローラの説明におけるフラグについても同様である。
なお、他のコントローラがマシンを制御する場合と、他のコントローラがバーチャルマシンを制御する場合とのいずれか一方のみにおいて上記情報がフラグを含むことも、上記情報がフラグを含むことの一例である。この場合、判別部111は、上記情報がフラグを含むか否かに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別する。このように、上記情報がフラグを含むか否かに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別することも、フラグに基づいて他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別することの一例である。以下、他のコントローラの説明におけるフラグについても同様である。
他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、上記制御情報の構成が異なる場合がある。この場合、判別部111は、上記制御情報に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
例えば、図5の例において、コントローラ200Bがマシン3Bを制御する場合、コントローラ100がコントローラ200Bから受信する情報は以下の制御情報を含み得る。
制御情報1)作業位置P1までワーク90を搬送する動作をマシン3Bが完了し、ツール60Bによるワーク90の把持の解除が把持センサ62により検出されたことを示す情報。
これに対し、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合、コントローラ100がバーチャルコントローラ600Bから受信する情報は以下の制御情報を含み得る。
制御情報V1)作業位置P1までワーク90を搬送する動作をバーチャルマシンV3Bが完了したことを示す情報。
制御情報1と、制御情報V1とでは、「ツール60Bによるワーク90の把持の解除が把持センサ62により検出されたこと」が含まれるか否かにおいて相違する。このような場合、判別部111は、「ツール60Bによるワーク90の把持の解除が把持センサ62により検出されたこと」が制御情報に含まれることに基づいて、コントローラ200Bがマシン3Bを制御すると判定する。一方、判別部111は、「ツール60Bによるワーク90の把持の解除が把持センサ62により検出されたこと」が制御情報に含まれないことに基づいて、バーチャルコントローラ600BがバーチャルマシンV3Bを制御すると判定する。
また、コントローラ200Aがマシン3Aを制御する場合、コントローラ100がコントローラ200Aから受信する情報は以下の制御情報を含み得る。
制御情報2)ツール60Aによるねじ締め動作をマシン3Aが完了したことと、ねじ締め動作の完了時点でトルクセンサ61により検出されたトルクとを示す情報。
これに対し、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合、コントローラ100がバーチャルコントローラ600Aから受信する情報は以下の制御情報を含み得る。
制御情報V2)ツール60Aによるねじ締め動作をマシン3Aが完了したことを示す情報。
制御情報2と、制御情報V2とでは、「トルクセンサ61により検出されたトルク」が含まれるか否かにおいて相違する。このような場合、判別部111は、「トルクセンサ61により検出されたトルク」が制御情報に含まれることに基づいて、コントローラ200Aがマシン3Aを制御すると判定する。一方、判別部111は、「トルクセンサ61により検出されたトルク」が制御情報に含まれないことに基づいて、バーチャルコントローラ600AがバーチャルマシンV3Aを制御すると判定する。
他のコントローラがマシンを制御する場合には制御情報が暗号化され、他のコントローラがバーチャルマシンを制御する場合には制御情報が暗号化されないことも考えられる。この場合、判別部111は、上記制御情報が暗号化されているか否かに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、他のコントローラから情報を受信するための通信状況が異なる場合もある。通信状況の相違の具体例としては、通信の遅延時間の相違、通信に用いられるポートの相違等が挙げられる。他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、他のコントローラから情報を受信するための通信状況が異なる場合、判別部111は、他のコントローラから情報を受信するための通信状況に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
プログラム記憶部112は、予め定められたリアル用プログラムを記憶している。リアル用プログラムは、他のコントローラがマシンを制御し、自コントローラもマシンを制御する場合に、コントローラ100に所定のリアル用処理を実行させるプログラムである。プログラム記憶部112は、他のコントローラがバーチャルマシンを制御する場合に、リアル用処理の少なくとも一部を変更したバーチャル用処理をコントローラ100に実行させるバーチャル用修正プログラムを更に記憶している。
図5の例において、プログラム記憶部112が記憶するリアル用プログラムは、以下の処理命令を含み得る。
リアル用処理命令1) 作業位置P1にワーク90を配置する動作をマシン3Bが完了し、ワーク90がカメラ5により検出された後に、ねじ締め(ステップS102)の開始指令をコントローラ200Aに送信する。
リアル用処理命令2) 作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了し、荷置台11の上へのワーク90の配置が在荷センサ13により検出された後に、マシン2によるワーク90の搬送(ステップS104)を開始させる。
バーチャル用処理は、マシンの動作に基づき得られるリアル情報と、バーチャルマシンの動作に基づき得られるバーチャル情報との差異を補う補充処理を含んでいてもよい。バーチャル用処理は、リアル情報とバーチャル情報との差異に対して予め定められたデータを補う処理を含む補充処理を含んでいてもよい。
例えば、バーチャル用修正プログラムは、以下の補充処理命令を含み得る。
補充処理命令1) バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合には、リアル用処理命令1において、カメラ5によりワーク90が検出されたことを疑似的に示す第一補充データを生成する。
補充処理命令2) バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合には、リアル用処理命令2において、荷置台11の上へのワーク90の配置が在荷センサ13により検出されたことを疑似的に示す第二補充データを生成する。
補充処理命令3) バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合には、リアル用処理命令2において、上記第二補充データを生成する。
補充処理命令4) 自コントローラがバーチャルマシンV2を制御する場合には、リアル用処理命令2において、上記第二補充データを生成する。
リアル情報には、カメラ5によりワーク90が検出されたことを示す情報(第一検出情報)と、荷置台11の上へのワーク90の配置が在荷センサ13により検出されたことを示す情報(第二検出情報)とが含まれる。バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合のバーチャル情報には、第一検出情報及び第二検出情報のいずれも含まれない。これに対し、補充処理命令1に従った補充処理により第一補充データが生成されることにより、第一検出情報が補われることとなる。また、補充処理命令2に従った補充処理により第二補充データが生成されることにより、第二検出情報が補われることとなる。
バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合のバーチャル情報には、第二検出情報が含まれない。これに対し、補充処理命令3に従った補充処理により第二補充データが生成されることにより、第二検出情報が補われることとなる。
自コントローラがバーチャルマシンV2を制御する場合のバーチャル情報には、第二検出情報が含まれない。これに対し、補充処理命令4に従った補充処理により第二補充データが生成されることにより、第二検出情報が補われることとなる。
バーチャル用処理は、リアル用処理の少なくとも一部をスキップさせるスキップ処理を含んでいてもよい。例えば、バーチャル用修正プログラムは、以下のスキップ処理命令を含み得る。
スキップ処理命令1) バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合には、リアル用処理命令1において、カメラ5によりワーク90が検出されたことを待機する処理をスキップさせる第一スキップ処理を実行する。
スキップ処理命令2) バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合には、リアル用処理命令2において、荷置台11の上へのワーク90の配置が在荷センサ13により検出されたことを待機する処理をスキップさせる第二スキップ処理を実行する。
スキップ処理命令3) バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合には、リアル用処理命令2において、上記第二スキップ処理を実行する。
スキップ処理命令4) 自コントローラがバーチャルマシンV2を制御する場合には、リアル用処理命令2において、上記第二スキップ処理を実行する。
処理部113は、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行する。処理部113は、バーチャルコントローラ600A(第一コントローラ)がバーチャルマシンV3A(第一バーチャルマシン)を制御し、コントローラ200B(第二コントローラ)がマシン3B(第二マシン)を制御する場合には、マシン3A(第一マシン)の動作に関連する第一部分がリアル用処理と異なるバーチャル用処理を実行してもよい。また、処理部113は、コントローラ200A(第一コントローラ)がマシン3Aを制御し、バーチャルコントローラ600B(第二コントローラ)がバーチャルマシンV3B(第二バーチャルマシン)を制御する場合には、マシン3B(第二マシン)の動作に関連する第二部分がリアル用処理と異なるバーチャル用処理を実行してもよい。
処理部113は、上記リアル情報と、上記バーチャル情報との差異を補う補充処理を含むバーチャル用処理を実行してもよい。処理部113は、リアル情報とバーチャル情報との差異に対して予め定められたデータを補う処理を含む補充処理を実行してもよい。
一例として、処理部113は、コントローラ200Aがマシン3Aを制御し、コントローラ200Bがマシン3Bを制御する場合には、リアル用プログラムに基づいてリアル用処理を実行する。具体的に、処理部113は、リアル用処理命令1に従って、作業位置P1にワーク90を配置する動作をマシン3Bが完了し、ワーク90がカメラ5により検出された後に、ねじ締めの開始指令をコントローラ200Aに送信する。また、処理部113は、リアル用処理命令2に従って、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了し、荷置台11の上へのワーク90の配置が在荷センサ13により検出された後に、マシン2によるワーク90の搬送を開始させる。
コントローラ200Aに代わって、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合、処理部113は、リアル用プログラムと、バーチャル用修正プログラムとに基づいて、マシン3Aの動作に関連する部分がリアル用処理と異なるバーチャル用処理を実行する。具体的に、処理部113は、リアル用処理命令1に従って、作業位置P1にワーク90を配置する動作をマシン3Bが完了し、ワーク90がカメラ5により検出された後に、ねじ締めの開始指令をバーチャルコントローラ600Aに送信する。また、処理部113は、補充処理命令3に基づき修正されたリアル用処理命令2に従って、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されたことを示す第二補充データを生成し、第二補充データに基づいて、マシン2によるワーク90の搬送を開始させる。
コントローラ200Bに代わって、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合、処理部113は、リアル用プログラムと、バーチャル用修正プログラムとに基づいて、マシン3Bの動作に関連する部分がリアル用処理と異なるバーチャル用処理を実行する。具体的に、処理部113は、補充処理命令1に基づき修正されたリアル用処理命令1に従って、作業位置P1にワーク90を配置する動作をバーチャルマシンV3Bが完了した後、ワーク90がカメラ5により検出されたことを示す第一補充データを生成し、第一補充データに基づいて、ねじ締めの開始指令をコントローラ200Aに送信する。また、処理部113は、補充処理命令2に基づき修正されたリアル用処理命令2に従って、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されたことを示す第二補充データを生成し、第二補充データに基づいて、マシン2によるワーク90の搬送を開始させる。
処理部113は、リアル用処理の少なくとも一部をスキップさせるスキップ処理を含むバーチャル用処理を実行してもよい。一例として、コントローラ200Aに代わって、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合、処理部113は、リアル用処理命令1に従って、作業位置P1にワーク90を配置する動作をマシン3Bが完了し、ワーク90がカメラ5により検出された後に、ねじ締めの開始指令をバーチャルコントローラ600Aに送信する。また、処理部113は、スキップ処理命令3に基づき修正されたリアル用処理命令2に従って、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されるのを待機することなく、マシン2によるワーク90の搬送を開始させる。
コントローラ200Bに代わって、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合、処理部113は、スキップ処理命令1に基づき修正されたリアル用処理命令1に従って、作業位置P1にワーク90を配置する動作をバーチャルマシンV3Bが完了した後、ワーク90がカメラ5により検出されるのを待機することなく、ねじ締めの開始指令をコントローラ200Aに送信する。また、処理部113は、スキップ処理命令2に基づき修正されたリアル用処理命令2に従って、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bが完了した後、荷置台11の上へのワーク90の配置が在荷センサ13により検出されるのを待機することなく、マシン2によるワーク90の搬送を開始させる。
コントローラ100は、ユーザインタフェースへの入力に基づいてバーチャル用処理を生成するように構成されていてもよい。例えばコントローラ100は、インタフェース生成部121と、代替対象特定部122と、処理生成部123とを更に有する。
インタフェース生成部121は、リアル用処理のうち、他のコントローラがバーチャルマシンを制御する場合には実行できない一以上の実行不可部分を示す表示部と、一以上の実行不可部分のそれぞれに対して代替処理を入力する入力部と、を含むユーザインタフェースを生成する。本実施形態において、インタフェース生成部121は、コントローラ300にユーザインタフェースを表示させる。ユーザインタフェースの具体例については、コントローラ300の説明において後述する。
代替対象特定部122は、上記リアル情報と、上記バーチャル情報との差異に基づいて一以上の実行不可部分を特定する。例えば代替対象特定部122は、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合のバーチャル情報に上記第二検出情報が含まれないことに基づいて、第二検出情報を待機する部分を実行不可部分として特定する。同様に、代替対象特定部122は、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合のバーチャル情報に上記第一検出情報及び上記第二検出情報が含まれないことに基づいて、第一検出情報を待機する部分及び第二検出情報を待機する部分を実行不可部分として特定する。インタフェース生成部121は、代替対象特定部122により特定された一以上の実行不可部分を上記表示部に表示させる。
処理生成部123は、ユーザインタフェースの入力部への入力に基づいて、バーチャル用処理を生成する。例えば処理生成部123は、入力部への入力に基づいて、上述した補充処理命令又はスキップ処理命令を生成し、プログラム記憶部112に記憶させる。
コントローラ100は、リアル情報とバーチャル情報との差異に基づいて、補充処理を生成するように構成されていてもよい。例えば処理生成部123は、リアル情報とバーチャル情報との差異に基づいて、補充処理を生成するように構成されていてもよい。
例えば処理生成部123は、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合のバーチャル情報に上記第二検出情報が含まれないことに基づいて、上記補充処理命令3を生成し、プログラム記憶部112に記憶させる。同様に、処理生成部123は、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合のバーチャル情報に上記第一検出情報及び上記第二検出情報が含まれないことに基づいて、上記補充処理命令1及び上記補充処理命令2を生成し、プログラム記憶部112に記憶させる。
コントローラ100は、自コントローラの制御対象がバーチャルマシンである場合にも、バーチャル用処理を実行するように構成されていてもよい。例えばコントローラ100は、制御対象判別部131と、送信部132とを更に有する。制御対象判別部131は、自コントローラの制御対象が、マシン(管轄マシン)であるか、バーチャルマシン(管轄バーチャルマシン)であるかを判別する。例えば制御対象判別部131は、自コントローラの制御対象が、マシン2であるかバーチャルマシンV2であるかを判別する。一例として、制御対象判別部131は、自コントローラが、シミュレーション装置400に構成されたバーチャルコントローラであるか否かに基づいて、自コントローラの制御対象がマシン2であるかバーチャルマシンV2であるかを判別する。
なお、後述するように、コントローラ100自体が、マシン2を実際に制御するリアルモードと、バーチャルマシンV2を制御するバーチャルモードとを実行するように構成されていてもよい。このような場合、制御対象判別部131は、リアルモードとバーチャルモードのいずれが選択されているかに基づいて、自コントローラの制御対象がマシン2であるかバーチャルマシンV2であるかを判別する。
処理部113は、自コントローラの制御対象がマシンである場合にはリアル制御処理を実行し、自コントローラの制御対象がバーチャルマシンである場合には、リアル制御処理と少なくとも一部が異なるバーチャル制御処理を実行する。例えば処理部113は、他のコントローラがバーチャルマシンを制御し、自コントローラが管轄マシンを制御する場合には、マシン(他のコントローラが制御するマシン)の動作に関連する外部依存部分がリアル用処理と異なるバーチャル用処理を実行する。このバーチャル用処理は、上述したリアル制御処理に含まれる。処理部113は、他のコントローラがマシンを制御し、自コントローラが管轄バーチャルマシンを制御する場合には、管轄マシンの動作に関連する管轄部分がリアル用処理と異なるバーチャル用処理を実行してもよい。このバーチャル用処理は、上述したバーチャル制御処理に含まれる。
送信部132は、制御対象判別部131による判別結果を付加した情報を他のコントローラに送信する。例えば送信部132は、マシン3Aを動作させる指令(制御情報)に、制御対象判別部131による判別結果(例えば上記フラグ)を付加した情報をコントローラ200A又はバーチャルコントローラ600Aに送信する。また、送信部132は、マシン3Bを動作させる指令(制御情報)に、制御対象判別部131による判別結果を付加した情報をコントローラ200B又はバーチャルコントローラ600Bに送信する。
コントローラ100は、マシン2,マシン3A,3B,V3A,V3Bの制御データを収集し、蓄積するように構成されていてもよい。制御データは、コントローラ200A,200B又はバーチャルコントローラ600A,600Bからコントローラ100に送られる制御情報、コントローラ100からコントローラ200A,200B、又はバーチャルコントローラ600A,600Bに送られる制御指令、コントローラ100からマシン2に送られる制御指令、カメラ5による検出結果、トルクセンサ61による検出結果、把持センサ62による検出結果等が含まれる。例えばコントローラ100は、データ蓄積部141と、データベース142と、データ表示部143とを有する。データ蓄積部141は、マシン2,マシン3A,3B,V3A,V3Bの制御データをデータベース142に時系列で蓄積する。データ表示部143は、データベース142に蓄積された制御データをコントローラ300等に表示させる。
データ蓄積部141は、自コントローラの制御対象が管轄マシンであるか管轄バーチャルマシンであるかの判別結果と、他のコントローラの制御対象がマシンであるかバーチャルマシンであるかの判別結果とを、制御データに含めてデータベース142に蓄積させてもよい。この場合、リアル空間RSにおいて得られたデータと、バーチャル空間VSにおいて得られたデータとの区別を容易にし、蓄積された制御データの使い勝手を向上させることができる。
(ロボットコントローラ)
コントローラ200Aは、コントローラ100からの指令に基づいてマシン3Aを制御するロボットコントローラであり、コントローラ200Bは、コントローラ100からの指令に基づいてマシン3Bを制御するロボットコントローラである。図10に示すように、コントローラ200Aは、マシン3Aに駆動電力を供給するパワー回路280と、パワー回路280を制御する制御回路290とを有する。制御回路290は、機能ブロックとして、判別部211と、プログラム記憶部212と、処理部213とを有する。
判別部211は、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別する。判別部211は、他のコントローラから受信する情報に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。他のコントローラから受信する情報は、他のコントローラにおける制御情報と、他のコントローラがマシンを制御するかバーチャルマシンをするかを示すフラグとを含んでいてもよく、判別部211は、フラグに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、上記制御情報の構成が異なる場合がある。この場合、判別部211は、上記制御情報に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御する場合には制御情報が暗号化され、他のコントローラがバーチャルマシンを制御する場合には制御情報が暗号化されないことも考えられる。この場合、判別部211は、上記制御情報が暗号化されているか否かに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、他のコントローラから情報を受信するための通信状況が異なる場合もある。通信状況の相違の具体例としては、通信の遅延時間の相違、通信に用いられるポートの相違等が挙げられる。他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、他のコントローラから情報を受信するための通信状況が異なる場合、判別部211は、他のコントローラから情報を受信するための通信状況に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
プログラム記憶部212は、予め定められたリアル用プログラムを記憶している。リアル用プログラムは、他のコントローラがマシンを制御し、自コントローラもマシンを制御する場合に、コントローラ200Aに所定のリアル用処理を実行させるプログラムである。プログラム記憶部212は、他のコントローラがバーチャルマシンを制御する場合に、リアル用処理の少なくとも一部を変更したバーチャル用処理をマシン200に実行させるバーチャル用修正プログラムを更に記憶している。
図5の例において、プログラム記憶部212が記憶するリアル用プログラムは、以下の処理命令を含み得る。
リアル用処理命令2-1) ツール60Aによるねじ締めをマシン3Aに開始させた後、トルクセンサ61により検出されるトルクが所定値に達した場合に、ツール60Aによるねじ締めをマシン3Aに完了させる。
バーチャル用処理は、マシンの動作に基づき得られるリアル情報と、バーチャルマシンの動作に基づき得られるバーチャル情報との差異を補う補充処理を含んでいてもよい。バーチャル用処理は、リアル情報とバーチャル情報との差異に対して予め定められたデータを補う処理を含む補充処理を含んでいてもよい。
例えば、バーチャル用修正プログラムは、以下の補充処理命令を含み得る。
補充処理命令2-1) バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合には、リアル用処理命令2-1において、ツール60Aによるねじ締めが開始された後、所定時間が経過したタイミングで、トルクセンサ61により検出されるトルクが所定値に達したことを疑似的に示す補充データを生成する。
補充処理命令2-2) 自コントローラがバーチャルマシンV3Aを制御する場合には、リアル用処理命令2-1において、ツール60Aによるねじ締めが開始された後、所定時間が経過したタイミングで上記補充データを生成する。
リアル情報には、トルクセンサ61により検出されるトルクが所定値に達したことを示す情報(検出情報)が含まれる。バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合、及び自コントローラがバーチャルマシンV3Aを制御する場合のバーチャル情報には、上記検出情報が含まれない。これに対し、補充処理命令2-1又は補充処理命令2-2に従った補充処理により補充データが生成されることにより、検出情報が補われることとなる。
バーチャル用処理は、リアル用処理の少なくとも一部をスキップさせるスキップ処理を含んでいてもよい。例えば、バーチャル用修正プログラムは、以下のスキップ処理命令を含み得る。
スキップ処理命令2-1) バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合には、リアル用処理命令2-1において、ツール60Aによるねじ締めが開始された後、所定時間が経過したタイミングで、トルクセンサ61により検出されるトルクが所定値に達したことを待機する処理をスキップする(スキップ処理)。
スキップ処理命令2-2) 自コントローラがバーチャルマシンV3Aを制御する場合には、リアル用処理命令2-1において、ツール60Aによるねじ締めが開始された後、所定時間が経過したタイミングで上記スキップ処理を実行する。
処理部213は、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行する。処理部213は、バーチャルコントローラ600B(第一コントローラ)がバーチャルマシンV3B(第一バーチャルマシン)を制御し、コントローラ100(第二コントローラ)がマシン2(第二マシン)を制御する場合には、マシン3B(第一マシン)の動作に関連する第一部分がリアル用処理と異なるバーチャル用処理を実行してもよい。また、処理部213は、コントローラ200B(第一コントローラ)がマシン3Bを制御し、バーチャルコントローラ500(第二コントローラ)がバーチャルマシンV2(第二バーチャルマシン)を制御する場合には、マシン2(第二マシン)の動作に関連する第二部分がリアル用処理と異なるバーチャル用処理を実行してもよい。
処理部213は、上記リアル情報と、上記バーチャル情報との差異を補う補充処理を含むバーチャル用処理を実行してもよい。処理部213は、リアル情報とバーチャル情報との差異に対して予め定められたデータを補う処理を含む補充処理を実行してもよい。処理部213は、リアル用処理の少なくとも一部をスキップさせるスキップ処理を含むバーチャル用処理を実行してもよい。
一例として、処理部213は、コントローラ200Bがマシン3Bを制御し、コントローラ100がマシン2を制御する場合には、リアル用プログラムに基づいてリアル用処理を実行する。具体的に、処理部213は、リアル用処理命令2-1に従って、ツール60Aによるねじ締めをマシン3Aに開始させた後、トルクセンサ61により検出されるトルクが所定値に達した場合に、ツール60Aによるねじ締めをマシン3Aに完了させる。
コントローラ200Bに代わって、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合、処理部213は、リアル用プログラムと、バーチャル用修正プログラムとに基づいて、マシン3Bの動作に関連する部分がリアル用処理と異なるバーチャル用処理を実行する。具体的に、処理部213は、補充処理命令2-1に基づき修正されたリアル用処理命令2-1に従って、ツール60Aによるねじ締めをマシン3Aに開始させた後、所定時間が経過したタイミングで上記補充データを生成し、補充データに基づいて、ツール60Aによるねじ締めをマシン3Aに完了させる。
処理部213は、スキップ処理命令2-1に基づき修正されたリアル用処理命令2-1に従って、ツール60Aによるねじ締めをマシン3Aに開始させた後、所定時間が経過したタイミングで、トルクセンサ61により検出されるトルクが所定値に達するのを待機することなく、ツール60Aによるねじ締めをマシン3Aに完了させてもよい。
コントローラ200Aは、ユーザインタフェースへの入力に基づいてバーチャル用処理を生成するように構成されていてもよい。例えばマシン200は、インタフェース生成部221と、代替対象特定部222と、処理生成部223とを更に有する。
インタフェース生成部221は、リアル用処理のうち、他のコントローラがバーチャルマシンを制御する場合には実行できない一以上の実行不可部分を示す表示部と、一以上の実行不可部分のそれぞれに対して代替処理を入力する入力部と、を含むユーザインタフェースを生成する。本実施形態において、インタフェース生成部221は、コントローラ300にユーザインタフェースを表示させる。ユーザインタフェースの具体例については、コントローラ300の説明において後述する。
代替対象特定部222は、上記リアル情報と、上記バーチャル情報との差異に基づいて一以上の実行不可部分を特定する。例えば代替対象特定部222は、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合のバーチャル情報に上記検出情報が含まれないことに基づいて、検出情報を待機する部分を実行不可部分として特定する。インタフェース生成部221は、代替対象特定部222により特定された一以上の実行不可部分を上記表示部に表示させる。
処理生成部223は、ユーザインタフェースの入力部への入力に基づいて、バーチャル用処理を生成する。例えば処理生成部223は、入力部への入力に基づいて、上述した補充処理命令又はスキップ処理命令を生成し、プログラム記憶部112に記憶させる。
コントローラ200Aは、リアル情報とバーチャル情報との差異に基づいて、補充処理を生成するように構成されていてもよい。例えば処理生成部223は、リアル情報とバーチャル情報との差異に基づいて、補充処理を生成するように構成されていてもよい。例えば処理生成部223は、バーチャルコントローラ600BがバーチャルマシンV3Bを制御する場合のバーチャル情報に上記検出情報が含まれないことに基づいて、上記補充処理命令2-1を生成し、プログラム記憶部112に記憶させる。
コントローラ200Aは、自コントローラの制御対象がバーチャルマシンである場合にも、バーチャル用処理を実行するように構成されていてもよい。例えばコントローラ200Aは、制御対象判別部231と、送信部232とを更に有する。制御対象判別部231は、自コントローラの制御対象が、マシン(管轄マシン)であるか、バーチャルマシン(管轄バーチャルマシン)であるかを判別する。例えば制御対象判別部231は、自コントローラの制御対象が、マシン3AであるかバーチャルマシンV3Aであるかを判別する。一例として、制御対象判別部231は、自コントローラが、シミュレーション装置400に構成されたバーチャルコントローラであるか否かに基づいて、自コントローラの制御対象がマシン3AであるかバーチャルマシンV3Aであるかを判別する。
なお、後述するように、コントローラ200A自体が、マシン3Aを実際に制御するリアルモードと、バーチャルマシンV3Aを制御するバーチャルモードとを実行するように構成されていてもよい。このような場合、制御対象判別部231は、リアルモードとバーチャルモードのいずれが選択されているかに基づいて、自コントローラの制御対象がマシン3AであるかバーチャルマシンV3Aであるかを判別する。
処理部213は、自コントローラの制御対象がマシンである場合にはリアル制御処理を実行し、自コントローラの制御対象がバーチャルマシンである場合には、リアル制御処理と少なくとも一部が異なるバーチャル制御処理を実行する。例えば処理部213は、他のコントローラがバーチャルマシンを制御し、自コントローラが管轄マシンを制御する場合には、マシン(他のコントローラが制御するマシン)の動作に関連する外部依存部分がリアル用処理と異なるバーチャル用処理を実行する。このバーチャル用処理は、上述したリアル制御処理に含まれる。処理部213は、他のコントローラがマシンを制御し、自コントローラが管轄バーチャルマシンを制御する場合には、管轄マシンの動作に関連する管轄部分がリアル用処理と異なるバーチャル用処理を実行してもよい。このバーチャル用処理は、上述したバーチャル制御処理に含まれる。
一例として、処理部213は、自コントローラが管轄バーチャルマシンを制御する場合には、上記補充処理命令2-2に基づき修正されたリアル用処理命令2-1に従って、ツール60Aによるねじ締めをマシン3Aに開始させた後、所定時間が経過したタイミングで上記補充データを生成し、補充データに基づいて、ツール60Aによるねじ締めをマシン3Aに完了させる。
処理部213は、スキップ処理命令2-2に基づき修正されたリアル用処理命令2-1に従って、ツール60Aによるねじ締めをマシン3Aに開始させた後、所定時間が経過したタイミングで、トルクセンサ61により検出されるトルクが所定値に達するのを待機することなく、ツール60Aによるねじ締めをマシン3Aに完了させてもよい。
送信部232は、制御対象判別部231による判別結果を付加した情報を他のコントローラに送信する。例えば送信部232は、マシン3Aの動作結果を示す情報(制御情報)に、制御対象判別部231による判別結果(例えば上記フラグ)を付加した情報をコントローラ100又はバーチャルコントローラ500に送信する。
コントローラ200Bも、コントローラ200Aと同様に、パワー回路280と、制御回路290とを有する。図5の例において、コントローラ200Bのプログラム記憶部212が記憶するリアル用プログラムは、以下の処理命令を含み得る。
リアル用処理命令3-1) 作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、ツール60Bによるワーク90の把持が把持センサ62により検出された後に、作業位置P1から荷置台11の上へのワーク90を搬送する動作をマシン3Bに実行させる。
また、バーチャル用修正プログラムは、以下の補充処理命令を含み得る。
補充処理命令3-1) バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合には、リアル用処理命令2-1において、把持センサ62によりワーク90の把持が検出されたことを疑似的に示す補充データを生成する。
補充処理命令3-2) バーチャルコントローラ500がバーチャルマシンV2を制御する場合には、リアル用処理命令2-1において、上記補充データを生成する。
補充処理命令3-3) 自コントローラがバーチャルマシンV3Bを制御する場合には、リアル用処理命令2-1において、上記補充データを生成する。
リアル情報には、把持センサ62によりワーク90の把持が検出されたことを示す情報(検出情報)が含まれる。バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合、バーチャルコントローラ500がバーチャルマシンV2を制御する場合、及び自コントローラがバーチャルマシンV3Bを制御する場合のバーチャル情報には、検出情報が含まれない。これに対し、補充処理命令3-1、補充処理命令3-2又は補充処理命令3-3に従った補充処理により補充データが生成されることにより、検出情報が補われることとなる。
バーチャル用処理は、リアル用処理の少なくとも一部をスキップさせるスキップ処理を含んでいてもよい。例えば、バーチャル用修正プログラムは、以下のスキップ処理命令を含み得る。
スキップ処理命令3-1) バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合には、リアル用処理命令3-1において、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させる処理をスキップする(第一スキップ処理)。
スキップ処理命令3-2) バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合には、リアル用処理命令3-1において、上記第一スキップ処理の後、把持センサ62によりワーク90の把持が検出されたことを待機する処理をスキップする(第二スキップ処理)。
スキップ処理命令3-3) バーチャルコントローラ500がバーチャルマシンV2を制御する場合には、リアル用処理命令3-1において、上記第一スキップ処理を実行する。
スキップ処理命令3-4) バーチャルコントローラ500がバーチャルマシンV2を制御する場合には、リアル用処理命令3-1において、上記第一スキップ処理の後、上記第二スキップ処理を実行する。
スキップ処理命令3-5) 自コントローラがバーチャルマシンV3Bを制御する場合には、リアル用処理命令3-1において、上記第二スキップ処理を実行する。
処理部213は、コントローラ200Bがマシン3Bを制御し、コントローラ100がマシン2を制御する場合には、リアル用プログラムに基づいてリアル用処理を実行する。具体的に、処理部213は、リアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、ツール60Bによるワーク90の把持が把持センサ62により検出された後に、作業位置P1から荷置台11の上へのワーク90の搬送をマシン3Bに実行させる。
コントローラ200Aに代わって、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合、処理部213は、リアル用プログラムと、バーチャル用修正プログラムとに基づいて、マシン3Aの動作に関連する部分がリアル用処理と異なるバーチャル用処理を実行する。具体的に、処理部213は、スキップ処理命令3-1と、補充処理命令3-1とに基づき修正されたリアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させることなく、補充データを生成し、補充データに基づいて、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させる。
処理部213は、スキップ処理命令3-1と、スキップ処理命令3-2とに基づき修正されたリアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させることなく、把持センサ62によるワーク90の把持の検出を待機することもなく、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させてもよい。
コントローラ100に代わって、バーチャルコントローラ500がバーチャルマシンV2を制御する場合、処理部213は、リアル用プログラムと、バーチャル用修正プログラムとに基づいて、マシン2の動作に関連する部分がリアル用処理と異なるバーチャル用処理を実行する。具体的に、処理部213は、スキップ処理命令3-3と、補充処理命令3-2とに基づき修正されたリアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させることなく、補充データを生成し、補充データに基づいて、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させる。
処理部213は、スキップ処理命令3-3と、スキップ処理命令3-4とに基づき修正されたリアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させることなく、把持センサ62によるワーク90の把持の検出を待機することもなく、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させてもよい。
例えば処理生成部223は、バーチャルコントローラ600AがバーチャルマシンV3Aを制御する場合、及びバーチャルコントローラ500がバーチャルマシンV2を制御する場合のバーチャル情報に上記検出情報が含まれないことに基づいて、上記補充処理命令3-1及び上記補充処理命令3-2を生成し、プログラム記憶部112に記憶させてもよい。
コントローラ200Bの制御対象判別部231は、自コントローラの制御対象が、マシン3BであるかバーチャルマシンV3Bであるかを判別する。一例として、制御対象判別部231は、自コントローラが、シミュレーション装置400に構成されたバーチャルコントローラであるか否かに基づいて、自コントローラの制御対象がマシン3BであるかバーチャルマシンV3Bであるかを判別する。
なお、後述するように、コントローラ200B自体が、マシン3Bを実際に制御するリアルモードと、バーチャルマシンV3Bを制御するバーチャルモードとを実行するように構成されていてもよい。このような場合、制御対象判別部231は、リアルモードとバーチャルモードのいずれが選択されているかに基づいて、自コントローラの制御対象がマシン3BであるかバーチャルマシンV3Bであるかを判別する。
処理部213は、自コントローラの制御対象がマシンである場合にはリアル制御処理を実行し、自コントローラの制御対象がバーチャルマシンである場合には、リアル制御処理と少なくとも一部が異なるバーチャル制御処理を実行する。例えば処理部213は、他のコントローラがバーチャルマシンを制御し、自コントローラが管轄マシンを制御する場合には、マシン(他のコントローラが制御するマシン)の動作に関連する外部依存部分がリアル用処理と異なるバーチャル用処理を実行する。このバーチャル用処理は、上述したリアル制御処理に含まれる。処理部213は、他のコントローラがマシンを制御し、自コントローラが管轄バーチャルマシンを制御する場合には、管轄マシンの動作に関連する管轄部分がリアル用処理と異なるバーチャル用処理を実行してもよい。このバーチャル用処理は、上述したバーチャル制御処理に含まれる。
一例として、処理部213は、自コントローラが管轄バーチャルマシンを制御する場合には、上記補充処理命令3-3に基づき修正されたリアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、補充データを生成し、補充データに基づいて、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させる。
処理部213は、スキップ処理命令3-5に基づき修正されたリアル用処理命令3-1に従って、作業位置P1のワーク90をツール60Bにより把持する動作をマシン3Bに実行させた後、把持センサ62によるワーク90の把持の検出を待機することなく、作業位置P1から荷置台11の上にワーク90を搬送する動作をマシン3Bに実行させてもよい。
送信部232は、制御対象判別部231による判別結果を付加した情報を他のコントローラに送信する。例えば送信部232は、マシン3Bの動作結果を示す情報(制御情報)に、制御対象判別部231による判別結果(例えば上記フラグ)を付加した情報をコントローラ100又はバーチャルコントローラ500に送信する。
(バーチャルコントローラ)
図11に示すように、バーチャルコントローラ500は、機能ブロックとして、コントローラ100の判別部111と、プログラム記憶部112と、処理部113とにそれぞれ対応する判別部511と、プログラム記憶部512と、処理部513とを有する。判別部511は、上記判別部111と同様に、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別する。プログラム記憶部512は、プログラム記憶部112が記憶するリアル用プログラムと、バーチャル用修正プログラムと同じプログラムを記憶する。処理部513は、他のコントローラがマシンを制御する場合には、処理部113によるリアル用処理をシミュレーションし、他のコントローラがバーチャルマシンを制御する場合には、処理部113によるバーチャル用処理をシミュレーションする。
処理部513が実行する処理は、主として、マシン2をリアル空間RSにおいて動作させるのに代えて、モデル記憶部410が記憶する三次元モデルに基づいて、バーチャルマシンV2をバーチャル空間VSにおいて動作させる点において処理部113が実行する処理と異なる。その他の点において、処理部513が実行する処理は、処理部113が実行する処理と実質的に同様である。
バーチャルコントローラ500は、コントローラ100のインタフェース生成部121と、代替対象特定部122と、処理生成部123とにそれぞれ対応するインタフェース生成部521と、代替対象特定部522と、処理生成部523とを更に有してもよい。インタフェース生成部521は、インタフェース生成部121が生成するのと同様のユーザインタフェースを生成する。本実施形態において、インタフェース生成部521はコントローラ300にユーザインタフェースを表示させる。ユーザインタフェースの具体例については、コントローラ300の説明において後述する。
代替対象特定部522は、代替対象特定部122と同様に、上記リアル情報と、上記バーチャル情報との差異に基づいて一以上の実行不可部分を特定する。インタフェース生成部521は、代替対象特定部522により特定された一以上の実行不可部分を上記表示部に表示させる。
処理生成部523は、処理生成部123と同様に、ユーザインタフェースの入力部への入力に基づいて、バーチャル用処理を生成する。例えば処理生成部523は、入力部への入力に基づいて、上述した補充処理命令又はスキップ処理命令を生成し、プログラム記憶部512に記憶させる。
バーチャルコントローラ500は、コントローラ100の制御対象判別部131と、送信部132とにそれぞれ対応する制御対象判別部531と、送信部532とを更に有してもよい。制御対象判別部531は、制御対象判別部131と同様に、自コントローラの制御対象が、マシン(管轄マシン)であるか、バーチャルマシン(管轄バーチャルマシン)であるかを判別する。
処理部513は、自コントローラの制御対象がマシンである場合にはリアル制御処理を実行し、自コントローラの制御対象がバーチャルマシンである場合には、リアル制御処理と少なくとも一部が異なるバーチャル制御処理を実行する。例えば処理部513は、他のコントローラがバーチャルマシンを制御し、自コントローラが管轄マシンを制御する場合には、マシン(他のコントローラが制御するマシン)の動作に関連する外部依存部分がリアル用処理と異なるバーチャル用処理を実行する。このバーチャル用処理は、上述したリアル制御処理に含まれる。処理部513は、他のコントローラがマシンを制御し、自コントローラが管轄バーチャルマシンを制御する場合には、管轄マシンの動作に関連する管轄部分がリアル用処理と異なるバーチャル用処理を実行してもよい。このバーチャル用処理は、上述したバーチャル制御処理に含まれる。
送信部532は、送信部132と同様に、制御対象判別部531による判別結果を付加した情報を他のコントローラに送信する。例えば送信部532は、マシン3Aを動作させる指令(制御情報)に、制御対象判別部531による判別結果(例えば上記フラグ)を付加した情報をコントローラ200A又はバーチャルコントローラ600Aに送信する。また、送信部532は、マシン3Bを動作させる指令(制御情報)に、制御対象判別部531による判別結果を付加した情報をコントローラ200B又はバーチャルコントローラ600Bに送信する。
バーチャルコントローラ500は、コントローラ100のデータ蓄積部141と、データベース142と、データ表示部143とにそれぞれ対応するデータ蓄積部541と、データベース542と、データ表示部543とを更に有してもよい。データ蓄積部541は、データ蓄積部141と同様に、マシン2,マシン3A,3B,V3A,V3Bの制御データをデータベース542に時系列で蓄積する。データ表示部543は、データベース542に蓄積された制御データをコントローラ300等に表示させる。
図12に示すように、バーチャルコントローラ600Aは、機能ブロックとして、コントローラ200Aの判別部211と、プログラム記憶部212と、処理部213とにそれぞれ対応する判別部611と、プログラム記憶部612と、処理部613とを有する。判別部611は、上記判別部211と同様に、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別する。プログラム記憶部612は、プログラム記憶部212が記憶するリアル用プログラムと、バーチャル用修正プログラムと同じプログラムを記憶する。処理部613は、他のコントローラがマシンを制御する場合には、処理部213によるリアル用処理をシミュレーションし、他のコントローラがバーチャルマシンを制御する場合には、処理部213によるバーチャル用処理をシミュレーションする。
処理部613が実行する処理は、主として、マシン3Aをリアル空間RSにおいて動作させるのに代えて、モデル記憶部410が記憶する三次元モデルに基づいて、バーチャルマシンV3Aをバーチャル空間VSにおいて動作させる点において処理部213が実行する処理と異なる。その他の点において、処理部613が実行する処理は、処理部213が実行する処理と実質的に同様である。
バーチャルコントローラ600Aは、コントローラ200Aのインタフェース生成部221と、代替対象特定部222と、処理生成部223とにそれぞれ対応するインタフェース生成部621と、代替対象特定部622と、処理生成部623とを更に有してもよい。インタフェース生成部621は、インタフェース生成部221が生成するのと同様のユーザインタフェースを生成する。本実施形態において、インタフェース生成部621はコントローラ300にユーザインタフェースを表示させる。ユーザインタフェースの具体例については、コントローラ300の説明において後述する。
代替対象特定部622は、代替対象特定部222と同様に、上記リアル情報と、上記バーチャル情報との差異に基づいて一以上の実行不可部分を特定する。インタフェース生成部621は、代替対象特定部622により特定された一以上の実行不可部分を上記表示部に表示させる。
処理生成部623は、処理生成部223と同様に、ユーザインタフェースの入力部への入力に基づいて、バーチャル用処理を生成する。例えば処理生成部623は、入力部への入力に基づいて、上述した補充処理命令又はスキップ処理命令を生成し、プログラム記憶部612に記憶させる。
600は、コントローラ200Aの制御対象判別部231と、送信部232とにそれぞれ対応する制御対象判別部631と、送信部632とを更に有してもよい。制御対象判別部631は、制御対象判別部231と同様に、自コントローラの制御対象が、マシン(管轄マシン)であるか、バーチャルマシン(管轄バーチャルマシン)であるかを判別する。
処理部613は、自コントローラの制御対象がマシンである場合にはリアル制御処理を実行し、自コントローラの制御対象がバーチャルマシンである場合には、リアル制御処理と少なくとも一部が異なるバーチャル制御処理を実行する。例えば処理部613は、他のコントローラがバーチャルマシンを制御し、自コントローラが管轄マシンを制御する場合には、マシン(他のコントローラが制御するマシン)の動作に関連する外部依存部分がリアル用処理と異なるバーチャル用処理を実行する。このバーチャル用処理は、上述したリアル制御処理に含まれる。処理部613は、他のコントローラがマシンを制御し、自コントローラが管轄バーチャルマシンを制御する場合には、管轄マシンの動作に関連する管轄部分がリアル用処理と異なるバーチャル用処理を実行してもよい。このバーチャル用処理は、上述したバーチャル制御処理に含まれる。
送信部632は、送信部232と同様に、制御対象判別部631による判別結果を付加した情報を他のコントローラに送信する。例えば送信部632は、バーチャルマシンV3Aの動作結果を示す情報(制御情報)に、制御対象判別部631による判別結果(例えば上記フラグ)を付加した情報をコントローラ100又はバーチャルコントローラ500に送信する。
バーチャルコントローラ600Bも、バーチャルコントローラ600Aと同様に、コントローラ200Bの判別部211と、プログラム記憶部212と、処理部213とにそれぞれ対応する判別部611と、プログラム記憶部612と、処理部613とを有する。処理部613が実行する処理は、主として、マシン3Bをリアル空間RSにおいて動作させるのに代えて、モデル記憶部410が記憶する三次元モデルに基づいて、バーチャルマシンV3Bをバーチャル空間VSにおいて動作させる点において処理部213が実行する処理と異なる。その他の点において、処理部613が実行する処理は、処理部213が実行する処理と実質的に同様である。
バーチャルコントローラ600Bは、バーチャルコントローラ600Aと同様に、コントローラ200Bのインタフェース生成部221と、代替対象特定部222と、処理生成部223とにそれぞれ対応するインタフェース生成部621と、代替対象特定部622と、処理生成部623とを更に有してもよい。また、バーチャルコントローラ600Bは、バーチャルコントローラ600Aと同様に、コントローラ200Bの制御対象判別部231と、送信部232とにそれぞれ対応する制御対象判別部631と、送信部632とを更に有してもよい。送信部632は、バーチャルマシンV3Bの動作結果を示す情報(制御情報)に、制御対象判別部631による判別結果(例えば上記フラグ)を付加した情報をコントローラ100又はバーチャルコントローラ500に送信する。
(設定コントローラ)
コントローラ300は、コントローラ100,200A,200Bと、バーチャルコントローラ500,600A,600Bとに対して、制御条件の設定を行う設定コントローラである。制御条件の具体例としては、制御ゲインの他、把持センサ62によるねじ締めにおいて、トルクセンサ61により検出されるトルクに対する上記所定値等が挙げられる。コントローラ300は、コントローラ100,200A,200Bと、バーチャルコントローラ500,600A,600Bのそれぞれ(他のコントローラ)と通信可能なコントローラである。
図13に示すように、コントローラ300は、機能ブロックとして、判別部311と、プログラム記憶部312と、条件設定処理部313とを有する。判別部311は、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別する。判別部311は、他のコントローラから受信する情報に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。他のコントローラから受信する情報は、他のコントローラにおける制御情報と、他のコントローラがマシンを制御するかバーチャルマシンをするかを示すフラグとを含んでいてもよく、判別部311は、フラグに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、上記制御情報の構成が異なる場合がある。この場合、判別部311は、上記制御情報に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御する場合には制御情報が暗号化され、他のコントローラがバーチャルマシンを制御する場合には制御情報が暗号化されないことも考えられる。この場合、判別部311は、上記制御情報が暗号化されているか否かに基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、他のコントローラから情報を受信するための通信状況が異なる場合もある。通信状況の相違の具体例としては、通信の遅延時間の相違、通信に用いられるポートの相違等が挙げられる。他のコントローラがマシンを制御するかバーチャルマシンを制御するかによって、他のコントローラから情報を受信するための通信状況が異なる場合、判別部311は、他のコントローラから情報を受信するための通信状況に基づいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかを判別してもよい。
プログラム記憶部312は、予め定められたリアル用プログラムを記憶している。リアル用プログラムは、他のコントローラがマシンを制御する場合に、コントローラ300に所定のリアル用処理を実行させるプログラムである。プログラム記憶部312は、他のコントローラがバーチャルマシンを制御する場合に、リアル用処理の少なくとも一部を変更したバーチャル用処理をコントローラ300に実行させるバーチャル用修正プログラムを更に記憶している。
プログラム記憶部312が記憶するリアル用プログラムは、次のリアル用設定処理命令を含む。
リアル用設定処理命令1) コントローラ100に対する制御条件の設定用のユーザインタフェース(以下、「リアル用インタフェース」という。)を生成し、リアル用インタフェースへの入力に基づきコントローラ100に対する制御条件を設定する。
リアル用設定処理命令2) コントローラ200Aに対するリアル用インタフェースを生成し、リアル用インタフェースへの入力に基づきコントローラ200Aに対する制御条件を設定する。
リアル用設定処理命令3) コントローラ200Bに対するリアル用インタフェースを生成し、リアル用インタフェースへの入力に基づきコントローラ200Bに対する制御条件を設定する。
バーチャル用処理は、リアル用設定処理命令により生成されるリアル用インタフェースに比較して、設定可能な項目が異なるバーチャル用インタフェースを生成することを含んでいてもよい。
例えば、バーチャル用修正プログラムは、以下の項目変更命令を含み得る。
項目変更命令1) コントローラ100に代わって、バーチャルコントローラ500が制御条件の設定対象となっている場合に、コントローラ100に対するリアル用インタフェースにおける設定項目の一部を無効化する。
項目変更命令2) コントローラ200Aに代わって、バーチャルコントローラ600Aが制御条件の設定対象となっている場合に、コントローラ200Aに対するリアル用インタフェースにおける設定項目の一部を無効化する。
項目変更命令3) コントローラ200Bに代わって、バーチャルコントローラ600Bが制御条件の設定対象となっている場合に、コントローラ200Bに対するリアル用インタフェースにおける設定項目の一部を無効化する。
条件設定処理部313は、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行する。一例として、条件設定処理部313は、制御条件の設定対象となる他のコントローラが、マシン2を制御するコントローラ100である場合に、上記リアル用設定処理命令1に基づいてコントローラ100に対する制御条件を設定する。条件設定処理部313は、他のコントローラがバーチャルマシンV2を制御するバーチャルコントローラ500である場合に、上記項目変更命令1に基づき修正されたリアル用設定処理命令1に従って、コントローラ100に対するリアル用インタフェースにおける設定項目の一部を無効化したバーチャル用インタフェースを生成し、バーチャル用インタフェースへの入力に基づきバーチャルコントローラ500に対する制御条件を設定する。
条件設定処理部313は、制御条件の設定対象となる他のコントローラが、マシン3Aを制御するコントローラ200Aである場合に、上記リアル用設定処理命令2に基づいてコントローラ200Aに対する制御条件を設定する。条件設定処理部313は、他のコントローラがバーチャルマシンV3Aを制御するバーチャルコントローラ600Aである場合に、上記項目変更命令2に基づき修正されたリアル用設定処理命令2に従って、コントローラ200Aに対するリアル用インタフェースにおける設定項目の一部を無効化したバーチャル用インタフェースを生成し、バーチャル用インタフェースへの入力に基づきバーチャルコントローラ600Aに対する制御条件を設定する。
条件設定処理部313は、制御条件の設定対象となる他のコントローラが、マシン3Bを制御するコントローラ200Bである場合に、上記リアル用設定処理命令3に基づいてコントローラ200Bに対する制御条件を設定する。条件設定処理部313は、他のコントローラがバーチャルマシンV3Bを制御するバーチャルコントローラ600Bである場合に、上記項目変更命令3に基づき修正されたリアル用設定処理命令3に従って、コントローラ200Bに対するリアル用インタフェースにおける設定項目の一部を無効化したバーチャル用インタフェースを生成し、バーチャル用インタフェースへの入力に基づきバーチャルコントローラ600Bに対する制御条件を設定する。
コントローラ300は、ユーザインタフェースへの入力に基づいてバーチャル用処理を生成するように構成されていてもよい。例えばコントローラ300は、インタフェース生成部321と、処理生成部322とを更に有する。
インタフェース生成部321は、リアル用インタフェースにおける設定項目のうち、バーチャル用インタフェースにおいて無効化すべき項目を、コントローラごとに入力可能なユーザインタフェースを生成する。以下、このユーザインタフェースを「項目設定インタフェース」という。処理生成部322は、項目設定インタフェースへの入力に基づいて、上記項目変更命令1、上記項目変更命令2、及び上記項目変更命令3を生成し、プログラム記憶部312に記憶させる。
インタフェース生成部321は、コントローラ100,200A,200Bと、バーチャルコントローラ500,600A,600Bのそれぞれが生成する上記ユーザインタフェースを選択的に表示するためのユーザインタフェースを更に生成してもよい。以下、このユーザインタフェースを、「処理生成用インタフェース」といい、上述したリアル用インタフェース、バーチャル用インタフェース、及び項目設定用インタフェースと区別する。
図14は、インタフェース生成部321が生成する処理生成用インタフェースを例示する模式図である。図14に示すように、処理生成用インタフェース350は、コントローラ選択部351と、マシン選択部352と、表示部353と、入力部354と、登録指示部355とを含む。
コントローラ選択部351は、コントローラ100,200A,200Bと、バーチャルコントローラ500,600A,600Bのいずれかを選択する入力インタフェースである。
マシン選択部352は、コントローラ選択部351で選択されたコントローラを基準として、他のコントローラにより制御されるマシンを選択する入力インタフェースである。例えば、コントローラ選択部351においてコントローラ100が選択されている場合、マシン3Aとマシン3Bとのいずれかが、他のコントローラにより制御されるマシンに該当する。コントローラ選択部351においてコントローラ200Aが選択されている場合、マシン2とマシン3Bとのいずれかが、他のコントローラにより制御されるマシンとなる。コントローラ選択部351においてコントローラ200Bが選択されている場合、マシン2とマシン3Aとのいずれかが、他のコントローラにより制御されるマシンとなる。
表示部353は、コントローラ選択部351において選択されたコントローラが実行する処理において、マシン選択部352において選択されたマシンに対応するバーチャルマシンが制御される場合における実行不可部分356を表示する。入力部354は、実行不可部分356のそれぞれに対して代替処理を入力する部分である。例えば入力部354は、表示部353において選択された実行不可部分356に対応して代替処理を入力する入力インタフェースを含む。表示部353及び入力部354における表示内容は、コントローラ選択部351において選択されたコントローラのインタフェース生成部(インタフェース生成部121,221,521,621のいずれか)により生成される。
登録指示部355は、入力部354において入力された代替処理に基づいて、バーチャル用処理を生成し、登録することを要求する入力インタフェースである。登録指示部355によりバーチャル用処理の生成、登録が要求されると、コントローラ選択部351において選択されたコントローラの処理生成部(処理生成部123,223,523,623のいずれか)により、入力部354の入力内容に基づいてバーチャル用処理が生成され、登録される。
コントローラ300は、処理指令部331と、データ表示部332とを更に有してもよい。処理指令部331は、予め定められた処理の実行をコントローラ100又はバーチャルコントローラ500に指令する。データ表示部332は、処理の実行により、コントローラ100又はバーチャルコントローラ500に蓄積された制御データを表示させる。
以上においては、バーチャルマシンを制御するバーチャルコントローラは、マシンを制御するコントローラ100,200A,200Bとは別に、シミュレーション装置400に設けられる場合を例示したが、これに限られない。コントローラ100,200A,200B自体が、バーチャルマシンを制御する(マシンの制御をシミュレーションする)機能を有していてもよい。
この場合、コントローラ200A,200Bは、自コントローラの制御対象がマシンである場合には、パワー回路280に駆動電力を出力させる処理を含むリアル制御処理を実行し、自コントローラの制御対象がバーチャルマシンである場合には、パワー回路280に駆動電力を出力させる処理を含まないバーチャル制御処理を実行してもよい。
(ハードウェア構成)
図15は、コントローラ100と、コントローラ200Aと、コントローラ200Bと、シミュレーション装置400と、コントローラ300とのハードウェア構成を例示するブロック図である。コントローラ100は、制御回路190を有する。制御回路190は、一以上のプロセッサ191と、メモリ192と、ストレージ193と、通信ポート194と、制御ポート195と、マシンシステム196とを有する。ストレージ193は、不揮発性の記憶媒体であり、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別することと、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行することと、を制御回路190に実行させるプログラムを記憶している。例えばストレージ193は、上述したコントローラ100の機能ブロックを制御回路190に構成させるためのプログラムを記憶している。ストレージ193の具体例としては、フラッシュメモリ、又はハードディスク等が挙げられる。
メモリ192は、ストレージ193からロードされたプログラム等を一時的に記憶する。メモリ192の具体例としては、ランダムアクセスメモリが挙げられる。プロセッサ191は、メモリ192にロードされたプログラムを実行することと、プログラムの実行に伴い生成した演算結果をメモリ192に一時的に格納することとを繰り返すことで、上述した機能ブロックを制御回路190に構成させる。
通信ポート194は、プロセッサ191からの指令に基づいて、通信ネットワーク900を介して他のコントローラと通信する。制御ポート195は、プロセッサ191からの指令に基づいて、マシン2を制御する。
上述したように、コントローラ200Aとコントローラ200Bとのそれぞれは、パワー回路280と、制御回路290とを有する。制御回路290は、一以上のプロセッサ291と、メモリ292と、ストレージ293と、通信ポート294とを有する。ストレージ293は、不揮発性の記憶媒体であり、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別することと、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行することと、を制御回路290に実行させるプログラムを記憶している。例えばストレージ293は、上述したコントローラ200A又はコントローラ200Bの機能ブロックを制御回路290に構成させるためのプログラムを記憶している。ストレージ293の具体例としては、フラッシュメモリ、又はハードディスク等が挙げられる。
メモリ292は、ストレージ293からロードされたプログラム等を一時的に記憶する。メモリ292の具体例としては、ランダムアクセスメモリが挙げられる。プロセッサ291は、メモリ292にロードされたプログラムを実行することと、プログラムの実行に伴い生成した演算結果をメモリ292に一時的に格納することとを繰り返すことで、上述した機能ブロックを制御回路290に構成させる。
通信ポート294は、プロセッサ291からの指令に基づいて、通信ネットワーク900を介して他のコントローラと通信する。パワー回路280は、プロセッサ291からの指令に基づいて、マシン3A又はマシン3Bの駆動電力を生成する。
シミュレーション装置400は、シミュレーション回路490を有する。シミュレーション回路490は、一以上のプロセッサ491と、メモリ492と、ストレージ493と、通信ポート494とを有する。ストレージ493は、不揮発性の記憶媒体であり、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別することと、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行することと、をシミュレーション回路490に実行させるプログラムを記憶している。例えばストレージ493は、上述したシミュレーション装置400の機能ブロックをシミュレーション回路490に構成させるためのプログラムを記憶している。ストレージ493の具体例としては、フラッシュメモリ、又はハードディスク等が挙げられる。
メモリ492は、ストレージ493からロードされたプログラム等を一時的に記憶する。メモリ492の具体例としては、ランダムアクセスメモリが挙げられる。プロセッサ491は、メモリ492にロードされたプログラムを実行することと、プログラムの実行に伴い生成した演算結果をメモリ492に一時的に格納することとを繰り返すことで、上述した機能ブロックをシミュレーション回路490に構成させる。通信ポート494は、プロセッサ291からの指令に基づいて、通信ネットワーク900を介して他のコントローラと通信する。
コントローラ300は、設定回路390を有する。設定回路390は、一以上のプロセッサ391と、メモリ392と、ストレージ393と、通信ポート394とを有する。ストレージ393は、不揮発性の記憶媒体であり、他のコントローラがマシンを制御するか、マシンに対応するバーチャルマシンを制御するかを判別することと、他のコントローラがマシンを制御する場合には所定のリアル用処理を実行し、他のコントローラがバーチャルマシンを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行することと、を設定回路390に実行させるプログラムを記憶している。例えばストレージ393は、上述したコントローラ300の機能ブロックを設定回路390に構成させるためのプログラムを記憶している。ストレージ393の具体例としては、フラッシュメモリ、又はハードディスク等が挙げられる。
メモリ392は、ストレージ393からロードされたプログラム等を一時的に記憶する。メモリ392の具体例としては、ランダムアクセスメモリが挙げられる。プロセッサ391は、メモリ392にロードされたプログラムを実行することと、プログラムの実行に伴い生成した演算結果をメモリ392に一時的に格納することとを繰り返すことで、上述した機能ブロックを設定回路390に構成させる。
通信ポート394は、プロセッサ391からの指令に基づいて、通信ネットワーク900を介して他のコントローラと通信する。表示デバイス395は、プロセッサ391からの指令に基づいて、上述した各種ユーザインタフェースを表示させる。表示デバイス395の具体例としては、液晶モニタ等が挙げられる。入力デバイス396は、各種ユーザインタフェースへの入力を取得する。入力デバイス396の具体例としては、キーボード又はマウス等が挙げられる。入力デバイス396は、所謂タッチパネルとして、表示デバイス395に一体化されていてもよい。
〔システム構築手順〕
続いて、システム構築方法の一例として、マシンシステム1が実行するシステム構築手順を例示する。ここでのシステム構築手順は、複数のコントローラの制御対象を、バーチャルマシンからマシンに段階的に変更することで、複数のコントローラのそれぞれがマシンを制御するシステムを構築する手順を意味する。
この手順は、他のコントローラから受信した情報に基づいて、他のコントローラがマシンに対応するバーチャルマシンを制御することを判別することと、バーチャル用処理を実行し、実行結果を表示することと、他のコントローラから受信した情報に基づいて、他のコントローラによる制御対象がバーチャルマシンからマシンに変更されたことを判別することと、他のコントローラによる制御対象がバーチャルマシンから前記マシンに変わるのに応じて、バーチャル用処理を、バーチャル用処理と少なくとも一部が異なるリアル用処理に変更することと、リアル用処理を実行し、実行結果を表示することと、を含む。
システム構築手順は、例えばコントローラ300により統合的に実行される。図16に示すように、コントローラ300は、まず、ステップS01,S02を実行する。ステップS01では、コントローラ300が通信可能な他のコントローラのそれぞれに対して、バーチャル用処理を生成する。ステップS01の具体的内容は後述する。
ステップS02では、コントローラ300が通信可能な他のコントローラのそれぞれに対して、制御条件を設定する。ステップS02の具体的内容は後述する。
次に、コントローラ300はステップS03,S04,S05,S06を実行する。ステップS03では、現在のシステム構成における処理の試行要求が入力デバイス396等により入力されるのを処理指令部331が待機する。ステップS04では、処理指令部331が、処理の実行をコントローラ100又はバーチャルコントローラ500に指令する。
その後、コントローラ100又はバーチャルコントローラ500と、コントローラ200A又はバーチャルコントローラ500Aと、コントローラ200B又はバーチャルコントローラ500Bとのそれぞれにおいて、他のコントローラがマシンを制御するかバーチャルマシンを制御するかが判別され、他のコントローラがバーチャルマシンを制御すると判別された場合には、これに対応するバーチャル用処理が実行される。ステップS05では、データ表示部332が、コントローラ100又はバーチャルコントローラ500における処理の実行完了を待機する。ステップS06では、データ表示部332が処理の実行により、コントローラ100又はバーチャルコントローラ500に蓄積された制御データ(処理の実行結果)を表示させる。
次に、コントローラ300はステップS07を実行する。ステップS07では、処理の試行要求が入力デバイス396等により再度入力されているか否かを処理指令部331が確認する。ステップS07において、試行要求が再度入力されていると判定した場合、コントローラ300はステップS08を実行する。ステップS08では、他のコントローラのいずれかによる制御対象が、バーチャルマシンからマシンに変更されたか否かを処理指令部331が確認する。ステップS08において、他のコントローラのいずれかによる制御対象が、バーチャルマシンからマシンに変更されたと判定した場合、コントローラ300は、ステップS02と同様のステップS09を実行する。
その後、コントローラ300は処理をステップS04に戻す。ステップS07において、バーチャルマシンからマシンへの制御対象の変更はないと判定した場合、コントローラ300は、ステップS09を実行することなく処理をステップS04に戻す。以上により、処理の試行と、制御データ(処理の実行結果)の表示とが繰り返し実行される。この繰り返しプロセスの途中で、他のコントローラがバーチャルマシンからマシンに変わると、当該マシンに関係するバーチャル用処理がリアル用処理に置き換えられ、リアル用処理の制御データが表示されることとなる。
この手順の繰り返しにより、複数のコントローラのそれぞれがマシンを制御するシステムが構築され、適切な制御データが表示されると、システム構築手順が完了する。
ステップS07において、試行要求が再度入力されていないと判定した場合、コントローラ300は、図17に示すようにステップS11を実行する。ステップS11では、バーチャル用処理の変更要求が入力デバイス396等により入力されているか否かを処理指令部331が確認する。ステップS11において、バーチャル用処理の変更要求が入力されていると判定した場合、コントローラ300はステップS01と同様のステップS12を実行する。
ステップS11において、バーチャル用処理の変更要求は入力されていないと判定した場合、コントローラ300はステップS13を実行する。ステップS13では、制御条件の変更要求が入力デバイス396等により入力されているか否かを処理指令部331が確認する。ステップS13において、制御条件の変更要求が入力されていると判定した場合、コントローラ300はステップS02と同様のステップS14を実行する。
ステップS12,S14の後、コントローラ300は、処理をステップS07に戻す。ステップS13において、制御条件の変更要求は入力されていないと判定した場合、コントローラ300はステップS12,S14を実行することなく処理をステップS07に戻す。その後、試行要求が再度入力されるまでは、要求に応じてバーチャル用処理及び制御条件の再設定が行われる。
図18は、ステップS01におけるバーチャル用処理の生成手順を例示するフローチャートである。まず、コントローラ300は、ステップS21,S22,S23を実行する。ステップS21では、インタフェース生成部321が、上述した処理生成用インタフェース350を生成し、表示デバイス395等に表示させる。ステップS22では、インタフェース生成部321が、コントローラ選択部351においてコントローラが選択されるのを待機する。以下、コントローラ選択部351において選択されたコントローラを「選択済みコントローラ」という。ステップS23では、インタフェース生成部321が、マシン選択部352においてマシンが選択されるのを待機する。以下、マシン選択部352における選択対象となるマシンを「他のマシン」といい、マシン選択部352において選択された他のマシンを「選択済みマシン」という。
次に、コントローラ300は、ステップS24を実行する。ステップS24では、選択済みコントローラの代替対象特定部(代替対象特定部122,代替対象特定部222,代替対象特定部522,代替対象特定部622のいずれか)が、上記リアル情報と、上記バーチャル情報との差異に基づいて、選択済みマシンに対応する一以上の実行不可部分を特定する。選択済みコントローラのインタフェース生成部(インタフェース生成部121,221,521,621のいずれか)は、代替対象特定部により特定された一以上の実行不可部分356を、表示部353に表示させる。
次に、コントローラ300はステップS25,S26を実行する。ステップS25では、選択済みコントローラのインタフェース生成部が、表示部353において実行不可部分356が選択されるのを待機する。ステップS26では、選択済みコントローラのインタフェース生成部が、選択された実行不可部分356に対して代替処理を入力する入力部354を表示させる。
次に、コントローラ300はステップS27,S28を実行する。ステップS27では、選択済みコントローラの処理生成部(処理生成部123,223,523,623のいずれか)が、登録指示部355による登録要求の入力を待機する。ステップS28では、選択済みコントローラの処理生成部が、登録指示部355への入力に基づいて、バーチャル用処理を生成する。
次に、コントローラ300は、ステップS31を実行する。ステップS31では、全ての他のマシンに対して、バーチャル用処理の生成が完了したか否かをインタフェース生成部321が確認する。
ステップS31において、バーチャル用処理の生成が未完了のマシンが残っていると判定した場合、コントローラ300は処理をステップS23に戻す。以後、全ての他のマシンに対してバーチャル用処理の生成が完了するまで、ステップS23~S31が繰り返される。
ステップS31において、全ての他のマシンに対して、バーチャル用処理の生成が完了したと判定した場合、コントローラ300はステップS32を実行する。ステップS32では、コントローラ選択部351における選択対象となる全てのコントローラに対して、バーチャル用処理の生成が完了したか否かを確認する。ステップS32において、バーチャル用処理の生成が未完了のマシンが残っていると判定した場合、コントローラ300は処理をステップS22に戻す。以後、全てのコントローラに対してバーチャル用処理の生成が完了するまで、ステップS22~S31が繰り返される。ステップS32において、全てのコントローラに対して、バーチャル用処理の生成が完了したと判定した場合、コントローラ300は、バーチャル用処理の生成手順を完了する。
図19は、ステップS02における制御条件の設定手順を例示するフローチャートである。まず、コントローラ300は、ステップS41,S42を実行する。ステップS41では、条件設定処理部313が、制御条件の設定対象となる他のコントローラが入力デバイス396等により選択されるのを待機する。以下、選択された他のコントローラを「選択済みコントローラ」という。ステップS42では、選択済みコントローラの制御対象が、マシンであるかバーチャルマシンであるかを条件設定処理部313が判別する。
ステップS42において、選択済みコントローラの制御対象がマシンであると判定した場合、コントローラ300はステップS43を実行する。ステップS42において、選択済みコントローラの制御対象がバーチャルマシンであると判定した場合、コントローラ300はステップS44を実行する。ステップS43では、条件設定処理部313が、上記リアル用インタフェースを生成し、表示デバイス395等に表示させる。ステップS44では、条件設定処理部313が、上記バーチャル用インタフェースを生成し、表示デバイス395等に表示させる。
ステップS43,S44の次に、コントローラ300はステップS45,S46を実行する。ステップS45では、制御条件の登録要求が入力デバイス396等により入力されるのを条件設定処理部313が待機する。ステップS46では、リアル用インタフェース又はバーチャル用インタフェースへの入力に基づいて、選択済みコントローラに対する制御条件を設定する。
図20は、ステップS04における処理の実行要求に対応して、コントローラ100又はバーチャルコントローラ500と、コントローラ200A又はバーチャルコントローラ500Aと、コントローラ200B又はバーチャルコントローラ500Bとのそれぞれにおいて実行される処理手順を例示するフローチャートである。以下、コントローラ100又はバーチャルコントローラ500と、コントローラ200A又はバーチャルコントローラ500Aと、コントローラ200B又はバーチャルコントローラ500Bとのそれぞれを総称して、「制御用コントローラ」という。
図20に示すように、制御用コントローラは、まず、ステップS51を実行する。ステップS51では、自コントローラが管轄マシンを制御するか、管轄バーチャルマシンを制御するかを確認する。ステップS51において、自コントローラが管轄マシンを制御すると判定した場合、制御用コントローラはステップS52を実行する。ステップS51において、自コントローラが管轄バーチャルマシンを制御すると判定した場合、制御用コントローラはステップS53を実行する。ステップS52では、リアル用処理と等しい実行対象処理を処理部が生成する。ステップS53では、管轄部分がリアル用処理と異なる実行対象処理を処理部が生成する。
ステップS52,S53の次に、制御用コントローラは、ステップS61を実行する。ステップS61では、判別部が他のコントローラから制御情報を含む情報を受信する。
次に、制御用コントローラはステップS62を実行する。ステップS62では、判別部が、他のコントローラから受信した情報に基づいて、他のコントローラがマシンを制御するか、バーチャルマシンを制御するかを確認する。
ステップS62において、他のコントローラがマシンを制御すると判定した場合、制御用コントローラはステップS63を実行する。ステップS62において、他のコントローラがバーチャルマシンを制御すると判定した場合、制御用コントローラはステップS64を実行する。ステップS63では、処理部が、実行対象処理のうちマシンの動作に関連する外部依存部分をリアル用処理に一致させる。ステップS64では、処理部が、バーチャル用修正プログラムに基づいて、実行対象処理の外部依存部分をリアル用処理の外部依存部分に対して修正する。
次に、制御用コントローラは、ステップS65を実行する。ステップS65では、処理部が実行対象処理を実行する。次に、制御用コントローラはステップS66を実行する。ステップS66では、予め定められた全ての処理が完了したか否かを処理部が確認する。ステップS66において、未完了の処理が残っていると判定した場合、制御用コントローラはステップS67を実行する。ステップS67では、処理部が、実行対象を次の処理に移行させる。その後、制御用コントローラは処理をステップS61に戻す。以後、全ての処理が完了するまでは、他のコントローラがマシンを制御するかバーチャルマシンを制御するかに基づく実行対象処理の生成と、実行とが繰り返される。ステップS66において、全ての処理が完了したと判定した場合、制御用コントローラは処理手順を完了する。
〔実施形態の効果〕
以上に説明したように、コントローラ100,200A,200B,500,600A,600Bは、他のコントローラ100,200A,200B,500,600A,600Bと通信可能なコントローラ100,200A,200B,500,600A,600Bであって、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するか、マシン2,3A,3Bに対応するバーチャルマシンV2,V3A,V3Bを制御するかを判別する判別部111,211,311,511,611と、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御する場合には所定のリアル用処理を実行し、他のコントローラ100,200A,200B,500,600A,600BがバーチャルマシンV2,V3A,V3Bを制御する場合には、リアル用処理と少なくとも一部が異なるバーチャル用処理を実行する処理部113,213,313,513,613と、を備える。
他のコントローラ100,200A,200B,500,600A,600Bにおいて、マシン2,3A,3Bの動作をバーチャルマシンV2,V3A,V3Bの動作によりシミュレーションすることができたとしても、バーチャルマシンV2,V3A,V3Bの動作ではリアル空間に変化が生じないので、リアル空間の状態に基づく処理をコントローラ100,200A,200B,500,600A,600Bにおいて実行できず、システム全体の処理をシミュレーションできない場合がある。これに対し、本コントローラ100,200A,200B,500,600A,600Bは、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するか、バーチャルマシンV2,V3A,V3Bを制御するかが判別され、他のコントローラ100,200A,200B,500,600A,600BがバーチャルマシンV2,V3A,V3Bを制御する場合には、リアル要処理と少なくとも一部が異なるバーチャル用処理が実行される。このように、他のコントローラ100,200A,200B,500,600A,600Bの制御対象がマシン2,3A,3Bであるか、バーチャルマシンV2,V3A,V3Bであるかに応じて、コントローラ100,200A,200B,500,600A,600Bの処理内容を変更する構成によれば、システム全体の処理を容易にシミュレーションすることができる。
判別部111,211,311,511,611は、他のコントローラ100,200A,200B,500,600A,600Bから受信する情報に基づいて、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを判別してもよい。他のコントローラ100,200A,200B,500,600A,600Bからの情報に基づくことで、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを容易且つ適切に判別することができる。
他のコントローラ100,200A,200B,500,600A,600Bから受信する情報は、他のコントローラ100,200A,200B,500,600A,600Bにおける制御情報と、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bをするかを示すフラグとを含み、判別部111,211,311,511,611は、フラグに基づいて、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを判別し、処理部113,213,313,513,613は、制御情報に基づいてリアル用処理又はバーチャル用処理を実行してもよい。他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを更に容易に判別することができる。
他のコントローラ100,200A,200B,500,600A,600Bから受信する情報は、他のコントローラ100,200A,200B,500,600A,600Bにおける制御情報を含み、判別部111,211,311,511,611は、制御情報に基づいて、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを判別し、処理部113,213,313,513,613は、制御情報に基づいてリアル用処理又はバーチャル用処理を実行してもよい。上記フラグの付加が不要となるので、他のコントローラ100,200A,200B,500,600A,600Bにおける処理を簡素化することができる。
判別部111,211,311,511,611は、他のコントローラ100,200A,200B,500,600A,600Bから情報を受信するための通信状況に基づいて、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを判別してもよい。制御情報に差が表れないような場合であっても、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御するかバーチャルマシンV2,V3A,V3Bを制御するかを適切に判別することができる。
処理部113,213,313,513,613は、マシン2,3A,3Bの動作に基づき得られるリアル情報と、バーチャルマシンV2,V3A,V3Bの動作に基づき得られるバーチャル情報との差異を補う補充処理を含むバーチャル用処理を実行してもよい。システムの動作をより適切にシミュレーションすることができる。
処理部113,213,313,513,613は、リアル情報とバーチャル情報との差異に対して予め定められたデータを補う処理を含む補充処理を実行してもよい。システムの動作をより適切にシミュレーションすることができる。
処理部113,213,313,513,613は、リアル用処理の少なくとも一部をスキップさせるスキップ処理を含むバーチャル用処理を実行してもよい。例えば、バーチャルマシンV2,V3A,V3Bの動作では生じないリアル空間の変化を待機する処理をスキップすることで、シミュレーションを容易に遂行することができる。
リアル情報とバーチャル情報との差異に基づいて、補充処理を生成する処理生成部123,223,323,523,623を更に備えてもよい。システムの動作をより適切にシミュレーションすることができる。
リアル用処理のうち、他のコントローラ100,200A,200B,500,600A,600BがバーチャルマシンV2,V3A,V3Bを制御する場合には実行できない一以上の実行不可部分を示す表示部と、一以上の実行不可部分のそれぞれに対して代替処理を入力する入力部と、を含むユーザインタフェースを生成するインタフェース生成部121,221,321,521,621と、入力部への入力に基づきバーチャル用処理を生成する処理生成部123,223,323,523,623を更に備えてもよい。バーチャル用処理の生成をサポートするユーザインタフェースの提供により、コントローラ100,200A,200B,500,600A,600Bの使い勝手を向上させることができる。
バーチャル用処理は、マシン2,3A,3Bの動作に基づき得られるリアル情報と、バーチャルマシンV2,V3A,V3Bの動作に基づき得られるバーチャル情報との差異に基づいて一以上の実行不可部分を特定する代替対象特定部122,222,522,622を更に備え、インタフェース生成部121,221,321,521,621は、代替対象特定部122,222,522,622により特定された一以上の実行不可部分を表示部に表示させてもよい。コントローラ100,200A,200B,500,600A,600Bの使い勝手を更に向上させることができる。
他のコントローラ100,200A,200B,500,600A,600Bであり、マシン2,3A,3Bとして第一マシン2,3A,3Bを制御する第一コントローラ100,200A,200B,500,600A,600Bと、第二マシン2,3A,3Bを制御する第二コントローラ100,200A,200B,500,600A,600Bと通信可能であり、判別部111,211,311,511,611は、第一コントローラ100,200A,200B,500,600A,600Bが第一マシン2,3A,3Bを制御するか、バーチャルマシンV2,V3A,V3Bである第一バーチャルマシンV2,V3A,V3Bを制御するかと、第二コントローラ100,200A,200B,500,600A,600Bが、第二マシン2,3A,3Bを制御するか、第二マシン2,3A,3Bに対応する第二バーチャルマシンV2,V3A,V3Bを制御するかを判別し、処理部113,213,313,513,613は、第一コントローラ100,200A,200B,500,600A,600Bが第一バーチャルマシンV2,V3A,V3Bを制御し、第二コントローラ100,200A,200B,500,600A,600Bが第二マシン2,3A,3Bを制御する場合には、第一マシン2,3A,3Bの動作に関連する第一部分がリアル用処理と異なるバーチャル用処理を実行し、第一コントローラ100,200A,200B,500,600A,600Bが第一マシン2,3A,3Bを制御し、第二コントローラ100,200A,200B,500,600A,600Bが第二バーチャルマシンV2,V3A,V3Bを制御する場合には、第二マシン2,3A,3Bの動作に関連する第二部分がリアル用処理と異なるバーチャル用処理を実行してもよい。いずれのコントローラ100,200A,200B,500,600A,600Bがバーチャルであるかに合わせて適切に調整されたバーチャル用処理を処理部113,213,313,513,613が実行することにより、システムの動作をより適切にシミュレーションすることができる。
コントローラ100,200A,200B,500,600A,600Bは、他のコントローラ100,200A,200B,500,600A,600Bを含む複数のローカルコントローラ100,200A,200B,500,600A,600Bと通信可能であり、複数のローカルコントローラ100,200A,200B,500,600A,600Bをそれぞれ介して、マシン2,3A,3Bを含む複数のローカルマシン2,3A,3Bを制御するホストコントローラ100,200A,200B,500,600A,600Bであってもよい。
コントローラ100,200A,200B,500,600A,600Bは、管轄マシン2,3A,3B、又は管轄マシン2,3A,3Bに対応する管轄バーチャルマシンV2,V3A,V3Bを制御するコントローラ100,200A,200B,500,600A,600Bであり、制御対象が、管轄マシン2,3A,3Bであるか、管轄バーチャルマシンV2,V3A,V3Bであるかを判別する制御対象判別部131,231,531,631を更に備え、処理部113,213,313,513,613は、他のコントローラ100,200A,200B,500,600A,600BがバーチャルマシンV2,V3A,V3Bを制御し、コントローラ100,200A,200B,500,600A,600Bが管轄マシン2,3A,3Bを制御する場合には、マシン2,3A,3Bの動作に関連する外部依存部分がリアル用処理と異なるバーチャル用処理を実行し、他のコントローラ100,200A,200B,500,600A,600Bがマシン2,3A,3Bを制御し、コントローラ100,200A,200B,500,600A,600Bが管轄バーチャルマシンV2,V3A,V3Bを制御する場合には、管轄マシン2,3A,3Bの動作に関連する管轄部分がリアル用処理と異なるバーチャル用処理を実行してもよい。コントローラ100,200A,200B,500,600A,600B自体が、管轄マシン2,3A,3Bを制御するか、管轄バーチャルマシンV2,V3A,V3Bを制御するかによっても、コントローラ100,200A,200B,500,600A,600Bの処理内容を変更する構成により、システム全体の処理を更に容易にシミュレーションすることができる。
制御対象判別部131,231,531,631による判別結果を付加した情報を他のコントローラ100,200A,200B,500,600A,600Bに送信する送信部132,232,532,632を更に備えてもよい。コントローラ100,200A,200B,500,600A,600Bが管轄マシン2,3A,3Bを制御するか管轄バーチャルマシンV2,V3A,V3Bを制御するかを、他のコントローラ100,200A,200B,500,600A,600Bにおいて容易に判別させることができる。これにより、制御対象が管轄マシン2,3A,3Bであるか管轄バーチャルマシンV2,V3A,V3Bであるかに応じた他のコントローラ100,200A,200B,500,600A,600Bにおける処理内容の変更を容易にし、システム全体の処理を更に容易にシミュレーションすることができる。
本開示の他の側面に係るコントローラ100,200A,200B,500,600A,600Bは、他のコントローラ100,200A,200B,500,600A,600Bと通信可能であり、制御対象を制御するコントローラ100,200A,200B,500,600A,600Bであって、制御対象が、マシン2,3A,3Bであるか、バーチャルマシンV2,V3A,V3Bであるかを判別する制御対象判別部131,231,531,631と、制御対象判別部131,231,531,631による判別結果を付加した情報を他のコントローラ100,200A,200B,500,600A,600Bに送信する送信部132,232,532,632と、を備える。
このコントローラ100,200A,200B,500,600A,600Bによれば、コントローラ100,200A,200B,500,600A,600Bが管轄マシン2,3A,3Bを制御するか管轄バーチャルマシンV2,V3A,V3Bを制御するかを、他のコントローラ100,200A,200B,500,600A,600Bにおいて容易に判別させることができる。これにより、制御対象が管轄マシン2,3A,3Bであるか管轄バーチャルマシンV2,V3A,V3Bであるかに応じた他のコントローラ100,200A,200B,500,600A,600Bにおける処理内容の変更を容易にし、管轄マシン2,3A,3Bが関与するシステム全体の処理を更に容易にシミュレーションすることができる。
制御対象がマシン2,3A,3Bである場合にはリアル制御処理を実行し、制御対象がバーチャルマシンV2,V3A,V3Bである場合には、リアル制御処理と少なくとも一部が異なるバーチャル制御処理を実行する処理部113,213,313,513,613を更に備えてもよい。これにより、制御対象が管轄マシン2,3A,3Bであるか管轄バーチャルマシンV2,V3A,V3Bであるかの判別結果を、リアル制御処理とバーチャル制御処理との切替にも有効活用することができる。
マシン2,3A,3Bに駆動電力を出力するパワー回路を更に備え、制御部は、制御対象がマシン2,3A,3Bである場合には、パワー回路に駆動電力を出力させる処理を含むリアル制御処理を実行し、制御対象がバーチャルマシンV2,V3A,V3Bである場合には、パワー回路に駆動電力を出力させる処理を含まないバーチャル制御処理を実行してもよい。
以上、実施形態について説明したが、本発明は必ずしも上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で適宜変更することが可能である。