(57)【特許請求の範囲】
【請求項１】
加工プログラムを先読みして解析する数値制御装置であって、
前記加工プログラムの解析時に前記加工プログラムに含まれる変数にアクセスするアクセス部と、
前記アクセス部がアクセスした前記変数が、前記加工プログラムの先読み中にアクセスされたものであるか否かを判断する先読み判断部と、
前記先読み判断部によって先読み中にアクセスされたと判断された前記変数が特定の変数であるか否かを判定する特定変数判定部と、
前記特定変数判定部により先読み中にアクセスした前記変数が前記特定の変数であると判定された場合は、先読み中にアクセスした前記特定の変数の番号および先読み中に前記特定の変数にアクセスした時刻のうち少なくとも一方を出力する出力部と、
を備えることを特徴とする数値制御装置。
【請求項２】
請求項１に記載の数値制御装置であって、
前記数値制御装置は、前記加工プログラムを構成する複数のブロックを順番に先読みして解析した後、前記ブロックを実行するものであり、
前記アクセス部は、前記ブロックの解析時に前記ブロックに含まれる前記変数にアクセスする
ことを特徴とする数値制御装置。
【請求項３】
請求項２に記載の数値制御装置であって、
前記先読み判断部は、未だ実行されていない先読みされている前記ブロックがある場合に前記アクセス部が前記変数にアクセスした場合は、前記変数は、前記加工プログラムの先読み中にアクセスされたものであると判断する
ことを特徴とする数値制御装置。
【請求項４】
請求項２または３に記載の数値制御装置であって、
前記特定の変数は、未だ実行されていない先読みされている前記ブロックの数が０のときに前記アクセス部がアクセスした前記変数である
ことを特徴とする数値制御装置。
【請求項５】
請求項１〜４のいずれか１項に記載の数値制御装置であって、
前記特定の変数は、予め決められた前記変数である
ことを特徴とする数値制御装置。
【請求項６】
請求項１〜５のいずれか１項に記載の数値制御装置であって、
少なくとも前記アクセス部がアクセスした前記変数の番号、前記変数にアクセスした時刻、および、前記先読み判断部の判断結果をアクセス情報として記憶するアクセス情報記憶処理部を備え、
前記特定変数判定部は、前記アクセス情報に基づいて、先読み中にアクセスした前記変数が前記特定の変数であるか否かを判定する
ことを特徴とする数値制御装置。
【請求項７】
請求項１〜６のいずれか１項に記載の数値制御装置であって、
前記出力部は、先読み中にアクセスした前記特定の変数の番号および先読み中に前記特定の変数にアクセスした時刻の少なくとも一方を表示部または外部装置に出力する
ことを特徴とする数値制御装置。
【請求項８】
加工プログラムを先読みして解析した後、加工プログラムを実行することで自動運転を行うとともに、前記自動運転と並行して所定のプログラムを実行して前記自動運転以外の所定の処理を行う数値制御装置であって、
前記加工プログラムと前記所定のプログラムとは、同一の変数を含み、
前記加工プログラムの解析時に前記加工プログラムに含まれる前記変数にアクセスする第１アクセス部と、
前記所定のプログラムの実行時に前記所定のプログラムに含まれる前記変数にアクセスする第２アクセス部と、
所定の時間以内に同一の前記変数に対して前記第１アクセス部および前記第２アクセス部がアクセスした場合は、前記所定の時間以内にアクセスされた前記変数を特定の変数であると判定する特定変数判定部と、
前記特定変数判定部によって前記特定の変数であると判定された前記変数の番号と、前記特定の変数であると判定された前記変数に前記第１アクセス部および前記第２アクセス部がアクセスした時刻との少なくとも一方を出力する出力部と、
を備えることを特徴とする数値制御装置。
【請求項９】
請求項８に記載の数値制御装置であって、
少なくとも、前記第１アクセス部がアクセスした前記変数の番号、前記第１アクセス部が前記変数にアクセスした時刻、および、前記第１アクセス部の情報と、前記第２アクセス部がアクセスした前記変数の番号、前記第２アクセス部が前記変数にアクセスした時刻、および、前記第２アクセス部の情報とをアクセス情報として記憶するアクセス情報記憶処理部を備え、
前記特定変数判定部は、前記アクセス情報に基づいて、前記変数が前記特定の変数であるか否かを判定する
ことを特徴とする数値制御装置。
【請求項１０】
請求項８または９に記載の数値制御装置であって、
前記出力部は、前記特定の変数であると判定された前記変数の番号と、前記特定の変数であると判定された前記変数に前記第１アクセス部および前記第２アクセス部がアクセスした時刻とのうち少なくとも一方を表示部または外部装置に出力する
ことを特徴とする数値制御装置。
【請求項１１】
加工プログラムを先読みして解析する数値制御装置に用いられる変数判定方法であって、
前記加工プログラムの解析時に前記加工プログラムに含まれる変数にアクセスするアクセスステップと、
アクセスした前記変数が、前記加工プログラムの先読み中にアクセスされたものであるか否かを判断する先読み判断ステップと、
先読み中にアクセスされたと判断された前記変数が特定の変数であるか否かを判定する特定変数判定ステップと、
先読み中にアクセスした前記変数が前記特定の変数であると判定された場合は、先読み中にアクセスした前記特定の変数の番号および先読み中に前記特定の変数にアクセスした時刻のうち少なくとも一方を出力する出力ステップと、
を備えることを特徴とする変数判定方法。
【請求項１２】
加工プログラムを先読みして解析した後、加工プログラムを実行することで自動運転を行うとともに、前記自動運転と並行して所定のプログラムを実行して前記自動運転以外の所定の処理を行う数値制御装置に用いられる変数判定方法であって、
前記加工プログラムと前記所定のプログラムとは、同一の変数を含み、
前記加工プログラムの解析時に前記加工プログラムに含まれる前記変数にアクセスする第１アクセスステップと、
前記所定のプログラムの実行時に前記所定のプログラムに含まれる前記変数にアクセスする第２アクセスステップと、
所定の時間以内に同一の前記変数に対して前記第１アクセスステップおよび前記第２アクセスステップがアクセスした場合は、前記所定の時間以内にアクセスされた前記変数を特定の変数であると判定する特定変数判定ステップと、
前記特定の変数であると判定された前記変数の番号と、前記特定の変数であると判定された前記変数に前記第１アクセスステップおよび前記第２アクセスステップがアクセスした時刻との少なくとも一方を出力する出力ステップと、
を備えることを特徴とする変数判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、加工プログラムの先読み停止機能を有する数値制御装置およびこの数値制御装置に用いられる変数判定方法に関する。
【背景技術】
【０００２】
数値制御装置においては、加工プログラム（ＮＣプログラム）を１ブロックごとに読み出して解析し、その解析結果（実行データ）を先読みバッファに記憶する先読み処理と、先読みバッファに保存された解析結果（実行データ）を実行する実行処理とを並行して実施している。
【０００３】
そのため、先読み処理のタイミングと実行処理とのタイミングとにタイムラグが発生してしまい、これにより、誤った加工が施されてしまう場合がある。以下、図８に示すような加工プログラムを、ブロックごとに先読み処理を行ってから、実行処理を行う場合を例に挙げて、タイムラグによって生じる問題を以下、簡単に説明する。なお、図８に示す加工プログラムは、Ｎ１０、Ｎ２０、Ｎ３０、Ｎ４０、・・・の複数のブロックから構成される。
【０００４】
図９に示すように、これらの複数のブロックは、Ｎ１０→Ｎ２０→Ｎ３０→Ｎ４０→・・・、等の順番でシーケンシャルに先読み処理および実行処理が施される。Ｎ４０のブロックは、Ｘ軸座標値を取得するための変数（変数番号は「＃５０４１」）を有し、Ｎ２０のブロックの実行後のＸ軸座標値を取得して、Ｘ軸を移動させるものである。図９に示すように、タイムラグによって、ブロックＮ４０の先読み処理（解析等）をしているときにＮ２０のブロックが実行中となっているため、Ｎ２０のブロックの実行中のＸ軸座標値が取得されてしまい、誤った加工が施されてしまう。
【０００５】
そのような課題を解決するために、下記に示す特許文献１は、先読み停止機能を有する数値制御装置が開示されている。簡単に説明すると、先読み中にアクセスしてはいけない変数を有するブロックの前に、先読み処理を停止するコードを有するブロックを挿入し、このコードを検出したときにブロックの先読み処理を一時停止し、１つ前のブロックの実行が終了したときに先読み処理を再開する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４２７１２４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記特許文献１では、プログラムの作成者または設計者等が先読みの停止が必要な変数をすべて指定し、先読み停止するためのコードを入力しなければならない。そのため、設計者等による先読み停止のための変数指定や先読みを停止するためのコード入力にミスが発生する場合がある。変数指定やコード入力にミスが発生しても、そのミスの発見が難しい。
【０００８】
そこで、本発明は、設計者等による先読み停止のための変数指定や先読みを停止するためのコード入力にミスが発生した場合であっても、そのミスを発見することができる数値制御装置および変数判定方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
第１の本発明は、加工プログラムを先読みして解析する数値制御装置であって、
前記加工プログラムの解析時に前記加工プログラムに含まれる変数にアクセスするアクセス部と、前記アクセス部がアクセスした前記変数が、前記加工プログラムの先読み中にアクセスされたものであるか否かを判断する先読み判断部と、前記先読み判断部によって先読み中にアクセスされたと判断された前記変数が特定の変数であるか否かを判定する特定変数判定部と、前記特定変数判定部により先読み中にアクセスした前記変数が前記特定の変数であると判定された場合は、先読み中にアクセスした前記特定の変数の番号および先読み中に前記特定の変数にアクセスした時刻のうち少なくとも一方を出力する出力部と、を備える。
【００１０】
第１の本発明は、前記数値制御装置であって、前記数値制御装置は、前記加工プログラムを構成する複数のブロックを順番に先読みして解析した後、前記ブロックを実行するものであり、前記アクセス部は、前記ブロックの解析時に前記ブロックに含まれる前記変数にアクセスしてもよい。
【００１１】
第１の本発明は、前記数値制御装置であって、前記先読み判断部は、未だ実行されていない先読みされている前記ブロックがある場合に前記アクセス部が前記変数にアクセスした場合は、前記変数は、前記加工プログラムの先読み中にアクセスされたものであると判断してもよい。
【００１２】
第１の本発明は、前記数値制御装置であって、前記特定の変数は、未だ実行されていない先読みされている前記ブロックの数が０のときに前記アクセス部がアクセスした前記変数であってもよい。
【００１３】
第１の本発明は、前記数値制御装置であって、前記特定の変数は、予め決められた前記変数であってもよい。
【００１４】
第１の本発明は、前記数値制御装置であって、少なくとも前記アクセス部がアクセスした前記変数の番号、前記変数にアクセスした時刻、および、前記先読み判断部の判断結果をアクセス情報として記憶するアクセス情報記憶処理部を備え、前記特定変数判定部は、前記アクセス情報に基づいて、先読み中にアクセスした前記変数が前記特定の変数であるか否かを判定してもよい。
【００１５】
第１の本発明は、前記数値制御装置であって、前記出力部は、先読み中にアクセスした前記特定の変数の番号および先読み中に前記特定の変数にアクセスした時刻の少なくとも一方を表示部または外部装置に出力してもよい。
【００１６】
第２の本発明は、加工プログラムを先読みして解析した後、加工プログラムを実行することで自動運転を行うとともに、前記自動運転と並行して所定のプログラムを実行して前記自動運転以外の所定の処理を行う数値制御装置であって、前記加工プログラムと前記所定のプログラムとは、同一の変数を含み、前記加工プログラムの解析時に前記加工プログラムに含まれる前記変数にアクセスする第１アクセス部と、前記所定のプログラムの実行時に前記所定のプログラムに含まれる前記変数にアクセスする第２アクセス部と、所定の時間以内に同一の前記変数に対して前記第１アクセス部および前記第２アクセス部がアクセスした場合は、前記所定の時間以内にアクセスされた前記変数を特定の変数であると判定する特定変数判定部と、前記特定変数判定部によって前記特定の変数であると判定された前記変数の番号と、前記特定の変数であると判定された前記変数に前記第１アクセス部および前記第２アクセス部がアクセスした時刻との少なくとも一方を出力する出力部と、を備える。
【００１７】
第２の本発明は、前記数値制御装置であって、少なくとも、前記第１アクセス部がアクセスした前記変数の番号、前記第１アクセス部が前記変数にアクセスした時刻、および、前記第１アクセス部の情報と、前記第２アクセス部がアクセスした前記変数の番号、前記第２アクセス部が前記変数にアクセスした時刻、および、前記第２アクセス部の情報とをアクセス情報として記憶するアクセス情報記憶処理部を備え、前記特定変数判定部は、前記アクセス情報に基づいて、前記変数が前記特定の変数であるか否かを判定してもよい。
【００１８】
第２の本発明は、前記数値制御装置であって、前記出力部は、前記特定の変数であると判定された前記変数の番号と、前記特定の変数であると判定された前記変数に前記第１アクセス部および前記第２アクセス部がアクセスした時刻とのうち少なくとも一方を表示部または外部装置に出力してもよい。
【００１９】
第３の本発明は、加工プログラムを先読みして解析する数値制御装置に用いられる変数判定方法であって、前記加工プログラムの解析時に前記加工プログラムに含まれる変数にアクセスするアクセスステップと、アクセスした前記変数が、前記加工プログラムの先読み中にアクセスされたものであるか否かを判断する先読み判断ステップと、先読み中にアクセスされたと判断された前記変数が特定の変数であるか否かを判定する特定変数判定ステップと、先読み中にアクセスした前記変数が前記特定の変数であると判定された場合は、先読み中にアクセスした前記特定の変数の番号および先読み中に前記特定の変数にアクセスした時刻のうち少なくとも一方を出力する出力ステップと、を備える。
【００２０】
第４の本発明は、加工プログラムを先読みして解析した後、加工プログラムを実行することで自動運転を行うとともに、前記自動運転と並行して所定のプログラムを実行して前記自動運転以外の所定の処理を行う数値制御装置に用いられる変数判定方法であって、前記加工プログラムと前記所定のプログラムとは、同一の変数を含み、前記加工プログラムの解析時に前記加工プログラムに含まれる前記変数にアクセスする第１アクセスステップと、前記所定のプログラムの実行時に前記所定のプログラムに含まれる前記変数にアクセスする第２アクセスステップと、所定の時間以内に同一の前記変数に対して前記第１アクセスステップおよび前記第２アクセスステップがアクセスした場合は、前記所定の時間以内にアクセスされた前記変数を特定の変数であると判定する特定変数判定ステップと、前記特定の変数であると判定された前記変数の番号と、前記特定の変数であると判定された前記変数に前記第１アクセスステップおよび前記第２アクセスステップがアクセスした時刻との少なくとも一方を出力する出力ステップと、を備える。
【発明の効果】
【００２１】
本発明によれば、設計者等による先読み停止のための変数指定や先読みを停止するためのコード入力にミスが発生した場合であっても、そのミスを簡単に発見することができる。
【図面の簡単な説明】
【００２２】
【図１】第１の実施の形態における加工プログラムの一例を示す図である。
【図２】図１に示す加工プログラムの解析処理と実行処理とのタイミングチャートを示す図である。
【図３】第１の実施の形態の数値制御装置の構成を示す機能ブロック図である。
【図４】図３に示すアクセス情報記憶処理部によって時系列で記憶されたアクセス情報の一例を示す図である。
【図５】第２の実施の形態の数値制御装置の構成を示す機能ブロック図である。
【図６】図５に示す第１アクセス部および第２アクセス部による変数のアクセスタイミングを示すタイムチャートである。
【図７】図５に示すアクセス情報記憶処理部によって時系列で記憶されたアクセス情報の一例を示す図である。
【図８】従来技術を説明するために用いた加工プログラムを示す図である。
【図９】図８に示す加工プログラムの解析処理と実行処理とのタイミングを示すタイムチャートである。
【発明を実施するための形態】
【００２３】
本発明に係る数値制御装置および変数判定方法について、好適な実施の形態を掲げ、添付の図面を参照しながら以下、詳細に説明する。
【００２４】
［第１の実施の形態］
最初に、工作機械を制御する数値制御装置１０による加工プログラムの解析と加工プログラムの実行とについて説明する。図１は、加工プログラムの一例を示す図、図２は、図１に示す加工プログラムの解析処理と実行処理とのタイミングチャートを示す図である。この解析と実行とは、図３に示す数値制御装置１０によって行われる。
【００２５】
図１に示すように加工プログラムは、・・・、Ｎ１０、Ｎ２０、Ｎ３０、・・・・、Ｎ７０、Ｎ８０、・・・、の複数のブロックから構成されている。Ｎ１０のブロック、Ｎ４０のブロック、Ｎ８０のブロックは、変数番号が「＃１００」の変数を有し、Ｎ６０のブロックは、変数番号が「＃１００００」の変数を有する。このＮ６０のブロックは、先読み中にアクセスしてはいけない変数（変数番号は「＃１００００」）を有するので、Ｎ６０のブロックの前に、先読みを抑制する（停止させる）コードを含むＮ５０のブロックが設けられている。この変数番号「＃１００００」の変数は、アクセスされた時の工作機械の状態によってその値が変わる変数である。つまり、変数番号「＃１００００」の変数は、アクセスされた時にその値が書き換えられる。
【００２６】
ブロックの解析は、先頭（一番上）のブロックから順次行われる。このブロックの解析によって実行データが作成され、その実行データに基づいて処理が実行される。本説明では、ブロックの解析によって得られた実行データに基づいて処理を実行することを、ブロックの実行と称する場合がある。例えば、「ブロックＮ１０を実行する」、または、「ブロックＮ１０の実行」という場合は、Ｎ１０のブロックの解析によって得られた実行データに基づいて処理を実行することを意味する。
【００２７】
なお、図１に示すＮ１０〜Ｎ５０、および、Ｎ７０、Ｎ８０のブロックは、ＮＣ文であるため、ブロックの解析によって実行データが作成され、その実行データに基づいて処理が実行される。しかし、ＮＣ文以外のブロック（Ｎ６０のブロック）に関しては、先読みおよび解析のみが行なわれ、実行はされず、実行データも作成されない。ＮＣ文のブロックとは、軸の移動指令や補助機能等の数値制御装置１０の制御対象となる工作機械の動作に直接影響するブロックのことを指す。したがって、ＮＣ文でないブロックは、変数の代入参照やプログラムの条件分岐等の工作機械の動作に直接影響しないブロックとなる。
【００２８】
先頭（一番上）のブロックの解析が終了すると、先頭のブロックから順に実行が開始される。原則として、ブロックの解析は、ブロックの実行に先行して先読みで順次実行される。つまり、ブロックの解析は、ブロックの実行に比べ処理時間が短いため、ブロックの解析がブロックの実行に先行して行われる（先読み）。そのため、図２に示すように、Ｎ４０、Ｎ５０のブロックの解析時には、未だＮ２０のブロックが実行されている最中となる。
【００２９】
ここで、図１に示すように、Ｎ４０のブロックとＮ６０のブロックとの間には、先読みを抑制する（停止させる）コードを含むＮ５０のブロックが設けられているので、Ｎ５０のブロックの先読みによる解析が終了すると、先読みが停止する。そして、Ｎ５０のブロックの実行が終了すると、Ｎ６０のブロック以降のブロックの解析が再開する。つまり、Ｎ５０のブロックの先読みによる解析が終了してから、Ｎ５０のブロックの実行が終了するまでの間、ブロックの解析がＮ５０のブロックによって停止される。
【００３０】
作成者または設計者等（以下、単に設計者と呼ぶ。）の入力ミスによって、先読み中にアクセスしてはいけない変数を有するブロックの前に、先読みを抑制するコードを含むブロックを入力し忘れた場合は、自動運転による加工を適切に行うことはできない。そこで、第１の実施の形態では、先読み中にアクセスしてはいけない変数を有するブロックの前に、先読みを抑制するコードを含むブロックを設計者が入力し忘れた場合であっても、その入力ミスを発見するというものである。
【００３１】
図３は、第１の実施の形態の数値制御装置１０の構成を示す機能ブロック図である。数値制御装置１０は、ＣＰＵおよびメモリ等を有するコンピュータによって構成され、ＣＰＵがメモリに記憶されたプログラムを実行することで、コンピュータが本第１の実施の形態の数値制御装置１０として機能する。数値制御装置１０は、加工プログラム１２、解析部１４、先読みバッファ１６、実行部１８、先読み判断部２０、アクセス情報記憶処理部２２、特定変数判定部２４、出力部２６、および、表示部２８を備える。なお、外部装置３０は、出力部２６と有線または無線で通信可能となっている。
【００３２】
加工プログラム１２は、数値制御装置１０のハードウェアを構成する前記メモリ等の記憶媒体に記憶されている。加工プログラム１２は、自動運転により加工対象物に対して加工を行うためのプログラムであり、図１に示した内容と同一のものとする。
【００３３】
解析部１４は、加工プログラム１２の実行前に加工プログラム１２を解析する。解析部１４は、加工プログラム１２を構成する複数のブロックのうち、先頭のブロックから順にシーケンシャルで先読みして解析する。解析部１４は、ブロックの解析時にブロックに含まれる変数にアクセスするアクセス部１４ａを有する。アクセス部１４ａは、Ｎ１０、Ｎ４０、Ｎ８０のブロックの解析時に変数番号が「＃１００」の変数にアクセスし、Ｎ６０のブロックの解析時に変数番号が「＃１００００」の変数にアクセスする（図１参照）。
【００３４】
解析部１４は、先読みを抑制する（停止させる）コードを含むＮ５０のブロックを先読みして解析すると、Ｎ５０のブロックの実行が終了するまでは、次のブロック以降（Ｎ６０のブロック以降）の解析を一時停止する。ブロックの解析によって、ソースコードであるブロックが、コンピュータが認識できるオブジェクトコードに変換されて実行データが作成される。解析部１４は、ＮＣ文のブロックを解析する場合は、アクセス部１４ａがアクセスした変数も用いて実行データを作成する。なお、ＮＣ文でないブロックに関しては、実行データの作成は行なわれない。
【００３５】
解析部１４は、解析結果（実行データ）を先読みバッファ１６に記憶する。解析部１４は、加工プログラム１２の先頭のブロックから順に解析を行うので、先読みバッファ１６には、先頭のブロックから順にその解析結果が記憶される。
【００３６】
実行部１８は、先読みバッファ１６に記憶されているブロックの実行データに基づいて実行処理を行う。これにより、数値制御装置１０の制御対象となる工作機械が動作する。実行部１８は、実行処理が完了したブロックの実行データを先読みバッファ１６から削除する。これにより、先読みバッファ１６には、まだ実行されていない先読みされたブロックの実行データのみが記憶されることになる。実行部１８は、先読みバッファ１６にブロックの実行データが複数記憶されている場合は、その中で一番先頭のブロックの実行データに基づいて実行処理を行う。
【００３７】
Ｎ５０のブロックによって解析部１４による先読みが一時停止されると、先読みバッファ１６に記憶されているブロックの実行データの数（先読みされたブロックの数）が時間の経過とともに徐々に減り、その後ゼロとなる（図２参照）。解析部１４は、先読みバッファ１６に記憶されているブロックの実行データが０になると、つまり、未だ実行されていない先読みされたブロックの数が０になると、再び次のブロック以降（Ｎ６０のブロック以降）の解析を開始する。つまり、解析部１４は、Ｎ５０のブロックを先読みして解析すると、Ｎ５０のブロックの実行が終了するまでは、次のブロック以降（Ｎ６０のブロック以降）の解析を一時停止するとしたが、Ｎ５０のブロックの実行が終了したか否かの判断は、先読みバッファ１６に記憶されている先読みされたブロックの実行データの数（未だ実行されていない先読みされたブロックの数）が０になった否かによって判断している。
【００３８】
先読み判断部２０は、アクセス部１４ａがアクセスした変数が、加工プログラム１２の先読み中にアクセスされたものであるか否かを判断する。具体的には、先読み判断部２０は、先読みバッファ１６に記憶されているブロックの実行データの数（未だ実行されていない先読みされたＮＣ文のブロックの数）が０でない、つまり、１以上の場合に、アクセスされた変数は、先読み中にアクセスされたものであると判断する。先読み判断部２０は、その判断結果をアクセス情報記憶処理部２２に出力する。
【００３９】
なお、アクセス部１４ａは、変数にアクセスしたタイミングでアクセスした旨の情報を先読み判断部２０に出力し、先読み判断部２０は、その情報を受け取ったタイミングで、先読み中にアクセスされたか否かを判断する。また、アクセス部１４ａは、アクセスした変数の番号（変数番号）、および、変数にアクセスした時刻をアクセス情報記憶処理部２２に出力する。なお、数値制御装置１０は、時刻を計時するクロック回路を有する。
【００４０】
アクセス情報記憶処理部２２は、アクセス部１４ａがアクセスした変数の番号、アクセスした時刻、および、先読み判断部２０の判断結果（先読み中のアクセスか否か）を対応付けてアクセス情報として、アクセス情報記憶処理部２２内の記憶部（記憶媒体）２２ａに記憶する。アクセス情報記憶処理部２２は、アクセス部１４ａが変数にアクセスする度に、アクセスした変数の番号、アクセスした時刻、および、判断結果をアクセス情報として時系列で記憶する。
【００４１】
図４は、アクセス情報記憶処理部２２によって時系列で記憶されたアクセス情報の一例を示す図である。図４に示すように、アクセスした変数の番号（変数番号）、アクセスした時刻、および、先読み中のアクセスか否か、が対応付けてアクセス情報として記憶されている。変数番号「＃１００」の変数を有するＮ１０、Ｎ４０、Ｎ８０のブロックの解析時には、先読みバッファ１６には、先読みされたブロックの実行データが記憶されている（未だ実行されていない先読みされたブロックの数≠０）。したがって、変数番号「＃１００」の変数へのアクセスは、先読み中になされたものであり、先読み中のアクセスは「〇」となる。一方で、変数番号「＃１００００」の変数を有するＮ６０のブロックの解析時には、Ｎ５０のブロックによって先読みが一時停止されているため、先読みバッファ１６には、先読みされたブロックの実行データが記憶されていない（未だ実行されていない先読みされたブロックの数＝０）。そのため、変数番号「＃１００００」の変数へのアクセスは、先読み中でないときになされたものであり、先読み中のアクセスは「×」となる。
【００４２】
このように、原則として、アクセス情報記憶処理部２２によって記憶されるアクセス情報は、変数番号「＃１００」の場合は先読み中のアクセスが「〇」、変数番号「＃１００００」の場合は先読み中のアクセスが「×」となる。しかしながら、変数番号「＃１００００」を含むブロックの前に、先読みを抑制するコードを含むブロックを設計者が入力し忘れていた場合は、変数番号「＃１００００」の場合であっても先読み中のアクセスが「〇」としてアクセス情報が記憶されることになる。また、変数番号「＃１００」を含むブロック前に、先読みを抑制するコードを含むブロックを設計者が誤って入力した場合は、変数番号「＃１００」であっても先読み中のアクセスが「×」としてアクセス情報が記憶されることになる。
【００４３】
特定変数判定部２４は、先読み中にアクセスされたと判断された変数が、先読み中にアクセスしてはいけない可能性のある変数であるか否かを判定する。特定変数判定部２４は、アクセス情報記憶処理部２２によって記憶されたアクセス情報に基づいてこの判定を行う。先読み中にアクセスしてはいけない可能性のある変数を以下、特定の変数、と呼ぶ。特定変数判定部２４は、アクセス情報記憶処理部２２によって記憶された時系列で記憶されたアクセス情報のうち、１回でも先読み中のアクセスが「×」となっている変数番号の変数を特定の変数として決定する。図４を見るとわかるように、先読み中のアクセスが「×」となっている変数番号は「＃１００００」となっているので、変数番号「＃１００００」の変数が特定の変数となる。つまり、特定の変数として決定される変数は、未だ実行されていない先読みされたブロックの数が０となっているときにアクセス部１４ａがアクセスした変数である。
【００４４】
図４に示すアクセス情報の中に、変数番号「＃１００００」であって先読み中のアクセスが「〇」となっているものがある場合には、先読み中にアクセスされた変数の中に特定の変数が含まれることになる。したがって、特定変数判定部２４は、先読み中にアクセスされたと判断した変数の中に、変数番号「＃１００００」の変数が含まれる場合は、先読み中にアクセスされた変数番号「＃１００００」の変数は特定の変数であると判定する。特定変数判定部２４は、先読み中にアクセスした特定の変数であると判定した変数の変数番号「♯１００００」および先読み中に特定の変数にアクセスした時刻のうち少なくとも一方を出力部２６に出力する。
【００４５】
なお、変数番号「＃１００」の変数も先読み中にアクセスされているが、図４に示す例では、この変数番号「＃１００」の変数が特定の変数として判定されることはない。しかしながら、先読みを抑制するコードを含むブロックの入力ミスによって、変数番号「＃１００」が１つでも先読み中のアクセスが「×」となっていた場合は、変数番号「♯１００」の変数を特定の変数であると判定することになる。
【００４６】
出力部２６は、特定の変数であると判断した変数の変数番号「♯１００００」および先読み中に特定の変数にアクセスした時刻のうち少なくとも一方を表示部２８または外部装置３０に出力する。表示部２８は、出力部２６から送られてきた情報を表示する。外部装置３０は、設計者が携帯することができ、ディスプレイを有するポータブルコンピュータ（例えば、ＰＤＡ等）であってもよい。したがって、外部装置３０も出力部２６から送られてきた情報を表示することができる。
【００４７】
このように、第１の実施の形態における数値制御装置１０は、加工プログラム１２を先読みして解析する。この数値制御装置１０は、アクセス部１４ａ、先読み判断部２０、特定変数判定部２４、および、出力部２６を少なくとも備える。アクセス部１４ａは、加工プログラム１２の解析時に加工プログラム１２に含まれる変数にアクセスする。先読み判断部２０は、アクセス部１４ａがアクセスした変数が、加工プログラム１２の先読み中にアクセスされたものであるか否かを判断する。特定変数判定部２４は、先読み判断部２０によって先読み中にアクセスされたと判断された変数が、特定の変数（読み中にアクセスしてはいけない可能性のある変数）であるか否かを判定する。出力部２６は、特定変数判定部２４により先読み中にアクセスした変数が特定の変数であると判定された場合は、先読み中にアクセスした特定の変数の番号および先読み中に特定の変数にアクセスした時刻のうち少なくとも一方を出力する。これにより、設計者による先読み停止のための変数指定や先読みを停止するためのコード入力にミスが発生した場合であっても、そのミスを簡単に発見することができる。
【００４８】
＜第１の実施の形態の変形例＞
上記第１の実施の形態では、特定変数判定部２４は、アクセス情報に基づいて、先読み中にアクセスしてはいけない変数、つまり、特定の変数を決定するようにしたが、予め特定変数判定部２４に特定の変数を記憶させておいてもよい。通常、先読み中にアクセスしていない変数は、予め決まっているので、設計者が数値制御装置１０の図示しない入力操作部を操作することで、特定の変数を特定変数判定部２４に記憶させておいてもよい。
【００４９】
［第２の実施の形態］
図５は、第２の実施の形態の数値制御装置５０の構成を示す機能ブロック図である。数値制御装置５０も、ＣＰＵおよびメモリ等を有するコンピュータによって構成され、ＣＰＵがメモリに記憶されたプログラムを実行することで、コンピュータが本第２の実施の形態の数値制御装置５０として機能する。数値制御装置５０は、加工プログラム５２、所定のプログラム５４、第１アクセス部５６、第２アクセス部５８、アクセス情報記憶処理部６０、特定変数判定部６２、出力部６４、および、表示部６６を備える。なお、外部装置６８は、出力部６４と有線または無線で通信可能となっている。
【００５０】
加工プログラム５２および所定のプログラム５４は、数値制御装置５０のハードウェアを構成する前記メモリ等の記憶媒体に記憶されている。加工プログラム５２は、自動運転により加工対象物に対して加工を行うためのプログラムである。所定のプログラム５４は、自動運転以外の所定の処理（アプリケーション）を行うためのプログラムである。この所定の処理（アプリケーション）は、自動運転と並行して行われる。
【００５１】
第１アクセス部５６は、上記第１の実施の形態で説明したように、加工プログラム５２の解析時に加工プログラム５２に含まれる変数にアクセスする。第１アクセス部５６は、ブロックの解析時に解析するブロックに含まれる変数にアクセスする。この第１アクセス部５６は、上記第１の実施の形態で説明したアクセス部１４ａと同様の機能を有する。第２アクセス部５８は、所定のプログラム５４の実行時に所定のプログラム５４に含まれる変数にアクセスする。加工プログラム５２には、加工プログラム５２に含まれる複数の変数（変数番号が異なる複数の変数）のうち、１又は２以上の所定の変数番号の変数と同一の変数が含まれる。以下、説明をわかり易くするため、加工プログラム５２および所定のプログラム５４に含まれる共通の変数（同一の変数）であって、加工プログラム５２に含まれるものを第１の変数、所定のプログラム５４に含まれるものを第２の変数と呼ぶ。
【００５２】
この第１の変数は、第１アクセス部５６によってアクセスされた時の工作機械の状態によってその値が書き換えられる変数である。この第１の変数が書き換えられると、第１の変数に対応する第２の変数の値も変更される。また、第２アクセス部５８によって第２の変数がアクセスされると、その時の第２の変数の値が読み取られる。この読み取られた第２の変数の値は、所定の処理のために用いられる。本第２の実施の形態では、第１の変数の数を１つとするので、第２の変数の数も１つとなり、その変数番号を「♯２００００」とする。
【００５３】
第１アクセス部５６は、アクセスした第１の変数の番号（変数番号）、第１の変数にアクセスした時刻、および、第１アクセス部５６の情報をアクセス情報記憶処理部６０に出力する。この第１アクセス部５６の情報とは、自動運転の処理によるアクセスである旨の情報である。第２アクセス部５８は、アクセスした第２の変数の番号（変数番号）、第２の変数にアクセスした時刻、および、第２アクセス部５８の情報をアクセス情報記憶処理部６０に出力する。第２アクセス部５８の情報とは、所定の処理によるアクセスである旨の情報である。
【００５４】
アクセス情報記憶処理部６０は、第１アクセス部５６がアクセスした第１の変数の番号、第１アクセス部５６が第１の変数にアクセスした時刻、および、第１アクセス部５６の情報をアクセス情報として、アクセス情報記憶処理部６０内の記憶部６０ａに記憶する。また、アクセス情報記憶処理部６０は、第２アクセス部５８がアクセスした第２の変数の番号、第２アクセス部５８が第２の変数にアクセスした時刻、および、第２アクセス部５８の情報もアクセス情報として記憶部（記憶媒体）６０ａに記憶する。アクセス情報記憶処理部６０は、これらのアクセス部（第１アクセス部５６及び第２アクセス部５８）が共通の変数（第１の変数および第２の変数）にアクセスする度に、アクセスした第１の変数の番号、第２の変数の番号、および、アクセスした時刻等をアクセス情報として時系列で記憶する。
【００５５】
図６は、第１アクセス部５６および第２アクセス部５８による第１の変数および第２の変数のアクセスタイミングを示すタイムチャートである。第１アクセス部５６は、時刻「１５：００：００．０００」に変数番号「♯２００００」の第１の変数にアクセスし、その後、時刻「１５：００：０５．０１４」に再び変数番号「＃２００００」の第１の変数にアクセスしている。第１アクセス部５６が変数番号「＃２００００」の第１の変数にアクセスしたタイミング（時刻「１５：００：００．０００」と時刻「１５：００：０５．０１４」）で第１の変数の値が書き換えられている。
【００５６】
第２アクセス部５８は、変数番号「＃２００００」の第２の変数にアクセスする。このアクセスによって変数番号「＃２００００」の第２の変数の値が読み取られ、読み取られた値が所定の処理に用いられる。なお、図６に示す例では、第２アクセス部５８は、第１アクセス部５６が第１の変数にアクセスする間隔より短い間隔で、第２の変数にアクセスしているが、これに限られない。つまり、第２アクセス部５８は、第１アクセス部５６が第１の変数にアクセスする間隔より長い間隔で、第２の変数にアクセスするものであってもよい。
【００５７】
図７は、第１アクセス部５６および第２アクセス部５８が図６に示すように第１の変数および第２の変数にアクセスした場合に、アクセス情報記憶処理部６０が時系列で記憶したアクセス情報を示す図である。図７に示すように、アクセスした第１の変数および第２の変数の番号（変数番号）、アクセスした時刻、および、第１の変数または第２の変数にアクセスした第１アクセス部５６または第２アクセス部５８の情報が対応付けてアクセス情報として記憶されている。なお、本第２の実施の形態では、第１の変数および第２の変数の数は、変数番号「＃２００００」の変数１つであることから、アクセス情報の変数番号は、すべて「＃２００００」となっている。
【００５８】
特定変数判定部６２は、所定の時間ΔＴ（例えば、１０ｍｓｅｃ）以内に第１の変数および第２の変数に対して第１アクセス部５６および第２アクセス部５８がアクセスしたか否かを判断する。つまり、同一の変数（第１の変数＝第２の変数）に対して複数のアクセス部（５６、５８）が所定の時間ΔＴ以内にアクセスしたか否かを判断する。特定変数判定部６２は、所定の時間ΔＴ以内に第１の変数および第２の変数に対してアクセスされたと判断した場合は、所定の時間ΔＴ以内にアクセスされた第１の変数および第２の変数を特定の変数であると判定する。なお、特定の変数とは、先読み中にアクセスしてはいけない可能性のある変数である。
【００５９】
図７に示すように、第２アクセス部５８によって変数番号「＃２００００」の第２の変数が時刻「１５：００：０５．０１０」にアクセスされ、第１アクセス部５６によって変数番号「＃２００００」の第１の変数が時刻「１５：００：０５.０１４」にアクセスされている。時刻「１５：００：０５．０１０」と時刻「１５：００：０５.０１４」との差は、所定の時間ΔＴ（例えば、１０ｍｓｅｃ）以内であることから、特定変数判定部６２は、変数番号「＃２００００」の第１の変数および第２の変数を特定の変数であると判定する。特定変数判定部６２は、特定の変数であると判定した第１の変数および第２の変数の変数番号「♯２００００」、および、特定の変数であると判定した第１の変数および第２の変数にアクセスした時刻のうち少なくとも一方を出力部６４に出力する。
【００６０】
出力部６４は、特定の変数であると判断した第１および第２の変数番号「♯２００００」および特定の変数であると判定した第１の変数および第２の変数にアクセスした時刻のうち少なくとも一方を表示部６６または外部装置６８に出力する。表示部６６は、出力部６４から送られてきた情報を表示する。外部装置６８は、設計者が携帯することができ、ディスプレイを有するポータブルコンピュータ（例えば、ＰＤＡ等）であってもよい。これにより、外部装置６８も出力部６４から送られてきた情報を表示することができる。なお、出力部６４は、特定の変数にアクセスした第１アクセス部５６の情報および第２アクセス部５８の情報も表示部６６または外部装置６８に出力してもよい。
【００６１】
このように、第２の実施の形態における数値制御装置５０は、加工プログラム５２を先読みして解析した後、加工プログラム５２を実行することで自動運転を行うとともに、前記自動運転と並行して所定のプログラム５４を実行して自動運転以外の所定の処理を行う。この数値制御装置５０は、第１アクセス部５６、第２アクセス部５８、特定変数判定部６２、および、出力部６４を備える。加工プログラム５２と所定のプログラム５４とは、同一の変数を含む。第１アクセス部５６は、加工プログラム５２の解析時に加工プログラム５２に含まれる変数にアクセスする。第２アクセス部５８は、所定のプログラム５４の実行時に所定のプログラム５４に含まれる変数にアクセスする。特定変数判定部６２は、所定の時間ΔＴ以内に同一の変数に対して第１アクセス部５６および第２アクセス部５８がアクセスした場合は、所定の時間ΔＴ以内にアクセスされた変数を特定の変数であると判定する。出力部６４は、特定変数判定部６２によって特定の変数であると判定された変数の番号と、特定の変数であると判定された変数に第１アクセス部５６および第２アクセス部５８がアクセスした時刻との少なくとも一方を出力する。これにより、設計者による先読み停止のための変数指定や先読みを停止するためのコード入力にミスが発生する場合であっても、そのミスを簡単に発見することができる。
【００６２】
なお、上記第２の実施の形態では、説明を簡単にするため、自動運転と並行して行う所定の処理が１つの場合を例にして説明したが、自動運転と並行して互いに異なる複数の所定の処理を行う場合にも適用可能である。この場合は、第２アクセス部５８は、所定の処理の数に応じた数だけ設けられることになる。
【符号の説明】
【００６３】
１０、５０…数値制御装置                １２、５２…加工プログラム
１４…解析部                            １４ａ…アクセス部
１６…先読みバッファ                    １８…実行部
２０…先読み判断部                      ２２、６０…アクセス情報記憶処理部
２２ａ、６０ａ…記憶部                  ２４、６２…特定変数判定部
２６、６４…出力部                      ２８、６６…表示部
３０、６８…外部装置                    ５４…所定のプログラム
５６…第１アクセス部                    ５８…第２アクセス部
【図１】
0006407919.tif 000002
【図２】
0006407919.tif 000003
【図３】
0006407919.tif 000004
【図４】
0006407919.tif 000005
【図５】
0006407919.tif 000006
【図６】
0006407919.tif 000007
【図７】
0006407919.tif 000008
【図８】
0006407919.tif 000009
【図９】
0006407919.tif 000010