(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-08
(45)【発行日】2023-12-18
(54)【発明の名称】シミュレーション装置、制御システム、シミュレーション方法及びプログラム
(51)【国際特許分類】
G05B 19/418 20060101AFI20231211BHJP
G05B 19/4069 20060101ALI20231211BHJP
【FI】
G05B19/418 Z
G05B19/4069
(21)【出願番号】P 2022532294
(86)(22)【出願日】2021-03-02
(86)【国際出願番号】 JP2021008011
(87)【国際公開番号】W WO2021261018
(87)【国際公開日】2021-12-30
【審査請求日】2022-12-22
(32)【優先日】2020-06-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000006622
【氏名又は名称】株式会社安川電機
(74)【代理人】
【識別番号】100088155
【氏名又は名称】長谷川 芳樹
(74)【代理人】
【識別番号】100145012
【氏名又は名称】石坂 泰紀
(74)【代理人】
【識別番号】100171099
【氏名又は名称】松尾 茂樹
(72)【発明者】
【氏名】橋口 幸男
(72)【発明者】
【氏名】斧山 佳史
(72)【発明者】
【氏名】桑原 康一
(72)【発明者】
【氏名】内海 直樹
【審査官】影山 直洋
(56)【参考文献】
【文献】特開2000-330970(JP,A)
【文献】特開2017-094407(JP,A)
【文献】特開2005-014150(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/418
G05B 19/4069
(57)【特許請求の範囲】
【請求項1】
第1マシンに対する第1コントローラによる制御
であって、第1制御周期で第1セグメント処理を繰り返すことを含む制御をシミュレーションする第1シミュレータと、
第2マシンに対する第2コントローラによる制御
であって、前記第1制御周期とは異なる第2制御周期で第2セグメント処理を繰り返すことを含む制御をシミュレーションする第2シミュレータと、
前記第1制御周期と前記第2制御周期とに基づいて、前記第1コントローラによる
前記第1セグメント処理の実行タイミングと、前記第2コントローラによる
前記第2セグメント処理の実行タイミングとの関係に対応するように、前記第1シミュレータによる
前記第1セグメント処理の実行タイミングと、前記第2シミュレータによる
前記第2セグメント処理の実行タイミングとをコントロールするシミュレーションマネジャと、
を備える、シミュレーション装置。
【請求項2】
前記シミュレーションマネジャは、
シミュレーションサイクル数をカウントするカウンタと、
前記第1制御周期及び前記第2制御周期と、前記シミュレーションサイクル数とに基づいて、前記第1シミュレータ及び前記第2シミュレータの少なくとも一つを選択する選択部と、
前記選択部が選択した少なくとも一つのシミュレータのそれぞれに、セグメント処理を実行させる実行部とを有する、請求項
1記載のシミュレーション装置。
【請求項3】
前記選択部は、
前記第1セグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、前記第1制御周期に対応するシミュレーションサイクル数となった場合に、前記第1シミュレータを選択し、
前記第2セグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、前記第2制御周期に対応するシミュレーションサイクル数となった場合に、前記第2シミュレータを選択する、請求項
2記載のシミュレーション装置。
【請求項4】
前記第1制御周期に対応するシミュレーションサイクル数及び前記第2制御周期に対応するシミュレーションサイクル数がいずれも1以上である、請求項
3記載のシミュレーション装置。
【請求項5】
前記第1シミュレータによるシミュレーション結果と、前記第2シミュレータによるシミュレーション結果とに基づいて、前記第1マシンの動作及び前記第2マシンの動作をシミュレーションする動作シミュレーション部を更に備える、請求項1~
4のいずれか一項記載のシミュレーション装置。
【請求項6】
前記動作シミュレーション部は、前記第1シミュレータによるシミュレーション結果と、前記第2シミュレータによるシミュレーション結果との両方が更新された後に、前記第1マシンの動作及び前記第2マシンの動作をシミュレーションする、請求項
5記載のシミュレーション装置。
【請求項7】
前記第2シミュレータは、前記第1シミュレータによる前記第1マシンの動作のシミュレーション結果に対して、前記第2マシンの動作のシミュレーション結果を協調させるように、前記第2マシンに対する前記第2コントローラによる制御をシミュレーションする、請求項1~
6のいずれか一項記載のシミュレーション装置。
【請求項8】
前記シミュレーション装置は、
前記第1コントローラと前記第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、前記第1シミュレータと前記第2シミュレータとの間における通信データの受け渡しを行う通信シミュレータを更に備える、請求項1~
7のいずれか一項記載のシミュレーション装置。
【請求項9】
前記通信シミュレータは、送信側のシミュレータが生成した通信データを、予め定められた仮想遅延時間に基づいたタイミングで、受信側のシミュレータに取得させる、請求項
8記載のシミュレーション装置。
【請求項10】
前記通信シミュレータは、
通信サイクル数をカウントする通信カウンタと、
前記送信側のシミュレータが生成した通信データを通信バッファに格納する通信データ格納部と、
前記通信バッファに通信データが格納されてからカウントされた通信サイクル数が、前記仮想遅延時間に対応する通信サイクル数となった場合に、前記通信バッファに格納された通信データを読み出して受信側のシミュレータに取得させる通信データ読出部と、を有する請求項
9記載のシミュレーション装置。
【請求項11】
前記通信バッファは、データ転送方向の上流から下流に並ぶ複数の記憶領域を含み、
前記通信データ格納部は、前記送信側のシミュレータが生成した通信データを前記通信バッファの最上流の記憶領域に格納し、
前記通信シミュレータは、前記通信サイクル数がカウントされる度に、前記通信データを前記通信バッファにおいて一つ下流の記憶領域に転送する通信データ転送部を更に有し、
前記通信データ読出部は、前記通信データ転送部により最下流の記憶領域まで転送された前記通信データを読み出して前記受信側のシミュレータに取得させる、請求項
10記載のシミュレーション装置。
【請求項12】
前記通信バッファは、前記仮想遅延時間に対応する数の前記複数の記憶領域を含む、請求項
11記載のシミュレーション装置。
【請求項13】
前記通信シミュレータは、複数の送信側のシミュレータと、複数の受信側のシミュレータとをそれぞれ対応付ける複数の通信定義に基づいて、送信側のシミュレータから通信データを取得することと、受信側のシミュレータに通信データを取得させることと、を前記複数の通信定義ごとに実行する、請求項
8記載のシミュレーション装置。
【請求項14】
前記複数の通信定義のそれぞれは、送信側のシミュレータから受信側のシミュレータへの仮想遅延時間を含み、
前記通信シミュレータは、前記複数の通信定義ごとに、前記送信側のシミュレータが生成した通信データを、前記仮想遅延時間に基づいたタイミングで前記受信側のシミュレータに取得させる、請求項
13記載のシミュレーション装置。
【請求項15】
前記仮想遅延時間に対応するサイズの通信バッファを前記複数の通信定義ごとに割り当てる通信バッファ割当部を更に備え、
前記通信シミュレータは、
通信サイクル数をカウントする通信カウンタと、
前記複数の通信定義ごとに、前記送信側のシミュレータが生成した通信データを前記通信バッファに格納する通信データ格納部と、
前記複数の通信定義ごとに、前記通信バッファに前記通信データが格納されてからカウントされた通信サイクル数が、前記仮想遅延時間に対応する通信サイクル数となった場合に、前記通信バッファに格納された前記通信データを読み出して前記受信側のシミュレータに取得させる通信データ読出部と、を有する、請求項
14記載のシミュレーション装置。
【請求項16】
指定された再生速度に応じて前記第1シミュレータによるシミュレーションの進行速度及び前記第2シミュレータによるシミュレーションの進行速度を変更する進行速度調節部を更に備える、請求項1~
15のいずれか一項記載のシミュレーション装置。
【請求項17】
停止指令に応じて、前記第1シミュレータによるシミュレーション及び前記第2シミュレータによるシミュレーションを中断する中断部を更に備える、請求項1~
16のいずれか一項記載のシミュレーション装置。
【請求項18】
前記シミュレーションマネジャは、個別シミュレーションの指示を受けた場合に、前記第1シミュレータ及び前記第2シミュレータから一つの個別実行シミュレータを選択し、他のシミュレータによるシミュレーションの進行に無関係に、前記個別実行シミュレータによるシミュレーションを実行させる、請求項1~
17のいずれか一項記載のシミュレーション装置。
【請求項19】
第1マシンに対する第1コントローラによる制御をシミュレーションする第1シミュレータと、
第2マシンに対する第2コントローラによる制御をシミュレーションする第2シミュレータと、
前記第1コントローラによる制御の進行と、前記第2コントローラによる制御の進行との関係に対応するように、前記第1シミュレータによるシミュレーションの進行と、前記第2シミュレータによるシミュレーションの進行とをコントロールするシミュレーションマネジャと、
前記第1コントローラと前記第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、前記第1シミュレータと前記第2シミュレータとの間における通信データの受け渡しを行う通信シミュレータと、
を備え、
前記通信シミュレータは、
通信サイクル数をカウントする通信カウンタと、
送信側のシミュレータが生成した通信データを通信バッファに格納する通信データ格納部と、
前記通信バッファに通信データが格納されてからカウントされた通信サイクル数が、予め定められた仮想遅延時間に対応する通信サイクル数となった場合に、前記通信バッファに格納された通信データを読み出して受信側のシミュレータに取得させる通信データ読出部と、を有するシミュレーション装置。
【請求項20】
請求項
9~
12のいずれか一項記載のシミュレーション装置と、
前記第1コントローラと、前記第2コントローラとを含む実制御システムと、
前記仮想遅延時間を、前記第1コントローラと前記第2コントローラとの間の通信遅延時間に対応させる仮想遅延設定部と、を備える、制御システム。
【請求項21】
前記第1コントローラによる前記第1マシンの制御の進行と、前記第2コントローラによる前記第2マシンの制御の進行と、前記第1シミュレータによるシミュレーションの進行と、前記第2シミュレータによるシミュレーションの進行との比較に基づいて、前記実制御システムの異常を検知する異常検知部を更に備える、請求項20記載の制御システム。
【請求項22】
請求項1~
19のいずれか一項記載のシミュレーション装置と、
前記第1コントローラと、前記第2コントローラとを含む実制御システムと、
前記第1コントローラによる前記第1マシンの制御の進行と、前記第2コントローラによる前記第2マシンの制御の進行と、前記第1シミュレータによるシミュレーションの進行と、前記第2シミュレータによるシミュレーションの進行とを対比する比較画像を生成する比較画像生成部と、を備える、制御システム。
【請求項23】
第1マシンに対する第1コントローラによる制御
であって、第1制御周期で第1セグメント処理を繰り返すことを含む制御を第1シミュレータによりシミュレーションすることと、
第2マシンに対する第2コントローラによる制御
であって、前記第1制御周期とは異なる第2制御周期で第2セグメント処理を繰り返すことを含む制御を第2シミュレータによりシミュレーションすることと、
前記第1制御周期と前記第2制御周期とに基づいて、前記第1コントローラによる
前記第1セグメント処理の実行タイミングと、前記第2コントローラによる
前記第2セグメント処理の実行タイミングとの関係に対応するように、前記第1シミュレータによる
前記第1セグメント処理の実行タイミングと、前記第2シミュレータによる
前記第2セグメント処理の実行タイミングとをコントロールすることと、を含む、シミュレーション方法。
【請求項24】
第1マシンに対する第1コントローラによる制御を第1シミュレータによりシミュレーションすることと、
第2マシンに対する第2コントローラによる制御を第2シミュレータによりシミュレーションすることと、
前記第1コントローラによる制御の進行と、前記第2コントローラによる制御の進行との関係に対応するように、前記第1シミュレータによるシミュレーションの進行と、前記第2シミュレータによるシミュレーションの進行とをコントロールすることと、
前記第1コントローラと前記第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、前記第1シミュレータと前記第2シミュレータとの間における通信データの受け渡しを行うことと、
を含み、
通信データの受け渡しを行うことは、
通信サイクル数をカウントすることと、
送信側のシミュレータが生成した通信データを通信バッファに格納することと、
前記通信バッファに通信データが格納されてからカウントされた通信サイクル数が、予め定められた仮想遅延時間に対応する通信サイクル数となった場合に、前記通信バッファに格納された通信データを読み出して受信側のシミュレータに取得させることと、を含む、シミュレーション方法。
【請求項25】
第1マシンに対する第1コントローラによる制御
であって、第1制御周期で第1セグメント処理を繰り返すことを含む制御をシミュレーションする第1シミュレータと、
第2マシンに対する第2コントローラによる制御
であって、前記第1制御周期とは異なる第2制御周期で第2セグメント処理を繰り返すことを含む制御をシミュレーションする第2シミュレータと、
前記第1制御周期と前記第2制御周期とに基づいて、前記第1コントローラによる
前記第1セグメント処理の実行タイミングと、前記第2コントローラによる
前記第2セグメント処理の実行タイミングとの関係に対応するように、前記第1シミュレータによる
前記第1セグメント処理の実行タイミングと、前記第2シミュレータによる
前記第2セグメント処理の実行タイミングとをコントロールするシミュレーションマネジャと、を装置に構成させるプログラム。
【請求項26】
第1マシンに対する第1コントローラによる制御をシミュレーションする第1シミュレータと、
第2マシンに対する第2コントローラによる制御をシミュレーションする第2シミュレータと、
前記第1コントローラによる制御の進行と、前記第2コントローラによる制御の進行との関係に対応するように、前記第1シミュレータによるシミュレーションの進行と、前記第2シミュレータによるシミュレーションの進行とをコントロールするシミュレーションマネジャと、
前記第1コントローラと前記第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、前記第1シミュレータと前記第2シミュレータとの間における通信データの受け渡しを行う通信シミュレータと、
を装置に構成させ、
通信サイクル数をカウントする通信カウンタと、
送信側のシミュレータが生成した通信データを通信バッファに格納する通信データ格納部と、
前記通信バッファに通信データが格納されてからカウントされた通信サイクル数が、予め定められた仮想遅延時間に対応する通信サイクル数となった場合に、前記通信バッファに格納された通信データを読み出して受信側のシミュレータに取得させる通信データ読出部と、
を前記通信シミュレータに構成させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、シミュレーション装置、制御システム、シミュレーション方法及びプログラムに関する。
【背景技術】
【0002】
特許文献1には、ロボット及び障害物に関するモデル情報を記憶したモデル記憶部と、ロボットと障害物との衝突を回避しつつ、ロボットの先端部を開始位置から終了位置まで移動させ得るパスをモデル情報に基づいて生成する情報処理部と、を備えるロボットシミュレータが開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
本開示は、複数の装置による協調動作の適切なシミュレーションに有効な装置を提供する。
【課題を解決するための手段】
【0005】
本開示の一側面に係るシミュレーション装置は、第1マシンに対する第1コントローラによる制御をシミュレーションする第1シミュレータと、第2マシンに対する第2コントローラによる制御をシミュレーションする第2シミュレータと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に対応するように、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールするシミュレーションマネジャと、を備える。
【0006】
本開示の他の側面に係る制御システムは、送信側のシミュレータが生成した通信データを、予め定められた仮想遅延時間に基づいたタイミングで、受信側のシミュレータに取得させる通信シミュレータを有する上記シミュレーション装置と、第1コントローラと、第2コントローラとを含む実制御システムと、仮想遅延時間を、第1コントローラと第2コントローラとの間の通信遅延時間に対応させる仮想遅延設定部と、を備える。
【0007】
本開示の更に他の側面に係る制御システムは、上記シミュレーション装置と、第1コントローラと、第2コントローラとを含む実制御システムと、第1コントローラによる第1マシンの制御の進行と、第2コントローラによる第2マシンの制御の進行と、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とを対比する比較画像を生成する比較画像生成部と、を備える。
【0008】
本開示の更に他の側面に係るシミュレーション方法は、第1マシンに対する第1コントローラによる制御を第1シミュレータによりシミュレーションすることと、第2マシンに対する第2コントローラによる制御を第2シミュレータによりシミュレーションすることと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に対応するように、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールすることと、を含む。
【0009】
本開示の更に他の側面に係るプログラムは、第1マシンに対する第1コントローラによる制御をシミュレーションする第1シミュレータと、第2マシンに対する第2コントローラによる制御をシミュレーションする第2シミュレータと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に対応するように、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールするシミュレーションマネジャと、を装置に構成させる。
【発明の効果】
【0010】
本開示によれば、複数の装置による協調動作の適切なシミュレーションに有効な装置を提供することができる。
【図面の簡単な説明】
【0011】
【
図1】マシンシステムの構成を例示する模式図である。
【
図3】シミュレーション装置の構成を例示するブロック図である。
【
図4】シミュレーションマネジャの構成を例示するブロック図である。
【
図5】通信シミュレータの構成を例示するブロック図である。
【
図6】送信側のシミュレータが生成する通信データと、通信バッファの内容と、受信側のシミュレータが取得する通信データとの推移を例示する模式図である。
【
図8】データ収集装置の構成を例示するブロック図である。
【
図9】シミュレーション装置及びデータ収集装置のハードウェア構成を例示するブロック図である。
【
図10】シミュレーション手順を例示するフローチャートである。
【
図11】再生速度調節手順を例示するフローチャートである。
【
図12】シミュレーション手順の変形例を示すフローチャートである。
【
図13】個別シミュレーション手順を例示するフローチャートである。
【
図14】仮想遅延時間の調節手順を例示するフローチャートである。
【
図15】異常監視手順を例示するフローチャートである。
【発明を実施するための形態】
【0012】
以下、実施形態について、図面を参照しつつ詳細に説明する。説明において、同一要素又は同一機能を有する要素には同一の符号を付し、重複する説明を省略する。
【0013】
〔マシンシステム〕
図1に示すマシンシステム1は、複数のマシン3を協調して動作させるシステムである。マシンシステム1の具体例としては、ワークを生産するように、複数のマシン3を協調して動作させる生産システムが挙げられるが、複数のマシン3の動作目的は必ずしもワークの生産に限られない。
【0014】
複数のマシン3を協調して動作させるとは、例えば、同一の目的を達成するための複数の動作を複数のマシンに分担して遂行させることを意味し、いずれか一つのマシンの動作結果に応じて、他のマシンを動作させることを含んでいてもよい。「同一の目的」がワークの生産である場合に、マシンシステム1は、一つのワークを得るための複数の作業を複数のマシン3に分担して遂行させてもよく、複数のワークごとの複数の作業を複数のマシン3に分担して遂行させてもよい。
【0015】
マシンシステム1は、複数のマシン3と、複数のマシン3を制御する実制御システム5と、シミュレーション装置100と、データ収集装置200とを備える。マシン3の数に特に制限はない。複数のマシン3は、ロボットを含んでいてもよい。複数のマシン3の一例として、
図1には、コンベヤ3Aと、ロボット3B,3Cとが示されている。
【0016】
コンベヤ3Aは、例えば電動モータ等の動力によりワークを搬送する。コンベヤ3Aの具体例としては、ベルトコンベヤ、ローラコンベヤ等が挙げられる。ロボット3B,3Cは、コンベヤ3Aが搬送するワークに対する作業を行う。ワークに対する作業の具体例としては、コンベヤ3Aが搬送するワーク(例えばベースパーツ)に対する他のワーク(例えばサブパーツ)の組付け、コンベヤ3Aが搬送するワークにおけるパーツ同士の締結(例えばボルト締結)・接合(例えば溶接)等が挙げられる。
【0017】
コンベヤ3Aと、ロボット3B,3Cの動作は、コンベヤ3Aとロボット3B,3Cとの協調動作を含んでいてもよい。例えばロボット3B,3Cは、コンベヤ3Aによって、ワークが所定の作業位置に配置されたタイミングで、ワークに対する作業を実行してもよい。コンベヤ3Aは、ロボット3B,3Cによる作業の実行中にはワークの搬送を中断し、ロボット3B,3Cによる作業の完了後にワークの搬送を再開してもよい。
【0018】
コンベヤ3Aと、ロボット3B,3Cの動作は、ロボット3B,3Cの協調動作を含んでいてもよい。例えばロボット3Bは、コンベヤ3Aが搬送するベースパーツにおける所定の組付け位置にサブパーツを配置し、ロボット3Cは、ロボット3Bにより配置されたサブパーツをベースパーツに締結又は接合してもよい。サブパーツが、複数箇所においてベースパーツに締結又は接合される場合に、複数箇所における締結又は結合をロボット3B,3Cが分担してもよい。
【0019】
図2は、ロボット3B,3Cの概略構成を例示する模式図である。例えばロボット3B,3Cは、6軸の垂直多関節ロボットであり、基部11と、旋回部12と、第1アーム13と、第2アーム14と、第3アーム17と、先端部18と、アクチュエータ41,42,43,44,45,46とを有する。基部11は、コンベヤ3Aの周囲に設置されている。旋回部12は、鉛直な軸線21まわりに旋回するように基部11上に設けられている。第1アーム13は、軸線21に交差(例えば直交)する軸線22まわりに揺動するように旋回部12に接続されている。交差は、所謂立体交差のようにねじれの関係にある場合も含む。第2アーム14は、軸線22に実質的に平行な軸線23まわりに揺動するように第1アーム13の先端部に接続されている。第2アーム14は、アーム基部15とアーム端部16とを含む。アーム基部15は、第1アーム13の先端部に接続され、軸線23に交差(例えば直交)する軸線24に沿って延びている。アーム端部16は、軸線24まわりに旋回するようにアーム基部15の先端部に接続されている。第3アーム17は、軸線24に交差(例えば直交)する軸線25まわりに揺動するようにアーム端部16の先端部に接続されている。先端部18は、軸線25に交差(例えば直交)する軸線26まわりに旋回するように第3アーム17の先端部に接続されている。
【0020】
このように、ロボット3B,3Cは、基部11と旋回部12とを接続する関節31と、旋回部12と第1アーム13とを接続する関節32と、第1アーム13と第2アーム14とを接続する関節33と、第2アーム14においてアーム基部15とアーム端部16とを接続する関節34と、アーム端部16と第3アーム17とを接続する関節35と、第3アーム17と先端部18とを接続する関節36とを有する。
【0021】
アクチュエータ41,42,43,44,45,46は、例えば電動モータ及び減速機を含み、関節31,32,33,34,35,36をそれぞれ駆動する。例えばアクチュエータ41は軸線21まわりに旋回部12を旋回させ、アクチュエータ42は軸線22まわりに第1アーム13を揺動させ、アクチュエータ43は軸線23まわりに第2アーム14を揺動させ、アクチュエータ44は軸線24まわりにアーム端部16を旋回させ、アクチュエータ45は軸線25まわりに第3アーム17を揺動させ、アクチュエータ46は軸線26まわりに先端部18を旋回させる。
【0022】
なお、ロボット3B,3Cの具体的な構成は適宜変更可能である。例えばロボット3B,3Cは、上記6軸の垂直多関節ロボットに更に1軸の関節を追加した7軸の冗長型ロボットであってもよく、所謂スカラー型の多関節ロボットであってもよい。
【0023】
制御システム4は、複数のマシン3を制御する。制御システム4については以下に詳述する。
【0024】
(制御システム)
制御システム4は、実制御システム5と、シミュレーション装置100とを備える。実制御システム5は、複数のマシン3を制御する。実制御システム5は、複数のマシン3をそれぞれ制御する複数のコントローラ7と、複数のコントローラ7と通信可能なコントローラ6とを有してもよい。一例として、
図1には、コンベヤ3Aを制御するコントローラ7Aと、ロボット3Bを制御するコントローラ7Bと、ロボット3Cを制御するコントローラ7Cと、コントローラ7A,7B,7Cと通信可能なコントローラ6とが示されている。
【0025】
コントローラ7Aは、モータコントローラであり、制御指令に応じてコンベヤ3Aを動作させるセグメント処理を所定の制御周期で繰り返し実行する。本実施形態において「セグメント処理」とは、1サイクルあたりに割り当てられて定められている処理を意味し、サイクル毎に処理される処理であれば、その内容は特に限定されるものではない。以下、コントローラ7Aに対する制御指令を「搬送制御指令」といい、コントローラ7Aが実行するセグメント処理を、「搬送セグメント処理」といい、搬送セグメント処理を実行する制御周期を「搬送制御周期」という。
【0026】
搬送制御指令は、例えば、搬送目標位置と、搬送目標位置までのワークの移動速度とを含む。例えば、搬送セグメント処理は、搬送制御指令に基づいて、搬送制御周期ごとのコンベヤ3Aの動作目標値を算出することと、動作目標値に応じてコンベヤ3Aを動作させることとを含む。
【0027】
コントローラ7Bは、ロボットコントローラであり、制御指令においてロボット3Bを動作させるセグメント処理を所定の制御周期で繰り返し実行する。以下、コントローラ7Bに対する制御指令を「第1ロボット制御指令」といい、コントローラ7Bが実行するセグメント処理を「第1ロボットセグメント処理」といい、第1ロボットセグメント処理を実行する制御周期を「第1ロボット制御周期」という。
【0028】
第1ロボット制御指令は、例えば、ジョブプログラムの実行指令を含む。ジョブプログラムは、時系列に並ぶ1以上の動作命令を含む動作プログラムである。ジョブプログラムは予め準備され、コントローラ7B内に記憶されている。1以上の動作命令のそれぞれは、先端部18の目標位置・姿勢と、目標位置・姿勢までの先端部18の目標移動速度とを含む。
【0029】
第1ロボットセグメント処理は、第1ロボット制御指令に基づいて、第1ロボット制御周期ごとの先端部18の目標位置・姿勢を算出することと、算出した目標位置・姿勢に先端部18を移動させるためのアクチュエータ41,42,43,44,45,46の動作目標値を逆運動学演算により算出することと、算出した動作目標値に応じてアクチュエータ41,42,43,44,45,46を動作させることとを含む。
【0030】
コントローラ7Cは、ロボットコントローラであり、制御指令においてロボット3Cを動作させるセグメント処理を所定の制御周期で繰り返し実行する。以下、コントローラ7Cに対する制御指令を「第2ロボット制御指令」といい、コントローラ7Cが実行するセグメント処理を「第2ロボットセグメント処理」といい、第2ロボットセグメント処理を実行する制御周期を「第2ロボット制御周期」という。
【0031】
第2ロボット制御指令は、例えば、ジョブプログラムの実行指令を含む。ジョブプログラムは、時系列に並ぶ1以上の動作命令を含む動作プログラムである。ジョブプログラムは予め準備され、コントローラ7C内に記憶されている。1以上の動作命令のそれぞれは、先端部18の目標位置・姿勢と、目標位置・姿勢までの先端部18の目標移動速度とを含む。
【0032】
第2ロボットセグメント処理は、第2ロボット制御指令に基づいて、第2ロボット制御周期ごとの先端部18の目標位置・姿勢を算出することと、算出した目標位置・姿勢に先端部18を移動させるためのアクチュエータ41,42,43,44,45,46の動作目標値を逆運動学演算により算出することと、算出した動作目標値に応じてアクチュエータ41,42,43,44,45,46を動作させることとを含む。
【0033】
コントローラ6は、例えばプログラマブルロジックコントローラであり、複数のマシン3の動作を協調させるセグメント処理を所定の制御周期で繰り返し実行する。以下、コントローラ6が実行するセグメント処理を、「システムセグメント処理」といい、システムセグメント処理を実行する制御周期を「システム制御周期」という。
【0034】
システムセグメント処理は、複数のマシン3及びワークのステータス情報を複数のコントローラ7等から受信することと、予め定められたシステムプログラムと、ステータス情報とに基づいて、新たな動作を開始させるべきマシン3(以下、「制御対象マシン」という。)を特定することと、新たな動作を開始させるための制御指令を制御対象マシン3のコントローラ7に送信することとを含む。例えばコンベヤ3Aが制御対象マシンである場合、コントローラ6は、システムプログラムに基づいて、コンベヤ3Aに新たな動作を実行させるための搬送制御指令をコントローラ7Aに送信する。ロボット3Bが制御対象マシンである場合、コントローラ6は、システムプログラムに基づいて、ロボット3Bに新たな動作を実行させるための第1ロボット制御指令をコントローラ7Bに送信する。ロボット3Cが制御対象マシンである場合、コントローラ6は、システムプログラムに基づいて、ロボット3Cに新たな動作を実行させるための第2ロボット制御指令をコントローラ7Cに送信する。
【0035】
一例として、コントローラ6は、ステータス情報に基づいて、ワークがロボット3B,3C用の作業位置に配置されたか否かを確認し、ワークが当該作業位置に配置されたと判断した場合に、コンベヤ3Aによるワークの搬送を停止させる搬送制御指令をコントローラ7Aに送信し、ワークに対する作業のジョブプログラムの実行指令を含む第1ロボット制御指令及び第2ロボット制御指令をコントローラ7B,7Cにそれぞれ送信してもよい。また、コントローラ6は、ステータス情報に基づいて、ワークに対するロボット3B,3Cの作業が完了したか否かを確認し、ワークに対するロボット3B,3Cの作業が完了したと判断した場合に、コンベヤ3Aによるワークの搬送を再開させる搬送制御指令をコントローラ7Aに送信してもよい。
【0036】
このようにコントローラ6が搬送制御指令及び第1ロボット制御指令を送信することによって、コントローラ7B,7C(第2コントローラ)は、コントローラ7A(第1コントローラ)の制御によるコンベヤ3Aの動作に協調するようにロボット3B,3Cを動作させることとなる。また、コントローラ7A(第2コントローラ)は、コントローラ7B,7C(第1コントローラ)の制御によるロボット3B,3Cの動作に協調するようにコンベヤ3Aを動作させることとなる。
【0037】
コントローラ6は、ステータス情報に基づいて、ロボット3Bにより、ベースパーツにおける所定の第1組付け位置に第1サブパーツが配置されたか否かを確認し、第1サブパーツが第1組付け位置に配置されたと判断した場合に、第1サブパーツをベースパーツに締結又は接合する作業のジョブプログラムの実行指令を含む第2ロボット制御指令をロボット3Cに送信してもよい。
【0038】
コントローラ6は、ステータス情報に基づいて、ロボット3Cにより、第1サブパーツがベースパーツに締結又は接合されたか否かを確認し、第1サブパーツがベースパーツに締結又は接合されたと判断した場合に、ベースパーツにおける所定の第2組付け位置に第2サブパーツを配置するジョブプログラムの実行指令を含む第1ロボット制御指令をロボット3Bに送信してもよい。
【0039】
コントローラ6は、ステータス情報に基づいて、ロボット3Bにより、第2組付け位置に第2サブパーツが配置されたか否かを確認し、第2サブパーツが第2組付け位置に配置されたと判断した場合に、第2サブパーツをベースパーツに締結又は接合する作業のジョブプログラムの実行指令を含む第2ロボット制御指令をロボット3Cに送信してもよい。
【0040】
このようにコントローラ6が第1ロボット制御指令及び第2ロボット制御指令を送信することによって、コントローラ7C(第2コントローラ)は、コントローラ7B(第1コントローラ)の制御によるロボット3Bの動作に協調するようにロボット3Cを動作させることとなる。また、コントローラ7B(第2コントローラ)は、コントローラ7C(第1コントローラ)の制御によるロボット3Cの動作に協調するようにロボット3Bを動作させることとなる。
【0041】
以上のように、コントローラ6が複数のコントローラ7と通信可能であるため、コントローラ7同士も、コントローラ6を介して間接的に通信可能となっている。コントローラ7同士が直接的に通信可能となっていてもよい。
【0042】
コントローラ6がコントローラ7に制御指令を送信することは、コントローラ7とマシン3とを含むマシン2をコントローラ6が制御することに相当する。例えば、コントローラ6がコントローラ7Aに制御指令を送信することは、コントローラ7Aとコンベヤ3Aとを含むマシン2Aをコントローラ6が制御することに相当する。コントローラ6がコントローラ7Bに制御指令を送信することは、コントローラ7Bとロボット3Bとを含むマシン2Bをコントローラ6が制御することに相当する。コントローラ6がコントローラ7Cに制御指令を送信することは、コントローラ7Cとロボット3Cとを含むマシン2Cをコントローラ6が制御することに相当する。
【0043】
このため、コントローラ6は、複数のマシン2A,2B,2Cを制御するコントローラに相当する。コントローラ7B,7Cが、コントローラ7Aの制御によるコンベヤ3Aの動作に協調するようにロボット3B,3Cを動作させることは、コントローラ7B,7C(第2コントローラ)が、コントローラ6(第1コントローラ)の制御によるマシン2Aの動作に協調するようにロボット3B,3Cを動作させることに相当する。
【0044】
コントローラ7Aが、コントローラ7B,7Cの制御によるロボット3B,3Cの動作に協調するようにコンベヤ3Aを動作させることは、コントローラ7A(第2コントローラ)が、コントローラ6(第1コントローラ)の制御によるマシン2B,2Cの動作に協調するようにコンベヤ3Aを動作させることに相当する。
【0045】
コントローラ7Cが、コントローラ7Bの制御によるロボット3Bの動作に協調するようにロボット3Cを動作させることは、コントローラ7C(第2コントローラ)が、コントローラ6(第1コントローラ)の制御によるマシン2Bの動作に協調するようにロボット3Cを動作させることに相当する。
【0046】
コントローラ7Bが、コントローラ7Cの制御によるロボット3Cの動作に協調するようにロボット3Bを動作させることは、コントローラ7B(第2コントローラ)が、コントローラ6(第1コントローラ)の制御によるマシン2Cの動作に協調するようにロボット3Bを動作させることに相当する。
【0047】
シミュレーション装置100は、複数のマシン3に対する実制御システム5による制御をシミュレーションする。このような、システム全体のシミュレーションにおいては、複数のマシン3同士の協調関係も適切にシミュレーションする必要がある。しかしながら、複数のマシン3のそれぞれのシミュレーションは、必ずしもリアルタイムで行われるわけではない。例えば、コントローラ7Aによる搬送セグメント処理のシミュレーションは、搬送制御指令に基づいて、搬送制御周期ごとのコンベヤ3Aの動作目標値を算出し、動作目標値に応じたコンベヤ3Aの動作量を算出することを含むが、このシミュレーションの演算時間が搬送制御周期と一致するとは限らない。このため、コントローラ6及び複数のコントローラ7による制御を個別にシミュレーションすると、コントローラ6による制御の進行とコントローラ7による制御の進行との関係、及びコントローラ7による制御の進行とコントローラ7による制御の進行との関係を、適切にシミュレーションすることができず、複数のマシン3の協調関係をシミュレーション空間において再現することができない。
【0048】
これに対し、シミュレーション装置100は、第1マシンに対する第1コントローラによる制御を第1シミュレータによりシミュレーションすることと、第2マシンに対する第2コントローラによる制御を第2シミュレータによりシミュレーションすることと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に基づいて、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールすることと、を実行するように構成されている。
【0049】
これにより、実時間とは異なる経過時間で実行されるノンリアルタイムシミュレーションにおいても、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行との関係を、第1コントローラによる第1マシンの制御の進行と、第2コントローラによる第2マシンの制御の進行との関係に容易に対応させることができる。このため、複数のマシン3の協調関係をシミュレーション空間において容易に再現することができる。
【0050】
例えばシミュレーション装置100は、
図3に示すように、機能上の構成として、複数のシミュレータ101,102と、シミュレーションマネジャ110とを有する。
【0051】
複数のシミュレータ102の一例として、
図3には、コントローラ7A,7B,7Cにそれぞれ対応するシミュレータ102A,102B,102Cが示されている。シミュレータ102Aは、コンベヤ3Aに対するコントローラ7Aによる制御をシミュレーションする。例えばシミュレータ102Aは、上述したコントローラ7Aによる搬送セグメント処理をシミュレーションする。搬送セグメント処理のシミュレーションは、搬送制御指令に基づいて、搬送制御周期ごとのコンベヤ3Aの動作目標値を算出し、動作目標値に対応するコンベヤ3Aの動作量を算出することを含む。
【0052】
シミュレータ102Bは、ロボット3Bに対するコントローラ7Bによる制御をシミュレーションする。例えばシミュレータ102Bは、上述したコントローラ7Bによる第1ロボットセグメント処理をシミュレーションする。第1ロボットセグメント処理のシミュレーションは、第1ロボット制御指令に基づいて、第1ロボット制御周期ごとの先端部18の目標位置・姿勢を算出し、算出した目標位置・姿勢に先端部18を移動させるためのアクチュエータ41,42,43,44,45,46の動作目標値を逆運動学演算により算出し、算出した動作目標値に応じたアクチュエータ41,42,43,44,45,46の動作量を算出することを含む。
【0053】
シミュレータ102Cは、ロボット3Cに対するコントローラ7Cによる制御をシミュレーションする。例えばシミュレータ102Cは、上述したコントローラ7Cによる第2ロボットセグメント処理をシミュレーションする。第2ロボットセグメント処理のシミュレーションは、第2ロボット制御指令に基づいて、第2ロボット制御周期ごとの先端部18の目標位置・姿勢を算出し、算出した目標位置・姿勢に先端部18を移動させるためのアクチュエータ41,42,43,44,45,46の動作目標値を逆運動学演算により算出し、算出した動作目標値に応じたアクチュエータ41,42,43,44,45,46の動作量を算出することを含む。
【0054】
シミュレータ101は、マシン2A,2B,2Cに対するコントローラ6による制御をシミュレーションする。例えばシミュレータ101は、上述したコントローラ6によるシステムセグメント処理をシミュレーションする。システムセグメント処理のシミュレーションは、複数のシミュレータ102A,102B,102Cのシミュレーション結果に基づく複数のマシン3及びワークの仮想ステータス情報を取得することと、予め定められたシステムプログラムと、仮想ステータス情報とに基づいて、新たな動作を開始させるべきマシン3(以下、「制御対象マシン」という。)を特定することと、新たな動作を開始させるための制御指令を制御対象マシン3のシミュレータ102に送信することとを含む。
【0055】
シミュレータ102B,102C(第2シミュレータ)は、シミュレータ102A(第1シミュレータ)によるコンベヤ3A(第1マシン)の動作のシミュレーション結果に対して、ロボット3B,3C(第2マシン)の動作のシミュレーション結果を協調させるように、ロボット3B,3C(第2マシン)に対するコントローラ7B,7C(第2コントローラ)による制御をシミュレーションしてもよい。
【0056】
シミュレータ102B,102C(第2シミュレータ)は、シミュレータ101(第1シミュレータ)によるマシン2A(第1マシン)の動作のシミュレーション結果に対して、ロボット3B,3C(第2マシン)の動作のシミュレーション結果を協調させるように、ロボット3B,3C(第2マシン)に対するコントローラ7B,7C(第2コントローラ)による制御をシミュレーションしてもよい。
【0057】
シミュレータ102A(第2シミュレータ)は、シミュレータ102B,102C(第1シミュレータ)によるロボット3B,3C(第1マシン)の動作のシミュレーション結果に対して、コンベヤ3A(第2マシン)の動作のシミュレーション結果を協調させるように、コンベヤ3A(第2マシン)に対するコントローラ7A(第2コントローラ)による制御をシミュレーションしてもよい。
【0058】
シミュレータ102A(第2シミュレータ)は、シミュレータ101(第1シミュレータ)によるマシン2B,2C(第1マシン)の動作のシミュレーション結果に対して、コンベヤ3A(第2マシン)の動作のシミュレーション結果を協調させるように、コンベヤ3A(第2マシン)に対するコントローラ7A(第2コントローラ)による制御をシミュレーションしてもよい。
【0059】
シミュレータ102C(第2シミュレータ)は、シミュレータ102B(第1シミュレータ)によるロボット3B(第1マシン)の動作のシミュレーション結果に対して、ロボット3C(第2マシン)の動作のシミュレーション結果を協調させるように、ロボット3C(第2マシン)に対するコントローラ7C(第2コントローラ)による制御をシミュレーションしてもよい。
【0060】
シミュレータ102C(第2シミュレータ)は、シミュレータ101(第1シミュレータ)によるマシン2B(第1マシン)の動作のシミュレーション結果に対して、ロボット3C(第2マシン)の動作のシミュレーション結果を協調させるように、ロボット3C(第2マシン)に対するコントローラ7C(第2コントローラ)による制御をシミュレーションしてもよい。
【0061】
シミュレータ102B(第2シミュレータ)は、シミュレータ102C(第1シミュレータ)によるロボット3C(第1マシン)の動作のシミュレーション結果に対して、ロボット3B(第2マシン)の動作のシミュレーション結果を協調させるように、ロボット3B(第2マシン)に対するコントローラ7B(第2コントローラ)による制御をシミュレーションしてもよい。
【0062】
シミュレータ102B(第2シミュレータ)は、シミュレータ101(第1シミュレータ)によるマシン2C(第1マシン)の動作のシミュレーション結果に対して、ロボット3B(第2マシン)の動作のシミュレーション結果を協調させるように、ロボット3B(第2マシン)に対するコントローラ7B(第2コントローラ)による制御をシミュレーションしてもよい。
【0063】
シミュレーションマネジャ110は、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に対応するように、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールする。例えば、シミュレーションマネジャ110は、コントローラ6(第1コントローラ)による制御の進行と、コントローラ7A,7B,7C(第2コントローラ)による制御の進行との関係に、シミュレータ101(第1シミュレータ)によるシミュレーションの進行と、シミュレータ102A,102B,102C(第2シミュレータ)によるシミュレーションの進行との関係を対応させるように、シミュレータ101によるシミュレーションの進行と、シミュレータ102A,102B,102Cによるシミュレーションの進行とをコントロールしてもよい。これにより、コントローラ6による制御の進行と、コントローラ7Aによる制御の進行と、コントローラ7Bによる制御の進行と、コントローラ7Cによる制御の進行との関係に、シミュレータ101によるシミュレーションの進行と、シミュレータ102Aによるシミュレーションの進行と、シミュレータ102Bによるシミュレーションの進行と、シミュレータ102Cによるシミュレーションの進行との関係が対応することとなる。
【0064】
シミュレーションマネジャ110は、第1コントローラによる制御で繰り返し実行される第1セグメント処理の実行タイミングと、第2コントローラによる制御で繰り返される第2セグメント処理の実行タイミングとの関係に対応するように、第1シミュレータによって繰り返される第1セグメント処理の実行タイミングと、第2シミュレータによって繰り返される第2セグメント処理の実行タイミングとをコントロールしてもよい。
【0065】
例えば、シミュレーションマネジャ110は、コントローラ6(第1コントローラ)による制御で繰り返されるシステムセグメント処理の実行タイミングと、コントローラ7A,7B,7Cによる制御で繰り返される搬送セグメント処理、第1ロボットセグメント処理、及び第2ロボットセグメント処理の実行タイミングとの関係に、シミュレータ101によって繰り返されるシステムセグメント処理の実行タイミングと、シミュレータ102A,102B,102Cによって繰り返される搬送セグメント処理、第1ロボットセグメント処理、及び第2ロボットセグメント処理の実行タイミングとの関係を対応させるように、シミュレータ101によって繰り返されるシステムセグメント処理の実行タイミングと、シミュレータ102A,102B,102Cによって繰り返される搬送セグメント処理、第1ロボットセグメント処理、及び第2ロボットセグメント処理の実行タイミングとをコントロールしてもよい。
【0066】
シミュレーションマネジャ110は、第1コントローラによる第1セグメント処理の繰り返し周期を表す第1制御周期と、第2コントローラによる第2セグメント処理の繰り返し周期を表す第2制御周期とに基づいて、第1シミュレータによって繰り返される第1セグメント処理の実行タイミングと、第2シミュレータによって繰り返される第2セグメント処理の実行タイミングとをコントロールしてもよい。例えば、シミュレーションマネジャ110は、システム制御周期と、搬送制御周期と、第1ロボット制御周期と、第2ロボット制御周期とに基づいて、シミュレータ101によって繰り返されるシステムセグメント処理の実行タイミングと、シミュレータ102A,102B,102Cによって繰り返される搬送セグメント処理、第1ロボットセグメント処理、及び第2ロボットセグメント処理の実行タイミングとをコントロールしてもよい。
【0067】
一例として、シミュレーションマネジャ110は、
図4に示すように、カウンタ111と、周期情報記憶部112と、選択部113と、実行部114とを有する。カウンタ111は、シミュレーションサイクル数をカウントする。周期情報記憶部112は、システム制御周期と、搬送制御周期と、第1ロボット制御周期と、第2ロボット制御周期とを記憶する。
【0068】
選択部113は、システム制御周期、搬送制御周期、第1ロボット制御周期、及び第2ロボット制御周期と、シミュレーションサイクル数とに基づいて、シミュレータ101,シミュレータ102A,102B,102Cの少なくとも一つを選択する。例えば選択部113は、システムセグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、システム制御周期に対応するシミュレーションサイクル数となった場合に、シミュレータ101を選択する。ここで、システム制御周期等の比較対象時間に対応するシミュレーションサイクル数とは、例えば、シミュレーションサイクル数に所定のシミュレーション基準時間を乗算した時間が比較対象時間以上となるシミュレーションサイクル数を意味する。
【0069】
選択部113は、搬送セグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、搬送制御周期に対応するシミュレーションサイクル数となった場合に、シミュレータ102Aを選択する。選択部113は、第1ロボットセグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、第1ロボット制御周期に対応するシミュレーションサイクル数となった場合に、シミュレータ102Bを選択する。選択部113は、第2ロボットセグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、第2ロボット制御周期に対応するシミュレーションサイクル数となった場合に、シミュレータ102Cを選択する。
【0070】
システム制御周期に対応するシミュレーションサイクル数、搬送制御周期に対応するシミュレーションサイクル数、第1ロボット制御周期に対応するシミュレーションサイクル数、及び第2ロボット制御周期に対応するシミュレーションサイクル数は、いずれも1以上であってもよい。例えば、上述のシミュレーション基準時間の長さは、システム制御周期、搬送制御周期、第1ロボット制御周期、及び第2ロボット制御周期のうち最短の制御周期の長さと同等以下であってもよい。
【0071】
実行部114は、選択部113が選択した少なくとも一つのシミュレータのそれぞれに、セグメント処理を実行させる。例えば実行部114は、選択部113によりシミュレータ101が選択された場合にはシミュレータ101にシステムセグメント処理を実行させ、選択部113によりシミュレータ102Aが選択された場合にはシミュレータ102Aに搬送セグメント処理を実行させ、選択部113によりシミュレータ102Bが選択された場合にはシミュレータ102Bに第1ロボットセグメント処理を実行させ、選択部113によりシミュレータ102Cが選択された場合にはシミュレータ102Cに第2ロボットセグメント処理を実行させる。
【0072】
シミュレーションマネジャ110は、個別シミュレーションの指示を受けた場合に、シミュレータ101,102から一つの個別実行シミュレータを選択し、他のシミュレータによるシミュレーションの進行に無関係に、個別実行シミュレータによるシミュレーションを実行させてもよい。
【0073】
図3に戻り、シミュレーション装置100は、第1シミュレータによるシミュレーション結果と、第2シミュレータによるシミュレーション結果とに基づいて、第1マシンの動作及び第2マシンの動作をシミュレーションするように構成されていてもよい。
【0074】
例えばシミュレーション装置100は、モデル記憶部121と、動作シミュレーション部122とを更に有する。モデル記憶部121は、複数のマシン3のモデル情報を記憶する。マシン3のモデル情報は、マシン3の構造及び各部の寸法に関する情報を含む。
【0075】
動作シミュレーション部122は、シミュレータ101,102によるシミュレーション結果に基づいて、複数のマシン3の動作をシミュレーションする。例えば動作シミュレーション部122は、シミュレータ102Aにより算出されたコンベヤ3Aの動作量と、モデル記憶部121が記憶するコンベヤ3Aのモデル情報とに基づいて、コンベヤ3Aの動作をシミュレーションする。また、動作シミュレーション部122は、シミュレータ102Bにより算出されたアクチュエータ41,42,43,44,45,46の動作量と、モデル記憶部121が記憶するロボット3Bのモデル情報とに基づく順運動学演算によって、ロボット3Bの動作をシミュレーションする。同様に、動作シミュレーション部122は、シミュレータ102Cにより算出されたアクチュエータ41,42,43,44,45,46の動作量と、モデル記憶部121が記憶するロボット3Cのモデル情報とに基づく順運動学演算によって、ロボット3Cの動作をシミュレーションする。
【0076】
動作シミュレーション部122は、第1シミュレータによるシミュレーション結果と、第2シミュレータによるシミュレーション結果との両方が更新された後に、第1マシンの動作及び第2マシンの動作をシミュレーションしてもよい。例えば動作シミュレーション部122は、複数のマシン3の動作をシミュレーションした後、シミュレータ101,102の全てが1サイクル以上のセグメント処理を実行したタイミングで、複数のマシン3の動作を再度シミュレーションしてもよい。動作シミュレーション部122は、複数のマシン3の動作のシミュレーション結果に基づいて、複数のマシン3の動作のシミュレーション画像を生成し、後述の表示デバイス196等に表示させてもよい。
【0077】
シミュレーション装置100は、第1コントローラと第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、第1シミュレータと第2シミュレータとの間における通信データの受け渡しを行うように構成されていてもよい。例えばシミュレーション装置100は、通信シミュレータ130と、通信データ記憶部141とを更に有する。
【0078】
通信データ記憶部141は、少なくとも一つの通信バッファ150を含む。通信バッファ150は、第1シミュレータと第2シミュレータとの間における受け渡し用の通信データの一時格納に用いられる。通信バッファ150は、データ転送方向の上流から下流に並ぶ複数の記憶領域を含んでいてもよい。通信バッファ150内に一時的に格納された通信データは、データ転送方向の上流から下流に向かって順次転送される。
【0079】
通信シミュレータ130は、第1コントローラと第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、第1シミュレータと第2シミュレータとの間における通信データの受け渡しを行う。例えば通信シミュレータ130は、コントローラ6,7A,7B,7Cにおける送信側のコントローラと受信側のコントローラとの間で直接的又は間接的に行われる通信を再現するように、シミュレータ101,102A,102B,102Cにおける送信側のシミュレータと受信側のシミュレータとの間における通信データの受け渡しを行う。通信シミュレータ130は、送信側のシミュレータが生成した通信データを、予め定められた仮想遅延時間に基づいたタイミングで、受信側のシミュレータに取得させてもよい。
【0080】
例えば通信シミュレータ130は、
図5に示すように、通信カウンタ131と、通信データ格納部133と、通信データ転送部132と、通信データ読出部134とを有する。
【0081】
通信カウンタ131は、通信サイクル数をカウントする。通信データ格納部133は、送信側のシミュレータが生成した通信データを通信バッファ150に格納する。例えば通信データ格納部133は、送信側のシミュレータが生成した通信データを、通信バッファ150の最上流の記憶領域に格納する。通信データ転送部132は、通信サイクル数がカウントされる度に、通信データを通信バッファ150において一つ下流の記憶領域に転送する。通信データ読出部134は、通信データ転送部132により最下流の記憶領域まで転送された通信データを読み出して受信側のシミュレータに取得させる。
【0082】
通信データ読出部134は、通信バッファ150に通信データが格納されてからカウントされた通信サイクル数が、仮想遅延時間に対応する通信サイクル数となった場合に、通信バッファ150に格納された通信データを読み出して受信側のシミュレータに取得させる。仮想遅延時間に対応する通信サイクル数とは、例えば、通信サイクル数に所定の通信基準時間を乗算した時間が仮想遅延時間以上となる通信サイクル数を意味する。
【0083】
一例として、通信バッファ150が、上記仮想遅延時間に対応する数の記憶領域を含んでいてもよい。記憶領域の数が仮想遅延時間に対応するとは、例えば、最上流の記憶領域に格納された通信データが、最下流の記憶領域に転送されるまでの通信サイクル数に、上記通信基準時間を乗算した時間が、仮想遅延時間に対応することを意味する。例えば、次式を満たすことは、記憶領域の数が仮想遅延時間に対応することの一例である。
記憶領域の数=仮想遅延時間/通信基準時間+1・・・(1)
【0084】
通信バッファ150の記憶領域の数が、仮想遅延時間に対応していれば、通信バッファ150に格納された通信データを通信バッファ150が読み出すまでの通信サイクル数が、仮想遅延時間に対応することとなる。
【0085】
通信カウンタ131は、カウンタ111によるシミュレーションサイクルのカウントに同期して通信サイクル数をカウントしてもよい。通信カウンタ131は、カウンタ111によるシミュレーションサイクルのカウントよりも高い頻度で通信サイクル数をカウントしてもよい。例えば通信カウンタ131は、カウンタ111によるシミュレーションサイクルのカウントの整数倍の頻度で通信サイクル数をカウントしてもよい。
【0086】
例えば、上記通信基準時間は、上記シミュレーション基準時間と同じであってもよく、シミュレーション基準時間より短くてもよい。通信基準時間は、シミュレーション基準時間の整数分の1であってもよい。
【0087】
図6は、送信側のシミュレータが生成する通信データと、通信バッファ150の内容と、受信側のシミュレータが取得する通信データとの推移を例示する模式図である。
図6において、通信バッファ150は、データ転送方向の上流から下流に並ぶ四つの記憶領域151,152,153,154を有しているが、通信バッファ150が有する通信データの数は四つに限定されない。
【0088】
信号波形TSは、送信側のシミュレータが生成する通信データが含む一つの信号(以下、「通信信号」という。)を例示するグラフであり、信号波形RSは、受信側のシミュレータが取得する通信信号を例示するグラフである。いずれのグラフにおいても、横軸が通信サイクル数を表し、縦軸が通信信号の値を示している。
信号波形TS,RSは、「OFF」又は「ON」の2値で情報を表す通信信号を例示している。信号波形TS,RSが低い値となっていることは、通信信号が「OFF」であることを表し、信号波形TS,RSが高い値となっていることは、通信信号が「ON」であることを表す。
【0089】
通信サイクルCS1において、通信データ転送部132は、通信バッファ150に既に格納されている通信データのそれぞれを一つ下流の記憶領域に転送する。例えば通信データ転送部132は、記憶領域153に格納された通信データを記憶領域154に転送し、記憶領域152に格納された通信データを記憶領域153に転送し、記憶領域151に格納された通信データを記憶領域152に転送する。最下流の記憶領域154に格納されていた通信データは、記憶領域153から転送された通信データによって上書きされる。
【0090】
次に、通信データ格納部133が、信号波形TSの現在値である「OFF」を、最上流の記憶領域151に格納する。これにより、通信サイクルCS1においては、記憶領域151,152,153,154の全てに「OFF」が格納された状態となっている。通信データ読出部134は、最下流の記憶領域154に格納された「OFF」を読み出して受信用のシミュレータに取得させる。これにより、信号波形RSの現在値が「OFF」となる。
【0091】
通信データ転送部132、通信データ格納部133、及び通信データ読出部134は、通信カウンタ131により通信サイクル数がカウントされる度に、同様の処理を繰り返す。通信サイクルCS1の後、通信カウンタ131により、通信サイクル数が二つカウントアップされた通信サイクルCS3においては、信号波形TSの現在値が「ON」となっているため、最上流の記憶領域151には「ON」が格納され、他の記憶領域152,153,154には「OFF」が格納された状態となる。通信データ読出部134は、最下流の記憶領域154に格納された「OFF」を読み出して受信用のシミュレータに取得させるので、信号波形RSの現在値は「OFF」のままに維持される。
【0092】
通信サイクルCS3の後、通信カウンタ131により通信サイクル数が二つカウントアップされた通信サイクルCS5においては、信号波形TSの現在値が「OFF」となっているため、記憶領域151には「OFF」が格納され、記憶領域152,153には「ON」が格納され、記憶領域154には「OFF」が格納された状態となる。通信データ読出部134は、最下流の記憶領域154に格納された「OFF」を読み出して受信用のシミュレータに取得させるので、信号波形RSの現在値は依然として「OFF」のままに維持される。
【0093】
通信サイクルCS5の次の通信サイクルCS6においては、通信サイクルCS3において記憶領域151に格納された「ON」が記憶領域154に達する。これを通信データ読出部134が読み出し、受信用のシミュレータに取得させるので、信号波形RSの現在値は「ON」に変化する。
【0094】
通信サイクルCS6の後、通信カウンタ131により、通信サイクル数が二つカウントアップされた通信サイクルCS8においては、通信サイクルCS5において記憶領域151に格納された「OFF」が記憶領域154に達する。これを通信データ読出部134が読み出し、受信用のシミュレータに取得させるので、信号波形RSの現在値は「OFF」に変化する。
【0095】
このように、信号波形RSの変化には、最上流の記憶領域151に格納された通信データが最下流の記憶領域154に達するまでの通信サイクル数で遅れが生じる。つまり、信号波形RSの変化には、通信バッファ150の記憶領域の数から1を減算した通信サイクル数で遅れが生じる。遅れの通信サイクル数は、その数に上記通信基準時間を乗算した時間の通信遅延時間をシミュレーションしている。
【0096】
図3に戻り、通信シミュレータ130は、複数の送信側のシミュレータと、複数の受信側のシミュレータとをそれぞれ対応付ける複数の通信定義に基づいて、送信側のシミュレータから通信データを取得することと、受信側のシミュレータに通信データを取得させることと、を複数の通信定義ごとに実行してもよい。
【0097】
例えばシミュレーション装置100は、通信マップ142を更に有する。通信マップ142は、複数の通信定義を記憶する。複数の通信定義のそれぞれが、仮想遅延時間を含んでいてもよい。この場合、通信シミュレータ130は、複数の通信定義ごとに、送信側のシミュレータが生成した通信データを、仮想遅延時間に基づいたタイミングで受信側のシミュレータに取得させてもよい。
【0098】
シミュレーション装置100は、通信バッファ割当部143を更に有してもよい。通信バッファ割当部143は、仮想遅延時間に対応するサイズの通信バッファを複数の通信定義ごとに割り当てる。例えば通信バッファ割当部143は、仮想遅延時間に対応する数の記憶領域を含む通信バッファを、複数の通信定義ごとに割り当てる。一例として、通信バッファ割当部143は、上記式(1)を満たす数の記憶領域を含む通信バッファを、複数の通信定義ごとに割り当てる。
【0099】
通信シミュレータ130は、送信側のシミュレータが生成した通信データを通信バッファ150に格納することを複数の通信定義ごとに実行してもよい。通信シミュレータ130は、通信バッファ150に通信データが格納されてからカウントされた通信サイクル数が、仮想遅延時間に対応する通信サイクル数となった場合に、通信バッファ150に格納された通信データを読み出して受信側のシミュレータに取得させることを、複数の通信定義ごとに実行してもよい。
【0100】
例えば、
図5に示すように、通信データ格納部133は、通信マップ142を参照し、送信側のシミュレータが生成した通信データを通信バッファ150の最上流の記憶領域に格納することを、複数の通信定義ごとに実行してもよい。通信データ転送部132は、通信サイクル数がカウントされる度に、通信データを通信バッファ150において一つ下流の記憶領域に転送することを、複数の通信定義ごとに実行してもよい。通信データ読出部134は、通信マップ142を参照し、通信データ転送部132により最下流の記憶領域まで転送された通信データを読み出して受信側のシミュレータに取得させることを、複数の通信定義ごとに実行してもよい。
【0101】
図7は、通信マップ142に格納される複数の通信定義を例示するテーブルである。
図7においては、テーブルの1行が、一つの通信定義160を表している。通信定義160は、送信側定義161と、受信側定義162と、仮想遅延時間163とを含む。
【0102】
送信側定義161は、送信側のシミュレータの識別情報と、アドレスとを含む。アドレスは、送信側のシミュレータが生成した通信データを書き込む記憶領域(以下、「送信用記憶領域」という。)のアドレスである。受信側定義162は、受信側のシミュレータの識別情報と、アドレスとを含む。アドレスは、受信側のシミュレータがシミュレーションに際して通信データを読み出す記憶領域(以下、「受信用記憶領域」という。)のアドレスである。
【0103】
通信データ格納部133は、通信定義160に基づいて、送信用記憶領域に格納された通信データを読み出し、通信バッファ150の最上流の記憶領域に格納する。通信データ読出部134は、通信バッファ150の最下流の記憶領域に格納された通信データを読み出し、通信定義160に基づいて受信用記憶領域に格納する。
【0104】
シミュレーション装置100は、指定された再生速度に応じてシミュレータ101,102によるシミュレーションの進行速度を変更するように構成されていてもよい。また、シミュレーション装置100は、停止指令に応じて、シミュレータ101,102によるシミュレーションを中断するように構成されていてもよい。例えばシミュレーション装置100は、進行速度調節部171と、中断部172とを更に有する。
【0105】
進行速度調節部171は、例えば後述の入力デバイス195から再生速度の指定を取得し、再生速度の指定に応じてシミュレータ101,102によるシミュレーションの進行速度を変更する。例えば進行速度調節部171は、カウンタ111によるシミュレーションサイクル数のカウントを、所定のシミュレーション周期で実行させ、再生速度の指定に応じてシミュレーション周期を変更する。例えば進行速度調節部171は、シミュレーション周期を短くすることで再生速度を高くし、シミュレーション周期を長くすることで再生速度を遅くする。
【0106】
中断部172は、例えば後述の入力デバイス195から停止指令を取得し、停止指令に応じて、シミュレータ101,102によるシミュレーションを中断する。例えば中断部172は、カウンタ111によるシミュレーションサイクル数のカウントを中断させる。
【0107】
制御システム4は、シミュレーション装置100によるシミュレーション結果と、実制御システム5による実際の制御結果とを比較して、上述の仮想遅延時間を設定するように構成されていてもよい。また、制御システム4は、シミュレーション装置100によるシミュレーション結果と、実制御システム5による実際の制御結果とを比較して、実制御システム5における異常を検知するように構成されていてもよい。
【0108】
例えば制御システム4は、データ収集装置200を更に備えてもよい。データ収集装置200は、シミュレーション装置100によるシミュレーション結果を表すバーチャルデータと、実制御システム5による制御結果を表すリアルデータとを収集する。
【0109】
図8に示すように、データ収集装置200は、リアルデータ記憶部201と、バーチャルデータ記憶部202と、乖離評価部203とを有する。リアルデータ記憶部201は、リアルデータをコントローラ6から取得して蓄積する。バーチャルデータ記憶部202は、バーチャルデータをシミュレーション装置100から取得して蓄積する。
【0110】
乖離評価部203は、バーチャルデータとリアルデータとの乖離を評価する。例えば乖離評価部203は、シミュレーションサイクル数に上記シミュレーション基準時間を乗算することで、シミュレーションサイクル数を経過時間に換算した上で、バーチャルデータにおける各種イベントの発生時刻と、リアルデータにおける各種イベントの発生時刻との乖離を評価する。
【0111】
制御システム4がデータ収集装置200を更に備える場合に、シミュレーション装置100は、データ蓄積部181と、仮想遅延設定部144とを更に有してもよい。データ蓄積部181は、シミュレータ101,102A,102B,102Cによるシミュレーション結果をシミュレーションマネジャ110から取得し、複数のマシン3の動作のシミュレーション結果を動作シミュレーション部122から取得し、バーチャルデータ記憶部202に蓄積させる。
【0112】
仮想遅延設定部144は、仮想遅延時間を、実際の制御における通信遅延時間に対応させる。仮想遅延設定部144は、仮想遅延時間を実際の制御における通信遅延時間に対応させることを、上記複数の通信定義ごとに実行してもよい。例えば仮想遅延設定部144は、乖離評価部203による乖離の評価結果を取得することと、乖離の評価結果を縮小するように複数の通信定義ごとの仮想遅延時間を変更することとを、乖離の評価結果が所定のキャリブレーションレベル以下となるまで繰り返す。
【0113】
データ収集装置200は、異常検知部204を更に有してもよい。異常検知部204は、コントローラ6,7A,7B,7Cによる制御の進行と、シミュレータ101,102A,102B,102Cによるシミュレーションの進行との比較に基づいて、実制御システム5の異常を検知する。
【0114】
例えば異常検知部204は、乖離評価部203による乖離の評価結果に基づいて、実制御システム5の異常を検知する。例えば異常検知部204は、乖離評価部203による乖離の評価結果が所定の異常検知レベルを超えた場合に、実制御システム5の異常を検知する。
【0115】
データ収集装置200は、比較画像生成部205を更に有してもよい。比較画像生成部205は、コントローラ6,7による制御の進行と、シミュレータ101,102によるシミュレーションの進行とを対比する比較画像を生成し、後述の表示デバイス196,296等に表示させる。例えば比較画像生成部205は、バーチャルデータにおける各種イベントの発生時刻と、リアルデータにおける各種イベントの発生時刻とを示すタイミングチャートを含む比較画像を生成する。
【0116】
図9は、シミュレーション装置100及びデータ収集装置200のハードウェア構成を例示するブロック図である。
図9に示すように、シミュレーション装置100は、回路190を有する。回路190は、一つ又は複数のプロセッサ191と、メモリ192と、ストレージ193と、通信ポート194と、入力デバイス195と、表示デバイス196とを含む。ストレージ193は、例えば不揮発性の半導体メモリ等、コンピュータによって読み取り可能な記憶媒体を有する。ストレージ193は、第1マシンに対する第1コントローラによる制御をシミュレーションする第1シミュレータと、第2マシンに対する第2コントローラによる制御をシミュレーションする第2シミュレータと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に対応させるように、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールするシミュレーションマネジャ110と、をシミュレーション装置100に構成させるプログラムを記憶している。
【0117】
メモリ192は、ストレージ193の記憶媒体からロードしたプログラム及びプロセッサ191による演算結果を一時的に記憶する。プロセッサ191は、メモリ192と協働して上記プログラムを実行することで、シミュレーション装置100の各機能ブロックを構成する。通信ポート194は、プロセッサ191からの指令に従って、ネットワーク回線NWを介して、データ収集装置200及びコントローラ6との間で通信を行う。入力デバイス195及び表示デバイス196は、シミュレーション装置100のユーザインタフェースとして機能する。入力デバイス195は、例えばキーパッド等であり、ユーザによる入力情報を取得する。表示デバイス196は、例えば液晶モニタ等を含み、ユーザに対する情報表示に用いられる。入力デバイス195及び表示デバイス196は、所謂タッチパネルのように一体化されていてもよい。入力デバイス195及び表示デバイス196は、シミュレーション装置100に組み込まれていてもよいし、シミュレーション装置100に接続される外部機器に設けられていてもよい。
【0118】
データ収集装置200は、回路290を有する。回路290は、一つ又は複数のプロセッサ291と、メモリ292と、ストレージ293と、通信ポート294と、入力デバイス295と、表示デバイス296とを含む。ストレージ293は、例えば不揮発性の半導体メモリ等、コンピュータによって読み取り可能な記憶媒体を有する。ストレージ293は、リアルデータをコントローラ6から取得して蓄積するリアルデータ記憶部201と、バーチャルデータをシミュレーション装置100から取得して蓄積するバーチャルデータ記憶部202と、バーチャルデータとリアルデータとの乖離を評価する乖離評価部203とをデータ収集装置200に構成させるプログラムを記憶している。
【0119】
メモリ292は、ストレージ293の記憶媒体からロードしたプログラム及びプロセッサ291による演算結果を一時的に記憶する。プロセッサ291は、メモリ292と協働して上記プログラムを実行することで、データ収集装置200の各機能ブロックを構成する。通信ポート294は、プロセッサ291からの指令に従って、ネットワーク回線NWを介して、シミュレーション装置100及びコントローラ6との間で通信を行う。入力デバイス295及び表示デバイス296は、データ収集装置200のユーザインタフェースとして機能する。入力デバイス295は、例えばキーパッド等であり、ユーザによる入力情報を取得する。表示デバイス296は、例えば液晶モニタ等を含み、ユーザに対する情報表示に用いられる。入力デバイス295及び表示デバイス296は、所謂タッチパネルのように一体化されていてもよい。入力デバイス295及び表示デバイス296は、データ収集装置200に組み込まれていてもよいし、データ収集装置200に接続される外部機器に設けられていてもよい。
【0120】
なお、回路190及び回路290は、必ずしもプログラムにより各機能を構成するものに限られない。例えば回路190及び回路290は、専用の論理回路又はこれを集積したASIC(Application Specific Integrated Circuit)により少なくとも一部の機能を構成してもよい。ハードウェア上において、シミュレーション装置100とデータ収集装置200とは必ずしも分かれていなくてもよく、シミュレーション装置100及びデータ収集装置200が一つのコンピュータによって構成されていてもよい。
【0121】
〔シミュレーション手順〕
続いて、シミュレーション方法の一例として、シミュレーション装置100が実行するシミュレーション手順を例示する。この手順は、第1マシンに対する第1コントローラによる制御を第1シミュレータによりシミュレーションすることと、第2マシンに対する第2コントローラによる制御を第2シミュレータによりシミュレーションすることと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に基づいて、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールすることと、を含む。
【0122】
図10に示すように、シミュレーション装置100は、まずステップS01,S02,S03,S04を実行する。ステップS01では、カウンタ111が、シミュレーションサイクル数のカウントを開始する。ステップS02では、選択部113が、システム制御周期、搬送制御周期、第1ロボット制御周期、及び第2ロボット制御周期と、シミュレーションサイクル数とに基づいて、シミュレータ101,シミュレータ102A,102B,102Cの少なくとも一つを選択する。
【0123】
ステップS03では、実行部114が、選択部113が選択した少なくとも一つのシミュレータのそれぞれに、セグメント処理を実行させる。ステップS04では、動作シミュレーション部122が、シミュレータ101,102の全てが1サイクル以上のセグメント処理を実行したか否かを確認する。
【0124】
ステップS04において、シミュレータ101,102の全てが1サイクル以上のセグメント処理を実行したと判定した場合、シミュレーション装置100はステップS05,S06を実行する。ステップS05では、動作シミュレーション部122が、シミュレータ101,102によるシミュレーション結果に基づいて、複数のマシン3の動作をシミュレーションする。ステップS06では、動作シミュレーション部122が、複数のマシン3の動作のシミュレーション結果に基づいて、複数のマシン3の動作のシミュレーション画像を生成し、表示デバイス196等に表示させる。
【0125】
次に、シミュレーション装置100は、ステップS07を実行する。ステップS04において、1サイクル以上のセグメント処理を実行していないシミュレータ101,102が残っていると判定した場合、シミュレーション装置100は、ステップS05,S06を実行することなくステップS07を実行する。ステップS07では、シミュレーションマネジャ110が、実制御システム5における一連の制御のシミュレーションが完了したか否かを確認する。
【0126】
ステップS07において、実制御システム5における一連の制御のシミュレーションが完了していないと判定した場合、シミュレーション装置100はステップS08,S09,S11,S12,S13,S14を実行する。ステップS08では、通信データ転送部132が、通信データを通信バッファ150において一つ下流の記憶領域に転送する。ステップS09では、通信データ格納部133が、送信側のシミュレータが生成した通信データを、通信バッファ150の最上流の記憶領域に格納することを、複数の通信定義ごとに実行する。ステップS11では、通信データ読出部134が、通信データ転送部132により最下流の記憶領域まで転送された通信データを読み出して受信側のシミュレータに取得させることを、複数の通信定義ごとに実行する。
【0127】
ステップS12では、データ蓄積部181が、シミュレータ101,102A、102B,102Cによるシミュレーション結果をシミュレーションマネジャ110から取得し、複数のマシン3の動作のシミュレーション結果を動作シミュレーション部122から取得し、バーチャルデータ記憶部202に蓄積させる。ステップS13では、進行速度調節部171、中断部172が、再生速度の調節処理を行う。ステップS13の具体的内容については後述する。ステップS14では、カウンタ111が、シミュレーションサイクル数をカウントアップする。その後、シミュレーション装置100は処理をステップS02に戻す。シミュレーション装置100は、実制御システム5における一連の制御のシミュレーションが完了するまで、以上のシミュレーションサイクルを繰り返す。
【0128】
ステップS07において、実制御システム5における一連の制御のシミュレーションが完了したと判定した場合、シミュレーション装置100によるシミュレーション手順が完了する。
【0129】
図11は、ステップS13における再生速度の調節処理の手順を例示するフローチャートである。
図11に示すように、シミュレーション装置100は、まずステップS21を実行する。ステップS21では、進行速度調節部171が、シミュレーションサイクル数が現在の値になった後、上記シミュレーション周期が経過したか否かを確認する。
【0130】
ステップS21においてシミュレーション周期が経過していないと判定した場合、シミュレーション装置100はステップS22を実行する。ステップS22では、中断部172が、停止指令が入力されているか否かを確認する。ステップS22において停止指令が入力されたと判定した場合、シミュレーション装置100はステップS23を実行する。ステップS23では、中断部172が再開指令の入力を待機する。これにより、再開指令が入力されるまでは、カウンタ111によるサイクル数のカウントが中断し、シミュレータ101,102によるシミュレーションが中断することとなる。
【0131】
次に、シミュレーション装置100は、ステップS24を実行する。ステップS22において停止指令が入力されていないと判定した場合、シミュレーション装置100は、ステップS23を実行することなくステップS24を実行する。ステップS24では、進行速度調節部171が、再生速度の指定が入力されているか否かを確認する。
【0132】
ステップS24において再生速度の指定が入力されていると判定した場合、シミュレーション装置100はステップS25を実行する。ステップS25では、進行速度調節部171が、再生速度の指定に応じてシミュレーション周期を変更する。その後、シミュレーション装置100は処理をステップS21に戻す。ステップS24において再生速度の指定が入力されていないと判定した場合、シミュレーション装置100は、ステップS25を実行することなく、処理をステップS21に戻す。以後、シミュレーション周期が経過するまでは、以上の処理が繰り返される。ステップS21においてシミュレーション周期が経過したと判定した場合、再生速度の調節処理が完了する。
【0133】
図12は、シミュレーション手順の変形例を示すフローチャートである。この変形例は、シミュレーション装置100が、協調シミュレーションと、個別シミュレーションとを選択的に実行する手順を例示している。
図12に示すように、シミュレーション装置100は、まずステップS31を実行する。ステップS31では、シミュレーションマネジャ110が、協調シミュレーションの指示が入力デバイス195等に入力されているか否かを確認する。
【0134】
ステップS31において協調シミュレーションの指示が入力デバイス195等に入力されていないと判定した場合、シミュレーション装置100はステップS32を実行する。ステップS32では、シミュレーションマネジャ110が、個別シミュレーションの指示が入力デバイス195等に入力されているか否かを確認する。ステップS32において、個別シミュレーションの指示が入力デバイス195等に入力されていないと判定した場合、シミュレーション装置100は処理をステップS31に戻す。
【0135】
ステップS31において協調シミュレーションの指示が入力デバイス195等に入力されていると判定した場合、シミュレーション装置100はステップS33を実行する。ステップS33では、シミュレーションマネジャ110が、シミュレータ101,102のシミュレーションを協調して実行させる。ステップS33の具体的手順は、
図10のステップS01~S14に例示したとおりである。
【0136】
ステップS32において個別シミュレーションの指示が入力デバイス195等に入力されていると判定した場合、シミュレーション装置100はステップS34を実行する。ステップS34では、シミュレーションマネジャ110が、個別シミュレーションを実行する。
【0137】
図13は、ステップS34における個別シミュレーション手順を例示するフローチャートである。
図13に示すように、シミュレーション装置100は、まずステップS41,S42,S43,S44,S45を実行する。ステップS41では、シミュレーションマネジャ110が、個別シミュレーションの指示に基づいて、シミュレータ101,102から一つの個別実行シミュレータを選択する。
【0138】
ステップS42では、シミュレーションマネジャ110が、個別実行シミュレータによるセグメント処理を実行させる。ステップS43では、動作シミュレーション部122が、個別実行シミュレータによるシミュレーション結果に基づいて、個別実行シミュレータに対応するマシン3の動作をシミュレーションする。
【0139】
ステップS44では、動作シミュレーション部122が、個別実行シミュレータに対応するマシン3の動作のシミュレーション結果に基づいて、当該マシン3の動作のシミュレーション画像を生成し、表示デバイス196等に表示させる。ステップS45では、シミュレーションマネジャ110が、個別実行シミュレータに対応するコントローラによる一連の制御のシミュレーションが完了したか否かを確認する。
【0140】
ステップS45において、個別実行シミュレータに対応するコントローラによる一連の制御のシミュレーションが完了していないと判定した場合、シミュレーション装置100は処理をステップS42に戻す。ステップS45において、個別実行シミュレータに対応するコントローラによる一連の制御のシミュレーションが完了したと判定した場合、個別シミュレーションが完了する。
【0141】
〔仮想遅延時間の調節手順〕
続いて、シミュレーション結果に基づき行われる仮想遅延時間の調節手順を例示する。
図14に示すように、データ収集装置200はまずステップS51,S52を実行する。ステップS51では、乖離評価部203が、実制御システム5による制御が完了し、リアルデータ記憶部201にリアルデータが蓄積されるのを待機する。ステップS52では、乖離評価部203が、バーチャルデータとリアルデータとの乖離を評価する。
【0142】
次に、シミュレーション装置100は、ステップS53を実行する。ステップS53では、乖離評価部203による乖離度の評価結果が、上記キャリブレーションレベル以下になっているか否かを、仮想遅延設定部144が確認する。
【0143】
ステップS53において、乖離度の評価結果がキャリブレーションレベル以下になっていないと判定した場合、シミュレーション装置100はステップS54,S55を実行する。ステップS54では、仮想遅延設定部144が、乖離度を縮小するように、複数の通信定義ごとの仮想遅延時間を変更する。ステップS55では、仮想遅延設定部144が、実制御システム5による一連の制御のシミュレーションをシミュレーション装置100に再度実行させる。その後、シミュレーション装置100は処理をステップS52に戻す。
【0144】
ステップS53において、乖離度の評価結果がキャリブレーションレベル以下になっていると判定した場合、シミュレーション装置100はステップS56を実行する。ステップS56では、通信バッファ割当部143が、仮想遅延設定部144により設定された仮想遅延時間に対応するサイズの通信バッファを複数の通信定義ごとに割り当てる。以上で仮想遅延時間の調節手順が完了する。
【0145】
〔異常検知手順〕
続いて、データ収集装置200による異常検知手順を例示する。
図15に示すように、データ収集装置200は、まずステップS61,S62,S63を実行する。ステップS61では、乖離評価部203が、実制御システム5による制御が完了し、リアルデータ記憶部201にリアルデータが蓄積されるのを待機する。ステップS62では、乖離評価部203が、バーチャルデータとリアルデータとの乖離を評価する。ステップS63では、乖離評価部203による乖離度の評価結果が、上記異常検知レベルを超えているか否かを、異常検知部204が確認する。
【0146】
ステップS63において、乖離度の評価結果が異常検知レベルを超えていないと判定した場合、データ収集装置200は処理をステップS61に戻す。以後、乖離度の評価結果が異常検知レベルを超えるまでは、バーチャルデータとリアルデータとの乖離の評価が繰り返される。
【0147】
ステップS63において、乖離度の評価結果が異常検知レベルを超えていると判定した場合、データ収集装置200はステップS64,S65を実行する。ステップS64では、異常検知部204が実制御システム5の異常を検知する。ステップS65では、異常検知部204が、表示デバイス196,296への表示などによって、実制御システム5の異常を報知する。この際に、比較画像生成部205が、コントローラ6,7による制御の進行と、シミュレータ101,102によるシミュレーションの進行とを対比する比較画像を生成し、後述の表示デバイス196,296等に表示させてもよい。
【0148】
〔本実施形態の効果〕
以上に説明したように、シミュレーション装置100は、第1マシンに対する第1コントローラによる制御をシミュレーションする第1シミュレータと、第2マシンに対する第2コントローラによる制御をシミュレーションする第2シミュレータと、第1コントローラによる制御の進行と、第2コントローラによる制御の進行との関係に対応するように、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とをコントロールするシミュレーションマネジャ110と、を備える。
【0149】
このシミュレーション装置100によれば、実時間とは異なる経過時間で実行されるノンリアルタイムシミュレーションにおいても、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行との関係を、第1コントローラによる第1マシンの制御の進行と、第2コントローラによる第2マシンの制御の進行との関係に容易に対応させることができる。このため、第1マシンの動作と第2マシンの動作との関係をシミュレーション空間において容易に再現することができる。従って、複数の装置による協調動作の適切なシミュレーションに有効である。
【0150】
シミュレーションマネジャ110は、第1コントローラによる制御で繰り返される第1セグメント処理の実行タイミングと、第2コントローラによる制御で繰り返される第2セグメント処理の実行タイミングとの関係に対応するように、第1シミュレータによって繰り返される第1セグメント処理の実行タイミングと、第2シミュレータによって繰り返される第2セグメント処理の実行タイミングとをコントロールしてもよい。この場合、シミュレーションの進行調節を更に容易に行うことができる。
【0151】
シミュレーションマネジャ110は、第1コントローラによる第1セグメント処理の繰り返し周期を表す第1制御周期と、第2コントローラによる第2セグメント処理の繰り返し周期を表す第2制御周期とに基づいて、第1シミュレータによって繰り返される第1セグメント処理の実行タイミングと、第2シミュレータによって繰り返される第2セグメント処理の実行タイミングとをコントロールしてもよい。この場合、第1制御周期と第2制御周期とが異なる場合においても、シミュレーションの進行調節を容易に行うことができる。
【0152】
シミュレーションマネジャは、シミュレーションサイクル数をカウントするカウンタ111と、第1制御周期及び第2制御周期と、シミュレーションサイクル数とに基づいて、第1シミュレータ及び第2シミュレータの少なくとも一つを選択する選択部113と、選択部113が選択した少なくとも一つのシミュレータのそれぞれに、セグメント処理を実行させる実行部114とを有していてもよい。この場合、第1制御周期と第2制御周期との違いに応じたシミュレーションの進行調節を更に容易に行うことができる。
【0153】
選択部113は、第1セグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、第1制御周期に対応するシミュレーションサイクル数となった場合に、第1シミュレータを選択し、第2セグメント処理が前回実行されてからカウントされたシミュレーションサイクル数が、第2制御周期に対応するシミュレーションサイクル数となった場合に、第2シミュレータを選択してもよい。この場合、第1制御周期と第2制御周期との違いに応じたシミュレーションの進行調節を更に容易に行うことができる。
【0154】
第1制御周期に対応するシミュレーションサイクル数及び第2制御周期に対応するシミュレーションサイクル数がいずれも1以上であってもよい。この場合、シミュレーションの進行調節をより高精度に行うことができる。
【0155】
シミュレーション装置100は、第1シミュレータによるシミュレーション結果と、第2シミュレータによるシミュレーション結果とに基づいて、第1マシンの動作及び第2マシンの動作をシミュレーションする動作シミュレーション部122を更に備えていてもよい。この場合、シミュレーション結果を、第1マシン及び第2マシンの仮想的な動作確認に有効活用することができる。
【0156】
動作シミュレーション部122は、第1シミュレータによるシミュレーション結果と、第2シミュレータによるシミュレーション結果との両方が更新された後に、第1マシンの動作及び第2マシンの動作をシミュレーションしてもよい。この場合、シミュレーション画像を効率よく生成することができる。
【0157】
第2シミュレータは、第1シミュレータによる第1マシンの動作のシミュレーション結果に対して、第2マシンの動作のシミュレーション結果を協調させるように、第2マシンに対する第2コントローラによる制御をシミュレーションしてもよい。この場合、シミュレーションの進行調節が更に有効である。
【0158】
シミュレーション装置100は、第1コントローラと第2コントローラとの間で直接的又は間接的に行われる通信を再現するように、第1シミュレータと第2シミュレータとの間における通信データの受け渡しを行う通信シミュレータ130を更に備えていてもよい。この場合、第1コントローラによる第1マシンの制御と、第2コントローラによる第2マシンの制御との関係を、より適切にシミュレーションすることができる。
【0159】
通信シミュレータ130は、送信側のシミュレータが生成した通信データを、予め定められた仮想遅延時間に基づいたタイミングで、受信側のシミュレータに取得させてもよい。この場合、第1コントローラによる第1マシンの制御と、第2コントローラによる第2マシンの制御との関係を、より適切にシミュレーションすることができる。
【0160】
通信シミュレータ130は、通信サイクル数をカウントする通信カウンタ131と、送信側のシミュレータが生成した通信データを通信バッファ150に格納する通信データ格納部133と、通信バッファ150に通信データが格納されてからカウントされた通信サイクル数が、仮想遅延時間に対応する通信サイクル数となった場合に、通信バッファに格納された通信データを読み出して受信側のシミュレータに取得させる通信データ読出部134と、を有していてもよい。この場合、ノンリアルタイムシミュレーションにおいても、通信遅延を容易に模擬することができる。
【0161】
通信バッファ150は、データ転送方向の上流から下流に並ぶ複数の記憶領域を含み、通信データ格納部133は、送信側のシミュレータが生成した通信データを通信バッファの最上流の記憶領域に格納し、通信シミュレータ130は、通信サイクル数がカウントされる度に、通信データを通信バッファにおいて一つ下流の記憶領域に転送する通信データ転送部132を更に有し、通信データ読出部134は、通信データ転送部132により最下流の記憶領域まで転送された通信データを読み出して受信側のシミュレータに取得させてもよい。この場合、通信遅延を更に容易に模擬することができる。
【0162】
通信バッファ150は、仮想遅延時間に対応する数の複数の記憶領域151,152,153,154を含んでいてもよい。この場合、通信遅延をより適切に模擬することができる。
【0163】
通信シミュレータ130は、複数の送信側のシミュレータと、複数の受信側のシミュレータとをそれぞれ対応付ける複数の通信定義160に基づいて、送信側のシミュレータから通信データを取得することと、受信側のシミュレータに通信データを取得させることと、を複数の通信定義160ごとに実行してもよい。この場合、複数の通信をまとめてシミュレーションできるため、複数の通信を含む制御を容易に模擬することができる。
【0164】
複数の通信定義160のそれぞれは、送信側のシミュレータから受信側のシミュレータへの仮想遅延時間163を含み、通信シミュレータ130は、複数の通信定義ごとに、送信側のシミュレータが生成した通信データを、仮想遅延時間163に基づいたタイミングで受信側のシミュレータに取得させてもよい。この場合、複数の通信を含む制御をより適切に模擬することができる。
【0165】
シミュレーション装置100は、仮想遅延時間163に対応するサイズの通信バッファを複数の通信定義160ごとに割り当てる通信バッファ割当部143を更に備え、通信シミュレータ130は、通信サイクル数をカウントする通信カウンタ131と、複数の通信定義160ごとに、送信側のシミュレータが生成した通信データを通信バッファ150に格納する通信データ格納部133と、複数の通信定義160ごとに、通信バッファ150に通信データが格納されてからカウントされた通信サイクル数が、仮想遅延時間163に対応する通信サイクル数となった場合に、通信バッファ150に格納された通信データを読み出して受信側のシミュレータに取得させる通信データ読出部134と、を有していてもよい。この場合、複数の通信ごとの通信遅延を容易に模擬することができる。
【0166】
シミュレーション装置100は、指定された再生速度に応じて第1シミュレータによるシミュレーションの進行速度及び第2シミュレータによるシミュレーションの進行速度を変更する進行速度調節部171を更に備えていてもよい。この場合、シミュレーション速度を自在に調節することで、シミュレーション結果をより有効に活用することができる。
【0167】
シミュレーション装置100は、停止指令に応じて、第1シミュレータによるシミュレーション及び第2シミュレータによるシミュレーションを中断する中断部172を更に備えていてもよい。この場合、シミュレーションを自在に中断可能にすることで、シミュレーション結果をより有効に活用することができる。
【0168】
シミュレーションマネジャ110は、個別シミュレーションの指示を受けた場合に、第1シミュレータ及び第2シミュレータから一つの個別実行シミュレータを選択し、他のシミュレータによるシミュレーションの進行に無関係に、個別実行シミュレータによるシミュレーションを実行させてもよい。この場合、個別の動作と、協調動作との段階的なシミュレーションに有効である。
【0169】
制御システム4は、送信側のシミュレータが生成した通信データを、予め定められた仮想遅延時間に基づいたタイミングで、受信側のシミュレータに取得させる通信シミュレータ130を有するシミュレーション装置100と、第1コントローラと、第2コントローラとを含む実制御システム5と、仮想遅延時間163を、第1コントローラと第2コントローラとの間の通信遅延時間に対応させる仮想遅延設定部144と、を備えていてもよい。この場合、第1マシンの動作と第2マシンの動作との関係をシミュレーション空間においてより適切に再現することを、更に容易に行うことができる。
【0170】
制御システム4は、第1コントローラによる第1マシンの制御の進行と、第2コントローラによる第2マシンの制御の進行と、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行との比較に基づいて、実制御システム5の異常を検知する異常検知部204を更に備えていてもよい。この場合、実制御システム5に合わせてチューニングされたシミュレーションとの対比によって、実制御システム5の異常を迅速に検知することができる。
【0171】
制御システム4は、シミュレーション装置100と、第1コントローラと、第2コントローラとを含む実制御システム5と、第1コントローラによる第1マシンの制御の進行と、第2コントローラによる第2マシンの制御の進行と、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行とを対比する比較画像を生成する比較画像生成部205と、を備えていてもよい。この場合、第1コントローラによる第1マシンの制御の進行と、第2コントローラによる第2マシンの制御の進行と、第1シミュレータによるシミュレーションの進行と、第2シミュレータによるシミュレーションの進行と、の関係を目視確認し易いインタフェースを提供することで、シミュレーション条件の適切なマニュアルチューニングと、目視による迅速な異常検知とを促すことができる。
【0172】
以上、実施形態について説明したが、本開示は必ずしも上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で様々な変更が可能である。
【符号の説明】
【0173】
3A…コンベヤ(第1マシン、第2マシン)、3B,3C…ロボット(第1マシン、第2マシン)、4…制御システム、5…実制御システム、6…コントローラ(第1コントローラ)、7A,7B,7C…コントローラ(第1コントローラ、第2コントローラ)、100…シミュレーション装置、101…シミュレータ(第1シミュレータ)、102A,102B,102C…シミュレータ(第1シミュレータ、第2シミュレータ)、110…シミュレーションマネジャ、111…カウンタ、113…選択部、114…実行部、122…動作シミュレーション部、130…通信シミュレータ、131…通信カウンタ、132…通信データ転送部、133…通信データ格納部、134…通信データ読出部、143…通信バッファ割当部、144…仮想遅延設定部、150…通信バッファ、151,152,153,154…記憶領域、160…通信定義、163…仮想遅延時間、171…進行速度調節部、172…中断部、204…異常検知部、205…比較画像生成部。