(57)【特許請求の範囲】
【請求項１】
ＮＣプログラムが指令する複数の指令点について隣接する指令点を補間して得られる経路に沿って工具又はワークを移動してワーク加工を実行する数値制御装置において、
前記工具又はワークを移動するモータの加減速時定数と、前記経路に対して許容する許容誤差と、前記経路のうち、前記ＮＣプログラム中の今回の補間指令で補間する第一ブロックと、前回の補間指令で補間した第二ブロックの間の角度であるブロック間角度と、前記第一ブロックと前記第二ブロックでの前記工具又は前記ワークの移動速度を指令する夫々の指令速度のうちどちらか大きなものに基づき、前記経路からの誤差の最大値を演算し、当該最大値と前記第一ブロックの速度波形と前記第二ブロックの速度波形との重なり具合に応じて、前記モータに前記今回の補間指令を開始させる時機を演算する演算手段と、
前記演算手段が演算した前記時機に基づき、前記モータに前記今回の補間指令を実行させる実行手段と
を備えたことを特徴とする数値制御装置。
【請求項２】
前記第一ブロックと前記第二ブロックのうち少なくとも一方のブロックが円弧補間を行う円弧補間ブロックである時、前記円弧補間ブロックに対応する円弧補間指令が指令する指令円弧の円弧半径と、前記許容誤差と、前記加減速時定数とに基づき、前記円弧補間ブロックにおいて前記工具又はワークが移動する円弧速度を演算する円弧速度演算手段と、
前記円弧速度演算手段が演算した前記円弧速度と、前記指令速度とを対比し、小さい方の速度を前記指令速度に設定する指令速度設定手段と、
前記ブロック間角度を演算するブロック間角度演算手段と
を備え、
前記ブロック間角度演算手段は、
前記円弧補間ブロックについて、前記第一ブロックと前記第二ブロックを繋ぐ第一指令点から引いた線分であって、前記指令円弧の接線ベクトルである指令円弧接線ベクトルと、前記第一指令点から引いた線分であって、前記指令速度と前記指令円弧の円弧半径から導出される内回り誤差を含む実円弧の接線ベクトルである実円弧接線ベクトルとのうち、他方のブロックとの成す角度が小さい方の角度を前記ブロック間角度として演算する
ことを特徴とする請求項１に記載の数値制御装置。
【請求項３】
前記ブロック間角度演算手段は、
前記第一ブロックと前記第二ブロックの両方が直線補間を行う直線補間ブロックである場合に、前記直線補間ブロック同士間の前記ブロック間角度を演算する第一角度演算手段と、
前記第一ブロックと前記第二ブロックのうち一方が前記円弧補間ブロックである場合に、前記円弧補間ブロックと他方の直線補間ブロック間の前記ブロック間角度を演算する第二角度演算手段と、
前記第一ブロックと前記第二ブロックの両方が前記円弧補間ブロックである場合に、前記円弧補間同士間の前記ブロック間角度を演算する第三角度演算手段と
を備え、
前記第二角度演算手段は、
前記指令円弧接線ベクトルと前記実円弧接線ベクトルのうち、前記直線補間ブロックに対応する直線補間指令が指令する指令直線と成す角度が小さい方の角度を前記ブロック間角度とし、
前記第三角度演算手段は、
前記円弧補間ブロックである前記第一ブロックと前記第二ブロックを繋ぐ第二指令点から夫々引いた線分であって、前記第一ブロックに対応する前記指令円弧接線ベクトル及び前記実円弧接線ベクトルと、前記第二ブロックに対応する前記指令円弧接線ベクトル及び前記実円弧接線ベクトルとが相互に成す角度のうち、最も小さい角度を前記ブロック間角度とする
ことを特徴とする請求項２に記載の数値制御装置。
【請求項４】
ＮＣプログラムが指令する複数の指令点について隣接する指令点を補間して得られる経路に沿って工具又はワークを移動してワーク加工を実行する数値制御装置の制御方法において、
前記工具又はワークを移動するモータの加減速時定数と、前記経路に対して許容する許容誤差と、前記経路のうち、前記ＮＣプログラム中の今回の補間指令で補間する第一ブロックと、前回の補間指令で補間した第二ブロックの間の角度であるブロック間角度と、前記第一ブロックと前記第二ブロックでの前記工具又は前記ワークの移動速度を指令する夫々の指令速度のうちどちらか大きなものに基づき、前記経路からの誤差の最大値を演算し、当該最大値と前記第一ブロックの速度波形と前記第二ブロックの速度波形との重なり具合に応じて、前記モータに前記今回の補間指令を開始させる時機を演算する演算工程と、
前記演算工程で演算した前記時機に基づき、前記モータに前記今回の補間指令を実行させる実行工程と
を備えたことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数値制御装置と制御方法に関する。
【背景技術】
【０００２】
工作機械の数値制御装置は、ＮＣプログラムで指令した指令点を補間して得られる経路に沿って工具又はワークを移動して加工を行う。その際、数値制御装置は自動的に滑らかな加減速を行い、工作機械の振動を抑える為の加減速制御を行う。一般的な加減速制御として、補間後加減速がある。補間後加減速は、工作機械への経路を駆動パルスとして可動軸毎に分配した後に、移動平均フィルタ等による加減速処理を適用する方法である。該方法は計算が簡便で安定性が高い利点があるが、工作機械の速度が速くなると経路からの誤差が大きくなるという問題点があった。そこで、経路からの誤差を小さく抑え、且つ高速での移動を可能にする技術として、特許文献１は、ＮＣプログラムで指令するワーク形状と許容誤差に応じて、一の制御指令の実行後に、次の制御指令を実行する為のパルス分配演算の開始時機を遅らせる数値制御方式を提案する。パルス分配演算とは、経路方向の駆動パルスを可動軸毎に分配する演算を意味する。該制御方式は、所定の演算式と複数のパラメータで加工誤差を演算し、該演算した加工誤差と許容誤差の差と、パルス分配演算の開始を遅らせる遅延時間との対応を記憶するテーブルにより、加工誤差と許容誤差の差に応じた遅延時間を求める。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開昭５８−３５６０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１は、加工誤差と許容誤差の差と遅延時間との対応について、想定する全てのパターンを予め演算し、テーブルに全て記憶しなければならないので、作業が手間である上、メモリの記憶する領域を多く消費してしまうという問題点があった。また、特許文献１は、加工誤差と許容誤差の差から遅延時間を演算する方法を開示していない。それ故、工具の移動する経路について、テーブルを使わずに且つ小さい計算負荷で、ＮＣプログラムが指令する経路からの誤差が常に許容誤差内に制御できる数値制御装置の開発が望まれていた。
【０００５】
本発明の目的は、小さい計算負荷で、ＮＣプログラムの経路からの誤差を常に許容誤差内に制御できる数値制御装置と制御方法を提供することである。
【課題を解決するための手段】
【０００６】
本発明の請求項１に係る数値制御装置は、ＮＣプログラムが指令する複数の指令点について隣接する指令点を補間して得られる経路に沿って工具又はワークを移動してワーク加工を実行する数値制御装置において、前記工具又はワークを移動するモータの加減速時定数と、前記経路に対して許容する許容誤差と、前記経路のうち、前記ＮＣプログラム中の今回の補間指令で補間する第一ブロックと、前回の補間指令で補間した第二ブロックの間の角度であるブロック間角度と、前記第一ブロックと前記第二ブロックでの前記工具又は前記ワークの移動速度を指令する夫々の指令速度のうちどちらか大きなものに基づき、前記経路からの誤差の最大値を演算し、当該最大値と前記第一ブロックの速度波形と前記第二ブロックの速度波形との重なり具合に応じて、前記モータに前記今回の補間指令を開始させる時機を演算する演算手段と、前記演算手段が演算した前記時機に基づき、前記モータに前記今回の補間指令を実行させる実行手段とを備えたことを特徴とする。それ故、数値制御装置は、加減速時定数、許容誤差、指令速度、ブロック間角度の各種パラメータを用いることで、工具が移動する経路について、小さい計算負荷で、ＮＣプログラムが指令する経路からの誤差を常に許容誤差内に制御できる。
【０００７】
請求項２に係る発明の数値制御装置は、請求項１に記載の発明の構成に加え、前記第一ブロックと前記第二ブロックのうち少なくとも一方のブロックが円弧補間を行う円弧補間ブロックである時、前記円弧補間ブロックに対応する円弧補間指令が指令する指令円弧の円弧半径と、前記許容誤差と、前記加減速時定数とに基づき、前記円弧補間ブロックにおいて前記工具又はワークが移動する円弧速度を演算する円弧速度演算手段と、前記円弧速度演算手段が演算した前記円弧速度と、前記指令速度とを対比し、小さい方の速度を前記指令速度に設定する指令速度設定手段と、前記ブロック間角度を演算するブロック間角度演算手段とを備え、前記ブロック間角度演算手段は、前記円弧補間ブロックについて、前記第一ブロックと前記第二ブロックを繋ぐ第一指令点から引いた線分であって、前記指令円弧の接線ベクトルである指令円弧接線ベクトルと、前記第一指令点から引いた線分であって、前記指令速度と前記指令円弧の円弧半径と前記許容誤差から導出される内回り誤差を含む実円弧の接線ベクトルである実円弧接線ベクトルとのうち、他方のブロックとの成す角度が小さい方の角度を前記ブロック間角度として演算することを特徴とする。それ故、数値制御装置は、少なくとも一方が円弧補間ブロックである時の第一ブロックと第二ブロックのブロック間角度を演算できるので、演算したブロック間角度を用いることで、今回の補間指令を開始させる時機を適切に演算できる。
【０００８】
請求項３に係る発明の数値制御装置は、請求項１又は２に記載の発明の構成に加え、前記ブロック間角度演算手段は、前記第一ブロックと前記第二ブロックの両方が直線補間を行う直線補間ブロックである場合に、前記直線補間ブロック同士間の前記ブロック間角度を演算する第一角度演算手段と、前記第一ブロックと前記第二ブロックのうち一方が前記円弧補間ブロックである場合に、前記円弧補間ブロックと他方の直線補間ブロック間の前記ブロック間角度を演算する第二角度演算手段と、前記第一ブロックと前記第二ブロックの両方が前記円弧補間ブロックである場合に、前記円弧補間同士間の前記ブロック間角度を演算する第三角度演算手段とを備え、前記第二角度演算手段は、前記指令円弧接線ベクトルと前記実円弧接線ベクトルのうち、前記直線補間ブロックに対応する直線補間指令が指令する指令直線と成す角度が小さい方の角度を前記ブロック間角度とし、前記第三角度演算手段は、前記円弧補間ブロックである前記第一ブロックと前記第二ブロックを繋ぐ第二指令点から夫々引いた線分であって、前記第一ブロックに対応する前記指令円弧接線ベクトル及び前記実円弧接線ベクトルと、前記第二ブロックに対応する前記指令円弧接線ベクトル及び前記実円弧接線ベクトルとが相互に成す角度のうち、最も小さい角度を前記ブロック間角度とすることを特徴とする。それ故、数値制御装置は、直線ブロック間同士、円弧補間ブロックと直線補間ブロック、円弧補間ブロック間同士の夫々のブロック間角度を演算できるので、今回の補間指令を開始させる時機を適切に演算できる。
【０００９】
請求項４に係る発明の制御方法は、ＮＣプログラムが指令する複数の指令点について隣接する指令点を補間して得られる経路に沿って工具又はワークを移動してワーク加工を実行する数値制御装置の制御方法において、前記工具又はワークを移動するモータの加減速時定数と、前記経路に対して許容する許容誤差と、前記経路のうち、前記ＮＣプログラム中の今回の補間指令で補間する第一ブロックと、前回の補間指令で補間した第二ブロックの間の角度であるブロック間角度と、前記第一ブロックと前記第二ブロックでの前記工具又は前記ワークの移動速度を指令する夫々の指令速度のうちどちらか大きなものに基づき、前記経路からの誤差の最大値を演算し、当該最大値と前記第一ブロックの速度波形と前記第二ブロックの速度波形との重なり具合に応じて、前記モータに前記今回の補間指令を開始させる時機を演算する演算工程と、前記演算工程で演算した前記時機に基づき、前記モータに前記今回の補間指令を実行させる実行工程とを備えたことを特徴とする。それ故、数値制御装置は上記制御方法を行うことにより、請求項１に記載の効果を得ることができる。
【図面の簡単な説明】
【００１０】
【図１】数値制御装置３０と工作機械１の電気的構成を示すブロック図。
【図２】移動速度を二段のＦＩＲフィルタで処理した図。
【図３】メイン処理の流れ図。
【図４】誤差一定制御処理の流れ図。
【図５】ブロック間角度補正処理の流れ図。
【図６】直線補間ブロックＢ１と円弧補間ブロックＢ２で構成する経路の図。
【図７】直線補間ブロックＢ１と円弧補間ブロックＢ２で構成する経路の図。
【図８】円弧補間ブロックＢ１と直線補間ブロックＢ２で構成する経路の図。
【図９】円弧補間ブロックＢ１と円弧補間ブロックＢ２で構成する経路の図。
【図１０】直線補間ブロックＢ１とＢ２で構成する経路の図。
【図１１】図１０に示す経路を移動する時の移動速度１と２の変化を示す図。
【図１２】コーナが連続する経路の図。
【図１３】図１２に示す経路を移動する時の移動速度と移動時間の関係を示す図。
【図１４】速度１と速度２の変化（Ｔｄ＝０）を示す図。
【図１５】速度１と速度２の変化（Ｔｄ≧ｔ１−ｔ２）を示す図。
【図１６】速度１と速度２の変化（Ｔｄ＝ｔ１＋ｔ２）を示す図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態を図面を参照し説明する。以下説明は、図中に矢印で示す上下、左右、前後、を使用する。数値制御装置３０は工作機械１を制御しテーブル（図示略）上面に保持したワーク（図示略）の切削加工を行う。工作機械１の左右方向、前後方向、上下方向は、夫々Ｘ軸方向、Ｙ軸方向、Ｚ軸方向である。
【００１２】
図１を参照し、工作機械１の構成を簡単に説明する。工作機械１は図示しない主軸機構、主軸移動機構、工具交換装置等を備える。主軸機構は主軸モータ５２を備え、工具を装着した主軸を回転する。主軸移動機構は、Ｚ軸モータ５１、Ｘ軸モータ５３、Ｙ軸モータ５４を備え、テーブル（図示略）上面に支持したワークに対し相対的に主軸をＸＹＺの各軸方向に夫々移動する。工具交換装置はマガジンモータ５５を備え、複数の工具を収納する工具マガジン（図示略）を駆動し、主軸に装着した工具を他の工具と交換する。工作機械１は操作盤１０を更に備える。操作盤１０は入力部２４と表示部２５を備える。入力部２４は各種入力、指示、設定等を行う為の機器である。表示部２５は各種画面を表示する機器である。操作盤１０は数値制御装置３０の入出力部３５に接続する。Ｚ軸モータ５１はエンコーダ５１Ｂを備える。主軸モータ５２はエンコーダ５２Ｂを備える。Ｘ軸モータ５３はエンコーダ５３Ｂを備える。Ｙ軸モータ５４はエンコーダ５４Ｂを備える。マガジンモータ５５はエンコーダ５５Ｂを備える。エンコーダ５１Ｂ〜５５Ｂは数値制御装置３０の後述する駆動回路５１Ａ〜５５Ａに各々接続する。
【００１３】
図１を参照し、数値制御装置３０の電気的構成を説明する。数値制御装置３０は、ＣＰＵ３１、ＲＯＭ３２、ＲＡＭ３３、記憶装置３４、入出力部３５、駆動回路５１Ａ〜５５Ａ等を備える。ＣＰＵ３１は数値制御装置３０を統括制御する。ＲＯＭ３２は、メインプログラム等の各種プログラムを記憶する。ＲＡＭ３３は各種処理実行中の各種データを記憶する。記憶装置３４は不揮発性メモリである。入出力部３５は操作盤１０に接続する。駆動回路５１ＡはＺ軸モータ５１とエンコーダ５１Ｂに接続する。駆動回路５２Ａは主軸モータ５２とエンコーダ５２Ｂに接続する。駆動回路５３ＡはＸ軸モータ５３とエンコーダ５３Ｂに接続する。駆動回路５４ＡはＹ軸モータ５４とエンコーダ５４Ｂに接続する。駆動回路５５Ａはマガジンモータ５５とエンコーダ５５Ｂに接続する。駆動回路５１Ａ〜５５ＡはＣＰＵ３１から後述する駆動信号を受け、対応する各モータ５１〜５５に駆動電流（パルス）を夫々出力する。駆動回路５１Ａ〜５５Ａはエンコーダ５１Ｂ〜５５Ｂからフィードバック信号を受け、位置と速度のフィードバック制御を行う。駆動回路５１Ａ〜５５Ａは例えばＦＰＧＡ回路でもよい。
【００１４】
図２を参照し、補間後加減速に用いる移動平均フィルタと時定数を説明する。数値制御装置３０は、ＮＣプログラム中の補間指令に基づき、Ｘ軸、Ｙ軸、Ｚ軸の駆動軸毎に、目標位置、移動距離、移動速度、移動時間等を夫々演算する。補間指令は、アドレスで指定した移動速度で軸を動かす時に使用する制御指令であり、例えば直線補間指令、円弧補間指令等である。数値制御装置３０は、演算した駆動軸毎の移動速度に、移動平均フィルタ（以下、ＦＩＲフィルタと呼ぶ）を少なくとも二回以上通して速度変化を滑らかにする補間後加減速を行う。ＮＣプログラムはＧコード、Ｍコード等の制御指令から構成するブロックを複数有する。
【００１５】
図２は、Ｘ軸方向においてｘ１からｘ２に移動する工具の移動速度を、ＦＩＲフィルタで二回処理した結果を示す図表である。ＦＩＲフィルタの加減速時定数（以下、時定数と呼ぶ）は、ＦＩＲフィルタが平均を行うサンプル数に相当する。例えば、サンプル時間が１ｍｓｅｃで、ＦＩＲフィルタの時定数が１０ｍｓｅｃの時、ＦＩＲフィルタは今回の補間指令を含めて１０個前までの指令の平均を今回の出力とする。一段目のＦＩＲフィルタ（ＦＩＲ１）の時定数をｔ１、二段目のＦＩＲフィルタ（ＦＩＲ２）の時定数をｔ２とする。
【００１６】
移動速度を二段のＦＩＲフィルタ（ＦＩＲ１、ＦＩＲ２）で処理した結果、加速度の変化は一定以下となるので、工具はｔ１＋ｔ２をかけて緩やかに速度を上げて最高速度に達し、その後、ｔ１＋ｔ２をかけて緩やかに速度を落として停止する。それ故、数値制御装置３０は、移動速度を複数のＦＩＲフィルタで処理することで、移動速度の急激な変化を吸収できるので、工作機械１の振動と、動作に必要な最大トルクを抑制できる。
【００１７】
上述の如く、補間後加減速では、時定数ｔ１，ｔ２の影響により、工具が実際に移動する経路は、ＮＣプログラムが指令する経路に対して誤差を生じる。それ故、数値制御装置３０は、使用者が予め設定する許容誤差内で工具を移動する為に、前回の補間指令の移動終了後から、今回の補間指令の移動開始時機を遅延させる。数値制御装置３０は、後述するメイン処理を実行することで、今回の補間指令の指令開始遅延時間を、小さい計算負荷で簡単に演算できる。
【００１８】
図３を参照し、ＣＰＵ３１が実行するメイン処理を説明する。作業者は、加工するワーク形状のＮＣプログラムの番号を操作盤１０の入力部２４で入力し、加工開始キー（図示略）を押下する。ＣＰＵ３１は加工開始キーの押下を検出すると、ＲＯＭ３２に記憶したメインプログラムを読み込んで本処理を実行する。
【００１９】
先ず、ＣＰＵ３１は、記憶装置３４から入力部２４で入力した番号に対応するＮＣプログラムを読み込む（Ｓ１）。ＣＰＵ３１は読み込んだＮＣプログラムを先頭行から解釈し（Ｓ２）、一行内の制御指令を認識する。ＣＰＵ３１は認識した制御指令がＮＣプログラムの終了を指示する終了指令か否か判断する（Ｓ３）。制御指令が終了指令で無い時（Ｓ３：ＮＯ）、ＣＰＵ３１は制御指令が補間指令か否か判断する（Ｓ４）。制御指令が補間指令以外の指令（例えば、位置決め指令、工具径補正指令、工具交換指令等）の時（Ｓ４：ＮＯ）、ＣＰＵ３１は制御指令に対応する動作を実行する（Ｓ１４）。
【００２０】
制御指令が補間指令の時（Ｓ４：ＹＥＳ）、ＣＰＵ３１は補間後の指令点の座標位置（指令位置）を生成する（Ｓ５）。続いて、ＣＰＵ３１は誤差一定制御が有効か否か判断する（Ｓ６）。誤差一定制御とは、補間後加減速において、ＮＣプログラムが指令する経路に対し、工具が実際に移動する経路が予め設定した許容誤差内となるように、工作機械１の動作を制御する制御方式である。作業者は、操作盤１０で誤差一定制御の有効又は無効を予め選択できる。ＣＰＵ３１は、作業者が入力した誤差一定制御の有効又は無効を、例えばフラグ等を用いてＲＡＭ３３等に記憶する。
【００２１】
−誤差一定制御無効−
誤差一定制御が無効の時（Ｓ６：ＮＯ）、ＣＰＵ３１は誤差一定制御を実行せずに、補間処理を実行する（Ｓ１２）。補間処理では、現在位置と指令位置の二点間を補間し、Ｘ軸、Ｙ軸、Ｚ軸の駆動軸毎に、目標位置、移動距離、移動速度、移動時間等を演算する。次いで、ＣＰＵ３１はＦＩＲフィルタ処理を実行する（Ｓ１３）。ＦＩＲフィルタ処理では、上述の如く、駆動軸毎に移動速度を二段のＦＩＲフィルタ（ＦＩＲ１，ＦＩＲ２）で処理する。それ故、各駆動軸の速度変化は滑らかになる。
【００２２】
ＣＰＵ３１は駆動信号を生成し、対応する駆動回路５１Ａ，５３Ａ，５４Ａに出力する（Ｓ１１）。駆動信号とは、各駆動軸における目標位置、移動距離、移動速度、移動時間等の各種情報を含む信号である。駆動回路５１Ａ，５３Ａ，５４ＡはＣＰＵ３１から受信した駆動信号に基づき、対応するモータ５１，５３，５４に駆動電流（パルス）を夫々出力する。それ故、数値制御装置３０はＮＣプログラムの補間指令が指令する経路に従い、工具を移動できる。
【００２３】
−誤差一定制御有効−
誤差一定制御が有効の時（Ｓ６：ＹＥＳ）、ＣＰＵ３１は誤差一定制御を実行する（Ｓ７）。図４を参照し、誤差一定制御処理を説明する。ＣＰＵ３１は解釈した補間指令が円弧補間指令か否か判断する（Ｓ２１）。円弧補間指令の時（Ｓ２１：ＹＥＳ）、後に実行するＦＩＲフィルタ処理の時定数ｔ１とｔ２の影響により、工具は円弧補間指令が指令する指令円弧に対して内回りに移動する可能性がある。そこで、ＣＰＵ３１は、工具を指令円弧に対して許容誤差内で移動させる為に、以下のパラメータと［数１］を用いて、円弧速度Ｆｃを計算する（Ｓ２２）。［数１］は、ＦＩＲフィルタの伝達関数のゲインをテイラー展開近似して整理したものである。
・Ｆｃ：円弧速度（ｍｍ／分）
・Ｒｃ：円弧半径（ｍｍ）
・ε：許容誤差（ｍｍ）
・ｔ１：時定数１（ＦＩＲ１）
・ｔ２：時定数２（ＦＩＲ２）
なお、Ｒｃは円弧補間指令から演算する。指令円弧の始点と終点の半径が異なる時、ＣＰＵ３１は小さい方を円弧半径とすればよい。ε、ｔ１、ｔ２は、作業者が操作盤１０の入力部２４で予め入力したもので、例えば記憶装置３４等に記憶する。
【数１】
0006435872.tif 000002
【００２４】
ＣＰＵ３１は、計算した円弧速度Ｆｃが、円弧補間指令の指令速度Ｆよりも小さいか否か判断する（Ｓ２３）。計算した円弧速度Ｆｃは、許容誤差ε内で移動する為の数値であるので、円弧速度Ｆｃの方が小さい時（Ｓ２３：ＹＥＳ）、ＣＰＵ３１は計算した円弧速度Ｆｃを指令速度Ｆに設定する（Ｓ２４）。その反対に、指令速度Ｆの方が小さい時（Ｓ２３：ＮＯ）、許容誤差ε内で移動できるので、ＣＰＵ３１は指令速度Ｆを変更しない。なお、解釈した補間指令が直線補間指令である時（Ｓ２１：ＮＯ）、経路に対して誤差を生じないので、ＣＰＵ３１は処理をＳ２５に進める。
【００２５】
−ブロック間角度βの計算−
ＣＰＵ３１は、第一ブロックと第二ブロックのうち、少なくとも一方が円弧補間ブロックか否か判断する（Ｓ２５）。第一ブロックは今回の補間指令で補間するブロック、第二ブロックは第一ブロックの始点と繋がる前回の補間指令で補間したブロックである。円弧補間ブロックとは、円弧軌跡で補間するブロック、直線補間ブロックとは、直線軌跡で補間するブロックを意味する。第一ブロックと第二ブロックのうち少なくとも一方が円弧補間ブロックである時（Ｓ２５：ＹＥＳ）、ＣＰＵ３１は円弧補間を考慮したブロック間角度βを計算する（Ｓ２６）。他方、第一ブロックと第二ブロックの両方が直線補間ブロックである時（Ｓ２５：ＮＯ）、ＣＰＵ３１は二つの直線補間のブロック間角度βを計算する（Ｓ２７）。ブロック間角度βとは、第一ブロックと第二ブロックを繋ぐ指令点における角度を意味する。ＣＰＵ３１は、二つの直線補間ブロックの方向ベクトルを夫々求め、これらベクトル間の角度をブロック間角度βとして求める。
【００２６】
他方、第一ブロックと第二ブロックのうち少なくとも一方が円弧補間ブロックである時、上記の通り、円弧補間指令の指令円弧に対して工具は内回りに移動する。それ故、ＣＰＵ３１は、指令円弧に加え、該指令円弧に内回り誤差を含んだ実円弧を考慮して、円弧補間ブロックの方向ベクトルを決定し、他方のブロックの方向ベクトルとのブロック間角度βを計算する必要がある。
【００２７】
第一ブロックと第二ブロックのうち少なくとも一方が円弧補間ブロックとなる場面は、補間順（第二ブロック、第一ブロックの順）に示すと、以下の３パターンがある。
（１）直線補間ブロック−円弧補間ブロック
（２）円弧補間ブロック−直線補間ブロック
（３）円弧補間ブロック−円弧補間ブロック
【００２８】
（１）直線補間ブロック−円弧補間ブロック
図６は、直線補間ブロックＢ１の次に、円弧補間ブロックＢ２が指令点Ｐで繋がる経路である。ＣＰＵ３１は、前回の直線補間ベクトルａ、今回の指令円弧接線ベクトルｂ、今回の実円弧接線ベクトルｃを求める。ベクトルａは、ブロックＢ１の指令直線のベクトルである。ベクトルｂは、ブロックＢ２の指令円弧の指令点Ｐから引いた接線ベクトルである。ベクトルｃは、実円弧Ｋの指令点Ｐから引いた接線ベクトルである。実円弧Ｋは、ブロックＢ２の指令円弧に内回り誤差を含む軌跡である。内回り誤差は許容誤差εに置き換えることができる。実円弧Ｋは、ブロックＢ２の指令円弧の指令速度Ｆと実円弧Ｋの半径から求める。実円弧Ｋの半径は、ブロックＢ２の指令円弧の円弧半径Ｒｃから許容誤差εを差し引いた長さである。ＣＰＵ３１は、ベクトルａとベクトルｂが成す角度、ベクトルａとベクトルｃが成す角度を求める。コーナにおける内回り誤差は、同一速度であれば角度が小さいほど大きくなる。図６に示す例では、ベクトルａとベクトルｂが成す角度の方が、ベクトルａとベクトルｃが成す角度よりも小さい。それ故、ＣＰＵ３１はベクトルａとベクトルｂが成す角度をブロック間角度βに決定する。
【００２９】
図７は、円弧補間ブロックＢ２の指令円弧が反時計回りになった経路である。図６と同様に、ＣＰＵ３１は、前回の直線補間ベクトルａ、今回の指令円弧接線ベクトルｂ、今回の実円弧接線ベクトルｃを求め、ベクトルａとベクトルｂが成す角度、ベクトルａとベクトルｃが成す角度を求める。図７に示す例では、ベクトルａとベクトルｃが成す角度の方が、ベクトルａとベクトルｂが成す角度よりも小さい。それ故、ＣＰＵ３１はベクトルａとベクトルｃが成す角度をブロック間角度βに決定する。
【００３０】
（２）円弧補間ブロック−直線補間ブロック
図８は、図６とは逆に、円弧補間ブロックＢ１の次に、直線補間ブロックＢ２が指令点Ｐで繋がる経路である。ＣＰＵ３１は、前回の指令円弧接線ベクトルａ、前回の実円弧接線ベクトルｂ、今回の直線補間ベクトルｃを求める。ベクトルａは、ブロックＢ１の指令円弧の指令点Ｐから引いた接線ベクトルである。ベクトルｂは、実円弧Ｋの指令点Ｐから引いた接線ベクトルである。実円弧Ｋは、ブロックＢ１の指令円弧に内回り誤差を含む軌跡である。内回り誤差は許容誤差εに置き換えることができる。実円弧Ｋは、ブロックＢ１の指令円弧の指令速度Ｆと実円弧Ｋの半径から求める。実円弧Ｋの半径は、ブロックＢ１の指令円弧の円弧半径Ｒｃから許容誤差εを差し引いた長さである。ベクトルｃは、ブロックＢ２の指令直線のベクトルである。ＣＰＵ３１は、ベクトルａとベクトルｃが成す角度、ベクトルｂとベクトルｃが成す角度を求める。図８に示す例では、ベクトルａとベクトルｃが成す角度の方が、ベクトルｂとベクトルｃが成す角度よりも小さい。それ故、ＣＰＵ３１はベクトルａとベクトルｃが成す角度をブロック間角度βに決定する。
【００３１】
（３）円弧補間ブロック−円弧補間ブロック
図９は、円弧補間ブロックＢ１の次に、円弧補間ブロックＢ２が指令点Ｐで繋がる経路である。該場面では、第一ブロックと第二ブロックの何れもが円弧補間ブロックであるので、ＣＰＵ３１は、前回の指令円弧接線ベクトルａ、前回の実円弧接線ベクトルｂ、今回の指令円弧接線ベクトルｃ、今回の実円弧接線ベクトルｄを求める。ベクトルａは、ブロックＢ１の指令円弧の指令点Ｐから引いた接線ベクトルである。ベクトルｂは、実円弧Ｋ１の指令点Ｐから引いた接線ベクトルである。実円弧Ｋ１は、ブロックＢ１の指令円弧に内回り誤差を含む軌跡である。内回り誤差は許容誤差εに置き換えることができる。実円弧Ｋ１は、ブロックＢ１の指令円弧の指令速度Ｆと実円弧Ｋの半径から求める。実円弧Ｋ１の半径は、ブロックＢ１の指令円弧の円弧半径Ｒｃから許容誤差εを差し引いた長さである。
【００３２】
他方、ベクトルｃは、ブロックＢ２の指令円弧の指令点Ｐから引いた接線ベクトルである。ベクトルｄは、実円弧Ｋ２の指令点Ｐから引いた接線ベクトルである。実円弧Ｋ２は、ブロックＢ２の指令円弧に内回り誤差を含む軌跡である。内回り誤差は許容誤差εに置き換えることができる。実円弧Ｋ２は、ブロックＢ２の指令円弧の指令速度Ｆと実円弧Ｋ２の半径から求める。実円弧Ｋ２の半径は、ブロックＢ２の指令円弧の円弧半径Ｒｃから許容誤差εを差し引いた長さである。
【００３３】
ＣＰＵ３１は、ベクトルａとベクトルｃが成す角度、ベクトルａとベクトルｄが成す角度、ベクトルｂとベクトルｃが成す角度、ベクトルｂとベクトルｄが成す角度を求める。コーナにおける内回り誤差は、同一速度であれば角度が小さいほど大きくなる。図９に示す例では、ベクトルａとベクトルｃが成す角度が、他の角度に比べて最も小さい。それ故、ＣＰＵ３１はベクトルａとベクトルｃが成す角度をブロック間角度βに決定する。
【００３４】
−ブロック間角度βの補正−
図４に戻り、上述の如く、ブロック間角度βを計算した後（Ｓ２６，Ｓ２７）、計算したブロック間角度βについて、ＣＰＵ３１はブロック間角度補正処理を実行する（Ｓ２８）。
【００３５】
図１０〜図１２を参照し、ブロック間角度βを補正する理由を説明する。図１０に示す経路Ｌ１は、二つの直線補間指令で形成され、直線補間ブロックＢ１の次に、直線補間ブロックＢ２が指令点Ｐで繋がる経路である。ブロックＢ１はＸ軸方向への直線補間、ブロックＢ２はＹ軸方向への直線補間である。ブロック間角度βは９０°である。図１１は、図１０の経路Ｌ１を移動する際のブロックＢ１の移動速度（速度１）とブロックＢ２の移動速度（速度２）を、二段のＦＩＲフィルタ（ＦＩＲ１，２）で夫々処理した図である。
【００３６】
速度１が最大速度から下降を開始する時、速度２は上昇を開始する。速度１と速度２が重なる部分では、工具は経路Ｌ１のコーナを内回りに移動する。速度１が最大速度から下降を開始する時、工具はＡ１に位置する。速度１と速度２が同一速度で最も重なる時、工具はＡ２に位置する。速度１が最大速度から下降して０になる時、工具はＡ３に位置する。Ａ２は、経路Ｌ１に対して誤差が最大となる位置である。Ａ３は誤差が解消する位置である。誤差が生じて解消するまでのＡ１〜Ａ３までの時間は、時定数ｔ１とｔ２の合計に相当する。即ち、経路Ｌ１のコーナで発生した誤差はＡ３を通過しなければ解消しない。例えばＡ２を過ぎた直後に次ブロックのコーナがある時、誤差が時定数の合計の半分の時間だけ残る可能性がある。それ故、本実施形態は、過去にコーナで生じた誤差の影響を考慮し、Ｓ２６，Ｓ２７で計算したブロック間角度βを補正する。
【００３７】
図５，図１２，図１３を参照し、ブロック間角度補正処理を説明する。本実施形態は、図１２に示す経路Ｌ２を想定して説明する。経路Ｌ２は、複数のコーナが連続し、全体的に湾曲する経路である。ＰＮは今回の補間指令の開始点である。ＰＮ＋１は今回の補間指令の移動指令位置である。ＰＮ−１は前回（一個前）の補間指令の開始点である。ＰＮ−２は二個前の補間指令の開始点である。ＰＮ−３は三個前の補間指令の開始点である。ＰＮ−４は四個前の補間指令の開始点である。図１３は、図１２に示す経路Ｌ２を移動する時の移動速度の変化について、ＦＩＲフィルタ処理を施す前の図表である。
【００３８】
図５に示す如く、先ず、ＣＰＵ３１は、遡り時間ＴＢを以下の（数２）で求める（Ｓ４０）。遡り時間ＴＢは時定数ｔ１，ｔ２の合計の半分である。
（数２）
ＴＢ＝（ｔ１＋ｔ２）／２
・ＴＢ：遡り時間（ｍｓｅｃ）
・ｔ１：ＦＩＲ１の時定数（ｍｓｅｃ）
・ｔ２：ＦＩＲ２の時定数（ｍｓｅｃ）
【００３９】
次いで、ＣＰＵ３１は、ＴＢがＴＮ−１以下か否か判断する（Ｓ４１）。図１３に示す如く、ＴＮ−１は、一個前の補間指令の指令開始遅延時間Ｔｄと移動時間の合計である。指令開始遅延時間Ｔｄとは、一個前の補間指令に基づく移動が終了した時から、今回の補間指令に基づく移動を開始する時機を遅延させる時間である。なお、後述するが、今回の補間指令のＴｄは、ブロック間角度補正処理の後で計算するが（図４のＳ２９参照）、過去の補間指令のＴｄは既に計算済みである。ＴＢがＴＮ−１以下の時（Ｓ４１：ＹＥＳ）、過去の経路誤差は既に解消しているので、ＣＰＵ３１は何もせずに本処理を終了し、図４のＳ２９に処理を進める。
【００４０】
他方、ＴＢがＴＮ−１より大きい時（Ｓ４１：ＮＯ）、過去の誤差が残っているので、ＣＰＵ３１はＭに２を代入した上で（Ｓ４２）、ＴＢが以下の［数３］を満たすか否か判断する（Ｓ４３）。Ｍは整数のパラメータである。
【数３】
0006435872.tif 000003
・ＴＮ−Ｍ：Ｍ個前の補間指令の指令開始遅延時間と移動時間の合計時間（ｍｓｅｃ）
・βＮ−Ｍ：直線ＰＮ−ＭＰＮと直線ＰＮＰＮ＋１の内角（ｄｅｇ）
・β´：補正後のブロック間角度（ｄｅｇ）
【００４１】
但し、ＴＮ−Ｍは以下の［数４］で求める。
【数４】
0006435872.tif 000004
・ＴｄＮ−Ｍ：Ｍ個前の補間指令の指令開始遅延時間（ｍｓｅｃ）
・ＬＮ−Ｍ：Ｍ個前の補間指令のブロック長（ｍｍ）
・ＦＮ−Ｍ：Ｍ個前の補間指令の指令速度（ｍｍ／ｍｉｎ）
【００４２】
Ｍ＝２で［数３］を満たす時（Ｓ４３：ＹＥＳ）、過去の誤差が解消しているので、ＣＰＵ３１は角度β〜βＮ−Ｍを求める（Ｓ４５）。他方、Ｍ＝２で［数３］を満たさない時（Ｓ４３：ＮＯ）、ＣＰＵ３１はＭに更に１加算した上で（Ｓ４４）、Ｓ４３に戻って［数３］を満たすか否か再度判断する。［数３］を満たした時（Ｓ４３：ＹＥＳ）、ＣＰＵ３１は［数３］を満たしたＭの値で、角度β〜βＮ−Ｍを求める（Ｓ４５）。例えば、図１２，図１３に示す如く、今回の補間指令の開始点ＰＮから遡り時間ＴＢ分過去に遡った位置ＰＢ（図１２参照）を想定する。ＰＮがＰＮ−２とＰＮ−３の間にある時、ＣＰＵ３１は、三つ前のブロック（本発明の「過去ブロック」に相当）の補間指令の開始点ＰＮ−３まで遡り、角度βＮ−２，βＮ−３を求める。ＣＰＵ３１は、Ｓ４５で求めた角度β〜βＮ−Ｍのうち最小の角度を補正後のブロック間角度β´に決定する（Ｓ４６）。図１２に示す例では、βＮ−３をβ´に決定する。ＣＰＵ３１は本処理を終了し、図４のＳ２９に処理を進める。
【００４３】
−指令開始遅延時間Ｔｄの計算−
図４の誤差一定制御処理に戻り、ＣＰＵ３１はＴｄを計算する（Ｓ２９）。図１０に示す経路Ｌ１で説明する。図１４は、図１１と同様に、Ｔｄを０とした時のＦＩＲフィルタ処理を施した速度１と２の夫々の変化を示す。速度１と２が重なる部分は、工具がコーナを内回りする部分である。速度１と２が重なる部分の長さは、時定数ｔ１＋ｔ２に相当する。速度１と２が重なる部分において、速度１と２の曲線部分は二段目のＦＩＲ２の幅ｔ２に相当する。速度１と２が最も重なるＡ２は誤差最大点である。本実施形態は、該誤差からＴｄを求める。誤差最大点の誤差を求めるには、速度１と２が重なり始めてから、速度が曲線で変化する曲線部分と、直線で変化する直線部分の両方を計算する必要がある。
【００４４】
他方、図１５に示す如く、速度１と２の重なり時間が２×ｔ２よりも短い時、速度１と２が重なる部分の速度変化は全て曲線となる。それ故、誤差からＴｄを求める式は、図１４の時と異なる。なお、図１６に示す如く、Ｔｄをｔ１＋ｔ２とした時、速度１と２は重ならず、コーナにおける誤差は０である。この時のＴｄは最大値である。
【００４５】
以上のことを踏まえ、Ｔｄについて、以下の関係が成り立つ。εｍａｘは誤差の最大値である。
・Ｔｄ＝０  ならば  誤差＝εｍａｘ
・Ｔｄ＝ｔ１＋ｔ２  ならば  誤差＝０
【００４６】
図１４に示す如く、Ｔｄ＜ｔ１−ｔ２では、速度１と２が重なる部分の変化は、直線部分と曲線部分の両方を含む。他方、図１５に示す如く、Ｔｄ≧ｔ１−ｔ２では、速度１と２が重なる部分の変化は曲線部分のみである。即ち、Ｔｄの長さによって誤差を求める式は異なる。それ故、本実施形態は、許容誤差εからＴｄを求める為に、Ｔｄ＝ｔ１−ｔ２となる時の誤差εｔ１−ｔ２を予め求めておけば、二通りの計算式のうち何れの式を使ってＴｄを求めればよいかを容易に判別できる。そこで、ＣＰＵ３１は、（εｔ１−ｔ２／εｍａｘ）＝Ｋと置き換え、以下の［数５］と［数６］に示す如く、ε／εｍａｘがＫ未満か以上かで、Ｔｄを計算する式を判別する。［数５］と［数６］に示すＴｄの算出式は、図１５に示す速度波形を積分して得られる位置とＴｄの関係より求めた。
【００４７】
【数５】
0006435872.tif 000005
【数６】
0006435872.tif 000006
【００４８】
なお、指令速度Ｆが大きければ大きいほど、誤差は大きくなることから、Ｔｄは大きくなる。それ故、Ｔｄを計算する時の指令速度Ｆは、ブロックＢ１の指令速度とブロックＢ２の指令速度のうち大きいものを用いるのが望ましい。
【００４９】
図４に示す如く、ＣＰＵ３１は、Ｋの値に応じて何れか一方の式を使ってＴｄを計算し、計算したＴｄを記憶装置３４に記憶する（Ｓ３０）。それ故、ＣＰＵ３１は、時定数ｔ１，ｔ２、許容誤差ε、指令速度Ｆ、ブロック間角度βに基づき、速度１と２の重なり具合に応じて、Ｔｄを簡単に計算できる。ＣＰＵ３１は誤差一定制御処理を終了し、図３のメイン処理のＳ８に処理を進める。
【００５０】
次いで、ＣＰＵ３１は、今回の補間指令に基づき、前回の補間指令の指令点（現在位置）から指令位置までの補間処理を実行する（Ｓ８）。次いで、ＣＰＵ３１は、駆動軸毎の移動速度に対して二段のＦＩＲフィルタ処理を実行し（Ｓ９）、駆動軸毎に駆動信号を生成する。次いで、ＣＰＵ３１は、前回の補間指令の移動が終了した時から記憶装置３４に記憶したＴｄが経過したか否か判断する（Ｓ１０）。Ｔｄが経過していない時（Ｓ１０：ＮＯ）、ＣＰＵ３１は待機する。Ｔｄが経過した時（Ｓ１０：ＹＥＳ）、ＣＰＵ３１は補間指令に対応するモータ５１，５３，５４の駆動回路５１Ａ，５３Ａ，５４Ａに駆動信号を出力する（Ｓ１１）。駆動信号を受信した駆動回路５１Ａ，５３Ａ，５４Ａに対応するモータ５１，５３，５４は駆動する。前回の補間指令の移動が終了してＴｄ経過後に、今回の補間指令に基づく工具の移動が開始する。
【００５１】
ＣＰＵ３１はＳ２に戻り、次ブロックを解釈する。次ブロックが終了指令で無い時（Ｓ３：ＮＯ）、ＣＰＵ３１は次ブロックについて処理を繰り返す。次ブロックが終了指令の時（Ｓ３：ＹＥＳ）、ＣＰＵ３１は本処理を終了する。それ故、数値制御装置３０は、本処理を実行することにより、ＮＣプログラムが指令する経路に対して、工具を許容誤差ε内で移動できる。
【００５２】
以上説明の如く、本実施形態の数値制御装置３０は、ＮＣプログラムが指令する経路に沿って工具を移動してワーク加工を実行する。経路は、複数の指令点について隣接する指令点を補間して得られる。数値制御装置３０のＣＰＵ３１は、工具を移動するモータの加減速時定数ｔ１，ｔ２と、経路に対して許容する許容誤差εと、工具の移動速度を指令する指令速度Ｆと、経路のうち、ＮＣプログラム中の第一ブロックと第二ブロックのブロック間角度βに基づき、モータ５１，５３，５４に前回の補間指令の移動が終了してから今回の補間指令を開始するまでの指令開始遅延時間Ｔｄを演算する。第一ブロックは今回の補間指令で補間するブロック、第二ブロックは前回の補間指令で補間したブロックである。ＣＰＵ３１は、演算したＴｄに基づき、対応するモータ５１，５３，５４に今回の補間指令の移動を実行する駆動信号を駆動回路５１Ａ，５３Ａ，５４Ａに出力する。それ故、数値制御装置３０は、ＮＣプログラムが指令する経路について、小さい計算負荷で、経路誤差を常に許容誤差ε内に制御できる。
【００５３】
上記実施形態は更に、第一ブロックと第二ブロックのうち少なくとも一方のブロックが円弧補間を行う円弧補間ブロックである時、指令円弧の円弧半径と、許容誤差εと、時定数ｔ１，ｔ２とに基づき、円弧補間ブロックにて工具が移動する円弧速度Ｆｃを演算する。さらに、数値制御装置３０は、演算した円弧速度と、指令速度Ｆとを対比し、小さい方の速度を指令速度Ｆに設定する。それ故、数値制御装置３０は、円弧補間ブロックにおいて許容誤差ε内で経路を移動できる。また、数値制御装置３０は、円弧補間ブロックについて、第一ブロックと第二ブロックを繋ぐ指令点から引いた線分であって、指令円弧の指令円弧接線ベクトルと、指令点から引いた実円弧接線ベクトルのうち、他方のブロックとの成す角度が小さい方の角度をブロック間角度βとして演算する。それ故、数値制御装置３０は、少なくとも一方が円弧補間ブロックである時の第一ブロックと第二ブロックのブロック間角度βを適切に演算できるので、Ｔｄを適切に演算できる。
【００５４】
上記実施形態は更に、第一ブロックと第二ブロックの両方が直線補間ブロックである時、直線補間ブロック同士間のブロック間角度βを演算する。第一ブロックと第二ブロックのうち一方が円弧補間ブロックである時、数値制御装置３０は、指令円弧接線ベクトルと実円弧接線ベクトルのうち、他方の直線補間ブロックの指令直線と成す角度が小さい方の角度をブロック間角度βとする。第一ブロックと第二ブロックの両方が円弧補間ブロックである時、数値制御装置３０は、円弧補間ブロック同士を繋ぐ指令点から夫々引いた線分であって、第一ブロックに対応する指令円弧接線ベクトル及び実円弧接線ベクトルと、第二ブロックに対応する指令円弧接線ベクトル及び実円弧接線ベクトルとが相互に成す角度のうち、最も小さい角度をブロック間角度βとする。それ故、数値制御装置３０は、直線ブロック間同士、円弧補間ブロックと直線補間ブロック、円弧補間ブロック間同士の夫々のブロック間角度βを適切に演算できるので、Ｔｄを適切に演算できる。
【００５５】
以上説明にて、Ｓ７の処理を実行するＣＰＵ３１が本発明の演算手段に相当し、Ｓ１０，Ｓ１１の処理を実行するＣＰＵ３１が本発明の実行手段に相当し、Ｓ２２の処理を実行するＣＰＵ３１が本発明の円弧速度演算手段に相当し、Ｓ２７の処理を実行するＣＰＵ３１ご本発明の第一角度演算手段に相当し、Ｓ２６にて、円弧補間ブロックと直線補間ブロック間のブロック間角度βを演算するＣＰＵ３１が本発明の第二角度演算手段に相当し、
Ｓ２６にて、円弧補間ブロック同士間のブロック間角度βを演算するＣＰＵ３１が本発明の第三角度演算手段に相当する。また、ＣＰＵ３１が実行するＳ７の処理ステップが本発明の演算工程に相当し、ＣＰＵ３１が実行するＳ１０，Ｓ１１の処理ステップが本発明の実行手段に相当する。
【００５６】
本発明は上記実施形態に限らず種々の変更が可能である。例えば、上記実施形態は、移動速度を二段のＦＩＲフィルタ（ＦＩＲ１，ＦＩＲ２）で処理するが、三段、若しくはそれ以上のＦＩＲフィルタで処理してもよい。例えば、三段のＦＩＲフィルタで処理する時の時定数を大きいほうから順に、夫々、ｔ１，ｔ２，ｔ３とした時、指令開始遅延時間Ｔｄの計算は以下の［数７］〜［数１１］のように計算すればよい。以下、［ｔ１≦ｔ２＋ｔ３の場合］と［ｔ１＞ｔ２＋ｔ３の場合］に分けて説明する。
【００５７】
［ｔ１≦ｔ２＋ｔ３の場合］
・０≦ε／εｍａｘ≦Ｋ１の時
【数７】
0006435872.tif 000007
・Ｋ１＜ε／εｍａｘ≦Ｋ２の時
【数８】
0006435872.tif 000008
・Ｋ２＜ε／εｍａｘ≦Ｋ３の時
【数９】
0006435872.tif 000009
なお、［数９］の解の候補（１）〜（４）のうち、次の二つの条件［１］、［２］を共に満たす解をＴｄとする。
［１］ルート内の計算結果が０以上である。
［２］Ｔｄが「−ｔ１＋ｔ２＋ｔ３≦Ｔｄ≦ｔ１−ｔ２＋ｔ３」を満たす。
・Ｋ３＜ε／εｍａｘ≦１の時
【数１０】
0006435872.tif 000010
なお、［数１０］の解の候補（１）〜（４）のうち、次の二つの条件［１］、［２］を共に満たす解をＴｄとする。
［１］ルート内の計算結果が０以上である。
［２］Ｔｄが「０≦Ｔｄ≦−ｔ１＋ｔ２＋ｔ３」を満たす。
但し、
【数１１】
0006435872.tif 000011
【００５８】
［ｔ１＞ｔ２＋ｔ３の場合］
・０≦ε／εｍａｘ≦Ｋ１の時
【数１２】
0006435872.tif 000012
・Ｋ１≦ε／εｍａｘ≦Ｋ２の時
【数１３】
0006435872.tif 000013
・Ｋ２≦ε／εｍａｘ≦Ｋ３の時
【数１４】
0006435872.tif 000014
なお、［数１４］の解の候補（１）〜（４）のうち、次の二つの条件［１］、［２］を共に満たす解をＴｄとする。
［１］ルート内の計算結果が０以上である。
［２］Ｔｄが「ｔ１−ｔ２−ｔ３≦Ｔｄ≦ｔ１−ｔ２＋ｔ３」を満たす。
・Ｋ３≦ε／εｍａｘ≦１の時
【数１５】
0006435872.tif 000015
但し、
【数１６】
0006435872.tif 000016
【００５９】
また、上記実施形態は、更に種々の変更が可能である。上記実施形態は、図４に示す誤差一定制御処理の中のブロック間角度補正処理（Ｓ２８）を省略してもよい。
【００６０】
また上記実施形態は、ＮＣプログラムが指令する経路に沿って工具を移動するが、経路に沿ってワークを移動させてもよい。
【００６１】
また上記実施形態は、主軸の軸線が上下方向に延びる立型の工作機械１を例に説明したが、主軸の軸線が水平方向に延びる横型の工作機械にも適用可能である。
【００６２】
また上記実施形態は、モータの加減速時定数として移動平均を行うＦＩＲフィルタの時定数を用いたが、時定数を持つその他フィルタについても適用可能である。例えば、ＦＩＲフィルタの代わりに［数１７］に示すような１次のローパスフィルタを用いて加減速を行っても良い。Ｔは時定数である。
【数１７】
0006435872.tif 000017
【符号の説明】
【００６３】
１    工作機械
３０    数値制御装置
３１    ＣＰＵ
５１    Ｚ軸モータ
５２    Ｘ軸モータ
５３    Ｙ軸モータ
【図１】
0006435872.tif 000018
【図２】
0006435872.tif 000019
【図３】
0006435872.tif 000020
【図４】
0006435872.tif 000021
【図５】
0006435872.tif 000022
【図６】
0006435872.tif 000023
【図７】
0006435872.tif 000024
【図８】
0006435872.tif 000025
【図９】
0006435872.tif 000026
【図１０】
0006435872.tif 000027
【図１１】
0006435872.tif 000028
【図１２】
0006435872.tif 000029
【図１３】
0006435872.tif 000030
【図１４】
0006435872.tif 000031
【図１５】
0006435872.tif 000032
【図１６】
0006435872.tif 000033