(57)【特許請求の範囲】
【請求項１】
工具を装着し且つ回転する主軸と、被削材を固定するテーブルと、前記主軸又は前記テーブルを相対的に移動する移動機構とを備え、前記主軸と共に回転する工具で前記被削材を切削する工作機械の動作を、ＮＣプログラムに基づき制御する数値制御装置において、
前記ＮＣプログラム中の特定箇所を指定する指定手段と、
前記指定手段が指定した前記特定箇所における前記主軸又は前記テーブルの予測位置を取得する取得手段と、
前記ＮＣプログラムの運転中、前記特定箇所を実行するときの前記主軸又は前記テーブルの実位置と、前記取得手段が取得した前記予測位置とが一致するか否か判断する判断手段と、
前記判断手段が前記予測位置と前記実位置とが一致しないと判断した場合、エラーを出力する出力手段と
を備え、
前記指定手段は、
前記ＮＣプログラム中の前記特定箇所に挿入する指定コードに基づき、前記特定箇所を指定すること
を特徴とする数値制御装置。
【請求項２】
前記ＮＣプログラム中に記述した制御コードに基づき、前記予測位置を演算する演算手段を備え、
前記取得手段は、前記演算手段が演算した前記予測位置を取得可能であること
を特徴とする請求項１に記載の数値制御装置。
【請求項３】
前記演算手段は、
前記指定手段が指定した前記特定箇所がメインプログラムに従属するサブプログラムに属するか判断するサブプログラム判断手段と、
前記サブプログラム判断手段が、前記特定箇所は前記サブプログラムに属すると判断した場合、前記サブプログラムが従属する前記メインプログラムを特定する特定手段と
を備え、
前記特定手段が特定した前記メインプログラム中に記述した前記制御コードに遡って、前記サブプログラムに属する前記特定箇所における前記主軸又は前記テーブルの前記予測位置を演算すること
を特徴とする請求項２に記載の数値制御装置。
【請求項４】
前記ＮＣプログラムは、前記被削材を複数の工程で加工するものであって、
前記特定箇所は、前記複数の工程のうち少なくとも一つの工程を実行する前の箇所に設定したこと
を特徴とする請求項１から３の何れか一つに記載の数値制御装置。
【請求項５】
工具を装着し且つ回転する主軸と、被削材を固定するテーブルと、前記主軸又は前記テーブルを相対的に移動する移動機構とを備え、前記主軸と共に回転する工具で前記被削材を切削する工作機械の動作を、ＮＣプログラムに基づき制御する数値制御装置の制御方法において、
前記ＮＣプログラム中の特定箇所を指定する指定工程と、
前記指定工程で指定した前記特定箇所における前記主軸又は前記テーブルの予測位置を取得する取得工程と、
前記ＮＣプログラムの運転中、前記特定箇所を実行するときの前記主軸又は前記テーブルの実位置と、前記取得工程で取得した前記予測位置とが一致するか否か判断する判断工程と、
前記判断工程で前記予測位置と前記実位置とが一致しないと判断した場合、エラーを出力する出力工程と
を備え、
前記指定工程では、
前記ＮＣプログラム中の前記特定箇所に挿入する指定コードに基づき、前記特定箇所を指定すること
を特徴とする数値制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数値制御装置と数値制御装置の制御方法に関する。
【背景技術】
【０００２】
特許文献１が開示する数値制御装置は、操作者がＮＣプログラムの変更、パラメータ・補正量・加工状態を含む加工条件の変更、手動介入等を行った時、プログラム停止前後の座標値、加工条件、ブロック終点座標値を比較する。座標値、加工条件、終点座標値の計算結果の差分がパラメータで指定した設定範囲を越える時、数値制御装置はアラーム、メッセージ、又は警告信号を出力し、操作者に加工経路が変更した事を通知する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１５３０６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の数値制御装置は被削材の加工精度に影響の無い場合でも通知するので、通知が必要な場合とそうでない場合の区別がつかないという問題点があった。
【０００５】
本発明の目的は、ＮＣプログラム中の特定箇所にて誤った位置から移動するのを防止できる数値制御装置と数値制御装置の制御方法を提供することにある。
【課題を解決するための手段】
【０００６】
請求項１に係る数値制御装置は、工具を装着し且つ回転する主軸と、被削材を固定するテーブルと、前記主軸又は前記テーブルを相対的に移動する移動機構とを備え、前記主軸と共に回転する工具で前記被削材を切削する工作機械の動作を、ＮＣプログラムに基づき制御する数値制御装置において、前記ＮＣプログラム中の特定箇所を指定する指定手段と、前記指定手段が指定した前記特定箇所における前記主軸又は前記テーブルの予測位置を取得する取得手段と、前記ＮＣプログラムの運転中、前記特定箇所を実行するときの前記主軸又は前記テーブルの実位置と、前記取得手段が取得した前記予測位置とが一致するか否か判断する判断手段と、前記判断手段が前記予測位置と前記実位置とが一致しないと判断した場合、エラーを出力する出力手段とを備え、前記指定手段は、前記ＮＣプログラム中の前記特定箇所に挿入する指定コードに基づき、前記特定箇所を指定することを特徴とする。ＮＣプログラムに従い被削材の切削を実行する時、操作者は特定箇所でＮＣプログラムを一旦停止して目視確認、又は主軸又はテーブルを移動する等の介入操作を行うことがある。ＮＣプログラを再開する時、数値制御装置は、ＮＣプログラムの特定箇所における主軸又はテーブルの予測位置と現在の実位置が一致するか否か判断する。予測位置と実位置が一致しない時、主軸に装着する工具とテーブル上に固定する被削材が干渉する可能性があるので、数値制御装置はエラーを出力する。故に数値制御装置はＮＣプログラム中の特定箇所にて誤った位置から移動するのを防止できる。
【０００７】
前記指定手段は、前記ＮＣプログラム中の前記特定箇所に挿入する指定コードに基づき、前記特定箇所を指定するので、数値制御装置はＮＣプログラム中の特定箇所を簡単に指定できる。
【０００８】
【０００９】
請求項２に係る数値制御装置は、請求項１に記載の発明の構成に加え、前記ＮＣプログラム中に記述した制御コードに基づき、前記予測位置を演算する演算手段を備え、前記取得手段は、前記演算手段が演算した前記予測位置を取得可能であることを特徴とする。故に数値制御装置はＮＣプログラム中の特定箇所における予測位置を演算して取得できる。
【００１０】
請求項３に係る数値制御装置は、請求項２に記載の発明の構成に加え、前記演算手段は、前記指定手段が指定した前記特定箇所がメインプログラムに従属するサブプログラムに属するか判断するサブプログラム判断手段と、前記サブプログラム判断手段が、前記特定箇所は前記サブプログラムに属すると判断した場合、前記サブプログラムが従属する前記メインプログラムを特定する特定手段とを備え、前記特定手段が特定した前記メインプログラム中に記述した前記制御コードに遡って、前記サブプログラムに属する前記特定箇所における前記主軸又は前記テーブルの前記予測位置を演算することを特徴とする。故に数値制御装置は特定箇所がサブプログラムに属する場合でも、該サブプログラムに対応するメインプログラムまで遡って予測位置を演算できる。
【００１１】
請求項４に係る数値制御装置は、請求項１から３の何れか一つに記載の発明の構成に加え、前記ＮＣプログラムは、前記被削材を複数の工程で加工するものであって、前記特定箇所は、前記複数の工程のうち少なくとも一つの工程を実行する前の箇所に設定したことを特徴とする。例えば複数工程で被削材を連続で加工する様な長いＮＣプログラムを実行する場合、数値制御装置は複数工程のうち特に重要な工程の直前の箇所を特定箇所に設定する。故に数値制御装置は重要な工程を実行する時、誤った位置から加工を開始するのを防止できる。
【００１２】
請求項５に係る数値制御装置の制御方法は、工具を装着し且つ回転する主軸と、被削材を固定するテーブルと、前記主軸又は前記テーブルを相対的に移動する移動機構とを備え、前記主軸と共に回転する工具で前記被削材を切削する工作機械の動作を、ＮＣプログラムに基づき制御する数値制御装置の制御方法において、前記ＮＣプログラム中の特定箇所を指定する指定工程と、前記指定工程で指定した前記特定箇所における前記主軸又は前記テーブルの予測位置を取得する取得工程と、前記ＮＣプログラムの運転中、前記特定箇所を実行するときの前記主軸又は前記テーブルの実位置と、前記取得工程で取得した前記予測位置とが一致するか否か判断する判断工程と、前記判断工程で前記予測位置と前記実位置とが一致しないと判断した場合、エラーを出力する出力工程とを備え、前記指定工程では、前記ＮＣプログラム中の前記特定箇所に挿入する指定コードに基づき、前記特定箇所を指定することを特徴とする。故に数値制御装置は上記工程を実行することで請求項１に記載の効果を得ることができる。
【図面の簡単な説明】
【００１３】
【図１】工作機械１の斜視図。
【図２】数値制御装置３０と工作機械１の電気的構成を示すブロック図。
【図３】ＮＣプログラムＰ１の図。
【図４】ＮＣプログラムＰ１に基づく加工経路と被削材７０を真上から見た図。
【図５】工具４が被削材７０と干渉した時の図。
【図６】Ｍ３８０を挿入したＮＣプログラムＰ１の図。
【図７】ＮＣプログラムＰ２の図。
【図８】チェック位置設定処理の流れ図。
【図９】位置算出処理の流れ図。
【図１０】プログラム選択画面６１の図。
【図１１】プログラムチェック画面６２の図。
【図１２】チェック位置設定画面６３の図。
【図１３】チェック位置設定画面６３（情報表示部６３２：自動設定案内表示）の図。
【図１４】チェック位置設定画面６３（チェック位置設定部６３１：算出結果表示）の図。
【図１５】ＮＣプログラムＰ３の図。
【図１６】ＮＣプログラムＰ４の図。
【図１７】ＮＣプログラムＰ５の図。
【図１８】ＮＣプログラムＰ６ＡとＮＣプログラムＰ６Ｂの図。
【図１９】ＮＣプログラムＰ７ＡとＮＣプログラムＰ７Ｂの図。
【図２０】ＮＣプログラムＰ８ＡとＮＣプログラムＰ８Ｂの図。
【図２１】ＮＣ運転処理の流れ図。
【図２２】ＮＣプログラムＰ９Ａ，Ｐ１０とＮＣプログラムＰ９Ｂの図。
【発明を実施するための形態】
【００１４】
本発明の実施形態を図面を参照して説明する。以下説明は、図中に矢印で示す左右、前後、上下を使用する。工作機械１の左右方向、前後方向、上下方向は、夫々、Ｘ軸方向、Ｙ軸方向、Ｚ軸方向である。
【００１５】
図１を参照し、工作機械１の構造を説明する。工作機械１は主軸９に装着した工具４を回転し、テーブル１３上面に保持した被削材（図示略）に各種加工を施す。各種加工とは、例えばドリル、タップ等を用いた穴空け加工、エンドミル、フライス等を用いた側面加工等である。数値制御装置３０（図２参照）は工作機械１の動作を制御する。
【００１６】
工作機械１は、基台２、コラム５、主軸ヘッド７、主軸９、テーブル装置１０、工具交換装置２０、制御箱６、操作盤１５（図３参照）等を備える。基台２は略直方体状の金属製土台である。コラム５は基台２上部後方に立設する。
【００１７】
主軸ヘッド７はコラム５前面に設けたＺ軸移動機構でＺ軸方向に昇降する。Ｚ軸移動機構は一対のＺ軸リニアガイド（図示略）、Ｚ軸ボール螺子（図示略）、Ｚ軸モータ５１（図２参照）を備える。Ｚ軸リニアガイドはＺ軸方向に沿って延び、主軸ヘッド７をＺ軸方向に案内する。Ｚ軸ボール螺子は一対のＺ軸リニアガイドの間に配置する。主軸ヘッド７は背面にナット（図示略）を備える。ナットはＺ軸ボール螺子に螺合する。Ｚ軸モータ５１はＺ軸ボール螺子を正逆方向に回転する。故に主軸ヘッド７はナットと共にＺ軸方向に移動する。主軸ヘッド７は主軸モータ５２（図２参照）を備える。主軸９は主軸ヘッド７内部に回転可能に設ける。主軸９は下端部（先端部）に装着穴（図示略）を有する。装着穴は主軸ヘッド７下部に位置する。主軸９は装着穴に工具４を装着し、主軸モータ５２の駆動で回転する。
【００１８】
テーブル装置１０は、Ｙ軸移動機構（図示略）、Ｙ軸テーブル１２、Ｘ軸移動機構（図示略）、テーブル１３等を備える。Ｙ軸移動機構は基台２上面前側に設け、一対のＹ軸レール、Ｙ軸ボール螺子、Ｙ軸モータ５４（図２参照）等を備える。一対のＹ軸レールとＹ軸ボール螺子はＹ軸方向に延びる。一対のＹ軸レールは上面にＹ軸テーブル１２をＹ軸方向に案内する。Ｙ軸テーブル１２は略直方体状に形成し、底部外面にナット（図示略）を備える。該ナットはＹ軸ボール螺子に螺合する。Ｙ軸モータ５４がＹ軸ボール螺子を回転すると、Ｙ軸テーブル１２はナットと共に一対のＹ軸レールに沿って移動する。故にＹ軸移動機構はＹ軸テーブル１２をＹ軸方向に移動可能に支持する。
【００１９】
Ｘ軸移動機構はＹ軸テーブル１２上面に設け、一対のＸ軸レール（図示略）、Ｘ軸ボール螺子（図示略）、Ｘ軸モータ５３（図２参照）等を備える。Ｘ軸レールとＸ軸ボール螺子はＸ軸方向に延びる。テーブル１３は平面視矩形板状に形成し、Ｙ軸テーブル１２上面に設ける。テーブル１３は底部にナット（図示略）を備える。該ナットはＸ軸ボール螺子に螺合する。Ｘ軸モータ５３がＸ軸ボール螺子を回転すると、テーブル１３はナットと共に一対のＸ軸レールに沿って移動する。故にＸ軸移動機構はテーブル１３をＸ軸方向に移動可能に支持する。故にテーブル１３は、Ｙ軸移動機構、Ｙ軸テーブル１２、Ｘ軸移動機構により、基台２上をＸ軸方向とＹ軸方向に移動可能である。
【００２０】
工具交換装置２０は主軸ヘッド７前側に設け、円盤型の工具マガジン２１を備える。工具マガジン２１は外周に複数のグリップアーム９０を放射状に備える。グリップアーム９０は工具（図示略）を保持する。工具交換装置２０はマガジンモータ５５（図２参照）を駆動して工具マガジン２１を回転し、ＮＣプログラムに記述した工具交換指令が指示する工具４を工具交換位置に位置決めする。工具交換位置は工具マガジン２１の最下部位置である。工具交換装置２０は、主軸ヘッド７の昇降動作と、グリップアーム９０の揺動動作により、主軸９に現在装着する工具４と、工具交換位置にある次工具とを入れ替え交換する。
【００２１】
制御箱６はコラム５背面側に取り付け、数値制御装置３０（図２参照）を格納する。操作盤１５（図２参照）は、例えば工作機械１を覆うカバー（図示略）の外壁に設ける。操作盤１５は入力部２４と表示部２５を備える。表示部２５は数値制御装置３０からの指令に基づき各種画面等を表示する。入力部２４は各種情報、操作指示等の入力を受け付けるタッチパネル（図示略）、物理的な各種ボタン（図示略）等を有し、数値制御装置３０に各種入力情報を出力する。タッチパネルは表示部２５に設ける。
【００２２】
図２を参照し、数値制御装置３０と工作機械１の電気的構成を説明する。数値制御装置３０は、ＣＰＵ３１、ＲＯＭ３２、ＲＡＭ３３、記憶装置３４、入出力部３５、駆動回路５１Ａ〜５５Ａ等を備える。ＣＰＵ３１は数値制御装置３０を統括制御する。ＲＯＭ３２は、チェック位置設定プログラム、位置算出プログラム、ＮＣ運転プログラムを含む各種プログラム等を記憶する。チェック位置設定プログラムは、後述するチェック位置設定処理（図８参照）を実行するものである。位置算出プログラムは、チェック位置設定プログラムのサブプログラムであり、後述する位置算出処理（図９参照）を実行するものである。ＮＣ運転プログラムは、後述するＮＣ運転処理（図２１参照）を実行するものである。
【００２３】
ＲＡＭ３３は各種情報を一時的に記憶する。記憶装置３４は不揮発性であり、ＮＣプログラムの他、各種情報を記憶する。ＮＣプログラムは例えば図３に示す如く、各種コードを含む複数行で構成し、工作機械１の軸移動、工具交換等を含む各種動作を行単位で制御するものである。ＣＰＵ３１は操作者が操作盤１５の入力部２４で入力したＮＣプログラムに加え、外部入力で読み込んだＮＣプログラム等を記憶装置３４に記憶できる。
【００２４】
駆動回路５１ＡはＺ軸モータ５１とエンコーダ５１Ｂに接続する。駆動回路５２Ａは主軸モータ５２とエンコーダ５２Ｂに接続する。駆動回路５３ＡはＸ軸モータ５３とエンコーダ５３Ｂに接続する。駆動回路５４ＡはＹ軸モータ５４とエンコーダ５４Ｂに接続する。駆動回路５５Ａは工具マガジン２１を駆動するマガジンモータ５５とエンコーダ５５Ｂに接続する。Ｚ軸モータ５１、主軸モータ５２、Ｘ軸モータ５３、Ｙ軸モータ５４、マガジンモータ５５は何れもサーボモータである。駆動回路５１Ａ〜５５ＡはＣＰＵ３１から位置指令を受け、対応する各モータ５１〜５５に位置指令信号を夫々出力する。位置指令信号はパルス信号（駆動電流）である。駆動回路５１Ａ〜５５Ａはエンコーダ５１Ｂ〜５５Ｂからエンコーダ情報を受け、位置と速度のフィードバック制御を行う。エンコーダ情報は、トルクモニタ値、速度、位置、位置偏差等の各種情報を含む。ＣＰＵ３１は入出力部３５を介してエンコーダ情報を読み取ることができる。入出力部３５は操作盤１５の入力部２４と表示部２５に夫々接続する。
【００２５】
図３〜図７を参照し、ＮＣプログラムに挿入する位置検出用のＭコードと、該Ｍコードで指定する加工経路中のチェック位置を説明する。図３に示すＮＣプログラムＰ１は、図４に示す被削材７０の側面を連続加工する一般的なものである。工具４又は主軸９の位置を示すｘ、ｙ座標はワーク座標である。説明の便宜上、ｚ座標は省略する。ＮＣプログラムＰ１のＮ０１行目のＧ９０；はアブソリュート指令、Ｎ０２行目のＧ０Ｘ１００．Ｙ２５０；はＡ１点（１００，２５０）への位置決め指令、Ｎ０３行目のＧ１Ｘ１００．Ｙ５０；はＡ２点（１００，５０）への直線補間指令、Ｎ０４行目のＧ１Ｘ０．Ｙ５０；はＡ３点（０，５０）への直線補間指令、Ｎ０５行目のＧ１Ｘ０．Ｙ２００；はＡ４点（０，２００）への直線補間指令、Ｎ０６行目のＧ１Ｘ１５０．Ｙ２００；はＡ５点（１５０，２００）への直線補間指令、ＮｎのＭ３０はプログラム終了指令である。Ａ１点への移動は第一工程、Ａ１点〜Ａ２点迄の移動は第二工程、Ａ２点〜Ａ３迄の移動は第三工程、Ａ３点〜Ａ４点迄の移動は第四工程、Ａ４点〜Ａ５点迄の移動は第五工程である。数値制御装置３０は第一〜第五工程を実行することで、被削材７０の四つの側面を連続加工する。
【００２６】
図４に示す加工経路において、第二工程は被削材７０に工具４が最初に接触する重要な工程である。故に操作者は第二工程の実行直前に工作機械１の動作を一旦停止し、目視確認を行う場合がある。図５に示す如く、ＮＣプログラムＰ１の運転停止中、操作者はテーブル１３の位置を動かすことで、工具４の被削材７０に対する相対位置をＡ１点からＡ６点に移動する介入操作を行う場合がある。介入操作後、操作者がＮＣプログラムＰ１の運転再開の操作を行った時、数値制御装置３０は工具４がＡ１点に在ることを前提としてＡ２点に向けて直線補間を実行する。工具４は誤った位置であるＡ６点からＡ２点に向けて移動する途中で、被削材７０と干渉する可能性がある。
【００２７】
本実施形態は、工具４が誤った位置からＮＣプログラムの運転を再開するのを防止する為、ＮＣプログラム中の特定箇所に位置検出用のＭコードを挿入する。数値制御装置３０はＮＣプログラム実行中、位置検出用のＭコードを解釈した時、工具４が予め設定したチェック位置に在るか否かの確認を行う。チェック位置は、ＮＣプログラム中の特定箇所実行時において工具４が在ると予測される予測位置であり、後述するチェック位置設定処理（図８参照）で予め設定する。
【００２８】
図４に示す加工経路上において、第二工程実行直前位置であるＡ１点をチェック位置とする場合、ＮＣプログラムＰ１は、Ｎ０２行目とＮ０３行目の間に例えばＭ３８０を挿入する。Ｎ０３行目以降は一行ずつ繰り下がる。図６に示す如く、ＮＣプログラムＰ１のＮ０３行目はＭ３８０、Ｎ０４行目はＧ１Ｘ１００．Ｙ５０；となる。Ｍ３８０は、Ｍ３８０の前の行であるＮ０２行目を特定箇所に指定する。Ｎ０２行目は、Ａ１点（１００．２５０）への位置決め指令で且つアブソリュート指令で記述してある。故にチェック位置はＡ１点（１００，２５０）に設定すればよい。後述するが、チェック位置の座標値は操作者自らが手動で入力できるが、数値制御装置３０による自動計算機能を用いて座標値を算出することもできる。
【００２９】
数値制御装置３０は、後述するＮＣ運転処理（図２１参照）の中で、図６に示すＮＣプログラムＰ１Ｎ０３行目のＭ３８０を解釈することで、工具４が予め設定したチェック位置であるＡ１点に在るか否か確認する。図５に示す如く、工具４がＡ１点とは異なる位置に在る時、工具４は誤った位置からＡ２点に向けて移動するので、被削材７０と干渉する可能性がある。故に数値制御装置３０はエラーを出力し、ＮＣプログラムＰ１の運転を即時停止することで、工具４と被削材７０が干渉するのを防止できる。なお、本実施形態は、例えばＭ３８０〜Ｍ３８７の８つの位置検出用のＭコードを使用できるので、ＮＣプログラム中に一つ又は複数の位置検出用のＭコードを挿入できる。ＮＣプログラム中に複数の位置検出用のＭコードを挿入する場合、数値制御装置３０は複数の工程の夫々の実行直前の位置を確認できる。故に数値制御装置３０は被削材７０を精度良く確実に加工できる。
【００３０】
図６に示すＮＣプログラムＰ１は、Ｎ０３行目のＭ３８０の前のＮ０２行目がアブソリュート指令で記述してあるので、チェック位置の座標値は、Ｎ０２行目の位置決め指令の指令位置をチェック位置に設定すればよい。これに対し、Ｍ３８０の前の行がインクレメンタル指令で記述してある場合、チェック位置の座標値を操作者自ら算出することが困難な場合がある。例えば、図７に示すＮＣプログラムＰ２は、Ｎ０６行目にＭ３８０を挿入する。Ｎ０１行目はＧ９０のアブソリュート指令であるが、Ｎ０３行目はＧ９１のインクレメンタル指令である。故にＮ０４行目、Ｎ０５行目の直線補間指令はインクレメンタル指令で記述してあるので、Ｎ０６行目のＭ３８０に対応するチェック位置の座標値は、Ｎ０２行目の直線補間指令の指令位置まで遡って算出する必要がある。チェック位置は（ｘ，ｙ，ｚ）＝（３０，３０，３０）であるが、速やかに算出するのは容易ではない。インクレメンタル指令で記述する行が何百、何千と多数連続する場合、チェック位置を操作者自ら算出するのは不可能である。故に数値制御装置３０は後述する位置算出処理（図９参照）を実行することで、チェック位置の座標値を速やかに且つ正確に算出できる。
【００３１】
図８〜図２１を参照し、チェック位置設定処理を説明する。チェック位置設定処理は、ＮＣプログラム中に一つ又は複数のチェック位置を予め設定する為のものである。操作者が操作盤１５の入力部２４でＮＣプログラムのチェック位置設定開始の操作を行うと、ＣＰＵ３１はＲＯＭ３２からチェック位置設定プログラムを読み出し、本処理を実行する。
【００３２】
ＣＰＵ３１は表示部２５にプログラム選択画面６１（図１０参照）を表示する（Ｓ１）。図１０に示す如く、プログラム選択画面６１は、プログラム一覧表示部６１１、情報表示部６１２、プログラム番号入力部６１３、メニューキー６１４、決定キー６１５等を備える。プログラム一覧表示部６１１は記憶装置３４に記憶する複数のＮＣプログラムを一覧で表示し、例えばプログラムＮｏ、サイズ、コメント、更新日等を表示可能である。コメントの欄には各プログラムに関する種々の情報を入力して表示できる。
【００３３】
情報表示部６１２はプログラム一覧表示部６１１の下側に配置する。プログラム番号入力部６１３は情報表示部６１２の内側に配置する。メニューキー６１４は、プログラム選択画面６１の下方左隅に配置する。決定キー６１５はメニューキー６１４の右方に配置する。操作者は、プログラム一覧表示部６１１に表示した複数のＮＣプログラムのうち一のプログラムの番号をプログラム番号入力部６１３に入力し、決定キー６１５を押下する。すると、プログラム一覧表示部６１１に表示した複数のＮＣプログラムの中で、プログラム番号入力部６１３に入力された番号のＮＣプログラムが選択されて白黒反転表示する。情報表示部６１２は、プログラム一覧表示部６１１に入力した番号のＮＣプログラムの各種情報を表示する。メニューキー６１４を押下すると、ＣＰＵ３１は各種操作・設定機能を選択する為のメニュー画面（図示略）を表示部２５に表示する。
【００３４】
プログラム一覧表示部６１１で選択された１００１番のＮＣプログラムにチェック位置を設定する為、操作者は決定キー６１５を押下する。ＣＰＵ３１はプログラムチェック画面６２（図１１参照）を表示部２５に表示する（Ｓ３）。
【００３５】
図１１に示す如く、プログラムチェック画面６２は、情報表示部６２１、戻るキー６２２、プログラムチェックキー６２３等を備える。情報表示部６２１は、プログラムチェック画面６２の略中央部に配置し、例えば「プログラム（１００１）プログラムチェックキーを押下してください」と表示する。戻るキー６２２は、プログラム選択画面６１に表示を戻す操作を受け付ける。プログラムチェックキー６２３は、プログラムチェックの開始を受け付ける。操作者がプログラムチェックキー６２３を押下すると、ＣＰＵ３１はプログラムチェック処理を開始する（Ｓ４）。プログラムチェック処理は例えばＮＣプログラムの文法チェック等を行う。プログラムチェック処理が終了してＮＣプログラムに異常がある場合、ＣＰＵ３１は例えば情報表示部６２１に異常内容を表示する。ＮＣプログラムが正常であった場合、ＣＰＵ３１はチェック位置設定画面６３（図１２参照）を表示部２５に表示する（Ｓ５）。
【００３６】
図１２に示す如く、チェック位置設定画面６３は、チェック位置設定部６３１、情報表示部６３２、座標入力部６３３、終了キー６３４、自動設定キー６３５等を備える。チェック位置設定部６３１は、ＮＣプログラム（１００１番）に設定可能なＭコードに対応するチェック位置のＸＹＺ軸の各座標値を表示する。本実施形態は一つのＮＣプログラムに対し、例えば８つのＭコード（Ｍ３８０〜Ｍ３８７）を設定可能である。図１２に示すチェック位置設定部６３１は、Ｍ３８０〜Ｍ３８７のうち、Ｍ３８０〜Ｍ３８３の夫々のチェック位置のＸＹＺ軸の各座標値を表示する。操作者がチェック位置設定画面６３を次頁に切り替えると、チェック位置設定部６３１は、残りのＭ３８４〜Ｍ３８７の夫々のチェック位置のＸＹＺ軸の各座標値を表示する。空欄は未設定である。チェック位置設定部６３１は操作者が選択したチェック位置の座標値の欄を白黒反転表示する。操作者が例えばＭコード３８０を選択することで、Ｍ３８０の欄が白黒反転表示する（図１３参照）。
【００３７】
情報表示部６３２はチェック位置設定部６３１の下方に配置し、各種情報を表示する。座標入力部６３３は情報表示部６３２の内側に配置し、チェック位置設定部６３１で選択した欄の座標値の入力を受け付ける。終了キー６３４はチェック位置設定画面６３の下方左隅に配置する。操作者が終了キー６３４を押下すると、ＣＰＵ３１はチェック位置設定画面６３を終了し、プログラム選択画面６１（図１０参照）に表示を戻す。自動設定キー６３５は終了キー６３４の右方に配置する。自動設定キー６３５は、操作者が例えばＭ３８０を選択した場合、Ｍ３８０に対応するチェック位置のＸＹＺ軸の各座標値の自動設定を受け付ける。自動設定とは、Ｍコードに対応するチェック位置のＸＹＺ軸の各座標値を自動で算出して設定する機能である。
【００３８】
図８に示す如く、ＣＰＵ３１はチェック位置の座標値の入力を受け付けたか否か判断する（Ｓ６）。操作者が座標入力部６３３に座標値を入力した場合（Ｓ６：ＹＥＳ）、ＣＰＵ３１はチェック位置設定部６３１で選択した欄に、座標入力部６３３に入力した座標値を表示して設定する（Ｓ７）。設定した座標値は例えばＲＡＭ３３に記憶する。ＣＰＵ３１は終了キー６３４が押下したか否か判断する（Ｓ９）。終了キー６３４が押下しない場合（Ｓ９：ＮＯ）、ＣＰＵ３１はＳ６に戻り、チェック位置の座標値の入力を受け付ける。終了キー６３４が押下した場合（Ｓ９：ＹＥＳ）、ＣＰＵ３１は本処理を終了し、メニュー画面を表示部２５に表示する。
【００３９】
操作者が座標入力部６３３に座標値を入力しない場合（Ｓ６：ＮＯ）、ＣＰＵ３１は自動設定キー６３５が押下したか否か判断する（Ｓ８）。例えば操作者がＭ３８０を選択して自動設定キー６３５を押下した場合（Ｓ８：ＹＥＳ）、ＣＰＵ３１は情報表示部６３２の表示を切り替える。図１３に示す如く、情報表示部６３２は、図１２に示す座標入力部６３３に代えて、メインプログラム番号入力部６３７を表示し、例えば「実行キーを押してください。選択中のプログラムがサブプログラムの場合はメインプログラム番号を入力して実行キーを押してください。」というメッセージを表示する。ＣＰＵ３１は、図１２に示す終了キー６３４と自動設定キー６３５に代えて、実行キー６３８とキャンセルキー６３９を表示する。キャンセルキー６３９は自動設定をキャンセルし、図１２に示すチェック位置設定画面６３に表示を戻す為のものである。
【００４０】
ＣＰＵ３１はメインプログラム番号の入力を受け付け（Ｓ１０）、実行キー６３８が押下されたか否か判断する（Ｓ１１）。位置検出用のＭコードを挿入するＮＣプログラムがサブプログラムである場合、操作者は、メインプログラム番号入力部６３７にメインプログラムのプログラム番号を入力してから、実行キー６３８を押下する。メインプログラム番号入力部６３７に入力したプログラム番号は、例えばＲＡＭ３３に記憶する。位置検出用のＭコードを挿入するＮＣプログラムがメインプログラムである場合、操作者は、メインプログラム番号入力部６３７には何も入力せずに、実行キー６３８を押下する。実行キー６３８が押下されるまで（Ｓ１１：ＮＯ）、ＣＰＵ３１はＳ１０に戻り、メインプログラム番号の入力を受け付け、実行キー６３８の押下を監視する（Ｓ１１）。
【００４１】
操作者が実行キー６３８を押下した場合（Ｓ１１：ＹＥＳ）、ＣＰＵ３１はメインプログラム番号が指定されたか否か判断する（Ｓ１２）。操作者がメインプログラム番号入力部６３７にメインプログラム番号を入力してから実行キー６３８を押下した場合、ＣＰＵ３１はメインプログラム番号をＲＡＭ３３に記憶して指定しているので（Ｓ１２：ＹＥＳ）、チェック位置の設定を行うＮＣプログラムはサブプログラムである。ＣＰＵ３１はＲＡＭ３３に記憶するメインプログラム番号に基づき、メインプログラムを特定する（Ｓ１３)。ＣＰＵ３１は後述する位置算出処理（図９参照）におけるＮＣプログラムの解釈開始位置を、特定したメインプログラムの先頭行に設定し（Ｓ１４）、メインプログラムとサブプログラムに基づき位置算出処理を実行する（Ｓ１５）。他方、操作者がメインプログラム番号入力部６３７に入力せずに実行キー６３８を押下した場合、メインプログラム番号は指定されていないので（Ｓ１２：ＮＯ）、チェック位置の設定を行うＮＣプログラムはメインプログラムである。故にＣＰＵ３１はそのＮＣプログラムに基づき、位置算出処理を実行する（Ｓ１５）。
【００４２】
図９，図１５〜図２０を参照し、位置算出処理を説明する。本実施形態は、以下の六つの場面を想定して順に説明する。
・第一場面・・・ＮＣプログラムＰ３（図１５参照）のチェック位置を算出する場合
・第二場面・・・ＮＣプログラムＰ４（図１６参照）のチェック位置を算出する場合
・第三場面・・・ＮＣプログラムＰ５（図１７参照）のチェック位置を算出する場合
・第四場面・・・サブプログラムであるＮＣプログラムＰ６Ｂ（図１８参照）のチェック位置を算出する場合
・第五場面・・・サブプログラムであるＮＣプログラムＰ７Ｂ（図１９参照）のチェック位置を算出する場合
・第六場面・・・サブプログラムであるＮＣプログラムＰ８Ｂ（図２０参照）のチェック位置を算出する場合
第一〜第三場面は、Ｍ３８０を挿入するＮＣプログラムがメインプログラムの例、第四〜第六場面は、Ｍ３８０を挿入するＮＣプログラムがサブプログラムの例である。ＣＰＵ３１はＲＯＭ３２から位置算出プログラムを読み出し、本処理を実行する。
【００４３】
−第一場面−
図１５に示すＮＣプログラムＰ３は、Ｎ０５行目のＭ３８０よりも前に、Ｎ０１行目のアブソリュート指令があり、チェック位置の座標値が確定する正常なＮＣプログラムの一例である。図９に示す如く、ＣＰＵ３１は、予測位置情報（ｘ，ｙ，ｚ）を（０，０，０）に初期化する（Ｓ２１）。予測位置情報は、ＮＣプログラムＰ３を先頭行から一行ずつ仮に実行した場合に予測される主軸９の座標値で表される位置情報であり、例えばＲＡＭ３３等に記憶する。ＣＰＵ３１はＸＹＺ軸の全ての軸確定情報をオフする（Ｓ２２）。軸確定情報は各軸の座標値が確定していることを示す情報であり、例えばＸＹＺ軸毎にＲＡＭ３３等に記憶する。ＣＰＵ３１はＮＣプログラムＰ３の先頭行から一行解釈する（Ｓ２３）。ＣＰＵ３１は解釈した行にＭ３０が有るか否か判断する（Ｓ２４）。解釈した行にＭ３０が有る場合（Ｓ２４：ＹＥＳ）、チェック位置の座標値の算出が出来ていないので、ＮＣプログラムは誤りである可能性がある。故にＣＰＵ３１は表示部２５に警告表示を行い（Ｓ２８）、本処理を終了する。故に操作者はＮＣプログラムの誤りに速やかに気付くことができ、誤りを修正できる。
【００４４】
解釈した行にＭ３０が無い場合（Ｓ２４：ＮＯ）、ＣＰＵ３１は解釈した行にチェック位置設定画面６３で選択したＭ３８０が有るか否か判断する（Ｓ２５）。解釈した行にＭ３８０が無い場合（Ｓ２５：ＮＯ）、ＣＰＵ３１は解釈した行に軸移動指令が有るか否か判断する（Ｓ２９）。ＮＣプログラムＰ３のＮ０１行目はＧ９０のアブソリュート指令であるので（Ｓ２９：ＮＯ）、ＣＰＵ３１はＳ２３に戻って次の一行を解釈する。
【００４５】
ＮＣプログラムＰ３のＮ０２行目はＧ０のＸＹＺ軸の位置決め指令であり、軸移動指令であるので（Ｓ２５：ＮＯ、Ｓ２９：ＹＥＳ）、ＣＰＵ３１はその指令がアブソリュート指令又は固定点への移動指令か判断する（Ｓ３０）。固定点への移動指令は、例えばリファレンス点復帰指令である。リファレンス点復帰指令は例えばＧ３１（図１７参照）で指定し、記憶装置３４に予め設定したリファレンス点に復帰する指令である。Ｎ０２行目の位置決め指令は、ＸＹＺ軸の座標値をアブソリュート指令で記述してあるので（Ｓ３０：ＹＥＳ）、現時点でＸＹＺ軸の座標値は確定する。故にＣＰＵ３１はＸＹＺ軸の夫々の軸確定情報をオンする（Ｓ３１）。ＣＰＵ３１は予測位置情報に、位置決め指令が指定する指令位置のＸＹＺ軸の各座標値を上書きする（Ｓ３２）。ＣＰＵ３１はＳ２３に戻って次の一行を解釈する。
【００４６】
Ｎ０３行目はＧ９１のインクレメンタル指令であるので（Ｓ２５：ＮＯ、Ｓ２９：ＮＯ）、ＣＰＵ３１はＳ２３に戻って次の一行を同様に解釈する。Ｎ０４行目はＧ０の位置決め指令で軸移動指令であるが（Ｓ２５：ＮＯ、Ｓ２９：ＹＥＳ）、インクレメンタル指令で記述してあるので（Ｓ３０：ＮＯ）、ＣＰＵ３１は軸移動指令がスキップ指令か否か判断する（Ｓ３３）。スキップ指令は後述するＧ３１で指令し、スキップ信号を途中で受信した場合にＧ３１で指定する終了位置迄の移動をキャンセルする制御コードである。Ｎ０４行目の軸移動指令はスキップ指令では無いので（Ｓ３３：ＮＯ）、ＣＰＵ３１は移動対象のＸＹＺ軸の夫々の軸確定情報がオンしているか否か判断する（Ｓ３５）。上記の通り、ＸＹＺ軸の夫々の軸確定情報は、Ｎ０２行目のＧ０解釈時にオンしているので（Ｓ３５：ＹＥＳ）、ＣＰＵ３１は予測位置情報に、位置決め指令が指定するＸＹＺ軸の各座標値を加算する（Ｓ３６）。ＣＰＵ３１はＳ２３に戻って次の一行を同様に解釈する。
【００４７】
ＮＣプログラムＰ３のＮ０５行目はＭ３８０であるので（Ｓ２５：ＹＥＳ）、Ｎ０５行目の前のＮ０４行目の実行後において、予測位置情報のＸＹＺ軸の座標値が確定している必要がある。ＣＰＵ３１はＸＹＺ軸の全ての軸確定情報がオンしているか否か判断する（Ｓ２６）。ＸＹＺ軸の軸確定情報は、Ｎ０２行目のＧ０解釈時に全てオンしたので（Ｓ２６：ＹＥＳ）、ＣＰＵ３１はＲＡＭ３３に記憶する予測位置情報を、チェック位置のＸＹＺ軸の各座標値に確定する（Ｓ２７）。ＣＰＵ３１は位置算出処理を終了し、図８に示すチェック位置設定処理のＳ１６に戻る。
【００４８】
図８に戻り、ＣＰＵ３１は位置算出処理の算出結果を表示部２５に表示する（Ｓ１６）。図１４に示す如く、ＣＰＵ３１はチェック位置設定画面６３のチェック位置設定部６３１に表示したＭ３８０のチェック位置Ｘ、チェック位置Ｙ、チェック位置Ｚの夫々の欄に、位置算出処理の算出結果であるＸＹＺ軸の各座標値を表示する。算出結果を表示した欄は白黒反転表示する。ＣＰＵ３１は、算出したチェック位置のＸＹＺ軸の各座標値を記憶装置３４に記憶し（Ｓ１７）、チェック位置設定処理を終了する。
【００４９】
−第二場面−
図１６に示すＮＣプログラムＰ４は、Ｎ０５行目のＭ３８０よりも前が全てインクレメンタル指令で記述してあり、チェック位置の座標値が確定しないＮＣプログラムの一例である。ＣＰＵ３１はＮＣプログラムＰ４について、上記ＮＣプログラムＰ３と同様に一行ずつ解釈を進める。Ｎ０１行目はＧ９１のインクレメンタル指令、Ｎ０２〜Ｎ０４行目は何れもＧ０の位置決め指令である。故にＮ０５行目のＭ３８０を解釈する迄に、アブソリュート指令、固定点への移動指令の何れも存在しないので（Ｓ３０：ＮＯ）、ＣＰＵ３１はＸＹＺ軸の夫々の軸確定情報を何れもオンしない。
【００５０】
Ｎ０５行目のＭ３８０の解釈時（Ｓ２５：ＹＥＳ）、ＸＹＺ軸の夫々の軸確定情報は何れもオフであるので（Ｓ２６：ＮＯ）、チェック位置のＸＹＺ軸の各座標値は何れも確定しない。故にＣＰＵ３１は表示部２５に警告表示を行い（Ｓ２８）、ＮＣプログラムＰ４に誤りがあることを操作者に通知してから位置算出処理を終了する。操作者はＮＣプログラムＰ４に誤りが有ることに気付くことができるので、ＮＣプログラムＰ４を速やかに修正できる。その他、操作者は、チェック位置設定画面６３においてＭ３８０に対応するチェック位置のＸＹＺ軸の各座標値を自ら入力することもできる。
【００５１】
−第三場面−
図１７に示すＮＣプログラムＰ５は、Ｎ０６行目のＭ３８０よりも前にＧ３１のスキップ指令が有ることにより、チェック位置の座標値が確定しないＮＣプログラムの一例である。Ｎ０２行目のＧ０の位置決め指令は、アブソリュート指令で記述してあるので（Ｓ２９：ＹＥＳ、Ｓ３０）、ＣＰＵ３１は移動対象であるＸＹＺ軸の夫々の軸確定情報をオンし（Ｓ３１）、予測位置情報に、Ｎ０２行目の位置決め指令のＸＹＺ軸の各座標値を上書きする（Ｓ３２）。ＣＰＵ３１はＳ２３に戻って次のＮ０３行目を解釈するが、Ｎ０３行目はＧ３１のスキップ指令であり（Ｓ３０：ＮＯ、Ｓ３３：ＹＥＳ）、スキップ信号を受信した時は指令位置への移動をキャンセルしてしまうので、Ｇ３１実行後の終了位置は不確定である。故にＣＰＵ３１はＸＹＺ軸の夫々の軸確定情報をオフする（Ｓ３４）。
【００５２】
ＣＰＵ３１はＳ２３に戻って次のＮ０４行目を解釈するが、Ｎ０４行目はＧ９１のインクレメンタル指令であるので（Ｓ２５：ＮＯ、Ｓ２９：ＮＯ）、ＣＰＵ３１はＳ２３に戻って次のＮ０５行目を解釈する。Ｎ０５行目のＧ０の位置決め指令はインクレメンタル指令で記述してあるが（Ｓ２９：ＹＥＳ、Ｓ３０：ＮＯ、Ｓ３３：ＮＯ）、移動対象であるＸＹＺ軸の軸確定情報は何れもオフしているので（Ｓ３５：ＮＯ）、ＣＰＵ３１はＳ２３に戻って次のＮ０６行目を解釈する。Ｎ０６行目はＭ３８０であるが（Ｓ２５：ＹＥＳ）、ＸＹＺ軸の夫々の軸確定情報はオフしていることから（Ｓ２６：ＮＯ）、ＣＰＵ３１はチェック位置のＸＹＺ軸の各座標値を確定できない。故にＣＰＵ３１は表示部２５に警告表示を行い（Ｓ２８）、ＮＣプログラムＰ５に誤りがあることを操作者に通知し、位置算出処理を終了する。操作者は、ＮＣプログラムＰ５に誤りが有ることに気付くことができるので、ＮＣプログラムＰ５を修正できる。その他、操作者は、チェック位置設定画面６３においてＭ３８０に対応するチェック位置のＸＹＺ軸の各座標値を自ら入力することもできる。
【００５３】
−第四場面−
図１８に示すＮＣプログラムＰ６Ｂは、ＮＣプログラムＰ６Ａをメインプログラムとするサブプログラムであり、メインプログラムに関係無く、サブプログラムだけでチェック位置の座標値が確定するＮＣプログラムの一例である。ＮＣプログラムＰ６Ｂのプログラム番号は１０００番である。ＮＣプログラムＰ６ＡのＮ０３行目のＭ９８Ｐ１０００は、１０００番のサブプログラムの呼出指令である。ＮＣプログラムＰ６ＢはＮ０６行目にＭ３８０を挿入する。
【００５４】
上記の通り、サブプログラムであるＮＣプログラムＰ６ＢのＭ３８０のチェック位置の自動設定機能を利用する場合、操作者は、図１３に示すチェック位置設定画面６３のメインプログラム番号入力部６３７にメインプログラムの番号を入力してから、実行キー６３８を押下する。チェック位置設定処理（図８参照）において、メインプログラムの番号を特定したので（Ｓ１２：ＹＥＳ、Ｓ１３）、ＣＰＵ３１は位置算出処理（図９参照）における解釈開始位置を、特定したメインプログラムの先頭行に設定する（Ｓ１４）。故にＣＰＵ３１は、メインプログラムであるＮＣプログラムＰ６Ａの先頭行から一行ずつ解釈してから、サブプログラムであるＮＣプログラムＰ６Ｂを先頭行から一行ずつ解釈するので、チェック位置の座標値を正確に算出できる。
【００５５】
なお、第四場面は、サブプログラムであるＮＣプログラムＰ６Ｂだけでチェック位置の座標値が確定する。故に操作者は、チェック位置設定画面６３（図１３参照）において、メインプログラム番号入力部６３７にメインプログラムの番号を入力せずに、実行キー６３８を押下してもよい。ＣＰＵ３１は位置算出処理（図９参照）にて、ＮＣプログラムＰ６Ｂの先頭行から一行ずつ解釈するが、チェック位置の座標値の算出結果はメインプログラムから算出する場合と同じである。サブプログラムを一見しただけでは、サブプログラムだけでチェック位置の座標値が確定するか否かの判断は困難であるので、サブプログラムに設定するチェック位置の座標値を算出する場合、操作者はメインプログラム番号入力部６３７にメインプログラムの番号を一律に入力してもよい。
【００５６】
−第五場面−
図１９に示すＮＣプログラムＰ７Ｂは、ＮＣプログラムＰ７Ａをメインプログラムとするサブプログラムであり、サブプログラムだけではチェック位置の座標値が確定しないが、メインプログラムから解釈すれば確定するＮＣプログラムの一例である。ＮＣプログラムＰ７Ｂのプログラム番号は２０００番である。ＮＣプログラムＰ７ＡのＮ０３行目のＭ９８Ｐ２０００は、２０００番のサブプログラムの呼出指令である。ＮＣプログラムＰ７ＢはＮ０５行目にＭ３８０を挿入する。
【００５７】
ＮＣプログラムＰ７Ｂでは、Ｎ０１行目がＧ９１のインクレメンタル指令であるので、Ｎ０２〜Ｎ０４行目のＧ０の位置決め指令は全てインクレメンタル指令で記述してある。故にＣＰＵ３１はＮＣプログラムＰ７Ｂを先頭行から解釈しても、チェック位置の座標値を算出できない。故に操作者は、チェック位置設定画面６３（図１３参照）のメインプログラム番号入力部６３７にメインプログラムの番号を入力してから、実行キー６３８を押下する。チェック位置設定処理（図８参照）において、メインプログラムの番号を特定したので（Ｓ１２：ＹＥＳ、Ｓ１３）、ＣＰＵ３１は位置算出処理（図９参照）の解釈開始位置を、特定したメインプログラムであるＮＣプログラムＰ７Ａの先頭行に設定する（Ｓ１４）。
【００５８】
ＮＣプログラムＰ７ＡのＮ０１行目はＧ９０のアブソリュート指令であるので、Ｎ０２行目のＧ０の位置決め指令はアブソリュート指令で記述してある。故にＣＰＵ３１は、メインプログラムであるＮＣプログラムＰ７Ａの先頭行から一行ずつ解釈してから、サブプログラムであるＮＣプログラムＰ７Ｂを先頭行から一行ずつ解釈することで、チェック位置の座標値を正確に算出できる。
【００５９】
−第六場面−
図２０に示すＮＣプログラムＰ８Ｂは、ＮＣプログラムＰ８Ａをメインプログラムとするサブプログラムであり、サブプログラムだけではチェック位置の座標値を確定できず、メインプログラムから解釈しても確定できないＮＣプログラムの一例である。ＮＣプログラムＰ８Ｂのプログラム番号は３０００番である。ＮＣプログラムＰ８ＡのＮ０３行目のＭ９８Ｐ３０００は、３０００番のサブプログラムの呼出指令である。ＮＣプログラムＰ８ＢはＮ０５行目にＭ３８０を挿入する。
【００６０】
ＮＣプログラムＰ８Ｂでは、Ｎ０１行目がＧ９１のインクレメンタル指令であるので、Ｎ０２〜Ｎ０４行目のＧ０の位置決め指令は全てインクレメンタル指令で記述してある。故にＣＰＵ３１はＮＣプログラムＰ８Ｂを先頭行から解釈しても、チェック位置の座標値を算出できない。メインプログラムであるＮＣプログラムＰ８ＡのＮ０１行目もＧ９１のインクレメンタル指令であるので、Ｎ０２行目のＧ０の位置決め指令はインクレメンタル指令で記述してある。故にＣＰＵ３１は、メインプログラムであるＮＣプログラムＰ７Ａの先頭行から一行ずつ解釈しても、サブプログラムであるＮＣプログラムＰ８Ｂに挿入するＭ３８０のチェック位置の座標値を確定できない。
【００６１】
図９に示す位置算出処理において、ＮＣプログラムＰ８Ａ，Ｐ８Ｂの何れにも、アブソリュート指令又は固定点への移動指令が存在しないので（Ｓ３０：ＮＯ）、ＸＹＺ軸の夫々の軸確定情報はオフしたままである。ＮＣプログラムＰ８ＢのＮ０５行目のＭ３８０を解釈する時（Ｓ２５：ＹＥＳ）、ＲＡＭ３３に記憶する軸確定情報はオフであるので（Ｓ２６：ＮＯ）、チェック位置のＸＹＺ軸の各座標値を確定できない。故にＣＰＵ３１は表示部２５に警告表示を行い（Ｓ２８）、ＮＣプログラムＰ８Ａ，Ｐ８Ｂの少なくとも何れかに誤りがあることを操作者に通知してから、位置算出処理を終了する。操作者は、ＮＣプログラムＰ８Ａ，Ｐ８Ｂの少なくとも何れかに誤りが有ることに気付くことができるので、ＮＣプログラムＰ８Ａ，Ｐ８Ｂを修正できる。その他、操作者は、チェック位置設定画面６３においてＭ３８０に対応するチェック位置のＸＹＺ軸の各座標値を自ら入力することもできる。
【００６２】
図２１を参照し、ＮＣ運転処理を説明する。ＮＣ運転処理は、記憶装置３４に記憶するＮＣプログラムを一行ずつ読み込んで各種コードを実行するものである。本実施形態は、図６に示すＮＣプログラムＰ１を実行する場合を例に説明する。ＮＣプログラムＰ１のチェック位置の座標値はＡ１点（１００，２５０）に予め設定したものとする。操作者が操作盤１５の入力部２４で複数のＮＣプログラムの中からＮＣプログラムＰ１を選択し、ＮＣプログラムＰ１の運転開始の操作を行うと、ＣＰＵ３１はＲＯＭ３２からＮＣ運転プログラムを読み出し、本処理を実行する。
【００６３】
ＣＰＵ３１はＮＣプログラムＰ１の先頭行から一行解釈する（Ｓ４１）。解釈した行にＭ３０が有るか否か判断する（Ｓ４２）。解釈した行にＭ３０が有れば（Ｓ４２：ＹＥＳ）、ＣＰＵ３１は本処理を終了する。解釈した行にＭ３０が無ければ（Ｓ４２：ＮＯ）、ＣＰＵ３１は解釈した行に、位置検出用のＭコードであるＭ３８０〜Ｍ３８７の少なくとも何れかが記述してあるか否か判断する（Ｓ４３）。解釈した行にＭ３８０〜３８７の何れも記述して無ければ（Ｓ４３：ＮＯ）、ＣＰＵ３１は解釈した行の制御コードに基づき、動作を実行する（Ｓ４４）。例えばＮＣプログラムＰ１のＮ０２行目を解釈した場合、Ｎ０２行目はＧ０Ｘ１００．Ｙ２５０；であるので、ＣＰＵ３１は第一工程の軸移動を実行する。工具４はＡ１点（１００，２５０）に移動する。ＣＰＵ３１はＳ４１に戻り、次のＮ０３行目を解釈する。
【００６４】
Ｎ０３行目にはＭ３８０が記述してあるので（Ｓ４３：ＹＥＳ）、ＣＰＵ３１はＭ３８０に対応するチェック位置の座標値を記憶装置３４から取得する（Ｓ４５）。Ｍ３８０に対応するチェック位置の座標値はＡ１点（１００，２５０）である。ＣＰＵ３１は取得したチェック位置の座標値と、主軸９の実位置の座標値とが一致するか否か判断する（Ｓ４６）。主軸９の実位置とは、主軸９の現在位置である。ＣＰＵ３１はエンコーダ５１Ｂ，５３Ｂ，５４ＢからＺ軸モータ５１、Ｘ軸モータ５３、Ｙ軸モータ５４の夫々のエンコーダ情報を取得し、主軸９の現在位置を検出する。工具４がＡ１点に位置する場合（図４参照）、チェック位置の座標値と実位置の座標値は一致するので（Ｓ４６：ＹＥＳ）、ＣＰＵ３１はプログラム運転を継続し、Ｓ４１に戻って処理を繰り返す。
【００６５】
例えばＮＣプログラムＰ１のＮ０２行目の第一工程実行後、操作者がＮＣプログラムＰ１の運転を一旦停止し、工具４をＡ１点〜Ａ６点迄移動する介入操作を行った後で、ＮＣプログラムＰ１の運転を再開した場合を想定する。ＮＣプログラムＰ１の運転はＮ０２行目まで終了しているので、ＣＰＵ３１はＮ０３行目から実行する。Ｎ０３行目はＭ３８０であるので（Ｓ４３：ＹＥＳ）、ＣＰＵ３１はＭ３８０に対応するチェック位置であるＡ１点の座標値を取得し（Ｓ４５）、主軸９の実位置の座標値と一致するか否か判断する（Ｓ４６）。実位置はＡ６点であり、チェック位置とは異なるので（Ｓ４６：ＮＯ）、ＣＰＵ３１はエラーを出力することで、ＮＣプログラムＰ１の運転を停止し（Ｓ４７）、本処理を終了する。故に数値制御装置３０は、ＮＣプログラム運転途中で介入操作があった場合でも、誤った位置からＮＣプログラムの運転を開始するのを防止できる。
【００６６】
図２２を参照し、ＮＣ運転処理において、メインプログラムが呼び出すサブプログラムの番号が間違っていた場合における運転停止効果を説明する。ＮＣプログラムＰ９Ｂは、ＮＣプログラムＰ９Ａをメインプログラムとするサブプログラムである。ＮＣプログラムＰ９Ａのプログラム番号は１００番である。ＮＣプログラムＰ９Ｂのプログラム番号は４０００番である。ＮＣプログラムＰ９ＡのＮ０３行目のＭ９８Ｐ４０００は、４０００番のサブプログラムの呼出指令である。ＮＣプログラムＰ９ＢはＮ０３行目にＭ３８０を挿入する。
【００６７】
ＮＣプログラムＰ９ＢのＭ３８０に対応するチェック位置の座標値の自動設定を行う場合、操作者は、図１３に示すチェック位置設定画面６３のメインプログラム番号入力部６３７にメインプログラムの番号である１００番を入力してから、実行キー６３８を押下する。チェック位置設定処理（図８参照）のＳ１２において、メインプログラムの番号は指定されているので（Ｓ１２：ＹＥＳ）、ＣＰＵ３１は位置算出処理（図９参照）の解釈開始位置を、指定したメインプログラムの先頭行に設定する（Ｓ１４）。故にＣＰＵ３１は、メインプログラムであるＮＣプログラムＰ９Ａの先頭行から一行ずつ解釈してから、サブプログラムであるＮＣプログラムＰ９Ｂを先頭行から一行ずつ解釈することで、チェック位置の座標値を算出する。
【００６８】
ＮＣプログラムＰ１０は、ＮＣプログラムＰ９Ａ，Ｐ９Ｂとは関係の無いメインプログラムであるが、Ｎ０３行目はＮＣプログラムＰ９ＡのＮ０３行目と同じＭ９８Ｐ４０００であり、４０００番のサブプログラムの呼出指令である。操作者はＮＣプログラムＰ１０の誤りに気付かずに、ＮＣプログラムＰ１０の運転開始の操作を行うと、ＣＰＵ３１はＮＣ運転処理（図２１参照）を実行する。ＣＰＵ３１は、ＮＣプログラムＰ１０のＮ０３行目の解釈で、ＮＣプログラムＰ９Ｂをサブプログラムとして呼び出し、ＮＣプログラムＰ９Ｂを先頭行から解釈して実行する。Ｎ０３行目のＭ３８０を解釈した場合（Ｓ４３：ＹＥＳ）、ＣＰＵ３１はＭ３８０に対応するチェック位置の座標値を記憶装置３４から取得し（Ｓ４５）、現在位置の座標値と一致するか否か判断する（Ｓ４６）。
【００６９】
ＮＣプログラムＰ９ＢのＮ０２行目のＧ０の位置決め指令はインクレメンタル指令で記述してある。Ｎ０３行目実行後における実位置の座標値は、ＮＣプログラムＰ１０のＮ０２行目のアブソリュート指令で指定した座標値（２００，２００，２００）に、今回の位置決め指令の座標値（１０，１０，１０）を加算した座標値である。故にチェック位置の座標値と実位置の座標値は異なるので（Ｓ４６：ＮＯ）、ＣＰＵ３１はエラーを出力し、ＮＣプログラムＰ１０の運転を停止できる（Ｓ４７）。故に数値制御装置３０は仮にメインプログラムの実行途中で、別のサブプログラムを誤って呼び出した場合でも、ＣＰＵ３１はＮＣプログラムの運転を途中で停止できる。故に操作者はメインプログラム中のサブプログラムの呼出指令に誤りがあることに気付くことができる。
【００７０】
以上説明の如く、本実施形態の数値制御装置３０は工作機械１の動作をＮＣプログラムに基づき制御する。工作機械１は主軸９と共に回転する工具４で被削材７０を切削する。ＮＣプログラムは、主軸９の位置検出用のＭコード（Ｍ３８０）を挿入する。Ｍコードは、ＮＣプログラムの中で、テーブル１３又は主軸９の位置を確認したい特定箇所に挿入する。数値制御装置３０のＣＰＵ３１はＮＣプログラムに挿入するＭ３８０で特定箇所を指定する。ＣＰＵ３１はＭ３８０で指定した特定箇所における主軸９の予測位置を、チェック位置としてＲＡＭ３３に予め記憶する。ＣＰＵ３１はＮＣプログラムの運転中、Ｍ３８０を実行する時、ＲＡＭ３３からチェック位置を取得し、主軸９の実位置と一致するか否か判断する。主軸９の実位置とチェック位置が一致する場合、主軸９はＮＣプログラムに基づく加工経路上に位置するので、ＣＰＵ３１はＮＣプログラムの運転は継続する。主軸９の実位置とチェック位置が一致しない場合、主軸９はＮＣプログラムに基づく加工経路上に位置しないので、ＣＰＵ３１は主軸９に装着する工具４と被削材７０、又は冶具等とが干渉する可能性があるので、エラーを出力し、ＮＣプログラムの運転を停止する。故に数値制御装置３０はＮＣプログラム実行時に一旦停止し、介入操作を行った後で、誤った位置から加工を開始するのを防止できる。
【００７１】
上記実施形態のＣＰＵ３１はＮＣプログラム中に記述した制御コードに基づき、チェック位置の座標値を演算する。故に数値制御装置３０はＮＣプログラム中の特定箇所におけるチェック位置の座標値を演算して取得できる。
【００７２】
上記実施形態のＣＰＵ３１はＭ３８０で指定した特定箇所がメインプログラムに従属するサブプログラムに属するか判断する。サブプログラムに属する場合、ＣＰＵ３１は、操作者が入力するメインプログラム番号に基づき、サブプログラムが従属するメインプログラムを特定する。ＣＰＵ３１はメインプログラム中に記述した制御コードに遡って、サブプログラムに属する特定箇所における主軸９のチェック位置の座標値を演算する。故に数値制御装置３０は特定箇所がサブプログラムに属する場合でも、そのサブプログラムが従属するメインプログラムまで遡って予測位置を正確に演算できる。
【００７３】
上記実施形態は、例えば被削材を複数の工程で加工する様な長いＮＣプログラムを実行する場合、Ｍ３８０を挿入する特定箇所を、複数の工程のうち少なくとも一つの工程を実行する前の箇所に設定するとよい。特に重要な工程を実行する前の箇所に設定することで、誤った位置から被削材の加工が開始するのを防止できる。
【００７４】
以上説明にて、Ｙ軸テーブル１２、Ｘ軸移動機構、Ｙ軸移動機構は本発明の移動機構の一例である。図２１のＳ４３の処理を実行するＣＰＵ３１は本発明の指定手段の一例である。Ｓ４５の処理を実行するＣＰＵ３１は本発明の取得手段の一例である。Ｓ４６の処理を実行するＣＰＵ３１は本発明の判断手段の一例である。Ｓ４７の処理を実行するＣＰＵ３１は本発明の出力手段の一例である。図８のＳ１２の処理を実行するＣＰＵ３１は本発明のサブプログラム判断手段の一例である。Ｓ１３の処理を実行するＣＰＵ３１は本発明の特定手段の一例である。図２１のＳ４３の処理は本発明の指定工程の一例である。図８のＳ４５の処理は本発明の取得工程の一例である。Ｓ４６の処理は本発明の判断工程の一例である。Ｓ４７の処理は本発明の出力工程の一例である。
【００７５】
本発明は上記実施形態に限らず、各種変形が可能なことはいうまでもない。本実施形態は、ＮＣプログラムに設定するチェック位置を、位置検出用のＭコードを特定箇所に挿入して設定する。本実施形態はＭコードに代えて、例えばＮＣプログラム中に記述する制御コードで特定箇所を指定してもよい。制御コードは、例えばＧ０（位置決め指令）、Ｇ１（直線補間指令）、Ｍ０３（主軸回転指令）、Ｓ（主軸回転数指令）、Ｔ（次工具設定指令）等である。数値制御装置３０は例えば指定した制御コードを最初に解釈する箇所でのチェック位置の座標値を算出するようにしてもよい。但し、Ｇ０、Ｇ１等の制御コードは、ＮＣプログラム中に何度でも記述可能であるので、例えば先頭行から何番目のＧ０という様に制御コードを指定してもよい。例えば図３に示すＮＣプログラムＰ１において、Ｎ０３行目実行直前の位置をチェック位置として設定する場合、先頭行から１番目のＧ０を指定すればよい。
【００７６】
本実施形態は、ＮＣプログラムに設定するチェック位置を、位置検出用のＭコードを特定箇所に挿入して設定するが、Ｍコード以外の指定コードを用いてもよい。本実施形態は指定コードに代えて、例えばＮＣプログラム中に記述する制御コードのパラメータで特定箇所を指定してもよい。本実施形態のＭコードは、Ｍ３８０〜３８７の何れかを用いることができるが、Ｍコードの番号、数等はこれに限定しない。
【００７７】
本実施形態の工作機械１は、工具４を装着する主軸９がＺ軸方向に移動可能であり、テーブル１３がＸ軸とＹ軸方向の二軸に移動可能である。テーブルに対してＸ軸、Ｙ軸、Ｚ軸方向に相対的に移動する工具４の移動機構の仕組みは上記実施形態に限定しない。例えば主軸はＸ、Ｙ、Ｚ軸方向の三軸に駆動するもので、テーブルは固定若しくは回転可能であってもよい。上記実施形態の工作機械１は主軸がＺ軸方向に対して平行な縦型の工作機械であるが、主軸が水平方向に延びる横型の工作機械であってもよい。
【００７８】
本実施形態は、ワーク座標で主軸９の位置を指定するが、機械座標で指定してもよい。主軸９の位置を機械座標で指定する場合、チェック位置は機械座標で設定すればよい。本実施形態は、テーブル１３の位置をワーク座標又は機械座標で指定してもよい。
【００７９】
本実施形態は、図４に示す如く、四つの工程で被削材７０の側面を連続で切削するＮＣプログラムを一例として説明したが、被削材７０を切削する工程の数は限定しない。ＮＣプログラムの長さは長くても短くてもよい。
【００８０】
本実施形態は、図１８〜図１９を参照し、メインプログラムに従属するサブプログラムが一つの例を説明したが、サブプログラムが複数であってもよい。例えばサブプログラムが更に別のサブプログラムを呼び出すようなものでもよい。
【００８１】
本実施形態は、図１３に示すチェック位置設定画面６３において、Ｍ３８０に対応するチェック位置のＸＹＺ軸の各座標値の欄をまとめて選択し自動設定を行う例を説明したが、例えば特定の軸の座標値の欄を選択して自動設定を行うことも可能である。
【００８２】
本実施形態の駆動回路５１Ａ〜５５Ａは数値制御装置３０に設けているが、駆動回路５１Ａ〜５５Ａを工作機械１に設けてもよい。
【符号の説明】
【００８３】
１    工作機械
４    工具
９    主軸
１０    テーブル装置
１２    Ｙ軸テーブル
１３    テーブル
３０    数値制御装置
３１    ＣＰＵ
７０    被削材
３８０  Ｍコード
【図１】
0006578857.tif 000002
【図２】
0006578857.tif 000003
【図３】
0006578857.tif 000004
【図４】
0006578857.tif 000005
【図５】
0006578857.tif 000006
【図６】
0006578857.tif 000007
【図７】
0006578857.tif 000008
【図８】
0006578857.tif 000009
【図９】
0006578857.tif 000010
【図１０】
0006578857.tif 000011
【図１１】
0006578857.tif 000012
【図１２】
0006578857.tif 000013
【図１３】
0006578857.tif 000014
【図１４】
0006578857.tif 000015
【図１５】
0006578857.tif 000016
【図１６】
0006578857.tif 000017
【図１７】
0006578857.tif 000018
【図１８】
0006578857.tif 000019
【図１９】
0006578857.tif 000020
【図２０】
0006578857.tif 000021
【図２１】
0006578857.tif 000022
【図２２】
0006578857.tif 000023