(57)【要約】【課題】カスタムマクロ変数が変更される場合でも、誤動作を防止し、かつ移動速度を保持して、動作時間を短縮できる数値制御装置を提供する。【解決手段】ＮＣプログラムを１ブロック毎読み出し解析し、解析結果を先読みバッファに保存する(102)。先読み停止コードがあれば、パラメータ又はプログラムで指定されている再開許容ブロック数を内部変数にセットする(104〜107)。又、先読み停止フラグを１にセットし先読み処理を停止させる(108,100)。本実行時には、先読みバッファから先入れ先出し方式で解析結果を取り出し実行する。又、先読み停止フラグを１のときには、先読みバッファに残るブロック数が再開許容ブロック数に達したとき、先読み停止フラグを０にセットし、先読み処理を再開させる。指定する再開許容ブロック数によって、誤動作を防止させることができ、かつ移動速度が０になることはなく動作時間を短縮できる。【選択図】図２
2008040542.tif 000002
【特許請求の範囲】
【請求項１】
ＮＣプログラムの各ブロックの指令を順次先読み出し該指令を解析して、該解析結果をバッファに保存する先読み処理を実行し、該バッファに保存された解析結果を順次１ブロック毎取り出して該バッファから削除すると共に該ブロックの指令を実行する数値制御装置において、
ＮＣプログラムから先読みを停止させるコードが挿入されたブロックが読み出されると前記先読み処理を停止させる手段と、
前記バッファに残るブロック数が指定されている先読み再開許容ブロック数と一致したか判別する判別手段と、
該判別手段で前記バッファに残るブロック数と前記再開許容ブロック数が一致したことが判別されると、前記先読み処理を再開させる手段と、
を備えることを特長とする数値制御装置。
【請求項２】
前記先読み再開許容ブロック数はパラメータであらかじめ設定されるものである請求項１に記載の数値制御装置。
【請求項３】
前記先読み再開許容ブロック数は前記ＮＣプログラムで指令するものである請求項１に記載の数値制御装置。
【請求項４】
ＮＣプログラムの各ブロックの指令を順次先読み出し該指令を解析して、該解析結果をバッファに保存する先読み処理を実行し、該バッファに保存された解析結果を１ブロック毎取り出し該ブロックの指令を実行する数値制御装置において、
前記先読みバッファより先読みを停止させるコードが挿入されたブロックが読み出されると前記先読み処理を停止させる手段と、
ＮＣプログラムから先読み再開コードが読み出されると前記先読み処理を再開させる手段と、
を備えることを特長とする数値制御装置。
【請求項５】
ＮＣプログラムの各ブロックの指令を順次先読み出し該指令を解析して、該解析結果をバッファに保存する先読み処理を実行し、該バッファに保存された解析結果を順次１ブロック毎取り出して該バッファから削除すると共に該ブロックの指令を実行する数値制御装置において、
カスタムマクロ変数を変更するブロックの指令が読み込まれたとき、前記先読みバッファに保存されているブロックを検索して、このカスタムマクロ変数に関係するコードを検出する第１の検索手段と、
該第１の検索手段で前記カスタムマクロ変数に関係するコードを検出したら、当該解析中のブロックの解析とその解析結果の先読みバッファへの保存を停止すると共に、ＮＣプログラムのブロックの前記先読み処理を停止させる先読み停止手段と、
該先読み停止手段で先読み処理が停止されているときに、前記バッファに残されているブロックを検索して、前記カスタムマクロ変数に関係するコードを検出する第２の検索手段と、
該第２の検索手段で、前記カスタムマクロ変数に関係しているコードが含まれていないことが判定されたとき、前記解析を停止し先読みバッファへの解析結果の保存を停止したブロックから先読み処理を再開させる手段と、
を備えたことを特長とする数値制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数値制御装置に関し、先読み停止制御を実行する数値制御装置に関する。
【背景技術】
【０００２】
数値制御装置においては、ＮＣプログラムを１ブロック毎先読みしてその指令を解析しその解析結果（実行データ）を先読みバッファに１ブロック毎保存する先読み処理と、該先読みバッフアに保存された解析結果（実行データ）を先入れ先出し（ＦＩＦＯ）方式で読み出し、実行する本実行処理とを並行して実施している。  
又、数値制御装置で制御する機械に、ある所定の動作を行わせるための一群の指令を、該機械を使用するユーザがユーザ独自のプログラムとして作成し、サブプログラムと同様に必要なときに呼び出して実行することができるようにしたプログラムとしてカスタムマクロが知られている。このカスタムマクロはカスタムマクロ変数を使用して作成されるものであるが、そのカスタムマクロ変数が所望の値になった後実行されるべきにも拘わらず、その値にならないうちに処理だけ先走って、先読み処理が実行される場合がある。
【０００３】
例えば、工具径補正機能を有効にするコードと補正量が指令された指令と工具径補正をキャンセルする指令がプログラムされ、その後、カスタムマクロ変数によって工具径補正を計算し変更する指令がある場合で、先読み処理によって、工具径補正機能を有効にするコードと補正量が指令された指令と工具径補正をキャンセルする指令が先読みバッファに格納されて、いまだ本実行されていない状態で、カスタムマクロ変数によって工具径補正を計算し変更する指令のブロックが読み込まれ、先読みバッファの保存処理がなされると、このとき、カスタムマクロ変数の計算を事前に行っているので、当初プログラムで指令した工具径補正量と異なった、意図しない補正量で加工がなされることになり、誤った加工がなされることになる。
【０００４】
このような不具合をなくすために、カスタムマクロ変数を使用した処理の前に、先読みを停止させる意味を持ったコードが挿入されたブロックを挿入して、このブロックで先読みブロック数を０にしてから、次のカスタムマクロ変数を使用したプログラムを実行する等の方法が従来から一般的に使用されている。
【０００５】
例えば、確定しない変数を含む指令が先読み処理で読み込まれたとき、その指令の解読に必要のない変数か判断し、必要がないときには、この変数に対応するフラグを立てて記憶し、その命令の解読に、変数が確定していることが必要である場合には、該変数に対応してフラグが立っているか否か判断し、立っていると先読みを停止し、この変数に対する処理が実行されたフラグが下ろされると、先読み処理を開始するようにした発明が知られている（特許文献１参照）。
【０００６】
【特許文献１】特許第２９０６７５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来から一般的に用いられている、カスタムマクロ変数を使用した処理の前に、先読みを停止させる意味を持ったコードが挿入されたブロックを挿入して、このブロックで先読みを０にしてから、次のカスタムマクロ変数を使用したプログラムを実行する方法を採用した場合、先読みを停止させるコードが挿入されたブロック以降のプログラムの先読みが一切行われなくなり、先読みを停止するコードが挿入されたブロックの実行が終了したことをもって、その後のプログラムの先読みが再開される制御となっていた。そのため先読み停止させたブロックと次のブロックの間で速度が０となり、加工時間が増大するという欠点があった。  
又、前述した特許文献１に記載された方法では、変数が一旦確定した後、その後変更されるような場合には、適用ができないという問題がある。
【０００８】
そこで、本発明の目的は、カスタムマクロ変数が変更される場合でも、誤動作を防止し、かつ移動速度を保持して、動作時間を短縮できる数値制御装置を提供することにある。
【課題を解決するための手段】
【０００９】
本願請求項１に係る発明は、ＮＣプログラムの各ブロックの指令を順次先読み出し該指令を解析して、該解析結果をバッファに保存する先読み処理を実行し、該バッファに保存された解析結果を順次１ブロック毎取り出して該バッファから削除すると共に該ブロックの指令を実行する数値制御装置において、ＮＣプログラムから先読みを停止させるコードが挿入されたブロックが読み出されると前記先読み処理を停止させる手段と、前記バッファに残るブロック数が指定されている先読み再開許容ブロック数と一致したか判別する判別手段と、該判別手段で前記バッファに残るブロック数と前記再開許容ブロック数が一致したことが判別されると、前記先読み処理を再開させる手段とを備えることによって、先読み処理の停止と、先読み処理の再開するタイミングを任意に設定できるようにしたものである。前記先読み再開許容ブロック数を、請求項２に係る発明はパラメータで設定するものとし、請求項３に係る発明は、前記ＮＣプログラムで指令するものとした。
【００１０】
又、請求項４に係る発明は、ＮＣプログラムの各ブロックの指令を順次先読み出し該指令を解析して、該解析結果をバッファに保存する先読み処理を実行し、該バッファに保存された解析結果を１ブロック毎取り出し該ブロックの指令を実行する数値制御装置において、前記先読みバッファより先読みを停止させるコードが挿入されたブロックが読み出されると前記先読み処理を停止させる手段と、ＮＣプログラムから先読み再開コードが読み出されると前記先読み処理を再開させる手段とを備えることによって、先読み処理の停止と、先読み処理の再開するタイミングを任意に設定できるようにしたものである。
【００１１】
請求項５に係る発明は、ＮＣプログラムの各ブロックの指令を順次先読み出し該指令を解析して、該解析結果をバッファに保存する先読み処理を実行し、該バッファに保存された解析結果を順次１ブロック毎取り出して該バッファから削除すると共に該ブロックの指令を実行する数値制御装置において、カスタムマクロ変数を変更するブロックの指令が読み込まれたとき、前記先読みバッファに保存されているブロックを検索して、このカスタムマクロ変数に関係するコードを検出する第１の検索手段と、該第１の検索手段で前記カスタムマクロ変数に関係するコードを検出したら、当該解析中のブロックの解析とその解析結果の先読みバッファへの保存を停止すると共に、ＮＣプログラムのブロックの前記先読み処理を停止させる先読み停止手段と、該先読み停止手段で先読み処理が停止されているときに、前記バッファに残されているブロックを検索して、前記カスタムマクロ変数に関係するコードを検出する第２の検索手段と、該第２の検索手段で、前記カスタムマクロ変数に関係しているコードが含まれていないことが判定されたとき、前記解析を停止し先読みバッファへの解析結果の保存を停止したブロックから先読み処理を再開させる手段とを備えるものとして、ＮＣプログラムの指令から自動的に先読み停止、再開を制御して、誤動作の発生を防止した。
【発明の効果】
【００１２】
先読み処理を停止して、該先読み処理を停止したブロックが実行される前に、先読み処理を開始させ、しかも、誤動作が発生しないように先読み停止、先読み再開のタイミングを決定できるので、誤動作もなく、かつ、先読み処理の停止のブロックと次のブロックの指令間で、速度が０となることを防止できるから、効率の良い動作を実行できる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の一実施形態を図面と共に説明する。  
図１は、本発明の一実施形態の数値制御装置の要部ブロック図である。  
ＣＰＵ１１は数値制御装置１０を全体的に制御するプロセッサである。該ＣＰＵ１１にはバス１８を介してメモリ１２、ＰＭＣ（プログラマブル・マシン・コントローラ）１３、各送り軸のサーボモータＭを制御する軸制御回路１４、主軸モータＳＭを制御するスピンドル制御回路１６が接続されている。メモリ１２は、ＲＯＭ，ＲＡＭ、不揮発性ＲＡＭ等で構成されており、ＣＰＵ１１は、メモリ１２に格納されたシステムプログラムを、バス１８を介して読み出し、該システムプログラムに従って数値制御装置全体を制御する。又、メモリ１２には、ＣＲＴや液晶等で構成される表示器とキーボード等で構成される表示器／ＭＤＩ（手動入力）ユニット２０を介してオペレータが入力した設定値等の各種データが格納されていると共に、図示していないインターフェイスを介して読み込まれた加工プログラムや表示器／ＭＤＩ（手動入力）ユニット２０を介して入力された加工プログラム等が記憶される。
【００１４】
ＰＭＣ１３は、内蔵されたラダー等のシーケンスプログラムで制御対象物の工作機械の補助装置、周辺機器に信号を出力し制御する。また、数値制御装置１０で制御される制御対象物である工作機械の本体に配備された操作盤の各種スイッチ等の信号を受け、必要な信号処理をした後、ＣＰＵ１１に渡す。  
各軸の軸制御回路１４はＣＰＵ１１からの各軸の移動指令量を受けて、各軸の指令をサーボアンプ１５に出力する。サーボアンプ１５はこの指令を受けて、機械（制御対象物）の各軸のサーボモータＭを駆動する。各軸のサーボモータＭは位置・速度検出器２１を内蔵し、この位置・速度検出器２１からの位置、速度フィードバック信号をそれぞれの軸制御回路１４にフィードバックし、各軸制御回路１４は、位置・速度のフィードバック制御を行う。
【００１５】
また、スピンドル制御回路１６はＣＰＵ１１から、主軸回転指令を受け、スピンドルアンプ１７にスピンドル速度信号を出力する。スピンドルアンプ１７はスピンドル速度信号を受けて、主軸モータＳＭを指令された回転速度で回転させる。ポジションコーダ２２は、主軸モータＳＭ、又は主軸の回転に同期して帰還パルスをスピンドル制御回路１６にフィードバックし、スピンドル制御回路１６はＣＰＵ１１からの主軸回転指令とこのフィードバック信号に基づいて速度制御を行う。
【００１６】
上述した、数値制御装置１０の構成は、従来の数値制御装置の構成と同じであるが、メモリ１２に格納された先読み処理、及び本実行処理を行うソフトウェアが従来と異なる点において相違し、本発明はこの点に特徴を有するものである。
【００１７】
図２は、本発明の実施形態における第１の態様の先読み停止、再開処理のアルゴリズムを示すフローチャートである。又、図３は、この第１の態様における本実行処理のアルゴリズムを示すフローチャートである。  
この第１の形態では、先読みを停止させるコードが設けられると共に、先読み再開を許容するブロック数を指定するか、先読み再開許容コードを設けて、先読み停止と再開を制御するものである。
【００１８】
先読みを停止させるコードと、先読み再開を許容するブロック数をパラメータで設定することにより、先読み停止、再開処理を行う場合のＮＣプログラムの例を次に示す。
【００１９】
先読みを停止させるコードを「Ｍ３３」とし、先読みするブロック数（先読みバッファに格納される最大ブロック数）は「３０」とし、先読み再開許容ブロック数を「５」に設定されているときのプログラム例である。以下このプログラム例をプログラム例１という。
プログラム例１
O0001;
N01 G90 G00 X0. Y0. ;
N02 G41 D10 G01 X100 Y100 F500.;
N03 X100. Y200. ;
N04 X200. Y200. ;
N05 X200. Y100. ;
N06 X100. Y100. ;
N07 G40 X0 Y0 ;
N08 G01 X-100 Y100.;
N09 X-100. Y200. ;
N10 X-200. Y200. ;
N11 X-200. Y100. ;
N12 X-100. Y100. ;
N13 X0 Y0 M33 ;
N14 #13010 = #100 + 0.5(CHANGE VALUE=D10) ;
N15 G41 D10 G01 X-100 Y-100 F500.;
N16 X-100. Y-200. ;
N17 X-200. Y-200. ;
N18 X-200. Y-100. ;
N19 X-100. Y-100. ;
N20 G40 X0 Y0 ;
M30;
このプログラム例において、「Ｏ０００１」はプログラム番号、Ｎ０１〜Ｎ２０はシーケンス番号、「Ｇ９０」はアブソリュート指令を示す準備機能のコード、「Ｇ００」は位置決め指令を示す準備機能のコード、「Ｇ４１」は工具径補正の準備機能コードで、「Ｄ１０」の「Ｄ」は補正量を指定するコードで、「Ｄ１０」はオフセット番号１０の値を使用することを指令するコードである。又、「Ｇ０１」は直線補間を指令する準備機能コード、「Ｘ□□」及び「Ｙ□□」は、Ｘ軸、Ｙ軸指令位置、「Ｆ□□」は速度指令、「Ｇ４０」は工具径補正キャンセルを指令する準備機能コード、「＃１３０１０」は、オフセット番号１０の値を変更するカスタムマクロ変数であり、シーケンス番号Ｎ１４の指令は、カスタムマクロ変数＃１００の値に０．５を加算し、この値を工具径補正量とする指令である。なお、シーケンス番号Ｎ１４のカッコ書きの部分はコメントである。又、「Ｍ３０」はプログラムエンドを示すコードである。
【００２０】
このプログラム例では、シーケンス番号「Ｎ０２」で、オフセット番号１０番の値で工具径補正をすることを指令し、シーケンス番号「Ｎ０７」でこの工具径補正をキャンセルし、シーケンス番号「Ｎ１３」で、Ｍ３３のコードにより先読みを停止させ、シーケンス番号「Ｎ１４」でカスタムマクロ変数によりオフセット番号１０番の値を変更し、シーケンス番号「Ｎ１５」で、この変更されたオフセット番号１０番の値で工具径補正をすることを指令し、シーケンス番号「Ｎ２０」でこの工具径補正をキャンセルするように指令したプログラムである。
【００２１】
又、次に示すプログラム例（以下この例をプログラム例２という）は、先読み再開許容ブロック数をパラメータ設定ではなく、プログラムで指令するときの例であり、シーケンス番号「Ｎ１３」のコード「Ｍ３３」に続くＰコードで先読み再開許容ブロック数を指定するもので、この例では「５」が指定されている。他の指令は、プログラム例１と同じであり、先読みするブロック数（先読みバッファに格納される最大ブロック数）も３０としておりプログラム例１と同じである。
プログラム例２
O0001;
N01 G90 G00 X0. Y0. ;
N02 G41 D10 G01 X100 Y100 F500.;
N03 X100. Y200. ;
N04 X200. Y200. ;
N05 X200. Y100. ;
N06 X100. Y100. ;
N07 G40 X0 Y0 ;
N08 G01 X-100 Y100.;
N09 X-100. Y200. ;
N10 X-200. Y200. ;
N11 X-200. Y100. ;
N12 X-100. Y100. ;
N13 X0 Y0 M33 P5 ;
N14 #13010 = #100 + 0.5(CHANGE VALUE=D10) ;
N15 G41 D10 G01 X-100 Y-100 F500.;
N16 X-100. Y-200. ;
N17 X-200. Y-200. ;
N18 X-200. Y-100. ;
N19 X-100. Y-100. ;
N20 G40 X0 Y0 ;
M30;
【００２２】
次に示すプログラム例３は、先読み再開を指令するコード「Ｍ３２」を設けて、先読み再開を制御するときのプログラム例である。この例では、シーケンス番号「Ｎ０８」に先読み再開を指令するコード「Ｍ３２」が付加されている点で、プログラム例１と相違するのみである。
プログラム例３
O0001;
N01 G90 G00 X0. Y0. ;
N02 G41 D10 G01 X100 Y100 F500.;
N03 X100. Y200. ;
N04 X200. Y200. ;
N05 X200. Y100. ;
N06 X100. Y100. ;
N07 G40 X0 Y0 ;
N08 G01 X-100 Y100.M32;
N09 X-100. Y200. ;
N10 X-200. Y200. ;
N11 X-200. Y100. ;
N12 X-100. Y100. ;
N13 X0 Y0 M33 ;
N14 #13010 = #100 + 0.5(CHANGE VALUE=D10) ;
N15 G41 D10 G01 X-100 Y-100 F500.;
N16 X-100. Y-200. ;
N17 X-200. Y-200. ;
N18 X-200. Y-100. ;
N19 X-100. Y-100. ;
N20 G40 X0 Y0 ;
M30;
上述したプログラム例１〜３のいずれかを数値制御装置１０のメモリ１２に格納し、実行させたとき、ＣＰＵ１１は、先読み処理として図２に示す処理を所定周期毎実行する。  まず、先読み停止フラグＦｇが「１」にセットされているか判断する（ステップ１００）。先読み停止フラグＦｇが「１」にセットされていれば、当該周期の処理を終了する。最初は初期設定でこの先読み停止フラグＦｇは「０」にセットされており、ステップ１００から、ステップ１０１に移行して、先読みバッファにブロックの指令を解析した解析結果（実行データ）が指定された数まで格納され満杯か判断する（ステップ１０１）。この実施形態では、先読みバッファに３０ブロック分の解析結果を記憶するものとなっており、３０ブロックの解析結果が記憶されているか判断することになる。
【００２３】
３０ブロックまで格納されていないときは、ＮＣプログラムより１ブロック読み出し、該ブロックで指令されている指令を解析し、その解析結果（実行データ）を先読みバッファに格納する（ステップ１０２）。又、このブロックの指令がプログラムエンド（Ｍ３０）か判断し（ステップ１０３）、プログラムエンドであれば、このプログラム処理を終了する。プログラムエンドでなければ、該ブロックで指令された中に先読み停止コード（Ｍ３３）が含まれているか判断する（ステップ１０４）。先読み停止コードが含まれていなければ、当該周期の処理は終了する。以下、先読みバッファに格納できるブロック数（＝３０）の解析結果が格納されるまでステップ１００〜１０４の処理を繰り返し実行する。  なお、後述するように、この先読みバッファに格納される解析結果（実行データ）は、本実行処理によって、先入れ先出し（ＦＩＦＯ）方式で１ブロック毎取り出される。すなわち、該先読みバッファに先に保存したブロックの解析結果（実行データ）が先に取り出され、該先読みバッファから取り出された解析結果（実行データ）は削除される。その結果、該先読みバッファに記憶する実行データ数は減少するが、この減少を上述したステップ１００〜１０４の処理によって、先読みバッファに格納できるブロック数に達するまで、その解析結果（実行データ）が先読みバッファに格納されることになる。
【００２４】
一方、ステップ１０４で、読み出したブロックに先読み停止コード（Ｍ３３）が含まれていることが判別されると、該先読み停止コードと共に先読み再開許容ブロック数を指定するコード（Ｐコード）が含まれているか判別し（ステップ１０５）、含まれていれば、該先読み再開許容ブロック数を指定するコード（Ｐコード）で指令されたブロック数を許容ブロック数の内部変数にセットし（ステップ１０９）、先読み停止フラグＦｇを「１」にセットする（ステップ１０８）。一方、再開許容ブロック数を指定するコード（Ｐコード）が含まれてなければ、ステップ１０５からステップ１０６に移行し、再開許容ブロック数がパラメータに設定されているか判断する。パラメータで設定されていれば、この設定されたブロック数を許容ブロック数の内部変数にセットし（ステップ１０７）、先読み停止フラグＦｇを「１」にセットする（ステップ１０８）。  
又、読み出したブロック中に再開許容ブロック数を指定するコード（Ｐコード）もなく、かつ、パラメータで先読み再開許容ブロック数が設定されてないときには、先読み停止フラグＦｇを「１」にセットして（ステップ１０８）、当該周期の処理を終了する。
【００２５】
次の周期からは、先読み停止フラグＦｇが「１」にセットされていることから、ＮＣプログラムの先読み処理は実行されず、ステップ１００で該フラグＦｇが「１」となっていることを確認して当該処理の周期を終了する。その結果、先読み処理は停止することになる。
【００２６】
プログラム例１の場合は、再開許容ブロック数がパラメータで設定されている例であることから、シーケンス番号「Ｎ１３」まで、先読みされ解析結果（実行データ）が先読みバッファに保存された時点で、Ｍ３３の読み出したブロックに先読み停止コードが読み込まれることになり、かつ、パラメータで先読み再開許容ブロック数（５）が設定されているものであることから、ステップ１０４、１０５、１０６、１０７、１０８の処理が実行されることになる。
【００２７】
又、プログラム例２の場合は、シーケンス番号「Ｎ１３」のブロックで先読み停止コードＭ３３と共に「Ｐ５」としての先読み再開許容ブロック数を指定するコードが読み出されるので、ステップ１０４、１０５、１０９、１０８の処理が実行されることになる。  
プログラム例３では、先読み再開許容ブロック数は、パラメータによる設定でもなく、又、プログラム指令でもないことから（このプログラム例３では、後述するようにシーケンス番号Ｎ０８のブロックでＭ３２のコードで先読み再開が指令される）、ステップ１０４、１０５、１０６、１０８の処理が実行されることになる。
【００２８】
このようにして、先読み停止フラグＦｇが「１」にセットされて、先読みが停止させられることから、プログラム例１〜３の場合、シーケンス番号Ｎ１３のブロックの解析結果（実行データ）を先読みバッファに格納した後、先読み処理が停止されることになる。そして、後述する処理によって先読み停止フラグＦｇが「０」にセットされることによって、ステップ１０１以下の処理が開始され、再び先読み処理が開始されることになる。
【００２９】
図３は、この第１の形態において、数値制御装置１０のＣＰＵ１１が所定周期（分配周期）毎に実行する本実行処理である。  
まず、先読みバッファより１ブロックの解析結果（実行データ）を読み出し、該解析結果（実行データ）で指令された処理を従来と同様に行う（ステップ２００）。次に先読み停止フラグＦｇが「１」にセットされているか判断し（ステップ２０１）、セットされていなければ、当該周期の処理は終了する。一方、停止フラグＦｇが「１」にセットされていれば、許容ブロック数の内部変数はセットされているか判別し（ステップ２０２）、セットされていれば、このセットされている数と、先読みバッファにこの時点で記憶する解析結果のブロック数が一致するか判別する（ステップ２０６）。一致しなければ、当該周期の処理は終了する。又、一致していると、先読み停止フラグＦｇを「０」にセットして、先読みを開始させる（ステップ２０５）。
【００３０】
プログラム例１ではパラメータにより、プログラム例２ではプログラムのＰコード指令で、先読み再開許容ブロック数が「５」と指定され、許容ブロック数の内部変数にセットされていることから、ステップ２０６で、先読みバッファに記憶する解析結果のブロック数がこの先読み再開許容ブロック数５と一致するか判断することになる。図２に示した先読み処理で、シーケンス番号「Ｎ１３」で先読み停止コードＭ３３が読み込まれ、ステップ１０４〜１０８の処理を行って、先読み停止フラグＦｇが「１」にセットされ、シーケンス番号「Ｎ１３」までの先読み処理が終了した時点で、先読み処理が停止していることから、シーケンス番号「Ｎ１３」より５つ前のシーケンス番号「Ｎ０８」の解析結果が読み出されたとき、図３のステップ２０６では、先読みバッファに記憶する解析結果のブロック数が「５」となり、先読み再開許容ブロック数と一致し、先読み停止フラグＦｇが「０」にセットされることになる。その結果、シーケンス番号「Ｎ０８」の本実行処理が実行されると、先読み処理周期では、ステップ１００からステップ１０１に移行し、ステップ１０１以下の先読み処理が実行されることになる。
【００３１】
一方、ステップ２０２で、許容ブロック数の内部変数がセットされていないと判断されたときには、当該ブロックの解析結果より先読み停止コードＭ３３を含むものか判断し（ステップ２０３）、先読み停止コードＭ３３を含むものであれば、ステップ２０５に移行し、先読み停止フラグＦｇが「０」にセットする。また、先読み停止コードＭ３３を含むものでなければ、先読み再開コードＭ３２を含むものか判断する（ステップ２０４）。先読み再開コードＭ３２を含むものでなければ、当該周期の処理を終了する。又、含むものであれば、先読み停止フラグＦｇを「０」にセットする（ステップ２０５）。
【００３２】
すなわち、プログラム例３の場合は、先読み処理でシーケンス番号Ｎ１３が読み出されたときに、先読み停止フラグＦｇが「１」にセットされ、先読みが停止している状態で、本実行処理において、シーケンス番号Ｎ０８のブロックの指令を本実行したとき、該シーケンス番号Ｎ０８のブロックに先読み再開コードＭ３２が含まれていることがステップ２０４で判別されるから、先読み停止フラグＦｇが「０」にセットされることから、このシーケンス番号Ｎ０８のブロックの指令を本実行した時点で先読み処理が再開されることになる。
【００３３】
なお、ステップ２０３で先読み停止コードＭ３３を含むブロックと判別され、ステップ２０５で先読み停止フラグＦｇを「０」にセットする処理は、先読み再開許容ブロック数が、パラメータでも、プログラム指令でも指定されておらず、かつ、先読み再開コードＭ３２も指令されていないときに、先読み停止コードＭ３３を含むブロックが先読み処理で読み込まれて先読み停止フラグＦｇを「１」にセットして、先読みを停止している状態において、このブロックの本実行を実行したとき先読み停止フラグＦｇを「０」にセットして先読みを再開させるものである。
【００３４】
上述した第１の態様では、パラメータ又はプログラムで指令する先読み再開許容ブロック数を変えることよって、又は、先読み再開コードＭ３２をプログラムする箇所によって、先読み停止から先読み再開を速く行うことも、遅れて行うこともできるものである。しかも、先読みを停止するコードが挿入されたブロックの実行が終了する前に先読み処理が開始されるものであるから、速度が０となることはなく加工時間も短縮できるものである。又、再開許容ブロック数を指定せず、先読み再開コードＭ３２もプログラムしない場合では、先読みバッファに残るブロックが０となるまで遅らせる（最大限の遅れ）こともできるものである。ただしこの場合は、先読み停止したブロックと次のブロック間で速度０の状態が発生する。
【００３５】
図４は本発明の第２の形態における先読み処理のアルゴリズムを示すフローチャートである。前述した第１の形態では、先読み処理を停止させるコード（Ｍ３３）と、先読み再開ブロック数をプログラム指令（Ｐコード）か、パラメータで設定するか、さらには、コード（Ｍ３２）によって先読み処理を再開させる時点を指定したが、この第２の形態では、ブロックでのカスタムマクロ変数の変更指令によって、先読み処理を停止させ、又、該指令コードの内容と先読みバッファに残るブロックの指令のコードに基づいて先読み処理の再開を自動的に行うようにしたものである。
【００３６】
又、この第２の形態で使用するＮＣプログラムの例を次にプログラム例４として示す。この第２の形態をこのプログラム例４を参照しながら、図４の処理フローチャートと共に説明する。
【００３７】
プログラム例４
O0001;
N01 G90 G00 X0. Y0. ;
N02 G41 D10 G01 X100 Y100 F500.;
N03 X100. Y200. ;
N04 X200. Y200. ;
N05 X200. Y100. ;
N06 X100. Y100. ;
N07 G40 X0 Y0 ;
N08 G01 X-100 Y100.M32;
N09 X-100. Y200. ;
N10 X-200. Y200. ;
N11 X-200. Y100. ;
N12 X-100. Y100. ;
N13 X0 Y0 ;
N14 #13010 = #100 + 0.5(CHANGE VALUE=D10) ;
N15 G41 D10 G01 X-100 Y-100 F500.;
N16 X-100. Y-200. ;
N17 X-200. Y-200. ;
N18 X-200. Y-100. ;
N19 X-100. Y-100. ;
N20 G40 X0 Y0 ;
M30;
このプログラム例４では、シーケンス番号Ｎ０２に指令されているＧ４１コードで工具径補正機能が有効になり、その補正量がＤコードで指定された量となる。そして、シーケンス番号Ｎ０７の工具径補正キャンセルの指令(Ｇ４０)が実行されるまでは工具径補正モードである。  
一方、先読み処理の場合、先読みバッファに先読み最大ブロック数（この実施形態では３０と設定されている）まで、事前にＮＣプログラムから先読みされブロックの指令の解析結果が保存されることから、シーケンス番号Ｎ１４のブロックで指令されたカスタムマクロ変数による計算によりＤコードで指令されたオフセット番号１０番の値の変更が、先読み処理の解析で事前に行われることから、シーケンス番号Ｎ０２のブロックの解析結果（実行データ）を先読みバッファから読み出し、本実行される前にＤ１０コード指令された値が変更されてしまうので、シーケンス番号Ｎ０２〜Ｎ０７までの動作（加工）が誤った動作（加工）になってしまうという問題がある。
【００３８】
このような問題を解決するために、この第２の形態では、シーケンス番号Ｎ１４のブロックで指令されたカスタムマクロ変数で補正値等の変数が変更されるような指令のブロックを先読みしたとき、先読みバッファにすでに保存されたブロック中の、このカスタムマクロ変数の処理によって影響を受けるもの又は影響を与えるコードを含むブロックの指令があるような場合、そのブロックの指令の解析処理は行わず、すなわち、カスタムマクロ変数の処理は行わず、このブロックの指令の手前で先読み処理を停止して、上述したような不具合をなくすようにしたものである。
【００３９】
数値制御装置１０のＣＰＵ１１は所定周期毎、図４に示す先読み処理を実行し、まず、先読み停止フラグＦｇが「１」にセットされているか判断する（ステップ３００）。最初は、初期設定で「０」にセットされていることから、ステップ３０１に移行し、先読みバッファに先読み最大ブロック数（この実施形態では３０と設定されている）まで保存されているか（先読みバッファは満杯か）判別し、最大ブロック数３０に達しているときには、この先読み処理周期の処理を終了する。又、最大ブロック数３０に達していないときには、ＮＣプログラムより１ブロックの指令を読み出して解析する（ステップ３０２）。そして、このブロックの指令がプログラムエンドを示す指令であれば、このプログラム処理を終了する（ステップ３０３）。プログラムエンドでなければ、先読みバッファに保存されているブロックを検索し、当該ブロックの処理が、先読みバッファに保存されているブロックの指令の処理に影響を与えるか又はこの先読みバッファに保存されているブロックの指令の処理によって、当該ブロックの処理が影響を受けるか判断する（ステップ３０４）。先読みバッファに保存されたブロックの解析結果に当該ブロックの処理に影響を受ける、又は影響を与えるコードがあれば、当該ブロックの解析と先読みバッファへの保存の先読み処理を停止し、先読み停止フラグＦｇを「１」にセットしこの先読み処理周期の処理を終了する。
【００４０】
又、先読みバッファに保存されたブロックの指令の処理に影響を与える又は影響を受けるコードが含まれていなければ、ステップ３０２で読み込んだブロックの解析を続行し、解析を終了して得られたブロックの解析結果（実行データ）を先読みバッファに保存して当該周期の処理を終了する（ステップ３０５）。
【００４１】
一方、先読み停止フラグＦｇが「１」にセットされていると判断されたときには（ステップ３００）、先読みバッファに保存されているブロックを検索し、ステップ３０８でブロックの指令の解析とその解析結果を先読みバッファへの保存する処理を停止したその要因となるコードを有するブロックが先読みバッファに保存されているブロック中に存在するか判断する（ステップ３０６）。存在しなければ、先読み停止フラグＦｇが「０」にセットして（ステップ３０７）、ステップ３０１に移行する。又、解析と先読みバッファへの保存処理を停止した要因のコードを有するブロックが存在すれば、先読み停止フラグＦｇを「１」にセットしたまま当該周期の処理を終了し、ブロックの先読み処理を停止した状態を保持する。
【００４２】
プログラム例４で説明すると、シーケンス番号Ｎ１４のブロックの先読み処理を実行すると、前述したようにカスタムマクロ変数の計算を先読み処理のブロックの解析で、工具径補正値を変更することになるから、シーケンス番号Ｎ０２で使用するＤ１０コードの値が、このシーケンス番号Ｎ０２のブロックの指令を本実行する前に、変更されることになり誤動作、誤加工となるが、この第２の実施形態では、このような先読みされたブロックの指令の処理に影響を与える指令を先読み処理で解析したとき、先読み停止フラグＦｇを「１」にセットしその先読み処理を停止し（ステップ３０８）、その後、既に先読みバッファに保存されているブロックを１ブロックずつ本実行していき、その１ブロックずつ本実行した後で、現在先読みバッファに残っているブロック中に、シーケンス番号Ｎ１４で先読み停止の要因となったＤコードの内容を使用する処理がなくなったかを検索する（ステップ３０６）。このプログラム例４ではシーケンス番号Ｎ０７のブロックの本実行が終了した時点では、先読みバッファに残るシーケンス番号Ｎ０８〜Ｎ１３までの先読みされたブロック中には、Ｄコードを使用するプログラムがないことを検出できるので、シーケンス番号Ｎ０７のブロックの本実行の終了したことをもって、シーケンス番号Ｎ１４から先読みを自動的に再開することになる。
【００４３】
上述したプログラム例４では、一度指令を出した後、その指令を打ち消すような指令が出されるまで、その都度指令することなく有効に作用する工具径補正などのモーダルに作用するモーダルタイプの指令に対して適用したものであるが、ブロックの先読み処理によって、他のブロックの指令の処理に影響を与える又は影響を受けるものに、送り軸等の機械座標値を読み込む指令などがある。  
次に示すプログラム例５は、この機械座標値を読み込むカスタムマクロ変数による指令があるとき、本発明のこの第２の形態を適用して、誤りなく読み出すことができるようにした例である。
【００４４】
プログラム例５
O0001;
N01 G90 G00 X0. Y0. Z0;
N02 G01 X100 Y100 F500.;
N03 X100. Y200. ;
N04 X200. Y200. ;
N05 X200. Y100. ;
N06 X100. Y100. ;
N07 X0 Y0 ;
N08 G01 Y100 Z100. F1000.;
N09 Y100. Z300.;
N10 Y300. Z300. ;
N11 Y300. Z100. ;
N12 Y100. Z100. ;
N13 Y0 Z0 ;
N14 #100=#5021+#200 + 0.5(CHANGE MCN) ;
N15 G53 X#100. ;
M30;
シーケンス番号Ｎ１４における＃５０２１は第１軸の機械座標を読み込むカスタムマクロ変数であり、このブロックの指令は、カスタムマクロ変数＃５０２１に読み込んだ第１軸の機械座標にカスタムマクロ変数＃２００の値を加算し、さらに０．５を加算した値をカスタムマクロ変数＃１００に格納するという指令である。又、シーケンス番号Ｎ１４までには先読み停止する意味をもったコードを挿入していない状態とし、先の例と同様にプログラムの先読み制御のブロック数が３０と設定されている。
【００４５】
このプログラム例５においては、シーケンス番号Ｎ０１からＮ０７までに第１軸のＸ軸が移動していることから、これらのシーケンス番号のブロックの指令を実行中にはＸ軸の機械座標は不定である。そこで、シーケンス番号Ｎ１４のブロックを先読みしコード解析を行った時、シーケンス番号Ｎ０１からＮ０７のブロックの指令を本実行中であると、機械座標は変化しているので、間違った機械座標でシーケンス番号Ｎ１４のブロックの指令による計算が行われることになる。
【００４６】
そこで、本第２の形態ではシーケンス番号Ｎ１４のブロックを先読みしコード解析した時に、このブロックの処理に影響を与える処理のブロックが先読みバッファに記憶する中にあるか判断して、存在するような場合は、先読みを停止して、影響がなくなった時点で、このブロックの指令から先読み処理を実行するものである。
【００４７】
すなわち、先読み処理により、シーケンス番号Ｎ０１から順次先読みされその指令が解析されて解析結果が先読みバッファに保存されていく。一方、本実行処理により、この先読みバッファに格納されたシーケンス番号Ｎ０１のブロックの解析結果（実行データ）から順次読み出し実行していく。そして、先読み処理でシーケンス番号Ｎ１４のブロックの指令を読み出し解析したとき、図４のステップ３０４で、該ブロックの指令に影響を受ける指令のブロックが先読みバッファに残っているブロック中にあるか判断する。すなわち、Ｘ軸の移動をともなったコードを使用するブロックが先読みバッファに残っていないか判断する。残っていなければ、Ｘ軸の移動はないものであるから、Ｘ軸の位置は変化がなくシーケンス番号Ｎ１４のブロックのコードを解析し実行データを作成して先読みバッファに保存しても問題はない（ステップ３０５）。又、Ｘ軸の移動をともなったコードを使用するブロックが先読みバッファに残っている場合には、当該シーケンス番号Ｎ１４のブロックの指令の解析処理を停止し、先読み停止フラグＦｇを「１」にセットして先読み処理を停止する（ステップ３０８）。
【００４８】
その後、ステップ３０６で、Ｘ軸の移動をともなったコードを使用するブロックが先読みバッファに残っていないか判断する。本実行によって先読みバッファに保存されたブロックが順次減少し、Ｘ軸の移動をともなったコードを使用するブロックがなくなると、先読み停止フラグＦｇを「０」にセットし（ステップ３０７）、先読み処理を再開し、停止していたシーケンス番号Ｎ１４のブロックの指令の解析及び先読みバッファへの保存処理を行う（ステップ３０１〜３０５）。
【００４９】
以上説明した第２の形態では、工具径補正などのモーダルで作用するデータの内容が変更されるときの指令や、機械座標値を読み出し、その読み出した値に基づいて計算処理を行う指令で、この指令により、先読みバッファに残るブロックの指令に影響を与えるとき、または、先読みバッファに残るブロックの指令で影響を受けるとき、先読み処理を停止し、この影響を受ける又は影響を与える指令を含むブロックが先読みバッファに記憶されなくなった時点で、先読み処理を再開するようにして、誤った動作を防止するようにしたが、このような、モーダルで作用する指令の変更や機械座標の読み取り処理等以外にも、そのブロックの先読み処理を実行することによって、先読みバッファに残るブロックの指令で影響を受けるときや影響を与える指令に対して、この第２の形態は適用できるものである。又、この第２の態様では、変数が一旦確定してもその後変更されるような場合でも、その変更によって、誤動作が生じないように、先読み処理を停止して変数の変更による誤った影響が発生しない状態を確認して先読み処理が再開されるので、誤動作、誤加工を確実に防止することができる。
【図面の簡単な説明】
【００５０】
【図１】本発明の一実施形態の数値制御装置の要部ブロック図である。
【図２】同実施形態における第１の態様での先読み処理のアルゴリズムを示すフローチャートである。
【図３】同実施形態における第１の態様での本実行処理のアルゴリズムを示すフローチャートである。
【図４】同実施形態における第２の態様での先読み処理のアルゴリズムを示すフローチャートである。
【符号の説明】
【００５１】
１０  数値制御装置
２１  位置・速度検出器
２２  ポジションコーダ
Ｍ  サーボモータ
ＳＭ  主軸モータ
【図１】
2008040542.tif 000003
【図２】
2008040542.tif 000004
【図３】
2008040542.tif 000005
【図４】
2008040542.tif 000006