(57)【要約】【課題】微小ブロックが連続する移動経路であっても加工品質を向上できる数値制御装置と制御方法を提供する。【解決手段】数値制御装置はＮＣプログラムが指令する指令点を補間して得られる経路に沿って速度プロファイルを作成する。数値制御装置は指令点の中から注目指令点を指定し、その前後において影響区間を計算する（Ｓ２６）。数値制御装置は影響区間を分割して指令補間点を計算する（Ｓ２７）。数値制御装置は指令補間点について移動平均フィルタで処理し（Ｓ２８）、動作補間点を計算する。数値制御装置は注目指令点と最も近い動作補間点の距離を誤差として算出する（Ｓ２９）。誤差が目標誤差を超える時、数値制御装置は減速率を算出し、影響区間と減速率に基づき速度プロファイルを更新する。数値制御装置は指令点を含む影響区間で減速するので、微小ブロックが連続する経路でも頻繁に加減速を繰り返すことが無い。【選択図】図１０
2018124996.tif 000002
【特許請求の範囲】
【請求項１】
ＮＣプログラムが指令する複数の指令点を補間して得られる経路に沿って、各指令点の間の距離と速度の情報を含む速度プロファイルを作成し、フィルタによる加減速処理を行った結果に基づき、工具又は被削材の移動を制御する制御手段を備える数値制御装置において、
前記制御手段は、
前記経路中の前記指令点の中から注目する指令点を注目指令点として指定する指定手段と、
前記指定手段が指定した前記注目指令点の前後において、前記フィルタの時定数に基づく時間の区間を指定する区間指定手段と、
前記区間指定手段が指定する前記区間を所定時間で分割する分割手段と、
前記分割手段が分割した前記区間を前記フィルタと同等の時定数を持つフィルタで処理する処理手段と、
前記処理手段で処理した前記区間において、前記注目指令点における前記経路からの誤差を算出する誤差算出手段と、
前記誤差算出手段が算出した前記誤差が、予め設定した規定値を超えるか判断する判断手段と、
前記判断手段が、前記誤差は前記規定値を超えると判断した場合、前記規定値と前記誤差に基づく減速率を算出する算出手段と、
前記区間指定手段が指定した前記区間と、前記算出手段が算出した前記減速率とに基づき、前記速度プロファイルを更新する更新手段と
を備えたこと
を特徴とする数値制御装置。
【請求項２】
前記区間は、前記注目指令点の前において、少なくとも前記フィルタの時定数の合計の半分の時間で移動する小区間を含み、前記注目指令点の後においても、同様の小区間を含むこと
を特徴とする請求項１に記載の数値制御装置。
【請求項３】
前記算出手段は、
前記規定値を前記誤差で除して得られる割合を前記減速率として算出すること
を特徴とする請求項１又は２に記載の数値制御装置。
【請求項４】
前記算出手段が算出した前記減速率で前記区間を移動したときの前記誤差が前記規定値に対して許容範囲内か否か判断する誤差判断手段と、
前記誤差判断手段が、前記誤差は前記許容範囲外であると判断した場合、前記誤差が前記許容範囲内となるように前記減速率を変更する変更手段と
を備えたこと
を特徴とする請求項１から３の何れかに記載の数値制御装置。
【請求項５】
前記経路中の各指令点間であるブロックが直線補間であるか円弧補間であるかを判断する補間判断手段と、
前記補間判断手段が、前記ブロックは前記円弧補間であると判断した場合、前記円弧補間の部分に仮想指令点を追加する追加手段と
を備え、
前記指定手段は、
前記補間判断手段が、前記ブロックは前記直線補間であると判断した場合、前記ブロックの終点を前記注目指令点として指定し、
前記補間判断手段が、前記ブロックは前記円弧補間であると判断した場合、前記追加手段が追加した前記仮想指令点と、前記ブロックの終点とを前記注目指令点として夫々指定すること
を特徴とする請求項１から４の何れかに記載の数値制御装置。
【請求項６】
前記更新手段は、
前記注目指令点が前記ブロックの終点である場合、前記算出手段が算出した前記減速率で移動する減速区間を、前記区間に設定する第一設定手段と、
前記注目指令点が前記仮想指令点である場合、前記減速区間を、少なくとも前記円弧補間の全域に設定する第二設定手段と
を備えたこと
を特徴とする請求項５に記載の数値制御装置。
【請求項７】
前記更新手段が前記速度プロファイルを更新した後、前記速度プロファイルに基づき移動した場合の前記誤差を再度算出する再算出手段と、
前記再算出手段が再度算出した前記誤差が前記規定値を超えるか再度判断する再判断手段と
を備え、
前記制御手段は、
前記再判断手段が、前記誤差は前記規定値を超えると判断した場合、前記算出手段、及び前記更新手段による各処理を再度実行すること
を特徴とする請求項１から６の何れかに記載の数値制御装置。
【請求項８】
前記更新手段が前記速度プロファイルを更新した後、前記速度プロファイルに基づき移動した場合の前記誤差を再度算出する再算出手段と、
前記再算出手段が再度算出した前記誤差が前記規定値を超えるか再度判断する再判断手段と
を備え、
前記制御手段は、
前記再判断手段が、前記誤差は前記規定値を超えると判断した場合、前記誤差が前記規定値以下となるまで、前記算出手段、及び前記更新手段による各処理を繰り返し実行すること
を特徴とする請求項１から６の何れかに記載の数値制御装置。
【請求項９】
ＮＣプログラムが指令する複数の指令点を補間して得られる経路に沿って、各指令点の間の距離と速度の情報を含む速度プロファイルを作成し、フィルタによる加減速処理を行った結果に基づき、工具又は被削材の移動を制御する数値制御装置の制御方法において、
前記経路中の前記指令点の中から注目する指令点を注目指令点として指定する指定工程と、
前記指定工程で指定した前記注目指令点の前後において、前記フィルタの時定数に基づく時間の区間を指定する区間指定工程と、
前記区間指定工程で指定する前記区間を所定時間で分割する分割工程と、
前記分割工程で分割した前記区間を前記フィルタと同等の時定数を持つフィルタで処理する処理工程と、
前記処理工程で処理した前記区間において、前記注目指令点における前記経路からの誤差を算出する誤差算出工程と、
前記誤差算出工程で算出した前記誤差が、予め設定した規定値を超えるか判断する判断工程と、
前記判断工程において、前記誤差は前記規定値を超えると判断した場合、前記規定値と前記誤差に基づく減速率を算出する算出工程と、
前記区間指定工程において指定した前記区間と、前記算出工程で算出した前記減速率とに基づき、前記速度プロファイルを更新する更新工程と
を備えたこと
を特徴とする数値制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数値制御装置と制御方法に関する。
【背景技術】
【０００２】
工作機械の数値制御装置は、ＮＣプログラムで指令した経路に沿って工具又は被削材を移動して加工を行う。その際、数値制御装置は自動的に滑らかな加減速を行い、工作機械の振動を抑える為の加減速制御を行う。加減速制御を行う時、ブロックとブロックの継ぎ目で一旦停止を行うと加工周期が延びる。故に数値制御装置は一つ前のブロックの減速中に新たなブロックの加速を開始する制御方式を採用することで、加工周期の短縮を図る。該方式は、継ぎ目部分のコーナで内回り誤差が発生するという問題点がある。特許文献１が開示する数値制御装置は、ブロックの移動指令開始を遅延することで、ブロックの継ぎ目部分で一つ前のブロックの減速と新たなブロックの加速が重なる重なり時間を調整する。内回り誤差は重なり時間に起因する。故に数値制御装置は内回り誤差を許容誤差内に調整できる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１３３９８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の数値制御装置は、特に微小ブロックが連続する滑らかな移動経路にて、コーナ部分の減速とブロック部分の加速を頻繁に繰り返すので、加工面の品質が低下するという問題点があった。
【０００５】
本発明の目的は、微小ブロックが連続する移動経路であっても加工品質を向上できる数値制御装置と制御方法を提供することである。
【課題を解決するための手段】
【０００６】
本発明の請求項１に係る数値制御装置は、ＮＣプログラムが指令する複数の指令点を補間して得られる経路に沿って、各指令点の間の距離と速度の情報を含む速度プロファイルを作成し、フィルタによる加減速処理を行った結果に基づき、工具又は被削材の移動を制御する制御手段を備える数値制御装置において、前記制御手段は、前記経路中の前記指令点の中から注目する指令点を注目指令点として指定する指定手段と、前記指定手段が指定した前記注目指令点の前後において、前記フィルタの時定数に基づく時間の区間を指定する区間指定手段と、前記区間指定手段が指定する前記区間を所定時間で分割する分割手段と、前記分割手段が分割した前記区間を前記フィルタと同等の時定数を持つフィルタで処理する処理手段と、前記処理手段で処理した前記区間において、前記注目指令点における前記経路からの誤差を算出する誤差算出手段と、前記誤差算出手段が算出した前記誤差が、予め設定した規定値を超えるか判断する判断手段と、前記判断手段が、前記誤差は前記規定値を超えると判断した場合、前記規定値と前記誤差に基づく減速率を算出する算出手段と、前記区間指定手段が指定した前記区間と、前記算出手段が算出した前記減速率とに基づき、前記速度プロファイルを更新する更新手段とを備えたことを特徴とする。数値制御装置は指令点のみで減速するのではなく、該指令点を含む区間で減速するので、仮に微小ブロックが連続するような経路においても頻繁に加減速を繰り返すことが無い。故に数値制御装置は被削材の加工面の品質を向上できる。数値制御装置は、経路中の各指令点について複数の注目指令点を順に指定することで、経路中のコーナ部分、円弧部分、曲線部分において加減速によって生じる誤差を総合的に抑制できる。
【０００７】
請求項２に係る数値制御装置の前記区間は、前記注目指令点の前において、少なくとも前記フィルタの時定数の合計の半分の時間で移動する小区間を含み、前記注目指令点の後においても、同様の小区間を含むとよい。故に数値制御装置は、指令点における誤差に影響する区間において速度プロファイルを更新できるので、指令点における誤差を効果的に抑制できる。
【０００８】
請求項３に係る数値制御装置の前記算出手段は、前記規定値を前記誤差で除して得られる割合を前記減速率として算出するとよい。故に数値制御装置は減速率を容易に算出できる。
【０００９】
請求項４に係る数値制御装置は、前記算出手段が算出した前記減速率で前記区間を移動したときの前記誤差が前記規定値に対して許容範囲内か否か判断する誤差判断手段と、前記誤差判断手段が、前記誤差は前記許容範囲外であると判断した場合、前記誤差が前記許容範囲内となるように前記減速率を変更する変更手段とを備えるとよい。数値制御装置は、誤差が許容範囲内となるように減速率を変更するので、減速し過ぎることが無い。故に数値制御装置は短い加工周期で被削材の加工を完了できる。減速が不足することも無いので、誤差が許容範囲を超えないことがより確かとなる。
【００１０】
請求項５に係る数値制御装置は、前記経路中の各指令点間であるブロックが直線補間であるか円弧補間であるかを判断する補間判断手段と、前記補間判断手段が、前記ブロックは前記円弧補間であると判断した場合、前記円弧補間の部分に仮想指令点を追加する追加手段とを備え、前記指定手段は、前記補間判断手段が、前記ブロックは前記直線補間であると判断した場合、前記ブロックの終点を前記注目指令点として指定し、前記補間判断手段が、前記ブロックは前記円弧補間であると判断した場合、前記追加手段が追加した前記仮想指令点と、前記ブロックの終点とを前記注目指令点として夫々指定するとよい。経路中のブロックが円弧補間である場合、円弧補間の部分に仮想指令点を追加することで、円弧部分の曲率に起因する内回りの誤差を考慮できる。故に円弧補間の場合でも、仮想指令点における内回り誤差、即ち円弧に対する内回り誤差を規定値以下に抑制できる。故に円弧補間の部分においても、被削材の加工面の品質を向上できる。
【００１１】
請求項６に係る数値制御装置の前記更新手段は、前記注目指令点が前記ブロックの終点である場合、前記算出手段が算出した前記減速率で移動する減速区間を、前記区間に設定する第一設定手段と、前記注目指令点が前記仮想指令点である場合、前記減速区間を、少なくとも前記円弧補間の全域に設定する第二設定手段とを備えるとよい。注目指令点が円弧上に追加された仮想指令点である場合、数値制御装置は減速区間を円弧補間の全域に設定する。故に数値制御装置は円弧部分の曲率に起因する内回りの誤差を考慮できる。
【００１２】
請求項７に係る数値制御装置は、前記更新手段が前記速度プロファイルを更新した後、前記速度プロファイルに基づき移動した場合の前記誤差を再度算出する再算出手段と、前記再算出手段が再度算出した前記誤差が前記規定値を超えるか再度判断する再判断手段とを備え、前記制御手段は、前記再判断手段が、前記誤差は前記規定値を超えると判断した場合、前記算出手段、及び前記更新手段による各処理を再度実行するとよい。故に数値制御装置は経路からの誤差を規定値以下に確実に抑制できる。
【００１３】
請求項８に係る数値制御装置は、前記更新手段が前記速度プロファイルを更新した後、前記速度プロファイルに基づき移動した場合の前記誤差を再度算出する再算出手段と、前記再算出手段が再度算出した前記誤差が前記規定値を超えるか再度判断する再判断手段とを備え、前記制御手段は、前記再判断手段が、前記誤差は前記規定値を超えると判断した場合、前記誤差が前記規定値以下となるまで、前記算出手段、及び前記更新手段による各処理を繰り返し実行するとよい。故に数値制御装置は経路からの誤差を規定値以下に確実に抑制できる。
【００１４】
本発明の請求項９に係る制御方法は、ＮＣプログラムが指令する複数の指令点を補間して得られる経路に沿って、各指令点の間の距離と速度の情報を含む速度プロファイルを作成し、フィルタによる加減速処理を行った結果に基づき、工具又は被削材の移動を制御する数値制御装置の減速制御方法において、前記経路中の前記指令点の中から注目する指令点を注目指令点として指定する指定工程と、前記指定工程で指定した前記注目指令点の前後において、前記フィルタの時定数に基づく時間の区間を指定する区間指定工程と、前記区間指定工程で指定する前記区間を所定時間で分割する分割工程と、前記分割工程で分割した前記区間を前記フィルタと同等の時定数を持つフィルタで処理する処理工程と、前記処理工程で処理した前記区間において、前記注目指令点における前記経路からの誤差を算出する誤差算出工程と、前記誤差算出工程で算出した前記誤差が、予め設定した規定値を超えるか判断する判断工程と、前記判断工程において、前記誤差は前記規定値を超えると判断した場合、前記規定値と前記誤差に基づく減速率を算出する算出工程と、前記区間指定工程において指定した前記区間と、前記算出工程で算出した前記減速率とに基づき、前記速度プロファイルを更新する更新工程とを備えたことを特徴とする。故に数値制御装置は上記各工程を実行することで、請求項１の効果を得ることができる。
【図面の簡単な説明】
【００１５】
【図１】数値制御装置３０と工作機械１の電気的構成を示すブロック図。
【図２】移動速度を二段の移動平均フィルタで処理した図。
【図３】直線補間ブロックＢ１とＢ２で構成するプログラム経路Ｒ１と、フィルタ処理後の経路Ｒ２の図。
【図４】図３に示す経路Ｒ２を移動する時の移動速度１と２の変化を示す図。
【図５】プログラム経路Ｒ３を減速しない時の経路Ｒ４と、全自動減速処理した時の経路Ｒ５の図である。
【図６】減速しない時の速度ブロックと、全自動減速処理した時の速度ブロックを示す図である。
【図７】メイン処理の流れ図。
【図８】ブロック情報２０の概念図。
【図９】全自動減速処理の流れ図。
【図１０】減速計算処理の流れ図。
【図１１】円弧補間に設定する円弧中央指令点を示す図。
【図１２】円弧中央指令点計算処理の流れ図。
【図１３】プログラム経路における着目指令点、影響開始点、影響終了点を示す図。
【図１４】影響区間計算処理の流れ図。
【図１５】着目指令点よりも前の影響区間（Ｔ／２）と影響開始点を示す図。
【図１６】着目指令点よりも後の影響区間（Ｔ／２）と影響終了点を示す図。
【図１７】誤差計算処理の流れ図。
【図１８】指令点と探索点の誤差を示す図。
【図１９】ベクトルの成す角が鋭角の場合における指令点からの最接近点を示す図。
【図２０】誤差が二番目に小さい動作補間点を、誤差最小の動作補間点から見たベクトルｐと、指令点を誤差最小の動作補間点から見たベクトルε２を示す図。
【図２１】図２０における指令点からの最接近点と誤差εを示す図である。
【図２２】ベクトルの成す角が鈍角の場合における指令点からの最接近点を示す図。
【図２３】誤差抑制処理の流れ図である。
【図２４】線形補間で誤差を目標誤差に近付ける方法を示す図。
【図２５】速度プロファイル更新処理の流れ図。
【図２６】Ｃ３指令点を着目指令点に指定したときの影響区間を示す図。
【図２７】Ｃ３指令点の速度プロファイルを示す図表。
【図２８】Ｃ４指令点を着目指令点に指定したときの影響区間を示す図。
【図２９】Ｃ４指令点の速度プロファイルを示す図表。
【図３０】Ｃ３指令点とＣ４指令点の各速度プロファイルを重ね合わせた図表。
【図３１】Ｃ３指令点とＣ４指令点の各速度プロファイルを統合した速度プロファイルデータの概念図。
【図３２】円弧中央指令点の減速区間を円弧全域に設定した図。
【図３３】円弧中央指令点の速度プロファイルを示す図表。
【図３４】着目指令点の誤差を抑制する為に減速した結果、次の指令点の誤差が大きくなった移動軌跡とその拡大図。
【図３５】誤差確認処理の流れ図。
【図３６】ブロックＢ１とＢ２で構成する経路に仮想指令点を追加した図。
【図３７】減速計算処理で生成した速度プロファイルを示す図。
【図３８】誤差確認処理で生成した速度プロファイルを示す図。
【図３９】二つの速度プロファイルデータを纏めた図。
【図４０】置換処理後の速度プロファイルデータを示す図。
【図４１】シミュレーションに用いたプログラム経路を示す図。
【図４２】シミュレーション結果である速度プロファイルを示す図。
【図４３】シミュレーション結果である移動速度（フィルタ処理後）を示す図。
【図４４】シミュレーション結果である移動経路を示す図。
【図４５】シミュレーション結果である誤差を示す図。
【図４６】長ブロックの後に微小ブロックが連続するプログラム経路を示す図。
【図４７】速度分割数調整処理の流れ図。
【図４８】速度分割数調整処理の前後の速度プロファイルを示す図。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態を説明する。図１は本発明が対象とする工作機械の構成の一例である。図１に示す数値制御装置３０は工作機械１の軸移動を制御することで、テーブル（図示略）上面に保持した被削材（図示略）の切削加工を行う。工作機械１の左右方向、前後方向、上下方向は、夫々Ｘ軸方向、Ｙ軸方向、Ｚ軸方向である。
【００１７】
図１を参照し、工作機械１の構成を説明する。工作機械１は、例えばテーブル上面に保持した被削材に対し、主軸に装着した工具をＸ軸方向、Ｙ軸方向、Ｚ軸方向に移動して切削加工を行う立型工作機械である。工作機械１は図示しない主軸機構、主軸移動機構、工具交換装置等を備える。主軸機構は主軸モータ５２を備え、工具を装着した主軸を回転する。主軸移動機構は、Ｚ軸モータ５１、Ｘ軸モータ５３、Ｙ軸モータ５４を備え、テーブル（図示略）上面に支持した被削材に対し相対的に主軸をＸＹＺの各軸方向に夫々移動する。工具交換装置はマガジンモータ５５を備え、複数の工具を収納する工具マガジン（図示略）を駆動し、主軸に装着した工具を他の工具と交換する。工作機械１は操作盤１０を更に備える。操作盤１０は入力部２４と表示部２５を備える。入力部２４は各種入力、指示、設定等を行う為の機器である。表示部２５は各種画面を表示する機器である。操作盤１０は数値制御装置３０の入出力部３５に接続する。Ｚ軸モータ５１はエンコーダ５１Ｂを備える。主軸モータ５２はエンコーダ５２Ｂを備える。Ｘ軸モータ５３はエンコーダ５３Ｂを備える。Ｙ軸モータ５４はエンコーダ５４Ｂを備える。マガジンモータ５５はエンコーダ５５Ｂを備える。エンコーダ５１Ｂ〜５５Ｂは数値制御装置３０の後述する駆動回路５１Ａ〜５５Ａに各々接続する。
【００１８】
図１を参照し、数値制御装置３０の電気的構成を説明する。数値制御装置３０は、ＣＰＵ３１、ＲＯＭ３２、ＲＡＭ３３、記憶装置３４、入出力部３５、駆動回路５１Ａ〜５５Ａ等を備える。ＣＰＵ３１は数値制御装置３０を統括制御する。ＲＯＭ３２は、メインプログラム等の各種プログラムを記憶する。ＲＡＭ３３は各種処理実行中の各種データを記憶する。記憶装置３４は不揮発性メモリである。入出力部３５は操作盤１０に接続する。駆動回路５１Ａ〜５５Ａはサーボアンプである。駆動回路５１ＡはＺ軸モータ５１とエンコーダ５１Ｂに接続する。駆動回路５２Ａは主軸モータ５２とエンコーダ５２Ｂに接続する。駆動回路５３ＡはＸ軸モータ５３とエンコーダ５３Ｂに接続する。駆動回路５４ＡはＹ軸モータ５４とエンコーダ５４Ｂに接続する。駆動回路５５Ａはマガジンモータ５５とエンコーダ５５Ｂに接続する。駆動回路５１Ａ〜５５ＡはＣＰＵ３１から後述する駆動信号を受け、対応する各モータ５１〜５５に駆動電流（パルス）を夫々出力する。駆動回路５１Ａ〜５５Ａはエンコーダ５１Ｂ〜５５Ｂからフィードバック信号を受け、位置と速度のフィードバック制御を行う。駆動回路５１Ａ〜５５Ａは例えばＦＰＧＡ回路でもよい。
【００１９】
図２を参照し、加減速処理に用いる移動平均フィルタと時定数を説明する。数値制御装置３０は、ＮＣプログラムの補間指令に基づき、Ｘ軸、Ｙ軸、Ｚ軸の軸毎に、目標位置、移動距離、移動速度、移動時間等を夫々演算する。補間指令は、アドレスで指定した移動速度で軸を動かす時に使用する制御指令であり、例えば直線補間指令、円弧補間指令等である。数値制御装置３０は、補間後加減速処理を行う。補間後加減速処理は、演算した軸毎の移動速度に、移動平均フィルタ（ＦＩＲフィルタ）を少なくとも二回以上通して速度変化を滑らかにする処理である。
【００２０】
図２は、Ｘ軸方向においてｘ１からｘ２に移動する移動速度を、移動平均フィルタで二回処理した結果を示す。移動平均フィルタの加減速時定数（以下、時定数と呼ぶ）は、移動平均フィルタが平均を行うサンプル数に相当する。例えば、サンプル時間が１ｍｓｅｃで、移動平均フィルタの時定数が１０ｍｓｅｃの時、移動平均フィルタは今回の補間指令を含めて１０個前までの指令の平均を今回の出力とする。一段目の移動平均フィルタ（ＦＩＲ１）の時定数をｔ１、二段目の移動平均フィルタ（ＦＩＲ２）の時定数をｔ２とする。
【００２１】
移動速度を二段の移動平均フィルタ（ＦＩＲ１、ＦＩＲ２）で処理した結果、加速度の変化は一定以下となるので、工具はｔ１＋ｔ２をかけて緩やかに速度を上げて最高速度に達し、その後、ｔ１＋ｔ２をかけて緩やかに速度を落として停止する。故に数値制御装置３０は、各軸の移動速度を複数の移動平均フィルタで処理することで、移動速度の急激な変化を吸収できるので、工作機械１の振動と、動作に必要な最大トルクを抑制できる。
【００２２】
図３，図４を参照し、移動経路中のコーナに生じる内回り誤差を説明する。図３に示す経路Ｒ１は、二つの直線補間指令（Ｇ１指令）で形成し、直線補間ブロックＢ１の次に、直線補間ブロックＢ２が指令点Ｐで繋がる。ブロックＢ１はＸ軸方向への直線補間、ブロックＢ２はＹ軸方向への直線補間である。ブロック間角度βは９０°である。故に指令点Ｐはコーナを形成する。図４は、図３の経路Ｒ１を移動する際のブロックＢ１の移動速度（速度１）とブロックＢ２の移動速度（速度２）を、二段の移動平均フィルタ（ＦＩＲ１，２）で処理した図である。
【００２３】
速度１が最大速度から減速を開始する時、速度２は加速を開始する。速度１と速度２が重なる部分では、工具は経路Ｒ１のコーナである指令点Ｐ付近を内回りに移動する（経路Ｒ２参照）。速度１が最大速度から減速を開始する時、工具はＡ１に位置する。Ａ２は、指令点Ｐと経路Ｒ２が最も近づく点である。指令点ＰからＡ２までの距離が内回り誤差（以下、誤差と呼ぶ）である。速度１が最大速度から減速して０になる時、工具はＡ３に位置する。Ａ２は、経路Ｒ１に対して誤差が最大となる位置である。Ａ３は誤差が解消する位置である。誤差が生じて解消するまでのＡ１〜Ａ３までの時間は、時定数ｔ１とｔ２の合計に相当する。コーナに生じる誤差を目標誤差に抑制する方法の一例として、コーナ手前で減速する方法がある。コーナ手前で減速することで、速度１と速度２の重なり時間を小さくできるので、誤差を目標誤差に抑制できる。但し、後述するように、コーナ手前で減速する方法は、微小ブロックが連続する経路においては問題が生じる。
【００２４】
図５，図６を参照し、微小ブロックが連続する経路に生じる内回り誤差と、本発明の概要を説明する。図５（１）に示す経路Ｒ３は、ＮＣプログラムに基づくプログラム経路である。経路Ｒ３は、ブロック長の短い複数の微小ブロック（Ｇ１ブロック）Ｂ１〜Ｂ６を有する。ブロックとブロックの継ぎ目は指令点である。微小ブロックＢ１は指令点Ｃ０とＣ１の間、微小ブロックＢ２は指令点Ｃ１とＣ２の間、微小ブロックＢ３は指令点Ｃ２とＣ３の間、微小ブロックＢ４は指令点Ｃ３とＣ４の間、微小ブロックＢ５は指令点Ｃ４とＣ５の間、微小ブロックＢ６は指令点Ｃ５とＣ６の間である。
【００２５】
図６（１）は、図５（１）の経路Ｒ３を移動する際の移動速度を、二段の移動平均フィルタで処理した速度プロファイルである。速度プロファイルとは、各ブロックの距離と速度（切削送り速度）を設定したものである。フィルタ処理後の移動速度は、緩やかに速度を上げて最高速度に達し、微小ブロックＢ１〜Ｂ６においては最高速度で移動し、その後、緩やかに速度を落として停止する。図５（１）に示す経路Ｒ４は、図６（１）の移動速度で移動したフィルタ処理後の経路である。微小ブロックＢ１〜Ｂ６が連続する部分では、軸は大きく内回りに移動している。例えば指令点Ｃ１を過ぎた直後に次の指令点Ｃ２があるので、指令点Ｃ１に生じる誤差が解消されないまま次の指令点Ｃ２を通過することになる。そして、指令点Ｃ３、Ｃ４・・・と順次連続して通過するので、経路Ｒ４は経路Ｒ３に対して大きく内回りに移動することになる。指令点Ｃ０〜Ｃ６と経路Ｒ４との離間距離は誤差に相当する。このような誤差を目標誤差に抑制する為、上記した様に、ブロックの継ぎ目部分で減速する方法を採用した場合、微小ブロックが連続する経路では、ブロックの継ぎ目部分の減速と次のブロックの加速を頻繁に繰り返すことになる。頻繁な加減速を行うと機械の振動が発生し、加工面の品質が低下する場合がある。また、加工面の切削痕（ツールマーク、カッターマーク）は送り速度によって変化するため、加減速を繰り返すと切削痕によるスジが発生し、加工面の品質が低下する。
【００２６】
本実施形態は、微小ブロックが連続する経路に生じる誤差を予め設定した目標誤差以下に抑制する為、後述する全自動減速処理（図９参照）を実行する。全自動減速処理は、指令点毎に誤差に影響する影響区間を求め、それら影響区間の減速率を計算し、最適な速度プロファイルを決定する処理である。影響区間とは、指令点の前後の区間であり、本実施形態では時定数合計の半分の時間で移動する小区間である。
【００２７】
図６（２）に示す速度プロファイルは、図６（１）の速度プロファイルを全自動減速処理したものである。全自動減速処理後の移動速度は、フィルタ処理しただけの移動速度とは異なり、速度を上げて最高速度に達した後、微小ブロックＢ１〜Ｂ６を移動する間では、指令点Ｃ０〜Ｃ６の各影響区間に応じて緩やかに減速する。即ち、微小ブロックＢ１〜Ｂ６が連続する部分では、移動速度は減速と加速を頻繁に繰り返すことが無い。ブロックＢ６を通過した後、再度最高速度まで加速し、その後、減速して停止する。図５（２）に示す経路Ｒ５は、全自動減速処理後の移動経路である。経路Ｒ５は、経路Ｒ４に比べ、経路Ｒ３との誤差が小さい。故に本実施形態は、微小ブロックが連続する経路に生じる誤差を抑制できる。
【００２８】
図７を参照し、メイン処理を説明する。作業者が操作盤１０にてＮＣプログラムを指定し実行操作を入力すると、ＣＰＵ３１はＲＯＭ３２からメインプログラムを呼び出し、本処理を実行する。ＣＰＵ３１は、指定したＮＣプログラムを記憶装置３４から呼び出して解釈する（Ｓ１）。ＣＰＵ３１はＮＣプログラムの解釈に基づき複数の移動指令を生成する（Ｓ２）。移動指令は軸を移動する位置（座標値）を指定する。移動指令の一例は、直線補間指令と円弧補間指令である。移動指令で指定した位置は指令点である。指令点と指令点の間はブロックである。各指令点を結んだ経路はプログラム経路である。
【００２９】
ＣＰＵ３１は生成した複数の移動指令に基づきブロック情報２０を作成する（Ｓ３）。図８に示すように、ブロック情報２０は、ブロック番号と軸移動情報を備える。ブロック番号は、プログラム経路を構成するブロックの順番である。軸移動情報は、各ブロックにおける軸移動に関する情報であり、例えば移動ベクトル、ブロック長、移動速度、移動時間等の各種情報を含む。ブロック情報２０はＲＡＭ３３に記憶する。移動ベクトルは、ブロックの方向ベクトルである。
【００３０】
ＣＰＵ３１は全自動減速モードがオンか否か判断する（Ｓ４）。全自動減速モードは、各指令点の影響区間で減速することで、移動経路の誤差を予め設定した目標誤差以下に自動で調整するモードである。全自動減速モードの設定は、例えば操作盤１０の入力部２４で行うことができる。全自動減速モードがオンの場合（Ｓ４：ＹＥＳ）、ＣＰＵ３１は全自動減速処理（図９参照）を実行する（Ｓ５）。全自動減速処理実行後、ＣＰＵ３１は本処理を終了する。全自動減速モードがオフの場合（Ｓ４：ＮＯ）、ＣＰＵ３１は通常処理を実行する（Ｓ６）。通常処理は、ＲＡＭ３３に記憶するブロック情報２０に基づき、移動速度のフィルタ処理を行い、軸移動について加減速制御を行う。通常処理実行後、ＣＰＵ３１は本処理を終了する。
【００３１】
図８，図９を参照し、全自動減速処理を説明する。本実施形態は、あるブロックの移動指令を実行するまでに、速度プロファイルを決定する必要がある。速度プロファイルを決定するには、図９に示す全自動減速処理の後述する減速計算処理（Ｓ１１）と誤差確認処理（Ｓ１２）を実行する必要がある。故にＣＰＵ３１はブロックの移動指令を実行する際に、ブロック情報２０の先読みが必要である。先読みとは将来実行するブロックを予め読み込むことである。減速計算処理では、各指令点における経路誤差が目標範囲内になる様に、各指令点において、指令点よりも前の過去の影響ブロックと、指令点よりも後の将来の影響ブロックの夫々の速度が変更される。即ち速度プロファイルが更新される。影響ブロックとは、各指令点の誤差に影響を与える範囲内のブロックを示し、後述するように、影響ブロックは指令点の前と後において、それぞれ時定数合計の半分の時間の範囲に存在するブロックである。誤差確認処理では、減速計算処理によって更新された速度プロファイルについて、各指令点における経路誤差が目標範囲内に入っていることの確認を行い、経路誤差が目標範囲内に入っていない場合は再度速度プロファイルの更新処理を行う。減速計算処理においては、前述したように各指令点とその前後の影響範囲内のブロックの速度が更新されるので、相互に影響を与えることを防ぐために誤差確認処理は減速計算処理を行う指令点の影響範囲の外のブロックに対して行う必要がある。即ち、減速計算処理と誤差確認処理の夫々において、過去の影響ブロックと将来の影響ブロックの速度が変更されるので、ブロックの移動指令を実行する際には、少なくとも時定数を２倍した時間後までに処理されるブロックについて先読みする必要がある。
【００３２】
先読みには、定数ＳとＧを用いる。Ｓは先読みブロック数、Ｇは影響ブロック数である。影響ブロックの数は、時定数の合計によって決まるため、時定数が可変のシステムにおいては、時定数の合計が最も大きい状況が最悪条件となる。最悪条件として、例えば時定数合計が６０００ｍｓｅｃ（最大設定値）の場合を考える。また、ＣＰＵ３１の処理周期（サンプル時間）が１ｍｓｅｃの時、ＣＰＵ３１が処理できるもっとも短いブロックは１ｍｓｅｃで移動完了するブロックである。全てのブロックがサンプル時間１ｍｓｅｃで移動完了するブロックである場合、Ｇは最大値をとる。時定数が最大設定値である６０００ｍｓｅｃの場合、Ｇは６０００／２＝３０００ブロックである。前述したように先読みに必要なブロック数は時定数を２倍した時間後までに処理されるブロック数であるので、ＣＰＵ３１は、４×３０００＝１２０００ブロックの先読みが必要である。図８に示すように、ｋを誤差確認ブロック番号とした場合、減速計算ブロック番号はｋ＋２Ｇ、先読みブロック番号はｋ＋３Ｇ、実行ブロック番号はｋ―Ｇとなる。減速計算ブロック番号は、減速計算処理を実行するブロック番号である。誤差確認ブロック番号は、誤差確認処理を実行するブロック番号である。実行ブロック番号は、実行するブロック番号である。
【００３３】
図９を参照し、初期状態からの処理の流れを説明する。ＣＰＵ３１はＲＡＭ３３に記憶するブロック情報２０（図８参照）から、ブロックＢ（１）〜ブロックＢ（３Ｇ）を読み込む（Ｓ７）。上記の通り、本実施形態のＧは３０００である。故にＣＰＵ３１はブロックＢ（１）〜ブロックＢ（９０００）を読み込む。ＣＰＵ３１は読み込んだブロックＢ（１）〜ブロックＢ（２Ｇ）の減速計算処理を実行する（Ｓ８）。ＣＰＵ３１は１を誤差確認ブロック番号ｋに設定する（Ｓ９）。
【００３４】
図１０を参照し、減速計算処理を説明する。ｋ＋２Ｇ＝６００１であるので、ＣＰＵ３１はブロックＢ（６００１）に着目すればよい。ＣＰＵ３１は着目するブロックＢ（６００１）の移動指令が直線補間指令（Ｇ１指令）か円弧補間指令（Ｇ２指令）か判断する（Ｓ２２）。直線補間指令である場合（Ｓ２２：直線補間）、ＣＰＵ３１はブロックＢ（６００１）の終点を着目指令点とする（Ｓ２５）。円弧補間指令である場合（Ｓ２２：円弧補間）、ＣＰＵ３１は円弧中央指令点計算処理を実行する（Ｓ２３）。
【００３５】
図１１，図１２を参照し、円弧中央指令点計算処理を説明する。全自動減速処理では、着目指令点での誤差を計算し、その誤差を目標誤差以下にする移動速度を求める。しかし、例えば図１１に示すように、Ａ点とＢ点の間を円弧で補間する円弧補間指令では、円弧始点部の指令点における誤差と円弧終点部の指令点における誤差のみを抑制しただけでは、円弧途中部で誤差が目標誤差を超える可能性がある。本実施形態は、円弧中央部に仮想的な指令点（以下、円弧中央指令点と呼ぶ）を作成し、円弧中央指令点の誤差も抑制することで、円弧の曲率に起因する誤差も抑制できる。円弧中央指令点は、円弧始点部の指令点から円弧終点部の指令点を円弧補間する際の移動距離が半分になる点である。
【００３６】
図１３，図１４を参照し、影響区間計算処理を説明する。図１３に示すプログラム経路において、着目指令点をｉ番目の指令点ｐｏｓｉとする。本計算処理で使用する記号の意味は次の通りである。
・Ｌｉ：ｉ番目のブロック長（ｍｍ）
・Ｆｉ：ｉ番目のブロックの速度（ｍｍ／分）
・ｎｃｉ：ｉ番目のブロックの指令補間点数（実数）（個）
・ｎｂｌｏｃｋ：先読みした指令の最大個数（個）
・ｄｔ：サンプル時間（ｍｓｅｃ）
・Ｔ：時定数の合計（ｍｓｅｃ）
・ｐｏｓｘｉ，ｐｏｓｙｉ，ｐｏｓｚｉ：ｉ番目とｉ＋１番目の継ぎ目の指令点
・ｐｏｓｘｉｓ，ｐｏｓｙｉｓ，ｐｏｓｚｉｓ：誤差に影響を及ぼす最も早い指令点（ｍｍ）
・ｐｏｓｘｉｅ，ｐｏｓｙｉｅ，ｐｏｓｚｉｅ：誤差に影響を及ぼす最も遅い指令点（ｍｍ）
・ｉｓ：誤差に影響を及ぼす最も早い指令番号
・ｉｅ：誤差に影響を及ぼす最も遅い指令番号
・ｐｏｓｘｓｔｉ，ｐｏｓｙｓｔｉ，ｐｏｓｚｓｔｉ：ｉ番目の指令点に対する影響開始点（ｍｍ）
・ｐｏｓｘｅｎｉ，ｐｏｓｙｅｎｉ，ｐｏｓｚｅｎｉ：ｉ番目の指令点に対する影響終了点（ｍｍ）
なお、サンプル時間ｄｔは処理周期に相当する。
【００３７】
図１４に示すように、ＣＰＵ３１は、ブロック毎に移動距離と移動速度から指令補間点数を実数で求める（Ｓ５１）。ＣＰＵ３１は、例えばｉ番目のブロックの指令補間点数（実数）を、以下の数式で計算する。
・ｎｃｉ＝（Ｌｉ×６０×１０００／Ｆｉ）／ｄｔ
【００３８】
次いで、ＣＰＵ３１は、着目指令点に影響を及ぼす最も早い指令点の指令番号を求める（Ｓ５２）。着目指令点に影響を及ぼす最も早い指令点とは、着目指令点から時定数合計の半分の時間だけ遡った時点までの範囲の中に存在する指令点のうち、もっとも指令番号の小さい指令点である。
【００３９】
次いで、ＣＰＵ３１は、着目指令点に影響を及ぼす最も遅い指令点の指令番号を求める（Ｓ５３）。着目指令点に影響を及ぼす最も遅い指令点とは、着目指令点から時定数合計の半分の時間だけ経過した時点までの範囲の外に存在する指令点のうち、もっとも指令番号の小さい指令点である。
【００４０】
ＣＰＵ３１は影響開始点を求める（Ｓ５４）。影響開始点とは、着目するブロックの誤差に影響を及ぼす区間の開始位置である。図１５に示すように、ｉ番目の指令点ｐｏｓｉの影響開始点ｐｏｓｓｔｉは、指令点ｐｏｓｉよりも前で、且つ指令点ｐｏｓｉからの距離が時定数合計の半分に相当する距離となる位置となる。
【００４１】
ＣＰＵ３１は影響終了点を求める（Ｓ５５）。影響終了点とは、着目するブロックの誤差に影響を及ぼす区間の終了位置である。図１６に示すように、ｉ番目の指令点ｐｏｓｉの影響終了点ｐｏｓｅｎｉは、指令点ｐｏｓｉよりも後で、且つ指令点ｐｏｓｉからの距離が時定数合計の半分に相当する距離となる位置となる。ＣＰＵ３１は本処理を終了し、図１０のＳ２７に処理を進める。ＣＰＵ３１は指令補間点計算処理を実行する（Ｓ２７）。指令補間点計算処理とは、影響開始点から影響終了点までの間の指令補間点を求める処理である。指令補間点とは各ブロックをサンプル時間ごとに分割したもので、各ブロックの移動速度とサンプル時間から計算できる。
【００４２】
ＣＰＵ３１はフィルタ処理を実行する（Ｓ２８）。フィルタ処理は、Ｓ２７の処理で計算した指令補間点に対し、移動平均フィルタで処理することで、動作補間点を求める。移動平均フィルタは一般的に二つ以上用いられる。例えば異なる切削送り時定数を備える三つの移動平均フィルタによって、三段階でフィルタ処理を行う。本計算処理で使用する記号の意味は次の通りである。
・ｐｘｉ，ｐｙｉ，ｐｚｉ：指令補間点（ｍｍ）
・ｐｒｘｉ，ｐｒｙｉ，ｐｒｚｉ：動作補間点（ｍｍ）
・ｔ１：時定数１（ｍｓｅｃ）
・ｔ２：時定数２（ｍｓｅｃ）
・ｔ３：時定数３（ｍｓｅｃ）
・ｄｔ：サンプル時間（ｍｓｅｃ）
なお、各時定数１〜３はサンプル時間の整数倍である。
【００４３】
ｉ番目の補間点の移動平均フィルタの計算式は、以下の［数１］の通りである。
【数１】
2018124996.tif 000003
なお、ｊ＝１〜３である。ＣＰＵ３１は、指令補間点と動作補間点の始点と終点を一致させるため、指令補間点の始点前と終点後に（ｔｊ／ｄｔ）個だけ、始点と終点と同じ値を指令補間点に付け加えて計算する。ＣＰＵ３１は、誤差計算処理を実行する（Ｓ２９）。
【００４４】
図１７〜図２２を参照し、誤差計算処理を説明する。図１８に示すように、誤差とは、指令点と動作補間点の距離が最小となるものであり、単一解で求められる。本計算処理で使用する記号の意味は次の通りである。
・ｐｏｓｘｉ，ｐｏｓｙｉ，ｐｏｓｚｉ：ｉ番目のブロックとｉ＋１番目のブロックの継ぎ目の指令点
・ｐｒｘｉ，ｐｒｙｉ，ｐｒｚｉ：動作補間点（ｍｍ）
・ｉｓｐ：探索点
・ε１：探索点の１つ前の動作補間点と指令点の距離（ｍｍ）
・ε２：探索点と指令点の距離（ｍｍ）
・ε３：探索点の１つ後の動作補間点と指令点の距離（ｍｍ）
・ε：誤差（ｍｍ）
・ベクトルｐ：誤差が２番目に小さい動作補間点を、誤差最小の動作補間点から見たベクトル
・ベクトルε２：指令点を誤差最小の動作補間点から見たベクトル
【００４５】
図１７に示すように、ＣＰＵ３１は、動作補間点を探索点（図１８参照）とし、探索点と着目指令点の誤差を、以下の［数２］で計算する（Ｓ７１）。なお、初期探索点は、着目指令点に最も近い指令補間点に対応する動作補間点とする。
【数２】
2018124996.tif 000004
【００４６】
ＣＰＵ３１は、探索点の前後の動作補間点と着目指令点の誤差を計算する（Ｓ７２）。ＣＰＵ３１は、探索点の一つ前の動作補間点と着目指令点の誤差を、以下の［数３］で計算する。
【数３】
2018124996.tif 000005
ＣＰＵ３１は、探索点の一つ後の動作補間点と着目指令点の誤差を、以下の［数４］で計算する。
【数４】
2018124996.tif 000006
【００４７】
ＣＰＵ３１は、探索点と探索点の前後の動作補間点を比較し（Ｓ７３）、探索点の誤差ε２が最小か判断する（Ｓ７４）。探索点の誤差ε２が最小である場合（Ｓ７４：ＹＥＳ）、即ち、ε２≦ε１且つε２≦ε３である場合、後述するＳ７８に処理を進める。探索点の誤差ε２が最小でない場合（Ｓ７４：ＮＯ）、探索点の一つ前の動作補間点の誤差ε１が最小か判断する（Ｓ７５）。誤差ε１が最小である場合（Ｓ７５：ＹＥＳ）、即ち、ε１＜ε２である場合、ＣＰＵ３１はｉｓｐ＝ｉｓｐ−１とすることで、探索点を一つ前に移動し（Ｓ７６）、Ｓ７１に戻り処理を繰り返す。探索点の一つ後の動作補間点の誤差ε３が最小である場合（Ｓ７５：ＮＯ）、即ち、ε３＜ε２である場合、ＣＰＵ３１はｉｓｐ＝ｉｓｐ＋１とすることで、探索点を一つ後に移動し（Ｓ７７）、Ｓ７１に戻り処理を繰り返す。  
【００４８】
探索点の誤差ε２が最小となった場合（Ｓ７４：ＹＥＳ）、ＣＰＵ３１は、図１９，図２０に示すように、探索点の前後の動作補間点のうち誤差が２番目に小さい点と探索点を結んだ線分と、探索点と指令点を結んだ線分のベクトルを以下のように計算する（Ｓ７８）。
・ε１≦ε３である場合
【数５】
2018124996.tif 000007
・ε３＜ε１である場合
【数６】
2018124996.tif 000008
【００４９】
ＣＰＵ３１は、計算で求めたベクトルのなす角が鋭角（内積が正）か否か判断する（Ｓ７９）。図２０に示すように、ベクトルのなす角が鋭角である場合（Ｓ７９：ＹＥＳ）、図２１に示すように、ＣＰＵ３１は三平方の定理に基づき、指令点からの最接近点を、以下の［数７］で計算する（Ｓ８０）。ＣＰＵ３１は指令点と計算で求めた最接近点から誤差を計算する（Ｓ８１）。このように内挿を行うことで、ベクトルのなす角が鋭角の場合でも最接近点をより高精度に求めることができる。
【数７】
2018124996.tif 000009
【００５０】
図２２に示すように、ベクトルのなす角が鈍角である場合（Ｓ７９：ＮＯ）、探索点と誤差が２番目に小さい動作補間点とを結ぶ直線に対する垂線の足（最接近点）が外挿点となるので、誤差は理想値とかけ離れてしまう可能性がある。故にＣＰＵ３１は、Ｓ７４で求めた誤差ε２を誤差εに決定する（Ｓ８２）。誤差εはＲＡＭ３３に記憶する。ＣＰＵ３１は、誤差抑制処理を実行する（Ｓ３０）。
【００５１】
図２３，図２４を参照し、誤差抑制処理を説明する。本処理は、誤差と速度は１次の関係にあると仮定して、減速率を内挿処理によって計算し、減速率に応じて移動速度を調整することで、誤差と目標誤差を一致させる処理である。本実施形態は、着目指令点がｉ番目のブロックの終点のときのｋ回目の誤差抑制処理として説明する。本処理で使用する記号の意味は次の通りである。
・ε：誤差（ｍｍ）
・εｋ：ｋ回再計算した着目指令点の誤差（ｍｍ）
・εｒ：目標誤差（ｍｍ）
・εｔ：誤差収束許容値（ｍｍ）
・Ｒｋ：ｋ回再計算した減速率（−）
・Ｆｉｋ：ｋ回再計算した速度（ｍｍ／分）
・ｉｓ：誤差に影響を及ぼす最も早い指令（−）
・ｉｅ：誤差に影響を及ぼす最も遅い指令（−）
・ｎｂｌｏｃｋ：最大先読みブロック数（−）
【００５２】
図２３に示すように、ＣＰＵ３１は、誤差計算処理で求めた誤差εは、目標誤差εｒ以下か否か判断する（Ｓ９１）。誤差εが目標誤差εｒ以下の場合（Ｓ９１：ＹＥＳ）、ＣＰＵ３１は本処理を終了し、図１０の後述するＳ３１に処理を進める。誤差εが目標誤差εｒよりも大きい場合（Ｓ９１：ＮＯ）、ＣＰＵ３１は減速率Ｒｋを、以下の数式で計算する（Ｓ９２）。
・Ｒｋ＝εｒ／ε
【００５３】
ＣＰＵ３１は影響区間の速度を、以下の数式で計算する（Ｓ９３）。
・Ｆｉｋ＝Ｆｉ×Ｒｋ
但し、ｉｓ≦ｉ≦ｉｅである。
【００５４】
ＣＰＵ３１は求めた移動速度で、影響区間を再計算する（Ｓ９４）。計算方法は、図１４に示す影響区間計算処理における計算方法と同様である。ＣＰＵ３１は指令補間点を再計算する（Ｓ９５）。ＣＰＵ３１は、再度指令補間点計算処理を実行する。ＣＰＵ３１は求めた指令補間点を用いて、動作補間点を再計算する（Ｓ９６）。計算方法は、図１０のＳ２８のフィルタ処理における計算方法と同様である。ＣＰＵ３１は求めた動作補間点と指令点を用いて、誤差εｋを再計算する（Ｓ９７）。計算方法は、図１７の誤差計算処理における計算方法と同様である。
【００５５】
ＣＰＵ３１は、計算で求めた誤差が誤差条件を満たすか否か判断する（Ｓ９８）。本実施形態の誤差条件は、目標誤差から誤差を引いた差分が０以上で、かつ誤差収束許容値以下（０≦εｒ−εｋ≦εｔ）を満たす条件である。誤差が誤差条件を満たす場合（Ｓ９８：ＹＥＳ）、ＣＰＵ３１は、減速率、影響開始点、影響終了点をＳ９２，Ｓ９４で求めた値に夫々決定する（Ｓ９９）。ＣＰＵ３１は、図１０の流れ図に戻り、後述するＳ３１に処理を進める。
【００５６】
誤差が誤差条件を満たさない場合（Ｓ９８：ＮＯ）、例えば図２４に示すように、誤差εｂは目標誤差εｒよりも大きいので、目標誤差εｒとなるように、ＣＰＵ３１は減速率を変更する必要がある。誤差εａは目標誤差εｒよりは小さいが、目標誤差εｒから誤差εａを引いた差分は、誤差収束許容値εｔよりも大きい。この場合、経路からの誤差は十分に小さいので加工品質は確保できるが、減速率が小さくなることから速度が遅くなって加工周期が延びてしまう。故に誤差εａが誤差収束許容値εｔ内となるように、ＣＰＵ３１は減速率を変更する必要がある。ＣＰＵ３１は例えば線形補間により、誤差εｋが目標誤差εｒになるように、減速率を変更する（Ｓ１００）。本実施形態は、誤差と減速率の関係が線形であると仮定する。例えば、減速率Ｒｂにおける誤差がεｂであり、再度減速処理を行って求めた減速率Ｒｂを適用したときの誤差がεａで有る時、ＣＰＵ３１は、減速率Ｒｋ＋１を、以下の［数８］で計算する。一般には誤差と減速率の関係は線形ではないが、複数回の試行を繰り返すことで、誤差収束許容値を満足する減速率を求めることが出来る。本実施形態は線形補間によって減速率を求める際に、目標とする誤差を目標誤差εｒから誤差収束許容値εｔの半分を引いた値とする。これは、誤差収束許容値を満足する減速率を効率よく求めるためである。
【数８】
2018124996.tif 000010
但し、εｋ＜εｒのとき、εａ＜εｋであれば、εａ＝εｋ、Ｒａ＝Ｒｋとする。一方、εｋ＞εｒのとき、εｂ＞εｋであれば、εｂ＝εｉｋ、Ｒｂ＝Ｒｋとする。ＣＰＵ３１は、Ｓ９３に戻り、上記処理を繰り返すことによって、誤差を再計算する。なお、εａの初期値は０、εｂの初期値はε、Ｒａの初期値は０、Ｒｂの初期値は１とする。
【００５７】
再計算で求めた誤差が誤差条件を満たす場合（Ｓ９８：ＹＥＳ）、ＣＰＵ３１は減速率、影響開始点、影響終了点を決定する（Ｓ９９）。誤差は、目標誤差以下で、且つ誤差許容値の範囲内となるので、本実施形態は、加工品質を向上しつつ短い加工周期で加工を完了できる。ＣＰＵ３１は、速度プロファイル更新処理を実行する（Ｓ３１）。
【００５８】
図２５〜図３３を参照し、速度プロファイル更新処理を説明する。本実施形態は、図２６に示すプログラム経路の速度プロファイルを作成する場合を一例として説明する。図２５に示すように、例えば指令点Ｃ３を着目指令点とする場合、ＣＰＵ３１は指令点Ｃ３が円弧中央指令点で、かつその円弧の移動時間が時定数の合計よりも短いか判断する（Ｓ１０１）。指令点Ｃ３はブロック終点であるので（Ｓ１０１：ＮＯ）、ＣＰＵ１３１は影響区間を減速区間に設定する（Ｓ１０２）。減速区間とは、図２３の誤差抑制処理で決定した減速率で減速させる区間である。ＣＰＵ３１は、誤差抑制処理で決定した指令点Ｃ３に対する影響開始点、影響終了点、及び減速率に基づき、対象ブロックの速度を決定し（Ｓ１０４）、速度プロファイルを生成する（Ｓ１０５）。
【００５９】
図２７は、指令点Ｃ３を着目指令点とした速度プロファイルである。指令点Ｃ３の影響開始点は、Ｃ１〜Ｃ２の間のブロック長Ｌ２の途中に位置する。指令点Ｃ３の影響終了点は、Ｃ４〜Ｃ５のブロック長Ｌ５の途中に位置する。減速区間は、影響開始点から影響終了点までの影響区間である。ブロック長Ｌ１〜Ｌ６に対応するブロックの移動速度をＦとし、誤差抑制処理で決定した減速率がＲ３である場合、影響開始点から影響終了点までの移動速度は、Ｆ×Ｒ３となる。生成した速度プロファイルはＲＡＭ３３に記憶する。
【００６０】
指令点Ｃ３の速度プロファイルを生成した場合、ＣＰＵ３１は生成した速度プロファイルと、先に生成してＲＡＭ３３に記憶する速度プロファイルとを統合して速度プロファイルを更新する（Ｓ１０６）。指令点Ｃ３の速度プロファイルの更新が完了すると、図２８に示すように、ＣＰＵ３１は次の指令点Ｃ４を着目指令点に設定し、指令点Ｃ３と同様に速度プロファイルを作成する。図２９は、指令点Ｃ４を着目指令点とした速度プロファイルである。指令点Ｃ４を着目指令点に設定した場合、指令点Ｃ４の影響開始点は、Ｃ２〜Ｃ３の間のブロック長Ｌ３の途中に位置する。指令点Ｃ４の影響終了点は、Ｃ５〜Ｃ６のブロック長Ｌ６の途中に位置する。減速区間は、影響開始点から影響終了点までの影響区間である。故にブロック長Ｌ１〜Ｌ６に対応する速度ブロックの速度をＦとし、誤差抑制処理で決定した減速率がＲ４である場合、影響開始点から影響終了点までの移動速度は、Ｆ×Ｒ４となる。生成した速度プロファイルはＲＡＭ３３に記憶する。
【００６１】
図３０は、指令点Ｃ３の速度プロファイルと、指令点Ｃ４の速度プロファイルとを重ね合わせたものである。これら二つの速度プロファイルによれば、移動速度が異なる重複区間が存在する。ＣＰＵ３１は重複区間においては、移動速度の小さい方を選択する（図３０中濃いグレー部分を参照）。故に移動速度は、ブロック長Ｌ２の途中でＦからＦ×Ｒ３に減速し、ブロック長Ｌ３の途中でＦ×Ｒ３からＦ×Ｒ４にさらに減速する。その後、移動速度は、ブロック長Ｌ６の途中でＦ×Ｒ４からＦに加速する。このようにして、速度プロファイルは統合される。
【００６２】
図３１は、図３０の統合結果の速度プロファイルデータである。速度プロファイルデータは、指令、ブロック長、速度、速度分割数、距離、減速率等を含み、これら各種データを互いに対応づけて記憶する。図２６，図２８に示すプログラム経路は、移動指令１〜６で指令するブロックＢ１〜Ｂ６で構成する。移動指令１に対してブロック長Ｌ１、移動指令２に対してブロック長Ｌ２、移動指令３に対してブロック長Ｌ３、移動指令４に対してブロック長Ｌ４、移動指令５に対してブロック長Ｌ５、移動指令６に対してブロック長Ｌ６を記憶する。移動速度は移動指令で指定する速度であり、移動指令１〜６においては何れも同じ移動速度Ｆである。
【００６３】
速度分割数は、各ブロックＢ１〜Ｂ６において移動速度を分割する数である。図３０に示すように、移動速度はブロック長Ｌ２、Ｌ３、Ｌ６において分割する。故に速度分割数は、ブロック長Ｌ２、Ｌ３、Ｌ６において１となり、それ以外は分割しないので０となる。距離は、ブロックの始点から見た速度変化点までの距離である。例えばブロック長Ｌ２では、距離ｐ２とＬ２を記憶する。減速率は速度を減速する割合である。例えば、ブロック長Ｌ２では、距離ｐ２に対して減速率＝１であり、距離Ｌ２に対して減速率＝Ｒ３を記憶する。ＣＰＵ３１は速度プロファイルデータをＲＡＭ３３に記憶し、図１０の流れ図に戻り、Ｓ３２に処理を進める。
【００６４】
図２５，図３２，図３３を参照し、円弧中央指令点の速度プロファイルを説明する。図３２に示すプログラム経路は、二つの直線補間指令（Ｇ１指令）の間に円弧補間指令（Ｇ２指令）を挟む経路である。円弧補間の経路では、円弧の曲率に起因して誤差が生じることが問題である。故にＣＰＵ３１は、上記の通り、円弧中央部に円弧中央指令点を追加する。図２５に示すように、着目指令点は円弧中央指令点であり、かつその円弧の移動時間が時定数の合計以上の場合（Ｓ１０１：ＹＥＳ）、ＣＰＵ３１は円弧全域を減速区間に設定する（Ｓ１０３）。なお、円弧の移動時間が時定数の合計よりも短く、影響区間が円弧全域を超える場合、ＣＰＵ３１は原則通り、影響区間を減速区間に設定すればよい。
【００６５】
図３３は、図３２に示す円弧中央指令点を着目指令点とした速度プロファイルである。Ｇ１、Ｇ２指令に対応するブロックの移動速度をＦとし、誤差抑制処理で決定した減速率がＲの場合、円弧全域であるＧ２指令に対応するブロックの移動速度はＦ×Ｒとなる。円弧補間では、円弧補間のブロックの端の指令点において発生する経路誤差の他に、円弧の曲率に起因する誤差が円弧の全域で生じる。即ち曲率に起因する経路誤差は、円弧補間のブロックの端の指令点から時定数の合計の半分以上離れたどの円弧位置でも同じなので、本実施形態では、代表点として例えば円弧中央指令点を追加し、その位置の誤差が目標誤差となるように円弧全域で減速する。故に本実施形態は、指令点の誤差のみならず、円弧補間の円弧部分の曲率に起因する誤差も考慮できる。
【００６６】
速度プロファイル更新後（図２５のＳ１０６）、ＣＰＵ３１は、着目指令点は円弧中央指令点か否か判断する（Ｓ３２）。着目指令点が円弧中央指令点である場合（Ｓ３２：ＹＥＳ）、ＣＰＵ３１は、円弧補間ブロックの終点を着目指令点とし（Ｓ２５）、上記処理を繰り返す。着目指令点が円弧中央指令点ではなく、ブロック終点である場合（Ｓ３２：ＮＯ）、ＣＰＵ３１は、誤差確認ブロック番号ｋ＝１として（Ｓ９）、ブロックＢ（ｋ＋３Ｇ）を読み込む（Ｓ１０）。ＣＰＵ３１はブロックＢ（ｋ＋２Ｇ）の減速計算処理を実行する（Ｓ１１）。ＣＰＵ３１は、ブロックＢ（ｋ）に着目し、誤差確認処理を実行する（Ｓ１２）。
【００６７】
図３４〜図３６を参照し、誤差確認処理を説明する。図１０に示す減速計算処理は、着目指令点の誤差を小さくする為に減速するアルゴリズムであり、着目指令点以外の誤差を考慮していない。図３４（１）は、プログラム経路と、プログラム経路の各指令点を減速計算処理したものと、減速計算処理しないものとを比較した図表である。図３４（２）は、図３４（１）に示すＷ１領域の拡大図である。着目指令点の誤差を抑制する為に減速計算処理を実行した結果、他の指令点における誤差が目標誤差を超えてしまう場合がある。図中誤差ｐは、Ｗ２領域内の誤差を小さくする為に減速計算処理を実行したために、減速処理を行わなかったときよりも誤差が大きくなる場合の例である。これは、本アルゴリズムにおいては減速を行うと誤差が小さくなるという仮定に基づいているが、図３４（２）に示すような移動方向（加速方向）が変化することで、プログラム経路と動作補間点を結んだ経路が交わるような軌跡においては、減速することで誤差が大きくなってしまう場合があるためである。この問題を解決する為、ＣＰＵ３１は誤差確認処理を実行する。誤差確認処理は、減速計算処理を実行したブロックに対し、再度減速計算処理と同様の処理を行うものである。
【００６８】
図８に示す例において、誤差確認ブロック番号はｋ＝３００１である。図３５に示すように、ＣＰＵ３１は着目したブロックについて、図１０の減速計算処理と同様の処理を実行する（Ｓ１１１）。但し、速度プロファイル生成後のブロックは、減速計算処理前のブロックを速度分割数で分割しており、一つのブロックで移動速度が変化する。故にＣＰＵ３１は減速計算処理で用いた上記数式をそのまま使用できない。本実施形態は速度プロファイル生成後のブロックを、移動速度が変わる継ぎ目毎に分割した仮想ブロックとし、仮想ブロックと仮想ブロックの継ぎ目の点を仮想指令点とする。ＣＰＵ３１は仮想ブロックと仮想指令点を、ブロックと指令点とすることにより、上記数式を使用できる。
【００６９】
図３６（１）に示すように、例えば二つのブロックＢ１とＢ２で構成される略Ｌ字状の移動経路を想定する。ブロックＢ１とＢ２の継ぎ目は、指令点Ｃｎである。ブロックＢ１のブロック長はＬ１、ブロックＢ２のブロック長はＬ２である。指令点Ｃｎについて、減速計算処理（図１０参照）を行った結果、図３６（２）に示す速度プロファイルでは、ブロックＢ１はブロックＢ１−１とＢ１−２に２分割し、ブロックＢ２はブロックＢ２−１、Ｂ２−２に２分割する。移動速度は、ブロック長Ｌ１にて距離ｐ１１で減速した後、ブロック長Ｌ２にて距離ｐ２１で加速する。
【００７０】
図３６（３）に示すように、ＣＰＵ３１は、ブロック長Ｌ１とＬ２において、速度が変化する２つの継ぎ目を仮想指令点とする。ブロックＢ１−１、Ｂ１−２、Ｂ２−１、Ｂ２−２は、仮想ブロックとなる。生成した仮想ブロックと仮想指令点を、ブロックと指令点として処理することにより、ＣＰＵ３１は上記数式を使用できる。なお、仮想指令点は誤差を抑制したい指令点ではないので、計算量削減により、ＣＰＵ３１は、図３５の誤差確認処理で行う減速計算処理中の誤差計算処理（図１０のＳ２９参照）は実行しなくてもよい。故にＣＰＵ３１は減速計算処理（Ｓ１１１）を実行した結果、他の指令点の誤差が目標誤差より大きくなってしまった場合でも、誤差確認処理を行うことで、大きくなってしまった他の指令点の誤差を抑制し、速度プロファイルを再度更新できる。ＣＰＵ３１は置換処理を実行し（Ｓ１１２）、図９の流れ図に戻る。
【００７１】
図３７〜図４０を参照し、置換処理の内容を説明する。上記の通り、誤差確認処理による速度プロファイルの更新は、仮想ブロック毎に行う。しかし、軸移動を制御する駆動回路５１Ａ、５３Ａ、５４Ａ（図１参照）に速度プロファイルデータを出力するのはブロック毎であり、仮想ブロック毎ではない。故にＣＰＵ３１は仮想ブロックで計算した速度プロファイルデータについて、ブロックの速度分割数、距離、減速率に置換する必要がある。ＣＰＵ３１は置換処理を実行することで、ブロック毎の速度プロファイルデータに変換する。
【００７２】
本処理で用いるブロックの速度分割数、距離、減速率は、以下のように定義する。
・ブロックの速度分割数：（誤差確認処理時の仮想ブロック毎の速度分割数＋１）の合計値−１
・ブロックの距離：ブロックの始点から見た速度変化点までの距離
なお、速度変化点は、ブロックの終点も含む。
・ブロックの減速率：減速計算処理で求めた減速率と、誤差確認処理で求めた減速率との積
【００７３】
図３７は、減速計算処理で求めた速度プロファイルの一例である。速度プロファイルは、４つのブロックＢ１〜Ｂ４で構成する経路のものである。ブロックＢ１のブロック長はＬ１、ブロックＢ２のブロック長はＬ２、ブロックＢ３のブロック長はＬ３、ブロックＢ４のブロック長はＬ４である。Ｒ３、Ｒ４は減速率である。移動速度は、ブロック長Ｌ２、Ｌ３、Ｌ４で夫々変化する。ブロック長Ｌ２の途中では、速度Ｆから速度Ｆ×Ｒ３に減速する。ブロック長Ｌ３の途中では、速度Ｆ×Ｒ３から速度Ｆ×Ｒ４にさらに減速する。ブロック長Ｌ４の途中では、速度Ｆ×Ｒ４から速度Ｆに加速する。ブロックＢ２は、ブロックＢ２−１とＢ２−２に２分割されている。ブロックＢ３も、ブロックＢ３−１とＢ３−２に２分割されている。ブロックＢ４も、ブロックＢ４−１とＢ４−２に２分割されている。ブロックＢ１は分割されていない。
【００７４】
図３８は、誤差確認処理で求めた速度プロファイルの一例であり、図３７の速度プロファイル生成後のブロックに対し、上記のように、減速計算処理と同様の処理を再度行ったものである。この速度プロファイルでも、ブロック長Ｌ２、Ｌ３、Ｌ４で速度が夫々変化するが、ブロックＢ３−１とＢ３−２では、移動速度はさらに段階的に変化する。Ｒ３〜Ｒ７は減速率である。ブロックＢ３−１では、速度Ｆ×Ｒ３からＦ×Ｒ３×Ｒ５（＝Ｆ×Ｒ４×Ｒ６）に減速し、ブロックＢ３−２では、速度Ｆ×Ｒ３×Ｒ５からＦ×Ｒ４×Ｒ７に加速する。
【００７５】
図３９は、図３７と図３８の各速度プロファイルのデータを纏めたものである。減速計算処理で生成した速度プロファイルデータにおいて、ブロック番号１（Ｂ１）の速度分割数は０、距離はＬ１、減速率は１である。ブロック番号２（Ｂ２）の速度分割数は１である。距離はブロックＢ２の始点からブロックＢ２−１とＢ２−２までの各距離であるのでｐ２とＬ２である。ブロックＢ２−１の減速率は１、ブロックＢ２−２の減速率はＲ３である。ブロック番号３（Ｂ３）の速度分割数は１である。距離はブロックＢ３の始点からブロックＢ３−１とＢ３−２における各距離であるのでｐ３とＬ３である。ブロックＢ３−１の減速率はＲ３、ブロックＢ３−２の減速率はＲ４である。ブロック番号４（Ｂ４）の速度分割数は１である。距離はブロックＢ４の始点からブロックＢ４−１とＢ４−２における各距離であるのでｐ４とＬ４である。ブロックＢ４−１の減速率はＲ４、ブロックＢ４−２の減速率は１である。
【００７６】
誤差確認処理で生成した速度プロファイルデータにおいて、ブロック番号１（Ｂ１）の速度分割数は０、距離はＬ１、減速率は１である。ブロック番号２（Ｂ２）のうちブロックＢ２−１の速度分割数は０、距離はｐ２、減速率は１である。ブロックＢ２−２の速度分割数は０、距離はブロックＢ２の仮想指令点からの距離であるのでＬ２−ｐ２、減速率は１である。ブロック番号３（Ｂ３）のうちブロックＢ３−１の速度分割数は１である。ブロックＢ３−１はさらに２分割しているので、ブロックＢ３−１の距離はブロックＢ３−１の始点から２つの速度変化点までの距離となるので、ｐ３１とｐ３となる。減速率は１とＲ５となる。ブロックＢ３−２の速度分割数は１である。ブロックＢ３−２はさらに２分割しているので、ブロックＢ３−２の距離はブロックＢ３−２の始点から２つの速度変化点までの距離となるので、ｐ３２とＬ３−ｐ３となる。減速率はＲ６とＲ７となる。ブロック番号４（Ｂ４）のうちブロックＢ４−１の速度分割数は０、距離はｐ４、減速率は１である。ブロックＢ４−２の速度分割数は０、距離はブロックＢ４の仮想指令点からの距離であるのでＬ４−ｐ４、減速率は１である。
【００７７】
ＣＰＵ３１は、誤差確認処理で生成した速度プロファイルデータについて、ブロックの速度分割数、距離、減速率に置換する。図４０は、置換処理後の速度プロファイルデータである。置換処理後の減速率は、減速計算処理で求めた減速率と、誤差確認処理で求めた減速率の積である。ブロック番号２（Ｂ２）のうちブロックＢ２−２の距離は、距離Ｌ２−ｐ２からブロックＢ２の始点からの距離Ｌ２に置換している。ブロック番号３（Ｂ３）のうちブロックＢ３−２の距離は、距離ｐ３２と距離Ｌ３−ｐ３から、ブロックＢ３の始点からの距離ｐ３＋ｐ３２と距離Ｌ３に置換している。ブロック番号４（Ｂ４）のうちブロックＢ４−２の距離は、距離Ｌ４−ｐ４からブロックＢ４の始点からの距離ｐ４と距離Ｌ４に置換している。このようにして、仮想ブロック毎の速度プロファイルデータからブロック毎の速度プロファイルデータに変換される。置換処理した速度プロファイルデータは、ＲＡＭ３３に記憶する。  
【００７８】
ＣＰＵ３１は、図９の流れ図に戻る。ｋ＞Ｇなら（Ｓ１３：ＹＥＳ）、最初のブロックの誤差確認処理が完了しているのでブロックＢ（ｋ−Ｇ）を実行する（Ｓ１４）。ｋ≦Ｇの時（Ｓ１３：ＮＯ）、最初のブロックの誤差確認処理が完了していないのでブロックの実行は行わずに次の処理に進む。図８に示す例において、誤差確認ブロック番号ｋ＝３００１の場合、実行ブロック番号はｋ−Ｇ＝３００１−３０００＝１である。ＣＰＵ３１は、ＲＡＭ３３に記憶する速度プロファイルデータを各軸の駆動回路５１Ａ、５３Ａ、５４Ａに出力し、実行ブロックの移動指令を実行する。なお、駆動回路５１Ａ、５３Ａ、５４Ａは、ブロック情報２０の軸移動情報と速度プロファイルデータに基づき、補間後加減速を行うことで、軸移動を実行する。ＣＰＵ３１はｋに１加算する（Ｓ１５）。
【００７９】
ＣＰＵ３１はｋ＋３Ｇが全ブロック数よりも大きいか否か判断する（Ｓ１６）。ｋ＋３Ｇが全ブロック数以下の場合（Ｓ１６：ＮＯ）、ＣＰＵ３１はＳ１０に戻り、ブロックＢ（ｋ＋３Ｇ）を読込み、処理を繰り返す。ｋ＋３Ｇが全ブロック数よりも大きい場合（Ｓ１６：ＹＥＳ）、ＣＰＵ３１はｋ＋２Ｇが全ブロック数よりも大きいか否か判断する（Ｓ１７）。ｋ＋２Ｇが全ブロック数以下の場合（Ｓ１７：ＮＯ）、ＣＰＵ３１はＳ１１に戻り、ブロックＢ（ｋ＋２Ｇ）の減速計算処理を実行し、処理を繰り返す。ｋ＋２Ｇが全ブロック数よりも大きい場合（Ｓ１７：ＹＥＳ）、ＣＰＵ３１はｋが全ブロック数よりも大きいか否か判断する（Ｓ１８）。ｋが全ブロック数以下の場合（Ｓ１８：ＮＯ）、ＣＰＵ３１はＳ１２に戻り、ブロックＢ（ｋ）の誤差確認処理を実行し、処理を繰り返す。ｋが全ブロック数よりも大きい場合（Ｓ１８：ＹＥＳ）、ＣＰＵ３１はｋ−Ｇが全ブロック数よりも大きいか否か判断する（Ｓ１９）。ｋ−Ｇが全ブロック数以下の場合（Ｓ１９：ＮＯ）、ＣＰＵ３１はＳ１３に戻り、ｋ＞Ｇなら（Ｓ１３：ＹＥＳ）、ブロックＢ（ｋ−Ｇ）を実行し（Ｓ１４）、処理を繰り返す。ｋ−Ｇが全ブロック数よりも大きい場合（Ｓ１９：ＹＥＳ）、先読みした全ブロックの実行が完了しているので、ＣＰＵ３１は図７の流れ図に戻り、メイン処理を終了する。
【００８０】
図４１〜図４５を参照し、全自動減速処理のシミュレーション結果を説明する。本実施形態は、図４１に示すプログラム経路について、全自動減速処理を実行した場合のシミュレーションを行い、その作用効果について検証した。図４１に示すように、プログラム経路は、Ｘ軸方向に直線補間で移動するＧ１ブロックと、該Ｇ１ブロックの終点からＹ軸方向に大きく円弧状にカーブして移動するＧ１微小ブロックと、Ｇ１微小ブロックの終点からＹ軸方向に直線補間で移動するＧ１ブロックとで構成する。シミュレーション条件は以下の通りである。
・移動平均フィルタの時定数：２５、２２、１３（ｍｓｅｃ）
・プログラム指令速度：Ｆ５０００（ｍｍ／ｍｉｎ）
・目標誤差：０．１００（ｍｍ）
【００８１】
図４２（１）は、全自動減速処理を行わないときの速度プロファイルであり、図４２（２）は全自動減速処理を実行したときの速度プロファイルである。全自動減速処理を実行したことによって、複数の微小ブロックで繋がるカーブ部分を中心に、滑らかに減速していることがわかる。また、図４３に示すように、移動速度の変化を見ても、未処理に比べて大きく滑らかに減速し、再び滑らかに加速していることがわかる。このように、全自動減速処理を実行することにより、減速と加速を繰り返すことが無いことに加え、速度変化を小さくすることができる。これにより、本実施形態の数値制御装置３０は、工作機械１に負荷をかけず、軸移動を安定して行うことができる。
【００８２】
図４４に示すように、プログラム経路におけるＧ１微小ブロックのカーブ部分について、全自動減速処理後の移動経路は、減速しない未処理に比べてプログラム経路側に大きくシフトしている。このことから、本実施形態は、誤差を大幅に抑制できることがわかった。図４５は、プログラム経路のカーブ部分を形成する９つの指令点における誤差を調べたものである。未処理の移動経路では、約０．２〜０．３ｍｍ程度の大きな誤差を生じたが、全自動減速処理後の移動経路では、各指令点において誤差の最大値を目標誤差に抑制できた。故に本実施形態の数値制御装置３０は、目標誤差をパラメータとして予め設定することにより、最適な移動速度を自動的に計算できる。そして、各指令点のコーナにおける誤差が大きくなり過ぎたり、逆に速度を落とし過ぎることが無くなるので、加工精度の向上と短い加工周期の両方を達成できることが実証された。
【００８３】
図４６〜図４８を参照し、移動経路の１ブロックにおける速度分割数を説明する。図４６は、移動距離の長い長ブロックの後に、移動距離の短い微小ブロックが連続で続く経路の一例である。微小ブロックが連続する部分は円弧状に曲がっている。長ブロックの後に微小ブロックが連続で続くと、微小ブロックの各指令点の影響区間の開始点が長ブロックに多数位置する場合がある。この場合、長ブロックの速度分割数は多くなる可能性がある。１ブロックの速度分割数が多くなると、駆動回路５１Ａ，５３Ａ，５４Ａに出力する速度プロファイルデータのデータ量が大きくなる。故にＣＰＵ３１の処理速度が間に合わず、データを記憶するメモリ容量を大量に確保しなければならない等の問題が生じる可能性がある。本実施形態はこの問題を解消する為、１ブロックの最大速度分割数を、パラメータで予め設定する。本実施形態は、１ブロックの速度分割数が最大速度分割数を超える場合、速度分割数が最大分割数となるように、図４７に示す速度分割数調整処理を実行し、速度プロファイルを調整してもよい。
【００８４】
図４７，図４８を参照し、速度分割数調整処理を説明する。ＣＰＵ３１は例えば図２５に示す速度プロファイル更新処理実行後、ＲＯＭ３２から速度分割数調整プログラムを読込み、本処理を実行してもよい。ＣＰＵ３１は、速度プロファイル更新処理で生成した速度プロファイルについて、１ブロックの速度分割数が最大速度分割数を超えるか否か判断する（Ｓ１２１）。最大速度分割数は記憶装置３４に予め記憶する。１ブロックの速度分割数が最大速度分割数を超えない場合（Ｓ１２１：ＮＯ）、ＣＰＵ３１は本処理を終了する。
【００８５】
図４８（１）は、プログラム経路中の長ブロックを含む速度プロファイルの一例である。Ａ１区間は、長ブロックの前ブロックの影響を受けている区間である。故にＡ１区間は、多数のブロックに分割され、移動速度が繰り返し変化する。Ａ３区間は、長ブロックの後ブロックの影響を受けている区間である。故にＡ３区間も、多数のブロックに分割され、移動速度が繰り返し変化する。Ａ１区間とＡ３区間の間であるＡ２区間は、前後のブロックの影響を受けていない区間である。故にＡ２区間は分割されず、移動速度は一定である。Ａ１とＡ３区間において多数に分割されているので、全体として速度分割数は多くなっている。
【００８６】
速度分割数が最大速度分割数を超える場合（Ｓ１２１：ＮＯ）、ＣＰＵ３１は１ブロック内にある影響区間を最大分割数で均等に分割する（Ｓ１２２）。但し、図４８（１）に示す速度プロファイルのように、前後のブロックの影響を受けないＡ２区間がある場合、ＣＰＵ３１は、前後のブロックに影響を受けるＡ１とＡ３区間を、（最大速度分割数−１）÷２の数で均等に分割すればよい。そのため、最大速度分割数は奇数を設定するものとする。Ａ２区間は分割しない。図４８（２）に示すように、Ａ１区間、Ａ３区間は夫々４分割されている。
【００８７】
ＣＰＵ３１は、分割した各区間で最も小さい移動速度を選択して速度プロファイルを生成する（Ｓ１２３）。図４８（２）に示すように、各ブロックの速度は、グレーで示した部分のように調整される。図４８（２）では分割前の区間の境界線と分割後の区間の境界線が一致しているが、境界線が一致していない場合も同様に新しい各区間で最も小さい移動速度を選択する。調整後の速度プロファイルでは、調整前の速度プロファイルに比較して速度分割数が減少している。故にＣＰＵ３１は、駆動回路５１Ａ，５３Ａ，５４Ａに出力する速度プロファイルのデータ量を減らすことができる。また、調整前の速度プロファイルに比較して速度変化を小さくできるので、軸移動を安定して行うことができ、工作機械１にかかる負荷も小さくできる。ＣＰＵ３１は調整後の速度プロファイルをＲＡＭ３３に記憶し、本処理を終了する。
【００８８】
上記実施形態の円弧中央指令点は本発明の仮想指令点の一例である。目標誤差は本発明の規定値の一例である。ＣＰＵ３１は本発明の制御手段の一例である。図１０のＳ２４，Ｓ２５の処理を実行するＣＰＵ３１は本発明の指定手段の一例である。Ｓ２６の処理を実行するＣＰＵ３１は本発明の区間指定手段の一例である。Ｓ２７の処理を実行するＣＰＵ３１は本発明の分割手段の一例である。Ｓ２８の処理を実行するＣＰＵ３１は本発明の処理手段の一例である。Ｓ２９の処理を実行するＣＰＵ３１は本発明の誤差算出手段の一例である。図２３のＳ９１の処理を実行するＣＰＵ３１は本発明の判断手段の一例である。Ｓ９２の処理を実行するＣＰＵ３１は本発明の算出手段の一例である。図１０のＳ３１の処理を実行するＣＰＵ３１は本発明の更新手段の一例である。
【００８９】
図２３のＳ９８の処理を実行するＣＰＵ３１は本発明の誤差判断手段の一例である。Ｓ１００の処理を実行するＣＰＵ３１は本発明の変更手段の一例である。図１０のＳ２２の処理を実行するＣＰＵ３１は本発明の補間判断手段の一例である。Ｓ２３，Ｓ２４の処理を実行するＣＰＵ３１は本発明の追加手段の一例である。図２５のＳ１０２の処理を実行するＣＰＰＵ３１は本発明の第一設定手段の一例である。Ｓ１０３の処理を実行するＣＰＵ３１は本発明の第二設定手段の一例である。
【００９０】
図３５のＳ１１１の減速計算処理の中で行う誤差計算処理（図１０のＳ２９参照）を実行するＣＰＵ３１は本発明の再算出手段の一例である。Ｓ１１１の減速計算処理の中で行う誤差抑制処理のＳ９１（図２３参照）の処理を実行するＣＰＵ３１は本発明の再判断手段の一例である。
【００９１】
以上説明したように、本実施形態の数値制御装置３０のＣＰＵ３１は、ＮＣプログラムが指令する複数の指令点を補間して得られる経路に沿って、速度プロファイルを作成する。速度プロファイルは、各指令点の間の距離と速度の情報を含む。ＣＰＵ３１は、速度プロファイルに対して加減速処理に用いる移動平均フィルタによる処理を行った結果に基づき、軸移動を制御する。ＣＰＵ３１は、プログラム経路中の指令点の中から注目指令点を計算する。ＣＰＵ３１は、計算した注目指令点の前後において、加減速処理に用いる移動平均フィルタの時定数に基づく影響区間を計算する。ＣＰＵ３１は、計算して求めた影響区間をサンプル時間で分割し、指令補間点を計算する。ＣＰＵ３１は計算で求めた指令補間点について加減速処理に用いる移動平均フィルタと同等の時定数を持つ移動平均フィルタで処理し、動作補間点を計算する。ＣＰＵ３１は、移動平均フィルタで処理した動作補間点におけるプログラム経路からの誤差を算出する。ＣＰＵ３１は動作補間点における誤差が目標誤差を超えるか否か判断する。誤差が目標誤差を超える場合、ＣＰＵ３１は目標誤差と誤差に基づく減速率を算出する。ＣＰＵ３１は計算で求めた影響区間と減速率に基づき、速度プロファイルを更新する。数値制御装置３０は、指令点のみで減速するのではなく、指令点を含む影響区間で減速するので、仮に微小ブロックが連続するような経路においても頻繁に加減速を繰り返すことが無い。故に、被削材の加工面の品質を向上できる。経路中の各指令点について複数の注目指令点を順に指定することで、経路中の例えば屈曲するコーナ部分、円弧部分、曲線部分において加減速によって生じる誤差を総合的に抑制できる。
【００９２】
上記実施形態の影響区間計算処理（図１４参照）にて、影響区間は、注目指令点の前後において、少なくとも加減速処理に用いる移動平均フィルタの時定数の合計の半分の時間で移動する二つの小区間を含む。故に、指令点における誤差に影響する影響区間において、速度プロファイルを更新できるので、指令点における誤差を効果的に抑制できる。
【００９３】
上記実施形態の誤差抑制処理（図２３参照）で最初に用いる減速率は、目標誤差を誤差で除して得られる割合であるので、減速率を容易に算出できる。
【００９４】
上記実施形態の誤差抑制処理にて、ＣＰＵ３１は減速率で影響区間を移動したときの誤差と目標誤差の差が誤差収束許容値以下か判断し、誤差収束許容値を超えると判断した場合、誤差と目標誤差の差が誤差収束許容値以下となるように減速率を変更する。故に減速し過ぎることが無いので、短い加工周期で被削材の加工を完了できる。減速が不足することも無くなるので、誤差と目標誤差の差が誤差収束許容値を超えないことがより確かになる。
【００９５】
上記実施形態の減速計算処理（図１０参照）にて、ＣＰＵ３１はプログラム経路中のブロックが直線補間であるか円弧補間であるかを判断する。ブロックが直線補間である場合、ＣＰＵ３１はブロックの終点を着目指令点に指定する。ブロックが円弧補間である場合、ＣＰＵ３１は円弧中央指令点を着目指令点に指定する。故に数値制御装置３０は、円弧部分の曲率に起因する誤差を考慮できる。円弧補間の場合でも、円弧中央指令点における誤差、即ち円弧に対する誤差を規定値以下に抑制できる。故に数値制御装置３０は円弧補間の部分においても、被削材の加工面の品質を向上できる。
【００９６】
上記実施形態の速度プロファイル更新手段（図２５参照）にて、ＣＰＵ３１は、注目指令点がブロックの終点である場合、減速区間を影響区間に設定する。注目指令点が円弧中央指令点である場合、減速区間を円弧補間の全域に設定する。故に数値制御装置３０は円弧部分の曲率に起因する誤差を考慮できる。
【００９７】
上記実施形態では、減速計算処理（図９参照）で速度プロファイルを更新した後に、誤差確認処理を実行する。誤差確認処理では、ＣＰＵ３１は誤差を再度計算し、計算した誤差が目標誤差を超えるか再度判断する。誤差が目標誤差を超える場合、ＣＰＵ３１は減速率の再計算と速度プロファイルの更新を再度行う。故に数値制御装置３０は誤差を目標誤差以下に抑制できる。
【００９８】
なお、上記実施形態では、誤差が目標誤差を超える場合、減速率の再計算と速度プロファイルの再更新を１回だけ行っているが、繰り返し複数回行ってもよく、例えば、誤差が目標誤差未満になるまで行ってもよい。
【００９９】
本発明は上記実施形態に限らず種々の変更が可能である。上記実施形態は、モータの時定数（加減速時定数）として移動平均フィルタの時定数を用いたが、時定数を持つその他フィルタについても適用可能である。例えば、ローパスフィルタ、バンドパスフィルタ等も適用可能である。また、重みづけのある移動平均フィルタ（一般的なＦＩＲフィルタ）を使用することもできる。上記実施形態は、移動速度を３段の移動平均フィルタで処理するが、２段、若しくは４段以上の移動平均フィルタで処理してもよい。さらに、上記時定数による加減速処理を行った後、時定数を持つノッチフィルタ、インプットシェーピング法等による制振処理を行い、速度プロファイルから機械の固有振動成分を取り除く場合についても適用可能である。その場合、本発明におけるモータの時定数とは加減速の時定数と制振処理の時定数の合計となる。また、一定の時間で加減速を行う速度プロファイルを生成するその他の処理についてもフィルタと同様に用いることが出来る。
【０１００】
上記実施形態では、減速計算処理（図９のＳ８、Ｓ１１）、誤差確認処理（図９のＳ１２）に用いるサンプル時間はＣＰＵ処理周期と等しい値を用いるとしたが、計算処理を簡略化する目的で、サンプル時間としてＣＰＵ処理周期の整数倍の値を用いても良い。ただし、誤差計算の精度が低下し目標誤差を満たすことが出来ない場合がある。
【０１０１】
上記実施形態の全自動減速処理中の誤差確認処理（図９のＳ１６）と、それに続く置換処理は計算処理を簡略化する目的で、省略してもよい。その場合、ブロックの移動指令を実行する際に先読みが必要なのは、時定数の合計時間後までに処理するブロックとなる。
【０１０２】
上記実施形態の誤差抑制処理（図２３参照）のうちＳ９３〜Ｓ１００の処理を省略してもよい。Ｓ９８の誤差条件は、誤差が目標誤差以下（εｒ≧εｋ）、若しくは誤差と目標誤差の差が誤差収束許容値以下（０≦εｒ−εｋ≦εｔ）を満たすこととしているが、これ以外の誤差条件を設定してもよく、例えば、誤差が目標誤差以下（εｒ≧εｋ）のみにしたり、｜εｒ−εｋ｜≦εｔとしてもよい。但し、加工周期の短縮化を考慮すれば、誤差と目標誤差の差が誤差収束許容値以下という条件を付加するのが好ましい。
【０１０３】
上記実施形態は指令点前後の影響区間を、時定数合計の半分の時間に相当する距離としているが、少なくとも時定数合計の半分の時間に相当する距離を含む区間であればよい。
【０１０４】
上記実施形態の減速計算処理のＳ２３，Ｓ２４では、着目するブロックが円弧補間の場合において、円弧中央部に仮想指令点（円弧中央指令点）を作成したが、円弧の端点を除く部分であれば他の位置に仮想指令点を作成してもよい。また、仮想指令点は複数作成してもよい。ＣＰＵ３１は着目するブロックが直線補間か円弧補間かを判断せずに、一律にブロック終点を着目指令点として計算を進めてもよい。円弧を微小線分のブロックに分解して、それぞれのブロックについて直線補間指令として誤差の計算を行っても良い。
【０１０５】
上記実施形態では、数値制御装置３０が制御する工作機械の一例として、主軸の軸線が上下方向に延びる立型の工作機械１を説明したが、主軸の軸線が水平方向に延びる横型の工作機械でもよい。駆動回路５１Ａ〜５５Ａ（図１参照）は数値制御装置３０に設けているが、工作機械１側に設けてもよい。
【０１０６】
また、工作機械の構成は、Ｘ軸、Ｙ軸、Ｚ軸以外に例えばＡ軸、Ｂ軸、Ｃ軸などの回転軸を備えたものでもよい。また、工作機械の構成は回転軸のみを備えたものでもよい。
【０１０７】
上記実施形態では、図７において数値制御装置３０がメイン処理内で全自動減速処理を行う場合について説明を行っているが、数値制御装置３０は、メイン処理に先立ち全自動減速処理を実施し、その結果をＲＡＭ３３または記憶装置３４に記憶し、この結果を用いて処理を行っても良い。また数値制御装置３０以外の計算機によって事前にＮＣプログラムを処理して全自動減速処理を行い、その結果を数値制御装置３０に入力することで同様の効果を得てもよい。
【符号の説明】
【０１０８】
１    工作機械
３０    数値制御装置
３１    ＣＰＵ
【図１】
2018124996.tif 000011
【図２】
2018124996.tif 000012
【図３】
2018124996.tif 000013
【図４】
2018124996.tif 000014
【図５】
2018124996.tif 000015
【図６】
2018124996.tif 000016
【図７】
2018124996.tif 000017
【図８】
2018124996.tif 000018
【図９】
2018124996.tif 000019
【図１０】
2018124996.tif 000020
【図１１】
2018124996.tif 000021
【図１２】
2018124996.tif 000022
【図１３】
2018124996.tif 000023
【図１４】
2018124996.tif 000024
【図１５】
2018124996.tif 000025
【図１６】
2018124996.tif 000026
【図１７】
2018124996.tif 000027
【図１８】
2018124996.tif 000028
【図１９】
2018124996.tif 000029
【図２０】
2018124996.tif 000030
【図２１】
2018124996.tif 000031
【図２２】
2018124996.tif 000032
【図２３】
2018124996.tif 000033
【図２４】
2018124996.tif 000034
【図２５】
2018124996.tif 000035
【図２６】
2018124996.tif 000036
【図２７】
2018124996.tif 000037
【図２８】
2018124996.tif 000038
【図２９】
2018124996.tif 000039
【図３０】
2018124996.tif 000040
【図３１】
2018124996.tif 000041
【図３２】
2018124996.tif 000042
【図３３】
2018124996.tif 000043
【図３４】
2018124996.tif 000044
【図３５】
2018124996.tif 000045
【図３６】
2018124996.tif 000046
【図３７】
2018124996.tif 000047
【図３８】
2018124996.tif 000048
【図３９】
2018124996.tif 000049
【図４０】
2018124996.tif 000050
【図４１】
2018124996.tif 000051
【図４２】
2018124996.tif 000052
【図４３】
2018124996.tif 000053
【図４４】
2018124996.tif 000054
【図４５】
2018124996.tif 000055
【図４６】
2018124996.tif 000056
【図４７】
2018124996.tif 000057
【図４８】
2018124996.tif 000058