(57)【要約】【課題】  生産システムの稼動状態を随時把握しながら、複数のワークに関連する作業を並行して効率良く１台のロボットに遂行させることができるようにする。【解決手段】  ロボット制御装置１０は、ロボットの作業環境の状態を実時間で示す状態情報１６を収集する情報収集部１８と、状態情報１６に基づいて、複数のワークに対し実行段階にある作業プログラム１２のうち、作業開始条件１４を満たしている第１の実行可能プログラム１２Ａを選定するプログラム選定部２０と、第１の実行可能プログラム１２Ａを実行処理する処理部２２と、処理部２２が第１の実行可能プログラム１２Ａの実行処理を完了したか否かを判断するプログラム完了判断部２４とを備える。プログラム選定部２０は、プログラム完了判断部２４の判断状況に応じて、作業開始条件を満たしている第２の実行可能プログラム１２Ｂを、状態情報１６に基づき選定する。【選択図】      図１
2006343828.tif 000002
【特許請求の範囲】
【請求項１】
複数の作業単位を個々に指令する複数の作業プログラムに従い、該複数の作業単位を含む作業を複数のワークに対し並行してロボットに遂行させるロボット制御装置であって、
前記複数の作業プログラムの各々は、対応の前記作業単位をロボットが開始する前提となる作業開始条件の記述を含み、
前記ロボット制御装置は、
ロボットが前記作業を遂行する環境の状態を実時間で示す状態情報を収集する情報収集部と、
前記情報収集部が収集した前記状態情報に基づいて、前記複数の作業プログラムの中で複数のワークに対し実行段階にある作業プログラムのうち、前記作業開始条件を満たしている第１の実行可能プログラムを選定するプログラム選定部と、
前記プログラム選定部が選定した前記第１の実行可能プログラムを実行処理する処理部と、
前記処理部が前記第１の実行可能プログラムの実行処理を完了したか否かを判断するプログラム完了判断部とを具備し、
前記プログラム選定部は、前記プログラム完了判断部の判断状況に応じて、前記実行段階にある作業プログラムのうち、前記作業開始条件を満たしている第２の実行可能プログラムを、前記処理部が次に実行処理する作業プログラムとして、前記状態情報に基づき選定すること、
を特徴とするロボット制御装置。
【請求項２】
前記プログラム選定部は、前記状態情報に基づいて、前記複数の作業プログラムの中で幾つかの前記実行段階にある作業プログラムを特定するとともに、特定した該作業プログラムから、予め定めたルールに従って、１つの前記第１の実行可能プログラムを選択する、請求項１に記載のロボット制御装置。
【請求項３】
前記プログラム選定部は、複数のワークのそれぞれに関連して前記複数の作業プログラムの実行順序を定義する複数の作業スクリプトを参照して、前記実行段階にある作業プログラムを特定する、請求項１又は２に記載のロボット制御装置。
【請求項４】
前記複数の作業プログラムと前記複数の作業スクリプトとを格納する記憶部をさらに具備する、請求項３に記載のロボット制御装置。
【請求項５】
前記プログラム完了判断部が、前記処理部の前記実行処理が完了したと判断する前に、前記プログラム選定部が前記第２の実行可能プログラムを選定し、前記処理部が該第２の実行可能プログラムを実行処理する、請求項１〜４のいずれか１項に記載のロボット制御装置。
【請求項６】
前記複数の作業プログラムの各々は、対応の前記作業単位をロボットが完了する前提となる作業完了条件の記述を含み、前記プログラム完了判断部は、前記情報収集部が収集した前記状態情報に基づいて、前記第１の実行可能プログラムが該作業完了条件を満たしているか否かを判断し、それにより前記処理部の前記実行処理が完了したか否かを判断する、請求項１〜５のいずれか１項に記載のロボット制御装置。
【請求項７】
前記プログラム完了判断部は、ロボットが前記作業を遂行する前記環境をモデル化した内部モデルの状態を示す内部情報を有して、該内部情報と前記情報収集部が収集した前記状態情報とが互いに一致するか否かを判断し、それにより前記処理部の前記実行処理が完了したか否かを判断する、請求項１〜６のいずれか１項に記載のロボット制御装置。
【請求項８】
前記複数の作業プログラムは、前記複数の作業単位とは異なる例外処理作業単位を指令する例外作業プログラムを含み、前記プログラム完了判断部が、前記内部情報と前記状態情報とが互いに一致しないと判断したときに、前記プログラム選定部は、該複数の作業プログラムから該例外作業プログラムを選定し、前記処理部は、前記第２の実行可能プログラムの代わりに該例外作業プログラムを実行処理する、請求項７に記載のロボット制御装置。
【請求項９】
前記プログラム完了判断部は、前記処理部の前記実行処理が完了したと判断するまでに予め定めた時間が経過したか否かをさらに判断する、請求項１〜７のいずれか１項に記載のロボット制御装置。
【請求項１０】
前記複数の作業プログラムは、前記複数の作業単位とは異なる例外処理作業単位を指令する例外作業プログラムを含み、前記プログラム完了判断部が、前記時間が経過したと判断したときに、前記プログラム選定部は、該複数の作業プログラムから該例外作業プログラムを選定し、前記処理部は、前記第２の実行可能プログラムの代わりに該例外作業プログラムを実行処理する、請求項９に記載のロボット制御装置。
【請求項１１】
前記作業の遂行中にロボットを緊急停止させる停止制御部と、ロボットが該作業を遂行する前記環境をモデル化した内部モデルの状態を示す内部情報を有して、該内部情報と前記情報収集部が収集した前記状態情報とが互いに一致するか否かを判断する状態判断部と、該状態判断部が、該内部情報と該状態情報とが互いに一致すると判断したときに、該緊急停止を解除して該作業を再開する再開制御部とをさらに具備する、請求項１〜６のいずれか１項に記載のロボット制御装置。
【請求項１２】
前記状態判断部が、前記内部情報と前記状態情報とが互いに一致しないと判断したときに、前記再開制御部は、前記作業を再開する前に、該内部情報と該状態情報との不一致の内容及び対策の少なくとも一方を告知するメッセージ信号を出力する、請求項１１に記載のロボット制御装置。
【請求項１３】
前記状態判断部が、前記内部情報と前記状態情報とが互いに一致しないと判断したときに、前記再開制御部は、前記作業を再開する前に、再開許可指令を求めるメッセージ信号を出力する、請求項１１又は１２に記載のロボット制御装置。
【請求項１４】
前記再開制御部は、前記再開許可指令が得られたときに、前記内部情報を前記状態情報と同一の内容に書き換えて、前記作業を再開する、請求項１３に記載のロボット制御装置。
【請求項１５】
複数の作業単位を個々に指令する複数の作業プログラムに従い、該複数の作業単位を含む作業を複数のワークに対し並行してロボットに遂行させるロボット制御方法であって、
前記複数の作業プログラムの各々は、対応の前記作業単位をロボットが開始する前提となる作業開始条件の記述を含み、
前記ロボット制御方法は、
ロボットが前記作業を遂行する環境の状態を実時間で示す状態情報を収集するステップと、
収集した前記状態情報に基づいて、前記複数の作業プログラムの中で複数のワークに対し実行段階にある作業プログラムのうち、前記作業開始条件を満たしている第１の実行可能プログラムを選定するステップと、
選定した前記第１の実行可能プログラムを実行処理するステップと、
前記第１の実行可能プログラムの実行処理の状況に応じて、前記実行段階にある作業プログラムのうち、前記作業開始条件を満たしている第２の実行可能プログラムを、前記状態情報に基づき選定するステップと、
選定した前記第２の実行可能プログラムを実行処理するステップと、
を具備することを特徴とするロボット制御方法。
【請求項１６】
前記複数の作業プログラムの各々は、対応の前記作業単位をロボットが完了する前提となる作業完了条件の記述を含み、第２の実行可能プログラムを選定する前記ステップの前に、前記状態情報に基づいて、前記第１の実行可能プログラムが該作業完了条件を満たしているか否かを判断し、それにより前記第１の実行可能プログラムの前記実行処理が完了したか否かを判断するステップをさらに具備する、請求項１５に記載のロボット制御方法。
【請求項１７】
第２の実行可能プログラムを選定する前記ステップの前に、ロボットが前記作業を遂行する前記環境をモデル化した内部モデルの状態を示す内部情報と、前記情報収集部が収集した前記状態情報とが互いに一致するか否かを判断し、それにより前記第１の実行可能プログラムの前記実行処理が完了したか否かを判断するステップをさらに具備する、請求項１５又は１６に記載のロボット制御方法。
【請求項１８】
前記作業の遂行中にロボットが緊急停止したときに、ロボットが該作業を遂行する前記環境をモデル化した内部モデルの状態を示す内部情報と、前記状態情報とが互いに一致するか否かを判断するステップと、該内部情報と該状態情報とが互いに一致すると判断したときに、該緊急停止を解除して該作業を再開するステップとをさらに具備する、請求項１５又は１６に記載のロボット制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、産業用ロボットの制御装置及び制御方法に関する。
【背景技術】
【０００２】
産業用ロボット（以下、ロボットと略称する）は、特定の作業プログラム（すなわちタスクプログラム）に従って動作する。ロボットに装着したツール（すなわちエンドエフェクタ）の種類、作業対象のワークの種類、作業の内容等に対応した様々な種類の作業プログラムを、適宜選択してロボットに与えることで、１台のロボットが多種多様な作業を遂行することができる。ロボットを動作させるための作業プログラムを作成する際には、一般に教示操作盤を使用して、オペレータが手動モードでロボットの各制御軸を低速運動させて、ワークに対し作業を遂行する複数の作業部位にツールを順次位置決めし、それら作業部位を「教示点」としてロボットに記憶させる。ロボットは、個々の作業部位にツールを位置決めしたときの各制御軸の動作位置を、個々の教示点におけるロボット自身の位置及び姿勢の情報として記憶する。なお、このような教示プログラミングを、パーソナルコンピュータ等を用いたオフラインシミュレーションで行うことも知られている。
【０００３】
ロボットは、教示された作業プログラムに従い同一作業を繰り返して遂行できるが、作業内容を変更する場合には、新しい作業内容に合致した新たな作業プログラムを作成する必要がある。例えば、ロボットを用いて高度に自動化された生産システムにおいて、生産品種を追加したり変更したりする場合には、生産ラインの変更が要求される。このとき、治具、機械、搬送装置といった各種ハードウェアの再設計や、加工機械の加工プログラム、ロボットの作業プログラム、ＰＣ（プログラマブルコントローラ）及び生産管理装置のシーケンスラダー及び生産管理プログラムといった各種ソフトウェアの再作成に、多大な工数が必要となる。このような生産ラインの変更に伴うハードウェア／ソフトウェアの構築工数を有効に削減することが、自動化された生産システムのコスト関連の重要な課題となっており、故にロボットにおける作業プログラムの作成に要する工数の削減が望まれている。
【０００４】
ロボットの作業プログラムの作成、変更を容易にする手法として、ロボットが１つのワークに対して遂行する１サイクルの作業を、互いに異なる複数の作業単位に分割して、個々の作業単位を指令する複数の作業プログラムを作成し、それら作業プログラムを適当に組み合わせてロボットに与えることが知られている。例えば特許文献１は、ロボット及び加工機械を有する生産セルにおいて、ロボット及び加工機械が遂行する一連の作業を複数の作業単位に分割し、個々の作業単位を指令する複数の作業プログラムを、情報処理装置が適当な順序でロボット及び加工機械のいずれかに与える構成を開示する。生産品種の追加や変更が生じたときには、それに伴って追加や変更が必要となる作業単位についてのみ、作業プログラムの見直しを行えば良いので、生産ラインの変更に伴うロボットの作業プログラムの作成コストが削減される。
【０００５】
なお、本願で用いる「作業単位」という用語は、ワークを把持する、ワークを置く、ワークを見る等の、単一の行為で特徴付けられる作業を意味する。通常、１つの作業単位を遂行する間に他の作業単位を介入させることは、極めて不合理となる。また、複数の同一及び異なる作業単位を様々に組み合わせることで、多種多様な作業を実現することができる。
【０００６】
【特許文献１】特開２００４−１８５２２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
複数の生産品を並行して生産する生産システムにおいて、例えば、複数の加工機械に対して１台のロボットがワークを供給したり取り出したりする場合に、加工内容が異なる（つまり生産サイクルが異なる）ワークの供給／取出作業を一連の作業プログラムにまとめることは、一般に困難である。通常は、１台の加工機械へのワークの供給及び取出作業をロボットの１単位の作業プログラムとして、個々の加工機械に対応する作業プログラムを用意し、上位コントローラからの指示に従い、ロボットが、指示された加工機械に対してワークの供給及び取出作業を遂行する。このとき、１つの加工機械に対する作業プログラムが終了するまでは、ロボットは、他の加工機械に対する作業プログラムを開始しない。この構成では、ワークの供給ステップと取出ステップとの間に、例えば加工機械におけるエアブローや軸移動等の比較的時間を要する工程が有ったとしても、ロボットは、その工程の終了を待機するだけである。
【０００８】
前述した特許文献１に記載されるような、１サイクルの作業を複数の作業単位に分割してロボット及び加工機械に指令する構成によれば、複数の加工機械のそれぞれに対し、ワークの供給及び取出作業を、共通する作業単位（例えば供給）毎に並行的に遂行することができる。しかしこの構成でも、ロボットは１つの作業単位を完遂させてから次の作業単位を遂行するので、共通する作業単位の遂行に要する時間（例えば加工時間）がワーク毎に異なる場合には、全ての加工機械に対するワークの供給及び取出作業のサイクルタイムは、時間の掛かる作業単位を有するワークによって支配されることになる。つまりこの構成では、生産システムの稼動状態を随時把握しながら、ロボットの待機時間を効果的に削減して作業を効率良く遂行することは困難である。
【０００９】
また、生産システムが、機器の故障等によって緊急停止した場合には、その原因の究明や除去のために、例えば人手によって治具からワークを取り除いたり、手動で信号をＯＮ／ＯＦＦしたり、ロボットを手動モードで退避位置まで移動させたりといった、オペレータによるシステムへの手動介入が行われることが多い。オペレータによる手動介入が行われると、生産システムの状態が緊急停止時の状態から変動して、ロボットの作業プログラムとの相関性が損なわれるので、そのままでは作業を再開することができない。そこで、作業プログラムの再開時点の内容に合わせて生産システムの状態を手作業で変更するか、或いは、中断した作業プログラムを生産システムの状態に合わせるべく適当なステップだけロボットを擬似運転させるといった、何らかの復旧作業を行うことになる。このような復旧作業を適切に行うためには、生産システムの設備の構成や個々の機械で動作している作業プログラムの内容を、オペレータが熟知していることが必要となる。
【００１０】
本発明は、ロボットを用いた生産システムにおける上記した諸課題を解決可能な、ロボットの制御装置及び制御方法を提供せんとするものである。
したがって本発明の目的は、生産システムの稼動状態を随時把握しながら、複数のワークに関連する作業を並行して効率良く１台のロボットに遂行させることができるロボット制御装置を提供することにある。
本発明の他の目的は、生産システムの稼動状態を随時把握しながら、複数のワークに関連する作業を並行して効率良く１台のロボットに遂行させることができるロボット制御方法を提供することにある。
【００１１】
本発明のさらに他の目的は、生産システムが緊急停止したときに、生産システムに関する理解度に関わらず、ロボットの作業を安全かつ確実に再開させることができるロボット制御装置を提供することにある。
本発明のさらに他の目的は、生産システムが緊急停止したときに、生産システムに関する理解度に関わらず、ロボットの作業を安全かつ確実に再開させることができるロボット制御方法を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、請求項１に記載の発明は、複数の作業単位を個々に指令する複数の作業プログラムに従い、複数の作業単位を含む作業を複数のワークに対し並行してロボットに遂行させるロボット制御装置であって、複数の作業プログラムの各々は、対応の作業単位をロボットが開始する前提となる作業開始条件の記述を含み、ロボット制御装置は、ロボットが作業を遂行する環境の状態を実時間で示す状態情報を収集する情報収集部と、情報収集部が収集した状態情報に基づいて、複数の作業プログラムの中で複数のワークに対し実行段階にある作業プログラムのうち、作業開始条件を満たしている第１の実行可能プログラムを選定するプログラム選定部と、プログラム選定部が選定した第１の実行可能プログラムを実行処理する処理部と、処理部が第１の実行可能プログラムの実行処理を完了したか否かを判断するプログラム完了判断部とを具備し、プログラム選定部は、プログラム完了判断部の判断状況に応じて、実行段階にある作業プログラムのうち、作業開始条件を満たしている第２の実行可能プログラムを、処理部が次に実行処理する作業プログラムとして、状態情報に基づき選定すること、を特徴とするロボット制御装置を提供する。
【００１３】
請求項２に記載の発明は、請求項１に記載のロボット制御装置において、プログラム選定部は、状態情報に基づいて、複数の作業プログラムの中で幾つかの実行段階にある作業プログラムを特定するとともに、特定した作業プログラムから、予め定めたルールに従って、１つの第１の実行可能プログラムを選択するロボット制御装置を提供する。
【００１４】
請求項３に記載の発明は、請求項１又は２に記載のロボット制御装置において、プログラム選定部は、複数のワークのそれぞれに関連して複数の作業プログラムの実行順序を定義する複数の作業スクリプトを参照して、実行段階にある作業プログラムを特定するロボット制御装置を提供する。
【００１５】
請求項４に記載の発明は、請求項３に記載のロボット制御装置において、複数の作業プログラムと複数の作業スクリプトとを格納する記憶部をさらに具備するロボット制御装置を提供する。
【００１６】
請求項５に記載の発明は、請求項１〜４のいずれか１項に記載のロボット制御装置において、プログラム完了判断部が、処理部の実行処理が完了したと判断する前に、プログラム選定部が第２の実行可能プログラムを選定し、処理部が第２の実行可能プログラムを実行処理するロボット制御装置を提供する。
【００１７】
請求項６に記載の発明は、請求項１〜５のいずれか１項に記載のロボット制御装置において、複数の作業プログラムの各々は、対応の作業単位をロボットが完了する前提となる作業完了条件の記述を含み、プログラム完了判断部は、情報収集部が収集した状態情報に基づいて、第１の実行可能プログラムが作業完了条件を満たしているか否かを判断し、それにより処理部の実行処理が完了したか否かを判断するロボット制御装置を提供する。
【００１８】
請求項７に記載の発明は、請求項１〜６のいずれか１項に記載のロボット制御装置において、プログラム完了判断部は、ロボットが作業を遂行する環境をモデル化した内部モデルの状態を示す内部情報を有して、内部情報と情報収集部が収集した状態情報とが互いに一致するか否かを判断し、それにより処理部の実行処理が完了したか否かを判断するロボット制御装置を提供する。
【００１９】
請求項８に記載の発明は、請求項７に記載のロボット制御装置において、複数の作業プログラムは、複数の作業単位とは異なる例外処理作業単位を指令する例外作業プログラムを含み、プログラム完了判断部が、内部情報と状態情報とが互いに一致しないと判断したときに、プログラム選定部は、複数の作業プログラムから例外作業プログラムを選定し、処理部は、第２の実行可能プログラムの代わりに例外作業プログラムを実行処理するロボット制御装置を提供する。
【００２０】
請求項９に記載の発明は、請求項１〜７のいずれか１項に記載のロボット制御装置において、プログラム完了判断部は、処理部の実行処理が完了したと判断するまでに予め定めた時間が経過したか否かをさらに判断するロボット制御装置を提供する。
【００２１】
請求項１０に記載の発明は、請求項９に記載のロボット制御装置において、複数の作業プログラムは、複数の作業単位とは異なる例外処理作業単位を指令する例外作業プログラムを含み、プログラム完了判断部が、予め定めた時間が経過したと判断したときに、プログラム選定部は、複数の作業プログラムから例外作業プログラムを選定し、処理部は、第２の実行可能プログラムの代わりに例外作業プログラムを実行処理するロボット制御装置を提供する。
【００２２】
請求項１１に記載の発明は、請求項１〜６のいずれか１項に記載のロボット制御装置において、作業の遂行中にロボットを緊急停止させる停止制御部と、ロボットが作業を遂行する環境をモデル化した内部モデルの状態を示す内部情報を有して、内部情報と情報収集部が収集した状態情報とが互いに一致するか否かを判断する状態判断部と、状態判断部が、内部情報と状態情報とが互いに一致すると判断したときに、緊急停止を解除して作業を再開する再開制御部とをさらに具備するロボット制御装置を提供する。
【００２３】
請求項１２に記載の発明は、請求項１１に記載のロボット制御装置において、状態判断部が、内部情報と状態情報とが互いに一致しないと判断したときに、再開制御部は、作業を再開する前に、内部情報と状態情報との不一致の内容及び対策の少なくとも一方を告知するメッセージ信号を出力するロボット制御装置を提供する。
【００２４】
請求項１３に記載の発明は、請求項１１又は１２に記載のロボット制御装置において、状態判断部が、内部情報と状態情報とが互いに一致しないと判断したときに、再開制御部は、作業を再開する前に、再開許可指令を求めるメッセージ信号を出力するロボット制御装置を提供する。
【００２５】
請求項１４に記載の発明は、請求項１３に記載のロボット制御装置において、再開制御部は、再開許可指令が得られたときに、内部情報を状態情報と同一の内容に書き換えて、作業を再開するロボット制御装置を提供する。
【００２６】
請求項１５に記載の発明は、複数の作業単位を個々に指令する複数の作業プログラムに従い、複数の作業単位を含む作業を複数のワークに対し並行してロボットに遂行させるロボット制御方法であって、複数の作業プログラムの各々は、対応の作業単位をロボットが開始する前提となる作業開始条件の記述を含み、ロボット制御方法は、ロボットが作業を遂行する環境の状態を実時間で示す状態情報を収集するステップと、収集した状態情報に基づいて、複数の作業プログラムの中で複数のワークに対し実行段階にある作業プログラムのうち、作業開始条件を満たしている第１の実行可能プログラムを選定するステップと、選定した第１の実行可能プログラムを実行処理するステップと、第１の実行可能プログラムの実行処理の状況に応じて、実行段階にある作業プログラムのうち、作業開始条件を満たしている第２の実行可能プログラムを、状態情報に基づき選定するステップと、選定した第２の実行可能プログラムを実行処理するステップと、を具備することを特徴とするロボット制御方法を提供する。
【００２７】
請求項１６に記載の発明は、請求項１５に記載のロボット制御方法において、複数の作業プログラムの各々は、対応の作業単位をロボットが完了する前提となる作業完了条件の記述を含み、第２の実行可能プログラムを選定するステップの前に、状態情報に基づいて、第１の実行可能プログラムが作業完了条件を満たしているか否かを判断し、それにより第１の実行可能プログラムの実行処理が完了したか否かを判断するステップをさらに具備するロボット制御方法を提供する。
【００２８】
請求項１７に記載の発明は、請求項１５又は１６に記載のロボット制御方法において、第２の実行可能プログラムを選定するステップの前に、ロボットが作業を遂行する環境をモデル化した内部モデルの状態を示す内部情報と、情報収集部が収集した状態情報とが互いに一致するか否かを判断し、それにより第１の実行可能プログラムの実行処理が完了したか否かを判断するステップをさらに具備するロボット制御方法を提供する。
【００２９】
請求項１８に記載の発明は、請求項１５又は１６に記載のロボット制御方法において、作業の遂行中にロボットが緊急停止したときに、ロボットが作業を遂行する環境をモデル化した内部モデルの状態を示す内部情報と、状態情報とが互いに一致するか否かを判断するステップと、内部情報と状態情報とが互いに一致すると判断したときに、緊急停止を解除して作業を再開するステップとをさらに具備するロボット制御方法を提供する。
【発明の効果】
【００３０】
請求項１に記載の発明によれば、ロボットの作業環境の状態を実時間で参照することで、実行段階にある作業プログラムのうち作業開始条件を満たしている第１の実行可能プログラムを適切に選択して、対応の作業単位をロボットに遂行させることができ、さらに、第１の実行可能プログラムの実行処理の進捗状況を考慮しながら、同様に作業開始条件を満たしている第２の実行可能プログラムを適切に選択して、次の作業単位をロボットに遂行させることができる。したがって、ロボットを用いた生産システムにおいて、生産システムの稼動状態を随時把握しながら、複数のワークに関連する作業を並行して効率良く１台のロボットに遂行させることができる。
【００３１】
請求項２に記載の発明によれば、生産システムの状況に応じて設定した所望のルールに従い、第１の実行可能プログラムを選択することができるので、システムの柔軟性が向上する。
【００３２】
請求項３又は４に記載の発明によれば、作業スクリプトを用いることにより、実行段階にある作業プログラムの特定が容易になる。
【００３３】
請求項５に記載の発明によれば、第１の実行可能プログラムの実行処理の完了を待たずに、第２の実行可能プログラムを実行処理することができるので、生産システムの効率がさらに向上する。
【００３４】
請求項６に記載の発明によれば、ロボットの作業環境の状態を実時間で参照することで、第１の実行可能プログラムが作業完了条件を満たしているか否かを判断基準として、処理部による実行処理が完了したか否かを迅速かつ正確に判断することができる。
【００３５】
請求項７に記載の発明によれば、ロボットが作業する実際の環境の状態を表す状態情報と、実際の環境の状態に影響されない内部情報とが、互いに一致するか否かを判断基準として、処理部による実行処理が完了したか否かを迅速かつ正確に判断することができる。
【００３６】
請求項８に記載の発明によれば、処理部による実行処理が異常な完了状態に至ったときに、それを即座に検知して、適切な例外処理作業単位を実行することが可能になる。
【００３７】
請求項９に記載の発明によれば、処理部による実行処理が完了したか否かを、経過時間を判断基準として、迅速かつ正確に判断することができる。
【００３８】
請求項１０に記載の発明によれば、処理部による実行処理が遅延したときに、それを即座に検知して、適切な例外処理作業単位を実行することが可能になる。
【００３９】
請求項１１に記載の発明によれば、ロボットを用いた生産システムにおいて、生産システムが緊急停止したときに、ロボットが作業する実際の環境の状態を表す状態情報と、実際の環境の状態に影響されない内部情報とが、互いに一致するか否かを判断基準として、緊急停止を解除して作業を再開することができる。したがって、生産システムに関する理解度の低いオペレータであっても、ロボットの作業を安全かつ確実に再開させることができる。
【００４０】
請求項１２に記載の発明によれば、生産システムに関する理解度の低いオペレータであっても、メッセージ信号を読み取ることにより、適切な対策を施すことができる。
【００４１】
請求項１３に記載の発明によれば、オペレータからの再開許可指令が得られない限り、作業を再開しないので、安全性が確保される。
【００４２】
請求項１４に記載の発明によれば、作業の再開時に、作業環境の実際の状態と作業プログラムの状態とを一致させることができるので、安全性が確保される。
【００４３】
請求項１５に記載の発明によれば、請求項１に記載の発明と同等の作用効果が奏される。
【００４４】
請求項１６に記載の発明によれば、請求項６に記載の発明と同等の作用効果が奏される。
【００４５】
請求項１７に記載の発明によれば、請求項７に記載の発明と同等の作用効果が奏される。
【００４６】
請求項１８に記載の発明によれば、請求項１１に記載の発明と同等の作用効果が奏される。
【発明を実施するための最良の形態】
【００４７】
以下、添付図面を参照して、本発明の実施の形態を詳細に説明する。全図面に渡り、対応する構成要素には共通の参照符号を付す。
図面を参照すると、図１は、本発明に係るロボット制御装置１０の基本構成を機能ブロック図で示す。ロボット制御装置１０は、複数の作業単位を個々に指令する複数の作業プログラム１２に従い、複数の作業単位を含む作業を複数のワークに対し並行してロボットに遂行させるものである。ここで、複数の作業プログラム１２の各々は、対応の作業単位をロボットが開始する前提となる作業開始条件１４の記述を含む。ロボット制御装置１０は、ロボットが作業を遂行する環境の状態を実時間で示す状態情報１６を収集する情報収集部１８と、情報収集部１８が収集した状態情報１６に基づいて、複数の作業プログラム１２の中で複数のワークに対し実行段階にある作業プログラムのうち、作業開始条件１４を満たしている第１の実行可能プログラム１２Ａを選定するプログラム選定部２０と、プログラム選定部２０が選定した第１の実行可能プログラム１２Ａを実行処理する処理部２２と、処理部２２が第１の実行可能プログラム１２Ａの実行処理を完了したか否かを判断するプログラム完了判断部２４とを備える。そして、プログラム選定部２０は、プログラム完了判断部２４の判断状況に応じて、実行段階にある作業プログラムのうち、作業開始条件を満たしている第２の実行可能プログラム１２Ｂを、処理部２２が次に実行処理する作業プログラムとして、状態情報１６に基づき選定する。
【００４８】
上記基本構成を有するロボット制御装置１０によれば、ロボットの作業環境の状態を実時間で参照することで、実行段階にある作業プログラムのうち作業開始条件１４を満たしている第１の実行可能プログラム１２Ａを適切に選択して、対応の作業単位をロボットに遂行させることができ、さらに、第１の実行可能プログラム１２Ａの実行処理の進捗状況を考慮しながら、同様に作業開始条件１４を満たしている第２の実行可能プログラム１２Ｂを適切に選択して、次の作業単位をロボットに遂行させることができる。したがって、ロボットを用いた生産システムにおいて、生産システムの稼動状態を随時把握しながら、複数のワークに関連する作業を並行して効率良く１台のロボットに遂行させることができる。
【００４９】
上記した作用効果は、プログラム完了判断部２４が、処理部２２による第１の実行可能プログラム１２Ａの実行処理が完了したと判断する前に、プログラム選定部２０が第２の実行可能プログラム１２Ｂを選定して、処理部２２が第２の実行可能プログラム１２Ｂを実行処理するように構成したときに、一層格別のものとなる。
【００５０】
図２は、図１のロボット制御装置１０の第１の発展的構成を機能ブロック図で示す。図２のロボット制御装置１０では、複数の作業プログラム１２の各々に、対応の作業単位をロボットが完了する前提となる作業完了条件２６の記述がさらに含まれているものとする。そして、プログラム完了判断部２４は、情報収集部１８が収集した状態情報１６に基づいて、第１の実行可能プログラム１２Ａが作業完了条件２６を満たしているか否かを判断し、それにより、処理部２２による第１の実行可能プログラム１２Ａの実行処理が完了したか否かを判断するように構成される。
【００５１】
図２に示すロボット制御装置１０によれば、ロボットの作業環境の状態を実時間で参照することで、第１の実行可能プログラム１２Ａが作業完了条件２６を満たしているか否かを判断基準として、処理部２２による実行処理が完了したか否かを迅速かつ正確に判断することができる。
【００５２】
図３は、図１のロボット制御装置１０の第２の発展的構成を機能ブロック図で示す。図３のロボット制御装置１０では、プログラム完了判断部２４は、ロボットが作業を遂行する環境をモデル化した内部モデルの状態を示す内部情報２８を有して、内部情報２８と、情報収集部１８が収集した状態情報１６とが、互いに一致するか否かを判断し、それにより、処理部２２による第１の実行可能プログラム１２Ａの実行処理が完了したか否かを判断するように構成される。
【００５３】
図３に示すロボット制御装置１０によれば、ロボットが作業する実際の環境の状態を表す状態情報１６と、実際の環境の状態に影響されない内部情報２８とが、互いに一致するか否かを判断基準として、処理部２２による実行処理が完了したか否かを迅速かつ正確に判断することができる。このような構成により、処理部２２による実行処理が異常な完了状態に至ったときに、それを即座に検知して適切な対策を施すことが可能になる。
【００５４】
図４は、図１のロボット制御装置１０の第３の発展的構成を機能ブロック図で示す。図４のロボット制御装置１０は、作業の遂行中にロボットを緊急停止させる停止制御部３０と、ロボットが作業を遂行する環境をモデル化した内部モデルの状態を示す内部情報２８を有して、内部情報２８と情報収集部１８が収集した状態情報１６とが互いに一致するか否かを判断する状態判断部３２と、状態判断部３２が、内部情報２８と状態情報１６とが互いに一致すると判断したときに、緊急停止を解除して作業を再開する再開制御部３４とをさらに備えて構成される。
【００５５】
図４に示すロボット制御装置１０によれば、ロボットを用いた生産システムにおいて、生産システムが緊急停止したときに、ロボットが作業する実際の環境の状態を表す状態情報１６と、実際の環境の状態に影響されない内部情報２８とが、互いに一致するか否かを判断基準として、緊急停止を解除して作業を再開することができる。したがって、生産システムに関する理解度の低いオペレータであっても、ロボットの作業を安全かつ確実に再開させることができる。
【００５６】
上記した本発明に係るロボット制御装置１０の構成を、作業プログラム１２に関する幾つかの実例を挙げながら、以下に補足して説明する。
【００５７】
ロボット制御装置１０がロボットに遂行させる複数の作業単位の各々は、１つのワークに対してロボットが遂行する１サイクルの作業の一部分であるから、複数の作業単位を作業順序に従って遂行することで、１サイクルの作業を完遂することができる。ここで、複数の作業単位を指令する複数の作業プログラム１２の実行順序を定義するデータリストを、本願で作業スクリプトと称する。作業スクリプトには、作業単位の名称と、その作業単位の遂行に際して使用される装置や機械の名称と、それら装置や機械の稼動状態とを、１行で記述したデータが、作業順序に従って複数行に渡り記述される。
【００５８】
生産システムに備えられる装置や機械は、生産プロセスの進行に伴い、稼動状態が変化する。例えば加工機械は、「稼動中」と「停止中」との大別して２つの状態の間で移行するが、さらに細分すれば、「電源切断中」、「初期化中」、「加工要求待機中」、「加工準備中」、「ワーク待機中」、「第１工程加工中」、「ワーク段取換中」、「第２工程加工中」、「完成品払出待機中」、「アラーム発生中」、「加工終了処理中」等の状態を示すことができる。ロボットが作業を遂行する環境の状態（すなわち生産システムの装置や機械の稼動状態）は、このような有限数の状態の集合と、初期状態と、特定条件下で初期状態から他の状態に遷移する過程を示す状態遷移とを用いて表すことができる。状態集合、状態遷移及び初期状態は、一般に装置や機械によって異なる。同一の装置や機械でも、生産システムにおける役割に応じて、状態集合、状態遷移及び初期状態は互いに異なるものになる。したがって、状態集合、状態遷移及び初期状態を用いて、生産システムにおける個々の装置や機械の状態を正確に表現できる。
【００５９】
作業スクリプトの各行の記述の例を以下に挙げる。例えば仮置台に置かれたワークを把持する作業単位は「Pick on a table」の名称を有し、この作業単位は「Table」及び「Robot」の２つの装置を必要とし、それら装置の初期（現在）状態がそれぞれ「Have on table」及び「Empty handed」であるときに、この作業単位を開始できる。この内容が、作業スクリプトでは、<Do Pick on a table, condition Table:Have on table, condition Robot:Empty handed/>と記述される。
【００６０】
また、作業単位「Pick on a table」を実行した結果、「Table」が「Have on table」状態から「Empty on table」状態に移行し、「Robot」が「Empty handed」状態から「Grasping in hand」状態に移行することを、作業スクリプトに記述することができる。この内容は、<Do Pick on a table, condition Table:Have on table, result Table:Empty on table, condition Robot:Empty handed, result Robot:Grasping in hand/>と記述される。
【００６１】
ところで、生産システムでは通常、複数の生産品に対する生産プロセスを並行的に進めており、それにより生産数量を増やしている。例として、４つのパレット「palette#1」、「palette#2」、「palette#3」、「palette#4」と、２つの仮置台「table#1」、「table#2」と、２つの加工機械「machine#1」、「machine#2」とを有して構成される加工システムを考察する。このシステムで、ロボットは、machine#1に対し、palette#1から未加工のワークを取り出してtable#1に仮置きし、machine#1から取り出した加工済ワークをtable#1に仮置きし、table#1に仮置きしていた未加工のワークを取り上げてmachine#1に供給し、table#1に仮置きしていた加工済ワークを取り上げてpalette#2に置くという、複数の作業単位を遂行し、またmachine#2に対し、palette#3から未加工のワークを取り出してtable#2に仮置きし、machine#2から取り出した加工済ワークをtable#2に仮置きし、table#2に仮置きしていた未加工のワークを取り上げてmachine#2に供給し、table#2に仮置きしていた加工済ワークを取り上げてpalette#4に置くという、複数の作業単位を遂行するものとする。ここで、２つの加工機械に対し、まず両者の加工対象である２つの未加工ワークをそれぞれの仮置台に置き、次いで加工済ワークと未加工ワークの取替えをそれぞれについて行い、最後に両者の加工済ワークをパレットに置くようにして、ワークの供給／取出作業を並行的に遂行させる。このようなロボットが行う全ての作業単位を単に時系列的に列記して作成した作業スクリプトは、下記のものである。
【００６２】
<Do Pick on palette#1/>
<Do Put on table#1/>
<Do Pick on palette#3/>
<Do Put on table#2/>
<Do Unload from machine#1/>
<Do Put on table#1/>
<Do Pick on table#1/>
<Do Load to machine#1/>
<Do Unload from machine#2/>
<Do Put on table#2/>
<Do Pick on table#2/>
<Do Load to machine#2/>
<Do Pick on table#1/>
<Do Put on palette#2/>
<Do Pick on table#2/>
<Do Put on palette#4/>
【００６３】
上記した複数の行のそれぞれが１つの作業単位を示し、ロボットは上記記載順序で作業を遂行する。ただし、この作業スクリプトでは、個々のワークに対する加工機械での加工内容が分からないので、例えばmachine#1での加工時間とmachine#2での加工時間とが異なる場合には、<Do Unload from machine#1/>の前、又は<Do Unload from machine#2/>の前に、ロボットが何も作業しない無用な待機時間が生じる。このような待機時間を解消するためには、作業単位の記載順序を詳細に検討する必要があり、熟練者でなければ作業スクリプトの作成は極めて困難である。しかも、加工時間やワークの種類等が変更されたときには、作業スクリプトの妥当性を検証し直さなければならない。
【００６４】
そこで本発明では、作業スクリプトを、生産プロセスに沿った複数のワークの各々の流れに着目して作成する。上記した作業例の場合、machine#1で加工中のwork piece#１と、palette#1から素材として与えられるwork piece#2とが、同じtable#1を通って送られ、machine#2で加工中のwork piece#3と、palette#3から素材として与えられるwork piece#4とが、同じtable#2を通って送られる。そこで、work piece#1及び#2の作業スクリプトを、下記のように作成する。
【００６５】
<Do Pick on palette#1/>
<Do Put on table#1/>
<Do Unload from machine#1/>
<Do Put on table#1/>
<Do Pick on table#1/>
<Do Load to machine#1/>
<Do Pick on table#1/>
<Do Put on palette#2/>
【００６６】
また、work piece#3及び#4の作業スクリプトを、下記のように作成する。
<Do Pick on palette#3/>
<Do Put on table#2/>
<Do Unload from machine#2/>
<Do Put on table#2/>
<Do Pick on table#2/>
<Do Load to machine#2/>
<Do Pick on table#2/>
<Do Put on palette#4/>
【００６７】
上記した２つの作業スクリプトはいずれも、個々のワークについて生産プロセスがどのように進むのかを表すものであり、このような作業スクリプトは、熟練を要することなく極めて容易に作成できる。そして、前述した無用な待機時間を解消するために、以下の手法を採用する。
【００６８】
まず、各作業スクリプトにおいて、次に遂行すべき作業単位がポインタで明示されるように構成する。作業スクリプトは、生産システムにおいて生産が要求されたときに、対象となるワークについて作成されるものであって、作成時には、ポインタは作業スクリプトの第１行を指している。ポインタは、ワークに対する生産プロセスが進むにつれて次の行に移行し、最終行の作業単位が終了した後は、作業スクリプト自体が削除される。本発明に係るロボット制御装置１０は、複数のワークに関する複数の作業スクリプトにおいて、ポインタが指している行に記載された作業開始条件１４を参照し、作業開始条件１４に規定されている装置や機械の現在状態を確認してその条件を満たしているか否かを判断する。そして、ポインタが指している作業単位の作業開始条件１４が満たされていない場合は、その作業単位を遂行できず、作業開始条件１４が満たされている場合に、その作業単位を遂行できるように構成する。
【００６９】
さらに詳述すると、ロボット制御装置１０はまず、存在する全ての作業スクリプトに対し、ポインタが指している作業単位における作業開始条件１４が満たされているか否かを確認し、条件が満たされている作業スクリプトを特定する。そして、特定した作業スクリプトの中から、予め定めたルールに従い、１つの作業スクリプトを選択する。このルールとしては、（１）個々の作業スクリプトに生産優先度を付して優先度の最も高いものを選択する、（２）作業スクリプトの残り行数が最も少ないものを選択する、（３）作業スクリプトの残り行数が最も多いものを選択する、（４）作業スクリプトの作成時期が最も古いものを選択する、（５）指定した生産完了時刻までの時間が最も短いものを選択する、（６）同種の生産品の生産数が最も少ないものを選択する、（７）作業開始条件１４内に規定されている装置や機械の個数や種類が最も少ないものを選択する、（８）作業開始条件１４に規定されている装置や機械の状態が一致しているものが最も多いものを選択する、等のルールが考えられる。これらルールは、いずれか１つのみを採用するだけでなく、複数のルールを組み合わせて採用して、作業スクリプトを選択することもできる。また、複数のルールに基づいて評価値を算出し、評価値の相加平均が最も高い作業スクリプトを選択するようにしてもよい。
【００７０】
個々の作業スクリプトは、生産プロセスにおけるロボットの一連の作業手順を全て記述するものではなく、生産プロセスに沿った個々のワークの流れに着目して作業手順を記述するものであるから、作成が容易であり、装置や機械の状態確認が容易であり、生産システムで並行的に生産されるワークの組み合わせを変更した場合にも修正する必要がない。また、ワークの種類毎に作業単位の種類や数が異なっていてもよく、必要であれば特定のワークのために特別な作業スクリプトを用意することもできる。したがって、全加工工程を完了したワークの加工精度を調べたところ、ある加工工程に問題が発見され、その加工工程だけを遂行し直すべく、その加工工程だけを記述する作業スクリプトをそのワークのためだけに用意するといったことが可能になる。
【００７１】
また、作業スクリプトは、次に遂行すべき作業単位を明示するポインタを備えているので、規定の順序で作業単位を遂行するだけではなく、作業単位を遂行した結果や生産システムの状況を考慮して、次に遂行すべき作業単位を変更することもできる。さらに、生産開始時の作業スクリプトの作成、生産完了時の作業スクリプトの削除、ポインタが指す行の作業開始条件１４が成立している作業スクリプトの特定、及び所定のルールに従う作業スクリプトの選択という各処理は、並行的に生産されるワークの種類や個数に関係なく実行することができる。
【００７２】
作業スクリプトは、装置選択肢の機能を有することができる。例えば、上記した生産システムの仕様を変更して、workpiece#1〜#4を、machine#1及び#2のどちらでも加工でき、table#1及び#2のどちらにも置けるように構成する。この場合、machine#1及び#2のいずれかを選択できることを「machines」で表し、table#1及び#2のいずれかを選択できることを「tables」で表して、workpiece#1及び#2についての作業スクリプトを以下のように記述できる。
【００７３】
<Do Pick on palette#1/>
<Do Put on tables/>
<Do Unload from machines/>
<Do Put on tables/>
<Do Pick on tables/>
<Do Load to machines/>
<Do Pick on tables/>
<Do Put on palette#2/>
【００７４】
この作業スクリプトでは、作業単位「Unload from machines」において、machine#1及び#2のどちらかが作業開始条件１４を満たしていればよく、先に作業開始条件１４を満たした加工機械に対してUnloadを行う。以降、machinesで表現された加工機械は、Unloadした加工機械として扱う。同様に、２行目の作業単位「Put on tables」において、作業開始条件１４を満たしたtable#1又は#2に対してPut onを行い、以降、tablesはPut onしたtableとして扱う。このようにして、作業スクリプトに記載した作業単位に使用する装置や機械を、作業開始条件１４に基づいて、幾つかの選択肢の中から定めることができる。装置選択肢の定義は、下記のように記述できる。
【００７５】
<Select machines among machine#1, machine#2/>
<Select tables among table#1, table#2/>
【００７６】
さらに、使用する加工機械を選択肢「machines」に従って決定する上記構成において、machine#1を使用する場合はtable#1を使い、machine#2を使用する場合はtable#2を使うように、装置や機械の組み合わせ方を制限することもできる。組合せの制限は、下記の記述で定義できる。
【００７７】
<Deforder machines, tables/>
<Workset machine#1, table#1/>
<Workset machine#2, table#2/>
【００７８】
上記の記述は、machinesでmachine#1を選択する場合にはtablesは必ずtable#1であり、machinesでmachine#2を選択する場合にはtablesは必ずtable#2であることを表している。またこの記述は、先にmachinesで加工機械が確定し、次にtablesで仮置台が確定するという、処理順序も規定している。この場合、作業スクリプトの２行目の「Put on tables」を処理する際には、加工機械がまだ確定していないので、そのままでは仮置台を決めることができない。そこで、先に３行目の「Unload from machines」の作業開始条件１４に基づいて加工機械を確定し、それに合わせて、２行目の作業開始条件１４に基づいて仮置台を確定するように構成する。そして仮置台が確定した後に、２行目の作業単位を遂行する。この構成では、３行目を先読みして加工機械を確定しているが、３行目の作業単位は２行目の作業単位が完遂するまで開始予約状態として扱われ、他の作業スクリプトにおいて作業開始条件１４が満たされないようにする。
【００７９】
装置選択肢を用いた装置や機械の割り当ては、上記したように作業スクリプトを１行ずつ実行しながら、未確定の装置選択肢に出会うたびに装置を割り当てる「Ondemand」モードと、作業スクリプトを開始する前に、全ての装置選択肢において装置や機械の割り当てを行い、全ての装置や機械が確定するまでは作業スクリプトの実行を開始しない「Reservation」モードとのいずれかによって実行できる。これら処理モードは、生産システムの規模、作業スクリプトの複雑さ、必要な装置の個数等に応じて、適当な方を選択すればよい。また、個々の作業スクリプト毎に処理モードを選択することもでき、処理モードの異なる作業スクリプトを並行的に実行することもできる。
【００８０】
本発明では、作業単位毎に作成された複数の作業プログラム１２が、作業スクリプトを用いて順次遂行される。生産システムの現在状態が作業単位の作業開始条件１４に適合したときに、その作業単位を次に遂行することができる。生産システムの現在状態とは、生産システム内に存在する装置や機械の現在の状態の集合によって表される。全ての装置や機械は、それ自体の状態を表す状態変数を有する。状態変数が取りうる値は、装置や機械の種類に対応して規定され、同じ種類の装置や機械は同じ状態変数の集合を有する。ここで、２台の加工機械machine#1及びmachine#2、１台のロボットrobot、２つの仮置台table#1及びtable#2、並びに４つのパレットpalette#1、palette#2、palette#3及びpalette#4により構成される生産システムを考える。
【００８１】
Machine#1及びmachine#2の状態集合はいずれも、<Class Machine State:PowerOff State:Initializing State:ManualOperation State:Loading State:ReadyToProcess State:Processing State:ToolChanging State:Completed State:Unloading State:AirPurging State:Empty/>で表記される。複数のStateは、それぞれ加工機械が下記の状態であることを表す。
PowerOff・・・電源が入っていない
Initializing・・・電源が投入され動作準備中
ManualOperation・・・手動操作中
Loading・・・ワークの供給を受けている最中
ReadyToProcess・・・加工準備が完了し、加工開始を待っている
Processing・・・加工中
ToolChanging・・・加工刃物を交換中
Completed・・・加工が完了し、加工済ワークの取り出しを待っている
Unloading・・・加工済ワークの取り出し中
AirPurging・・・加工済ワークのクーラント液除去中
Empty・・・ワークが無く、ワークの供給を待っている
【００８２】
Robotの状態集合は、<Class Robot State:PowerOff State:Initializing State:EmptyHanded State:Carrying State:Moving State:Grasping State:AtPerch/>で表記される。複数のStateは、それぞれロボットが下記の状態であることを表す。
PowerOff・・・電源が入っていない
Initializing・・・電源が投入され動作準備中
EmptyHanded・・・何も持っていない
Moving・・・何も持っていないで移動している
Carrying・・・物を持って搬送中
Grasping・・・物を把持している
【００８３】
Table#1及びtable#2の状態集合はいずれも、<Class Table State:Vacant State:Exist/>で表記される。複数のStateは、それぞれ仮置台が下記の状態であることを表す。
Vacant・・・仮置台には何も載っていない
Exist・・・仮置台にワークが載っている
【００８４】
Palette#1、palette#2、palette#3及びpalette#4の状態集合はいずれも、<Class Palette State:Nosupply State:Vacant State:Afford State:Full/>で表記される。複数のStateは、それぞれパレットが下記の状態であることを表す。
Nosupply・・・パレットがステーション位置に到着していない
Vacant・・・パレット上にはワークが無い
Afford・・・パレット上に供給可能なワークが存在する、或いはパレット上には新たなワークを収容可能な空き領域がある
Full・・・パレット上には新たなワークを収容可能な空き領域がある
【００８５】
生産システムの現在の状態は、個々の装置や機械の状態変数が、上記した状態集合の中でどのStateを有するかによって表現することができる。
例えば、生産システムの現在の状態が、<ExternalWorld machine#1:Processing machine#2:Completed robot:EmptyHanded table#1:Exist table#2:Vacant palette#1:Afford palette#2:Afford palette#3:Afford palette#4:Afford/>で記述されているときは、machine#1が加工中であり、machine#2が加工完了状態で加工済ワークの払い出しを待っている状態であり、robotは何も持っていない状態であり、table#1にはワークが置かれており、table#2はワークが置かれていない状態であり、palette#1〜#4はいずれも未加工ワークの供給又は加工済ワークの収納が可能な状態であることを示す。
【００８６】
生産システムの状態は、時々刻々と変化するが、そのような状態変化態様も、上記した状態集合の変化によって表現することができる。例えば、生産システムの上記した状態集合の記述が、時間の経過と共に下記のように変化したとする。
<ExternalWorld machine#1:Processing machine#2:Unloading robot:Carrying table#1:Exist table#2:Exist palette#1:Afford palette#2:Afford palette#3:Afford palette#4:Afford/>
この記述から、machine#2がCompletedからUnloadingに変化し、robotがEmptyHandedからCarryingに変化し、table#2がVacantからExistに変化していることが読み取れる。
【００８７】
個々の装置や機械の状態変数が変化する条件（状態遷移）は、例えば下記のように記述できる。
<Class Table FromState:Vacant ToState:Exist Transition:%Table.ExistConfirmSignal% = ON/>
<Class Table FromState:Exist ToState:Vacant Transition:%Table.ExistConfirmSignal% = OFF/>
この記述によれば、Table#1及び#2の状態がVacantからExistに変化するのは、%Table.ExistConfirmSignal%信号がONのときであり、ExistからVacantに変化するのは、%Table.ExistConfirmSignal%信号がOFFのときであることが分かる。
【００８８】
このように、状態集合（すなわち状態情報１６）を用いて生産システムを表現したものを、本願では生産システムの外部モデルと称する。一般に生産システムでは、多くの箇所に様々なスイッチやセンサ類が設置されており、これらスイッチやセンサからの情報が当該箇所の状態を表す信号としてロボット制御装置１０に伝えられる。ロボット制御装置１０は、それら種々の信号から、生産システムの個々の装置や機械の現在状態を識別して、上記した状態集合を作成し、それに基づき生産システムの状態を判断する。
【００８９】
ロボット制御装置１０は、外部モデルとは別に、生産システムの内部モデルを有することができる。内部モデルは、外部モデルと同様に、生産システムにおける複数の装置や機械の状態の集合であって、例えば下記のように記述される。
<InternalWorld machine#1:Processing machine#2:Completed robot:EmptyHanded table#1:Exist table#2:Vacant palette#1:Afford palette#2:Afford palette#3:Afford palette#4:Afford/>
【００９０】
外部モデルは、生産システムの随所に設置されたセンサ類からの信号の変化を前述した状態遷移に基づき状態変化として表現するのに対し、内部モデルは、ロボット制御装置１０が実行する作業単位の状態（すなわち内部情報２８）によって直接的に状態変化を表現する。例えば下記のように、作業スクリプトの各作業単位に、作業開始条件１４と作業完了条件２６との双方が定義されているとする。
<Do Pick on a table, condition Table:Exist, result Table:Vacant, condition Robot:EmptyHanded, result Robot:Grasping/>
この記述では、作業単位「Pick on a table」は、Tableの状態がExistでかつRobotの状態がEmptyHandedである場合に、作業を開始することができ、この作業単位が完了したときには、Tableの状態がVacantになり、Robotの状態がGraspingになることが示されている。このとき、外部モデルでは、下記のようにTable及びRobotの状態遷移が定義される。
【００９１】
<Class Table FromState:Vacant ToState:Exist Transition:%Table.ExistConfirmSignal% = ON/>
<Class Robot FromState:Moving ToState:EmptyHanded Transition:%Robot.CurrentMoveSpeed% = 0/>
<Class Robot FromState:EmptyHanded ToState:Grasping Transition:%Robot.HandGraspedConfirmSignal% = ON/>
<Class Robot FromState:Grasping ToState:EmptyHanded Transition:%Robot.HandEmptyConfirmSignal% = ON/>
【００９２】
例えば、外部モデルにおいて、Tableの状態がExistであり、Robotの状態がEmptyHandedであったときに、ロボット制御装置１０が作業単位Pick on a tableを実行して、仮置台の上に有るワークを把持したとする。ワークを把持するためには、ツール（ハンド）を閉じる必要があるので、この作業単位内で、ハンド閉信号である%Robot.HandGraspingCommandSignal%がONされる。ロボット制御装置１０がハンド閉信号を出力することで、この作業単位の処理は終了するが、ハンド閉信号を出力してからハンドが実際に閉じるまでには、数百ｍｓ程度の時間を要する。外部モデルでは、ハンドが実際に閉じたことを、センサ信号の%Robot.HandGraspedConfirmSignal%がONになることによって把握し、そのときに、Robotの状態遷移の定義に従い、Robotの状態変数がEmptyHanded状態からGrasping状態に変化する。その結果、「Pick on a table」の作業完了条件２６が満たされ、「Pick on a table」が完遂したと判断することもできる。
【００９３】
これに対し、同じ作業単位について、内部モデルでは外部モデルよりも先に状態が変化する。つまり、内部モデルでは、Pick on a tableでハンド閉信号を出力したと同時に（したがって実際にハンドが閉じて%Robot.HandGraspedConfirmSignal%がONになる前に）、状態変数を作業完了の状態に遷移させる。そして、外部モデルの状態集合（状態情報１６）と内部モデルの状態集合（内部情報２８）とが完全に一致した時点で、Pick on a tableが完遂したと判断し、次の作業単位の実行に移るように構成することもできる。
【００９４】
外部モデルと内部モデルとが一定時間以上経っても一致しなかった場合には、作業単位Pick on a tableでエラーが発生したとみなすことができる。このように、作業単位の実行と同時に内部モデルを更新する一方、作業単位における実際のセンサ情報に基づいて外部モデルを更新し、内部モデルと外部モデルとが一致するか否かを検証することで、当該作業単位が正常に完遂されたか、或いは遂行不良により異常な完了状態に至ったかを判断することができる。
【００９５】
このように、生産システム内の装置や機械の状態の変化を互いに異なる条件で表現する外部モデルと内部モデルとを比較することにより、作業単位の完了状態の正常性を判断することができる。この手法は、生産システムのモデルが変更されたり、作業単位の作業内容が変更されたりした場合にも、同様に実施することができる。内部モデルを持たない場合には、作業単位が正常に完了したか否かを判断する処理を、作業プログラム１２に導入する必要があるが、そのような完了判断処理は、生産プロセスの変更時には内容を書き換えなければならない。これに対し、外部モデルと内部モデルとの比較によって完了状態の正常性を判断するようにすれば、作業プログラム１２自体は変わらないので、生産プロセスが変更されても、個々の作業単位の作業プログラム１２を再利用できる利点がある。
【００９６】
また、外部モデルと内部モデルとを比較することは、生産システムの状態を監視して、装置や機械の故障等に伴う異常状態を自動的に検出する点でも有効である。正常時には、作業単位の実行により先に内部モデルが変化し、その後、外部モデルが同様に変化する。これに対し、一定時間経っても外部モデルが内部モデルに一致しない場合や、内部モデルが変化していないにもかかわらず外部モデルが変化した場合に、生産システムに異常が生じていると判断できる。この異常判断は、外部モデルと内部モデルとの比較を継続的に行うことにより、実時間で実行されるので、異常発生と同時にロボットを停止させたり回避行動を行わせたりすることができる。
【００９７】
上記した異常検出手法を、例として作業単位「Pick on a table」に関連して説明する。「Pick on a table」では、作業が完了すると、外部モデル及び内部モデルのいずれにおいても、Robotの状態がEmptyHandedからGraspingに変化する。そこで、一定時間経っても外部モデルがEmptyHandedのままであった場合には、%Robot.HandGraspedConfirmSignal%がONにならず状態遷移が生じなかったと考えて、Pick on a tableが成功しなかったと判断する。他方、一定時間内に外部モデル及び内部モデルの双方でRobotの状態がGraspingに変化したときには、Pick on a tableは正常に完了したとみなすことができ、次の作業単位に進むことができる。
【００９８】
「Pick on a table」の次の作業単位である「Load to machine#1」の遂行中に、table#1において把持したワークがハンドから脱落したと仮定する。その場合には、ハンドの把持ワーク不在信号である、%Robot.HandEmptyConfirmSignal%がONとなり、状態遷移に従い、外部モデルのRobotの状態がGraspingからEmptyHandedに変わる。他方、内部モデルにおけるRobotの状態はGraspingを維持する。この状態の相違は、内部モデルと外部モデルとを常時比較することで、直ちに検出できるので、適切な対策を迅速に施すことができる。また、ハンドから脱落したワークがtable#1に載り、table#1の光電管センサがワークの存在を感知したときには、内部モデルのtable#1の状態がvacantのままである一方で、外部モデルのtable#1の状態はvacantからexistに変化するので、table#1の状態の異常が検出される。したがって、ロボットへの対処に加えて、仮置台に対し適切な後処理を迅速に施すことができる。このように、生産システムに複数の異常状態が並行して発生したとしても、それぞれの内容に対応した適切な対処を迅速に行うことができる。
【００９９】
異常検出時にロボットに回避行動を行わせるための作業単位を、本願で例外処理作業単位と称する。例外処理作業単位は、通常の作業単位と同様に、作業開始条件１４及び作業完了条件２６と含んで作業スクリプトに列記される。例えば下記のように作業スクリプトを記述することにより、異常発生時に、通常の作業単位から例外処理作業単位に分岐して移行させることができる。
【０１００】
<Do Pick on palette#1/>
<Do Put on table#1/>
<Do Unload from machine#1/>
<Do Put on table#1/>
<Do Pick on table#1, Exception Goto 2/>
<1:Do Load to machine#1/>
<Do Pick on table#1/>
<Do Put on palette#2/>
<Stop/>
<2:Do Pick on palette#1/>
<Goto 1/>
【０１０１】
上記の作業スクリプトでは、５行目のPick on table#1で異常が発生したときに、Exception Goto 2が実行される。Goto 2が実行されると、１０行目の<2:Do Pick on palette#1/>が実行される。そして１０行目の作業単位を実行した後、１１行目の<Goto 1/>が実行され、それにより６行目（異常発生の次の行）の作業単位に移行する。つまり、５行目のPick on table#1においてtable#1からのワークの取り出しに失敗したので、１０行目のPick on palette#1を行ってpalette#1からワークを取り出し、次いで６行目のLoad to machine#1でmachine#1へワークを供給するのである。
【０１０２】
このように、異常発生時に例外的な作業を行う場合にも、予め設定された個々の作業単位を修正することなく、例外処理作業単位を適所に追加するように作業スクリプトを修正するだけで対処することができる。例外処理作業単位に不都合が含まれていた場合には、作業スクリプトを元に戻すだけで、例外処理作業単位を無効にすることができる。
【０１０３】
また、外部モデルと内部モデルとを比較して生産システムの異常を検出することは、生産システムが、機器の故障等によって緊急停止したときに、ロボットによる作業を安全に再開するためにも有効である。生産システムが緊急停止した場合には、その原因の分析や除去のために、オペレータがシステムに手動介入して、ワークを除去したり、ロボットを手動モードで操作したり、治具クランプやロボットハンドの開閉を行ったりすることが多い。オペレータによる手動介入が行われると、生産システムの状態が緊急停止時の状態から変動して、ロボットの作業プログラム１２との相関性が損なわれるので、そのままでは作業を再開することができない。そこでオペレータは、作業再開前に、生産システムの状態とロボットの作業プログラム１２との相関性を復旧させる作業を、適切に行う必要が有るが、上記した外部モデルと内部モデルとを使用することで、生産システムに関するオペレータの理解度に関わらず、適切な復旧作業を行うことができる。
【０１０４】
例えば、下記の外部モデルの状態でアラームが発生し、生産システムが緊急停止したと仮定する。
<ExternalWorld machine#1:Processing machine#2:Unloading robot:Carrying table#1:Exist table#2:Exist palette#1:Afford palette#2:Afford palette#3:Afford palette#4:Afford/>
このとき内部モデルも、下記のように同じ状態にある。
<InternalWorld machine#1:Processing machine#2:Unloading robot:Carrying table#1:Exist table#2:Exist palette#1:Afford palette#2:Afford palette#3:Afford palette#4:Afford/>
【０１０５】
アラームによってロボットが停止しているので、内部モデルは上記の状態を維持する。これに対し、外部モデルは、生産システムに設置されているセンサ情報を元に状態が変化する。したがって、例えば上記状態で、オペレータがtable#1からワークを取り除いたとすると、そのことはtable#1に設置されているセンサによって直ちに検出され、それにより、外部モデルのtable#1の状態は下記のようにExistからVacantに変わる。
<ExternalWorld machine#1:Processing machine#2:Unloading robot:Carrying table#1:Vacant table#2:Exist palette#1:Afford palette#2:Afford palette#3:Afford palette#4:Afford/>
【０１０６】
この状態で、生産システムを再稼動すべくロボット制御装置１０に起動要求が送られると、ロボット制御装置１０はまず外部モデルと内部モデルとが一致しているか否かを確認する。内部モデルは、ロボットがアラームで緊急停止したときの状態のままであり、その状態と外部モデルの状態とが一致していれば、作業単位を引き続き実行しても安全である。これに対し、外部モデルと内部モデルとが一致していなければ、そのまま作業単位を再開すると問題が生じる恐れがある。上記例では、外部モデルと内部モデルでtable#1の状態が異なるので、そのままでは作業を再開しないようにすることができる。
【０１０７】
ここで、ロボット制御装置１０に起動要求が送られたときに、ロボット制御装置１０は、まずオペレータに対して、外部モデルと内部モデルとの相違の内容（上記例ではtable#1がExistからVacantに変化したこと）を、例えばロボット制御装置１０に付設した表示器に表示する。さらに、そのままの状態でロボットを起動させてもよいか否かの確認（再開許可指令）を、表示機への表示によりオペレータに求めることができる。オペレータは、表示器に表示されている内容を確認した上で、例えばロボットに付設した入力装置から、再開許可又は不許可の指示を入力することができる。再開許可が入力された場合には、内部モデルを外部モデルと同じ内容に書き換えて、中断した作業単位を再開する。再開不許可が入力された場合には、ロボットの起動を中止する。
【０１０８】
さらに、外部モデルと内部モデルとの相違点に関して、原因及びその対策をオペレータに知らせるためのメッセージを事前に作成しておき、再開確認時に、このメッセージを表示器に表示するように構成することもできる。例えば上記例では、外部モデルのtable#1の状態がExistからVacantに変化した原因と対策を表示する。オペレータは、そのメッセージを読んで、例えばtable#1のセンサが適正に作動しているか否かを確認したり、新しいワークを手作業でtable#1に載せれば作業を再開できることを理解したりすることができる。このように、オペレータは、ロボット制御装置１０が発したメッセージに従うことで、外部モデルが表す生産システムに緊急停止時の状態を確実に復元することができる。このようなメッセージは、生産システムを熟知しているオペレータが予め作成してロボット制御装置１０に登録しておくことで、誰でもがメッセージに従って安全かつ確実に生産システムを再稼動させることができる。
【０１０９】
次に、図５〜図２２を参照して、本発明の好適な実施形態によるロボット制御装置の構成を、ロボットが実行する作業例に関連して説明する。
図５は、本発明の一実施形態によるロボット制御装置４０を組み込んだ、ロボットを用いた生産システムの全体概要図である。ロボット（すなわちロボット機構部）４２の手首先端には、ツール（図示実施形態ではハンド）４４が取り付けられる。パレットＰ１には、複数のワークＷ１が置かれ、パレットＰ２には、ワークＷ１とは種類の異なる複数のワークＷ２が置かれる。ロボット４２は、走行軸４６上に設置され、走行軸４６に沿って移動して、パレットＰ１のワークＷ１又はパレットＰ２のワークＷ２をツール４４に把持し、仮置台４８又は仮置台５０まで搬送してそこに一時的に載置する。仮置台４８は加工機械５２にワークを供給する際に使用され、仮置台５０は加工機械５４にワークを供給する際に使用される。
【０１１０】
加工機械５２が加工中でなければ、ロボット４２は、仮置台４８に置かれたワークＷ１又はＷ２をツール４４に把持して加工機械５２に供給する。加工機械５２は、ロボット４２からの加工開始命令により、ワークの加工を開始する。加工が完了すると、加工機械５２はロボット４２に、加工完了信号を送信する。加工完了信号を受け取ったロボット４２は、加工済みのワークＷ１又はＷ２を加工機械５２から取り出して、ワークＷ１はパレットＰ３に置き、ワークＷ２はパレットＰ４に置く。加工機械５４にワークを供給する場合も、仮置台５０が使用されること以外は、上記と同じ工程が実行される。
【０１１１】
ロボット４２及び走行軸４６は、それぞれ通信ケーブル５６及び５８を介してロボット制御装置４０に接続され、ロボット４２及び走行軸４６の動作がロボット制御装置４０により制御される。ロボット制御装置４０は、ネットワークケーブル６０により、作業プログラム作成装置６２に接続される。ロボット４２の手首先端には、ツール４４に隣接してカメラ６４が装着され、カメラ６４はカメラケーブル６６を介して画像処理装置６８に接続される。画像処理装置６８は、ネットワークケーブル７０、７２によって、ロボット制御装置４０及び作業プログラム作成装置６２にそれぞれ接続される。仮置台４８、５０にはそれぞれ、パレットＰ１から運んだワークＷ１用の位置決め治具４８ａ、５０ａと、パレットＰ２から運んだワークＷ２用の位置決め治具４８ｂ、５０ｂとが設置される。それら位置決め治具４８ａ、４８ｂ、５０ａ、５０ｂは、ディジタル信号入出力ケーブル（図示せず）を介してそれぞれロボット制御装置４０に接続される。
【０１１２】
図６は、図５の生産システムにおける主として制御系の構成を示すブロック図である。ロボット制御装置４０は、バス７４で相互接続されたＣＰＵ７６、メモリ７８、ネットワークインタフェース８０、ディジタル信号入出力回路８２、操作盤インタフェース８４及びサーボインタフェース８６を備える。図７に示すように、メモリ７８には、ＣＰＵ７６により実行され、ロボット制御装置４０の全体を制御する制御プログラム８８と、ロボット４２を動作させる作業プログラム９０及び９２とが格納される。作業プログラム９０は、ワークＷ１に関する作業をロボット４２がツール４４を用いて行うためのものであり、作業プログラム９２は、ワークＷ２に関する作業をロボット４２がツール４４を用いて行うためのものである。作業プログラム９０及び９２は、いずれも制御プログラム８８を用いて解釈され、ロボット４２及びツール４４の動作に変換される。これら作業プログラム９０及び９２は、作業プログラム作成装置６２によって作成される。
【０１１３】
ロボット制御装置４０のメモリ７８にはさらに、後述するように、マスタ作業スクリプト９４（９４ａ、９４ｂ、９４ｃ、９４ｄ）と、作業プログラム群９６（９６ａ、９６ｂ、９６ｃ、９６ｄ）と、作業スクリプト９８（９８１、９８２）と、外部モデル１００と、内部モデル１０２と、コンディションプロセステーブル１０４とが格納される。
【０１１４】
ネットワークインタフェース８０には、ネットワークケーブル６０を介して作業プログラム作成装置６２が接続されるとともに、ネットワークケーブル７０を介して画像処理装置６８が接続される。また、ディジタル信号入出力回路８２には、ディジタル信号入出力ケーブル１０６を介して、仮置台４８の治具４８ａ、４８ｂ及び仮置台５０の治具５０ａ、５０ｂが個々に接続され、ディジタル信号入出力ケーブル１０８を介して、加工機械５２、５４が個々に接続され、ディジタル信号入出力ケーブル１１０を介して、ロボット４２に装着されたツール４４が接続される。
【０１１５】
操作盤インタフェース８４には、操作盤ケーブル１１２を介して、教示操作盤１１４が接続される。教示操作盤１１４は、表示器１１４ａ及び入力ボタン１１４ｂを備え、教示操作盤１１４をオペレータが操作することにより、ロボット制御装置４０を介してロボット４２を手動モードで動作させることができる。また、サーボインタフェース８６には、通信ケーブル５６、５８を介して、ロボット４２の各制御軸及び走行軸４６のサーボモータ等のサーボ機構が接続される。
【０１１６】
作業プログラム作成装置６２には、ハードディスク装置１１６が接続される。図８に示すように、ハードディスク装置１１６には、ロボット４２が動作する複数の作業経路Ｒ（図示実施形態では後述するＲａ、Ｒｂ、Ｒｃ、Ｒｄ）のそれぞれに関連する作業プログラム定義データ１１８（図示実施形態では１１８ａ、１１８ｂ、１１８ｃ、１１８ｄ）と、加工対象の複数種類のワークＷ（図示実施形態ではＷ１、Ｗ２）のそれぞれに関連する作業部位定義データ１２０（図示実施形態では１２０１、１２０２）と、ワークＷ（Ｗ１、Ｗ２）の図面データ１２２（１２２１、１２２２）とが格納される。さらにハードディスク装置１１６には、後述するように、作業パターンデータ１２４、装置定義データ１２６、装置属性データ１２８、装置部品クラスデータ１３０、マスタ作業スクリプト１３２（１３２ａ、１３２ｂ、１３２ｃ、１３２ｄ）、及び作業プログラム群１３４（１３４ａ、１３４ｂ、１３４ｃ、１３４ｄ）が格納される。
【０１１７】
図示実施形態におけるロボット４２の作業経路Ｒは、（ｉ）パレットＰ１からワークＷ１を取り出し、仮置台４８に搬送して位置決め治具４８ａで位置決めし、加工機械５２に供給し、加工機械５２から加工済みのワークＷ１を取り出し、パレットＰ３に載置する第１の作業経路Ｒａと、（ｉｉ）パレットＰ２からワークＷ２を取り出し、仮置台４８に搬送して位置決め治具４８ｂで位置決めし、加工機械５２に供給し、加工機械５２から加工済みのワークＷ２を取り出し、パレットＰ４に載置する第２の作業経路Ｒｂと、（ｉｉｉ）パレットＰ１のワークＷ１を取り出し、仮置台５０に搬送して位置決め治具５０ａで位置決めし、加工機械５４に供給し、加工機械５４から加工済みのワークＷ１を取り出し、パレットＰ３に載置する第３の作業経路Ｒｃと、（ｉｖ）パレットＰ２のワークＷ２を取り出し、仮置台５０に搬送して位置決め治具５０ｂで位置決めし、加工機械５４に供給し、加工機械５４から加工済みのワークＷ２を取り出し、パレットＰ４に載置する第４の作業経路Ｒｄとを有する。
【０１１８】
作業経路Ｒａ、Ｒｂ、Ｒｃ、Ｒｄのそれぞれに関連する作業プログラム定義データ１１８ａ、１１８ｂ、１１８ｃ、１１８ｄは、ロボット４２の作業対象であるワークＷ１、Ｗ２の種類に応じて動作が変わる第１データ部分と、ワークＷ１、Ｗ２の種類によらず動作が同一の第２データ部分とから構成される。ワーク依存の第１データ部分は、作業対象のワークＷ１、Ｗ２のそれぞれに関連する作業部位定義データ１２０１、１２０２に基づいて、ワーク毎に異なる内容に作成され、それにより、ワークＷ１、Ｗ２のそれぞれに対する作業プログラム９０、９２が完成する。
【０１１９】
再び図６を参照すると、画像処理装置６８には、ハードディスク装置１３６が接続される。ハードディスク装置１３６には、作業対象のワークＷ（図示実施形態ではＷ１、Ｗ２）を検出するための基準となるワーク画像データ１３８（図示実施形態では１３８１、１３８２）が格納される。ワーク画像データ１３８１、１３８２は、ロボット４２の手首先端に取り付けたカメラ６４を用いてワークＷ１、Ｗ２を撮影することにより得られる。
【０１２０】
また、ロボット制御装置４０は、ネットワークケーブル１４０を介して、図示の生産システム（セル）を統合的に制御するセルコントローラ１４２に接続される。ロボット制御装置４０は、セルコントローラ１４２からの生産指示を、ネットワークインタフェース８０を経由して受信する。
【０１２１】
図９〜図１４は、上記した生産システムにおいて、ロボット制御装置４０の制御下でロボット４２が実行する作業（ハンドリング作業）の手順を示す。ここでは一例として、仮置台４８及び加工機械５２に関連する前述した第１の作業経路ＲａにおけるワークＷ１のハンドリング作業を説明するが、他の作業経路における作業も同様にして実行できる。
【０１２２】
まず、走行軸４６を起動して、パレットＰ１の正面（教示点）にロボット４２を移動する（ステップＳ２００）。次いで、ロボット４２のアームを旋回し、ツール４４をパレットＰ１の真上に移動する（ステップＳ２０１）。そして、ディジタル信号入出力回路８２を介して、ツール４４に対し「ハンド開」のディジタル信号を出力し、ツール４４を開く（ステップＳ２０２）。
【０１２３】
次に、ツール４４を、ワークＷ１を把持する把持位置（ワーク上の位置）に向けて移動する。このとき、ツール４４を、把持位置の真上の位置に移動した後、その真下の把持位置に向けて低速で移動する（ステップＳ２０３）。この動作は、ワークの種類に応じて把持時のロボット４２の姿勢が決まるものであるから、ワーク種類に依存する動作となる。
【０１２４】
そして、ディジタル信号入出力回路８２を介して、ツール４４に対し「ハンド閉」のディジタル信号を出力し、ツール４４を閉じてワークＷ１を把持する（ステップＳ２０４）。続いて、ツール４４を上方へ移動してワークＷ１をパレットＰ１から取り出す。このとき、ツール４４を、把持位置の真上の位置に低速で移動した後、速度を上げてさらに上方にワークＷ１を持ち上げる（ステップＳ２０５）。
【０１２５】
次に、ロボット４２のアームを右旋回するとともに走行軸４６を動作させて、ロボット４２を仮置台４８の正面に移動する（ステップＳ２０６）。次いで、ツール４４を位置決め治具４８ａの上方に移動する（ステップＳ２０７）。続いて、ツール４４を、位置決め治具４８ａがワークＷ１をクランプする解放位置に向けて移動する。このとき、ツール４４を、解放位置の上方の位置に移動した後、その下方の解放位置に向けて低速で移動し、位置決め治具４８ａにワークＷ１を取り付ける（ステップＳ２０８）。そして、ディジタル信号入出力回路８２を介して、ツール４４に対し「ハンド開」のディジタル信号を出力し、ツール４４を開く。これにより、ツール４４はワークＷ１を解放する（ステップＳ２０９）。
【０１２６】
次に、ツール４４を、解放位置の上方の位置に移動して、位置決め治具４８ａから離す（ステップＳ２１０）。そこで、ディジタル信号入出力回路８２を介して、位置決め治具４８ａに対し「クランプ閉」のディジタル信号を出力し、位置決め治具４８ａを閉じる。それにより、位置決め治具４８ａ上でワークＷ１を所定位置に正確に位置決めする（ステップＳ２１１）。
【０１２７】
次に、ツール４４を、位置決め治具４８ａにクランプされたワークＷ１の把持位置に向けて移動する（ステップＳ２１２）。次いで、把持位置でツール４４を閉じて、ワークＷ１を把持する（ステップＳ２１３）。そこで、位置決め治具４８ａに対し「クランプ開」のディジタル信号を出力し、位置決め治具４８ａを開く（ステップＳ２１４）。続いて、ツール４４を上方へ移動して、ワークＷ１を位置決め治具４８ａから取り出す。このとき、位置決め治具４８ａに対してツール４４を、低速で斜め上方へ移動した後、速度を上げてさらに上方にワークＷ１を持ち上げる（ステップＳ２１５）。
【０１２８】
次に、ロボット４２のアームを旋回して、加工機械５２の正面にツール４４を移動する（ステップＳ２１６）。次いで、加工機械５２のドア開口部から、加工機械５２の内部にツール４４を挿入する。このとき、加工機械５２にツール４４及びワークＷ１が接触しないように、ロボット４２のアームを真直ぐに伸ばして進入させる（ステップＳ２１７）。そして、加工機械５２のチャック（図示せず）の手前で一旦停止した後、低速でチャックにワークＷ１を装着する。そこで、ディジタル信号入出力回路８２を介して、加工機械５２に対し「チャック閉」のディジタル信号を出力し、チャックを閉じる（ステップＳ２１８）。
【０１２９】
次に、ツール４４に対し「ハンド開」のディジタル信号を出力し、ツール４４を開いてワークＷ１を解放する（ステップＳ２１９）。次いで、ツール４４を低速で、チャックから僅かに離れた位置に移動する（ステップＳ２２０）。続いて、加工機械５２にツール４４を接触させないように、ロボット４２のアームを真直ぐに伸ばして、加工機械５２のドア開口部からツール４４を引き出す（ステップＳ２２１）。
【０１３０】
次に、ディジタル信号入出力回路８２を介して、加工機械５２に対し、第１の作業経路Ｒａからの指令として「ワークＷ１の加工開始」のディジタル信号を出力する（ステップＳ２２２）。そして、加工機械５２から「ワークＷ１の加工完了」のディジタル信号がロボット制御装置４０に入力されるまで待機する（ステップＳ２２３）。ワークＷ１の加工完了後、加工機械５２の内部にツール４４を侵入させ（ステップＳ２２４）、加工済みのワークＷ１の把持位置に向けてツール４４を移動させる（ステップＳ２２５）。次いで、ツール４４を閉じて、ワークＷ１を把持する（ステップＳ２２６）。
【０１３１】
次に、加工機械５２に対し「チャック開」のディジタル信号を出力して、チャックを開く（ステップＳ２２７）。次いで、ツール４４を把持位置から僅かに移動して、加工機械５２のチャックから、ワークＷ１を真直ぐに取り出す（ステップＳ２２８）。続いて、ツール４４を加工機械５２から退避させる（ステップＳ２２９）。
【０１３２】
次に、ロボット４２のアームを右旋回させるとともに、走行軸４６を起動して、パレットＰ３の正面にロボット４２を移動させる（ステップＳ２３０）。次いで、パレットＰ３の真上にツール４４を移動する（ステップＳ２３１）。続いて、ツール４４を、パレットＰ３上のワークＷ１を載置する置き位置に移動して、ワークＷ１をパレットＰ３に置く。このとき、ツール４４を、置き位置の真上の位置に移動した後、その真下の置き位置に向けて低速で移動して、ワークＷ１をパレットＰ３に載せる（ステップＳ２３２）。このワーク載置動作は、ワークの種類に応じてパレットＰ３への載置時のロボット４２の姿勢が決まるものであるから、ワーク種類に依存する動作となる。
【０１３３】
次に、ツール４４を開いて、ワークＷ１を解放する（ステップＳ２３３）。次いで、ツール４４を、低速で置き位置の真上に移動した後、速度を上げてさらに上方に移動する（ステップＳ２３４）。最後に、ロボット４２のアームをロボット正面に向けて旋回するとともに、走行軸４６を動作させて、ロボット４２を初期の待機位置に移動する（ステップＳ２３５）。以上で、第１の作業経路ＲａにおけるワークＷ１に対する作業プログラム９０が終了する。
【０１３４】
なお、図１２〜図１４には、上述したステップＳ２００〜ステップＳ２３５に対応するツール４４の動作軌跡が示されている。図示の動作軌跡において、ワーク種類に依存する動作はステップＳ２０３及びステップＳ２３２に関する動作のみであり、他の動作軌跡で示す動作はワーク種類に依存しないものである。例えば、パレットＰ１にワークＷ２が載置されている場合に、上記した第１の作業経路Ｒａでの作業は、上記ステップＳ２０３及びステップＳ２３２に関する動作以外は、上記した動作と同様の動作になる。
【０１３５】
以下、上記したハンドリング作業をロボット４２に実行させるための、作業プログラム９０、９２及び作業スクリプト９８の内容、並びに制御プログラム８８による動作制御シーケンスを、図１５〜図２２を参照して説明する。なお、ロボット制御装置４０のＣＰＵ７６は、図１〜図４に示すロボット制御装置１０における情報収集部１８、プログラム選定部２０、処理部２２、プログラム完了判断部２４、停止制御部３０、状態判断部３２及び再開制御部３４の機能を有するものである。
【０１３６】
図１５は、上記したロボット４２によるハンドリング作業をワークの視点で記述した作業パターンデータ１２４を、フローチャート形式で示す。作業パターンデータ１２４は、ロボット４２の作業内容に対応して作成され、ハードディスク装置１１６に格納される。作業パターンデータ１２４では、個々の作業単位を行う場所としての生産システム内の装置や機械を、%Material_Palette%（素材供給用のパレット）、%Fixture%（仮置台の位置決め治具）、%Machine%（加工機械）、%Goods_Palette%（完成品積載用のパレット）という引数で記述している。これら引数に、実際の装置や機械の名称を設定することで、具体的な作業手順を表す作業スクリプトが作成される。例えば、上記ハンドリング作業を表す作業スクリプトは、個々の引数に下記の名称を設定することで作成される。
【０１３７】
%Material_Palette%・・・パレットＰ１
%Goods_Palette%・・・パレットＰ３
%Fixture%・・・位置決め治具４８ａ
%Machine%・・・加工機械５２
【０１３８】
引数に具体的な装置名を設定するには、下記のような装置定義データ１２６を使用する。装置定義データ１２６は。ハードディスク装置１１６に格納されている。なお、下記データ中、Palette_P1、Palette_P3、Fixture_F1、Machine_Leftはそれぞれ、図５のパレットＰ１、パレットＰ３、位置決め治具４８ａ、加工機械５２を示す。
【０１３９】
<Actions>
<Action run="W1P1P3MR">
<ARGUMENTS>
<OBJECT name="Material_Palette" val="Palette_P1"/>
<OBJECT name="Goods_Palette" val="Palette_P3"/>
<OBJECT name="Fixture" val="Fixture_F1"/>
<OBJECT name="Machine" val="Machine_Left"/>
</ARGUMENTS>
</Actions>
【０１４０】
ハードディスク装置１１６にはさらに、個々の装置や機械の名称、信号番号等を定めた装置属性データ１２８が、装置毎に作成されて格納されている。装置属性データ１２８には、各種の定数、信号番号、待ち時間、レジスタ番号等が定義されている。装置属性データ１２８は、加工機械５４、仮置台５０の位置決め治具５０ａ、５０ｂ、パレットＰ２及びパレットＰ４に対しても用意される。ここで、同種の装置である加工機械５２及び５４、位置決め治具４８ａ、４８ｂ、５０ａ及び５０ｂ、パレットＰ１、Ｐ２、Ｐ３及びＰ４は、それぞれ略同一のデータ構造を有し、通常は各種定数、信号番号、待ち時間、レジスタ番号の値が異なるだけである。そこで、ハードディスク装置１１６に格納した装置／部品クラスデータ１３０を用いて、先にデータ構造だけを定義した後、他のデータを含む装置属性データ１２８を作成している。
【０１４１】
図１６は、装置定義データ１２６を作業パターンデータ１２４に適用して得られる作業手順であるマスタ作業スクリプト１３２を、フローチャート形式で示す。マスタ作業スクリプト１３２は、作業可能な装置の組み合わせを装置定義データ１２６に記述することで、全ての組み合わせに対応したものを作成できる。図５の生産システムでは、装置及び機械の４つの組み合わせ（作業経路Ｒａ〜Ｒｄに対応）が考えられるので、下記の４つのマスタ作業スクリプト１３２ａ、１３２ｂ、１３２ｃ、１３２ｄが作成される。なお、Fixture_F2は位置決め治具４８ｂ、Fixture_F3は位置決め治具５０ａ、Fixture_F4は位置決め治具５０ｂ、Palette_P2はパレットＰ２、Palette_P4はパレットＰ４、Machine_Rightは加工機械５４をそれぞれ示す。
【０１４２】
<Actions>
<Action run="F1P1P3ML">（マスタ作業スクリプト１３２ａ）
<ARGUMENTS>
<OBJECT name="Material_Palette" val="Palette_P1"/>
<OBJECT name="Goods_Palette" val="Palette_P3"/>
<OBJECT name="Fixture" val="Fixture_F1"/>
<OBJECT name="Machine" val="Machine_Left"/>
</ARGUMENTS>
</Action>
<Action run="F2P2P4ML">（マスタ作業スクリプト１３２ｂ）
<ARGUMENTS>
<OBJECT name="Material_Palette" val="Palette_P2"/>
<OBJECT name="Goods_Palette" val="Palette_P4"/>
<OBJECT name="Fixture" val="Fixture_F2"/>
<OBJECT name="Machine" val="Machine_Left"/>
</ARGUMENTS>
</Action>
<Action run="F1P1P3MR">（マスタ作業スクリプト１３２ｃ）
<ARGUMENTS>
<OBJECT name="Material_Palette" val="Palette_P1"/>
<OBJECT name="Goods_Palette" val="Palette_P3"/>
<OBJECT name="Fixture" val="Fixture_F3"/>
<OBJECT name="Machine" val="Machine_Right"/>
</ARGUMENTS>
</Action>
<Action run="F2P2P4MR">（マスタ作業スクリプト１３２ｄ）
<ARGUMENTS>
<OBJECT name="Material_Palette" val="Palette_P2"/>
<OBJECT name="Goods_Palette" val="Palette_P4"/>
<OBJECT name="Fixture" val="Fixture_F4"/>
<OBJECT name="Machine" val="Machine_Right"/>
</ARGUMENTS>
</Action>
</Actions>
【０１４３】
作成されたマスタ作業スクリプト１３２ａ、１３２ｂ、１３２ｃ、１３２ｄは、ハードディスク装置１１６から、ネットワークインタフェース８０を経由してロボット制御装置４０のメモリ７８にコピーされ、マスタ作業スクリプト９４ａ、９４ｂ、９４ｃ、９４ｄとして格納される。
【０１４４】
作業プログラム作成装置６２は、作業パターンデータ１２４のステップＳ３００〜Ｓ３１０（図１５）のそれぞれに用意された作業ブロック（作業単位をさらに細分したもの）の複数の組み合わせを雛形として、装置定義データ１２６及び装置属性データ１２８を用いて、マスタ作業スクリプト１３２のステップＳ３１１〜Ｓ３２１（図１６）の作業単位のそれぞれを指令する複数（１１個）の作業プログラム（すなわち作業プログラム群１３４）を作成する。作業プログラム群１３４は、前述した４つのマスタ作業スクリプト１３２ａ、１３２ｂ、１３２ｃ、１３２ｄに対応して、４つの作業プログラム群１３４ａ、１３４ｂ、１３４ｃ、１３４ｄが作成される。作成された作業プログラム群１３４ａ、１３４ｂ、１３４ｃ、１３４ｄは、ハードディスク装置１１６から、ネットワークインタフェース８０を経由してロボット制御装置４０のメモリ７８にコピーされ、作業プログラム群９６ａ、９６ｂ、９６ｃ、９６ｄとして格納される。
【０１４５】
ロボット制御装置４０は、セルコントローラ１４２から生産開始指令を受けると、ディジタル信号入出力回路８２を介して、加工機械５２及び５４が加工中か否か、並びに位置決め治具４８ａ、４８ｂ、５０ａ及び５０ｂにワークがセットされているか否かを確認した上で、指令に合致する１つのマスタ作業スクリプト９４ａ、９４ｂ、９４ｃ又は９４ｄを選択する。選択したマスタ作業スクリプトは、コピーされて、作業スクリプト９８が作成される。作業スクリプト９８は、セルコントローラ１４２からの生産指示に基づき並行的に作業可能な複数のワークＷ１、Ｗ２にそれぞれ対応して作成され、作業スクリプト９８１、９８２としてメモリ７８に格納される。なお、セルコントローラ１４２から、生産指示に合わせて、作業に使用する加工機械や位置決め治具が指定される場合もあるが、この場合には、加工機械５２、５４、位置決め治具４８ａ、４８ｂ、５０ａ、５０ｂの状態を確認する必要はない。
【０１４６】
作業スクリプト９８が作成されると、ＣＰＵ７６は制御プログラム８８に従い、個々の作業スクリプト９８１、９８２内の作業開始条件１４（図１）を使用して、実行可能状態の作業スクリプト９８１、９８２が有るか否かを判断する。このとき、個々の作業スクリプト９８１、９８２内の作業開始条件１４（図１）を使用する。すなわち、ディジタル信号入出力回路８２を経由して、加工機械５２、５４、位置決め治具４８ａ、４８ｂ、５０ａ、５０ｂのそれぞれの状態を検出し、それらの状態が、各作業スクリプト９８１、９８２における実行段階の（すなわちポインタ指示されている）作業プログラムの作業開始条件１４を満たしているかを確認する。作業開始条件１４を満たしている作業スクリプトが複数有る場合には、既述の特定のルールに従い、それらのうちの１つを選択する。そしてＣＰＵ７６は、選択された作業スクリプトに対応する１つの作業プログラム群９６ａ、９６ｂ、９６ｃ、９６ｄの、当該作業スクリプトにおける実行段階の作業プログラムを実行処理する。
【０１４７】
上記した作業プログラムの作成手順は、作業プログラム作成装置６２が、作業パターンデータ１２４に対し、全ての装置組合せに対応する個数の装置定義データ１２６を用意して、全ての装置組合せに対応するマスタ作業スクリプト１３２を作成し、これに装置属性データ１２８および装置／部品クラスデータ１３０を入力して、全ての作業プログラム群１３４を予め作成するものである。或いは、ロボット制御装置４０のＣＰＵ７６が、制御プログラム８８に従い、作業に使用する装置を外部モデル１００に基づいて決定し、その装置情報を、ネットワークインタフェース８０を介して作業プログラム作成装置６２に送信することで、作業プログラム作成装置６２が、実際に使用する装置組合せに関する作業プログラム群１３４を作成するようにしてもよい。
【０１４８】
ロボット制御装置４０のＣＰＵ７６は、作業プログラムの実行完了後、ディジタル信号入出力回路８２を介して、加工機械５２、５４、位置決め治具４８ａ、４８ｂ、５０ａ、５０ｂの現在状態を検出し、作業スクリプトにおける実行した作業プログラムの作業完了条件２６（図２）が満たされているか否かを判断する。一定時間内に作業完了条件２６が満たされれば、作業スクリプトの当該行の実行が完了するので、ＣＰＵ７６は制御プログラム８８に従い、実行可能な作業スクリプト９８１、９８２を選択する。ＣＰＵ７６はこの作業を、全ての作業プログラムを完遂するまで繰り返す。ＣＰＵ７６は制御プログラム８８に従い、ディジタル信号入出力回路８２を介して、加工機械５２、５４、位置決め治具４８ａ、４８ｂ、５０ａ、５０ｂの現在状態を常時検出し、メモリ７８内の外部モデル１００を随時更新する。また、作業スクリプトの作業完了条件２６が満たされたときに、ＣＰＵ７６は制御プログラム８８に従い、内部モデル１０２を更新する。さらにＣＰＵ７６は、制御プログラム８８に従い、外部モデル１００と内部モデル１０２との比較を行い、両者が一致しない場合には、既述の例外処理作業単位を実行する。
【０１４９】
図１７〜図２１は、制御プログラム８８における動作シーケンスを示す。制御プログラム８８は、メモリ７８内に、図２２に示すコンディションプロセステーブル（ＣＰＴ）１０４を作成し、このＣＰＴ１０４を作業領域に用いて、処理を進める。以下、図面に従って、動作シーケンスの個々のステップを説明する。
【０１５０】
ステップＳ３３０は、メモリ７８内の全ての作業スクリプト９８に対して、ステップＳ４０６までの処理を繰り返し実行することを宣言する。
ステップＳ３３１では、作業領域としてのＣＰＴ１０４をメモリ７８に作成する。同時に、ＣＰＴ１０４の全ての行の全ての欄の値を初期化する。
ステップＳ３３２では、処理中の作業スクリプトにおいてポインタが指示している行を、実行行とする。
【０１５１】
ステップＳ３３３は、実行行に記載されている個々のＣｏｎｄｉｔｉｏｎタグ<Condition />に対し、ステップＳ３４３までの処理を繰り返し実行することを宣言する。
ステップＳ３３４では、Ｃｏｎｄｉｔｉｏｎタグの装置や機械の名称（オブジェクト名）を取り出し、これをＣＰＴ１０４のＯｂｊｅｃｔ欄に記入する。
ステップＳ３３５では、Ｏｂｊｅｃｔ欄に記入したオブジェクト名が、装置選択肢か否かを判断する。装置選択肢は、作業スクリプト内のＳｅｌｅｃｔタグ<Select/>によって定義されている。
【０１５２】
ステップＳ３３５でオブジェクト名が装置選択肢でない場合には、ステップＳ３３６で、ＣＰＴ１０４のＳｅｌｅｃｔ欄にオブジェクト名を記入する。
ステップＳ３３５でオブジェクト名が装置選択肢であった場合には、ステップＳ３３７で、Ｓｅｌｅｃｔタグに一致する装置選択肢があるか否かを確認する。
ステップＳ３３７で装置選択肢と一致するＳｅｌｅｃｔタグがない場合には、Ｃｏｎｄｉｔｉｏｎタグで指示された装置選択肢は正しくなく無効であるから、ステップＳ３３８で、ＣＰＴ１０４をメモリ７８から消去して、この作業スクリプトの処理を終了し、ステップＳ３３０に戻る。
【０１５３】
ステップＳ３３７で一致するＳｅｌｅｃｔタグが見つかった場合には、ステップＳ３３９で、Ｓｅｌｅｃｔタグのamong以下でカンマで区切られた装置選択肢候補の数だけ、ＣＰＴ１０４に行を追加し、ＣＰＴ１０４のＳｅｌｅｃｔ欄に装置選択肢候補となる装置名を記入する。
ステップＳ３４０では、ＣＰＴ１０４の各行のＣｏｎｄｉｔｉｏｎ欄に、Ｃｏｎｄｉｔｉｏｎタグにおいて、装置名に続いてコロンで区切られて次のカンマまでの間に記述されるＣｏｎｄｉｔｉｏｎを記入する。
【０１５４】
ステップＳ３４１では、作業スクリプトの実行行にＯｂｊｅｃｔ欄又はＳｅｌｅｃｔ欄に記入された装置名と同じものが、Ｒｅｓｕｌｔタグ<Result/>として指定されているか否かをチェックする。
Ｏｂｊｅｃｔ欄又はＳｅｌｅｃｔ欄に記入された装置名と同じものがＲｅｓｕｌｔタグで指定されていた場合には、ステップＳ３４２でＣＰＴ１０４のＲｅｓｕｌｔ欄に、Ｒｅｓｕｌｔタグにおいて装置名に続いてコロンで区切られて次のカンマまでの間に記述されるＲｅｓｕｌｔ Ｃｏｎｄｉｔｉｏｎを記入する。
Ｏｂｊｅｃｔ欄又はＳｅｌｅｃｔ欄に記入された装置名と同じものがＲｅｓｕｌｔタグで指定されていない場合には、ステップＳ３４３でＣＰＴ１０４のＲｅｓｕｌｔ欄をNULL（図１３では−で表現されている）を記入する。
【０１５５】
ステップＳ３４４は、ステップＳ３３３からステップＳ３４０までの処理が、作業スクリプトの実行行に記載の各Ｃｏｎｄｉｔｉｏｎに対して繰り返し行われることを表す。
ステップＳ３４４が終了し、処理がステップＳ３４５に達したときには、ＣＰＴ１０４には、全てのＣｏｎｄｉｔｉｏｎで指示されたオブジェクト名がＯｂｊｅｃｔ欄に記入され、オブジェクト名が装置選択肢候補であった場合には、Ｓｅｌｅｃｔ欄に装置選択肢候補が記入され、オブジェクトの作業開始条件１４がＣｏｎｄｉｔｉｏｎ欄に記入される。
【０１５６】
ステップＳ３４５からステップＳ３５０は、作業スクリプト内のＤｅｆｏｒｄｅｒタグ<Deforder/>に基づき、装置選択順の処理を行う。作業スクリプト内にはＤｅｆｏｒｄｅｒタグは１つだけ記述されている。
ステップＳ３４５では、作業用の変数Ｎを１に初期化する。
ステップＳ３４６は、Ｄｅｆｏｒｄｅｒタグでカンマによって区切られた装置選択順指定子に対し、ステップＳ３４７〜Ｓ３４８の処理を繰り返し行うことを宣言する。
【０１５７】
ステップＳ３４７では、Ｄｅｆｏｒｄｅｒタグの第Ｎ番目の装置選択順指定子と同じ名称の装置を、ＣＰＴ１０４のＯｂｊｅｃｔ欄で探し、この行のＤｅｆｏｒｄｅｒ欄にＮを記入する。
ステップＳ３４８では、変数Ｎを１だけ加算する。
ステップＳ３５０では、ＣＰＴ１０４内でＤｅｆｏｒｄｅｒ欄が未定義のものに対し、Ｄｅｆｏｒｄｅｒ欄にＮを入力する。
【０１５８】
ステップＳ３５１では、後の処理のために変数Ｎの値を変数Ｌに保存する。
ステップＳ３５２〜Ｓ３５５では、作業スクリプト内のＷｏｒｋｓｅｔタグ<Workset/>による装置組合せ指定子の処理を行う。
ステップＳ３５２では、作業スクリプトに記述されている複数のＷｏｒｋｓｅｔタグの各々について、ステップＳ３５３〜Ｓ３５５の処理を繰り返し行うことを宣言する。
【０１５９】
ステップＳ３５３では、Ｗｏｒｋｓｅｔタグの第１番目のパラメータである装置名をＣＰＴ１０４のＳｅｌｅｃｔ欄から探し、一致する行のＷｏｒｋｓｅｔ欄にＷｏｒｋｓｅｔの第２番目のパラメータである装置名を記入する。
ステップＳ３５４では、Ｗｏｒｋｓｅｔタグの第２番目のパラメータである装置名をＣＰＴ１０４のＳｅｌｅｃｔ欄から探し、一致する行のＷｏｒｋｓｅｔ欄にＷｏｒｋｓｅｔの第１番目のパラメータである装置名を記入する。
【０１６０】
ステップＳ３５６では、作業用の変数Ｎを１に初期化する。
ステップＳ３５７は、変数Ｎと変数Ｌとが互いに一致するまで、ステップＳ３７１までの処理を繰り返すことを宣言する。
ステップＳ３５８では、ＣＰＴ１０４内でＤｅｆｏｒｄｅｒ欄がＮのものを探す。
ステップＳ３５９では、ステップＳ３５８で見つかった行のＳｅｌｅｃｔ欄に記入されている装置の状態を、外部モデル１００でチェックする。
ステップＳ３６０では、Ｓｅｌｅｃｔ欄の装置の状態が外部モデル１００と一致しているか否かを判断する。
【０１６１】
ステップＳ３６０でＳｅｌｅｃｔ欄の装置の状態が外部モデル１００と一致していないと判断した場合には、ステップＳ３６１で、ＣＰＴ１０４の最後までチェックしたか否かを判断する。
ステップＳ３６１でＣＰＴ１０４の最後までチェックしていないと判断した場合には、ステップＳ３６２で、ＣＰＴ１０４における次の行から、Ｄｅｆｏｒｄｅｒ欄がＮのものを探す。
【０１６２】
ステップＳ３６１でＣＰＴ１０４の最後までチェック済みと判断した場合には、ステップＳ３６３で、外部モデル１００に一致する装置が見つからなかったのでこの作業スクリプトに対する装置の割り当てが失敗したと判断する。
そしてステップＳ３６４で、ＣＰＴ１０４をメモリ７８から消去して、この作業スクリプトの処理を終了し、他の作業スクリプトの処理のためにステップＳ３３０に戻る。
【０１６３】
ステップＳ３６０でＳｅｌｅｃｔ欄の装置の状態が外部モデル１００と一致していると判断した場合には、ステップＳ３６５以降の処理に進む。
ステップＳ３６５では、Ｗｏｒｋｓｅｔ欄に装置組合せ指定子が記入されているか否かをチェックする。記入されていなければ、１つの装置の割り当てが完了したことになり、ステップＳ３７４で、ＣＰＴ１０４の第Ｎ行のＨｉｔ欄を１にし、ステップＳ３７１に進む。
【０１６４】
ステップＳ３６５で装置組合せ指定子が記入されていると判断した場合には、ステップＳ３６６で、Ｗｏｒｋｓｅｔ欄に記入されている装置をＣＰＴ１０４のＳｅｌｅｃｔ欄から探し、ステップＳ３６７で、装置が見つかったか否かを判断する。
ステップＳ３６７で装置が見つからなかったと判断した場合には、ステップＳ３７２に進み、装置の割り当てが失敗したとみなす。そして、ステップＳ３７３で、ＣＰＴ１０４をメモリ７８から消去して、この作業スクリプトの処理を終了する。
【０１６５】
ステップＳ３６７で装置が見つかったと判断した場合には、ステップＳ３６８で、装置が見つかったＣＰＴ１０４の第Ｍ行のＣｏｎｄｉｔｉｏｎ欄を、外部モデル１００によりチェックする。そしてステップＳ３６９で、Ｃｏｎｄｉｔｉｏｎ欄と、外部モデル１００とが一致しているか否かを判断する。
ステップＳ３６９で一致していると判断されなかった場合には、ステップＳ３６６に戻り、Ｗｏｒｋｓｅｔ欄に記入されている装置をＣＰＴ１０４のＳｅｌｅｃｔ欄から探す。
【０１６６】
ステップＳ３６９で一致していると判断された場合には、装置組合せ指定子に記入された２つの装置が一度に割り当てられたことになるので、ステップＳ３７０で、ＣＰＴ１０４の第Ｎ行のＨｉｔ欄と第Ｍ行のＨｉｔ欄とをいずれも１にする。
ステップＳ３７１では、Ｎを１加算し、ステップＳ３７５で、ステップＳ３５７に戻り、ＬとＮとが一致するまでステップＳ３５８〜Ｓ３７１を繰り返す。
【０１６７】
処理がステップＳ３７６に達したときには、１つの作業スクリプトに対する処理が完了したことを意味する。そこでステップＳ３３０に戻り、メモリ７８内の全作業スクリプトに対して、ステップＳ３３０〜Ｓ３７５の処理を繰り返す。
ステップＳ３７７以降の処理は、メモリ７８内の全作業スクリプトに対する処理が完了した後に行われる。ここでメモリ７８内には、装置割当てが完成した作業スクリプトに対するＣＰＴ１０４が残されている。
【０１６８】
ステップＳ３７７では、メモリ７８に残されているＣＰＴ１０４から１つを選択する。選ばれなかったＣＰＴ１０４は、ステップＳ３７８でメモリ７８内から削除され、メモリ７８内には１つのＣＰＴ１０４だけが残される。
ステップＳ３７９までの処理によって、メモリ７８内に残されたＣＰＴ１０４に該当する作業スクリプトのポインタが指している行を実行することが決定される。
【０１６９】
ステップＳ３８０では、ＣＰＴ１０４のＨｉｔ欄が１の行の、Ｓｅｌｅｃｔ欄の記入内容を作業プログラム作成装置６２に転送する。
ステップＳ３８１では、作業スクリプトが指している行の内容を、作業プログラム作成装置６２に転送する。
ステップＳ３８２及びステップＳ３８３は、制御プログラム８８での処理シーケンスではなく、作業プログラム作成装置６２における処理であるが、制御プログラム８８の処理シーケンスと同期して処理を行うため、ここでは１つの処理シーケンスとして表現する。
【０１７０】
ステップＳ３８２では、Ｓｅｌｅｃｔ欄の内容の装置を装置属性データ１２８から探し、作業スクリプトの内容を作業パターンデータ１２４から探し、ステップＳ３８０で転送されたＳｅｌｅｃｔ欄の記入内容から装置定義データ１２６を作成する。そして、作業パターンデータ１２４に装置定義データ１２６を入力することで、マスタ作業スクリプト１３２を作成し、これに装置属性データ１２８を入力して、作業プログラム群１３４を作成する。
【０１７１】
ステップＳ３８３では、作成された作業プログラム群を、ネットワークを使って転送し、メモリ７８に格納する。
ステップＳ３８４では、メモリ７８に格納された作業プログラムを実行する。
ステップＳ３８５では、ＣＰＴ１０４におけるＨｉｔ欄が１の各行のＳｅｌｅｃｔ欄に記入されている装置の状態を、外部モデル１００によりチェックし、Ｒｅｓｕｌｔ欄に記入されているＣｏｎｄｉｔｉｏｎと一致するか否かを確認する。
【０１７２】
ステップＳ３８６では、Ｈｉｔ欄が１の行の装置の状態が外部モデル１００と一致するか否かを判断する。ＣＰＴ１０４におけるＨｉｔ欄が１の全ての行が一致していると判断された場合には、ステップＳ３８７に移行し、一致していなければステップＳ３９３に移行する。
ステップＳ３８７に処理が達すると、作業スクリプトにおいてポインタが指示している１行の実行が完了したことになる。
【０１７３】
ステップＳ３８８では、作業スクリプトのポインタを次の行に進める。
ステップＳ３８９では、作業スクリプトのポインタ指示行の命令がＧＯＴＯ命令であるか否かを判断し、ＧＯＴＯ命令であった場合は、ステップＳ３９２で、ＧＯＴＯ命令の飛び先を作業スクリプトの中から探してポインタをこの命令に合わせる。ＧＯＴＯ命令でなければ、ステップＳ３９０に進む。
【０１７４】
ステップＳ３９０では、作業スクリプトのポインタ指示行の命令がＤＯ命令であるか否かを判断し、ＤＯ命令であった場合は、ステップＳ３３０に戻って再びメモリ７８内の全作業スクリプトに対する処理を行う。ＤＯ命令でなければ、ステップＳ３９１に進む。
ステップＳ３９１では、作業スクリプトのポインタ指示行の命令がＳＴＯＰ命令であるか否かを判断し、ＳＴＯＰ命令であった場合には、この作業スクリプトの処理が完了したとみなして、ステップＳ３９６で、作業スクリプトをメモリ７８から削除する。ＳＴＯＰ命令でなければ、実行可能な命令でないと判断して、この命令を無視するためにステップＳ３８８に戻ってポインタを先に進める。
【０１７５】
ステップＳ３８６で一致していないと判断された場合には、ステップＳ３９３で、タイムアウトが発生しているか否かを確認する。タイムアウトが発生していなければ、ステップＳ３８５に戻ってチェックを繰り返す。
ステップＳ３９３でタイムアウトが発生していると判断された場合には、ステップＳ３９４で、現在実行中の行に例外処理<Exception Goto />が定義されているか否かを判断する。
【０１７６】
例外処理が定義されていれば、ステップＳ３９５で、例外処理で指定された飛び先を作業スクリプトから探して、ポインタをこれに合わせ、ステップＳ３８９に分岐する。
例外処理が定義されていなければ、ステップＳ３９７以降の、アラーム停止と再開処理に以降する。
ステップＳ３９７では、ロボット４２をアラーム状態にして緊急停止する。
【０１７７】
ステップＳ３９８では、教示操作盤８４の表示器８４ａに、停止時の作業プログラム名、作業スクリプト名、作業スクリプトの実行行の内容、ＣＰＴ１０４のＳｅｌｅｃｔ欄と外部モデル１００との不一致の状況を表示し、オペレータにアラームの詳細を知らせる。
ステップＳ３９９では、教示操作盤８４の入力部８４ｂを使ったオペレータによる起動コマンドを待つ。
【０１７８】
ステップＳ４００では、外部モデル１００と内部モデル１０２とが全て一致しているか否かを確認する。ステップＳ４００で一致していると判断した場合には、ステップＳ４０６に移行して、ロボットのアラームを解除し、停止していた箇所から作業プログラムを実行して作業を再開する。
ステップＳ４００で一致していないと判断した場合には、ステップＳ４０１で、教示操作盤８４の表示部８４ａに外部モデル１００と内部モデル１０２との違いを表示することで、オペレータがモデル間の不一致の内容を理解できるようにする。
【０１７９】
ステップＳ４０２では、外部モデル１００と内部モデル１０２との違いから、適切な原因と対策のメッセージを表示器８４ａに表示する。
ステップＳ４０３では、表示器８４ａに、外部モデル１００と内部モデル１０２との不一致を無視して再開するか否かの、オペレータへの問い合わせメッセージと、再開するか否かの選択メニューとを表示する。
【０１８０】
ステップＳ４０４では、ステップＳ４０３で表示したメッセージに対し、オペレータが無視して再開することを選択したか否かを判断し、選択した場合には、ステップＳ４０５で、外部モデル１００の内容を全て内部モデル１０２にコピーして、強制的に内部モデル１０２と外部モデル１００とを一致させる。そしてステップＳ４０６で、ロボット４２のアラームを解除し、停止していた箇所から作業プログラムを再開する。
ステップＳ４０４でオペレータが無視して再開することを選択しなかった場合には、再びステップＳ３９９に戻って、オペレータが起動コマンドを入力するのを待つ。
以上が制御プログラム８８の制御動作シーケンスである。
【０１８１】
本発明は、上記した実施形態に限定されず、特許請求の範囲の記載内で様々な修正を施すことができる。例えば、ロボットが作業する環境の状態をセンサから取り込む構成に代えて、シミュレーションソフトで擬似的な作業環境の状態を作成し、この擬似的状態をランダムまたは一定のルールで変動させることで、ロボットの作業状況を確認するように構成することもできる。また、ロボット制御装置が実行する作業単位、次に行う作業単位を選択する手段、及び作業環境の状態を、シミュレーションソフトを用いてオフラインプログラミング装置でシミュレーションすることにより、ロボットの作業状況を予めオフラインで確認しておくこともできる。
【図面の簡単な説明】
【０１８２】
【図１】本発明に係るロボット制御装置の基本構成を示す機能ブロック図である。
【図２】図１のロボット制御装置の第１の発展的構成を示す機能ブロック図である。
【図３】図１のロボット制御装置の第２の発展的構成を示す機能ブロック図である。
【図４】図１のロボット制御装置の第３の発展的構成を示す機能ブロック図である。
【図５】本発明の一実施形態によるロボット制御装置を組み込んだ、ロボットを用いた生産システムの全体概要図である。
【図６】図５の生産システムにおける制御系の構成を示すブロック図である。
【図７】図６の制御系におけるロボット制御装置のメモリの図である。
【図８】図６の制御系におけるハードディスク装置の図である。
【図９】図５の生産システムにおいてロボットが実行する作業の手順を示すフローチャートである。
【図１０】図５の生産システムにおいてロボットが実行する作業の手順を示すフローチャートである。
【図１１】図５の生産システムにおいてロボットが実行する作業の手順を示すフローチャートである。
【図１２】図５の生産システムにおいてロボットが実行する作業の手順を破線矢印で示す概要図である。
【図１３】図５の生産システムにおいてロボットが実行する作業の手順を破線矢印で示す概要図である。
【図１４】図５の生産システムにおいてロボットが実行する作業の手順を破線矢印で示す概要図である。
【図１５】図５の生産システムで用いられる作業パターンデータの図である。
【図１６】図５の生産システムで用いられるマスタ作業スクリプトの図である。
【図１７】図５の生産システムで用いられる制御プログラムの動作シーケンスを示す図である。
【図１８】図５の生産システムで用いられる制御プログラムの動作シーケンスを示す図である。
【図１９】図５の生産システムで用いられる制御プログラムの動作シーケンスを示す図である。
【図２０】図５の生産システムで用いられる制御プログラムの動作シーケンスを示す図である。
【図２１】図５の生産システムで用いられる制御プログラムの動作シーケンスを示す図である。
【図２２】図５の生産システムで用いられるコンディションプロセステーブルの図である。
【符号の説明】
【０１８３】
１０、４０    ロボット制御装置
１２    作業プログラム
１４    作業開始条件
１６    状態情報
１８    情報収集部
２０    プログラム選定部
２２    処理部
２４    プログラム完了判断部
２６    作業完了条件
２８    内部情報
３０    停止制御部
３２    状態判断部
３４    再開制御部
４２    ロボット
４４    ツール
４８、５０    仮置台
５２、５４    加工機械
７８    メモリ
８８    制御プログラム
９４    マスタ作業スクリプト
９６    作業プログラム群
９８    作業スクリプト
１００    外部モデル
１０２    内部モデル
１０４    コンディションプロセステーブル
１１６    ハードディスク装置
【図１】
2006343828.tif 000003
【図２】
2006343828.tif 000004
【図３】
2006343828.tif 000005
【図４】
2006343828.tif 000006
【図５】
2006343828.tif 000007
【図６】
2006343828.tif 000008
【図７】
2006343828.tif 000009
【図８】
2006343828.tif 000010
【図９】
2006343828.tif 000011
【図１０】
2006343828.tif 000012
【図１１】
2006343828.tif 000013
【図１２】
2006343828.tif 000014
【図１３】
2006343828.tif 000015
【図１４】
2006343828.tif 000016
【図１５】
2006343828.tif 000017
【図１６】
2006343828.tif 000018
【図１７】
2006343828.tif 000019
【図１８】
2006343828.tif 000020
【図１９】
2006343828.tif 000021
【図２０】
2006343828.tif 000022
【図２１】
2006343828.tif 000023
【図２２】
2006343828.tif 000024