(57)【要約】【課題】プログラムがインポジションチェックや時間一定型加減速等、実行時間がオーバライドに依存しない要素を含んでいる場合でも、指令された実行時間でプログラムを実行できるモーションコントローラを提供する。【解決手段】プログラム実行時間が保存されているか否か判断し（ＳＡ０１）、保存されていない場合（ＮＯ）には、プログラムを実行して、各ブロックの実行時間Ｔｂｒ_ｉとプログラム全体の実行時間Ｔｐｒを計測し（ＳＡ０２）、計測結果をデータ領域に保存した上で（ＳＡ０３）、インポジション状態になるまでの時間Ｔｉｎｐを読み込み（ＳＡ０４）。指定するプログラム全体の実行時間Ｔｐｓを読み込み（ＳＡ０５）、各ブロックの実行時間Ｔｂｓ_ｉを数１式により算出し（ＳＡ０６）、各ブロックの移動速度Ｆｓ_ｉを数２式により算出し（ＳＡ０７）、各ブロックの速度をステップＳＡ０７で算出したＦｓ_ｉに入れ換え（ＳＡ０８）、終了する。【選択図】図９
2015014849.tif 000002
【特許請求の範囲】
【請求項１】
あらかじめ登録され、複数のブロックで構成されたプログラムを逐次実行するモーションコントローラにおいて、
前記プログラムの各ブロックの実行時間を実測する手段と、
前記プログラム全体の実行時間を指定する手段と、
前記ブロックのパルス出力が完了した直後からインポジション状態になるまでの時間を設定する手段と、
前記実測したプログラムの各ブロック実行時間と前記指定したプログラム実行時間、および前記設定したインポジション状態になるまでの時間から、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出する算出手段と、
前記算出した速度または加減速時定数でプログラムを実行する実行手段、
とを有することを特徴とするモーションコントローラ。
【請求項２】
前記ブロックのパルス出力が完了した後からインポジション状態になるまでの時間を設定する手段の代わりに、前記ブロックのパルス出力が完了した直後からインポジション状態になるまでの時間を実測する手段を備え、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項１記載のモーションコントローラ。
【請求項３】
補助機能の実行に要する時間を設定する手段を備え、該設定した補助機能の実行時間も加味して、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項１または２のいずれかに記載のモーションコントローラ。
【請求項４】
前記補助機能の実行に要する時間を設定する手段の代わりに、前記補助機能の実行時間を実測する手段を備え、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、該算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項３記載のモーションコントローラ。
【請求項５】
前記プログラムの各ブロック実行時間を実測する手段の代わりに、前記プログラムの各ブロック実行時間を解析する手段を備え、該解析したプログラムの各ブロック実行時間と指定したプログラム実行時間から、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項１〜４のいずれか１つに記載のモーションコントローラ。
【請求項６】
前記プログラム全体の実行時間を指定する手段の代わりに、前記プログラム全体の実行ペースの割合を指定する手段を備え、前記プログラム全体の実行ペースが指定した割合になるような各ブロックの速度または加減速時定数を算出して、該算出した速度・加減速時定数でプログラムを実行することを特徴とする請求項１〜５のいずれか１つに記載のモーションコントローラ。
【請求項７】
複数のプログラムを同時に実行する手段と、前記プログラム全体の実行時間を指定する手段の代わりに、指定されたプログラム全体の実行時間を実測する手段を備え、各プログラムの実行時間と指定されたプログラムの実行時間から、各プログラムが指定されたプログラムと同じ実行時間になるような各ブロックの速度または加減速時定数を算出して、該算出した速度または加減速時定数で各プログラムを実行することを特徴とする請求項１〜４のいずれか１つに記載のモーションコントローラ。
【請求項８】
前記プログラムの実行中に各ブロックの実行時間を実測する手段と、該実測したブロック実行時間から、次に実行する予定のブロックの速度または加減速時定数を算出する手段を備え、該算出した速度または加減速時定数で対象となるブロックを実行することで、プログラムが指定した実行時間、または指定した割合の実行ペースになるようにプログラム全体の実行ペースを変更することを特徴とする請求項１〜７のいずれか１つに記載のモーションコントローラ。
【請求項９】
前記プログラムに含まれる各ブロックの加速度を解析する手段と、各ブロックの加速度を比較して、加速度が大きいブロックに対して加速度が小さくなるように速度または加減速時定数を算出する手段を備え、実行するプログラム全体の中で、加速度の大きいところを集中的に下げることで、プログラムが指定した実行時間、または指定した割合の実行ペースになるようにプログラム全体の実行ペースを変更することを特徴とする請求項１〜８のいずれか１つに記載のモーションコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モーションコントローラに関する。
【背景技術】
【０００２】
あらかじめ登録され、複数のブロックで構成されたプログラムを逐次実行するモーションコントローラによって、周辺装置と連携して動作する機器を制御する場合、プログラムが一定の時間で終了しないと、機器の可動域に周辺装置が侵入し、機器と周辺装置が干渉してしまう場合がある。そのため、あらかじめプログラム全体の実行時間を求め、所望の時間との比率をオーバライド値に設定し、軸の移動速度を変えることで、プログラム実行時間を調整していた。
【０００３】
ここで、加工機とローダとモーションコントローラから構成されるシステムの動作を説明する。このシステムは、図１に示されるように、ロード、加工、アンロードを順に行っている。システム全体の実行ペースは外部のコンダクタが決めており、各機器が割り当てられた時間内で動作することで対応している。例えば、コンダクタがシステム全体のペースを５０％にするよう指令すると、各機器はそれぞれの動作を５０％のペースで行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４９５１１６５号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
加工機において、コンダクタに指令された実行時間になるようにプログラムを実行したい場合、従来は、あらかじめ計測しておいたプログラム実行時間と指令された時間との比率をオーバライド値に設定し、軸の移動速度を変えることで対応していた。ところが、インポジションチェックや時間一定型加減速等、実行時間がオーバライドに依存しない要素があると、オーバライド値を設定しても、プログラム実行時間と指令された時間との間にずれが生じていた。
なお、プログラムに含まれるブロックが１ブロックの場合、先行技術を使えば、指令された時間でプログラムを実行することができるが（特許文献１参照）、複数ブロックが含まれる場合は考慮されていない。
【０００６】
加工の時間が延びた場合、アンロードのために入ってきたローダと加工機が干渉する場合がある。これを防ぐため、オーバライド値を大きめに設定して、プログラムの実行時間を指令された時間よりも若干短くしていた。これにより、干渉は避けられるが、指令された時間で実行する場合に比べて高速な移動や加速が必要となり、多くの電力を消費しなければならなかった。
【０００７】
そこで、本発明の目的は、上記従来技術の問題点に鑑み、プログラムがインポジションチェックや時間一定型加減速等、実行時間がオーバライドに依存しない要素を含んでいる場合でも、指令された実行時間でプログラムを実行できるモーションコントローラを提供することである。
【課題を解決するための手段】
【０００８】
あらかじめ、プログラムをそのまま実行した場合の実行時間の計測、所望の実行時間の設定、および当該ブロックのパルス出力が完了した後からインポジション状態になるまでの時間の設定を行っておき、計測したプログラム実行時間と所望の実行時間、および設定したインポジション状態になるまでの時間から、プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度・加減速時定数でプログラムを実行する。  
そして、本願の請求項１に係る発明は、あらかじめ登録され、複数のブロックで構成されたプログラムを逐次実行するモーションコントローラにおいて、前記プログラムの各ブロックの実行時間を実測する手段と、前記プログラム全体の実行時間を指定する手段と、
前記ブロックのパルス出力が完了した直後からインポジション状態になるまでの時間を設定する手段と、前記実測したプログラムの各ブロック実行時間と前記指定したプログラム実行時間、および前記設定したインポジション状態になるまでの時間から、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出する算出手段と、前記算出した速度または加減速時定数でプログラムを実行する実行手段、とを有することを特徴とするモーションコントローラである。
【０００９】
請求項２に係る発明は、前記ブロックのパルス出力が完了した後からインポジション状態になるまでの時間を設定する手段の代わりに、前記ブロックのパルス出力が完了した直後からインポジション状態になるまでの時間を実測する手段を備え、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項１記載のモーションコントローラである。  
請求項３に係る発明は、補助機能の実行に要する時間を設定する手段を備え、該設定した補助機能の実行時間も加味して、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項１または２のいずれかに記載のモーションコントローラである。
【００１０】
請求項４に係る発明は、前記補助機能の実行に要する時間を設定する手段の代わりに、前記補助機能の実行時間を実測する手段を備え、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、該算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項３記載のモーションコントローラである。  
請求項５に係る発明は、前記プログラムの各ブロック実行時間を実測する手段の代わりに、前記プログラムの各ブロック実行時間を解析する手段を備え、該解析したプログラムの各ブロック実行時間と指定したプログラム実行時間から、前記プログラムが指定した実行時間になるような各ブロックの速度または加減速時定数を算出して、算出した速度または加減速時定数でプログラムを実行することを特徴とする請求項１〜４のいずれか１つに記載のモーションコントローラである。
【００１１】
請求項６に係る発明は、前記プログラム全体の実行時間を指定する手段の代わりに、前記プログラム全体の実行ペースの割合を指定する手段を備え、前記プログラム全体の実行ペースが指定した割合になるような各ブロックの速度または加減速時定数を算出して、該算出した速度・加減速時定数でプログラムを実行することを特徴とする請求項１〜５のいずれか１つに記載のモーションコントローラである。  
請求項７に係る発明は、複数のプログラムを同時に実行する手段と、前記プログラム全体の実行時間を指定する手段の代わりに、指定されたプログラム全体の実行時間を実測する手段を備え、各プログラムの実行時間と指定されたプログラムの実行時間から、各プログラムが指定されたプログラムと同じ実行時間になるような各ブロックの速度または加減速時定数を算出して、該算出した速度または加減速時定数で各プログラムを実行することを特徴とする請求項１〜４のいずれか１つに記載のモーションコントローラである。
【００１２】
請求項８に係る発明は、前記プログラムの実行中に各ブロックの実行時間を実測する手段と、該実測したブロック実行時間から、次に実行する予定のブロックの速度または加減速時定数を算出する手段を備え、該算出した速度または加減速時定数で対象となるブロックを実行することで、プログラムが指定した実行時間、または指定した割合の実行ペースになるようにプログラム全体の実行ペースを変更することを特徴とする請求項１〜７のいずれか１つに記載のモーションコントローラである。  
請求項９に係る発明は、前記プログラムに含まれる各ブロックの加速度を解析する手段と、各ブロックの加速度を比較して、加速度が大きいブロックに対して加速度が小さくなるように速度または加減速時定数を算出する手段を備え、実行するプログラム全体の中で、加速度の大きいところを集中的に下げることで、プログラムが指定した実行時間、または指定した割合の実行ペースになるようにプログラム全体の実行ペースを変更することを特徴とする請求項１〜８のいずれか１つに記載のモーションコントローラである。
【発明の効果】
【００１３】
本発明により、インポジションチェックや時間一定型加減速等、実行時間がオーバライドに依存しない要素があっても、所望の時間でプログラムを実行することができるため、必要最低限の電力消費で済むようになる。
【図面の簡単な説明】
【００１４】
【図１】加工機とローダとモーションコントローラから構成されるシステムの動作を説明する図である。
【図２】実施形態１を説明するためのプログラム例である。
【図３】各ブロックの実行時間Ｔｂｒ_ｉとプログラム全体の実行時間Ｔｐｒの関係を説明する図である。
【図４】実測したプログラム実行時間Ｔｐｒ、ブロック実行時間Ｔｂｒ_ｉと所望するプログラム実行時間Ｔｐｓ、およびＴｐｓでプログラムを実行する際のブロック実行時間Ｔｂｓ_ｉの関係を説明する図である。
【図５】所望の時間でプログラムを実行する際のブロック実行時間Ｔｂｓ_ｉ、移動距離Ｌ_ｉ、加減速時定数Ｔｃｏｎ_ｉ、インポジション予想時間Ｔｉｎｐと移動速度Ｆｓ_ｉの関係を説明する図である。
【図６】実施形態３を説明するためのプログラム例である。
【図７】移動指令ブロック実行時間Ｔｂｒ_ｉとプログラム実行時間Ｔｐｒの関係を説明する図である。
【図８】実測したプログラム実行時間Ｔｐｒ、移動指令ブロック実行時間Ｔｂｒ_ｉと所望するプログラム実行時間Ｔｐｓ、補助機能予想実行時間Ｔａｕｘ_ｘｘ、およびＴｐｓでプログラムを実行する際のブロック実行時間Ｔｂｓ_ｉの関係を説明する図である。
【図９】本発明の実施形態１に係る処理を説明するフローチャートである。
【図１０】本発明の実施形態２に係る処理を説明するフローチャートである。
【図１１】本発明の実施形態３に係る処理を説明するフローチャートである。
【図１２】本発明の実施形態４に係る処理を説明するフローチャートである。
【図１３】本発明の実施形態５に係る処理を説明するフローチャートである。
【図１４】本発明の実施形態６に係る処理を説明するフローチャートである。
【図１５】本発明の実施形態８に係る処理を説明するフローチャートである。
【図１６】本発明の実施形態９に係る処理を説明するフローチャートである。
【図１７】モーションコントローラを説明するブロック図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を図面と共に説明する。
＜実施形態１＞（請求項１に対応）  
モーションコントローラのメモリに図２に示されるプログラムを格納し、そのプログラムを逐次実行するモーションコントローラを例にして説明する。モーションコントローラの構成は図１７を用いて後述する。図２のプログラムでは、Ｇ００でＸ１００．０の位置に速度１０００で位置決め早送りを行い（ブロック番号１）、Ｇ０１でＸ軸方向に１００．０だけ速度２０００で直線補間を行う（ブロック番号２）。
【００１６】
あらかじめ、時間測定のための計測信号をオンにしてプログラムをそのまま実行し、プログラムに含まれる各ブロックの実行時間Ｔｂｒ_ｉ（ｉ：ブロック番号）と、プログラム全体の実行時間Ｔｐｒ（以下、「実測プログラム実行時間」という。）を計測しておく。計測した結果を内部のデータ領域に保存しておけば、プログラムを変更しない限り、計測し直す必要はない。各ブロックの実行時間Ｔｂｒ_ｉと実測プログラム実行時間Ｔｐｒの関係は図３に示される。なお、図３では、ブロック番号が１と２の場合である。
【００１７】
また、当該ブロックのパルス出力が完了後インポジション状態になるまでのインポジション予想時間Ｔｉｎｐを設定するパラメータを設け、あらかじめ設定しておく。なお、完了後インポジション状態になるまでの予想時間とは、パルス出力が完了した直後からインポジション状態になるまでの予想時間である。さらに、所望するプログラム全体の実行時間Ｔｐｓ（以下、「指定プログラム実行時間」という。）を設定するパラメータを設け、あらかじめ設定しておく。  
次に、実測プログラム実行時間Ｔｐｒと指定プログラム実行時間Ｔｐｓの比から、指定プログラム実行時間Ｔｐｓでプログラムを実行する際の各ブロックの実行時間Ｔｂｓ_ｉを数１式により算出する（ｉはプログラムのブロック番号）。
【００１８】
【数１】
2015014849.tif 000003
【００１９】
実測プログラム実行時間Ｔｐｒ、実測ブロック実行時間Ｔｂｒ_ｉとパラメータで指定した指定プログラム実行時間Ｔｐｓ、および数１式で算出した各ブロックの実行時間Ｔｂｓ_ｉの関係が図４に示される。図４ではブロック番号ｉが１と２の場合を図示している。
【００２０】
各ブロックの算出したブロックの実行時間Ｔｂｓ_ｉ、移動距離Ｌ_ｉ、加減速時定数Ｔｃｏｎ_ｉ、および設定したインポジション予想時間Ｔｉｎｐから、指定プログラム実行時間Ｔｐｓでプログラムを実行する際の、各ブロックの移動速度Ｆｓ_ｉを数２式により算出する。なお、数２式は時間一定型加速減速の場合である。また、移動距離Ｌ_ｉは加工プログラムに指定されるデータであり、加減速時定数Ｔｃｏｎ_ｉはあらかじめパラメータで指定されるデータである。
【００２１】
【数２】
2015014849.tif 000004
【００２２】
加工プログラムのブロック番号ｉにおいて、各ブロックの実行時間Ｔｂｓ_ｉ、移動距離Ｌ_ｉ、加減速時定数Ｔｃｏｎ_ｉ、インポジション予想時間Ｔｉｎｐと、数２式で算出した移動速度Ｆｓ_ｉの関係が図５に示される。
【００２３】
上記の処理を行った後に、プログラムの各ブロックの指令速度を算出移動速度Ｆｓ_ｉに入れ換えてプログラムを実行することで、プログラム全体の実行時間を指定プログラム実行時間Ｔｐｓにできる。
【００２４】
なお、数２式のところで、移動速度Ｆｓ_ｉの代わりに加減速時定数Ｔｃｏｎ_ｉを求め、各ブロックの加減速時定数を算出した値に入れ換えてプログラムを実行することでも、プログラム全体の実行時間を所望の指定プログラム実行時間Ｔｐｓにすることができる。
【００２５】
図９は本発明の実施形態１に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。なお、インポジション予想時間Ｔｉｎｐ、指定プログラム実行時間Ｔｐｓは予め設定してメモリに格納されている。  
●［ステップＳＡ０１］プログラム実行時間が保存されているか否か判断し、保存されている場合（ＹＥＳ）にはステップＳＡ０４へ移行し、保存されていない場合（ＮＯ）にはステップＳＡ０２へ移行する。
●［ステップＳＡ０２］プログラムを実行して、各ブロックの実行時間Ｔｂｒ_ｉと実測プログラム実行時間Ｔｐｒを計測する。  
●［ステップＳＡ０３］計測結果をデータ領域に保存し、ステップＳＡ０４へ移行する。
●［ステップＳＡ０４］インポジション予想時間Ｔｉｎｐを読み込む。
●［ステップＳＡ０５］指定プログラム実行時間Ｔｐｓを読み込む。  
●［ステップＳＡ０６］各ブロックの実行時間Ｔｂｓ_ｉを数１式により算出する。
●［ステップＳＡ０７］各ブロックの移動速度Ｆｓ_ｉを数２式により算出する。
●［ステップＳＡ０８］各ブロックの移動速度をステップＳＡ０７で算出した移動速度Ｆｓ_ｉに入れ換え、処理を終了する。
【００２６】
＜実施形態２＞（請求項２に対応）  
プログラムによっては、インポジション状態になるまでの時間がブロックごとに異なる場合がある。この時、実施形態１の方法を用いようとすると、インポジション状態になるまでの時間を設定するパラメータがプログラムに含まれるブロックの数だけ必要になるため、ブロック数が増えるほど設定に手間がかかる。
【００２７】
そこで、インポジション状態になるまでの時間をパラメータで予め設定するのではなく、実測する方法を追加する。  
まず、実施形態１と同様に、あらかじめ、時間測定のための計測信号をオンにしてプログラムをそのまま実行し、プログラムに含まれる各ブロックの実測ブロック実行時間Ｔｂｒ_ｉ（ｉ：ブロック番号）と、プログラム全体の実測プログラム実行時間Ｔｐｒを計測しておく。その際、各ブロックにおけるパルス出力が完了直後からインポジション状態になるまでの時間であるインポジション時間Ｔｉｎｐ_ｉも計測する。各ブロックの実測した実行時間Ｔｂｒ_ｉ、実測プログラム実行時間Ｔｐｒと同様、実測したインポジション時間Ｔｉｎｐ_ｉも内部のデータ領域に保存しておけば、プログラムを変更しない限り、計測し直す必要はない。
【００２８】
そして、パラメータ設定値であるインポジション予想時間Ｔｉｎｐの代わりに各ブロックの実測値であるインポジション時間Ｔｉｎｐ_ｉを用いることで、指定した実行時間である指定プログラム実行時間Ｔｐｓでプログラムを実行する際の各ブロックの移動速度Ｆｓ_ｉを数３式により求める。
【００２９】
【数３】
2015014849.tif 000005
【００３０】
上記の処理を行った後に、各ブロックの指令速度を移動速度Ｆｓ_ｉに入れ換えてプログラムを実行することで、プログラム全体の実行時間を所望の時間である指定プログラム実行時間Ｔｐｓにできる。
【００３１】
図１０は本発明の実施形態２に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。なお、インポジション予想時間Ｔｉｎｐ、指定プログラム実行時間Ｔｐｓは予め設定してメモリに格納されている。  
●［ステップＳＢ０１］プログラム実行時間が保存されているか否か判断し、保存されている場合（ＹＥＳ）にはステップＳＢ０４へ移行し、保存されていない場合（ＮＯ）にはステップＳＢ０２へ移行する。  
●［ステップＳＢ０２］プログラムを実行して、各ブロックの実測ブロック実行時間Ｔｂｒ_ｉ、各ブロックのインポジション状態になる時間Ｔｉｎｐ_ｉ、プログラム全体の実行時間である実測プログラム実行時間Ｔｐｒを計測する。  
●［ステップＳＢ０３］計測結果をデータ領域に保存し、ステップＳＢ０４へ移行する。
●［ステップＳＢ０４］指定プログラム実行時間Ｔｐｓを読み込む。  
●［ステップＳＢ０５］各ブロックの実行時間Ｔｂｓ_ｉを数１式により算出する。  
●［ステップＳＢ０６］各ブロックの移動速度Ｆｓ_ｉを数３式により算出する。
●［ステップＳＢ０７］各ブロックの速度をステップＳＢ０６で算出した移動速度Ｆｓ_ｉに入れ換え、処理を終了する。
【００３２】
＜実施形態３＞（請求項３に対応）  
モーションコントローラのプログラムは、途中で外部機器を動作させるために、補助機能を含むことがある。補助機能のブロックでは、外部機器の動作完了を待って次のブロックを実行するが、この完了までの時間はオーバライドが変化しても一定となるのが一般的である。実施形態１および実施形態２の方法では、補助機能を含むプログラムを扱うことはできないため、以下の方法を追加する。
【００３３】
図６に示されるプログラムを格納し、そのプログラムを逐次実行するモーションコントローラを例にして説明する。図６のプログラムでは、Ｇ００でＸ１００．０の位置に速度１０００で位置決め早送りを行い（ブロック番号１）、Ｍ２０で周辺機器を動作させ（ブロック番号２）、Ｇ０１でＸ軸方向に１００．０だけ速度２０００で直線補間を行う（ブロック番号３）。Ｍ３０はプログラムエンドを示す（ブロック番号４）。
【００３４】
まず、実施形態１と同様に、あらかじめ、時間測定のための計測信号をオンにしてプログラムをそのまま実行し、プログラムに含まれる各移動指令ブロックの実行時間Ｔｂｒ_ｉ（ｉ：ブロック番号）と、プログラム全体の実行時間Ｔｐｒを計測しておく。実測ブロック実行時間Ｔｂｒ_ｉと実測プログラム実行時間Ｔｐｒの関係が図７に示される。
【００３５】
また、当該ブロックのパルス出力が完了後インポジション状態になるまでのインポジション予想時間Ｔｉｎｐ、および各補助機能（Ｍｘｘ）の予想実行時間Ｔａｕｘ_ｘｘを設定するパラメータを設け、あらかじめ設定しておく。
【００３６】
さらに、指定プログラム実行時間Ｔｐｓを設定するパラメータを設け、あらかじめ設定しておく。そして、プログラムに含まれる補助機能ブロックの実行時間の合計Ｔａｕｘを数４式により求める。
【００３７】
【数４】
2015014849.tif 000006
【００３８】
移動指令を含むブロックのみを、実行ペース変更の対象とするため、移動指令を含むブロックの実行時間の合計を求める。  
●プログラムをそのまま実行した場合            ：Ｔｐｒ  −  Ｔａｕｘ  
●指定した実行時間でプログラムを実行する場合  ：Ｔｐｓ  −  Ｔａｕｘ  
これらの時間の比から、指定プログラム実行時間Ｔｐｓでプログラムを実行する際の各移動指令ブロックの実行時間Ｔｂｓ_ｉを数５式により算出する。
【００３９】
【数５】
2015014849.tif 000007
【００４０】
実測した実測プログラム実行時間Ｔｐｒ、実測した各ブロックの実行時間Ｔｂｒ_ｉとパラメータで指定した指定プログラム実行時間Ｔｐｓ、各補助機能の予想実行時間Ｔａｕｘ_ｘｘ、および数５式で算出した各ブロックの実行時間Ｔｂｓ_ｉの関係が図８に示される。
【００４１】
以降は、実施形態１と同様に、各ブロックの移動速度Ｆｓ_ｉを求めてから、各ブロックの指令速度を算出した移動速度Ｆｓ_ｉに入れ換えてプログラムを実行することで、プログラム全体の実行時間を所望の指定プログラム実行時間Ｔｐｓにできる。
【００４２】
図１１は本発明の実施形態３に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。  
●［ステップＳＣ０１］プログラム実行時間が保存されているか否か判断し、保存されている場合（ＹＥＳ）にはステップＳＣ０４へ移行し、保存されていない場合（ＮＯ）にはステップＳＣ０２へ移行する。  
●［ステップＳＣ０２］プログラムを実行して、各ブロックの実行時間Ｔｂｒ_ｉ、実測プログラム実行時間Ｔｐｒを計測する。
●［ステップＳＣ０３］計測結果をデータ領域に保存し、ステップＳＣ０４へ移行する。
●［ステップＳＣ０４］インポジション状態になるまでのインポジション予想時間Ｔｉｎｐを読み込む。  
●［ステップＳＣ０５］各補助機能（Ｍｘｘ）の予想実行時間Ｔａｕｘ_ｘｘを読み込む。  
●［ステップＳＣ０６］所望するプログラム全体の実行時間である指定プログラム実行時間Ｔｐｓを読み込む。
●［ステップＳＣ０７］プログラムに含まれる補助機能ブロックの実行時間の合計Ｔａｕｘを算出する。  
●［ステップＳＣ０８］移動指令のブロックの実行時間の合計を算出する。プログラムをそのまま実行した場合：Ｔｐｒ−Ｔａｕｘ、指定した実行時間でプログラムを実行する場合：Ｔｐｓ−Ｔａｕｘ  
●［ステップＳＣ０９］移動指令の各ブロックの実行時間Ｔｂｓ_ｉを数５式により算出する。
●［ステップＳＣ１０］各ブロックの移動速度Ｆｓ_ｉを数２式により算出する。  
●［ステップＳＣ１１］各ブロックの指令速度をステップＳＣ１０で算出した移動速度Ｆｓ_ｉに入れ換え、処理を終了する。
【００４３】
＜実施形態４＞（請求項４に対応）  
実施形態３の方法では、各補助機能（Ｍｘｘ）に対してパラメータを設定する必要があるため、外部機器の数が増えるほど設定に手間がかかるようになる。  
そこで、補助機能の実行時間をパラメータで設定するのではなく、実測する方法を追加する。まず、実施形態３と同様に、あらかじめ、時間測定のための計測信号をオンにしてプログラムをそのまま実行し、プログラムに含まれる各ブロックの実行時間Ｔｂｒ_ｉ（ｉ：ブロック番号）と、実測プログラム実行時間Ｔｐｒを計測しておく。その際、補助機能が指令されたブロックの実行時間Ｔａｕｘ_ｉも計測する。
【００４４】
そして、実測した各ブロックの補助機能の実行時間Ｔａｕｘ_ｉを合計して、プログラムに含まれる補助機能ブロックの実行時間の合計Ｔａｕｘを求める。実測ブロック実行時間Ｔｂｒ_ｉ、実測プログラム実行時間Ｔｐｒ同様、補助機能ブロックの実行時間の合計Ｔａｕｘも内部のデータ領域に保存しておけば、プログラムを変更しない限り、計測し直す必要はない。以降は、実施形態３と同様の操作を行うことで、プログラム全体の実行時間が所望の時間Ｔｐｓになる。
【００４５】
図１２は本発明の実施形態４に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。なお、インポジション予想時間Ｔｉｎｐ、指定プログラム実行時間Ｔｐｓは予め設定してメモリに格納されている。
●［ステップＳＤ０１］プログラム実行時間が保存されているか否か判断し、保存されている場合（ＹＥＳ）にはステップＳＤ０４へ移行し、保存されていない場合（ＮＯ）にはステップＳＤ０２へ移行する。  
●［ステップＳＤ０２］プログラムを実行して、各ブロックの実行時間である実測ブロック実行時間Ｔｂｒ_ｉ、補助機能が指令されたブロックの実行時間である補助機能の実行時間Ｔａｕｘ_ｉ、プログラム全体の実行時間である実測プログラム実行時間Ｔｐｒを計測する。
●［ステップＳＤ０３］計測結果をデータ領域に保存し、ステップＳＤ０４へ移行する。
●［ステップＳＤ０４］インポジション状態になるまでのインポジション予想時間Ｔｉｎｐを読み込む。  
●［ステップＳＤ０５］所望するプログラム全体の実行時間である指定プログラム実行時間Ｔｐｓを読み込む。
●［ステップＳＤ０６］プログラムに含まれる補助機能ブロックの実行時間の合計Ｔａｕｘを算出する。  
●［ステップＳＤ０７］移動指令のブロックの実行時間の合計を算出する。プログラムをそのまま実行した場合：Ｔｐｒ−Ｔａｕｘ、指定した実行時間でプログラムを実行する場合：Ｔｐｓ−Ｔａｕｘ
●［ステップＳＤ０８］各ブロックの実行時間Ｔｂｓ_ｉを数５式により算出する。  
●［ステップＳＤ０９］各ブロックの移動速度Ｆｓ_ｉを数２式により算出する。  
●［ステップＳＤ１０］各ブロックの指令速度をステップＳＤ０９で算出した移動速度Ｆｓ_ｉに入れ換え、処理を終了する。
【００４６】
＜実施形態５＞（請求項５に対応）  
実施形態１の方法では、プログラムの実行時間を実測する必要があり、手間がかかる。そこで、プログラムの実行時間を実測するのではなく、シミュレーションによりプログラムを解析して求める方法を用いる。なお実施形態５では、実施形態１の各ブロックの実行時間Ｔｂｒ_ｉ、実測プログラム実行時間Ｔｐｒを本実施形態の方法により求めた値に置き換えるものとする。
【００４７】
まず、プログラムに含まれる各ブロックにおいて、移動距離Ｌ_ｉ、指令速度Ｆ_ｉ、加減速時定数Ｔｃｏｎ_ｉ、およびパラメータで設定したインポジション予想時間Ｔｉｎｐから、各ブロックの実行時間Ｔｂｒ_ｉ（ｉ：ブロック番号）を数６式により算出する。なお、数６式は時間一定型加減速の場合である。
【００４８】
【数６】
2015014849.tif 000008
【００４９】
そして、各ブロックの実行時間Ｔｂｒ_ｉを合計して、実測プログラム実行時間Ｔｐｒを求める。以降は、実施形態１と同様の操作を行うことで、プログラム全体の実行時間が所望の時間である指定プログラム実行時間Ｔｐｓになる。
【００５０】
図１３は本発明の実施形態５に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。インポジション予想時間、指定プログラム実行時間Ｔｐｓは予め設定されている。  
●［ステップＳＥ０１］インポジション予想時間を読み込む。
●［ステップＳＥ０２］プログラムを解析し、プログラムに含まれる各ブロックにおいて、移動距離Ｌ_ｉ、指令速度Ｆ_ｉ、加減速時定数Ｔｃｏｎ_ｉ、パラメータで設定したインポジション予想時間Ｔｉｎｐから、実測ブロック実行時間Ｔｂｒ_ｉを算出し、ステップＳＥ０３へ移行する。
●［ステップＳＥ０３］指定プログラム実行時間Ｔｐｓを読み込む。  
●［ステップＳＥ０４］各ブロックの実行時間Ｔｂｓ_ｉを数１式により算出する。  
●［ステップＳＥ０５］各ブロックの移動速度Ｆｓ_ｉを数２式により算出する。  
●［ステップＳＥ０６］各ブロックの指令速度をステップＳＥ０５で算出した移動速度Ｆｓ_ｉに入れ換え、処理を終了する。
【００５１】
＜実施形態６＞（請求項６に対応）
システム全体の実行ペースを同じ比率で変更する時、システム内の各機器に各々の実行時間を指定するのではなく、実行ペースの割合を指定したい場合がある。そのため、以下の技術を追加する。
【００５２】
まず、実施形態１と同様に、あらかじめ、時間測定のための計測信号をオンにしてプログラムをそのまま実行し、プログラムに含まれる各ブロックの実測ブロック実行時間Ｔｂｒ_ｉ（ｉ：ブロック番号）と、実測プログラム実行時間Ｔｐｒを計測しておく。その後、プログラムの実行ペースの割合ｒを信号で指定して、数７式によりＴｐｓ’を算出する。
【００５３】
【数７】
2015014849.tif 000009
【００５４】
以降は、実施形態１のＴｐｓをＴｐｓ’に置き換えて実施形態１と同様の操作を行うことで、プログラム全体の実行ペースを所望の割合ｒにすることができる。つまり、数１式を数８式に、数２式を数９式に置き換える。
【００５５】
【数８】
2015014849.tif 000010
【００５６】
【数９】
2015014849.tif 000011
【００５７】
図１４は本発明の実施形態６に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。プログラム実行ペース割合ｒ、インポジション予想時間Ｔｉｎｐは予め設定されている。  
●［ステップＳＦ０１］プログラム実行時間が保存されているか否か判断し、保存されている場合（ＹＥＳ）にはステップＳＦ０４へ移行し、保存されていない場合（ＮＯ）にはステップＳＦ０２へ移行する。
●［ステップＳＦ０２］プログラムを実行して、各ブロックの実行時間Ｔｂｒ_ｉと実測プログラム実行時間Ｔｐｒを計測する。  
●［ステップＳＦ０３］計測結果をデータ領域に保存し、ステップＳＦ０４へ移行する。●［ステップＳＦ０４］インポジション予想時間Ｔｉｎｐを読み込む。  
●［ステップＳＦ０５］プログラム実行ペース割合ｒを読み込む。
●［ステップＳＦ０６］プログラム実行時間Ｔｐｓ’を数７式により算出する。  
●［ステップＳＦ０７］各ブロックの実行時間Ｔｂｓ_ｉ’を数８式により算出する。  
●［ステップＳＦ０８］各ブロックの移動速度Ｆｓ_ｉ’を数９式により算出する。  
●［ステップＳＦ０９］各ブロックの移動速度をステップＳＦ０９で算出した移動速度Ｆｓ_ｉ’に入れ換え、処理を終了する。
【００５８】
＜実施形態７＞（請求項７に対応）
実施形態１において、所望するプログラム全体の実行時間Ｔｐｓを、指定されたプログラムの実行時間とすれば、指定されたプログラムと同じ時間でプログラムを実行できる。これを使って、最も実行時間の長いプログラムに、その他の各プログラムの実行時間を合わせれば、サイクルタイムを延ばすことなく消費電力量を最小に抑えることができる。
【００５９】
＜実施形態８＞（請求項８に対応）
上述した本発明の実施形態は、同じ条件でプログラムを実行すると常に同じ実行時間になることを前提としていた。しかし、実際には、ワークの個体差や機械の経年変化等によって位置決めに要する時間が変化する場合がある。この場合、プログラムの実行時間が長いほど、指定した実行時間（指定プログラム実行時間Ｔｐｓ）と実際にかかる時間（実測プログラム実行時間Ｔｐｒ）とがずれていってしまう。
【００６０】
この問題を解決するため、以下の方法を用いる。  
まず、実施形態１を実行して、あらかじめ各ブロックの算出ブロック実行時間Ｔｂｓ_ｉと算出移動速度Ｆｓ_ｉ（ｉ：ブロック番号）を導出しておく。そして、第１ブロックの指令速度を導出した算出移動速度Ｆｓ_１に入れ換えてプログラムを実行する。各ブロックでは、ブロックの開始から終了までに実際にかかった時間Ｔｂａ_ｉを計測する。例えば、第ｉブロック終了時、ブロックの実行時間Ｔｂｓ_ｉと実際にかかった時間Ｔｂａ_ｉの差を求め、第ｉ＋１ブロックの実行時間Ｔｂｓ_ｉ＋１から引く（数１０式）。
【００６１】
【数１０】
2015014849.tif 000012
【００６２】
数１０式により得られるＴｂｓ_ｉ＋１’をブロックの実行時間として、第２ブロックの移動速度Ｆｓ_ｉ＋１’を数１１式により求める。
【００６３】
【数１１】
2015014849.tif 000013
【００６４】
上記の処理は、あらかじめ算出した第１ブロックの実行時間と実際にかかった時間との差分を、第２ブロックの速度を変えることで補正することを意味する。  
以降も同様に、各ブロックの実行時間のずれを次ブロックの実行時間から引いていくことで、実行時間のずれが蓄積しないようになる。
【００６５】
図１５は本発明の実施形態８に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。  
●［ステップＳＧ０１］実行中のブロックの実行時間Ｔｂａ_ｉを計測する。  
●［ステップＳＧ０２］ｉ番目のブロック終了時、ブロックの実行時間Ｔｂｓ_ｉと実行時間Ｔｂａ_ｉの差を求め、ｉ＋１番目の実行時間Ｔｂｓ_ｉ＋１から引いて、Ｔｂｓ_ｉ＋１’を数１０式により算出する。  
●［ステップＳＧ０３］ステップＳＧ０２で算出したＴｂｓ_ｉ＋１’をブロックの実行時間として、ｉ＋１番目の移動速度Ｆｓ_ｉ＋１’を数１１式により算出する。  
●［ステップＳＧ０４］ｉ＋１番目のブロックの速度をＦｓ_ｉ＋１’に入れ換えて、処理を終了する。
【００６６】
＜実施形態９＞（請求項９に対応）
加速度が大きいブロックと小さいブロックが混在しているプログラムの実行時間を延ばす場合、各ブロックの実行時間を一定の比率で延ばすより、加速度が大きいブロックの実行時間を集中的に延ばして加速度を下げる方が、効率的に消費電力量を減らすことができる。そこで、以下の技術を追加する。まず、以下の手順によって、各ブロックの加速度を求める。
＜１＞プログラム全体の実行時間Ｔｐｒを実測または計算する。
＜２＞指定されたプログラム全体の実行時間ＴｐｓとＴｐｒとの差ΔＴを数１２式により求める。
【００６７】
【数１２】
2015014849.tif 000014
【００６８】
＜３＞プログラム内の各ブロックの加速度Ａ_ｉ（ｉ：ブロック番号）のうち、最も大きな加速度Ａ１と２番目に大きな加速度Ａ２を求める。
＜４＞加速度がＡ１である全てのブロックにおいて、各ブロックの指令速度Ｆ_ｉを用いて合計の加減速時間Ｔｃｏｎ_ｓｕｍを数１３式により計算する。ただし、数１３式のｊは、加速度がＡ１のブロックの番号を表す。
【００６９】
【数１３】
2015014849.tif 000015
【００７０】
＜５＞＜４＞のブロックの合計加減速時間Ｔｃｏｎ_ｓｕｍに対して、ΔＴだけ引き延ばした時の、加速度Ａを数１４式により求める。
【００７１】
【数１４】
2015014849.tif 000016
【００７２】
＜６＞Ａ≧Ａ２なら、＜４＞のブロックの加速度をＡに更新して完了。Ａ＜Ａ２なら、＜４＞のブロックの加速度をＡ２に更新して、合計の加減速時間Ｔｃｏｎ_ｓｕｍ’を数１５式により計算し直し、＜７＞に進む。
【００７３】
【数１５】
2015014849.tif 000017
【００７４】
＜７＞＜４＞、＜６＞の結果を利用して数１６式によりΔＴを計算し直し（ΔＴ’）、ΔＴの値をΔＴ’に更新する。そして、２番目に大きな加速度Ａ２よりさらに加速度を下げるため、＜３＞に戻る。
【００７５】
【数１６】
2015014849.tif 000018
【００７６】
上記の処理を行った後に、各ブロックの加速度を求めた加速度に入れ換えてプログラムを実行することで、プログラム全体の実行時間が所望の時間Ｔｐｓになり、さらに、プログラム内で加速度の大きいところを集中的に下げることができる。
【００７７】
図１６は本発明の実施形態９に係る処理を説明するフローチャートである。以下、各ステップに従って説明する。  
●［ステップＳＨ０１］プログラム実行時間が保存されているか否か判断し、保存されている場合（ＹＥＳ）ステップＳＨ０４へ移行し、保存されていない場合（ＮＯ）ステップＳＨ０２へ移行する。  
●［ステップＳＨ０２］プログラムを実行して、実測プログラム実行時間Ｔｐｒを計測する。  
●［ステップＳＨ０３］計測結果をデータ領域に保存する。  
●［ステップＳＨ０４］指定されたプログラム全体の実行時間Ｔｐｓを読み込む。
●［ステップＳＨ０５］指定されたプログラム全体の実行時間Ｔｐｓと実行時間Ｔｐｒの差ΔＴを数１２式により算出する。  
●［ステップＳＨ０６］各ブロックの指令速度Ｆ_ｊを用いて、加速度がＡ１であるブロックの合計加減速時間Ｔｃｏｎ_ｓｕｍを数１３式により計算する（Ａ１は最も大きな加速度）。  
●［ステップＳＨ０７］ステップＳＨ０６の合計加減速時間Ｔｃｏｎ_ｓｕｍに対して、ステップＳＨ０５で算出したΔＴだけ引き延ばした時の加速度Ａを数１４式により算出する。
●［ステップＳＨ０８］ステップＳＨ０７で算出した加速度Ａが加速度Ａ２以上か否か判断し、以上の場合（ＹＥＳ）ステップＳＨ０９へ移行し、未満の場合（ＮＯ）ステップＳＨ１０へ移行する。  
●［ステップＳＨ０９］加速度Ａ１のブロックの加速度をＡに更新し、処理を終了する。●［ステップＳＨ１０］Ａ１の加速度のブロックをＡ２の加速度のブロックとする。  
●［ステップＳＨ１１］加速度をＡ２としたときの合計の加減速時間Ｔｃｏｎ_ｓｕｍ’を数１５式により計算する。
●［ステップＳＨ１２］数１６式により、ΔＴ’を算出する。  
●［ステップＳＨ１３］ΔＴの値をΔＴ’に更新してステップＳＨ０６に戻る。  
【００７８】
図１７はモーションコントローラの要部を示す機能ブロック図である。
【００７９】
数値制御装置１０のプロセッサ（ＣＰＵ）１１は、数値制御装置１０を全体的に制御するプロセッサである。プロセッサ１１は、ＲＯＭ１２に格納されたシステムプログラムをバス２１を介して読み出し、このシステムプログラムに従って数値制御装置１０を全体的に制御する。ＲＡＭ１３には一時的な計算データや表示データ及びＬＣＤ／ＭＤＩユニット７０を介してオペレータが入力した各種データ等が格納される。  
ＳＲＡＭ１４は図示しないバッテリでバックアップされ、数値制御装置１０の電源がオフされても記憶状態が保持される不揮発性メモリとして構成され、本発明に係る計時プログラムを含むプログラム、本発明を実行するために必要なデータ、インタフェース１５を介して読み込まれた後述する加工プログラム、ＬＣＤ／ＭＤＩユニット７０を介して入力された加工プログラム等が記憶されるようになっている。また、ＲＯＭ１２には、加工プログラムの作成及び編集のために必要とされる編集モードの処理や自動運転のための処理を実施するための各種のシステムプログラムがあらかじめ書き込まれている。
【００８０】
インタフェース１５は数値制御装置１０に接続可能な外部機器のためのインタフェースであり、外部記憶装置などの外部機器７２が接続される。外部記憶装置からは加工プログラム、熱変位測定プログラムなどが読み込まれる。ＰＭＣ（プログラマブル・マシン・コントローラ）１６は、数値制御装置１０に内蔵されたシーケンスプログラムで工作機械側の補助装置等を制御する。すなわち、加工プログラムで指令されたＭ機能、Ｓ機能及びＴ機能に従って、これらシーケンスプログラムで補助装置側で必要な信号を変換し、Ｉ／Ｏユニット１７から補助装置側に出力する。この出力信号により各種アクチュエータ等の補助装置が作動する。また、工作機械の本体に配備された操作盤の各種スイッチ等の信号を受け、必要な処理をしてプロセッサ１１に渡す。
【００８１】
工作機械の各軸の現在位置、アラーム、パラメータ、画像データ等の画像信号はＬＣＤ／ＭＤＩユニット７０に送られ、そのディスプレイに表示される。ＬＣＤ／ＭＤＩユニット７０はディスプレイやキーボード等を備えた手動データ入力装置であり、インタフェース１８はＬＣＤ／ＭＤＩユニット７０のキーボードからデータを受けてプロセッサ１１に渡す。  
インタフェース１９は手動パルス発生器７１に接続され、手動パルス発生器７１は工作機械の操作盤に実装され、手動操作に基づく分配パルスによる各軸制御で工作機械の可動部を精密に位置決めするために使用される。
【００８２】
工作機械のテーブルＴを移動させるＸ，Ｙ軸の軸制御回路及びＺ軸の軸制御回路３０〜３２はプロセッサ１１からの各軸の移動指令を受けて、各軸の指令をサーボアンプ４０〜４２に出力する。サーボアンプ４０〜４２はこの指令を受けて工作機械の各軸のサーボモータ５０〜５２を駆動する。各軸のサーボモータ５０〜５２には位置検出用のパルスコーダが内蔵されており、このパルスコーダからの位置信号がパルス列としてフィードバックされる。
【符号の説明】
【００８３】
Ｔｐｒ  実測プログラム実行時間
Ｔｂｒ_ｉ  実測ブロック実行時間
Ｔｐｓ  指定プログラム実行時間
Ｔｂｓ_ｉ  Ｔｐｓでプログラムを実行する際のブロック実行時間
Ｔｉｎｐ  インポジション予想時間
Ｔｉｎｐ_ｉ  各ブロックの実測インポジション時間
Ｆｓ_ｉ  移動速度
Ｔａｕｘ_ｘｘ  補助機能予想実行時間
Ｔａｕｘ_ｉ  各ブロックの実測補助機能実行時間
【図１】
2015014849.tif 000019
【図２】
2015014849.tif 000020
【図３】
2015014849.tif 000021
【図４】
2015014849.tif 000022
【図６】
2015014849.tif 000023
【図７】
2015014849.tif 000024
【図９】
2015014849.tif 000025
【図１０】
2015014849.tif 000026
【図１１】
2015014849.tif 000027
【図１２】
2015014849.tif 000028
【図１３】
2015014849.tif 000029
【図１４】
2015014849.tif 000030
【図１５】
2015014849.tif 000031
【図１６】
2015014849.tif 000032
【図１７】
2015014849.tif 000033
【図５】
2015014849.tif 000034
【図８】
2015014849.tif 000035