(57)【特許請求の範囲】
【請求項１】
メインプログラムまたは該メインプログラムによって呼び出されるサブプログラムの解析処理を行う解析処理部としての処理系統を複数個有し、これら複数の処理系統によって解析されたメインプログラムおよびサブプログラムを実行することにより複数の制御軸を駆動する数値制御装置において、
前記複数の処理系統の実行状態を示すフラグが書き込まれる系統起動制御テーブルを備え、
前記解析処理部としての各処理系統は、
前記メインプログラムにおけるサブプログラム起動指令を実行する際、前記系統起動制御テーブルに書き込まれたフラグに基づき解析処理を実行していない空きの処理系統があるか否かを判定し、空きの処理系統がある場合は、この空きの処理系統に前記サブ系統起動指令によって実行すべきサブプログラムを解析処理させて前記系統起動制御テーブルに処理実行中のフラグをセットするとともに、空きの処理系統がない場合は、所定の時間が経過するまでは、前記系統起動制御テーブルに基づき空きの処理系統を探し、空きの処理系統が出現すると、この空きの処理系統に前記サブ系統起動指令によって実行すべきサブプログラムを解析処理させて前記系統起動制御テーブルに処理実行中のフラグをセットする起動処理系統選択処理を実行する起動処理系統選択部、
を備え、メインプログラムを解析処理するよう割り付けられた処理系統が前記起動処理系統選択処理を実行することにより、サブプログラム起動の度に、空きの処理系統を割り付けるようにしたことを特徴とする数値制御装置。
【請求項２】
前記解析処理部としての各処理系統は、
サブプログラムを割り付けられた処理系統の完了を待っているメインプログラムが割り付けられた処理系統における完了待ち状態を解除する完了待ちキャンセル部
をさらに有し、サブプログラムを割り付けられた処理系統の完了を待たず完了待ち状態であるメインプログラムが割り付けられた処理系統の動作を開始できることを特徴とする請求項１に記載の数値制御装置。
【請求項３】
サブプログラムが割り付けられる処理系統を起動するためのデータがセットされるサブ系統起動データテーブル
をさらに備え、
前記解析処理部としての各処理系統は、
メインプログラムにおけるサブプログラム起動指令を先読み解析し、この先読み解析結果に基づいて前記サブ系統起動データテーブルにサブプログラムが割り付けらる処理系統を起動するためのデータをセットするとともに、サブプログラムが割り付けらる処理系統の解析処理を起動させる解析処理起動部と、
他の処理系統の前記解析処理起動部によって起動されると、前記サブ系統起動データテーブルにセットされたデータに基づいて所要のサブプログラムを選択し、選択したサブプログラムが先読み起動が可能であるかを判定する処理を含む解析処理を実行する加工プログラム選択部と、
を備え、
前記加工プログラム選択部によるサブプログラムの解析処理が完了した時点でサブプログラムの第１ブロックの補間処理を開始するタイミングを調整するブロック実行タイミング調整部、
をさらに有し、サブ系統を先読み起動できるようにしたことを特徴とする請求項１に記載の数値制御装置。
【請求項４】
前記複数の処理系統は、メインプログラムを実行するメイン処理系統とサブプログラムを実行するサブ処理系統とに分割され、
各処理系統は、
メインプログラムにおいて指令された補助機能コードがサブ処理系統の起動を指令する補助指令かそれ以外の補助指令であるかを選択する補助指令／サブ系統起動処理選択部
をさらに有し、前記補助指令／サブ系統起動処理選択部によりサブ処理系統の起動を指令する補助指令が選択されたことによりサブ処理系統の起動処理を行うことを特徴とする請求項１に記載の数値制御装置。
【請求項５】
前記複数の処理系統は、メインプログラムを実行するメイン処理系統とサブプログラムを実行するサブ処理系統とに分割され、
各処理系統は、
サブ処理系統で実行するように指令されたプログラム番号の加工プログラムが同一系統の加工プログラムとして存在するか否かを判別し、同一系統で指令プログラム番号の加工プログラムが存在する場合にはその加工プログラムを選択し、同一系統で指令プログラム番号の加工プログラムが存在しない場合には予め設定された系統に存在する加工プログラムを選択する加工プログラム選択部
をさらに有していることを特徴とする請求項１に記載の数値制御装置。
【請求項６】
シングルブロック運転時に、処理系統間同期の補間処理を選択的に同期処理の対象より除外する系統間同期無効処理部をさらに有していることを特徴とする請求項１に記載の数値制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、数値制御装置に関わり、特に自動旋盤などで使用される多軸多系統の数値制御装置においてメインプログラムによって呼び出されるサブプログラムを含む加工プログラムを実行する数値制御装置に関するものである。
【０００２】
【従来の技術】
数値制御装置は、紙テープ等により加工プログラムを読み取り、加工プログラムによる命令に基づいて数値制御処理を実行し、この処理結果により工作物に対する工具の位置などをそれに対応する数値情報で指令するものである。
【０００３】
数値制御装置には、自動旋盤などで使用される数値制御装置や複数個の工作機械を制御する数値制御装置として、多軸多系統を制御可能なコンピュータ数値制御装置（以下ＣＮＣ）があり、このＣＮＣでは、各系統においてメインプログラムによって呼び出されるサブプログラムを含む加工プログラムを解析実行する。
【０００４】
図３３は従来のコンピュータ数値制御装置（ＣＮＣ）を示している。ここでは２系統を制御可能なＣＮＣについて説明する。
【０００５】
このＣＮＣにおいては、各系統ごとに加工プログラムがメモリ１４１に格納される。この加工プログラムを実行する際には、メモリ１４１から１ブロックずつ加工プログラムが解析処理部１０２あるいは１１２に読み出され、解析処理部１０２あるいは１１２にて１ブロックずつ解析処理が行われる。
【０００６】
系統１（以下＄１）においては、＄１メインプログラム１０１と＄１メインプログラム１０１によって呼び出されるサブプログラム１２１とがメモリ１４１に格納される。
【０００７】
この系統１の加工プログラムを実行する際には、メモリ１４１から１ブロックずつ＄１メインプログラム１０１が＄１解析処理部１０２に読み出され、＄１解析処理部１０２で＄１メインプログラム１０１の解析処理が１ブロックずつ行われる。
【０００８】
サブプログラム１２１を呼び出す指令の場合には、メモリ１４１から１ブロックずつサブプログラム１２１が＄１解析処理部１０２に読み出され、＄１解析処理部１０２でサブプログラム１２１の解析処理が行われる。
【０００９】
同様に系統２（以下＄２）においては、＄２メインプログラム１１１と＄２メインプログラム１１１によって呼び出されるサブプログラム１３１とがメモリ１４１に格納される。
【００１０】
この系統２の加工プログラムを実行する際には、メモリ１４１から１ブロックずつ＄２メインプログラム１１１が＄２解析処理部１１２に読み出され、＄２解析処理部１１２で１ブロックずつ解析処理が行われる。
【００１１】
サブプログラム１３１を呼び出す指令の場合には、メモリ１４１から１ブロックずつサブプログラム１３１が＄２解析処理部１１２に読み出され、＄２解析処理部１１２でサブプログラム１３１の解析処理が行われる。
【００１２】
次に加工プログラムの解析結果に基づき、補間処理部１０３にて補間処理が行われ、軸制御部１０４にて、予めパラメータ設定部１４０の＄１軸定義部１００または＄２軸定義部１１０で設定された各系統の制御軸ごとにパルス分配され、軸移動量出力回路１０５よりパルス出力が行われる。
【００１３】
この出力に応じて、サーボ制御部１０６、１１６はサーボモータ１０７、１１７の運転を制御し、テーブルまたは刃物台を移動指令通りに移動せしめる。
【００１４】
また補間処理部１０３より機械制御信号処理部１５１を介してシーケンス回路１５２へ指令信号が出力されることによりクーラントのオン／オフなどが行われ、また主軸回転数出力回路１５５を介して主軸制御部１５６へ主軸制御指令が出力されることにより主軸モータ１５７の運転が制御され、スピンドル正転／逆転／停止等が行われる。
【００１５】
また、メモリ１４１に格納された情報が画面表示処理部１４２へ出力され、その出力情報が表示ユニット１４３に表示される。
【００１６】
【発明が解決しようとする課題】
従来のＣＮＣでは、上述のように加工プログラムの実行処理が行われるため、各系統において実行中の加工プログラム（メインプログラム）よりサブプログラムを呼び出し、サブプログラムに従い、その系統に設定された軸の指令しかできない。
【００１７】
また従来のＣＮＣでは、メインプログラムがサブプログラムを呼び出した場合、メインプログラムの代わりにサブプログラムの指令を実行するだけであり、メインプログラムとサブプログラムとを並列に実行することはできない。
【００１８】
このためサブプログラムが使用されると、ユーザが加工プログラムを作成するための時間を減らすことができるが、実加工時間は、メインプログラムのみで処理を行なう場合と変わらず、加工のサイクルタイムを短縮することはできない。
【００１９】
また従来の数値制御装置では、サブ系統制御において、メイン系統が完了待ちで、サブ系統を呼出した場合、サブ系統の動作がすべて完了しない限りメイン系統の動作が再開されないため、サイクルタイムを短縮することに限界がある。このため、たとえば、サブ系統の軸がメイン系統の軸と干渉しない位置にまで後退し、メイン系統の動作が可能な状態になってもサブ系統の動作がすべて完了しない限りメイン系統の動作が再開されず、サイクルタイムを長くする原因になる。
【００２０】
また従来の数値制御装置では、サブプログラム呼出しと同様に、サブ系統の指令解析後にサブ系統プログラムを呼出すため、サイクルタイムをこれ以上短縮できない。またＭコードなどによるマクロ呼出しのなかで、サブ系統制御を使用する場合でも、一旦、サブプログラム呼出しを行ったのちに、サブプログラムのなかで、更にサブ系統プログラムを呼出さなければならないため、サイクルタイムをこれ以上短縮できない。
【００２１】
また従来の数値制御装置におけるサブ系統制御では、チャック開閉軸、セパレータなどの周辺軸は互いに独立した動作をさせるため、動作させたい周辺軸の軸数分だけサブ系統を必要としており、多くのメモリ容量を要することになっている。
【００２２】
また従来の数値制御装置におけるサブ系統制御では、サブプログラムの呼出しの形態が、メイン系統の１系統目はサブ系統プログラムの１系統目、メイン系統の２系統目はサブ系統プログラムの２系統目と云うように各系統毎に独立しているため、メイン系統が２系統など多系統あれば、サブ系統プログラムはたとえ同一動作のものであっても各メイン系統毎に必要であり、このことによっても多くのメモリ容量を要し、プログラム作成の手間も掛かることになっている。
【００２３】
また従来の多系統数値制御装置では、シングルブロック運転時、系統間の同期を保証するために、ある系統がシングルブロック停止すると、他の系統は必ずフィードホルード状態で停止するから、融通性に欠け、例えば、チャック開閉など、従来は油圧で制御していた機構をサーボ軸で制御させるような場合、チャック開閉が途中で止まり、油圧動作時と同等の動作状態が得られなくなる。
【００２４】
本発明は、上記のような問題点を解決するためになされたもので、任意の系統よりサブプログラムを呼び出すことができ、またサブプログラムをメインプログラムと並列に実行することを可能ならしめ、さらにはメイン系統の動作再開における無駄な待ち時間をなくすことにより、またサブ系統プログラム呼出しのための時間ロスをなくすことにより従来よりも加工のサイクルタイムを短縮でき、またサブ系統制御のために多くのメモリ容量を必要とすることがなく、また融通性に優れたシングルブロック運転を行うことができる数値制御装置を得ることを目的としている。
【００２５】
【課題を解決するための手段】
上述の如き目的を達成するために、この発明による数値制御装置は、メインプログラムまたは該メインプログラムによって呼び出されるサブプログラムの解析処理を行う解析処理部としての処理系統を複数個有し、これら複数の処理系統によって解析されたメインプログラムおよびサブプログラムを実行することにより複数の制御軸を駆動する数値制御装置において、前記複数の処理系統の実行状態を示すフラグが書き込まれる系統起動制御テーブルを備え、前記解析処理部としての各処理系統は、前記メインプログラムにおけるサブプログラム起動指令を実行する際、前記系統起動制御テーブルに書き込まれたフラグに基づき解析処理を実行していない空きの処理系統があるか否かを判定し、空きの処理系統がある場合は、この空きの処理系統に前記サブ系統起動指令によって実行すべきサブプログラムを解析処理させて前記系統起動制御テーブルに処理実行中のフラグをセットするとともに、空きの処理系統がない場合は、所定の時間が経過するまでは、前記系統起動制御テーブルに基づき空きの処理系統を探し、空きの処理系統が出現すると、この空きの処理系統に前記サブ系統起動指令によって実行すべきサブプログラムを解析処理させて前記系統起動制御テーブルに処理実行中のフラグをセットする起動処理系統選択処理を実行する起動処理系統選択部を備え、メインプログラムを解析処理するよう割り付けられた処理系統が前記起動処理系統選択処理を実行することにより、サブプログラム起動の度に、空きの処理系統を割り付けるようにしたことを特徴とする。
【００２７】
つぎの発明にかかる数値制御装置は、上記の発明において、前記解析処理部としての各処理系統は、サブプログラムを割り付けられた処理系統の完了を待っているメインプログラムが割り付けられた処理系統における完了待ち状態を解除する完了待ちキャンセル部をさらに有し、サブプログラムを割り付けられた処理系統の完了を待たず完了待ち状態であるメインプログラムが割り付けられた処理系統の動作を開始できることを特徴とする。
【００２８】
つぎの発明にかかる数値制御装置は、上記の発明において、サブプログラムが割り付けられる処理系統を起動するためのデータがセットされるサブ系統起動データテーブルをさらに備え、前記解析処理部としての各処理系統は、メインプログラムにおけるサブプログラム起動指令を先読み解析し、この先読み解析結果に基づいて前記サブ系統起動データテーブルにサブプログラムが割り付けらる処理系統を起動するためのデータをセットするとともに、サブプログラムが割り付けらる処理系統の解析処理を起動させる解析処理起動部と、他の処理系統の前記解析処理起動部によって起動されると、前記サブ系統起動データテーブルにセットされたデータに基づいて所要のサブプログラムを選択し、選択したサブプログラムが先読み起動が可能であるかを判定する処理を含む解析処理を実行する加工プログラム選択部と、を備え、前記加工プログラム選択部によるサブプログラムの解析処理が完了した時点でサブプログラムの第１ブロックの補間処理を開始するタイミングを調整するブロック実行タイミング調整部をさらに有し、サブ系統を先読み起動できるようにしたことを特徴とする。
【００２９】
つぎの発明にかかる数値制御装置は、上記の発明において、前記複数の処理系統は、メインプログラムを実行するメイン処理系統とサブプログラムを実行するサブ処理系統とに分割され、各処理系統は、メインプログラムにおいて指令された補助機能コードがサブ処理系統の起動を指令する補助指令かそれ以外の補助指令であるかを選択する補助指令／サブ系統起動処理選択部をさらに有し、前記補助指令／サブ系統起動処理選択部によりサブ処理系統の起動を指令する補助指令が選択されたことによりサブ処理系統の起動処理を行うことを特徴とする。
【００３０】
つぎの発明にかかる数値制御装置は、上記の発明において、前記複数の処理系統は、メインプログラムを実行するメイン処理系統とサブプログラムを実行するサブ処理系統とに分割され、各処理系統は、サブ処理系統で実行するように指令されたプログラム番号の加工プログラムが同一系統の加工プログラムとして存在するか否かを判別し、同一系統で指令プログラム番号の加工プログラムが存在する場合にはその加工プログラムを選択し、同一系統で指令プログラム番号の加工プログラムが存在しない場合には予め設定された系統に存在する加工プログラムを選択する加工プログラム選択部をさらに有していることを特徴とする。
【００３１】
つぎの発明にかかる数値制御装置は、上記の発明において、シングルブロック運転時に、処理系統間同期の補間処理を選択的に同期処理の対象より除外する系統間同期無効処理部をさらに有していることを特徴とする。
【００３２】
【発明の実施の形態】
以下に添付の図を参照してこの発明の実施の形態を詳細に説明する。なお、以下に説明するこの発明の実施の形態において、上述の従来例と同一構成の部分は、上述の従来例に付した符号と同一の符号を付してその説明を省略する。
【００３３】
（実施の形態１）
図１はこの発明による数値制御装置の実施の形態１を示している。この数値制御装置には、パラメータ設定部１４０に、系統１（＄１）の＄１メインプログラム１０１による制御軸を定義する＄１軸定義部１００と、系統２（＄２）の＄２メインプログラム１１１による制御軸を定義する＄２軸定義部１１０とに加えて、サブプログラム１２１とサブプログラム１３１による制御軸を各々定義するサブ系統軸定義部として、サブ系統１（以下＄［１］）軸定義部１２０と、サブ系統２（以下＄［２］）軸定義部１３０とが設けられている。
【００３４】
なお、サブプログラム１２１、１３１は、メインプログラム１０１またはメインプログラム１１１より呼び出されるサブプログラム（＄［１］、＄［２］）である。
【００３５】
この数値制御装置では、＄１解析処理部１０２は系統１で実行する加工プログラムである＄１メインプログラム１０１の解析処理を行う＄１解析処理部（系統１メインプログラム解析処理部）１０２と、系統２で実行する加工プログラムである＄２メインプログラム１１１の解析処理を行う＄２解析処理部（系統２メインプログラム解析処理部）１１２とは別に、サブプログラム１２１を解析処理するための＄［１］解析処理部（系統１サブプログラム解析処理部）１２２と、サブプログラム１３１を解析処理するための＄［２］解析処理部（系統２サブプログラム解析処理部）１３２とが設けられている。
【００３６】
補間処理部１０３は、＄１解析処理部１０２、＄２解析処理部１１２による＄１メインプログラム１０１、＄２メインプログラム１１１の解析結果に基づく補間処理に加えて、＄［１］解析処理部１２２、＄［２］解析処理部１３２によるサブプログラム１２１、１３１の解析結果に基づく補間処理を行う。
【００３７】
また数値制御装置の出力部には、＄［１］軸定義部１２０で定義された制御軸に相当するサーボモータ１２７およびその制御を行なうサーボ制御部１２６と、＄［２］軸定義部１３０で定義された制御軸に相当するサーボモータ１３７およびその制御を行なうサーボ制御部１３６とが付加されている。
【００３８】
＄１は、＄１で制御する軸を定義する＄１軸定義部１００と、＄１メインプログラム１０１と、＄１解析処理部１０２とによって構成され、＄１メインプログラム１０１に基づきサーボモータ１０７を駆動して＄１のテーブルまたは刃物台を移動せしめる。
【００３９】
＄２は、＄２軸定義部１１０と、＄２メインプログラム１１１と、＄２解析処理部１１２とによって構成され、＄２メインプログラム１１１に基づきサーボモータ１１７を駆動して＄２のテーブルまたは刃物台を移動せしめる。
【００４０】
サブプログラム１２１は＄［１］解析処理部１２２によって解析処理され、この＄［１］解析処理部１２２によるサブプログラム１２１の解析結果に基づき補間処理部１０３によって補間処理が行われる。＄［１］軸定義部１２０にて定義された制御軸は、軸制御部１０４にて制御され、軸移動量出力回路１０５より微小単位の軸移動量がサーボ制御部１２６へ出力される。これによりサーボモータ１２７が駆動される。
【００４１】
またサブプログラム１３１は＄［２］解析処理部１３２によって解析処理され、この＄［２］解析処理部１３２によるサブプログラム１３１の解析結果に基づき補間処理部１０３によって補間処理が行われる。＄［２］軸定義部１３０にて定義された制御軸は、軸制御部１０４にて制御され、軸移動量出力回路１０５より微小単位の軸移動量がサーボ制御部１３６へ出力される。これによりサーボモータ１３７が駆動される。
【００４２】
以上のように、サブプログラムに対応する軸定義部と、解析処理部と、その制御軸とが付加されたことにより、＄［１］と＄［２］は＄１と＄２のどちらからも呼び出し可能となる。
【００４３】
すなわち、＄［１］を＄１より呼び出した場合には、サーボモータ１２７によって移動する軸は＄１によって指令可能な軸となり、＄［１］を＄２より呼び出した場合には、サーボモータ１２７によって移動する軸は＄２において指令可能な軸となる。同様に、＄［２］を＄１より呼び出した場合には、サーボモータ１３７によって移動する軸は＄１において指令可能な軸となり、＄［２］を＄２より呼び出した場合には、サーボモータ１３７によって移動する軸は＄２において指令可能な軸となる。
【００４４】
なお、図１では説明の簡略化のため、各加工プログラムにおいて指令する軸が１軸として説明しているが、各加工プログラムにおいて指令する軸は複数軸でも差し支えない。
【００４５】
図２は上述のような構成よる数値制御装置によって制御される加工システムの一具体例を示している。
【００４６】
この加工システムは、系統１として＄１メインプログラム１０１によって荒削り加工を行う工作機械１７１と、系統２として＄２メインプログラム１１１によって仕上げ加工を行う工作機械１７２と、工作機械１７１における荒削り加工を完了したワークを工作機械１７２へ搬送、または工作機械１７２における仕上げ加工を完了したワークをワーク取り出し口１７４へ搬送する搬送装置を有している。＄１ではＸ１軸１８１及びＺ１軸１８２を制御し、＄２ではＸ２軸１８３及びＺ２軸１８４を制御する。
【００４７】
搬送装置１７３はＸｓｕｂ軸１８５及びＺｓｕｂ軸１８６に沿って移動し、サブプログラム１２１に基づいて制御される。サブプログラム１２１は、メインプログラム１０１またはメインプログラム１１１より呼び出される。
【００４８】
サブプログラム１２１がメインプログラム１０１より呼び出された場合には、工作機械１７１における荒削り加工を完了したワークを工作機械１７２へ搬送するプログラムになり、これに対しサブプログラム１２１がメインプログラム１１１より呼び出された場合には、工作機械１７２における仕上げ加工を完了したワークをワーク取り出し口１７４へ搬送するプログラムとなる。
【００４９】
以上のようにして工作機械１７１、工作機械１７２、搬送装置１７３を一つの数値制御装置で制御することができる。
【００５０】
＄２において、仕上げ加工が完了した場合、メインプログラム１１１はサブプログラム１２１を呼び出し、ワークをワーク取り出し口１７４へ搬送する。次に＄１において荒削り加工が完了した場合、メインプログラム１０１はサブプログラム１２１を呼び出し、ワークを工作機械１７２へ搬送し、＄２の仕上げ加工を行う。
【００５１】
この発明によれば、サブプログラム１２１は、メインプログラム１０１とメインプログラム１１１のどちらからも呼び出すことができるため、メインプログラム１０１から呼び出した場合は、Ｘｓｕｂ軸１８５とＺｓｕｂ軸１８６をあたかも＄１の補助軸として、メインプログラム１１１から呼び出した場合は、Ｘｓｕｂ軸１８５とＺｓｕｂ軸１８６をあたかも＄２の補助軸として自由に扱うことができる。
【００５２】
（実施の形態２）
図３はこの発明による数値制御装置の実施の形態２を示している。尚、図３に於いて、図１に対応する部分は図１に付した符号と同一の符号を付けてその説明を省略する。
【００５３】
この数値制御装置においては、補間処理部１０３に、プログラム並列運転カウンタ２０２と、プログラム並列運転カウンタ２０２の入力を行うカウンタ入力部２０３と、プログラム並列運転カウンタ２０２の値（セット・リセット）によってメインプログラムとサブプログラムの実行を直列または並列に切り換える直列並列切り換え処理部２０１とが設けられている。
【００５４】
カウンタ入力部２０３は、メインプログラム、サブプログラムあるいはシーケンス回路１５２より、直列運転あるいは並列運転の指令を取り込むことができる。
【００５５】
図４（ａ）、（ｂ）は補助指令によりプログラム並列運転カウンタ２０２をセットまたはリセットするためのシーケンスプログラムを示すフローチャートである。
【００５６】
図４（ａ）に示されているプログラム並列運転カウンタセット用のシーケンスプログラムでは、まず加工プログラムにおいて補助指令Ｍ２００が指令されているか否かを判定する（ステップＳ２３１）。補助指令Ｍ２００が指令されている場合には、プログラム並列運転カウンタ２０２をセットする信号を出力し（ステップＳ２３２）、補助指令Ｍ２００の実行の完了信号を出力する（ステップＳ２３３）。
【００５７】
図４（ｂ）に示されているプログラム並列運転カウンタリセット用のシーケンスプログラムでは、まず加工プログラムにおいて補助指令Ｍ２０１が指令されているか否かを判定する（ステップＳ２３６）。補助指令Ｍ２０１が指令されている場合にはプログラム並列運転カウンタ２０２をリセットする信号を出力し（ステップＳ２３７）、補助指令Ｍ２０１の実行の完了信号を出力する（ステップＳ２３８）。
【００５８】
これらのシーケンスプログラムを作成しておくことによって、加工プログラムにおいて補助指令Ｍ２００が指令された場合にはプログラム並列運転カウンタ２０２がセットされて並列運転に切り換わり、補助指令Ｍ２０１が指令された場合にはプログラム並列運転カウンタ２０２がリセットされて直列運転に切り換わる。
【００５９】
なお、この実施の形態の以下の説明では、説明の簡素化のために、系統１において＄１メインプログラム１０１よりサブプログラム１２１を呼び出す場合について説明する。
【００６０】
＄１メインプログラム１０１は、＄１解析処理部１０２により解析処理が行なわれる。このときの制御軸は＄１軸定義部１００で設定される。また、＄１メインプログラム１０１から呼び出されるサブプログラム１２１は、解析処理部１２２により解析処理を行なわれる。このときの制御軸は＄［１］軸定義部１２０で設定される。
【００６１】
これにより、サブプログラムにおける制御軸とメインプログラムにおける制御軸とを別々に設定でき、＄１メインプログラム１０１とサブプログラム１２１とを並列に実行することが可能となる。
【００６２】
＄１メインプログラム１０１において直列運転の指令を行なった場合、またはシーケンス回路１５２より直列運転の信号を機械制御信号処理部１５１が受けた場合には、カウンタ入力部２０３を介してプログラム並列運転カウンタ２０２をリセットする。このときには直列並列切り換え処理部２０１において直列運転が選択され、＄１メインプログラム１０１より呼び出されたサブプログラム１２１の指令を実行し、＄１メインプログラム１０１の指令は休止する。
【００６３】
これに対し、＄１メインプログラム１０１において並列運転の指令を行なった場合、またはシーケンス回路１５２より並列運転の信号を機械制御信号処理部１５１が受けた場合には、カウンタ入力部２０３を介して、プログラム並列運転カウンタ２０２をセットする。このときには直列並列切り換え処理部２０１において並列運転が選択され、＄１メインプログラム１０１の指令と＄１メインプログラム１０１より呼び出されたサブプログラム１２１の指令を並列に実行する。
【００６４】
図５（ａ）、（ｂ）はメインプログラムとサブプログラムの一具体例を例示している。図５（ａ）に示されているメインプログラムにおいて、２１１はメインプログラムの実行開始ブロック、２１２はサブプログラム呼び出し指令、２１３はサブプログラム呼び出し指令の次ブロックである。
【００６５】
図５（ｂ）に示されているサブプログラムにおいて、２２１はメインプログラムのブロック２１２で呼び出されたサブプログラムの実行開始ブロック、２２２はプログラム並列運転カウンタのセットを行う補助指令、２２３はドゥエル指令、２２４はプログラム並列運転カウンタのリセットを行う補助指令、２２５はサブプログラムからメインプログラムへの復帰指令である。
【００６６】
また図５（ａ）のメインプログラムにおいて、２１４はサブプログラムのブロック２２４におけるプログラム並列運転カウンタのセット時のメインプログラムの実行中ブロック、２１５はブロック２１４の次ブロックを表す。
【００６７】
次に図５（ａ）、（ｂ）に示されているプログラムの動作について説明する。
【００６８】
はじめにメインプログラムが外部起動信号によって起動される。メインプログラムはブロック２１１より実行開始し、ブロック２１２でサブプログラムを呼び出す。このとき、プログラム並列運転カウンタ２０２はセットされていないため、メインプログラムは一時休止し、サブプログラムが実行する直列運転を行う。
【００６９】
サブプログラムはブロック２２１より実行を開始し、ブロック２２２でプログラム並列運転カウンタ２０２のセットを行う。プログラム並列運転カウンタ２０２をセットした後、メインプログラムとサブプログラムは並列運転に切り換わる。
【００７０】
メインプログラムはブロック２１３から再起動し、それと並列に、サブプログラムはブロック２２３のドゥエル指令を実行する。
【００７１】
次に、サブプログラムはブロック２２４でプログラム並列運転カウンタ２０２のリセットを行い、直列運転に切り換わる。メインプログラムはこのとき実行中のブロック２１４が終了した後に一時休止し、サブプログラムはブロック２２５の復帰指令までを実行する。メインプログラムはサブプログラムの終了後、ブロック２１５より再起動する。
【００７２】
以上のように、呼び出したサブプログラムがドゥエル指令によって休止中に、メインプログラムを並列に実行することによって、例えばサブプログラムからメインプログラムへの復帰後の加工の準備を行うことができ、サイクルタイムを短縮することができる。
【００７３】
（実施の形態３）
図６はこの発明による数値制御装置の実施の形態３を示している。尚、図６に於いて、図３に対応する部分は図３に付した符号と同一の符号を付けてその説明を省略する。
【００７４】
この数値制御装置においては、起動条件設定プログラム３０１がメモリ１４１に割り付けられ、また起動条件設定プログラム３０１を解析処理する起動条件解析処理部３０２が設けられる。起動条件設定プログラム３０１は、＄１メインプログラム１０１よりサブプログラム１２１を呼び出すときの、サブプログラム１２１または＄１メインプログラム１０１の次ブロックからの起動条件を記述したものであり、ユーザによって任意に作成される。
【００７５】
補間処理部１０３には、直列並列切り換え処理部２０１、プログラム並列運転カウンタ２０２、カウンタ入力部２０３に加えて、数値制御装置または数値制御工作機械の状態を示すＮＣステータステーブル３０４と、ＮＣステータステーブル３０４より設定したプログラム起動条件を満たしているか否かを判定するプログラム起動条件判定部３０３と、その判定に従いサブプログラムまたはメインプログラムの次ブロックの実行を調整するプログラム起動処理部３０５とが付加されている。
【００７６】
ＮＣステータステーブル３０４は数値制御装置または周辺装置の状態を表すテーブルであり、ＮＣステータステーブル３０４より得られるステータス情報としては、例えば主軸の回転速度や軸のモータ電流値などがある。
【００７７】
この場合、サーボ制御部１０６、１１６、１２６、１３６から軸制御部１０４を介してサーボ軸の状態に関する情報がＮＣステータステーブル３０４へ送られ、また主軸制御部１５６より主軸回転数出力回路１５５，機械制御信号処理部１５１を介して主軸の状態に関する情報がＮＣステータステーブル３０４へ送られ、ＮＣステータステーブル３０４にそれらの数値情報が入力される。
【００７８】
なお、この実施の形態の以下の説明でも、説明の簡素化のために、系統１において＄１メインプログラム１０１よりサブプログラム１２１を呼び出す場合について説明する。
【００７９】
＄１メインプログラム１０１は、＄１解析処理部１０２により解析処理を行なわれる。このときの制御軸は＄１軸定義部１００で設定される。また、＄１メインプログラム１０１から呼び出されるサブプログラム１２１は、解析処理部１２２により解析処理を行なわれる。このときの制御軸は＄［１］軸定義部１２０で設定される。
【００８０】
これにより、この実施の形態でも、サブプログラムにおける制御軸とメインプログラムにおける制御軸とを別々に設定でき、＄１メインプログラム１０１とサブプログラム１２１とを並列に実行することが可能となる。
【００８１】
＄１メインプログラム１０１がサブプログラム１２１を呼び出して並列に実行するときには、起動条件設定プログラム３０１を起動条件解析処理部３０２が解析する。
【００８２】
この解析結果に従い、プログラム起動条件判定部３０３は、ＮＣステータステーブル３０４より得られる情報より、プログラム起動条件判定部３０３によって＄１メインプログラム１０１またはサブプログラム１２１の起動条件を満たしているか否かを判定する。この判定結果により、プログラム起動処理部３０５がサブプログラム１２１または＄１メインプログラム１０１の次ブロックからの起動を調整する。
【００８３】
図７（ａ）〜（ｄ）は実施の形態３にて使用されるメインプログラム（系統１）とサブプログラムとメインプログラム（系統２）と起動条件設定プログラムの一具体例を示している。
【００８４】
図７（ａ）に示されている系統１で実行する加工プログラムにおいて、３１１は、サブプログラムの実行開始条件を記述した起動条件設定プログラムを指定し、実行開始条件を満たしたときサブプログラムのブロック３２１からブロック３２２までを実行する指令である。
【００８５】
この指令では、メインプログラム（系統１）とサブプログラムは並列に実行する。ブロック３１１のサブプログラム呼び出し指令時に、起動条件設定プログラム３０１（図７（ｄ）参照）の記述に従い、Ｒ２０００の値がセットされる。
【００８６】
ここで、Ｒ２０００は、メインプログラム（系統１）よりサブプログラムを呼び出した場合の実行開始レジスタを表す。また、Ｒ１２３４は、ＮＣステータステーブル３０４上の主軸回転速度を表すレジスタである。
【００８７】
図７（ｃ）に示されている系統２で実行する加工プログラムにおいて、３３１は主軸を１５００回転で正転させる指令、３３２は主軸を停止させる指令である。即ち、起動条件設定プログラムの３４１に記述されているように、系統２で制御を行なっている主軸において、ブロック３３２で主軸停止指令がなされて主軸が１００回転以下となったとき、実行開始レジスタＲ２０００がセットされ、サブプログラムはブロック３２１より実行を開始する。
【００８８】
これにより、従来は主軸の回転が完全に停止した後に次の指令を行なっていたが、この発明では主軸の回転速度が例えば１００回転以下になったときに次の指令が行える。従って主軸の回転に関係なく工具等を移動できるような場合には、主軸の回転が完全に停止するのを待たずに次の加工の準備を行うことができ、サイクルタイムを短縮することができる。
【００８９】
（実施の形態４）
図８はこの発明による数値制御装置の実施の形態４を示している。尚、図８に於いて、図３に対応する部分は図３に付した符号と同一の符号を付けてその説明を省略する。
【００９０】
この数値制御装置には、加工プログラムのブロックごとに実行時間を計算するブロック実行時間計算処理部として、＄１ブロック実行時間計算処理部４０１と、＄２ブロック実行時間計算処理部４１１と、＄［１］ブロック実行時間計算処理部４２１と、＄［２］ブロック実行時間計算処理部４３１とが設けられている。
【００９１】
また補間演算部１０３には、直列並列切り換え処理部２０１、プログラム並列運転カウンタ２０２、カウンタ入力部２０３に加えて、補間時間計算処理部４０２と、補助指令処理時間定義テーブル４０３と、プログラム実行時間計算処理部４０４と、プログラム起動時間調整処理部４０５と、軸移動遅延時間補正処理部４０６とが設けられている。
【００９２】
補間時間計算処理部４０２は補間処理中のブロックの終了までの補間処理時間を計算し、補助指令処理時間定義テーブル４０３は加工プログラムの補助指令の処理時間を設定する。
【００９３】
プログラム実行時間計算処理部４０４は各ブロック実行時間計算処理部４０１、４１１、４２１、４３１と補間時間計算処理部４０２の計算結果と補助指令処理時間定義テーブル４０３より加工プログラムの実行時間を計算する。
【００９４】
プログラム起動時間調整処理部４０５はサブプログラムが該サブプログラムを呼び出したメインプログラムの指定ブロックの実行終了と同時に終了するようにメインプログラムの次ブロックまたはサブプログラムの起動を調整する。
【００９５】
軸移動遅延時間補正処理部４０６はプログラム起動時間調整処理部４０５によるプログラム起動調整に伴い指令に対する軸移動の遅延時間を補正する。
【００９６】
ここでは特に、系統１において＄１メインプログラム１０１よりサブプログラム１２１を呼び出す場合について説明する。
【００９７】
＄１メインプログラム１０１は、＄１解析処理部１０２により解析処理を行なわれる。このときの制御軸は＄１軸定義部１００で設定される。また、＄１メインプログラム１０１から呼び出されるサブプログラム１２１は、解析処理部１２２により解析処理を行なわれる。このときの制御軸は＄［１］軸定義部１２０で設定される。
【００９８】
これにより、この実施の形態でも、サブプログラムにおける制御軸とメインプログラムにおける制御軸とを別々の軸として設定することができ、＄１メインプログラム１０１とサブプログラム１２１とを並列に実行することが可能となる。
【００９９】
ここで、サブプログラム１２１が＄１メインプログラム１０１と並列に実行されるように呼び出す。このとき、＄１ブロック実行時間計算処理部４０１において＄１メインプログラムの次ブロックからサブプログラム復帰指定ブロックまでのブロックごとの実行時間を計算する。
【０１００】
また、＄［１］ブロック実行時間計算処理部４２１においてサブプログラム１２１の起動開始ブロックから復帰ブロックまでのブロックごとの実行時間を計算する。また、各ブロック中に補助指令がある場合には、補助指令の実行時間を設定した補助指令処理時間定義テーブル４０３をチェックし、プログラム実行時間計算処理部４０４で＄１メインプログラム１０１とサブプログラム１２１の実行時間を計算する。
【０１０１】
プログラム起動時間調整処理部４０５は、プログラム実行時間計算処理部４０４によって計算されたそれぞれの実行時間を比較し、実行時間の長い方の加工プログラムに合わせて実行時間の短い方の加工プログラムの起動開始時間を調整する。このとき、補間時間計算処理部４０２により実行時間の長い方の加工プログラムの補間処理時間を計算し、実行時間の長い方の加工プログラムのブロック実行途中であっても実行時間の短い方の加工プログラムの起動開始時間であれば、起動を開始する。
【０１０２】
更に、軸移動遅延時間補正処理部４０６により、軸の指令に対する実際の位置の遅延時間を計算し、プログラム起動開始時間の補正を行う。
【０１０３】
以上のようにして、＄１メインプログラム１０１とサブプログラム１２１を並列に実行して、メインプログラム１０１の指定ブロックとサブプログラム１２１の復帰ブロックが同時に終了するように調整する。
【０１０４】
図９は補助指令処理時間定義テーブル４０３の一具体例を示している。補助指令処理時間定義テーブル４０３では、例えばクーラントオン指令（Ｍ０８）で５００ミリ秒のように、加工プログラム中で指令する補助指令の処理時間が定義されている。
【０１０５】
図１０（ａ）、（ｂ）は、実施の形態４にて使用されるメインプログラムと、そのメインプログラムより呼び出されるサブプログラムの一具体例を示している。
【０１０６】
図１０（ａ）に示されているメインプログラムにおいて、４５１はメインプログラムの先頭ブロックで、４５２はサブプログラムを呼び出しシーケンス番号１００から実行して、メインプログラムのシーケンス番号２００のブロック終了と同時にサブプログラムを終了するように制御する指令である。また４５３はブロック４５２の次ブロックで、４５４はサブプログラムが実行を開始するときのメインプログラムにおける実行中ブロックで、４５５はサブプログラムの終了と同期させるメインプログラムの指定ブロックである。
【０１０７】
図１０（ｂ）に示されているサブプログラムにおいて、４６１はメインプログラムより呼び出されたサブプログラムの実行開始ブロックであり、４６２はサブプログラムからメインプログラムへの復帰指令である。
【０１０８】
なお、ここでは、サブプログラムの実行時間（ブロック４６１からブロック４６２までの実行時間）の方がメインプログラムの実行時間（ブロック４５３からブロック４５５までの実行時間）より短い場合について説明している。
【０１０９】
つぎにプログラム起動時間調整処理部４０５によるプログラム起動時間調整処理フローを図１１を参照して説明する。
【０１１０】
先ずプログラム実行時間計算処理部４０４よりメインプログラムの実行時間（Ｔｍａｉｎ）とサブプログラムの実行時間（Ｔｓｕｂ）を取得し（ステップＳ４８０，４８１）、ＴｍａｉｎとＴｓｕｂとを比較する（ステップＳ４８２）。
【０１１１】
Ｔｍａｉｎの方がＴｓｕｂより短い場合には（ステップＳ４８２肯定）、メインプログラムが実行を開始する時のサブプログラムにおける実行中ブロックを取得し（ステップＳ４８３）、サブプログラムの実行を開始する（ステップＳ４８４）。
【０１１２】
このサブプログラムの実行下で、メインプログラムを開始すべきブロックの実行開始をチェックし（ステップＳ４８５）、メインプログラムを開始すべきブロックの実行開始で、メインプログラム実行開始タイミング（Ｔｍ１）を計算する（ステップＳ４８６）。
【０１１３】
つぎに時間カウントを開始し（ステップＳ４８７）、この時間カウント値よりＴｍ１が経過したか否かをチェックする（ステップＳ４８８）。Ｔｍ１が経過すればメインプログラムの実行を開始する（ステップＳ４８９）。
【０１１４】
これに対し、Ｔｍａｉｎの方がＴｓｕｂより長い場合には（ステップＳ４８２否定）、サブプログラムが実行を開始する時のメインプログラムにおける実行中ブロックを取得し（ステップＳ４９３）、メインプログラムの実行を開始する（ステップＳ４９４）。
【０１１５】
このメインプログラムの実行下で、サブプログラムを開始すべきブロックの実行開始をチェックし（ステップＳ４９５）、サブプログラムを開始すべきブロックの実行開始で、サブプログラム実行開始タイミング（Ｔｍ２）を計算する（ステップＳ４９６）。
【０１１６】
つぎに時間カウントを開始し（ステップＳ４９７）、この時間カウント値よりＴｍ２が経過したか否かをチェックする（ステップＳ４９８）。Ｔｍ２が経過すればサブプログラムの実行を開始する（ステップＳ４９９）。
【０１１７】
つぎに上述のプログラム起動時間調整処理フロー（図１１）に従った図１０（ａ）、（ｂ）のメインプログラムとサブプログラムの実行手順を説明する。なお、ここではＴｍａｉｎ＞Ｔｓｕｂの場合について説明する。
【０１１８】
メインプログラムは、ブロック４５２でサブプログラムを呼び出すと共に、メインプログラムもサブプログラムと並列に実行する。
【０１１９】
この指令で、メインプログラムのブロック４５３からブロック４５５までの処理時間Ｔｍａｉｎと、サブプログラムのブロック４６１からブロック４６２までの処理時間Ｔｓｕｂを計算する。メインプログラムのブロック４５２から処理時間を逆算して、サブプログラムの実行を開始すべきブロック４５４を得る。
【０１２０】
ブロック４５４を実行開始した時、ブロック４５４の開始からサブプログラムを実行開始するタイミングまでの時間（Ｔｍ２）を計算する。ブロック４５４の開始からＴｍ２が経過したときにサブプログラムの実行を開始する。
【０１２１】
これによりメインプログラムのブロック４５５とサブプログラムのブロック４６２が同時に実行完了する。
【０１２２】
図１２は上述のような実施の形態４による数値制御装置が適用されるＣＮＣ工作機械の一例を示している。この工作機械は、ワークＷを切断する突切り工具４７１と、切断されたワークＷの搬出を行うセパレータ４７２とを有している。
【０１２３】
図１０（ａ）、（ｂ）に示されているプログラム例において、サブプログラムのブロック４６１から４６２にセパレータ４７２をＡ位置からＢ位置へ移動せしめる加工プログラムを作成し、メインプログラムのブロック４５３から４５５には突切り工具４７１によってワークＷを切断する加工プログラムを作成する。
【０１２４】
これによって、ブロック４５２でセパレータ４７２の移動プログラムが呼び出されると共に、突切り工具４７１はワークＷの切断を行う。
【０１２５】
このとき、メインプログラムのブロック４５５とサブプログラムのブロック４６２が同時に終了するため、ワークＷの切断完了とセパレータ４７２が位置Ｂに到達するのが同時になるようにセパレータ４７２の移動開始を調整できる。これによって、セパレータ４７２が切断されたワークＷを受け取るにあたり、ワークＷの切断に伴い発生する切り粉がセパレータ４７２内に入り込む量を減らすことができる。
【０１２６】
（実施の形態５）
図１３はこの発明による数値制御装置の実施の形態５を示している。尚、図１３に於いて、図３に対応する部分は図３に付した符号と同一の符号を付けてその説明を省略する。
【０１２７】
この数値制御装置には、加工プログラムのブロックごとに実行時間を計算するブロック実行時間計算処理部として、＄１ブロック実行時間計算処理部５０１と、＄２ブロック実行時間計算処理部５１１と、＄［１］ブロック実行時間計算処理部５２１と、＄［２］ブロック実行時間計算処理部５３１とが設けられている。
【０１２８】
また補間演算部１０３には、直列並列切り換え処理部２０１、プログラム並列運転カウンタ２０２、カウンタ入力部２０３に加えて、軸移動指令実行時間計算処理部５０２と、補助指令処理時間定義テーブル５０３と、プログラム実行時間計算処理部５０４と、移動速度計算処理部５０５と、補間間隔調整処理部５０６と、補間時間計算処理部５０７とが設けられている。
【０１２９】
軸移動指令実行時間計算処理部５０２は軸を移動せしめる指令の実行時間を計算する。
【０１３０】
補間時間計算処理部５０７はメインプログラムまたはサブプログラムの補間中のブロックのブロック実行完了までの時間を計測し、補助指令処理時間定義テーブル５０３は加工プログラムの補助指令の処理時間を設定する。補助指令処理時間定義テーブル５０３は実施の形態４における補助指令処理時間定義テーブル４０３と同等のものである（図９参照）。
【０１３１】
プログラム実行時間計算処理部５０４は各ブロック実行時間計算処理部５０１、５１１、５２１、５３１と補間時間計算処理部５０７の計算結果と補助指令処理時間定義テーブル５０３より加工プログラムの実行時間を計算する。
【０１３２】
移動速度計算処理部５０５はサブプログラムが該サブプログラムを呼び出したメインプログラムの指定ブロックにおいて同時に終了するための軸送り速度を計算する。
【０１３３】
補間間隔調整処理部５０６は移動速度計算処理部５０５にて計算された軸送り速度で軸移動させるために補間距離を調整する。
【０１３４】
ここでは特に、系統１において＄１メインプログラム１０１よりサブプログラム１２１を呼び出す場合について説明する。
【０１３５】
＄１メインプログラム１０１は、＄１解析処理部１０２により解析処理を行なわれる。このときの制御軸は＄１軸定義部１００で設定される。また、＄１メインプログラム１０１から呼び出されるサブプログラム１２１は、解析処理部１２２により解析処理を行なわれる。このときの制御軸は＄［１］軸定義部１２０で設定される。
【０１３６】
これにより、この実施の形態でも、サブプログラムにおける制御軸とメインプログラムにおける制御軸とを別々の軸で設定することができ、＄１メインプログラム１０１とサブプログラム１２１とを並列に実行することが可能となる。
【０１３７】
ここで、サブプログラム１２１が＄１メインプログラム１０１と並列に実行されるように呼び出す。このとき、＄１ブロック実行時間計算処理部５０１において＄１メインプログラムの次ブロックからサブプログラム復帰指定ブロックまでのブロックごとの実行時間を計算する。
【０１３８】
また、＄［１］ブロック実行時間計算処理部５２１においてサブプログラム１２１の起動開始ブロックから復帰ブロックまでのブロックごとの実行時間を計算する。
【０１３９】
次に、軸移動指令実行時間計算処理部５０２において、＄１メインプログラム１０１のサブプログラム復帰指定ブロックまでの軸移動指令の実行時間（Ｔｍａ）と、サブプログラム１２１の復帰ブロックまでの軸移動指令の実行時間（Ｔｓａ）とを計算する。
【０１４０】
また、プログラム実行時間計算処理部５０４で、各ブロック実行時間計算処理部５０１、５１１、５２１、５３１で計算されたブロック実行時間より、＄１メインプログラム１０１の軸移動指令以外の実行時間（Ｔｍｂ）とサブプログラム１２１の軸移動指令以外の実行時間（Ｔｓｂ）とを計算する。ここで、各ブロック中に補助指令がある場合は、補助指令の実行時間を設定した補助指令処理時間定義テーブル５０３をチェックして実行時間を計算する。
【０１４１】
Ｔｍａ、Ｔｓａ、Ｔｍｂ、Ｔｓｂより、移動速度計算処理部５０５において、＄１メインプログラム１０１の実行時間（Ｔｍ＝Ｔｍａ＋Ｔｍｂ）とサブプログラム１２１の実行時間（Ｔｓ＝Ｒｓａ＋Ｔｓｂ）が一致するような軸移動速度を計算する。
【０１４２】
サブプログラム１２１の実行時間を変える場合には、Ｔｍａ＋Ｔｍｂ＝ｎ・Ｔｓａ＋Ｔｓｂとなるｎを計算する。ｎはサブプログラム１２１で制御する軸のオーバライド量となり、サブプログラム１２１の軸移動指令に対する送り速度にｎをかけた値を新たな送り速度とみなす。
【０１４３】
移動速度計算処理部５０５において計算された送り速度で軸が移動するように、補間間隔調整処理部５０６で補間量を調整する。また、補間時間計算処理部５０７は補間中のブロックにおけるブロック実行完了までの時間を計算する。上記のようにして、＄１メインプログラム１０１とサブプログラム１２１の実行開始と終了を一致させる。
【０１４４】
図１４（ａ）、（ｂ）は、実施の形態４にて使用されるメインプログラムと、そのメインプログラムより呼び出されるサブプログラムの一具体例を示している。
【０１４５】
図１４（ａ）に示されているメインプログラムにおいて、５５１はメインプログラムの先頭ブロック、５５２はサブプログラムを呼び出して並列に実行し、同時に実行開始してメインプログラムのシーケンス番号２００のブロックとサブプログラムのメインプログラムへの復帰指令ブロックが同時に終了するようにサブプログラムの実行時間を調整する指令、５５３はブロック５５２の次ブロックである。５５４はサブプログラムの終了と同期させるメインプログラムの指定ブロックである。
【０１４６】
図１４（ｂ）に示されているサブプログラムにおいて、５６１はサブプログラムのプログラム番号、５６２はメインプログラムより呼び出されたサブプログラムの実行開始ブロック、５６３はサブプログラムからメインプログラムへの復帰指令である。
【０１４７】
つぎにこの実施の形態におけるプログラム起動時間調整処理フローを図１５を参照して説明する。
【０１４８】
まず軸移動指令実行時間計算処理部５０２によりメインプログラムの軸移動指令の実行時間（Ｔｍａ）とサブプログラムの軸移動指令の実行時間（Ｔｓａ）とを求め（ステップＳ５７１，５７２）、プログラム実行時間計算処理部５０４によりメインプログラムの軸移動指令以外の実行時間（Ｔｍｂ）とサブプログラムの軸移動指令以外の実行時間（Ｔｍｂ）とを求める（ステップＳ５７３，５７４）。
【０１４９】
つぎにメインプログラムの指令により選択された実行時間を調整する側のプログラムを判定する（ステップＳ５７５）。
【０１５０】
メインプログラムの実行時間を調整する場合には（ステップＳ５７５肯定）、ＴｍａとＴｓａとＴｍｂとＴｓｂから、プログラムの実行が同時に終了するためのメインプログラムにおけるオーバライド量（Ｖｍ）を計算する（ステップＳ５８１）。
【０１５１】
次にメイン及びサブプログラムを実行開始し（ステップＳ５８２）、メインプログラムにおいてオーバライドを実行し（ステップＳ５８３）、メインプログラムの軸移動指令に対して、軸移動速度にＶｍをかけた速度で軸制御を行う。
【０１５２】
この後においては、メインプログラムの実行中ブロックが終了したことを判定し（ステップＳ５８４）、実行中ブロック終了の場合にはメインプログラムの指定ブロック終了を判定する（ステップＳ５８５）。指定ブロック終了時である場合にはオーバーライドを終了する（ステップＳ５８６）。指定ブロック終了時でない場合には、ステップＳ５７１に戻り、オーバライド量の再計算を行う。
【０１５３】
これに対し、サブプログラムにおいてオーバライドをかける場合には（ステップＳ５７５否定）、ＴｍａとＴｓａとＴｍｂとＴｓｂから、プログラムの実行が同時に終了するためのサブプログラムにおけるオーバライド量（Ｖｓ）を計算する（ステップＳ５９１）。
【０１５４】
次にメイン及びサブプログラムを実行開始し（ステップＳ５９２）、サブプログラムにおいてオーバライドを実行し（ステップＳ５９３）、サブプログラムの軸移動指令に対して、軸移動速度にＶｓをかけた速度で軸制御を行う。
【０１５５】
この後においては、サブプログラムの実行中ブロックが終了したことを判定し（ステップＳ５９４）、実行中ブロック終了の場合にはサブプログラムの指定ブロック終了を判定する（ステップＳ５９５）。指定ブロック終了時である場合にはオーバーライドを終了する（ステップＳ５９６）。指定ブロック終了時でない場合には、ステップＳ５７１に戻り、オーバライド量の再計算を行う。
【０１５６】
つぎに上述のプログラム起動時間調整処理フロー（図１５）に従った図１４（ａ）、（ｂ）のメインプログラムとサブプログラムの実行手順を説明する。なお、ここではサブプログラムの実行速度を調節する場合について説明する。
【０１５７】
メインプログラムはブロック５５２でサブプログラムを呼び出すと共に、メインプログラムも続けて実行する。
【０１５８】
この指令で、メインプログラムのブロック５５３からブロック５５４までの実行時間（Ｔｍ＝Ｔｍａ＋Ｔｍｂ）と、サブプログラムのブロック５６２からブロック５６３までの実行時間（Ｔｓ＝Ｔｓａ＋Ｔｓｂ）を計算する。
【０１５９】
次に、移動速度計算処理部５０５により、サブプログラムの実行時間を調節するため、サブプログラムにおけるオーバライド量を計算する。
【０１６０】
次に、サブプログラムにおいてオーバライドをかけて、軸移動指令に対する送り速度を調節することによりサブプログラムの実行時間を調整する。これによりメインプログラムのブロック５５４とサブプログラムのブロック５６３が同時に終了する。
【０１６１】
図１６は上述のようなメインプログラムとサブプログラムの一動作例のタイミングチャートである。
【０１６２】
図１６において、５５５から５５９はメインプログラムのタイミングチャートであり、５５５と５５７と５５９で軸が移動する。また、５６５から５６８はサブプログラムのタイミングチャートで、５６５と５６７で軸が移動する。
【０１６３】
５６５１から５６８１はサブプログラムの実行時間を調整した場合のタイミングチャートである。５６６と５６６１、５６８と５６８１はそれぞれ同じ時間で、５６５と５６７の軸移動ブロックがそれぞれ５６５１と５６７１の実行時間となるように軸送り速度が調節される。
【０１６４】
これにより５５５から５５９までの実行時間と、５６５１から５６８１までの実行時間が同じになり、メインプログラムとサブプログラムの開始と完了が同時になる。
【０１６５】
（実施の形態６）
図１７はこの発明による数値制御装置の実施の形態６を示している。尚、図１７に於いて、図１に対応する部分は図１に付した符号と同一の符号を付けてその説明を省略する。
【０１６６】
この数値制御装置においては、メモリ１４１に完了チェック条件設定プログラム６０１が割り付けられ、また完了チェック条件解析処理部６０２が設けられる。
【０１６７】
完了チェック条件設定プログラム６０１はサブプログラムからメインプログラムへの復帰条件を設定し、完了チェック条件解析処理部６０２は完了チェック条件設定プログラム６０１の解析処理を行う。
【０１６８】
補間処理部１０３には、数値制御装置または工作機械の状態を知るためのＮＣステータステーブル６０４と、ＮＣステータステーブル６０４より設定したサブプログラムからメインプログラムへの復帰条件を満たしているか否かを判定する完了チェック条件判定部６０３と、完了チェック条件判定部６０３において条件を満たすと判定された場合にセットする完了チェックカウンタ６０５と、完了チェックカウンタ６０５の値によってメインプログラムを再開するメインプログラム再開処理部６０６とが設けられている。
【０１６９】
以下に、系統１において＄１メインプログラム１０１よりサブプログラム１２１を呼び出す場合について説明する。
【０１７０】
完了チェック条件設定プログラム６０１は、＄１メインプログラム１０１よりサブプログラム１２１を呼び出し、サブプログラム１２１の実行中に＄１メインプログラム１０１に復帰させるための条件を設定する。
【０１７１】
完了チェック条件解析処理部６０２は該完了チェック条件設定プログラム６０１の解析処理を行う。完了チェック条件解析処理部６０２により解析された内容に従い、完了チェック条件判定部６０３で、数値制御装置または周辺装置の状態を表わしたＮＣステータステーブル６０４により判定を行い、条件を満たす場合には完了チェックカウンタ６０５をセットする。完了チェックカウンタ６０５がセットされれば、メインプログラム再開処理部６０６でメインプログラムを再開する。
【０１７２】
図１８（ａ）〜（ｃ）は実施の形態６にて使用されるメインプログラムとサブプログラムと完了チェック条件設定プログラムの一具体例を示している。
【０１７３】
図１８（ａ）に示されているメインプログラムにおいて、６１１はメインプログラムの実行開始ブロック、６１２はサブプログラムを呼び出し、サブプログラムをプログラム番号６０、シーケンス番号１００より実行し、完了チェック条件設定プログラムをプログラム番号１０００６を選択して、サブプログラムのシーケンス番号２００番以降において、完了チェック条件を判定し、メインプログラムのシーケンス番号１００の次ブロックより再開する指令ブロックである。また６１３はメインプログラムにおけるシーケンス番号１００のブロック、６１４はその次ブロックである。
【０１７４】
図１８（ｂ）に示されているサブプログラムは、上述のメインプログラムより呼び出されるサブプログラムであり、６２１はサブプログラムのプログラム番号を表わし、６２２はメインプログラムより呼び出され、実行開始するブロックである。６２３はブロック６２２の次ブロック、６２５はシーケンス番号２００のブロック、６２４はブロック６２５の前ブロック、６２６はサブプログラムからメインプログラムへの復帰指令ブロックである。
【０１７５】
図１８（ｃ）に示されている完了チェック条件設定プログラムにおいて、６３１はそのプログラム番号、６３２は完了チェック条件を記述したものである。
【０１７６】
ここで、サブプログラムは図２に示されているワーク搬送装置を制御するプログラムであり、Ｘｓｕｂ軸とＺｓｕｂ軸に対して指令を行う。また、完了チェック条件設定プログラムにおける６３２のＲ１３４５はＸｓｕｂ軸の現在位置を表わし、Ｒ２００１は完了チェックカウンタである。
【０１７７】
メインプログラムはブロック６１２でサブプログラムを呼び出し、サブプログラムはブロック６２２よりブロック６２６まで実行する。これに並行して、メインプログラムはブロック６１３まで実行し、サブプログラム完了待ち状態になる。
【０１７８】
サブプログラムはブロック６２５の実行を開始してから、完了チェック条件設定プログラムに記述された内容を判定する。ここでは、Ｘｓｕｂ軸の位置が１５０ｍｍよりも小さくなった時に完了チェックカウンタＲ２００１がセットされ、メインプログラムはブロック６１４より実行を再開する。
【０１７９】
これにより、図２に示されているような加工システムにおいて、ワーク搬送装置のアームが工作機械１７１または工作機械１７２の加工室内より復帰して、工作機械１７１または工作機械１７２と干渉しあわない位置まで移動したとき、工作機械１７１または工作機械１７２は即時に加工を開始でき、加工のサイクルタイムを短縮できる。
【０１８０】
（実施の形態７）
図１９はこの発明による数値制御装置の実施の形態７を示している。尚、図１９において、図１、図６に対応する部分は図１、図６に付した符号と同一の符号を付けてその説明を省略する。
【０１８１】
この数値制御装置では、複数個の解析処理部１０２ａ、１０２ｂ…が各々加工プログラム選択部７０１、完了待ちキャンセル処理部７０２と、解析処理起動部７０３と、補助指令／サブ系統起動処理選択部７０４と、起動系統選択部７０５とを有している。
【０１８２】
補間処理部１０３は、補間演算を行う補間処理手段２００以外に、プログラム起動処理部３０５と、ブロック実行調整部７１０と、ブロック実行タイミング調整部７１１と、系統間同期処理部７１２と、系統間同期無効処理部７１３とを有している。
【０１８３】
メモリ１４５には、サブ系統起動データテーブル７２０と、補助機能コードサブ系統起動パラメータテーブル７２１と、系統起動制御テーブル７２２とが定義されている。
【０１８４】
これらが設けられたことにより、数値制御装置は、完了キャンセル待ち処理、サブ系統先読み起動処理、補助機能コードによるサブ系統直接呼出し処理、起動系統自動選択処理、サブ系統プログラム共用処理、系統間同期無効処理を行うことができる。以下に、これら各処理について詳細に説明する。
【０１８５】
（完了キャンセル待ち処理）
完了待ちキャンセル部７０２は、サブ系統の完了を待っている系統（親系統）の完了待ち状態を解除するものであり、サブ系統の完了を待ってから次ブロックを実行するように指令された親系統（メイン系統）に属するサブ系統完了待ちフラグを、サブ系統における完了待ちキャンセル指令でオフする。
【０１８６】
ブロック実行調整部７１０は、完了待ちキャンセル部７０２により完了待ち状態を解除された系統の次ブロックの実行開始を調整するものであり、サブ系統完了待ちフラグがオフになった親系統の次ブロックの実行開始禁止を解除することによって親系統のサブ系統完了待ち状態を解除する。
【０１８７】
つぎに、図２０（ａ）、（ｂ）、図２１を参照して完了待ちキャンセル処理について説明する。
【０１８８】
サブ系統では、図２０（ａ）に示されているように、サブ系統で実行する加工プログラムの次ブロックが完了待ちキャンセル指令であるであるか否かを判別し（ステップＳ７３０）、完了待ちキャンセル指令であれば、完了待ちキャンセル部７０２によって親系統側のサブ系統完了待ちフラグをオフする（ステップＳ７３１）。
【０１８９】
親系統では、図２０（ｂ）に示されているように、サブ系統起動指令であるか否かを判別し（ステップＳ７４１）、サブ系統起動指令でなければ、他の指令の解析処理を行う（ステップＳ７４２）。サブ系統起動指令であれば、これがサブ系統完了待ちタイプであるか否かを判別し（ステップＳ７４３）、サブ系統完了待ちフラグをオンする（ステップＳ７４４）。
【０１９０】
つぎにサブ系統完了待ちフラグがオフであるか否かを判別し（ステップＳ７４５）、サブ系統完了待ちフラグがオフでない場合には親系統における次ブロックの実行開始を禁止する（ステップＳ７４６）。これに対しサブ系統完了待ちフラグがオフの場合にはブロック実行調整部７１０が親系統における次ブロックの実行開始禁止を解除する（ステップＳ７４７）。
【０１９１】
これによりサブ系統からの指令で、親系統のサブ系統完了待ちを任意の時点でキャンセルすることができる。
【０１９２】
図２１は完了待ちキャンセルの加工プログラム例を示している。系統１（親系統）のＭ１１２指令によりサブプログラムの呼出しが行われ、サブプログラムはＧ１４４指令によってサブ系統を起動する。Ｇ１４４指令のパラメータがＡ１０２Ｂ２Ｄ０であることにより、プログラム番号１０２のマクロプログラム（例えば、自動旋盤の背面チャック後退動作プログラム）をサブ系統［２］がサブ系統完了待ちタイプで実行する。背面チャック後退動作プログラムのＧ１４５指令が完了待ちキャンセル指令であり、サブ系統におけるＧ０Ｚ１０指令実行後に完了待ちキャンセル指令が実行されることによって親系統における次ブロックの実行開始禁止が解除される。
【０１９３】
これにより自動旋盤などの工作機械において、親系統のワーク、刃物台などが前進しても、ワーク、刃物台が背面チャックと干渉しない位置まで背面チャックが後退した時点で、背面チャックの後退動作が完了することを待たずにワーク、刃物台などの前進が開始される。このため、サイクルタイムが短縮される。一回のサイクルタイムの短縮が微々たるものであっても、小さい部品を切削加工する自動旋盤のように、一回のサイクルタイムが短く、一日の製造個数が多いものでは、生産効率の向上に大きく寄与する。
【０１９４】
（サブ系統先読み起動処理）
解析処理起動部７０３は、メインプログラムにおけるサブ系統起動指令を先読み解析し、サブ系統の解析処理を開始させる。
【０１９５】
サブ系統起動データテーブル７２０は、解析処理起動部７０３によるサブ系統起動指令の先読み解析に基づいてサブ系統起動のためのデータをサブ系統解析処理部（例えば、解析処理部１０２ｂ）に渡す。
【０１９６】
ブロック実行タイミング調整部７１１は、サブ系統解析処理部によるサブ系統プログラムの解析処理が完了した時点でサブ系統の第１ブロック補間処理を開始するタイミングを調整する。
【０１９７】
つぎに、図２２（ａ）、（ｂ）、図２３、図２４を参照して先読みサブ系統起動処理について説明する。
【０１９８】
図２２（ａ）は親系統によるサブ系統起動処理ルーチンを示している。親系統では、先ず指令がＧコードによるであるか否かを判別し（ステップＳ７５０）、Ｇコードでない場合には、他の処理を行う（ステップＳ７５１）。Ｇコードの場合には、先読みタイプのサブ系統起動指令（Ｇ１４４指令）であるか否かを判別する（ステップＳ７５２）。Ｇ１４４指令でない場合には、他のＧコードの処理を行う（ステップＳ７５３）。
【０１９９】
Ｇ１４４指令である場合には、サブ系統起動データセット処理として、サブ系統起動指令の先読み解析に基づいてサブ系統起動データテーブル７２０にサブ系統起動のためのデータ（Ｇ１４４指令に続くパラメータ値）をセットし（ステップＳ７５４）、解析処理起動部７０３がサブ系統解析処理部の起動処理を行い（ステップＳ７５５）、系統起動制御テーブル７２２に起動系統データをセットする（ステップＳ７５６）。
【０２００】
図２２（ｂ）はサブ系統による加工プログラム実行プロセス処理ルーチンを示している。サブ系統はサブ系統起動データテーブル７２０にセットされた起動系統データに基づいて加工プログラム選択部７０１がサブ系統の加工プログラムを選択し、サブ系統第１ブロックの解析データセットが完了すれば（ステップＳ７６０）、つぎにそれが先読み起動が可能なものであるか否かを判別する（ステップＳ７６１）。このサブ系統第１ブロックの解析データセットは親系統におけるＧ１４４の前のブロックの補間処理に並行して行われ、この補間処理が完了する以前に完了することができる。
【０２０１】
先読み起動が可能でない場合には、親系統のＧ１４４指令の前ブロックの動作が完了していることを待つが（ステップＳ７６２）、先読み起動が可能であれば、親系統のＧ１４４指令の前ブロックの動作完了を待たずにブロック実行データをセットし（ステップＳ７６３）、補間処理を実行する（ステップＳ７６４）。
【０２０２】
これにより親系統におけるＧ１４４の前のブロックの実行中にサブ系統第１ブロックを実行開始することになる。
【０２０３】
上述の動作により、サブ系統起動指令の解析段階で、サブ系統の第１ブロックの解析処理が開始され、親系統でサブ系統起動指令ブロツクを処理する時には既に先読みでサブ系統を実行開始することができる。このため、加工サイクルにおいて、サブ系統の起動処理に要する時間をなくす事ができ、サイクル時間が短縮される。
【０２０４】
図２３は先読みサブ系統起動処理を含む加工プログラム例を、図２４は先読みサブ系統起動処理が適用される工作機械（自動旋盤）を示している。
【０２０５】
この場合、系統１でＧ１４４指令を先読みして解析処理を行った時点で、サブ系統［３］を起動するため、系統１の工具１が切り上げ動作（Ｇ０Ｘ１０指令）を行いつつ、Ｇ０Ｘ０．Ｚ３．０指令で、サブ系統［３］のセンタ穴空け工具（工具２）が加工開始位置に位置決めすることができる。
【０２０６】
なお、切り上げ指令の前に、Ｇ１４４指令が行われれば、先読みが行われなくとも工具１による切り上げ動作と工具２の位置決め動作とを並行させて行うことが可能であるが、この場合には切り上げ動作時にサブ系統［３］の起動処理時間がかかるため、系統１の加工に影響を与えることになる。
【０２０７】
これに対して、上述のように先読み起動を行うことによって、系統１に影響を与えずにサブ系統［３］の起動を早めることができる。
【０２０８】
（補助機能コードサブ系統直接呼出し処理）
補助機能コードサブ系統起動パラメータテーブル７２１は、メインプログラムにおいてサブ系統を直接起動できる補助機能コード（Ｍ１１４）を設定する。
【０２０９】
補助指令／サブ系統起動処理選択部７０４は、メインプログラムにおいて指令された補助機能コードがサブ系統の起動を指令する補助指令か、それ以外の補助指令であるかを選択（判別）する。
【０２１０】
解析処理部１０２ａにて補助指令／サブ系統起動処理選択部７０４によってＭＳＴＢ（補助機能コード）指令が選択されると、補助機能コードサブ系統起動パラメータテーブル７２１をチェックし、補助機能コードサブ系統起動の設定があれば、同じく設定されているサブ系統起動データを解析処理起動部７０３によってサブ系統起動データテーブル７２０にセットし、サブ系統解析処理部を起動する。
【０２１１】
つぎに、図２５、図２６を参照して補助機能コードによるサブ系統直接呼出し処理について説明する。
【０２１２】
図２５は親系統による補助機能コードサブ系統直接呼出し処理ルーチンを示している。親系統では、先ず指令がＭＳＴＢ指令であるか否かを判別し（ステップＳ７７０）、ＭＳＴＢ指令でない場合には、他の処理を行う（ステップＳ７７１）。ＭＳＴＢ指令の場合には、補助指令／サブ系統起動処理選択部７０４によって補助機能コードサブ系統起動パラメータテーブル７２１に補助機能コードサブ系統起動の設定があるか否かを判別する（ステップＳ７７２）。この設定がない場合には、他の補助機能指令処理を行う（ステップＳ７７３）。
【０２１３】
補助機能コードサブ系統起動の設定がある場合には、解析処理起動部７０３によってサブ系統起動データをサブ系統起動データテーブル７２０にセットし（ステップＳ７７４）、サブ系統解析処理部を起動する（ステップＳ７７５）。
【０２１４】
図２６は、系統１で、サブ系統を直接起動するＭ１１４指令が解析された場合に、ユーザプログラムからサブ系統［４］が直接起動されることを示すイメージ図である。
【０２１５】
これによりオペレータが指令した補助指令によってマイクプログラムを介さずにサブ系統を直接起動できるから、マイクプログラムの起動時間を短縮でき、またプログラム長を短縮でき、メモリを節約することができる。
【０２１６】
（起動系統自動選択処理）
系統起動制御テーブル７２２は、解析処理起動部７０３とリンクし、各処理系列（各処理系統）の一連処理の実行状態を示すデータを書き込まれる。この系統起動制御テーブル７２２は、系統情報テーブルであり、各系統毎に系統専有フラグのオンオフ状態を書き込まれる。ここでは、系統専有フラグがオンであれば、その系統は既に親系統あるいはサブ系統を割り付けられて使用中であることを示す。
【０２１７】
親系統の解析処理部１０２ａの起動系統選択部７０５は、系統起動に際して、すなわちサブ系統を起動する際に、系統起動制御テーブル７２２に書き込まれたデータより一連処理を実行していない処理系列を選び、起動する系統の一連処理を実行させるように割り付ける。
【０２１８】
図２７は起動系統自動選択処理によるサブ系統解析部の起動処理ルーチンを示している。親系統の解析処理部１０２ａは、先ず系統ループカウンタをセットする（ステップＳ７８０）。つぎに、親系統の解析処理部１０２ａの起動系統選択部７０５は、予め定義された系統毎のパラメータ値によってサブ系統起動用の系統であるか否か（起動させる系統がサブ系統であるか否か）を確認し（ステップＳ７８１）、サブ系統起動用の系統であれば（起動させる系統がサブ系統であれば）、同起動系統選択部７０５が系統起動制御テーブル７２２のなかのサブ系統使用情報（系統占有フラグ）をもってサブ系統運転中でないか否かを判別する（ステップＳ７８２）。確認したサブ系統が使用中でなければ、系統起動制御テーブル７２２の系統起動フラグ（系統占有フラグ）をオンし、新たに設定した系統起動制御テーブル７２２にサブ系統識別番号データをセットする（ステップＳ７８３）。
【０２１９】
使用していないサブ系統が見つからない場合には、系統ループカウンタでセットした回数だけ使用中でないサブ系統が見つかるまでループを繰り返す（ステップＳ７８４）。なお、系統ループカウンタでセットした回数だけループを繰り返しても使用中でないサブ系統が見つからない場合にはサブ系統起動不可フラグをオンする（ステップＳ７８５）。
【０２２０】
このように、系統起動の度にその場で使用中でないサブ系統を割り当てるようにしているので、周辺軸などを動作させたい場合に、従来のように周辺軸の個数だけサブ系統を必要とすることがなくなり、プログラム用に使用するメモリを削減することができる。また、同時に実行する系統数が数値制御装置の処理能力によって決まる系統数内であれば、何系統でも発生させることができる。
【０２２１】
（サブ系統プログラム共用処理）
各解析処理部に設けられている加工プログラム選択部７０１は、ある系統においてサブ系統で実行するように指令されたプログラム番号の加工プログラムが同一系統の加工プログラムとして存在するか否かを判別し、同一系統で指令プログラム番号の加工プログラムが存在する場合にはその加工プログラムを選択し、同一系統で指令プログラム番号の加工プログラムが存在しない場合には予め設定された系統、例えば系統１に存在する指令プログラム番号と同一のプログラム番号の加工プログラムを選択する。
【０２２２】
図２８はサブ系統プログラム共用処理におけるサブ系統実行プログラム選択処理ルーチンを示している。先ず、指令されたプログラム番号の、呼び出した系統と同じ系統の加工プログラムが空であるか否かを判別する（ステップＳ７９０）。これは、例えば、系統２で、プログラム番号が９１０１の加工プログラムの呼び出しを行った場合に、系統２にプログラム番号が９１０１の加工プログラムが存在するか否かと云うことである。
【０２２３】
空でない場合には、起動するサブ系統では、指令されたプログラム番号の、メイン系統（同系統）の加工プログラムを実行する（ステップＳ７９１）。
【０２２４】
空の場合には、指令されたプログラム番号の、系統１の加工プログラムが空きであるか否かを判別し（ステップＳ７９２）、空でない場合には、起動するサブ系統では、指令されたプログラム番号の、系統１の加工プログラムを実行する（ステップＳ７９３）。なお、指令されたプログラム番号の、系統１の加工プログラムが空きである場合には、指令されたプログラム番号の加工プログラムを実行することができないから、エラー処理を行う（ステップＳ７９４）。
【０２２５】
これによりサブ系統で実行する加工プログラムを総て系統１に記述することができる。
【０２２６】
図２９（ａ）は図３０に示されているようなセパレータ付き自動旋盤の加工プログラムの構成例を示している。この加工プログラムでは、系統１（工具１切削プログラム）と系統２（工具２切削プログラム）の共通の加工プログラムとして、プログラム番号が「９１０１」のセパレータ制御プログラムが系統１にのみ存在する。
【０２２７】
図２９（ｂ）に示されているように、系統１において、Ｇ１４４指令で、Ａ９１０１のプログラム番号が指定されても、系統２において、Ｇ１４４指令で、Ａ９１０１のプログラム番号が指定されても、サブ系統［１］におけるプログラム番号９１０１のセパレータ制御プログラムが起動する。換言すれば、プログラム番号９１０１のセパレータ制御プログラムは系統１と系統２とで共用し、系統１がそのプログラムの書庫系統になる。
【０２２８】
このことにより各系統毎のプログラム作成の手間を省くことができ、併せてメモリを節約できる。
【０２２９】
（系統間同期無効処理）
補間処理部１０３に設けられている系統間同期処理部７１２は系統間同期の補間処理を行い、系統間同期無効処理部７１３はシングルブロック運転時に系統間同期処理部７１２による系統間同期の補間処理を選択的に同期処理の対象より除外する。ここで云う系統間とは（親）系統間、（親）系統とサブ系統間のいずれを含むものである。
【０２３０】
図３１は系統間同期無効処理ルーチンを示している。先ず、シングルブロック要求があるか否かを判別し（ステップＳ８００）、シングルブロック要求がある場合にはシングルブロック停止する（ステップＳ８０１）。
【０２３１】
つぎに多系統シングルブロックが有効であるか否かを判別し（ステップＳ８０２）、多系統シングルブロックが有効であれば、系統ループカウンタデータをセットする（ステップＳ８０３）。
【０２３２】
つぎに系統間同期無効処理部７１３によって系統間同期無効が行われている否かを判別する（ステップＳ８０４）。系統間同期無効でない場合には、フィードホールド停止するが（ステップＳ８０５）、系統間同期無効の場合にはフィードホールド停止を行わず、動作を続行する。この系統間同期無効の有無を系統ループカウンタにセットされた回数繰り返す（ステップＳ８０６）。
【０２３３】
図３２は系統間同期無効のプログラム例を示している。系統１において、Ｍ１１１指令によりサブプログラムの呼び出しが行われ、サブプログラムがＧ１４４でサブ系統［１］（チャック開動作系統）を起動する。サブ系統の"＃３００３＝８；"の指令によりチャック開動作は系統間同期無効を宣言する。
【０２３４】
これにより、多系統シングルブロック運転時の系統１のシングルブロックによってサブ系統［１］のチャック開動作が途中で停止しない。
【０２３５】
【発明の効果】
以上の説明したように、この発明による数値制御装置によれば、系統起動の度にその場で使用中でない系統を割り当てるようにしているので、周辺軸などを動作させたい場合に、従来のように周辺軸の個数だけ系統を必要とすることがなくなり、プログラム用に使用するメモリを削減することができる。
【０２３６】
つぎの発明によれば、系統起動の度にその場で使用中でないサブ系統を割り当てるようにしているので、周辺軸などを動作させたい場合に、従来のように周辺軸の個数だけサブ系統を必要とすることがなくなり、プログラム用に使用するメモリを削減することができる。
【０２３７】
つぎの発明による数値制御装置によれば、サブ系統の制御軸がメイン系統の制御軸と干渉しない位置に移動した時点で、完了待ちをキャンセルすることができるから、メイン系統は次ブロックを実行し、それと並行してサブ系統が続けてプログラムを実行するから、サイクルタイムを短縮できる。
【０２３８】
つぎの発明による数値制御装置によれば、サブ系統起動指令の前ブロックの指令による軸指令中にサブ系統起動指令を実行してサブ系統を起動開始できるから、サイクルタイムを短縮できる。
【０２３９】
つぎの発明による数値制御装置によれば、オペレータが指令した補助機能コードによってサブ系統を直接起動できるから、サイクルタイムを短縮できる。
【０２４０】
つぎの発明による数値制御装置によれば、同一動作の周辺軸などのプログラムは各系統で共用され、このプログラムは１系統にのみ記述されればよいから、加工プロクラムの作成が容易になり、またメモリを節約することができる。
【０２４１】
つぎの発明による数値制御装置によれば、シングルブロック運転において、系統間同期を選択的に無効にすることができるから、ある系統がシングルブロック停止しても、他の系統がフィードホルード状態とすることを回避でき、例えば、チャック開閉など、従来は油圧で制御していた機構をサーボ軸で制御させるような場合でも、チャック開閉が途中で止まることがなく、油圧動作時と同等の動作状態が得られるようなる。
【図面の簡単な説明】
【図１】  この発明による数値制御装置の実施の形態１を示すブロック線図である。
【図２】  この発明による数値制御装置によって制御される加工システムの一具体例を示す説明図である。
【図３】  この発明による数値制御装置の実施の形態２を示すブロック線図である。
【図４】  （ａ）、（ｂ）は補助指令によりプログラム並列運転カウンタをセットまたはリセットするためのシーケンスプログラムを示すフローチャートである。
【図５】  （ａ）、（ｂ）は実施の形態２の数値制御装置にて使用されるメインプログラムとサブプログラムとを示すリスト図である。
【図６】  この発明による数値制御装置の実施の形態３を示すブロック線図である。
【図７】  （ａ）〜（ｄ）は実施の形態３の数値制御装置にて使用されるメインプログラム（系統１）とサブプログラムとメインプログラム（系統２）と起動条件設定プログラムの一具体例を示すリスト図である。
【図８】  この発明による数値制御装置の実施の形態４を示すブロック線図である。
【図９】  実施の形態４の数値制御装置にて使用される補助指令処理時間定義テーブルの例を示す説明図である。
【図１０】  （ａ）、（ｂ）は実施の形態４の数値制御装置にて使用されるメインプログラムとサブプログラムとの例を示すリスト図である。
【図１１】  実施の形態４の数値制御装置におけるプログラム起動時間調整処理フローを示すフローチャートである。
【図１２】  実施の形態４の数値制御装置によって制御される工作機械の一具体例を示す説明図である。
【図１３】  この発明による数値制御装置の実施の形態５を示すブロック線図である。
【図１４】  （ａ）、（ｂ）は実施の形態５の数値制御装置にて使用されるメインプログラムとサブプログラムとの例を示すリスト図である。
【図１５】  実施の形態５の数値制御装置におけるプログラム起動時間調整処理フローを示すフローチャートである。
【図１６】  実施の形態５の数値制御装置におけるメインプログラムとサブプログラムの実行動作例を示すタイミングチャートである。
【図１７】  この発明による数値制御装置の実施の形態６を示すブロック線図である。
【図１８】  （ａ）、（ｂ）は実施の形態６の数値制御装置にて使用されるメインプログラムとサブプログラムとの例を示すリスト図である。
【図１９】  この発明による数値制御装置の実施の形態７を示すブロック線図である。
【図２０】  （ａ）は完了待ちキャンセル処理のサブ系統側のフローチャート、（ｂ）は完了待ちキャンセル処理の親系統側のフローチャートである。
【図２１】  完了待ちキャンセルの加工プログラム例を示す説明図である。
【図２２】  （ａ）は先読みサブ系統起動処理の親系統おけるサブ系統処理ルーチンを示すフローチャート、（ｂ）は先読みサブ系統起動処理のサブ系統おける加工プログラム実行プロセス処理ルーチンを示すフローチャートである。
【図２３】  先読みサブ系統起動の加工プログラム例を示す説明図である。
【図２４】  先読みサブ系統起が適用される工作機械の一例を示す説明図である。
【図２５】  補助機能コードサブ系統呼出し処理ルーチンを示すフローチャートである。
【図２６】  補助機能コードサブ系統呼出しの加工プログラム例を示す説明図である。
【図２７】  起動系統自動選択処理ルーチンを示すフローチャートである。
【図２８】  サブ系統実行プログラム選択処理ルーチンを示すフローチャートである。
【図２９】  （ａ）はセパレータ付き自動旋盤の加工プログラムの構成例を示す説明図、（ｂ）はサブ系統プログラム共用の加工プログラム例を示す説明図である。
【図３０】  サブ系統プログラムを共用できるセパレータ付き自動旋盤を示す説明図である。
【図３１】  系統間同期無効処理ルーチンを示すフローチャートである。
【図３２】  系統間同期無効のプログラム例を示す説明図である。
【図３３】  従来における数値制御装置の一例を示すブロック線図である。
【符号の説明】
１００  系統１軸定義部，１０１  系統１メインプログラム，１０２  系統１解析処理部，１０２ａ，１０２ｂ  解析処理部，１０３  補間処理部，１０４  軸制御部，１０５  軸移動量出力回路，１０６  サーボ制御部，１０７  サーボモータ，１１０  系統２軸定義部，１１１  系統２メインプログラム，１１２  系統２解析処理部，１１６  サーボ制御部，１１７  サーボモータ，１２０  ＄［１］軸定義部，１２１  サブプログラム，１２２  ＄［１］解析処理部，１２６  サーボ制御部，１２７  サーボモータ，１３０  ＄［２］軸定義部，１３１サブプログラム，１３２  ＄［２］解析処理部，１３６  サーボ制御部，１３７  サーボモータ，１４０  パラメータ設定部，１４１  メモリ，１４２  画面表示部，１４３  表示ユニット，１４５，メモリ，１５１  機械制御信号処理部，１５２  シーケンス回路，１５５  主軸回転数出力回路，１５６  主軸制御部，１５７  主軸モータ，２００  補間処理手段，２０１  直列並列切り換え処理部，２０２  プログラム並列運転カウンタ，２０３  カウンタ入力部，３０１  起動条件設定プログラム，３０２  起動条件解析処理部，３０３  プログラム起動条件判定部，３０４  ＮＣステータステーブル，３０５  プログラム起動処理部，４０１  ＄１ブロック実行時間計算処理部，４０２  補間時間計算処理部，４０３  補助指令処理時間定義テーブル，４０４  プログラム実行時間計算処理部，４０５  プログラム起動時間調整処理部，４０６  軸移動遅延時間補正処理部，４１１  ＄２ブロック実行時間計算処理部，４２１  ＄［１］ブロック実行時間計算処理部，４３１  ＄［２］ブロック実行時間計算処理部，５０１  ＄１ブロック実行時間計算処理部，５０２  軸移動指令実行時間処理部，５０３  補助指令処理時間定義テーブル，５０４  プログラム実行時間計算処理部，５０５移動速度計算処理部，５０６  補間時間計算処理部，５１１  ＄２ブロック実行時間計算処理部，５２１  ＄［１］ブロック実行時間計算処理部，５３１  ＄［２］ブロック実行時間計算処理部，６０１  完了チェック条件設定プログラム，６０２  完了チェック条件解析処理部，６０３  完了チェック条件判定部，６０４  ＮＣステータステーブル，６０５  完了チェックカウンタ，６０６  メインプログラム再開処理部，７０１  加工プログラム選択部，７０２  完了待ちキャンセル処理部，７０３  解析処理起動部，７０４  補助指令／サブ系統起動処理選択部，７０５  起動系統選択部，７１０  ブロック実行調整部，７１１  ブロック実行タイミング調整部，７１２  系統間同期処理部，７１３  系統間同期無効処理部，７２０  サブ系統起動データテーブル，７２１  補助機能コードサブ系統起動パラメータテーブル，７２２  系統起動制御テーブル。
【図１】
0003761179.tif 000002
【図２】
0003761179.tif 000003
【図３】
0003761179.tif 000004
【図４】
0003761179.tif 000005
【図５】
0003761179.tif 000006
【図６】
0003761179.tif 000007
【図７】
0003761179.tif 000008
【図８】
0003761179.tif 000009
【図９】
0003761179.tif 000010
【図１０】
0003761179.tif 000011
【図１１】
0003761179.tif 000012
【図１２】
0003761179.tif 000013
【図１３】
0003761179.tif 000014
【図１４】
0003761179.tif 000015
【図１５】
0003761179.tif 000016
【図１６】
0003761179.tif 000017
【図１７】
0003761179.tif 000018
【図１８】
0003761179.tif 000019
【図１９】
0003761179.tif 000020
【図２０】
0003761179.tif 000021
【図２１】
0003761179.tif 000022
【図２２】
0003761179.tif 000023
【図２３】
0003761179.tif 000024
【図２４】
0003761179.tif 000025
【図２５】
0003761179.tif 000026
【図２６】
0003761179.tif 000027
【図２７】
0003761179.tif 000028
【図２８】
0003761179.tif 000029
【図２９】
0003761179.tif 000030
【図３０】
0003761179.tif 000031
【図３１】
0003761179.tif 000032
【図３２】
0003761179.tif 000033
【図３３】
0003761179.tif 000034