(57)【特許請求の範囲】
【請求項１】
工作機械およびロボットを制御するための加工プログラムであって、複数のブロックを含む前記加工プログラムを前記ブロックごとに読み込み、前記ブロックごとに解析処理を行う解析処理部と、
前記工作機械の動作シミュレーション用のデータである機械モデルと前記工作機械が備える第１の構成要素の位置を制御する際に用いられる第１の位置データとを用いて、特定タイミングにおける前記第１の構成要素の位置を算出する機械動作演算部と、
前記ロボットの動作シミュレーション用のデータであるロボットモデルと前記ロボットが備える第２の構成要素の位置を制御する際に用いられる第２の位置データとを用いて前記特定タイミングにおける前記第２の構成要素の位置を算出するロボット動作演算部と、
前記工作機械の座標系と、前記ロボットの座標系の位置関係を定義する位置定義データを記憶する記憶部と、
前記第１の構成要素の位置、前記第２の構成要素の位置、および前記位置定義データに基づいて、前記工作機械と前記ロボットとが衝突するか否かを前記ブロックごとに判断する衝突判断部と、を有することを特徴とする数値制御装置。
【請求項２】
前記機械動作演算部は、前記工作機械の描画用のデータおよび前記第１の位置データを用いて、前記第１の構成要素を描画し、
前記ロボット動作演算部は、前記ロボットの描画用のデータおよび前記第２の位置データを用いて、前記第２の構成要素を描画する、
ことを特徴とする請求項１に記載の数値制御装置。
【請求項３】
前記工作機械と前記ロボットとが衝突する場合に、前記衝突を発生させる前記ロボットへの移動指令を前記ロボットの姿勢を変更する指令に置き換えること、前記移動指令よりも前に前記ロボットの経路変更を行う指令である経路変更指令を挿入すること、および前記移動指令の直前に待機指令を挿入することの少なくとも１つを実行することで、前記工作機械への制御は変更せずに前記衝突を回避させる干渉回避処理部をさらに有する、
ことを特徴とする請求項１または２に記載の数値制御装置。
【請求項４】
前記工作機械が用いる第１の工具の第１の移動軌跡および前記ロボットが用いる第２の工具の第２の移動軌跡を演算する移動軌跡演算部と、
前記工作機械および前記ロボットが加工する加工物の形状から、前記第１の工具および前記第２の工具が通過した箇所を除外した形状を演算する加工後形状演算部と、
をさらに有し、
前記衝突判断部は、加工後の前記加工物と、前記工作機械と、前記ロボットとが衝突するか否かを判断する、
ことを特徴とする請求項１から３の何れか１つに記載の数値制御装置。
【請求項５】
前記機械動作演算部は、前記工作機械への手動操作に対応する前記第１の構成要素の移動量に基づいて、前記第１の構成要素の位置および形状を算出し、
前記ロボット動作演算部は、前記ロボットへの手動操作に対応する前記第２の構成要素の移動量に基づいて、前記第２の構成要素の位置および形状を算出し、
前記衝突判断部は、前記第１の構成要素の位置および形状と、前記第２の構成要素の位置および形状とに基づいて、前記工作機械と前記ロボットとが衝突するか否かを判断する、
ことを特徴とする請求項１に記載の数値制御装置。
【請求項６】
前記工作機械と前記ロボットとが衝突する場合に、前記衝突を発生させる前記ロボットへの移動指令を、衝突を回避可能な姿勢に変更する移動指令に置き換えること、および前記移動指令の直前に待機指令を挿入することの少なくとも１つを実行することで、前記衝突を回避させる干渉回避処理部をさらに有する、
ことを特徴とする請求項５に記載の数値制御装置。
【請求項７】
前記工作機械への指令である機械駆動指令と前記ロボットへの指令であるロボット指令とを含んだ数値制御プログラムを解析する解析処理部と、
前記ロボット指令を用いて前記ロボットを制御するロボット制御部と、
をさらに有し、
前記解析処理部は、解析した指令が前記機械駆動指令であるか前記ロボット指令であるかを判断し、解析した指令が前記ロボット指令である場合、前記ロボット指令の解析結果を前記ロボット制御部に送る、
ことを特徴とする請求項１から６の何れか１つに記載の数値制御装置。
【請求項８】
前記第１の構成要素には、前記工作機械が用いる工具を含み、
前記第２の構成要素には、前記ロボットが用いる工具を含む、
ことを特徴とする請求項１から７の何れか１つに記載の数値制御装置。
【請求項９】
工作機械の動作シミュレーション用のデータである機械モデルと前記工作機械が備える第１の構成要素の位置を制御する際に用いられる第１の位置データとを用いて算出された特定タイミングにおける前記第１の構成要素の位置、およびロボットの動作シミュレーション用のデータであるロボットモデルと前記ロボットが備える第２の構成要素の位置を制御する際に用いられる第２の位置データとを用いて算出された前記特定タイミングにおける前記第２の構成要素の位置を示すシミュレーション位置情報と、前記工作機械および前記ロボットの制御に用いた加工プログラムの情報である加工プログラム情報とを含む状態変数を観測する状態観測部と、
前記工作機械と前記ロボットとが衝突するか否かを示す衝突情報を取得するデータ取得部と、
前記状態変数および前記衝突情報の組み合わせに基づいて作成されるデータセットに従って、
前記工作機械と前記ロボットとが衝突するか否かを推測した情報である干渉推測情報を学習する学習部と、
を備えることを特徴とする機械学習装置。
【請求項１０】
工作機械の動作シミュレーション用のデータである機械モデルと前記工作機械が備える第１の構成要素の位置を制御する際に用いられる第１の位置データとを用いて算出された特定タイミングにおける前記第１の構成要素の位置、およびロボットの動作シミュレーション用のデータであるロボットモデルと前記ロボットが備える第２の構成要素の位置を制御する際に用いられる第２の位置データとを用いて算出された前記特定タイミングにおける前記第２の構成要素の位置を示すシミュレーション位置情報と、前記工作機械および前記ロボットの制御に用いた加工プログラムの情報である加工プログラム情報と、前記工作機械と前記ロボットとが衝突するか否かを示す衝突情報とを含む状態変数を観測する状態観測部と、
前記工作機械と前記ロボットとが衝突する場合に、前記工作機械と前記ロボットとを衝突させない加工プログラムの情報である回避プログラム情報を取得するデータ取得部と、
前記状態変数および前記回避プログラム情報の組み合わせに基づいて作成されるデータセットに従って、
前記工作機械と前記ロボットとを衝突させない加工プログラムの情報を推測した情報である干渉回避推測情報を学習する学習部と、
を備えることを特徴とする機械学習装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボットおよび工作機械を制御する数値制御装置、および機械学習装置に関する。
【背景技術】
【０００２】
数値制御装置の１つに、被加工物の加工を行う工作機械の制御と、被加工物の搬送および加工を行うロボットの制御とを並行して実行する制御装置がある。【０００３】
特許文献１に記載の数値制御装置は、指定経過時刻におけるロボットの動作位置、および指定経過時刻における工作機械の動作位置に基づいて、ロボットおよび工作機械の三次元モデルを表示装置上に表示させている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４６５３８３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１の技術では、ロボットの動作と工作機械の動作とを表示しているものの、工作機械とロボットとが衝突するか否かを判断することができないという問題があった。【０００６】
本発明は、上記に鑑みてなされたものであって、工作機械とロボットとが衝突するか否かを判断することができる数値制御装置を得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明の数値制御装置は、工作機械およびロボットを制御するための加工プログラムであって、複数のブロックを含む加工プログラムをブロックごとに読み込み、ブロックごとに解析処理を行う解析処理部と、工作機械の動作シミュレーション用のデータである機械モデルと工作機械が備える第１の構成要素の位置を制御する際に用いられる第１の位置データとを用いて、特定タイミングにおける第１の構成要素の位置を算出する機械動作演算部を有する。また、本発明の数値制御装置は、ロボットの動作シミュレーション用のデータであるロボットモデルとロボットが備える第２の構成要素の位置を制御する際に用いられる第２の位置データとを用いて特定タイミングにおける第２の構成要素の位置を算出するロボット動作演算部を有する。また、本発明の数値制御装置は、工作機械の座標系と、ロボットの座標系の位置関係を定義する位置定義データを記憶する記憶部を有する。また、本発明の数値制御装置は、第１の構成要素の位置、第２の構成要素の位置、および位置定義データに基づいて、工作機械とロボットとが衝突するか否かをブロックごとに判断する衝突判断部を有する。
【発明の効果】
【０００８】
本発明にかかる数値制御装置は、工作機械とロボットとが衝突するか否かを判断することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１にかかる数値制御装置の構成例を示す図
【図２】実施の形態１にかかる数値制御装置が制御する工作機械およびロボットの配置例を示す図
【図３】実施の形態１にかかる数値制御装置が描画した画面の第１例を示す図
【図４】実施の形態１にかかる数値制御装置が描画した画面の第２例を示す図
【図５】実施の形態１にかかる数値制御装置が描画した画面の第３例を示す図
【図６】実施の形態１にかかる数値制御装置が検出する、ロボットハンドと工作機械の筐体との干渉を説明するための図
【図７】実施の形態１にかかる数値制御装置が検出する、ロボットアームと工作機械の外部に配置された機構との干渉を説明するための図
【図８】実施の形態１にかかる数値制御装置による干渉チェックの処理手順を示すフローチャート
【図９】実施の形態２にかかる数値制御装置の構成例を示す図
【図１０】実施の形態２にかかる数値制御装置によって実行される干渉回避の第１の動作例を説明するための図
【図１１】実施の形態２にかかる数値制御装置によって実行される干渉回避の第２の動作例を説明するための図
【図１２】実施の形態２にかかる数値制御装置による干渉チェックの処理手順を示すフローチャート
【図１３】実施の形態３にかかる数値制御装置の構成例を示す図
【図１４】実施の形態３にかかる数値制御装置がワークシミュレーションをする際のロボットおよび工作機械の動作を説明するための図
【図１５】図１４に示すワークシミュレーションが実行される際の画面表示の例を示す図
【図１６】図１５に示した面取り位置での加工ワークの形状を拡大表示した例を示す図
【図１７】実施の形態３にかかる数値制御装置によるワークシミュレーションの処理手順を示すフローチャート
【図１８】実施の形態４にかかる数値制御装置の構成例を示す図
【図１９】実施の形態４にかかる数値制御装置が備える操作盤の構成例を示す図
【図２０】実施の形態４にかかる数値制御装置が備える表示部で表示される干渉アラームの例を示す図
【図２１】実施の形態４にかかる数値制御装置によって実行される干渉回避の動作例を説明するための図
【図２２】実施の形態４にかかる数値制御装置による干渉チェックおよび干渉回避の処理手順を示すフローチャート
【図２３】実施の形態５にかかる数値制御装置の構成例を示す図
【図２４】実施の形態にかかる数値制御装置が備える制御演算部のハードウェア構成例を示す図
【発明を実施するための形態】
【００１０】
以下に、本発明の実施の形態にかかる数値制御装置、および機械学習装置を図面に基づいて詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態１．
図１は、実施の形態１にかかる数値制御装置の構成例を示す図である。数値制御装置１Ｘは、制御演算部２Ｘと、入力操作部３と、表示部４と、ＰＬＣ（Programmable  Logic  Controller：プログラマブルロジックコントローラ）３６を操作するための機械操作盤などのＰＬＣ操作部５とを有する。図１には、数値制御装置１Ｘとともに、工作機械１００、ロボットコントローラ５０、およびロボット６０が示されている。数値制御装置１Ｘと、工作機械１００と、ロボットコントローラ５０と、ロボット６０とで構成されるシステムが、制御システムである。
【００１２】
数値制御装置１Ｘは、駆動部９０の各サーボ制御部と通信を実行するとともに、ロボットコントローラ５０との間で通信を実行する。数値制御装置１Ｘは、工作機械１００に対して工具を使った加工ワーク（被加工物）の加工を実行させるとともに、ロボット６０に対して加工ワークの搬送を実行させるコンピュータである。数値制御装置１Ｘは、ＧコードプログラムといったＮＣ（Numerical  Control）プログラムを用いて、工作機械１００およびロボット６０を制御する。加工プログラムであるＮＣプログラムには、工作機械１００への指令と、ロボット６０への指令とが含まれている。数値制御装置１Ｘは、ＮＣプログラムのうちのロボット６０への指令を、ロボットプログラムの指令に変換してロボット６０を制御する。
【００１３】
本実施の形態の数値制御装置１Ｘは、ロボット６０と工作機械１００とが干渉するか否かを判断し、干渉する場合にはアラームを発生させる。ロボット６０と工作機械１００との干渉は、工作機械１００とロボット６０との衝突と同義である。ロボット６０と工作機械１００との干渉には、ロボット６０が把持する工具と工作機械１００との干渉、工作機械１００が把持する工具とロボット６０との干渉、ロボット６０が把持する工具と工作機械１００が把持する工具との干渉が含まれる。
【００１４】
工作機械１００は、工具および加工ワークを駆動する駆動部９０を備えている。駆動部９０の例は、加工ワークを回転させながら工具を駆動する駆動機構である。実施の形態１では、工具の駆動方向が、例えばＸ軸方向に平行な方向とＺ軸方向に平行な方向との２方向である。なお、軸方向は装置構成によるので、軸方向は、上記方向に限定されない。
【００１５】
駆動部９０は、数値制御装置１Ｘ上で規定された各軸方向に工具を移動させるサーボモータ９０１，９０２と、サーボモータ９０１，９０２の位置および速度を検出する検出器９７，９８とを備えている。また、駆動部９０は、数値制御装置１Ｘからの指令に基づいて、サーボモータ９０１，９０２を制御する各軸方向のサーボ制御部を備えている。各軸方向のサーボ制御部は、検出器９７，９８からの位置および速度に基づいて、サーボモータ９０１，９０２へのフィードバック制御を行う。
【００１６】
サーボ制御部のうちの、Ｘ軸サーボ制御部９１は、サーボモータ９０１を制御することによって工具のＸ軸方向の動作を制御し、Ｚ軸サーボ制御部９２は、サーボモータ９０２を制御することによって工具のＺ軸方向の動作を制御する。なお、工作機械１００が２つ以上の刃物台を備えていてもよい。この場合、駆動部９０は、１つの刃物台毎に、１組のＸ軸サーボ制御部９１と、Ｚ軸サーボ制御部９２と、サーボモータ９０１，９０２と、検出器９７，９８とを備える。
【００１７】
また、駆動部９０は、加工ワークを回転させるための主軸を回転させる主軸モータ９１１と、主軸モータ９１１の位置および回転数を検出する検出器２１１とを備えている。検出器２１１が検出する回転数は、主軸モータ９１１の回転数に対応している。
【００１８】
また、駆動部９０は、数値制御装置１Ｘからの指令に基づいて、主軸モータ９１１を制御する主軸サーボ制御部２００を備えている。主軸サーボ制御部２００は、検出器２１１からの位置および回転数に基づいて、主軸モータ９１１へのフィードバック制御を行う。
【００１９】
なお、工作機械１００が２つの加工ワークを同時に加工する場合には、駆動部９０は、主軸モータ９１１と、検出器２１１と、主軸サーボ制御部２００とを２組備える。この場合、工作機械１００は、２つ以上の刃物台を備えている。
【００２０】
入力操作部３は、制御演算部２Ｘに情報を入力する手段である。入力操作部３は、キーボード、ボタンまたはマウスなどの入力手段によって構成され、ユーザによる数値制御装置１Ｘに対するコマンドなどの入力、またはＮＣプログラムもしくはパラメータなどを受付けて制御演算部２Ｘに入力する。表示部４は、液晶表示装置などの表示手段によって構成され、制御演算部２Ｘによって処理された情報を表示画面に表示する。表示部４の例は、液晶タッチパネルである。この場合、入力操作部３の一部の機能が、表示部４に配置されている。
【００２１】
制御演算部２Ｘは、工作機械１００の座標系で規定されたＮＣプログラムを用いて工作機械１００およびロボット６０を制御する。制御演算部２Ｘは、入力制御部３２と、データ設定部３３と、記憶部３４と、画面処理部３１と、解析処理部３７と、制御信号処理部３５と、ＰＬＣ３６と、補間処理部３８と、加減速処理部３９と、軸データ出力部４０と、ロボット制御部４１と、シミュレーション制御部８０Ｘとを有する。なお、ＰＬＣ３６は、制御演算部２Ｘの外部に配置されてもよい。
【００２２】
記憶部３４は、パラメータ記憶エリア３４１、ＮＣプログラム記憶エリア３４３、表示データ記憶エリア３４４、および共有エリア３４５を有している。また、記憶部３４は、シミュレーション用データ３４６を記憶する記憶エリアを有している。
【００２３】
パラメータ記憶エリア３４１内には、制御演算部２Ｘの処理で使用されるパラメータ等が格納される。具体的には、パラメータ記憶エリア３４１内には、数値制御装置１Ｘを動作させるための制御パラメータ、サーボパラメータおよび工具データ８１３，８１４が格納される。工具データ８１３は、工作機械１００で用いられる工具のデータであり、工具データ８１４は、ロボット６０で用いられる工具のデータである。工具データ８１３は、工作機械１００で用いられる工具の形状の情報を含んでいる。工具データ８１４は、ロボット６０で用いられる工具の形状の情報を含んでいる。工具データ８１３，８１４は、シミュレーション制御部８０Ｘによって記憶部３４内から読み出される。なお、以下の説明では、形状の情報には、形そのものの情報と、寸法の情報とが含まれているものとする。
【００２４】
ＮＣプログラム記憶エリア３４３内には、加工ワークの加工に用いられるＮＣプログラムが格納される。実施の形態１のＮＣプログラムは、工作機械１００を制御するための指令と、ロボット６０を制御するための指令とを含んでいる。
【００２５】
表示データ記憶エリア３４４内には、表示部４で表示される画面表示データが格納される。画面表示データは、表示部４に情報を表示するためのデータである。また、記憶部３４には、一時的に使用されるデータを記憶する共有エリア３４５が設けられている。
【００２６】
シミュレーション用データ３４６は、工作機械１００を描画することができるデータである機械モデル８１１と、ロボット６０を描画することができるデータであるロボットモデル８１２とを含んでいる。機械モデル８１１およびロボットモデル８１２は、シミュレーション制御部８０Ｘによって記憶部３４内から読み出される。機械モデル８１１は、工作機械１００の３次元構造を示す３次元データであり、ロボットモデル８１２は、ロボット６０の３次元構造を示す３次元データである。
【００２７】
機械モデル８１１は、実際に工作機械１００が具備する加工室（加工槽）内の動作シミュレーション用のデータである。機械モデル８１１は、ＣＡＤ（Computer  Aided  Design））データから生成される。ロボットモデル８１２は、ロボット６０の動作シミュレーション用データである。ロボットモデル８１２は、ＣＡＤデータから生成される。機械モデル８１１は、拡張子が「.mdl」等の機械モデルデータであり、ロボットモデル８１２は、拡張子が「.mdl」等のロボットモデルデータである。
【００２８】
画面処理部３１は、表示データ記憶エリア３４４に格納された画面表示データを表示部４に表示させる制御を行う。入力制御部３２は、入力操作部３から入力される情報を受付ける。データ設定部３３は、入力制御部３２で受付けられた情報を記憶部３４に記憶させる。すなわち、入力操作部３が受付けた入力情報は、入力制御部３２およびデータ設定部３３を介して記憶部３４に書き込まれる。
【００２９】
制御信号処理部３５は、ＰＬＣ３６に接続されており、ＰＬＣ３６から、工作機械１００の機械を動作させるリレーなどの信号情報を受付ける。制御信号処理部３５は、受付けた信号情報を、記憶部３４の共有エリア３４５に書き込む。これらの信号情報は、加工運転時に補間処理部３８が参照する。また、制御信号処理部３５は、解析処理部３７によって共有エリア３４５に補助指令が出力されると、この補助指令を制御信号処理部３５が共有エリア３４５から読み出してＰＬＣ３６に送る。補助指令は、数値制御軸である駆動軸を動作させる指令以外の指令である。補助指令の例は、ＭコードまたはＴコードである。
【００３０】
ＰＬＣ３６は、ＰＬＣ３６が実行する機械動作が記述されたラダープログラムを格納している。ＰＬＣ３６は、補助指令であるＴコードまたはＭコードを受付けると、ラダープログラムに従って補助指令に対応する処理を工作機械１００に実行する。ＰＬＣ３６は、補助指令に対応する処理を実行した後、ＮＣプログラムの次のブロックを実行させるために、機械制御が完了したことを示す完了信号を制御信号処理部３５に送る。
【００３１】
制御演算部２Ｘでは、制御信号処理部３５と、解析処理部３７と、補間処理部３８と、ロボット制御部４１と、シミュレーション制御部８０Ｘとが記憶部３４を介して接続されており、記憶部３４を介して情報の書き込み、および読み出しを行う。以下の説明では、制御信号処理部３５と、解析処理部３７と、補間処理部３８と、ロボット制御部４１と、シミュレーション制御部８０Ｘとの間の情報の書き込み、および読み出しを説明する際に記憶部３４が介されていることを省略する場合がある。
【００３２】
ＮＣプログラムの選択は、ユーザが入力操作部３でＮＣプログラム番号を入力することによって行われる。このＮＣプログラム番号は、入力制御部３２およびデータ設定部３３を介して共有エリア３４５に書き込まれる。機械操作盤等のサイクルスタートをトリガとして、解析処理部３７は、選択されたＮＣプログラム番号を共有エリア３４５から読み出すと、選択されたＮＣプログラムをＮＣプログラム記憶エリア３４３内から読み出して、ＮＣプログラムの各ブロック（各行）に対して解析処理を行う。解析処理部３７は、例えば、Ｇコード（軸移動等に関する指令）、Ｔコード（工具交換指令など）、Ｓコード（主軸モータ回転数指令）、およびＭコード（機械動作指令）を解析する。
【００３３】
解析処理部３７は、解析した行にＭコードまたはＴコードが含まれている場合には、解析結果を共有エリア３４５および制御信号処理部３５を介してＰＬＣ３６に送る。また、解析処理部３７は、解析した行にＭコードが含まれている場合には、Ｍコードを、制御信号処理部３５を介してＰＬＣ３６に送る。ＰＬＣ３６はＭコードに対応する機械制御を実行する。実行が完了した場合、制御信号処理部３５を介してＭコードの完了を示す結果が記憶部３４に書き込まれる。補間処理部３８は記憶部３４に書き込まれた実行結果を参照する。
【００３４】
また、解析処理部３７は、工作機械１００へのＧコードが含まれている場合には、共有エリア３４５を介して解析結果を補間処理部３８に送る。具体的には、解析処理部３７は、Ｇコードに対応する移動条件を生成して補間処理部３８に送る。また、解析処理部３７は、Ｓコードで指定された主軸回転数を補間処理部３８に送る。主軸回転数は、単位時間あたりの主軸の回転の回数である。移動条件は、加工位置を移動させていくための工具送りの条件であり、刃物台を移動させる速度、刃物台を移動させる位置などで示される。例えば、工具の工具送りは、工具をＸ軸方向（＋Ｘ方向）およびＺ軸方向（＋Ｚ方向）に進ませる。
【００３５】
また、解析処理部３７は、ロボット指令解析部３７１を有している。ロボット指令解析部３７１は、接続されたロボット６０の動作を解析する手段である。ロボット指令解析部３７１は、ＮＣプログラムに含まれるロボット指令を解析し、解析結果を、共有エリア３４５を介してロボット制御部４１に送る。
【００３６】
解析結果には、ロボット６０の座標系を設定するための指令であるロボット座標系設定指令、ロボット６０の動作を規定したロボット動作指令などが含まれている。
【００３７】
補間処理部３８は、解析処理部３７による解析結果のうち工作機械１００への指令を用いて工作機械１００を制御するためのデータを生成し、加減速処理部３９に送る。加減速処理部３９は、補間処理部３８から供給された補間処理の結果に対して、加速度をなめらかに変化させるための加減速処理を行う。加減速処理部３９は、加減速処理の処理結果である速度指令を軸データ出力部４０に送る。
【００３８】
軸データ出力部４０は、速度指令を駆動部９０に出力する。具体的には、軸データ出力部４０は、Ｘ軸への速度指令をＸ軸サーボ制御部９１に出力し、Ｚ軸への速度指令をＺ軸サーボ制御部９２に出力する。また、軸データ出力部４０は、主軸への回転数指令を主軸サーボ制御部２００に出力する。
【００３９】
ロボット制御部４１は、ロボット指令解析部３７１による解析の結果に基づいて、ロボット６０への指令をロボットプログラムに変換する。すなわち、ロボット制御部４１は、ロボット指令解析部３７１から送られてくる、ロボット指令の解析結果に基づいて、ロボットコントローラ５０が解釈可能なロボット指令を生成する。ロボット制御部４１は、生成したロボット指令をロボットコントローラ５０に送る。ロボットコントローラ５０は、ロボット制御部４１から送られてくるロボット指令に基づいて、ロボット６０の各軸の位置データを生成し、位置データを用いてロボット６０を制御する。
【００４０】
数値制御装置１Ｘでは、ＮＣプログラムに設定されている指令が順番に実行される。したがって、補間処理部３８が工作機械１００を制御するためのデータを生成して加減速処理部３９に送る順番、およびロボット制御部４１が位置データを生成してロボットコントローラ５０に送る順番は、それぞれＮＣプログラムに設定されている指令の順番に対応している。
【００４１】
シミュレーション制御部８０Ｘは、記憶部３４、補間処理部３８、加減速処理部３９、ロボット制御部４１、および画面処理部３１に接続されている。シミュレーション制御部８０Ｘは、画面処理部３１に接続されているが、図１では、シミュレーション制御部８０Ｘと画面処理部３１との接続線の記載を省略している。以下の説明では、シミュレーション制御部８０Ｘによる表示部４への情報の書き込みを説明する際に、画面処理部３１が介されていることを省略する場合がある。
【００４２】
シミュレーション制御部８０Ｘは、ロボット６０の動作および工作機械１００の動作を演算によってシミュレーションする。シミュレーション制御部８０Ｘは、機械動作演算部８０１と、ロボット動作演算部８０２と、干渉チェック部８０３とを備えている。
【００４３】
機械動作演算部８０１は、工作機械１００が備える構成要素の移動を描画し、ロボット動作演算部８０２は、ロボット６０が備える構成要素の移動を描画する。シミュレーション制御部８０Ｘは、描画結果を表示部４に表示させる。
【００４４】
機械動作演算部８０１は、記憶部３４から機械モデル８１１および工具データ８１３を読み出し、機械モデル８１１および工具データ８１３を用いて工作機械１００の動作をシミュレーションする。
【００４５】
また、機械動作演算部８０１は、補間処理部３８から、工作機械１００の各軸の位置データを取得する。機械動作演算部８０１は、補間処理部３８から取り込んだ位置データに基づいて、機械モデル８１１から描画される工作機械１００の構成要素の位置を修正する。
【００４６】
このように、機械動作演算部８０１は、工作機械１００の動作シミュレーション用のデータである機械モデル８１１に基づいて工作機械１００が備える第１の構成要素を描画する。また、機械動作演算部８０１は、第１の構成要素の位置を制御する際に用いられる第１の位置データを用いて、第１の構成要素を再描画する。
【００４７】
ロボット動作演算部８０２は、記憶部３４からロボットモデル８１２および工具データ８１４を読み出し、ロボットモデル８１２および工具データ８１４を用いてロボット６０の動作をシミュレーションする。
【００４８】
また、ロボット動作演算部８０２は、ロボット制御部４１から、ロボット６０の各軸の位置データを取得する。ロボット動作演算部８０２は、ロボット制御部４１から取り込んだ位置データに基づいて、ロボットモデル８１２から描画されるロボット６０の構成要素の位置を修正する。
【００４９】
このように、ロボット動作演算部８０２は、ロボット６０の動作シミュレーション用のデータであるロボットモデル８１２に基づいてロボット６０が備える第２の構成要素を描画し、第２の構成要素の位置を制御する際に用いられる第２の位置データを用いて第２の構成要素を再描画する。
【００５０】
衝突判断部である干渉チェック部８０３は、機械動作演算部８０１およびロボット動作演算部８０２が描画した稼働部（構成要素）の描画データ同士の重なりをチェックする。換言すると、干渉チェック部８０３は、工作機械１００とロボット６０とが干渉（衝突）するか否かを判断する。
【００５１】
すなわち、干渉チェック部８０３は、特定タイミングにおける第１の構成要素の位置および特定タイミングにおける第２の構成要素の位置に基づいて、特定タイミングで工作機械１００とロボット６０とが衝突するか否かを判断する。
【００５２】
干渉チェック部８０３は、工作機械１００とロボット６０とが干渉することを検出すると、補間処理部３８およびロボット制御部４１に動作中止の信号を送るとともに、干渉に対するアラームの表示指示であるアラーム指示情報を、画面処理部３１を経由して表示部４に送る。これにより、干渉チェック部８０３は、表示部４に干渉を示す干渉アラームを表示させる。アラーム指示情報には、工作機械１００とロボット６０とが干渉する位置の情報が含まれていてもよい。この場合、表示部４は、干渉する位置の情報を含んだ干渉アラームを表示する。
【００５３】
工作機械１００は、ＮＣ工作機械であり、駆動軸によって工具と加工ワークとを相対的に移動させながら、工具で加工ワークを加工する。工作機械１００の座標系とロボット６０の座標系とは異なる座標系である。工作機械１００は、直交座標系で制御され、例えば３軸方向に工具または加工ワークを移動させる。ロボット６０は、回転軸を備えており、例えば、４軸以上の方向に駆動する。ロボット６０は、複数の関節と複数のアームを備えており、１つの関節が１つのアームを１軸以上の方向に移動させる。
【００５４】
なお、実施の形態１は、工作機械１００を描画する際に用いられる描画用のデータが、動作シミュレーション用のデータである機械モデル８１１である場合について説明するが、機械動作演算部８０１は、機械モデル８１１以外の描画用データを用いて工作機械１００を描画してもよい。
【００５５】
また、実施の形態１は、ロボット６０を描画する際に用いられる描画用のデータが、動作シミュレーション用のデータであるロボットモデル８１２である場合について説明するが、ロボット動作演算部８０２は、ロボットモデル８１２以外の描画用データを用いてロボット６０を描画してもよい。
【００５６】
機械動作演算部８０１は、例えば、ポンチ絵程度の描画を行うことができる粗い描画用データを用いて工作機械１００を描画してもよい。また、ロボット動作演算部８０２は、ポンチ絵程度の描画を行うことができる粗い描画用データを用いてロボット６０を描画してもよい。
【００５７】
ただし、干渉チェック部８０３が工作機械１００とロボット６０との間の干渉チェックを行う際には、機械動作演算部８０１は、正確な動作シミュレーションができる程度に精度の高いシミュレーション用データ（例えば、機械モデル８１１）を用いる。また、干渉チェック部８０３が工作機械１００とロボット６０との間の干渉チェックを行う際には、ロボット動作演算部８０２は、正確な動作シミュレーションができる程度に精度の高いシミュレーション用データ（例えば、ロボットモデル８１２）を用いる。
【００５８】
ここで、工作機械１００とロボット６０との間の干渉チェックのシミュレーションについて説明する。図２は、実施の形態１にかかる数値制御装置が制御する工作機械およびロボットの配置例を示す図である。
【００５９】
工作機械１００は、筐体１４と、工具ホルダ１１ａ，１１ｂと、チャック機構１２ａ，１２ｂとを備えている。工作機械１００では、筐体１４の内部が加工ワーク５ａ，５ｂを加工する加工室となっている。
【００６０】
チャック機構１２ａは、加工室内で加工ワーク５ａを保持し、チャック機構１２ｂは、加工室内で加工ワーク５ｂを保持する。工具ホルダ１１ａは、工具６ａを保持し、工具ホルダ１１ｂは、工具６ｂを保持する。工具６ａは、チャック機構１２ａによって保持されている加工ワーク５ａを加工し、工具６ｂは、チャック機構１２ｂによって保持されている加工ワーク５ｂを加工する。
【００６１】
ロボット６０は、工作機械１００の近傍に配置されており、工作機械１００に対して加工ワーク５ａ，５ｂの搬入および搬出を行う。また、ロボット６０は、工作機械１００が保持している加工ワーク５ａに対し、工具６ｃで加工を行う。工作機械１００が用いる工具６ａ，６ｂが第１の工具であり、ロボット６０が用いる工具６ｃが第２の工具である。
【００６２】
ロボット６０は、ロボットアーム２１と、ロボットハンド２２と、台座２３とを備えている。台座２３は、ロボットアーム２１を保持する。ロボットアーム２１は、１または複数の軸方向に移動可能となっている。ロボットハンド２２は、台座２３とは反対側の、ロボットアーム２１の先端部に配置されている。ロボットハンド２２は、工具６ｃを掴む。
【００６３】
機械モデル８１１は、加工室内におけるチャック機構１２ａ，１２ｂ、加工ワーク５ａ，５ｂ、工具ホルダ１１ａ，１１ｂ、および工具６ａ，６ｂの動作シミュレーション用のデータである。
【００６４】
工作機械１００の動作がシミュレーションされる際には、工作機械１００の全体構成と、工作機械１００の加工室内の動作がシミュレーションされ、工作機械１００の加工室内の状態が描画される。加工室内に対しては、チャック機構１２ａ，１２ｂ、加工ワーク５ａ，５ｂ、工具ホルダ１１ａ，１１ｂ、および工具６ａ，６ｂの動作がシミュレーションされ、チャック機構１２ａ，１２ｂ、加工ワーク５ａ，５ｂ、工具ホルダ１１ａ，１１ｂ、および工具６ａ，６ｂが描画される。
【００６５】
ロボットモデル８１２は、ロボットアーム２１およびロボットハンド２２の動作シミュレーション用のデータである。ロボット６０の動作がシミュレーションされる際には、ロボットアーム２１およびロボットハンド２２の動作がシミュレーションされ、ロボットアーム２１およびロボットハンド２２の状態が描画される。
【００６６】
図３は、実施の形態１にかかる数値制御装置が描画した画面の第１例を示す図である。図３では、表示部４における画面表示の例を示している。図３に示す画面１３０では、加工室内の状態を表示している。
【００６７】
図３および後述する図４では、チャック機構１２ａ，１２ｂの画像を画像１２Ａ，１２Ｂとして図示し、加工ワーク５ａ，５ｂの画像を画像５Ａ，５Ｂとして図示し、工具ホルダ１１ａ，１１ｂの画像を画像１１Ａ，１１Ｂとして図示し、工具６ａ，６ｂの画像を画像６Ａ，６Ｂとして図示している。また、図３では、ロボットアーム２１の画像を画像２１Ａとして図示し、ロボットハンド２２の画像を画像２２Ａとして図示し、工具６ｃの画像を画像６Ｃとして図示している。
【００６８】
機械動作演算部８０１は、補間処理部３８から、工作機械１００の各軸の位置データを取り込む。機械動作演算部８０１は、補間処理部３８から取り込んだ位置データに基づいて、工作機械１００が備える稼働部（工作機械１００が備える構成要素）を描画し直す。すなわち、機械動作演算部８０１は、補間処理部３８から取り込んだ位置データに基づいて、機械モデル８１１から描画される工作機械１００の構成要素の位置を修正する。工作機械１００が備える稼働部は、前述したチャック機構１２ａ，１２ｂ、加工ワーク５ａ，５ｂ、工具ホルダ１１ａ，１１ｂ、および工具６ａ，６ｂである。機械動作演算部８０１は、例えば、工具ホルダ１１ａ，１１ｂの移動、および工具６ａ，６ｂの移動を描画する。
【００６９】
ロボット動作演算部８０２は、ロボット制御部４１から、ロボット６０の各軸の位置データを取り込む。ロボット動作演算部８０２は、ロボット制御部４１から取り込んだ位置データに基づいて、ロボット６０が備える稼働部（ロボット６０が備える構成要素）を描画し直す。すなわち、ロボット動作演算部８０２は、ロボット制御部４１から取り込んだ位置データに基づいて、ロボットモデル８１２から描画されるロボット６０の構成要素の位置を修正する。ロボット６０が備える稼働部は、前述したロボットアーム２１、ロボットハンド２２、および工具６ｃである。ロボット動作演算部８０２は、例えば、ロボットアーム２１の移動、および工具６ｃを掴んでいるロボットハンド２２の移動を描画する。
【００７０】
シミュレーション制御部８０Ｘは、機械動作演算部８０１による描画結果、およびロボット動作演算部８０２による描画結果を、画面処理部３１を経由して表示部４に表示させる。表示部４によって表示される画面の例が、図３に示す画面１３０である。
【００７１】
干渉チェック部８０３は、機械動作演算部８０１およびロボット動作演算部８０２が描画した稼働部の描画データ同士の重なりをチェックする。具体的には、干渉チェック部８０３は、工作機械１００の工具ホルダ１１ａ，１１ｂまたは工具６ａ，６ｂと、ロボットアーム２１または工具６ｃを掴んだロボットハンド２２と、が干渉するか否かを判断する。機械モデル８１１およびロボットモデル８１２は、３次元データであるので、干渉チェック部８０３は、工作機械１００の３次元形状およびロボット６０の３次元形状に対して干渉をチェックする。
【００７２】
図４は、実施の形態１にかかる数値制御装置が描画した画面の第２例を示す図である。図４では、衝突が検知された場合の、表示部４における画面表示の例を示している。図４に示す画面１３１では、干渉チェック部８０３が、矢印Ｄ１の方向にロボットハンド２２の画像２２Ａが移動した際に、加工室内で構成要素同士の干渉を検知した場合の加工室内の状態を表示している。
【００７３】
干渉チェック部８０３は、図４に示すように、工具６ｂの画像６Ｂと、ロボットハンド２２の画像２２Ａとが衝突によって重なっていること検出すると、補間処理部３８およびロボット制御部４１に動作中止の信号を送るとともに、画面処理部３１を経由して表示部４に干渉アラームを表示させる。表示部４によって表示される干渉アラーム画面は、衝突をユーザに気付かせるような画面であれば、何れの画面であってもよい。干渉アラームの表示は、他のアラームと同様の画面によって表示される。画面１３１では、ロボット６０と工作機械１００とが衝突する位置が示される。
【００７４】
補間処理部３８およびロボット制御部４１は、干渉チェック部８０３から動作中止の信号を受け取ると、演算を停止する。ここで、干渉チェック部８０３は、制御演算部２Ｘの先読み処理での演算結果で干渉の有無を判断している。このため、シミュレーション制御部８０Ｘは、実際に工作機械１００とロボット６０とが干渉（衝突）する前に、工作機械１００およびロボット６０の稼働部の動作を停止することができる。
【００７５】
また、工作機械１００の座標系とロボット６０の座標系とは異なっているが、記憶部３４には工作機械１００の座標系とロボット６０の座標系との位置関係を定義するパラメータが格納されている。したがって、干渉チェック部８０３は、記憶部３４が格納している位置関係に基づいて、工作機械１００の稼働部とロボット６０の稼働部との干渉をチェックすることができる。
【００７６】
なお、動作シミュレーション用のデータである機械モデル８１１およびロボットモデル８１２は、稼働しない部分を含んでいてもよい。例えば、機械モデル８１１は、工作機械１００の筐体１４を含んでいてもよい。また、ロボットモデル８１２は、台座２３を含んでいてもよい。この場合、ロボットモデル８１２には、ロボットアーム２１、ロボットハンド２２、工具６ｃ、および台座２３が含まれている。
【００７７】
機械モデル８１１が工作機械１００の全体構成を含む場合、表示部４は、工作機械１００の全体を表示する。また、ロボットモデル８１２がロボット６０の全体構成を含む場合、表示部４は、ロボット６０の全体を表示する。
【００７８】
図５は、実施の形態１にかかる数値制御装置が描画した画面の第３例を示す図である。図５では、表示部４における画面表示の例を示している。図５に示す画面１３２は、表示部４が、工作機械１００の全体およびロボット６０の全体を表示した場合の画面である。
【００７９】
図５では、工作機械１００の画像を画像１００Ａとして図示し、筐体１４の画像を画像１４Ａとして図示し、ロボット６０の画像を画像６０Ａとして図示し、台座２３の画像を画像２３Ａとして図示している。機械モデル８１１が工作機械１００の全体構成を含む場合、干渉チェック部８０３は、ロボットハンド２２が工作機械１００の筐体１４に干渉することを検出できる。
【００８０】
図６は、実施の形態１にかかる数値制御装置が検出する、ロボットハンドと工作機械の筐体との干渉を説明するための図である。ここでは、機械モデル８１１が工作機械１００の全体を含む場合に干渉チェック部８０３が検出する干渉の第１例について説明する。図６では、矢印Ｄ２の方向にロボットハンド２２が移動した際に、ロボットハンド２２と工作機械１００の筐体１４とが干渉した状態を示している。
【００８１】
また、機械モデル８１１が工作機械１００の全体を含む場合、干渉チェック部８０３は、ロボットアーム２１が工作機械１００の外部に配置された機構に干渉することを検出できる。
【００８２】
図７は、実施の形態１にかかる数値制御装置が検出する、ロボットアームと工作機械の外部に配置された機構との干渉を説明するための図である。ここでは、機械モデル８１１が工作機械１００の全体を含む場合に干渉チェック部８０３が検出する干渉の第２例について説明する。
【００８３】
ローダ３０は、工作機械１００の外部で搬送物７を搬送する装置である。ロボットハンド２２およびロボットアーム２１は、工作機械１００の外部でも動作するので、ロボットハンド２２およびロボットアーム２１は、ローダ３０または搬送物７に衝突する場合がある。図７では、矢印Ｄ３の方向に工具６ｃが移動した際に、ロボットアーム２１とローダ３０とが干渉した状態を示している。
【００８４】
つぎに、数値制御装置１Ｘによる干渉チェックの処理手順について説明する。図８は、実施の形態１にかかる数値制御装置による干渉チェックの処理手順を示すフローチャートである。
【００８５】
解析処理部３７は、ＮＣプログラムを解析する（ステップＳ１０）。すなわち、解析処理部３７は、工作機械１００を動作させる指令（駆動部９０への指令）およびロボット６０を動作させる指令（ロボット６０への指令）を含んだＮＣプログラムを解析する。具体的には、解析処理部３７は、工作機械１００の駆動部９０への指令である機械駆動指令を解析し、ロボット指令解析部３７１は、ロボット６０への指令であるロボット指令を解析する。
【００８６】
解析処理部３７は、解析した指令が機械駆動指令であるかロボット指令であるかを判断する。解析した指令が機械駆動指令である場合（ステップＳ１５、Ｙｅｓ）、解析処理部３７は、機械駆動指令の解析結果を補間処理部３８に送る。一方、解析した指令がロボット指令である場合（ステップＳ１５、Ｎｏ）、解析処理部３７は、ロボット指令の解析結果をロボット制御部４１に送る。
【００８７】
補間処理部３８は、機械駆動指令の解析結果を用いて、機械駆動指令の補間処理を行う（ステップＳ２０）。そして、補間処理部３８は、補間処理した機械駆動指令に基づいて、工作機械１００の動作である工作機械動作の演算処理を実行する（ステップＳ３０）。すなわち、補間処理部３８は、補間処理した機械駆動指令から、工作機械１００が備える駆動部９０の各軸位置を計算する。
【００８８】
ロボット制御部４１は、ロボット指令の解析結果を用いて、ＮＣプログラムをロボットプログラムに変換する（ステップＳ４０）。また、ロボット制御部４１は、ロボットプログラムに基づいて、ロボット６０の動作であるロボット動作の演算処理を実行する（ステップＳ５０）。すなわち、ロボット制御部４１は、ロボットプログラムからロボット６０の各軸位置を計算する。具体的には、ロボット制御部４１は、ロボットアーム２１の位置、ロボットハンド２２の位置などの計算を行う。
【００８９】
補間処理部３８で計算された駆動部９０の各軸位置を示す位置データは、機械動作演算部８０１に送られる。また、ロボット制御部４１で計算されたロボット６０の各軸位置を示す位置データは、ロボット動作演算部８０２に送られる。
【００９０】
シミュレーション制御部８０Ｘは、描画処理を実行する（ステップＳ６０）。具体的には、機械動作演算部８０１は、機械モデル８１１に基づいて工作機械１００の機械構成を描画し、工具データ８１３に基づいて工作機械１００が用いる工具６ａ，６ｂを描画する。また、ロボット動作演算部８０２は、ロボットモデル８１２に基づいて、ロボット６０を描画し、工具データ８１４に基づいてロボット６０が用いる工具６ｃを描画する。
【００９１】
また、機械動作演算部８０１は、補間処理部３８から、駆動部９０の各軸位置を示す位置データを取り込む。機械動作演算部８０１は、取り込んだ位置データに基づいて、工作機械１００が備える機構の稼働部を描画し直す。機械動作演算部８０１は、例えば、工作機械１００の工具ホルダ１１ａ，１１ｂの移動、および工具６ａ，６ｂの移動を描画する。
【００９２】
また、ロボット動作演算部８０２は、ロボット制御部４１から、ロボット６０の各軸位置を示す位置データを取り込む。ロボット動作演算部８０２は、取り込んだ位置データに基づいて、ロボット６０が備える機構の稼働部を描画し直す。ロボット動作演算部８０２は、例えば、ロボットアーム２１の移動、および工具６ｃを含むロボットハンド２２の移動を描画する。
【００９３】
機械動作演算部８０１およびロボット動作演算部８０２による描画結果（描画データ）は、シミュレーション制御部８０Ｘが画面処理部３１を経由して表示部４に表示させる。
【００９４】
干渉チェック部８０３は、ロボット６０と工作機械１００との間の干渉チェック処理を実行する（ステップＳ７０）。すなわち、干渉チェック部８０３は、機械動作演算部８０１で描画された稼働部の描画データと、ロボット動作演算部８０２で描画された稼働部の描画データとの重なりをチェックする。具体的には、干渉チェック部８０３は、工作機械１００の各軸位置と、ロボット６０の各軸位置とに基づいて、以下の（１）から（４）に示す構成要素間で干渉が発生するか否かを判断する。
（１）機械モデル８１１に基づく工作機械１００の機械構成
（２）工具データ８１３に基づく工具６ａ，６ｂ
（３）ロボットモデル８１２に基づくロボット６０の構成
（４）工具データ８１４に基づく工具６ｃ
【００９５】
干渉チェック部８０３は、例えば、工作機械１００の工具ホルダ１１ａ，１１ｂまたは工具６ａ，６ｂと、ロボット６０のロボットアーム２１、ロボットハンド２２、または工具６ｃとの間に干渉が発生するか否かをチェックする（ステップＳ８０）。
【００９６】
干渉が発生している場合（ステップＳ８０、Ｙｅｓ）、干渉チェック部８０３は、アラーム処理を実行する（ステップＳ９０）。すなわち、干渉チェック部８０３は、補間処理部３８およびロボット制御部４１に、動作中止の信号を送ると同時に、画面処理部３１を経由して表示部４に干渉アラームを表示させる。補間処理部３８およびロボット制御部４１は、干渉チェック部８０３から動作中止の信号を受け取ると、演算処理を停止する。
【００９７】
干渉が発生していない場合（ステップＳ８０、Ｎｏ）、シミュレーション制御部８０Ｘは、シミュレーション処理を終了する。
【００９８】
本実施の形態では、数値制御装置１Ｘが、工作機械１００およびロボット６０の実際の動作に合わせてシミュレーション描画および干渉チェックを行う場合について説明した。数値制御装置１Ｘは、工作機械１００およびロボット６０を動作させることなくシミュレーション描画および干渉チェックを行ってもよい。この場合、数値制御装置１Ｘは、数値制御装置１Ｘが持っているマシンロック機能を用いる。マシンロック機能は、位置データの計算は行うが、駆動部９０およびロボットコントローラ５０には指令を出さない機能である。数値制御装置１Ｘは、マシンロック機能を用いることにより、工作機械１００およびロボット６０を実際に動作させなくても、シミュレーション描画および干渉チェックを行うことができる。
【００９９】
このように実施の形態１では、数値制御装置１Ｘが、機械モデル８１１および工作機械１００を制御する際に用いる位置データに基づいて工作機械１００を描画し、ロボットモデル８１２およびロボット６０を制御する際に用いる位置データに基づいてロボット６０を描画し、描画した工作機械１００およびロボット６０に基づいて、ロボット６０と工作機械１００とが衝突するか否かを判断している。これにより、数値制御装置１Ｘは、ロボット６０と工作機械１００とが衝突するか否かを判断することが可能となる。
【０１００】
実施の形態２．
つぎに、図９から図１２を用いてこの発明の実施の形態２について説明する。実施の形態２では、シミュレーションによって干渉を検知した場合に、干渉を回避できるよう、工作機械１００およびロボット６０を制御して、工作機械１００およびロボット６０の運転を継続する。
【０１０１】
図９は、実施の形態２にかかる数値制御装置の構成例を示す図である。図９の各構成要素のうち図１に示す実施の形態１の数値制御装置１Ｘと同一機能を達成する構成要素については同一符号を付しており、重複する説明は省略する。
【０１０２】
数値制御装置１Ｙは、数値制御装置１Ｘと比較して、制御演算部２Ｘの代わりに制御演算部２Ｙを備えている。制御演算部２Ｙの記憶部３４が記憶しているシミュレーション用データ３４６は、機械モデル８１１、ロボットモデル８１２、ロボット経由点、および待機時間上限値を含んでいる。ロボット経由点および待機時間上限値については後述する。また、制御演算部２Ｙは、制御演算部２Ｘと比較して、シミュレーション制御部８０Ｘの代わりにシミュレーション制御部８０Ｙを備えている。
【０１０３】
シミュレーション制御部８０Ｙは、シミュレーション制御部８０Ｘと同様に、ロボット６０の動作および工作機械１００の動作を演算によってシミュレーションする。シミュレーション制御部８０Ｙは、機械動作演算部８０１と、ロボット動作演算部８０２と、干渉チェック部８０３と、干渉回避処理部８０４とを備えている。なお、図９では、シミュレーション制御部８０Ｙが記憶部３４から取得して格納しておく、機械モデル８１１、ロボットモデル８１２、および工具データ８１３，８１４の図示は省略している。
【０１０４】
干渉回避処理部８０４は、工作機械１００とロボット６０とが干渉すると判断された場合に、工作機械１００とロボット６０との干渉を回避するため、ロボット６０への指令などを変更する。
【０１０５】
干渉回避処理部８０４は、工作機械１００とロボット６０とが干渉すると判断された場合、ロボット６０の姿勢を変更することによって干渉を回避できるか否かを判断する。ロボット６０の姿勢を変更することによって干渉を回避できる場合、干渉回避処理部８０４は、ロボット６０への移動指令であるロボット移動指令を、ロボット６０の姿勢を変更したロボット移動指令に置き換える。これにより、干渉回避処理部８０４は、ロボット６０と工作機械１００の干渉を回避させる。
【０１０６】
ロボット６０の姿勢を変更することによって干渉を回避できない場合、干渉回避処理部８０４は、ロボット経由点を目標位置としたロボット移動指令を挿入することで干渉を回避できるか否かを判断する。ロボット経由点は、ロボット６０に経由させることが可能な位置を示している。
【０１０７】
ロボット経由点を用いることによって干渉を回避できる場合、干渉回避処理部８０４は、工作機械１００とロボット６０とを干渉させてしまうロボット移動指令（指令）の直前に、工作機械１００との干渉を発生させないロボット移動指令を挿入することで、ロボット６０の移動経路を変更する。これにより、干渉回避処理部８０４は、ロボット６０と工作機械１００の干渉を回避させる。
【０１０８】
なお、本実施の形態では、干渉を発生させてしまうロボット移動指令の直前に干渉を回避するための指令を挿入する場合について説明するが、干渉を回避するための指令は、干渉を発生させてしまうロボット移動指令より前に挿入されればよい。
【０１０９】
ロボット経由点を用いても干渉を回避できない場合、干渉回避処理部８０４は、干渉する構成要素（干渉対象）が工具６ａ，６ｂなどの工作機械１００の可動部であれば、ロボット６０の移動を一時的に停止することで干渉回避が可能か否かを判断する。具体的には、干渉回避処理部８０４が記憶部３４から待機時間上限値を取得する。待機時間上限値は、ロボット６０を停止させることができる時間の上限値である。すなわち、ロボット６０は、待機時間上限値以下の時間であれば、待機することができる。干渉回避処理部８０４は、待機時間上限値以下の特定時間の間ロボット６０を停止させることで干渉を回避できるか否かを判断する。
【０１１０】
待機時間上限値以下の特定時間だけロボット６０を待機させることで干渉を回避できる場合、干渉回避処理部８０４は、ロボット６０と工作機械１００を干渉させてしまうロボット移動指令の直前に待機（ドウェル）指令を挿入する。これにより、干渉回避処理部８０４は、ロボット６０と工作機械１００の干渉を回避させる。
【０１１１】
干渉回避処理部８０４は、ロボット６０の姿勢を変更すること、ロボット６０の経路を変更すること、および待機指令を挿入することの少なくとも１つを実行することでロボット６０と工作機械１００の干渉を回避させる。すなわち、干渉回避処理部８０４は、ロボット６０の姿勢を変更すること、ロボット６０の経路を変更すること、および待機指令を挿入することを組み合わせて、ロボット６０と工作機械１００の干渉を回避させてもよい。
【０１１２】
つぎに、干渉回避を行う際のロボット６０の動作例について説明する。図１０は、実施の形態２にかかる数値制御装置によって実行される干渉回避の第１の動作例を説明するための図である。干渉回避の第１の動作例では、干渉回避処理部８０４は、干渉を検出すると、ロボット６０を姿勢変更させることによって、干渉を回避する。図１０では、図７に示した干渉が発生する場合の、干渉回避の動作を示している。図１０では、工具６ｃを矢印Ｄ３の方向に移動させつつ、ロボット６０の姿勢を変更した場合を示している。
【０１１３】
干渉回避処理部８０４は、姿勢変更を行う場合、ロボット６０が把持している工具６ｃの先端位置および姿勢が姿勢の変更前後で変化しないように、ロボット移動指令を置き換える。干渉回避処理部８０４は、このロボット移動指令の置き換えによって、干渉を回避することが可能か否かを判断する。回避可能な場合、干渉回避処理部８０４は、干渉を回避できるロボット移動指令に従ってロボット６０を動作させる。
【０１１４】
図７に示した干渉が発生する場合、干渉回避処理部８０４は、工具６ｃの先端位置および姿勢を姿勢の変更前後で変更せず、特定のロボットアーム２１の姿勢が変化するよう、ロボット移動指令を置き換える。図１０では、ロボットアーム２１のうち、台座２３に接合されている第１のロボットアームを矢印Ｄ４ａの方向に移動させ、第１のロボットアームに接合されている第２のロボットアームを矢印Ｄ４ｂの方向に移動させることで、ロボット６０の姿勢が変更された場合を示している。
【０１１５】
図１１は、実施の形態２にかかる数値制御装置によって実行される干渉回避の第２の動作例を説明するための図である。干渉回避の第２の動作例では、干渉回避処理部８０４は、干渉を検出すると、ロボット６０の移動経路を変更させることによって、干渉を回避する。図１１では、図６に示した干渉が発生する場合の、干渉回避の動作を示している。図１１では、工具６ｃを矢印Ｄ５の方向に移動させ、その後、工具６ｃを矢印Ｄ６の方向に移動させるよう、ロボット６０の移動経路を変更した場合を示している。
【０１１６】
干渉回避処理部８０４は、記憶部３４からロボット経由点Ｐ１を取得する。干渉回避処理部８０４は、干渉が発生するロボット移動指令の直前に、ロボット経由点Ｐ１を、干渉対象（図６では、工具６ｃ）の目標位置（経由位置）としたロボット移動指令を挿入することで干渉を回避できるか否かを判断する。
【０１１７】
干渉を回避できる場合、干渉回避処理部８０４は、ロボット６０と工作機械１００との干渉を発生させるロボット移動指令の直前に、ロボット経由点Ｐ１を経由するロボット移動指令を挿入することで、ロボット６０が備える構成要素の移動経路を変更する。これにより、干渉回避処理部８０４は、ロボット６０と工作機械１００の干渉を回避する。なお、記憶部３４は、ロボット経由点Ｐ１を複数記憶しておいてもよい。この場合、干渉回避処理部８０４は、複数のロボット経由点Ｐ１を用いて、複数の回避経路を適用してもよい。
【０１１８】
つぎに、数値制御装置１Ｙによる干渉チェックの処理手順について説明する。図１２は、実施の形態２にかかる数値制御装置による干渉チェックの処理手順を示すフローチャートである。なお、図１２の説明では、図８のフローチャートで説明した処理と同様の処理については、その説明を省略する。
【０１１９】
数値制御装置１Ｙは、ステップＳ１０からＳ８０までは数値制御装置１Ｘと同様の処理を実行する。干渉チェック処理の結果、干渉が発生していない場合（ステップＳ８０、Ｎｏ）、シミュレーション制御部８０Ｙは、シミュレーション処理を終了する。
【０１２０】
干渉チェック処理の結果、干渉が発生している場合（ステップＳ８０、Ｙｅｓ）、干渉回避処理部８０４は、ロボット６０の姿勢変更を行うことで干渉の回避が可能か否かを判断する（ステップＳ１００）。
【０１２１】
ロボット６０が把持する工具６ｃの先端位置および姿勢が、ロボット移動指令の変換前後で同等でないと、目的とした加工をロボット６０が実施できなくなる。このため、干渉回避処理部８０４は、干渉を回避させるための指令における工具６ｃの先端位置および姿勢が、干渉が発生する指令と同じになるような、ロボット６０の各軸位置（ロボット６０を構成する各軸の位置）のパターンを算出する。
【０１２２】
干渉回避処理部８０４は、ロボット移動指令の変換前後で工具６ｃの先端位置および姿勢を変更することなく、干渉を回避できる軸位置のパターンを算出できたか否かを判断する。すなわち、干渉回避処理部８０４は、導出したロボット６０の各軸位置を適用した場合に、干渉を回避できるか否かを判断する。
【０１２３】
干渉回避処理部８０４は、ロボット６０の姿勢変更を行うことで干渉を回避可能であると判断した場合（ステップＳ１００、Ｙｅｓ）、ロボット６０の姿勢を変更する（ステップＳ１１０）。具体的には、干渉回避処理部８０４は、干渉を発生させるロボット移動指令を、ロボット６０の姿勢を変更したロボット移動指令に置き換える。これにより、干渉回避処理部８０４は、干渉を発生させるロボット指令を、干渉が発生しない姿勢のロボット指令に変更する。
【０１２４】
このように、干渉回避処理部８０４は、干渉を発生させるロボット移動指令においてロボット６０の姿勢を変更することで、干渉を回避できる場合は、ロボット６０の姿勢変更処理を実行する。これにより、干渉回避処理部８０４は、干渉を発生させるロボット移動指令を干渉回避可能なロボット移動指令に置き換えてロボット６０を動作させる。
【０１２５】
干渉回避処理部８０４は、ロボット６０の姿勢変更を行っても干渉を回避できないと判断した場合（ステップＳ１００、Ｎｏ）、ロボット６０の経路変更を行うことで干渉の回避が可能か否かを判断する（ステップＳ１２０）。すなわち、干渉回避処理部８０４は、干渉が発生するロボット移動指令の直前に、経路変更指令を挿入すると、干渉を回避できるか否かを判断する。具体的には、干渉回避処理部８０４は、予め設定しておいたロボット経由点をロボット６０が通過した場合に、干渉を回避できるか否かを判断する。このとき、干渉回避処理部８０４は、任意の数（１または複数）のロボット経由点を設定できるものとし、それぞれのロボット経由点を通過するロボット移動指令を挿入した場合に、干渉を回避できるか否かを判断する。
【０１２６】
干渉回避処理部８０４は、ロボット６０の経路変更を行うことで干渉を回避可能であると判断した場合（ステップＳ１２０、Ｙｅｓ）、ロボット６０の移動経路を変更する（ステップＳ１３０）。具体的には、干渉回避処理部８０４は、干渉が発生するロボット移動指令の直前に、干渉を発生させない移動指令を挿入する。換言すると、干渉回避処理部８０４は、干渉が発生するロボット移動指令の直前に、干渉を回避できるロボット経由点を目標位置としたロボット移動指令（経路変更指令）を挿入する。干渉を回避可能なロボット経由点が複数ある場合、干渉回避処理部８０４は、移動距離が最も短い、すなわち最短時間で移動可能なロボット経由点を目標位置としたロボット移動指令を、干渉が発生するロボット移動指令の直前に挿入する。
【０１２７】
干渉回避処理部８０４は、ロボット６０の経路変更を行っても干渉を回避できないと判断した場合（ステップＳ１２０、Ｎｏ）、ロボット６０の待機で干渉の回避が可能か否かを判断する（ステップＳ１４０）。具体的には、干渉回避処理部８０４は、ロボット６０が干渉する干渉対象が可動部であり、かつロボット６０を待機時間上限値内の間停止させることで、干渉を回避できるか否かを判断する。すなわち、干渉回避処理部８０４は、ロボット６０が干渉する対象が工作機械１００の工具６ａ，６ｂといった可動部であるか否かを判断する。干渉対象が可動部である場合、干渉回避処理部８０４は、待機上限値範囲以内の間、ロボット６０を停止させることで、工具６ａ，６ｂなどの可動部が移動し、干渉を回避できる状態に移行するか否かを判断する。
【０１２８】
干渉回避処理部８０４は、ロボット６０の待機で干渉の回避が可能であると判断した場合（ステップＳ１４０、Ｙｅｓ）、ロボット６０への待機処理を実行する。具体的には、干渉回避処理部８０４は、干渉が発生するロボット指令の直前に、干渉を回避できる時間分の待機指令、すなわちロボット６０を停止させるための待機指令を挿入する（ステップＳ１５０）。
【０１２９】
干渉回避処理部８０４が、ロボット６０の待機では干渉を回避できないと判断すると（ステップＳ１４０、Ｎｏ）、干渉チェック部８０３は、アラーム処理を実行する（ステップＳ１６０）。すなわち、干渉チェック部８０３は、補間処理部３８およびロボット制御部４１に、動作中止の信号を送るとともに、画面処理部３１を経由して表示部４に干渉アラームを表示させる。補間処理部３８およびロボット制御部４１は、干渉チェック部８０３から動作中止の信号を受け取ると、演算処理を停止する。
【０１３０】
このように実施の形態２によれば、数値制御装置１Ｙは、干渉が発生する場合には、ロボット６０の姿勢変更、ロボット６０の移動経路の変更、またはロボット６０の待機指令の挿入を実行するので、ロボット６０と工作機械１００の干渉を回避できる。
【０１３１】
実施の形態３．
つぎに、図１３から図１７を用いてこの発明の実施の形態３について説明する。実施の形態３では、加工ワーク５ａ，５ｂの加工中の形状をシミュレーション（以下、ワークシミュレーションという）する。
【０１３２】
図１３は、実施の形態３にかかる数値制御装置の構成例を示す図である。図１３の各構成要素のうち数値制御装置１Ｘ，１Ｙと同一機能を達成する構成要素については同一符号を付しており、重複する説明は省略する。
【０１３３】
数値制御装置１Ｚは、数値制御装置１Ｙと比較して、制御演算部２Ｙの代わりに制御演算部２Ｚを備えている。制御演算部２Ｚの記憶部３４が記憶しているシミュレーション用データ３４６は、機械モデル８１１、ロボットモデル８１２、ロボット経由点、待機時間上限値、およびワークデータ８１５を含んでいる。ワークデータ８１５は、加工ワーク５ａ，５ｂの情報であり、加工ワーク５ａ，５ｂの加工開始時の形状および装着位置などの情報を含んでいる。
【０１３４】
制御演算部２Ｚは、制御演算部２Ｙと比較して、シミュレーション制御部８０Ｙの代わりにシミュレーション制御部８０Ｚを備えている。
【０１３５】
シミュレーション制御部８０Ｚは、加工ワーク５ａ，５ｂの形状の変化を演算によってシミュレーションする。シミュレーション制御部８０Ｚは、機械動作演算部８０１と、ロボット動作演算部８０２と、干渉チェック部８０３と、干渉回避処理部８０４とを備えている。また、本実施の形態のシミュレーション制御部８０Ｚは、移動軌跡演算部８０５、ワーク位置演算部８０６、およびワーク形状演算部８０７を備えている。なお、図１３では、シミュレーション制御部８０Ｚが記憶部３４から取得する、機械モデル８１１、ロボットモデル８１２、および工具データ８１３，８１４の図示は省略している。
【０１３６】
移動軌跡演算部８０５は、機械動作演算部８０１から工作機械１００の各軸の移動データを取得し、ロボット動作演算部８０２からロボット６０の各軸の移動データを取得する。移動軌跡演算部８０５は、工作機械１００の各軸の移動データ、およびロボット６０の各軸の移動データに基づいて、工具６ａ〜６ｃの移動軌跡を演算する。工具６ａまたは工具６ｂの移動軌跡が第１の移動軌跡であり、工具６ｃの移動軌跡が第２の移動軌跡である。
【０１３７】
ワーク位置演算部８０６は、記憶部３４からワークデータ８１５を取得する。ワーク位置演算部８０６は、工具６ａ〜６ｃおよびロボット６０の座標系上における、加工ワーク５ａ，５ｂの位置を算出する。具体的には、ワーク位置演算部８０６は、ワークデータ８１５と、機械モデル８１１と、ロボットモデル８１２とに基づいて、加工ワーク５ａ，５ｂの位置であるワーク位置を算出する。
【０１３８】
ワーク形状演算部８０７は、工具６ａ〜６ｃの移動軌跡と、加工ワーク５ａ，５ｂの位置と、に基づいて、加工ワーク５ａ，５ｂの加工中の形状（形状の時間的な変化）を算出する。また、ワーク形状演算部８０７は、加工ワーク５ａ，５ｂの加工中の形状を、画面処理部３１を介して表示部４に表示させる。
【０１３９】
ここで、数値制御装置１Ｚが表示部４の画面に表示させる情報について説明する。図１４は、実施の形態３にかかる数値制御装置がワークシミュレーションをする際のロボットおよび工作機械の動作を説明するための図である。図１５は、図１４に示すワークシミュレーションが実行される際の画面表示の例を示す図である。
【０１４０】
図１４では、工作機械１００が、第１系統Ｑ１および第２系統Ｑ２で旋削加工を実行した後、ロボット６０が、第３系統Ｑ３でロボット制御による面取り加工を実行する様子を示している。第１系統Ｑ１は、工具６ａを含んだ系統であり、第２系統Ｑ２は、工具６ｂを含んだ系統であり、第３系統Ｑ３は、工具６ｃを含んだ系統である。工具６ａを含んだ第１系統Ｑ１は、加工ワーク５ａを加工し、工具６ｂを含んだ第２系統Ｑ２は、加工ワーク５ｂを加工する。また、工具６ｃを含んだ第３系統Ｑ３は、加工ワーク５ａを加工する。加工ワーク５ａは、工具６ａを含んだ第１系統Ｑ１によって面取り位置Ｐ２まで加工されると、第１系統Ｑ１による加工が継続されながら、工具６ｃを含んだ第３系統Ｑ３によって面取り位置Ｐ２で面取り加工が行われる。
【０１４１】
数値制御装置１Ｚが備える表示部４は、加工途中の加工ワーク５ａ，５ｂを表示するとともに、工作機械１００およびロボット６０の工具６ａ〜６ｃを表示する。図１５に示す画面１３３では、第１系統Ｑ１で旋削加工が実行される際に、加工途中の加工ワーク５ａと、工作機械１００の工具６ａとが表示される場合を示している。図１５に示す画面１３４では、その後、第１系統Ｑ１での旋削加工および第３系統Ｑ３での面取り加工が実行される際に、加工途中の加工ワーク５ａと、工作機械１００の工具６ａと、ロボット６０の工具６ｃとが表示される場合を示している。すなわち、画面１３３では、工作機械１００の第１系統Ｑ１による旋削加工段階のシミュレーション結果が表示され、画面１３４では、ロボット６０の第３系統Ｑ３による面取り工程段階のシミュレーション結果が表示されている。
【０１４２】
表示部４が表示する画面（ワークシミュレーション画面）では画面の任意の箇所の拡大および縮小が可能となっており、加工後のワーク形状の特定箇所の詳細形状を確認可能となっている。図１６は、図１５に示した面取り位置での加工ワークの形状を拡大表示した例を示す図である。図１６の画面１３５では、加工ワーク５ａの面取り位置Ｐ２の画像を拡大表示している。なお、図１６では、加工ワーク５ａの箇所にハッチングを付している。
【０１４３】
つぎに、数値制御装置１Ｚによるワークシミュレーションの処理手順について説明する。図１７は、実施の形態３にかかる数値制御装置によるワークシミュレーションの処理手順を示すフローチャートである。図１７では、第１系統Ｑ１および第３系統Ｑ３での加工ワーク５ａに対するワークシミュレーションについて説明する。なお、図１７の説明では、図８のフローチャートで説明した処理と同様の処理については、その説明を省略する。
【０１４４】
数値制御装置１Ｚは、ワークシミュレーションを開始すると、第１系統Ｑ１で工作機械１００による旋削加工を実行し、第３系統Ｑ３でロボット６０による面取り加工を実行する。なお、第１系統Ｑ１の処理および第３系統Ｑ３の処理は並列にて実施されるものとする。
【０１４５】
第１系統Ｑ１の旋削加工ステップでは、解析処理部３７が、ＮＣプログラムを解析する（ステップＳ１０Ａ）。すなわち、解析処理部３７が、工作機械１００の駆動部９０への指令である機械駆動指令を解析する。
【０１４６】
補間処理部３８は、機械駆動指令の解析結果を用いて、機械駆動指令の補間処理を行う（ステップＳ２０）。そして、補間処理部３８は、補間処理した機械駆動指令に基づいて、工作機械１００の動作である工作機械動作の演算処理を実行する（ステップＳ３０）。補間処理部３８による演算処理で得られる機械動作には、工作機械１００が備える駆動部９０の各軸位置の情報が含まれている。
【０１４７】
移動軌跡演算部８０５は、工具６ａの移動軌跡である第１の工具移動軌跡の演算処理を実行する（ステップＳ２００）。具体的には、移動軌跡演算部８０５は、工作機械１００が備える駆動部９０の各軸位置と、機械モデル８１１と、工具データ８１３とに基づいて、工具６ａの移動軌跡を算出する。
【０１４８】
第３系統Ｑ３の面取り加工ステップでは、解析処理部３７のロボット指令解析部３７１が、ＮＣプログラムを解析する（ステップＳ１０Ｂ）。すなわち、ロボット指令解析部３７１が、ロボット６０への指令であるロボット指令を解析する。
【０１４９】
ロボット制御部４１は、ロボット６０への指令の解析結果を用いて、ロボット６０へのＮＣプログラムをロボットプログラムに変換する（ステップＳ４０）。また、ロボット制御部４１は、ロボットプログラムに基づいて、ロボット６０の動作であるロボット動作の演算処理を実行する（ステップＳ５０）。ロボット制御部４１による演算処理で得られるロボット動作には、ロボット６０の各軸位置の情報が含まれている。
【０１５０】
移動軌跡演算部８０５は、工具６ｃの移動軌跡である第２の工具移動軌跡の演算処理を実行する（ステップＳ２１０）。具体的には、移動軌跡演算部８０５は、ロボット６０の各軸位置と、ロボットモデル８１２と、工具データ８１４とに基づいて、工具６ｃの移動軌跡を算出する。
【０１５１】
移動軌跡演算部８０５が、工具６ａ，６ｃの移動軌跡を算出した後、ワーク位置演算部８０６は、ワークデータ８１５と、機械モデル８１１と、ロボットモデル８１２とに基づいて、加工ワーク５ａの位置であるワーク位置の演算処理を実行する（ステップＳ２２０）。すなわち、ワーク位置演算部８０６は、ワーク位置の演算処理にて加工ワーク５ａが工作機械１００の加工室内の何れの位置に存在するかを算出する。
【０１５２】
ワーク形状演算部８０７は、ワーク形状の演算処理を実行する（ステップＳ２３０）。具体的には、ワーク形状演算部８０７は、工具６ａ〜６ｃの移動軌跡と、加工ワーク５ａの位置と、に基づいて、加工ワーク５ａの加工中の形状を算出する。すなわち、ワーク形状演算部８０７は、ステップＳ２００，Ｓ２１０で算出された工具６ａ，６ｃの移動軌跡と、ステップＳ２２０で算出されたワーク位置とに基づいて、特定領域まで加工された後の加工ワーク５ａの形状を算出する。換言すると、ワーク形状演算部８０７は、ワーク形状の時間的な変化を算出する。このとき、ワーク形状演算部８０７は、加工ワーク５ａに対して、工具６ａ，６ｃが通過した箇所を除外した形状を演算していく。
【０１５３】
シミュレーション制御部８０Ｚは、描画処理を実行する（ステップＳ２４０）。具体的には、ワーク形状演算部８０７が、算出した加工ワーク５ａの加工中の形状を描画し、描画したデータを画面処理部３１に送る。これにより、表示部４は、加工ワーク５ａの加工中の形状を表示する。
【０１５４】
シミュレーション制御部８０Ｚは、加工ワーク５ｂに対しても、加工ワーク５ａと同様に加工中の形状を算出することができる。シミュレーション制御部８０Ｚは、算出した加工ワーク５ａ，５ｂを用いて、ロボット６０と加工ワーク５ａ，５ｂとの干渉をチェックしてもよいし、干渉を回避させてもよい。また、シミュレーション制御部８０Ｚは、算出した加工ワーク５ａ，５ｂを用いて、工作機械１００と加工ワーク５ａ，５ｂとの干渉をチェックしてもよいし、干渉を回避させてもよい。
【０１５５】
このように実施の形態３によれば、数値制御装置１Ｚは、工具６ａ〜６ｃの移動軌跡を算出し、工具６ａ〜６ｃの移動軌跡に基づいて加工ワーク５ａ，５ｂの形状を算出するので、加工中の加工ワーク５ａ，５ｂの形状を算出することができる。
【０１５６】
また、数値制御装置１Ｚは、加工中の加工ワーク５ａ，５ｂの形状を算出できるので、加工ワーク５ａ，５ｂとロボット６０との干渉のチェックおよび干渉の回避を正確に実行できる。また、数値制御装置１Ｚは、加工中の加工ワーク５ａ，５ｂの形状を算出できるので、加工ワーク５ａ，５ｂと工作機械１００との干渉のチェックおよび干渉の回避を正確に実行できる。
【０１５７】
実施の形態４．
つぎに、図１８から図２２を用いてこの発明の実施の形態４について説明する。実施の形態４では、工作機械１００またはロボット６０への手動操作に対して、工作機械１００とロボット６０との間に干渉が発生するか否かを判断し、干渉する場合には、干渉回避の動作を実行する。
【０１５８】
図１８は、実施の形態４にかかる数値制御装置の構成例を示す図である。図１８の各構成要素のうち数値制御装置１Ｘ，１Ｙ，１Ｚと同一機能を達成する構成要素については同一符号を付しており、重複する説明は省略する。
【０１５９】
数値制御装置１Ｌは、数値制御装置１Ｙと比較して、制御演算部２Ｙの代わりに制御演算部２Ｌを備えている。制御演算部２Ｌは、制御演算部２Ｙと比較して、シミュレーション制御部８０Ｙの代わりに干渉回避制御部８１を備えている。また、制御演算部２Ｌは、制御演算部２Ｙと比較して、ロボット制御部４１の代わりにロボット制御部４１Ｌを備えている。
【０１６０】
制御演算部２Ｌの記憶部３４が記憶しているシミュレーション用データ３４６は、機械モデル８１１と、ロボットモデル８１２とを含んでいる。
【０１６１】
干渉回避制御部８１は、シミュレーション制御部８０Ｙが備えている機能に加えて、手動操作された際に干渉を回避するための処理を実行する機能を備えている。干渉回避制御部８１は、工作機械１００またはロボット６０への手動操作に対して、工作機械１００とロボット６０との間に干渉が発生するか否かを判断し、干渉する場合には工作機械１００とロボット６０との干渉を回避するため、ロボット６０への指令などを変更する。干渉回避制御部８１は、機械動作演算部８５１と、ロボット動作演算部８５２と、干渉チェック部８５３と、干渉回避処理部８５４とを備えている。
【０１６２】
機械動作演算部８５１は、機械モデル８１１および工具データ８１３を記憶部３４から取得する。また、ロボット動作演算部８５２は、ロボットモデル８１２および工具データ８１４を記憶部３４から取得する。なお、図１８では、干渉回避制御部８１が記憶部３４から取得して格納しておく、機械モデル８１１、ロボットモデル８１２、および工具データ８１３，８１４の図示は省略している。
【０１６３】
機械動作演算部８５１は、機械動作演算部８０１が備えている機能に加えて、手動操作された際の工作機械１００の位置および形状を算出する機能を備えている。機械動作演算部８５１は、手動操作による移動対象が工作機械１００の構成要素であった場合、移動対象、移動量、機械モデル８１１および工具データ８１３に基づいて、工作機械１００の移動後の位置および形状を算出する。機械動作演算部８５１は、算出結果である、工作機械１００の移動後の位置および形状を干渉チェック部８５３に送信する。
【０１６４】
ロボット動作演算部８５２は、ロボット動作演算部８０２が備えている機能に加えて、手動操作された際のロボット６０の位置および形状を算出する機能を備えている。ロボット動作演算部８５２は、手動操作による移動対象がロボット６０の構成要素であった場合、移動対象、移動量、ロボットモデル８１２および工具データ８１４に基づいて、ロボット６０の移動後の位置および形状を算出する。ロボット動作演算部８５２は、算出結果である、ロボット６０の移動後の位置および形状を干渉チェック部８５３に送信する。
【０１６５】
干渉チェック部８５３は、手動操作による移動対象の移動後の位置および形状に基づいて、工作機械１００とロボット６０とが干渉するか否かを判断する。干渉回避処理部８５４は、ロボット６０の姿勢を変更することで干渉回避が可能である場合に、ロボット６０の姿勢を変更した移動データを生成して、ロボット制御部４１Ｌに送信する。
【０１６６】
数値制御装置１Ｌの入力操作部３は、手動ハンドル５５と、ジョグボタン５７と、軸選択スイッチ５９とを備えている。また、数値制御装置１Ｌのロボット制御部４１Ｌは、ロボット手動操作部４１５を備えている。また、数値制御装置１Ｌの補間処理部３８は、手動可否判断部３８２Ｍを備えている。
【０１６７】
手動ハンドル５５は、ロボット６０の軸方向の移動量を操作するためのハンドルである。手動ハンドル５５は、手動パルスジェネレータである。手動ハンドル５５は、操作に対応する移動量を制御演算部２Ｌに送る。この移動量は、記憶部３４を介してロボット手動操作部４１５に送られる。
【０１６８】
なお、手動ハンドル５５は、工作機械１００の軸方向の移動量を操作する際に用いられてもよい。すなわち、ユーザは、１つの手動ハンドル５５で、ロボット６０の操作および工作機械１００の操作を行ってもよい。この場合、ユーザからの操作を受け付ける操作盤（後述する操作盤５３）には、手動ハンドル５５による手動操作対象を切り替えるための切替スイッチ（後述する切替スイッチ１５）を配置しておく。
【０１６９】
ジョグボタン５７は、ロボット６０の軸方向の移動量をジョグ操作するためのボタンである。ジョグボタン５７は、操作に対応する操作情報を制御演算部２Ｌに送る。この操作情報は移動量に対応する情報であり、記憶部３４を介してロボット手動操作部４１５に送られる。
【０１７０】
軸選択スイッチ５９は、ロボット６０に対して手動操作する軸を選択するスイッチである。軸選択スイッチ５９の例は、工作機械１００における座標系で、Ｘ軸を指定するスイッチ、Ｙ軸を指定するスイッチ、Ｚ軸を指定するスイッチ、Ａ軸を指定するスイッチ、Ｂ軸を指定するスイッチ、Ｃ軸を指定するスイッチである。軸選択スイッチ５９は、押下またはタッチされた軸が何れの軸であるかを示す軸情報を、制御演算部２Ｌに送る。この軸情報は、記憶部３４を介してロボット手動操作部４１５に送られる。
【０１７１】
ここで、切替スイッチ１５を備えた操作盤５３の構成について説明する。図１９は、実施の形態４にかかる数値制御装置が備える操作盤の構成例を示す図である。図１９に示すように、操作盤５３は、工作機械１００の前面などに配置されている。また、工作機械１００の前面には、表示部４および手動ハンドル５５が配置されている。なお、図１９では、ジョグボタン５７、および軸選択スイッチ５９の図示を省略している。
【０１７２】
操作盤５３には、手動ハンドル５５による手動操作対象を切り替えるための切替スイッチ１５が配置されている。切替スイッチ１５は、手動操作対象をロボット６０に切り替えるためのスイッチと、手動操作対象を工作機械１００に切り替えるためのスイッチとを有している。切替スイッチ１５が操作されると、切替スイッチ１５は、操作に対応する手動操作対象を制御演算部２Ｌの解析処理部３７に送る。
【０１７３】
ロボット６０または工作機械１００が、手動操作可能な構成要素を複数有している場合、解析処理部３７は、入力操作部３から送られてくる情報に基づいて、手動操作に対応する移動対象がロボット６０の構成要素であるか工作機械１００の構成要素であるかを解析する。この場合、ユーザは、入力操作部３に対し、手動操作するロボット６０の構成要素を指定する操作、または手動操作する工作機械１００の構成要素を指定する操作を実行する。
【０１７４】
ロボット手動操作部４１５は、手動可否判断部４２１Ｒおよび移動データ送信部４２２を備えている。手動可否判断部４２１Ｒは、制御システムの状態（以下、システム状態という）に基づいて、ロボット６０の手動操作の可否を判断する。すなわち、手動可否判断部４２１Ｒは、ロボット６０、数値制御装置１Ｌ、および工作機械１００の少なくとも１つの状態に基づいて、ロボット６０の手動操作の可否を判断する。可否の判断には、数値制御装置１Ｌが持つ種々のデータが参照される。手動可否判断部４２１Ｒは、例えば、非常停止状態である場合、ロボットコントローラ５０との通信が未接続である場合、またはロボット６０の周辺の侵入禁止領域にユーザが侵入している場合に、手動操作不可と判断する。
【０１７５】
移動データ送信部４２２は、軸選択スイッチ５９で選択された軸情報と、解析処理部３７が解析した移動量に基づいて移動指令を生成し、移動指令をロボットコントローラ５０に送る。これにより、数値制御装置１Ｌは、ロボットコントローラ５０を介して、ロボット６０を操作することができる。解析処理部３７が解析した移動量は、ジョグボタン５７または手動ハンドル５５から送られてくる情報に対応している。すなわち、解析処理部３７が解析した移動量は、ジョグボタン５７または手動ハンドル５５への手動操作に対応している。
【０１７６】
手動可否判断部３８２Ｍは、システム状態に基づいて、工作機械１００の手動操作の可否を判断する。すなわち、手動可否判断部３８２Ｍは、ロボット６０、数値制御装置１Ｌ、および工作機械１００の少なくとも１つの状態に基づいて、工作機械１００の手動操作の可否を判断する。可否の判断には、数値制御装置１Ｌが持つ種々のデータが参照される。手動可否判断部３８２Ｍは、例えば、非常停止状態である場合、または工作機械１００の周辺の侵入禁止領域にユーザが侵入している場合に、手動操作不可と判断する。
【０１７７】
ここで、手動操作が行われた場合の、干渉チェック処理について説明する。本実施の形態の解析処理部３７は、切替スイッチ１５によって切替えられた手動操作対象（移動対象）と、ジョグボタン５７への操作に対応する操作情報を受け付ける。解析処理部３７は、移動対象がロボット６０である場合、受け付けた操作情報に基づいて移動量を算出し、移動量をロボット手動操作部４１５に送る。また、解析処理部３７は、移動対象が工作機械１００である場合、受け付けた操作情報に基づいて移動量を算出し、移動量を補間処理部３８に送る。
【０１７８】
ロボット手動操作部４１５は、移動量を受け付けると、移動量をロボット動作演算部８５２に送る。また、補間処理部３８は、移動量を受け付けると、移動量を機械動作演算部８５１に送る。
【０１７９】
ロボット動作演算部８５２は、ロボット手動操作部４１５から移動量を受け付けると、移動対象がロボット６０であると判断し、移動量に基づいて、ロボット６０の移動後の位置および形状を算出する。ロボット動作演算部８５２は、算出結果である、ロボット６０の移動後の位置および形状を干渉チェック部８５３に送信する。
【０１８０】
機械動作演算部８５１は、補間処理部３８から移動量を受け付けると、移動対象が工作機械１００であると判断し、移動量に基づいて、工作機械１００の移動後の位置および形状を算出する。機械動作演算部８５１は、算出結果である、工作機械１００の移動後の位置および形状を干渉チェック部８５３に送信する。
【０１８１】
干渉チェック部８５３は、ロボット動作演算部８５２から移動後のロボット６０の位置および形状を受け付けると、移動後のロボット６０の位置および形状と、工作機械１００の位置および形状とに基づいて、干渉をチェックする。この場合、干渉チェック部８５３は、干渉の有無を手動可否判断部４２１Ｒに送る。
【０１８２】
干渉チェック部８５３は、機械動作演算部８５１から移動後の工作機械１００の位置および形状を受け付けると、移動後の工作機械１００の位置および形状と、ロボット６０の位置および形状とに基づいて、干渉をチェックする。この場合、干渉チェック部８５３は、干渉の有無を手動可否判断部３８２Ｍに送る。
【０１８３】
手動可否判断部４２１Ｒは、干渉がある場合は、手動操作不可と判断し、移動データ送信部４２２によるロボットコントローラ５０へのデータ送信を禁止する。手動可否判断部４２１Ｒは、干渉がない場合は、システム状態に基づいて、移動データ送信部４２２によるロボットコントローラ５０へのデータ送信を許可するか否かを判断する。
【０１８４】
手動可否判断部３８２Ｍは、干渉がある場合は、手動操作不可と判断し、補間処理部３８による加減速処理部３９へのデータ送信を禁止する。手動可否判断部３８２Ｍは、干渉がない場合は、システム状態に基づいて、補間処理部３８による加減速処理部３９へのデータ送信を許可するかを判断する。干渉チェック部８５３は、干渉がある場合は、画面処理部３１を介して表示部４に干渉アラームを表示させてもよい。
【０１８５】
図２０は、実施の形態４にかかる数値制御装置が備える表示部で表示される干渉アラームの例を示す図である。表示部４は、干渉アラームとして、「手動操作による干渉発生のため移動不可」といったメッセージを画面上に表示する。
【０１８６】
ところで、手動操作がロボット６０への手動操作であった場合、干渉回避処理部８５４は、ロボット６０の姿勢を変えることで干渉を回避することが可能な場合がある。例えば、ユーザが、軸選択スイッチ５９でロボット６０の直線軸を指定して直線軸を移動させる場合、ロボット６０の姿勢によっては、干渉を回避可能な場合がある。そのため、干渉チェック部８５３にて干渉があると判断された場合、干渉回避処理部８５４は、姿勢を変更することで干渉回避が可能か否かを判断する。干渉回避が可能な場合、干渉回避処理部８５４は、手動可否判断部４２１Ｒに手動操作可能であることを通知するとともに、姿勢を変更した移動データを手動可否判断部４２１Ｒに送信する。干渉回避処理部８５４は、干渉回避処理部８０４と同様の方法によって、ロボット６０の姿勢を変更する移動データを算出する。
【０１８７】
つぎに、数値制御装置１Ｌによる干渉回避の方法について説明する。図２１は、実施の形態４にかかる数値制御装置によって実行される干渉回避の動作例を説明するための図である。数値制御装置１Ｌは、例えば、ロボット６０の姿勢変更によって干渉を回避する。図２１の左側に示すロボット６０は、ロボットアーム２１が搬送物７に衝突した状態を示し、図２１の右側に示すロボット６０は、ロボットアーム２１が搬送物７に衝突ないようロボット６０の軸の角度を変更した状態を示している。
【０１８８】
ユーザが、ロボット６０を手動で直交座標系の軸方向に対して移動させる指令を出している際に、干渉回避処理部８５４が、次の指令で干渉すると判断した場合、干渉回避処理部８５４は、姿勢を変えることによって干渉を回避できるか否かをチェックする。具体的には、干渉回避処理部８５４は、ロボットハンド２２の先端位置および姿勢が姿勢変更の前後で変わらないよう、ロボット６０の軸Ａ１，Ａ２，Ａ３の角度を算出し、算出した角度の姿勢で干渉するか否かをチェックする。
【０１８９】
ロボット６０の軸のうち、台座２３に接合されている第１のロボットアームの軸が軸Ａ１であり、第１のロボットアームに接合されている第２のロボットアームの軸が軸Ａ２であり、第２のロボットアームに接合されている第３のロボットアームの軸が軸Ａ３である。
【０１９０】
図２１では、軸Ａ１，Ａ２の角度が変更された場合を示している。干渉回避処理部８５４は、軸Ａ３の角度を変更しないことによって、ロボットハンド２２の先端位置および姿勢を姿勢変更の前後で変わらないようにしつつ、干渉を回避できる姿勢を算出する。
【０１９１】
干渉する場合、干渉回避処理部８５４は、軸Ａ１，Ａ２，Ａ３の角度を再度算出する処理と、干渉するか否かをチェックする処理とを繰り返す。干渉しない軸Ａ１，Ａ２，Ａ３の角度を算出できた場合のみ干渉回避が可能となる。
【０１９２】
つぎに、数値制御装置１Ｌによる干渉チェックおよび干渉回避の処理手順について説明する。図２２は、実施の形態４にかかる数値制御装置による干渉チェックおよび干渉回避の処理手順を示すフローチャートである。
【０１９３】
数値制御装置１Ｌは、手動操作が行われた際に、工作機械１００またはロボット６０に対して手動操作に対応する実際の動作を実行する前に、干渉の有無を判断し、干渉が無い場合には、工作機械１００またはロボット６０に対して手動操作に対応する実際の動作を実行させる。
【０１９４】
解析処理部３７は、手動操作を解析する（ステップＳ３１０）。具体的には、解析処理部３７は、切替スイッチ１５から送られてくる情報に基づいて、手動操作に対応する移動対象がロボット６０であるか工作機械１００であるかを解析する。また、解析処理部３７は、入力操作部３から送られてくる情報に基づいて、手動操作に対応する移動対象がロボット６０の構成要素であるか工作機械１００の構成要素であるかを解析する。また、解析処理部３７は、ジョグボタン５７または手動ハンドル５５から送られてくる操作情報を解析する。
【０１９５】
解析処理部３７は、移動対象が工作機械１００であるか否かを判断する。すなわち、解析処理部３７は、手動操作が工作機械１００の構成要素の移動に対応するか否かを判断する（ステップＳ３２０）。移動対象が工作機械１００の構成要素であった場合（ステップＳ３２０、Ｙｅｓ）、解析処理部３７は、記憶部３４および補間処理部３８を介して、機械動作演算部８５１に移動対象および移動量を送る。機械動作演算部８５１は、移動対象、移動量、機械モデル８１１、および工具データ８１３に基づいて、工作機械１００の手動操作に応じた移動後の位置および形状を算出する。
【０１９６】
干渉チェック部８５３は、ロボット６０との干渉をチェックする（ステップＳ３３０）。すなわち、干渉チェック部８５３は、手動操作によって移動した場合の工作機械１００が、ロボット６０に干渉するか否かを判断する。具体的には、干渉チェック部８５３は、移動後の工作機械１００の位置および形状と、ロボット６０の位置および形状とに基づいて、工作機械１００がロボット６０に干渉するか否かを判断する。このとき、干渉チェック部８５３は、ロボット６０の位置および形状を、ロボットモデル８１２および工具データ８１４に基づいて算出する。また、干渉チェック部８５３は、移動後の工作機械１００の位置および形状を、機械モデル８１１、工具データ８１３、移動対象、および移動量に基づいて算出する。
【０１９７】
干渉チェック部８５３は、干渉すると判断した場合には（ステップＳ３４０、Ｙｅｓ）、手動可否判断部３８２Ｍに工作機械１００の移動不可を通知する（ステップＳ３６０）。また、干渉チェック部８５３は、工作機械１００が備える軸を停止させ、干渉アラームを表示部４に表示させる。
【０１９８】
干渉チェック部８５３は、干渉しないと判断した場合には（ステップＳ３４０、Ｎｏ）、手動可否判断部３８２Ｍに工作機械１００の移動可能を通知する（ステップＳ３５０）。この場合、補間処理部３８は、システム状態に異常が無ければ、移動対象および移動量に基づいて、工作機械１００を制御するためのデータを生成し、加減速処理部３９に送る。これにより、工作機械１００が手動操作に従って制御される。
【０１９９】
移動対象がロボット６０の構成要素であった場合（ステップＳ３２０、Ｎｏ）、解析処理部３７は、記憶部３４およびロボット手動操作部４１５を介して、ロボット動作演算部８５２に移動対象および移動量を送る。ロボット動作演算部８５２は、移動対象、移動量、ロボットモデル８１２、および工具データ８１４に基づいて、ロボット６０の移動後の位置および形状を算出する。
【０２００】
干渉チェック部８５３は、工作機械１００との干渉をチェックする（ステップＳ３７０）。すなわち、干渉チェック部８５３は、手動操作によって移動した場合のロボット６０が、工作機械１００に干渉するか否かを判断する。具体的には、干渉チェック部８５３は、移動後のロボット６０の位置および形状と、工作機械１００の位置および形状とに基づいて、ロボット６０が工作機械１００に干渉するか否かを判断する。
【０２０１】
干渉チェック部８５３は、干渉すると判断した場合には（ステップＳ３８０、Ｙｅｓ）、干渉回避処理部８５４にロボット６０の移動不可を通知する。干渉回避処理部８５４は、ロボット６０の姿勢変更による干渉回避動作を計算する（ステップＳ３９０）。干渉チェック部８５３は、干渉の回避が可能か否かを判断する（ステップＳ４００）。干渉チェック部８５３が干渉の回避が不可能であると判断した場合（ステップＳ４００、Ｎｏ）、干渉チェック部８５３は、手動可否判断部４２１Ｒにロボット６０の移動不可を通知する（ステップＳ４１０）。また、干渉チェック部８５３は、ロボット６０が備える軸を停止させ、干渉アラームを表示部４に表示させる。
【０２０２】
ステップＳ４００の処理において、干渉チェック部８５３が干渉の回避が可能であると判断した場合（ステップＳ４００、Ｙｅｓ）、干渉チェック部８５３は、手動可否判断部４２１Ｒにロボット６０の移動可能を通知する（ステップＳ４２０）。また、干渉チェック部８５３は、移動データ送信部４２２に干渉回避の動作指令を送る（ステップＳ４３０）。干渉回避の動作指令は、干渉を回避することができるロボット６０への移動データを含んでいる。移動データ送信部４２２は、干渉回避の動作指令に基づいて、ロボット６０に移動データを送る。これにより、ロボット６０が手動操作に従って制御される。
【０２０３】
ステップＳ３８０の処理において、干渉チェック部８５３は、干渉しないと判断した場合には（ステップＳ３８０、Ｎｏ）、手動可否判断部４２１Ｒにロボット６０の移動可能を通知する（ステップＳ４４０）。ロボット制御部４１は、移動対象および移動量を用いて、ロボット６０を制御するためのデータを生成し、ロボットコントローラ５０に送る。これにより、ロボット６０が数値制御装置１Ｌによって制御される。
【０２０４】
このように実施の形態４によれば、工作機械１００またはロボット６０への手動操作に対して、工作機械１００とロボット６０との間に干渉が発生するか否かを判断し、干渉する場合には、干渉回避の動作を実行するので、手動操作の際の干渉を回避することができる。
【０２０５】
実施の形態５．
つぎに、図２３を用いてこの発明の実施の形態５について説明する。実施の形態５では、機械学習装置が、干渉の有無を学習する。
【０２０６】
図２３は、実施の形態５にかかる数値制御装置の構成例を示す図である。図２３の各構成要素のうち数値制御装置１Ｙと同一機能を達成する構成要素については同一符号を付しており、重複する説明は省略する。
【０２０７】
数値制御装置１Ｍは、数値制御装置１Ｙと比較して、制御演算部２Ｙの代わりに制御演算部２Ｍを備えている。制御演算部２Ｍは、制御演算部２Ｙが備える構成要素に加えて、機械学習装置７０を備えている。
【０２０８】
機械学習装置７０は、シミュレーション制御部８０Ｙと、解析処理部３７とに接続されている。機械学習装置７０は、シミュレーション位置情報（ｒ）と、ＮＣプログラム情報（ｒ）と、干渉情報（ｒ）とを用いて、工作機械１００とロボット６０の間の干渉の有無を学習する。すなわち、機械学習装置７０は、干渉の有無の推測処理を学習する。
【０２０９】
シミュレーション位置情報（ｒ）は、シミュレーション制御部８０Ｙが、干渉の有無を判定する際に、シミュレーション用データ３４６を用いて工作機械１００およびロボット６０の位置を算出した位置データである。シミュレーション制御部８０Ｙは、干渉の有無を判定する際には、シミュレーション位置情報（ｒ）を画面処理部３１に送り、干渉の有無を学習する際には、シミュレーション位置情報（ｒ）を機械学習装置７０に送る。
【０２１０】
ＮＣプログラム情報（ｒ）は、干渉の有無が判定される際に、解析処理部３７が用いたＮＣプログラムの情報である。干渉情報（ｒ）は、工作機械１００がロボット６０に衝突するかを示す衝突情報である。干渉情報（ｒ）は、干渉（衝突）の有無を示す情報と、干渉の位置を示す情報と、干渉する構成要素（干渉対象）を示す情報とを含んでいる。
【０２１１】
機械学習装置７０は、状態観測部７１と、データ取得部７２と、学習部７３とを含んでいる。状態観測部７１は、シミュレーション位置情報（ｒ）をシミュレーション制御部８０Ｙから取得し、ＮＣプログラム情報（ｒ）を解析処理部３７から取得する。状態観測部７１は、シミュレーション位置情報（ｒ）およびＮＣプログラム情報（ｒ）を状態情報（ｉ）として観測する。状態観測部７１は、データ観測した結果である状態情報（ｉ）を学習部７３に出力する。データ取得部７２は、干渉チェック部８０３から干渉情報（ｒ）を取得する。データ取得部７２は、干渉情報（ｒ）を学習部７３に出力する。
【０２１２】
学習部７３は、状態情報（ｉ）および干渉情報（ｒ）の組み合わせに基づいて作成されるデータセットに基づいて、干渉の有無を推測した情報である干渉推測情報（ｎ）を学習する。ここで、状態変数である状態情報（ｉ）は、シミュレーション位置情報（ｒ）およびＮＣプログラム情報（ｒ）を互いに関連付けたデータである。
【０２１３】
なお、機械学習装置７０は、数値制御装置１Ｍに設けられるものに限られない。機械学習装置７０は、数値制御装置１Ｍの外部に設けられてもよい。機械学習装置７０は、ネットワークを介して数値制御装置１Ｍに接続可能な装置に設けられてもよい。すなわち、機械学習装置７０は、ネットワークを介して数値制御装置１Ｍに接続された別個のコンポーネントであってもよい。また、機械学習装置７０は、クラウドサーバ上に存在していてもよい。
【０２１４】
学習部７３は、例えば、ニューラルネットワークモデルに従って、いわゆる教師あり学習により、シミュレーション位置情報（ｒ）およびＮＣプログラム情報（ｒ）を含んだ状態情報（ｉ）と、教師データである干渉情報（ｒ）とから干渉推測情報（ｎ）を学習する。ここで、教師あり学習とは、ある入力と結果のデータの組を大量に学習装置に与えることで、それらのデータセットにある特徴を学習し、入力から結果を推定するモデルをいう。
【０２１５】
ニューラルネットワークは、複数のニューロンからなる入力層、複数のニューロンからなる中間層（隠れ層）、および複数のニューロンからなる出力層で構成される。中間層は、１層でもよいし２層以上でもよい。
【０２１６】
例えば、３層のニューラルネットワークであれば、複数の入力が入力層に入力されると、その値に重みを掛けて中間層に入力され、その結果にさらに重みを掛けて出力層から出力される。この出力結果は、各々の重みの値によって変わる。
【０２１７】
本実施の形態のニューラルネットワークは、状態情報（ｉ）および干渉情報（ｒ）の組み合わせに基づいて作成されるデータセットに従って、いわゆる教師あり学習により、干渉推測情報（ｎ）を学習結果（推測値）として出力する。
【０２１８】
すなわち、ニューラルネットワークは、入力層にシミュレーション位置情報（ｒ）とＮＣプログラム情報（ｒ）とを含んだ状態情報（ｉ）を入力して出力層から出力された結果が、干渉情報（ｒ）に近付くよう、重みを調整することで、干渉推測情報（ｎ）を学習する。
【０２１９】
また、ニューラルネットワークは、いわゆる教師なし学習によって、干渉推測情報（ｎ）を学習することもできる。教師なし学習とは、入力データのみを大量に機械学習装置７０に与えることで、入力データがどのような分布をしているか学習し、対応する教師データ（出力データ）を与えなくても、入力データに対して圧縮、分類、整形等を行い学習する手法である。教師なし学習では、データセットにある特徴を似たもの同士にクラスタリングすること等ができる。教師なし学習では、このクラスタリングの結果を使って、何らかの基準を設けて、この基準を最適にするような出力の割り当てを行うことで、出力の予測を実現することができる。
【０２２０】
また、機械学習装置７０は、複数の数値制御装置に対して作成されるデータセットに従って、干渉推測情報（ｎ）を学習結果（推測値）として出力してもよい。なお、機械学習装置７０は、同一の現場で使用される複数の数値制御装置からデータセットを取得してもよいし、或いは、異なる現場で独立して稼働する複数の数値制御装置から収集されるデータセットを利用して干渉推測情報（ｎ）を学習してもよい。さらに、機械学習装置７０は、データセットを収集する数値制御装置を途中で対象に追加し、或いは、逆に対象から切り離すことも可能である。また、ある数値制御装置に関して干渉推測情報（ｎ）を学習した機械学習装置７０を、これとは別の数値制御装置に取り付け、当該別の数値制御装置に関して干渉推測情報（ｎ）を再学習して更新するようにしてもよい。
【０２２１】
また、機械学習装置７０に用いられる学習アルゴリズムとしては、特徴量そのものの抽出を学習する、深層学習（Deep  Learning）を用いることもできる。また、学習部７３は、他の公知の方法、例えば遺伝的プログラミング、機能論理プログラミング、サポートベクターマシンなどに従って機械学習を実行してもよい。
【０２２２】
機械学習装置７０は、推測した干渉推測情報（ｎ）をシミュレーション制御部８０Ｙに出力する。シミュレーション制御部８０Ｙは、干渉が発生する直前ではなく、干渉の発生が推測されるＮＣプログラムのブロックの前のブロックエンドで工作機械１００を停止させる。干渉が発生する直前で工作機械１００またはロボット６０を停止した場合、工作機械１００またはロボット６０の移動速度によっては、停止に時間がかかり、干渉を起こす場合があるからである。本実施の形態では、シミュレーション制御部８０Ｙが、干渉の発生が推測されるＮＣプログラムのブロックの前のブロックエンドで工作機械１００を停止させるので、干渉を防ぐことができる。
【０２２３】
このように実施の形態５では、機械学習装置７０が、干渉情報（ｒ）と、シミュレーション位置情報（ｒ）と、ＮＣプログラム情報（ｒ）とを互いに関連付けたデータセットに基づいて、干渉推測情報（ｎ）を学習している。したがって、機械学習装置７０は、状態情報（ｉ）に基づいて、干渉推測情報（ｎ）を算出することが可能となる。
【０２２４】
実施の形態６．
つぎに、図２３を用いてこの発明の実施の形態６について説明する。実施の形態６では、実施の形態４で説明した制御演算部２Ｌの動作に機械学習装置７０を適用する。実施の形態６では、実施の形態５と比較して、状態情報（ｉ）に干渉情報（ｒ）が加わり、教師データに干渉情報（ｒ）ではなく干渉回避プログラム情報（ｒ）を用いる。また、実施の形態６では、機械学習装置７０が干渉推測情報（ｎ）ではなく干渉回避推測情報（ｎ）を学習する。
【０２２５】
干渉回避プログラム情報（ｒ）は、干渉を回避する際に、干渉回避処理部８０４が用いたＮＣプログラムの情報である。干渉回避推測情報（ｎ）は、干渉を回避するための指令を推測した情報である。
【０２２６】
機械学習装置７０は、シミュレーション位置情報（ｒ）と、ＮＣプログラム情報（ｒ）と、干渉情報（ｒ）とを用いて、干渉回避推測情報（ｎ）を学習する、すなわち、機械学習装置７０は、干渉回避に用いるＮＣプログラムの指令を推測する。
【０２２７】
本実施の形態の状態観測部７１は、シミュレーション位置情報（ｒ）、ＮＣプログラム情報（ｒ）、および干渉情報（ｒ）を状態情報（ｉ）として観測する。状態観測部７１は、データ観測した結果である状態情報（ｉ）を学習部７３に出力する。
【０２２８】
データ取得部７２は、干渉回避処理部８０４から干渉回避プログラム情報（ｒ）を取得する。データ取得部７２は、干渉回避プログラム情報（ｒ）を学習部７３に出力する。干渉回避処理部８０４は、干渉を回避する際には、干渉回避プログラム情報（ｒ）をロボット制御部４１に送り、干渉の回避を学習する際には、干渉回避プログラム情報（ｒ）を機械学習装置７０に送る。
【０２２９】
本実施の形態では、状態観測部７１は、シミュレーション位置情報（ｒ）、ＮＣプログラム情報（ｒ）、および干渉情報（ｒ）を状態情報（ｉ）として観測する。
【０２３０】
また、本実施の形態の学習部７３は、状態情報（ｉ）および教師データである干渉回避プログラム情報（ｒ）の組み合わせに基づいて作成されるデータセットに基づいて、干渉回避推測情報（ｎ）を学習する。ここで、データセットは、状態変数である状態情報（ｉ）および干渉回避プログラム情報（ｒ）を互いに関連付けたデータである。
【０２３１】
本実施の形態でも学習部７３は、例えば、ニューラルネットワークモデルに従って、いわゆる教師あり学習により、状態情報（ｉ）と干渉回避プログラム情報（ｒ）を互いに関連付けたデータセットから干渉回避推測情報（ｎ）を学習する。
【０２３２】
すなわち、ニューラルネットワークは、入力層にシミュレーション位置情報（ｒ）とＮＣプログラム情報（ｒ）と干渉情報（ｒ）と含んだ状態情報（ｉ）を入力して出力層から出力された結果が、干渉回避プログラム情報（ｒ）に近付くよう、重みを調整することで、干渉回避推測情報（ｎ）を学習する。本実施の形態のニューラルネットワークは、いわゆる教師あり学習により、干渉回避推測情報（ｎ）を学習結果（推測した指令）として出力する。
【０２３３】
また、本実施の形態のニューラルネットワークは、いわゆる教師なし学習によって、干渉回避推測情報（ｎ）を学習することもできる。
【０２３４】
また、機械学習装置７０は、複数の数値制御装置に対して作成されるデータセットに従って、干渉回避推測情報（ｎ）を学習結果（推測値）として出力してもよい。また、ある数値制御装置に関して干渉回避推測情報（ｎ）を学習した機械学習装置７０を、これとは別の数値制御装置に取り付け、当該別の数値制御装置に関して干渉回避推測情報（ｎ）を再学習して更新するようにしてもよい。
【０２３５】
また、干渉回避制御部８１は、干渉が発生する直前ではなく、干渉の発生が推測されるＮＣプログラムのブロックの前のブロックに干渉回避推測情報に対応する指令を挿入する。干渉回避推測情報に対応する指令は、干渉を回避させることができるＮＣプログラムの指令である。これにより、干渉回避制御部８１は、工作機械１００とロボット６０との間の干渉を事前に回避することができる。
【０２３６】
このように実施の形態６では、機械学習装置７０が、干渉情報（ｒ）と、シミュレーション位置情報（ｒ）と、ＮＣプログラム情報（ｒ）と、干渉回避プログラム情報（ｒ）とを互いに関連付けたデータセットに基づいて、干渉回避推測情報（ｎ）を学習している。したがって、機械学習装置７０は、状態情報（ｉ）に基づいて、干渉回避プログラム情報（ｎ）を算出することが可能となる。
【０２３７】
なお、実施の形態１から６の内容を組み合わせてもよい。例えば、数値制御装置１Ｘ〜１Ｚの少なくとも１つが、ロボット手動操作部４１５を備えていてもよい。また、数値制御装置１Ｘ〜１Ｚの少なくとも１つが、機械学習装置７０を備えていてもよい。
【０２３８】
ここで、制御演算部２Ｘ，２Ｙ，２Ｚ，２Ｌ，２Ｍのハードウェア構成について説明する。図２４は、実施の形態にかかる数値制御装置が備える制御演算部のハードウェア構成例を示す図である。なお、制御演算部２Ｘ，２Ｙ，２Ｚ，２Ｌ，２Ｍは、同様のハードウェア構成を有しているので、ここでは制御演算部２Ｘのハードウェア構成について説明する。
【０２３９】
制御演算部２Ｘは、図２４に示したプロセッサ３０１、メモリ３０２、およびインタフェース回路３０３により実現することができる。プロセッサ３０１の例は、ＣＰＵ（Central  Processing  Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサ、ＤＳＰ（Digital  Signal  Processor）ともいう）またはシステムＬＳＩ（Large  Scale  Integration）である。メモリ３０２の例は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）である。
【０２４０】
制御演算部２Ｘは、プロセッサ３０１が、メモリ３０２で記憶されている、制御演算部２Ｘの動作を実行するためのプログラムを読み出して実行することにより実現される。また、このプログラムは、制御演算部２Ｘの手順または方法をコンピュータに実行させるものであるともいえる。メモリ３０２は、プロセッサ３０１が各種処理を実行する際の一時メモリにも使用される。
【０２４１】
なお、制御演算部２Ｘの機能について、一部を専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。また、機械学習装置７０を、図２４に示したハードウェアで実現してもよい。
【０２４２】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【０２４３】
１Ｌ，１Ｍ，１Ｘ〜１Ｚ  数値制御装置、２Ｌ，２Ｍ，２Ｘ〜２Ｚ  制御演算部、３  入力操作部、４  表示部、５ａ，５ｂ  加工ワーク、６ａ〜６ｃ  工具、７  搬送物、１１ａ，１１ｂ  工具ホルダ、１２ａ，１２ｂ  チャック機構、１４  筐体、１５  切替スイッチ、２１  ロボットアーム、２２  ロボットハンド、２３  台座、３０  ローダ、３１  画面処理部、３４  記憶部、３７  解析処理部、３８  補間処理部、３９  加減速処理部、４０  軸データ出力部、４１，４１Ｌ  ロボット制御部、５０  ロボットコントローラ、５３  操作盤、５５  手動ハンドル、５７  ジョグボタン、５９  軸選択スイッチ、６０  ロボット、７０  機械学習装置、７１  状態観測部、７２  データ取得部、７３  学習部、８０Ｘ〜８０Ｚ  シミュレーション制御部、８１  干渉回避制御部、９０  駆動部、１００  工作機械、１３０〜１３５  画面、３０１  プロセッサ、３０２  メモリ、３０３  インタフェース回路、３４１  パラメータ記憶エリア、３４３  ＮＣプログラム記憶エリア、３４４  表示データ記憶エリア、３４５  共有エリア、３４６  シミュレーション用データ、３７１  ロボット指令解析部、３８２Ｍ，４２１Ｒ  手動可否判断部、４１５  ロボット手動操作部、４２２  移動データ送信部、８０１，８５１  機械動作演算部、８０２，８５２  ロボット動作演算部、８０３，８５３  干渉チェック部、８０４，８５４  干渉回避処理部、８０５  移動軌跡演算部、８０６  ワーク位置演算部、８０７  ワーク形状演算部、８１１  機械モデル、８１２  ロボットモデル、８１３，８１４  工具データ、８１５  ワークデータ、Ｐ１  ロボット経由点、Ｐ２  面取り位置。
【要約】
数値制御装置（１Ｘ）が、機械モデル（８１１）と、工作機械（１００）が備える第１の構成要素の位置を制御する際に用いられる第１の位置データとを用いて、特定タイミングにおける第１の構成要素の位置を算出する機械動作演算部（８０１）と、ロボットモデル（８１２）と、ロボット（６０）が備える第２の構成要素の位置を制御する際に用いられる第２の位置データとを用いて特定タイミングにおける第２の構成要素の位置を算出するロボット動作演算部（８０２）と、第１の構成要素の位置および第２の構成要素の位置に基づいて、工作機械（１００）とロボット（６０）とが衝突するか否かを判断する干渉チェック部（８０３）を有する。【図１】
0006914452.tif 000002
【図２】
0006914452.tif 000003
【図３】
0006914452.tif 000004
【図４】
0006914452.tif 000005
【図５】
0006914452.tif 000006
【図６】
0006914452.tif 000007
【図７】
0006914452.tif 000008
【図８】
0006914452.tif 000009
【図９】
0006914452.tif 000010
【図１０】
0006914452.tif 000011
【図１１】
0006914452.tif 000012
【図１２】
0006914452.tif 000013
【図１３】
0006914452.tif 000014
【図１４】
0006914452.tif 000015
【図１５】
0006914452.tif 000016
【図１６】
0006914452.tif 000017
【図１７】
0006914452.tif 000018
【図１８】
0006914452.tif 000019
【図１９】
0006914452.tif 000020
【図２０】
0006914452.tif 000021
【図２１】
0006914452.tif 000022
【図２２】
0006914452.tif 000023
【図２３】
0006914452.tif 000024
【図２４】
0006914452.tif 000025