以下、本発明の第一の実施の形態乃至第三の実施の形態を図面を参照して説明する。第一の実施の形態乃至第三の実施の形態の数値制御装置1は、被加工物(ワーク)を工具を用いて加工する装置である。数値制御装置1はワークを固定し、工具を移動させ、作動させることによりワークを加工する。この工具の移動の指令はNCプログラム(図2参照)に記述されており、NCプログラムを1行ずつ解釈して、工具を移動、作動させる。数値制御装置1では、「ドライラン動作」でNCプログラムを実行させ、このNCプログラムが正しい動きをするかを確認する。つまり、「ドライラン動作」は、NCプログラムのテスト動作である。このドライラン動作では、実際にワークを加工するのではなく、工具とワークとの距離を離して動作させる。この工具とワークとを離す距離が「オフセット量」である。これにより、実際にワークを加工することなく、NCプログラムの指示による工具の動きを確認することができる。本発明の数値制御装置では、この「オフセット量」をNCプログラムに基づいて自動で設定する。
ここで、図1を参照して、数値制御装置1の電気的構成について説明する。図1は、数値制御装置1の電気的構成を示すブロック図である。この構成は、第一の実施の形態乃至第三の実施の形態の数値制御装置1に共通である。
図1に示すように、数値制御装置1には、数値制御装置1の制御を行うCPU10が設けられている。このCPU10は、数値制御装置1全体の制御の中心となるプロセッサであり、バス18を介して、ROM11,入力インターフェース12,出力インターフェース13,RAM14に接続されている。そして、ROM11には、数値制御装置1の制御を行う制御プログラムが記憶されており、CPU10はROM11から制御プログラムを読み出し、この制御プログラムがRAM14に記憶されたNCプログラムを読み出してワークの加工を実行する。RAM14には一時的な計算データ、表示データなども格納される。
そして、入力インターフェース12には、キーボード15、ドライランスイッチ16、起動スイッチ17が接続されている。キーボード15は、数値制御装置1に種々の情報を入力することができる。ドライランスイッチ16は、「ドライラン動作」で数値制御装置1を動作させるか否かの指示が入力される。ドライランスイッチ16がONであれば、「ドライラン動作」で数値制御装置1を動作させ、OFFであれば、ドライラン動作でない
「通常動作」で動作させる。つまり、OFFであれば、NCプログラムどおりの工具とワークとの位置関係で動作する。起動スイッチ17は、NCプログラムの実行を指示するスイッチである。ONされると、NCプログラムが読み出され、1行ごとに指令が実行される。また、出力インターフェース13には、工具2(図3、図6、図8参照)をX軸方向へ移動させるためのX軸モータ31を駆動する駆動回路21、工具2をY軸方向へ移動させるためのY軸モータ32を駆動する駆動回路22、工具2をZ軸方向へ移動させるためのZ軸モータ33を駆動するための駆動回路23、工具2の主軸を回転させる主軸モータ34を駆動する駆動回路24、表示装置35の制御を行う制御回路25を接続している。
次に、図2を参照して、NCプログラムについて説明する。図2は、NCプログラムの模式図である。図2に示すように、NCプログラムは1行を1ブロックとして、工具2の動作が定義されている。そして、各行の先頭に「N」と数字で表されているブロック番号が記載されている。図2に示す例では、「N1」,「N2」,「N3」・・・,「N6」の6つのブロックが記載されている。そして、「N1」の「Z250」,「N3」の「Z200」、「N4」の「Z230」、「N5」の「Z198」は工具をZ軸のどの位置まで移動させるかを示す指令である。本実施の形態では、ワークから離れる方向に数値が大きくなるように座標系が設定されている。なお、図3に示す例では、図3における上下方向がZ軸方向となり、図3における下から上に向かって座標値が大きくなる。
また、「N1」,「N4」の「G0」は工具2を移動させて位置を決める指令である。よって、「N4」の「G0Z230」は、工具2をZ軸の230まで移動させる指令で(移動指令)ある。また、「N3」,「N5」の「G1」は、工具2を動作させながら指定の方向へ移動させる指令(切削移動指令)である。そして、「G90」は、座標指示が絶対値指定方式であることを指定しており、「M8」は切削油を供給する指令であり、「M30」はプログラムの終了の指令である。
なお、切削移動指令は「G1」だけでなく、例えば、「G2」,「G3」,「G102」,「G103」,「G202」,「G203」,「G12」,「G13」がある。「G2」は、時計回りで円を描きながら切削を行う円弧補間指令又はヘリカル補間指令である。「G3」は、反時計回りで円を描きながら切削を行う円弧補間指令又はヘリカル補間指令である。円弧補間指令とヘリカル補間指令との違いは、ヘリカル補間指令にはZ軸方向の移動を伴いながら切削をすることである。円弧補間指令ではZ軸方向の移動は伴わない。「G102」は、時計回りで、X軸及びZ軸方向の円弧で切削を行うXZ円弧補間指令である。「G103」は、反時計回りで、X軸及びZ軸方向の円弧で切削を行うXZ円弧補間指令である。「G202」は、時計回りで、Y軸及びZ軸方向の円弧で切削を行うYZ円弧補間指令である。「G203」は、反時計回りで、Y軸及びZ軸方向の円弧で切削を行うYZ円弧補間指令である。「G12」は、時計回りで円の切削を行う円切削指令である。「G13」は、反時計回りで円の切削を行う円切削指令である。オフセット量の決定の際に利用されるものは、Z軸方向への移動を伴うものである。したがって、これらの切削移動指令において、「G1」,「G2」,「G3」でZ軸方向への移動の指令があるもの、「G102」,「G103」,「G202」,「G203」である。
次に、図3を参照して、第一の実施の形態における「オフセット量」について説明する。図3は、オフセット量の決定方法の説明図である。図3に示す点線の矢印は、Z軸の移動指令(G0)による工具2の先端の移動軌跡を示しており、実線の矢印は、Z軸の切削移動指令(G1)による工具2の先端の移動軌跡を示している。図3に示す例では、3箇所で切削動作が行われている。左の切削移動の開始点がSS1、終了点がSE1であり、中央の切削移動の開始点がSS2、終了点がSE2であり、右の切削移動の開始点がSS3、終了点がSE3である。それぞれの移動量の大小関係は、中央の切削移動の移動量(SS2−SE2)<右の切削移動の移動量(SS3−SE3)<左の切削移動の移動量(SS1−SE1)である。第一の実施の形態では、ドライラン動作がONとされて、最初のNCプログラムの実行時に、全てのNCプログラムを解析し、Z軸の切削移動指令におけるZ軸方向の移動量(切削距離)のうち、最も長い距離を「オフセット量」とする。よって、図3に示す例では、左の切削移動の移動量「SS1−SE1」がオフセット量となる。
次に、図4及び図5のフローチャートを参照して、第一の実施の形態における数値制御装置1の動作について説明する。図4は、メモリ運転モードのフローチャートであり、図5は、メモリ運転モードの中で行われるオフセット量自動設定処理のフローチャートである。メモリ運転モード処理は、数値制御装置1の電源が投入され、メモリ運転モードに設定されているとCPU10が実行する処理である。なお、メモリ運転モードとは、NCプログラムを読み込み、NCプログラムの指令にしたがって、工具2を動作させるモードである。また、メモリ運転モード以外では、手動運転モードがあり工具を手動の指示により動作させる。これらのモードの切替は図示外のモード切替スイッチにより行うことができる。
メモリ運転モード処理では、まず、起動スイッチ17の操作が待機され、起動スイッチ17が操作されると、NCプログラムをRAM14から読み出し、1つ目のブロックを解釈対象のブロックとする(S1)。次いで、ドライランスイッチ16がONとされた後の最初の起動スイッチ17の操作であるか否かの判断を行う(S2)。この判断には、RAM14に設けられているドライラン起動フラグ記憶エリア(図示外)を用いる。このドライラン起動フラグは、ドライランスイッチ16がONとされると「1(ON)」が記憶される。そして、ドライランスイッチ16がOFFされるか、又は、ドライランスイッチ16がONである状態で起動スイッチ17が操作されると「0(OFF)」が記憶される。そこで、ドライラン起動フラグがONであれば、ドライランスイッチ16がONとされた後の最初の起動スイッチ17の操作であると判断される(S2:YES)。そして、オフセット量自動設定処理を行う(S3、図5参照)。このオフセット量自動設定処理では、NCプログラムに基づいてオフセット量が決定される。オフセット量自動設定処理については、図5を参照して後述する。なお、ドライラン起動フラグがOFFであり、ドライランスイッチ16がONとされた後の最初の起動スイッチ17の操作でないと判断された場合には(S2:NO)、既にオフセット量は決定されているので、そのままS4へ進む。
オフセット量自動設定処理によりオフセット量が決定されたら、解釈対象のブロックを解釈する(S4)。そのブロックにZ軸方向に移動する指令があるか否かの判断を行う(S5)。ここでは、解釈中のブロックにZ軸の移動指令又はZ軸の切削移動指令があれば、Z軸方向の移動があると判断する(S5:YES)。例えば、「G0Zzzz」、「G1Zzzz」,「G2Zzzz」,「G3Zzzz」,「G102Zzzz」,「G103Zzzz」,「G202Zzzz」,「G203Zzzz」であればZ軸方向の移動がある。なお、小文字のzは任意の数字であり、zzzはZ軸の移動先の座標を示している。Z軸方向に移動する指令であれば(S5:YES)、Z軸の移動先の座標zzzにオフセット量を加味する(S6)。具体的には、Z軸を動作させるZ軸モータ33を駆動する駆動回路23に対して出力する移動指令に移動先の座標zzz+オフセット量の値を載せる。そして、解釈対象のブロックの記述に基づいて各種駆動回路21〜24に指令を出力して、解釈対象のブロックの動作を実行する(S8)。そして、解釈対象のブロックを次の行に移し(S9)、S4へ戻る。なお、Z軸方向に移動する指令でなければ(S5:NO)、プログラム終了の指令であるか否かの判断を行う(S7)。プログラム終了指令でなければ(S7:NO)、解釈対象のブロックの動作を実行し(S8)、解釈対象のブロックを次の行に移し(S9)、S4へ戻り、プログラム終了指令まで繰り返しS4〜S9の処理を行う。プログラム終了の指令であれば(S7:YES)、S1へ戻り、起動スイッチ17の操作が待機される(S1)。
以上のようにして、オフセット量が加味されてZ軸モータが駆動されるので、ワーク3と工具2との距離が、NCプログラムの指定する距離よりもオフセット量だけ離れた状態でNCプログラムが実行される。
次に、図5を参照して、オフセット量自動設定処理について説明する。図5に示すように、オフセット量自動設定処理では、まず、変数Zmax,移動前位置を初期化し、NCプログラムの最初の行を解釈対象のブロックとする(S11)。移動前位置には、Z軸方向の移動範囲の最大値を記憶する。本第一の実施の形態では「600」とする。変数Zmaxの初期値は、工具2のZ軸方向の移動範囲の最小値以下の値であればよい。本第一の実施の形態では、工具2のZ軸方向の移動範囲の最小値を「0」とし、変数Zmaxの初期値も「0」とする。これらの変数はRAM14に記憶エリアが設けられている。そして、解釈対象のブロックを解釈する(S12)。そして、このブロックにZ軸方向に移動する指令があるか否かの判断を行う(S13)。ここでは、解釈対象のブロックにZ軸の移動指令又はZ軸の切削移動指令があれば、Z軸方向の移動があると判断する(S13:YES)。
Z軸方向の移動であれば(S13:YES)、さらにZ軸の切削移動指令であるか否かの判断を行う(S14)。例えば、「G1Zzzz」,「G2Zzzz」,「G3Zzzz」,「G102Zzzz」,「G103Zzzz」,「G202Zzzz」,「G203Zzzz」があれば、Z軸の切削移動指令であると判断され(S14:YES)、切削移動の移動量を算出し、変数Zmvに記憶する(S15)。変数Zmvは、「移動前位置−切削移動指令の移動先の座標zzz」で算出される。次いで、変数Zmvが変数Zmaxよりも高いか否かの判断を行う(S16)。つまり、切削移動の移動量Zmv>Zmaxであれば、変数Zmaxよりも長く移動していると判断し(S16:YES)、変数Zmaxに切削移動の移動量Zmvの値を記憶する(S17)。また、切削移動の移動量Zmv≦Zmaxであれば、変数Zmaxよりも長くないと判断し(S16:NO)、変数Zmaxを更新しない。次いで、移動先の座標zzzを移動前位置に記憶する(S19)。
次いで、解釈対象のブロックを一つ進める(S21)。そして、S12へ戻り、解釈対象のブロックを解釈する(S12)。そして、このブロックでZ軸方向に移動するか否かの判断を行う(S13)。Z軸方向に移動する指令である場合には(S13:YES)、さらにZ軸の切削移動指令であるか否かの判断を行い(S14)、Z軸の切削移動指令でなければ(S14:NO)、移動先の座標zzzを移動前位置に記憶する(S19)。そして、解釈対象のブロックを次の行に移し(S21)、そのブロックを解釈する(S12)。このブロックにZ軸方向に移動する指令がない場合には(S13:NO)、プログラム終了の指令であるか否かの判断を行う(S20)。プログラム終了の指令であれば(S20:YES)、オフセット量に変数Zmaxの値を記憶して(S22)、メモリモード運転処理へ戻る。
図2に示したNCプログラムの例では、「N1」は「G0Z250」なので(13:YES、S14;NO)、移動前位置に「250」を記憶する(S19)。次いで、「N2」では、「M8」なのでZ軸の移動指令はなく(S13:NO)、プログラム終了指令でもないので(S20:NO)、変数の更新はない。次いで、「N3」では、「G1Z200」なので(S13:YES、S14:YES)、切削移動の移動量Zmvが変数Zmaxと比較される(S16)。この時点では、切削移動の移動量Zmv=移動前位置−切削移動指令の移動先の座標zzz=250−200=50>0=変数Zmaxなので(S16:YES)、変数Zmaxは「50」となる(S17)。そして、移動前位置を「200」とする(S19)。次いで、「N4」は「G0Z230」なので(S13:YES、S14;NO)、移動前位置に「230」を記憶する(S19)。次いで、「N5」では、「G1Z198」なので(S13:YES、S14:YES)、切削移動の移動量Zmvが変数Zmaxと比較される(S16)。この時点では、切削移動の移動量Zmv=移動前位置−切削移動指令の移動先の座標zzz=230−198=32<50=変数Zmaxなので(S16:NO)、変数Zmaxを更新しない。そして、移動前位置を「198」とする。「N6」は「M30」なので(S13:NO)、プログラム終了と判断され(S20:YES)、「オフセット量」に変数Zmax=「50」を記憶する(S22)。
以上のようにして、ドライラン動作がONとされて、最初のNCプログラムの実行時に、オフセット量自動設定処理が行われ、全てのNCプログラムを解析し、Z軸の切削移動指令におけるZ軸方向の移動量(切削距離)のうち、最も長い距離を「オフセット量」とする。よって、NCプログラムに基づいて自動的にオフセット量が決定されるので、オフセット量を操作者が入力する場合に発生しうる、操作者によるオフセット量の計算誤り、オフセット量の入力誤り、オフセット量の入力忘れが発生しない。したがって、人為的ミスにより工具とワークとが接触して、ワークを損傷させてしまうことがない。また、切削動作の中で最も大きい移動量がオフセット量とされるので、加工プログラムに対して一律でオフセット量を決定する場合で、安全な量のうち最も少ない量をオフセット量に設定することができる。よって、ワークと工具との距離は、安全な距離のうち最も少ない距離となる。したがって、操作者が加工プログラムの動作を確認する際に、ワークと工具を目視する場合に、工具がワークのどの位置を切削するのかが分かりやすい。
なお、第一の実施の形態において、図4に示すメモリ運転モード処理のS3、すなわち図5に示すオフセット量自動設定処理でオフセット量を決定する処理を行うCPU10が「オフセット量決定手段」に相当し、メモリ運転モード処理のS4〜S7の処理を繰り返し、S3のオフセット量自動設定処理で決定されたオフセット量を加味して数値制御装置1を動作させるCPU10が「ドライラン動作手段」に相当する。
次に、図6を参照して、第二の実施の形態における「オフセット量」について説明する。図6は、オフセット量の決定方法の説明図である。図3と同様に図6に示す点線の矢印は、Z軸の移動指令による工具2の先端の移動軌跡を示しており、実線の矢印は、Z軸の切削移動指令による工具2の先端の移動軌跡を示している。図6に示す例では、3箇所で切削動作が行われている。左の切削移動の開始点がSS1、終了点がSE1であり、中央の切削移動の開始点がSS2、終了点がSE2であり、右の切削移動の開始点がSS3、終了点がSE3である。それぞれの開始点の大小関係は、SS2<SS1<SS3であり、終了点の大小関係は、SE2<SE1<SE3である。本実施の形態では、NCプログラム中の切削移動における開始点の最大値と、終了点の最小値との距離を「オフセット量」とする。図6に示す例では、右の切削移動の開始点SS3が開始点の最大値であり、中央の切削移動の終了点SE2が終了点の最小値である。この開始点SS3から終了点SE2までの距離が「オフセット量」とされる。
次に、図4及び図7のフローチャートを参照して、第二の実施の形態における数値制御装置1の動作について説明する。図7は、メモリ運転モードの中で行われるオフセット量自動設定処理のフローチャートである。第二の実施の形態におけるメモリ運転モード処理は、第一の実施の形態と同様に、ドライランスイッチ16がONとされた後の最初の起動スイッチ17の操作が行われると、オフセット量自動設定処理が行われ、オフセット量が自動設定される。
図7のフローチャートを参照して、オフセット量自動設定処理について説明する。図7に示すように、オフセット量自動設定処理では、まず、変数Zmax,変数Zmin,移動前位置を初期化し、NCプログラムの最初の行が解釈対象のブロックとされる(S31)。移動前位置には、Z軸方向の移動範囲の最大値を記憶する。本第二の実施の形態では「600」とする。変数Zminの初期値は、工具2のZ軸方向の移動範囲の最大値以上の値、変数Zmaxの初期値は、工具2のZ軸方向の移動範囲の最小値以下の値であればよい。本第二の実施の形態では、工具2のZ軸方向の移動範囲の最小値を「0」とし、最大値を「600」とし、変数Zmaxの初期値も「0」、変数Zminの初期値も「600」とする。これらの変数はRAM14に記憶エリアが設けられている。
そして、解釈対象のブロックを解釈する(S32)。そして、このブロックにZ軸方向に移動する指令があるか否かの判断を行う(S33)。ここでは、解釈中のブロックにZ軸の移動指令又はZ軸の切削移動指令があれば、Z軸方向の移動があると判断する(S33:YES)。例えば、「G0Zzzz」、「G1Zzzz」,「G2Zzzz」,「G3Zzzz」,「G102Zzzz」,「G103Zzzz」,「G202Zzzz」,「G203Zzzz」であればZ軸方向の移動である。なお、小文字のzは任意の数字であり、zzzはZ軸の移動先の座標を示している。
Z軸方向の移動であれば(S33:YES)、さらにZ軸の切削移動指令であるか否かの判断を行う(S34)。例えば、「G1Zzzz」,「G2Zzzz」,「G3Zzzz」,「G102Zzzz」,「G103Zzzz」,「G202Zzzz」,「G203Zzzz」があれば、Z軸の切削移動指令であると判断され(S34:YES)、移動前位置が変数Zmaxよりも高いか否かの判断を行う(S35)。つまり、移動前位置>Zmaxであれば、変数Zmaxよりも高いと判断し(S35:YES)、変数Zmaxに移動前位置の値を記憶する(S36)。また、移動前位置≦Zmaxであれば、変数Zmaxよりも高くないと判断し(S35:NO)、変数Zmaxを更新しない。次いで、移動完了位置が変数Zminよりも低いか否かの判断を行う(S37)。つまり、移動完了位置である解釈中のブロックの指定する移動先の座標zzz<変数Zminであれば、移動先の座標zzzを変数Zminに記憶する(S38)。また、移動先の座標zzz≧変数Zminであれば、変数Zminを更新しない。そして、S39へ進み、移動先の座標zzzを移動前位置に記憶する(S39)。
次いで、解釈対象のブロックを一つ進める(S41)。そして、S32へ戻り、解釈対象のブロックを解釈する(S32)。そして、このブロックでZ軸方向に移動するか否かの判断を行う(S33)。Z軸方向に移動する指令である場合には(S33:NO)、さらにZ軸の切削移動指令であるか否かの判断を行い(S34)、Z軸の切削移動指令でなければ(S34:NO)、移動先の座標zzzを移動前位置に記憶する(S39)。そして、解釈対象のブロックを次の行に移し(S41)、そのブロックを解釈する(S32)。このブロックにZ軸方向に移動する指令がない場合には(S33:NO)、プログラム終了の指令であるか否かの判断を行う(S40)。プログラム終了の指令であれば(S40:YES)、オフセット量に「変数Zmax−変数Zmin」の値を記憶して(S42)、メモリモード運転処理へ戻る。
図2に示したNCプログラムの例では、「N1」は「G0Z250」なので(S33:YES、S34;NO)、移動前位置に「250」を記憶する(S39)。次いで、「N2」では、「M8」なのでZ軸の移動指令はなく(S33:NO)、プログラム終了指令でもないので(S40:NO)、変数の更新はない。次いで、「N3」では、「G1Z200」なので(S33:YES、S34:YES)、移動前位置が変数Zmaxと比較される(S35)。この時点では、移動前位置=250>変数Zmax=0なので(S35:YES)、変数Zmaxは「250」となる(S36)。そして、移動完了位置=200<600変数=Zminなので(S37:YES)、変数Zminは「200」となる(S38)。そして、移動前位置を「200」とする(S39)。次いで、「N4」は「G0Z230」なので(13:YES、S34;NO)、移動前位置に「230」を記憶する(S39)。次いで、「N5」では、「G1Z198」なので(S33:YES、S34:YES)、移動前位置が変数Zmaxと比較される(S35)。この時点では、移動前位置=230<250=変数Zmaxなので(S35:NO)、変数maxを更新しない。そして、移動完了位置=198<200=変数Zminなので(S37:YES)、変数Zminは「198」となる(S38)。そして、移動前位置を「198」とする。「N6」は「M30」なので(S33:NO)、プログラム終了と判断され(S40:YES)、「オフセット量」に変数Zmax−変数Zmin=250−198=「52」を記憶する(S42)。
以上のようにして、第二の実施の形態では、NCプログラム中の切削移動における開始点の最大値と、終了点の最小値との距離が「オフセット量」とされる。よって、NCプログラムに基づいて自動的にオフセット量が決定されるので、オフセット量を操作者が入力する場合に発生しうる、操作者によるオフセット量の計算誤り、オフセット量の入力誤り、オフセット量の入力忘れが発生しない。したがって、人為的ミスにより工具とワークとが接触して、ワークを損傷させてしまうことがない。また、切削動作の中で最も工具とワークとが離れた位置と、最も工具とワークとが近づいた位置との差がオフセット量とされるので、余裕を持っているが大きな無駄はないオフセット量を設定することができる。
なお、第二の実施の形態において、図4に示すメモリ運転モード処理のS3、すなわち図7に示すオフセット量自動設定処理でオフセット量を決定する処理を行うCPU10が「オフセット量決定手段」に相当し、メモリ運転モード処理のS4〜S7の処理を繰り返し、S3のオフセット量自動設定処理で決定されたオフセット量を加味して数値制御装置1を動作させるCPU10が「ドライラン動作手段」に相当する。
次に、図8乃至図10を参照して、第三の実施の形態について説明する。図8は、オフセット量の決定方法の説明図である。図3と同様に、図8に示す点線の矢印は、Z軸の移動指令による工具2の先端の移動軌跡を示しており、実線の矢印は、Z軸の切削移動指令による工具2の先端の移動軌跡を示している。図8に示す例では、2箇所で移動、切削動作が行われている。左の移動の開始点がMS1、移動の終了点及び切削移動の開始点がSS1、終了点がSE2である。右の移動の開始点がMS2、移動の終了点及び右の切削移動の開始点がSS2、終了点がSE2である。第三の実施の形態では、Z軸の移動指令があれば、NCプログラムを先読みし、次のZ軸の切削移動指令におけるZ軸方向の移動量を「オフセット量」とする。
図8に示す例では、左の開始点MS1から終了点SS1への移動では、次の切削移動として、開始点SS1から終了点SE1までの切削移動が先読みされ、先読みされた切削移動の移動量(開始点SS1から終了点SE1までの距離)が「オフセット量」とされる。そして、左の開始点SS1から終了点SE1までの切削移動では、自身の切削移動の移動量(開始点SS1から終了点SE1までの距離)が「オフセット量」とされる。また、右の開始点MS2から終了点SS2への移動では、次の切削移動として、開始点SS2から終了点SE2までの切削移動が先読みされ、先読みされた切削移動の移動量(開始点SS2から終了点SE2までの距離)が「オフセット量」とされる。そして、右の開始点SS2から終了点SE2までの切削移動では、自身の切削移動の移動量(開始点SS2から終了点SE2までの距離)が「オフセット量」とされる。
次に、図9及び図10のフローチャートを参照して、第三の実施の形態における数値制御装置1の動作について説明する。図9は、メモリ運転モードのフローチャートである。図10は、メモリ運転モードの中で行われるオフセット量自動設定処理のフローチャートである。
図9に示すように、メモリ運転モード処理では、まず、起動スイッチ17の操作が待機され、起動スイッチ17が操作されると、NCプログラムをRAM14から読み出し、1つ目のブロックを解釈対象のブロックとする(S51)。次いで、解釈対象のブロックを解釈する(S52)。そのブロックにZ軸方向に移動する指令があるか否かの判断を行う(S53)。ここでは、解釈中のブロックにZ軸の移動指令又はZ軸の切削移動指令があれば、Z軸方向の移動があると判断する(S53:YES)。「G0Zzzz」、「G1Zzzz」,「G2Zzzz」,「G3Zzzz」,「G102Zzzz」,「G103Zzzz」,「G202Zzzz」,「G203Zzzz」であればZ軸方向の移動がある。なお、小文字のzは任意の数字であり、zzzはZ軸の移動先の座標を示している。Z軸方向に移動する指令であれば(S53:YES)、オフセット量自動設定処理を行う(S54、図10参照)。このオフセット量自動設定処理では、オフセット量が決定されるが、詳細については、図10を参照して後述する。Z軸の移動先の座標zzzにオフセット量を加味して(S55)、解釈対象のブロックの動作を実行する(S57)。そして、解釈対象のブロックを次の行に移し(S58)、S52へ戻る。なお、Z軸方向に移動する指令でなければ(S53:NO)、プログラム終了の指令であるか否かの判断を行う(S56)。プログラム終了指令でなければ(S56:NO)、解釈対象のブロックの動作を実行し(S57)、解釈対象のブロックを次の行に移し(S58)、S52へ戻り、プログラム終了指令まで繰り返しS52〜S58の処理を行う。プログラム終了の指令であれば(S56:YES)、S51へ戻り、起動スイッチ17の操作が待機される(S51)。
以上のようにして、Z軸方向の移動指令がある度に、その移動指令による移動以降の切削移動の移動距離がオフセット量自動設定処理で決定される。
次に、図10を参照して、オフセット量自動設定処理について説明する。図10に示すように、オフセット量自動設定処理では、まず、指令動作前位置に現在のZ軸座標の位置を記憶し、オフセット量自動設定処理での解釈対象のブロックを、メモリ運転モード処理での解釈対象のブロックとする(S61)。指令動作前位置及び、後述する指令動作後位置はRAM14に記憶エリアが設けられている。解釈中のブロックにZ軸の切削移動指令があるか否かの判断を行う(S62)。「G1Zzzz」,「G2Zzzz」,「G3Zzzz」,「G102Zzzz」,「G103Zzzz」,「G202Zzzz」,「G203Zzzz」がなければ、Z軸の切削移動指令はないと判断し(S62:YES)、Z軸方向に移動する指令があるか否かの判断を行う(S63)。ここでは、解釈中のブロックにZ軸の移動指令又はZ軸の切削移動指令があれば、Z軸方向の移動があると判断する(S63:YES)。
Z軸方向の移動であれば(S63:YES)、指令動作前位置にZ軸の移動先の座標zzzを記憶する(S65)。次いで、オフセット量自動設定処理での解釈対象のブロックを一つ進め(S66)、解釈対象のブロックを解釈する(S67)。そして、S62へ戻り、解釈中のブロックにZ軸の切削移動指令があるか否かの判断を行う(S62)。Z軸方向に移動する指令である場合には(S62:YES)、指令動作後位置に移動先の座標zzzを移動前位置に記憶する(S68)。そして、「オフセット量」に「指令動作前位置−指令動作後位置」の値を記憶して(S70)、メモリモード運転処理へ戻る。
なお、オフセット量自動設定処理を実施するきっかけとなったブロック以後のブロックにZ軸の切削移動指令や、Z軸の移動指令がないままに(S62:NO、S63:NO、S64:NO、S66,S67の繰り返し)、プログラム終了指令がきた場合には(S64:NO)、指令動作後位置にZ軸の最下端の位置(本第三の実施の形態では「0」)を記憶し(S69)、S70へ進み、オフセット量に「指令動作前位置−指令動作後位置」の値を記憶して(S70)、メモリモード運転処理へ戻る。
図2に示したNCプログラムの例では、「N1」は「G0Z250」なので(S53:YES)、オフセット量自動設定処理を行う(S54)。そして、オフセット量自動設定処理では、指令動作前位置には、Z軸の現在位置である最上端位置「600」を記憶し、メモリ運転モード処理での解析対象のブロック「N1」を、オフセット量自動設定処理の解析対象のブロックとする(S61)。N1は切削移動でなく(S62:NO)、Z軸の移動指令であるので(S63:YES)、指令動作前位置に「250」を記憶する(S65)。次いで、Z軸の解釈対象のブロックは「N2」となり(S67、S67)、「N2」は「M8」なので、切削指令でもなく(S62:NO)、Z軸の移動指令はなく(S63:NO)、プログラム終了指令でもないので(S64:NO)、変数の更新はない。次いで、「N3」では、「G1Z200」で切削移動指令なので(S62:YES)、指令動作後位置に「200」を記憶する(S68)。そして、「オフセット量」に指令動作前位置−指令動作後位置=250−200=「50」を記憶する(S70)。そして、メモリ運転モード処理では、オフセット量「50」を「N1」の「G0Z250」の「250」に加味して(S55)、「300」の位置まで移動を実施する(S57)。
そして、次のブロック「N2」を解釈対象のブロックとし(S58)、解釈する(S52)。「N2」は「M8」なので(S53:NO、S56:NO)、切削油を供給し(S57)、「N3」を釈対象のブロックとし(S58)、解釈する(S52)。「N3」は「G1Z200」なので、Z軸の移動のある指令であり(S53:YES)、オフセット量自動設定処理を行う(S54)。そして、オフセット量自動設定処理では、指令動作前位置には、Z軸の現在位置「250」を記憶し、メモリ運転モード処理での解析対象のブロック「N2」を、オフセット量自動設定処理の解析対象のブロックとする(S61)。N3は切削移動であるので(S62:YES)、指令動作後位置に「200」を記憶する(S68)。そして、「オフセット量」に指令動作前位置−指令動作後位置=250−200=「50」を記憶する(S70)。そして、メモリ運転モード処理では、オフセット量「50」を「N3」の「G1Z200」の「200」に加味して(S55)、「250」の位置まで切削を実施する(S57)。
そして、次のブロック「N4」を解釈対象のブロックとし(S58)、解釈する(S52)。「N4」は「G0Z230」なので、Z軸の移動のある指令であり(S53:YES)、オフセット量自動設定処理を行う(S54)。そして、オフセット量自動設定処理では、指令動作前位置には、Z軸の現在位置「200」を記憶し、メモリ運転モード処理での解析対象のブロック「N4」を、オフセット量自動設定処理の解析対象のブロックとする(S61)。N4は切削移動でなく(S62:NO)、Z軸の移動指令であるので(S63:YES)、指令動作前位置に「230」を記憶する(S65)。次いで、Z軸の解釈対象のブロックは「N5」となり(S66、S67)、「N5」は「G1Z198」で、切削移動であるので(S62:YES)、指令動作後位置に「198」を記憶する(S68)。そして、「オフセット量」に指令動作前位置−指令動作後位置=230−198=「32」を記憶する(S70)。そして、メモリ運転モード処理では、オフセット量「32」を「N4」の「G0Z230」の「230」に加味して(S55)、「262」の位置まで移動を実施する(S57)。
そして、次のブロック「N5」を解釈対象のブロックとし(S58)、解釈する(S52)。「N5」は「G1Z198」なので、Z軸の移動のある指令であり(S53:YES)、オフセット量自動設定処理を行う(S54)。そして、オフセット量自動設定処理では、指令動作前位置には、Z軸の現在位置「230」を記し、メモリ運転モード処理での解析対象のブロック「N5」を、オフセット量自動設定処理の解析対象のブロックとする(S61)。解釈中のブロックは「N5」である。そして、N5は切削移動であるので(S62:YES)、指令動作後位置に「198」を記憶する(S68)。そして、「オフセット量」に指令動作前位置−指令動作後位置=230−198=「32」を記憶する(S70)。そして、メモリ運転モード処理では、オフセット量「32」を「N5」の「G1Z198」の「198」に加味して(S55)、「230」の位置まで切削を実施する(S57)。
そして、次のブロック「N6」を解釈対象のブロックとし(S58)、解釈する(S52)。「N6」は「M30」なので、プログラム終了指令である(S56:YES)。よって、S51へ戻り、起動スイッチ17の押下を待機する(S51)。
以上のようにして、第三の実施の形態では、Z軸の移動指令があれば、NCプログラムを先読みし、次のZ軸の切削移動指令におけるZ軸方向の移動量を「オフセット量」とする。よって、NCプログラムに基づいて自動的にオフセット量が決定されるので、オフセット量を操作者が入力する場合に発生しうる、操作者によるオフセット量の計算誤り、オフセット量の入力誤り、オフセット量の入力忘れが発生しない。したがって、人為的ミスにより工具とワークとが接触して、ワークを損傷させてしまうことがない。また、加工プログラムを実行する最中にオフセット量が決定されるので、加工プログラム全体を解析してオフセット量を決定するよりも時間のロスが少ない。
なお、第三の実施の形態において、図9に示すメモリ運転モード処理のS54、すなわち図10に示すオフセット量自動設定処理でオフセット量を決定する処理を行うCPU10が「オフセット量決定手段」に相当し、メモリ運転モード処理のS52〜S58の処理を繰り返し、S3のオフセット量自動設定処理で決定されたオフセット量を加味して数値制御装置1を動作させるCPU10が「ドライラン動作手段」に相当する。
なお、本発明の数値制御装置は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。上記第一の実施の形態〜第三の実施の形態では、ワーク3を固定して、工具2を移動させる数値制御装置1を例に挙げて説明したが、工具2とワーク3の両方を移動させる数値制御装置であってもよい。また、工具2がワーク3に対して近づく方向をZ軸としたが、工具2が近づく方向は、その他の軸であってもよい。