本発明の実施形態を図面を参照して説明する。以下説明は、図中に矢印で示す左右、前後、上下を使用する。工作機械1の左右方向、前後方向、上下方向は、夫々、X軸方向、Y軸方向、Z軸方向である。
図1を参照し、工作機械1の構造を説明する。工作機械1は主軸9に装着した工具4を回転し、テーブル13上面に保持した被削材(図示略)に各種加工を施す。各種加工とは、例えばドリル、タップ等を用いた穴空け加工、エンドミル、フライス等を用いた側面加工等である。数値制御装置30(図2参照)は工作機械1の動作を制御する。
工作機械1は、基台2、コラム5、主軸ヘッド7、主軸9、テーブル装置10、工具交換装置20、制御箱6、操作盤15(図3参照)等を備える。基台2は略直方体状の金属製土台である。コラム5は基台2上部後方に立設する。
主軸ヘッド7はコラム5前面に設けたZ軸移動機構でZ軸方向に昇降する。Z軸移動機構は一対のZ軸リニアガイド(図示略)、Z軸ボール螺子(図示略)、Z軸モータ51(図2参照)を備える。Z軸リニアガイドはZ軸方向に沿って延び、主軸ヘッド7をZ軸方向に案内する。Z軸ボール螺子は一対のZ軸リニアガイドの間に配置する。主軸ヘッド7は背面にナット(図示略)を備える。ナットはZ軸ボール螺子に螺合する。Z軸モータ51はZ軸ボール螺子を正逆方向に回転する。故に主軸ヘッド7はナットと共にZ軸方向に移動する。主軸ヘッド7は主軸モータ52(図2参照)を備える。主軸9は主軸ヘッド7内部に回転可能に設ける。主軸9は下端部(先端部)に装着穴(図示略)を有する。装着穴は主軸ヘッド7下部に位置する。主軸9は装着穴に工具4を装着し、主軸モータ52の駆動で回転する。
テーブル装置10は、Y軸移動機構(図示略)、Y軸テーブル12、X軸移動機構(図示略)、テーブル13等を備える。Y軸移動機構は基台2上面前側に設け、一対のY軸レール、Y軸ボール螺子、Y軸モータ54(図2参照)等を備える。一対のY軸レールとY軸ボール螺子はY軸方向に延びる。一対のY軸レールは上面にY軸テーブル12をY軸方向に案内する。Y軸テーブル12は略直方体状に形成し、底部外面にナット(図示略)を備える。該ナットはY軸ボール螺子に螺合する。Y軸モータ54がY軸ボール螺子を回転すると、Y軸テーブル12はナットと共に一対のY軸レールに沿って移動する。故にY軸移動機構はY軸テーブル12をY軸方向に移動可能に支持する。
X軸移動機構はY軸テーブル12上面に設け、一対のX軸レール(図示略)、X軸ボール螺子(図示略)、X軸モータ53(図2参照)等を備える。X軸レールとX軸ボール螺子はX軸方向に延びる。テーブル13は平面視矩形板状に形成し、Y軸テーブル12上面に設ける。テーブル13は底部にナット(図示略)を備える。該ナットはX軸ボール螺子に螺合する。X軸モータ53がX軸ボール螺子を回転すると、テーブル13はナットと共に一対のX軸レールに沿って移動する。故にX軸移動機構はテーブル13をX軸方向に移動可能に支持する。故にテーブル13は、Y軸移動機構、Y軸テーブル12、X軸移動機構により、基台2上をX軸方向とY軸方向に移動可能である。
工具交換装置20は主軸ヘッド7前側に設け、円盤型の工具マガジン21を備える。工具マガジン21は外周に複数のグリップアーム90を放射状に備える。グリップアーム90は工具(図示略)を保持する。工具交換装置20はマガジンモータ55(図2参照)を駆動して工具マガジン21を回転し、NCプログラムに記述した工具交換指令が指示する工具4を工具交換位置に位置決めする。工具交換位置は工具マガジン21の最下部位置である。工具交換装置20は、主軸ヘッド7の昇降動作と、グリップアーム90の揺動動作により、主軸9に現在装着する工具4と、工具交換位置にある次工具とを入れ替え交換する。
制御箱6はコラム5背面側に取り付け、数値制御装置30(図2参照)を格納する。操作盤15(図2参照)は、例えば工作機械1を覆うカバー(図示略)の外壁に設ける。操作盤15は入力部24と表示部25を備える。表示部25は数値制御装置30からの指令に基づき各種画面等を表示する。入力部24は各種情報、操作指示等の入力を受け付けるタッチパネル(図示略)、物理的な各種ボタン(図示略)等を有し、数値制御装置30に各種入力情報を出力する。タッチパネルは表示部25に設ける。
図2を参照し、数値制御装置30と工作機械1の電気的構成を説明する。数値制御装置30は、CPU31、ROM32、RAM33、記憶装置34、入出力部35、駆動回路51A〜55A等を備える。CPU31は数値制御装置30を統括制御する。ROM32は、チェック位置設定プログラム、位置算出プログラム、NC運転プログラムを含む各種プログラム等を記憶する。チェック位置設定プログラムは、後述するチェック位置設定処理(図8参照)を実行するものである。位置算出プログラムは、チェック位置設定プログラムのサブプログラムであり、後述する位置算出処理(図9参照)を実行するものである。NC運転プログラムは、後述するNC運転処理(図21参照)を実行するものである。
RAM33は各種情報を一時的に記憶する。記憶装置34は不揮発性であり、NCプログラムの他、各種情報を記憶する。NCプログラムは例えば図3に示す如く、各種コードを含む複数行で構成し、工作機械1の軸移動、工具交換等を含む各種動作を行単位で制御するものである。CPU31は操作者が操作盤15の入力部24で入力したNCプログラムに加え、外部入力で読み込んだNCプログラム等を記憶装置34に記憶できる。
駆動回路51AはZ軸モータ51とエンコーダ51Bに接続する。駆動回路52Aは主軸モータ52とエンコーダ52Bに接続する。駆動回路53AはX軸モータ53とエンコーダ53Bに接続する。駆動回路54AはY軸モータ54とエンコーダ54Bに接続する。駆動回路55Aは工具マガジン21を駆動するマガジンモータ55とエンコーダ55Bに接続する。Z軸モータ51、主軸モータ52、X軸モータ53、Y軸モータ54、マガジンモータ55は何れもサーボモータである。駆動回路51A〜55AはCPU31から位置指令を受け、対応する各モータ51〜55に位置指令信号を夫々出力する。位置指令信号はパルス信号(駆動電流)である。駆動回路51A〜55Aはエンコーダ51B〜55Bからエンコーダ情報を受け、位置と速度のフィードバック制御を行う。エンコーダ情報は、トルクモニタ値、速度、位置、位置偏差等の各種情報を含む。CPU31は入出力部35を介してエンコーダ情報を読み取ることができる。入出力部35は操作盤15の入力部24と表示部25に夫々接続する。
図3〜図7を参照し、NCプログラムに挿入する位置検出用のMコードと、該Mコードで指定する加工経路中のチェック位置を説明する。図3に示すNCプログラムP1は、図4に示す被削材70の側面を連続加工する一般的なものである。工具4又は主軸9の位置を示すx、y座標はワーク座標である。説明の便宜上、z座標は省略する。NCプログラムP1のN01行目のG90;はアブソリュート指令、N02行目のG0X100.Y250;はA1点(100,250)への位置決め指令、N03行目のG1X100.Y50;はA2点(100,50)への直線補間指令、N04行目のG1X0.Y50;はA3点(0,50)への直線補間指令、N05行目のG1X0.Y200;はA4点(0,200)への直線補間指令、N06行目のG1X150.Y200;はA5点(150,200)への直線補間指令、NnのM30はプログラム終了指令である。A1点への移動は第一工程、A1点〜A2点迄の移動は第二工程、A2点〜A3迄の移動は第三工程、A3点〜A4点迄の移動は第四工程、A4点〜A5点迄の移動は第五工程である。数値制御装置30は第一〜第五工程を実行することで、被削材70の四つの側面を連続加工する。
図4に示す加工経路において、第二工程は被削材70に工具4が最初に接触する重要な工程である。故に操作者は第二工程の実行直前に工作機械1の動作を一旦停止し、目視確認を行う場合がある。図5に示す如く、NCプログラムP1の運転停止中、操作者はテーブル13の位置を動かすことで、工具4の被削材70に対する相対位置をA1点からA6点に移動する介入操作を行う場合がある。介入操作後、操作者がNCプログラムP1の運転再開の操作を行った時、数値制御装置30は工具4がA1点に在ることを前提としてA2点に向けて直線補間を実行する。工具4は誤った位置であるA6点からA2点に向けて移動する途中で、被削材70と干渉する可能性がある。
本実施形態は、工具4が誤った位置からNCプログラムの運転を再開するのを防止する為、NCプログラム中の特定箇所に位置検出用のMコードを挿入する。数値制御装置30はNCプログラム実行中、位置検出用のMコードを解釈した時、工具4が予め設定したチェック位置に在るか否かの確認を行う。チェック位置は、NCプログラム中の特定箇所実行時において工具4が在ると予測される予測位置であり、後述するチェック位置設定処理(図8参照)で予め設定する。
図4に示す加工経路上において、第二工程実行直前位置であるA1点をチェック位置とする場合、NCプログラムP1は、N02行目とN03行目の間に例えばM380を挿入する。N03行目以降は一行ずつ繰り下がる。図6に示す如く、NCプログラムP1のN03行目はM380、N04行目はG1X100.Y50;となる。M380は、M380の前の行であるN02行目を特定箇所に指定する。N02行目は、A1点(100.250)への位置決め指令で且つアブソリュート指令で記述してある。故にチェック位置はA1点(100,250)に設定すればよい。後述するが、チェック位置の座標値は操作者自らが手動で入力できるが、数値制御装置30による自動計算機能を用いて座標値を算出することもできる。
数値制御装置30は、後述するNC運転処理(図21参照)の中で、図6に示すNCプログラムP1N03行目のM380を解釈することで、工具4が予め設定したチェック位置であるA1点に在るか否か確認する。図5に示す如く、工具4がA1点とは異なる位置に在る時、工具4は誤った位置からA2点に向けて移動するので、被削材70と干渉する可能性がある。故に数値制御装置30はエラーを出力し、NCプログラムP1の運転を即時停止することで、工具4と被削材70が干渉するのを防止できる。なお、本実施形態は、例えばM380〜M387の8つの位置検出用のMコードを使用できるので、NCプログラム中に一つ又は複数の位置検出用のMコードを挿入できる。NCプログラム中に複数の位置検出用のMコードを挿入する場合、数値制御装置30は複数の工程の夫々の実行直前の位置を確認できる。故に数値制御装置30は被削材70を精度良く確実に加工できる。
図6に示すNCプログラムP1は、N03行目のM380の前のN02行目がアブソリュート指令で記述してあるので、チェック位置の座標値は、N02行目の位置決め指令の指令位置をチェック位置に設定すればよい。これに対し、M380の前の行がインクレメンタル指令で記述してある場合、チェック位置の座標値を操作者自ら算出することが困難な場合がある。例えば、図7に示すNCプログラムP2は、N06行目にM380を挿入する。N01行目はG90のアブソリュート指令であるが、N03行目はG91のインクレメンタル指令である。故にN04行目、N05行目の直線補間指令はインクレメンタル指令で記述してあるので、N06行目のM380に対応するチェック位置の座標値は、N02行目の直線補間指令の指令位置まで遡って算出する必要がある。チェック位置は(x,y,z)=(30,30,30)であるが、速やかに算出するのは容易ではない。インクレメンタル指令で記述する行が何百、何千と多数連続する場合、チェック位置を操作者自ら算出するのは不可能である。故に数値制御装置30は後述する位置算出処理(図9参照)を実行することで、チェック位置の座標値を速やかに且つ正確に算出できる。
図8〜図21を参照し、チェック位置設定処理を説明する。チェック位置設定処理は、NCプログラム中に一つ又は複数のチェック位置を予め設定する為のものである。操作者が操作盤15の入力部24でNCプログラムのチェック位置設定開始の操作を行うと、CPU31はROM32からチェック位置設定プログラムを読み出し、本処理を実行する。
CPU31は表示部25にプログラム選択画面61(図10参照)を表示する(S1)。図10に示す如く、プログラム選択画面61は、プログラム一覧表示部611、情報表示部612、プログラム番号入力部613、メニューキー614、決定キー615等を備える。プログラム一覧表示部611は記憶装置34に記憶する複数のNCプログラムを一覧で表示し、例えばプログラムNo、サイズ、コメント、更新日等を表示可能である。コメントの欄には各プログラムに関する種々の情報を入力して表示できる。
情報表示部612はプログラム一覧表示部611の下側に配置する。プログラム番号入力部613は情報表示部612の内側に配置する。メニューキー614は、プログラム選択画面61の下方左隅に配置する。決定キー615はメニューキー614の右方に配置する。操作者は、プログラム一覧表示部611に表示した複数のNCプログラムのうち一のプログラムの番号をプログラム番号入力部613に入力し、決定キー615を押下する。すると、プログラム一覧表示部611に表示した複数のNCプログラムの中で、プログラム番号入力部613に入力された番号のNCプログラムが選択されて白黒反転表示する。情報表示部612は、プログラム一覧表示部611に入力した番号のNCプログラムの各種情報を表示する。メニューキー614を押下すると、CPU31は各種操作・設定機能を選択する為のメニュー画面(図示略)を表示部25に表示する。
プログラム一覧表示部611で選択された1001番のNCプログラムにチェック位置を設定する為、操作者は決定キー615を押下する。CPU31はプログラムチェック画面62(図11参照)を表示部25に表示する(S3)。
図11に示す如く、プログラムチェック画面62は、情報表示部621、戻るキー622、プログラムチェックキー623等を備える。情報表示部621は、プログラムチェック画面62の略中央部に配置し、例えば「プログラム(1001)プログラムチェックキーを押下してください」と表示する。戻るキー622は、プログラム選択画面61に表示を戻す操作を受け付ける。プログラムチェックキー623は、プログラムチェックの開始を受け付ける。操作者がプログラムチェックキー623を押下すると、CPU31はプログラムチェック処理を開始する(S4)。プログラムチェック処理は例えばNCプログラムの文法チェック等を行う。プログラムチェック処理が終了してNCプログラムに異常がある場合、CPU31は例えば情報表示部621に異常内容を表示する。NCプログラムが正常であった場合、CPU31はチェック位置設定画面63(図12参照)を表示部25に表示する(S5)。
図12に示す如く、チェック位置設定画面63は、チェック位置設定部631、情報表示部632、座標入力部633、終了キー634、自動設定キー635等を備える。チェック位置設定部631は、NCプログラム(1001番)に設定可能なMコードに対応するチェック位置のXYZ軸の各座標値を表示する。本実施形態は一つのNCプログラムに対し、例えば8つのMコード(M380〜M387)を設定可能である。図12に示すチェック位置設定部631は、M380〜M387のうち、M380〜M383の夫々のチェック位置のXYZ軸の各座標値を表示する。操作者がチェック位置設定画面63を次頁に切り替えると、チェック位置設定部631は、残りのM384〜M387の夫々のチェック位置のXYZ軸の各座標値を表示する。空欄は未設定である。チェック位置設定部631は操作者が選択したチェック位置の座標値の欄を白黒反転表示する。操作者が例えばMコード380を選択することで、M380の欄が白黒反転表示する(図13参照)。
情報表示部632はチェック位置設定部631の下方に配置し、各種情報を表示する。座標入力部633は情報表示部632の内側に配置し、チェック位置設定部631で選択した欄の座標値の入力を受け付ける。終了キー634はチェック位置設定画面63の下方左隅に配置する。操作者が終了キー634を押下すると、CPU31はチェック位置設定画面63を終了し、プログラム選択画面61(図10参照)に表示を戻す。自動設定キー635は終了キー634の右方に配置する。自動設定キー635は、操作者が例えばM380を選択した場合、M380に対応するチェック位置のXYZ軸の各座標値の自動設定を受け付ける。自動設定とは、Mコードに対応するチェック位置のXYZ軸の各座標値を自動で算出して設定する機能である。
図8に示す如く、CPU31はチェック位置の座標値の入力を受け付けたか否か判断する(S6)。操作者が座標入力部633に座標値を入力した場合(S6:YES)、CPU31はチェック位置設定部631で選択した欄に、座標入力部633に入力した座標値を表示して設定する(S7)。設定した座標値は例えばRAM33に記憶する。CPU31は終了キー634が押下したか否か判断する(S9)。終了キー634が押下しない場合(S9:NO)、CPU31はS6に戻り、チェック位置の座標値の入力を受け付ける。終了キー634が押下した場合(S9:YES)、CPU31は本処理を終了し、メニュー画面を表示部25に表示する。
操作者が座標入力部633に座標値を入力しない場合(S6:NO)、CPU31は自動設定キー635が押下したか否か判断する(S8)。例えば操作者がM380を選択して自動設定キー635を押下した場合(S8:YES)、CPU31は情報表示部632の表示を切り替える。図13に示す如く、情報表示部632は、図12に示す座標入力部633に代えて、メインプログラム番号入力部637を表示し、例えば「実行キーを押してください。選択中のプログラムがサブプログラムの場合はメインプログラム番号を入力して実行キーを押してください。」というメッセージを表示する。CPU31は、図12に示す終了キー634と自動設定キー635に代えて、実行キー638とキャンセルキー639を表示する。キャンセルキー639は自動設定をキャンセルし、図12に示すチェック位置設定画面63に表示を戻す為のものである。
CPU31はメインプログラム番号の入力を受け付け(S10)、実行キー638が押下されたか否か判断する(S11)。位置検出用のMコードを挿入するNCプログラムがサブプログラムである場合、操作者は、メインプログラム番号入力部637にメインプログラムのプログラム番号を入力してから、実行キー638を押下する。メインプログラム番号入力部637に入力したプログラム番号は、例えばRAM33に記憶する。位置検出用のMコードを挿入するNCプログラムがメインプログラムである場合、操作者は、メインプログラム番号入力部637には何も入力せずに、実行キー638を押下する。実行キー638が押下されるまで(S11:NO)、CPU31はS10に戻り、メインプログラム番号の入力を受け付け、実行キー638の押下を監視する(S11)。
操作者が実行キー638を押下した場合(S11:YES)、CPU31はメインプログラム番号が指定されたか否か判断する(S12)。操作者がメインプログラム番号入力部637にメインプログラム番号を入力してから実行キー638を押下した場合、CPU31はメインプログラム番号をRAM33に記憶して指定しているので(S12:YES)、チェック位置の設定を行うNCプログラムはサブプログラムである。CPU31はRAM33に記憶するメインプログラム番号に基づき、メインプログラムを特定する(S13)。CPU31は後述する位置算出処理(図9参照)におけるNCプログラムの解釈開始位置を、特定したメインプログラムの先頭行に設定し(S14)、メインプログラムとサブプログラムに基づき位置算出処理を実行する(S15)。他方、操作者がメインプログラム番号入力部637に入力せずに実行キー638を押下した場合、メインプログラム番号は指定されていないので(S12:NO)、チェック位置の設定を行うNCプログラムはメインプログラムである。故にCPU31はそのNCプログラムに基づき、位置算出処理を実行する(S15)。
図9,図15〜図20を参照し、位置算出処理を説明する。本実施形態は、以下の六つの場面を想定して順に説明する。
・第一場面・・・NCプログラムP3(図15参照)のチェック位置を算出する場合
・第二場面・・・NCプログラムP4(図16参照)のチェック位置を算出する場合
・第三場面・・・NCプログラムP5(図17参照)のチェック位置を算出する場合
・第四場面・・・サブプログラムであるNCプログラムP6B(図18参照)のチェック位置を算出する場合
・第五場面・・・サブプログラムであるNCプログラムP7B(図19参照)のチェック位置を算出する場合
・第六場面・・・サブプログラムであるNCプログラムP8B(図20参照)のチェック位置を算出する場合
第一〜第三場面は、M380を挿入するNCプログラムがメインプログラムの例、第四〜第六場面は、M380を挿入するNCプログラムがサブプログラムの例である。CPU31はROM32から位置算出プログラムを読み出し、本処理を実行する。
−第一場面−
図15に示すNCプログラムP3は、N05行目のM380よりも前に、N01行目のアブソリュート指令があり、チェック位置の座標値が確定する正常なNCプログラムの一例である。図9に示す如く、CPU31は、予測位置情報(x,y,z)を(0,0,0)に初期化する(S21)。予測位置情報は、NCプログラムP3を先頭行から一行ずつ仮に実行した場合に予測される主軸9の座標値で表される位置情報であり、例えばRAM33等に記憶する。CPU31はXYZ軸の全ての軸確定情報をオフする(S22)。軸確定情報は各軸の座標値が確定していることを示す情報であり、例えばXYZ軸毎にRAM33等に記憶する。CPU31はNCプログラムP3の先頭行から一行解釈する(S23)。CPU31は解釈した行にM30が有るか否か判断する(S24)。解釈した行にM30が有る場合(S24:YES)、チェック位置の座標値の算出が出来ていないので、NCプログラムは誤りである可能性がある。故にCPU31は表示部25に警告表示を行い(S28)、本処理を終了する。故に操作者はNCプログラムの誤りに速やかに気付くことができ、誤りを修正できる。
解釈した行にM30が無い場合(S24:NO)、CPU31は解釈した行にチェック位置設定画面63で選択したM380が有るか否か判断する(S25)。解釈した行にM380が無い場合(S25:NO)、CPU31は解釈した行に軸移動指令が有るか否か判断する(S29)。NCプログラムP3のN01行目はG90のアブソリュート指令であるので(S29:NO)、CPU31はS23に戻って次の一行を解釈する。
NCプログラムP3のN02行目はG0のXYZ軸の位置決め指令であり、軸移動指令であるので(S25:NO、S29:YES)、CPU31はその指令がアブソリュート指令又は固定点への移動指令か判断する(S30)。固定点への移動指令は、例えばリファレンス点復帰指令である。リファレンス点復帰指令は例えばG31(図17参照)で指定し、記憶装置34に予め設定したリファレンス点に復帰する指令である。N02行目の位置決め指令は、XYZ軸の座標値をアブソリュート指令で記述してあるので(S30:YES)、現時点でXYZ軸の座標値は確定する。故にCPU31はXYZ軸の夫々の軸確定情報をオンする(S31)。CPU31は予測位置情報に、位置決め指令が指定する指令位置のXYZ軸の各座標値を上書きする(S32)。CPU31はS23に戻って次の一行を解釈する。
N03行目はG91のインクレメンタル指令であるので(S25:NO、S29:NO)、CPU31はS23に戻って次の一行を同様に解釈する。N04行目はG0の位置決め指令で軸移動指令であるが(S25:NO、S29:YES)、インクレメンタル指令で記述してあるので(S30:NO)、CPU31は軸移動指令がスキップ指令か否か判断する(S33)。スキップ指令は後述するG31で指令し、スキップ信号を途中で受信した場合にG31で指定する終了位置迄の移動をキャンセルする制御コードである。N04行目の軸移動指令はスキップ指令では無いので(S33:NO)、CPU31は移動対象のXYZ軸の夫々の軸確定情報がオンしているか否か判断する(S35)。上記の通り、XYZ軸の夫々の軸確定情報は、N02行目のG0解釈時にオンしているので(S35:YES)、CPU31は予測位置情報に、位置決め指令が指定するXYZ軸の各座標値を加算する(S36)。CPU31はS23に戻って次の一行を同様に解釈する。
NCプログラムP3のN05行目はM380であるので(S25:YES)、N05行目の前のN04行目の実行後において、予測位置情報のXYZ軸の座標値が確定している必要がある。CPU31はXYZ軸の全ての軸確定情報がオンしているか否か判断する(S26)。XYZ軸の軸確定情報は、N02行目のG0解釈時に全てオンしたので(S26:YES)、CPU31はRAM33に記憶する予測位置情報を、チェック位置のXYZ軸の各座標値に確定する(S27)。CPU31は位置算出処理を終了し、図8に示すチェック位置設定処理のS16に戻る。
図8に戻り、CPU31は位置算出処理の算出結果を表示部25に表示する(S16)。図14に示す如く、CPU31はチェック位置設定画面63のチェック位置設定部631に表示したM380のチェック位置X、チェック位置Y、チェック位置Zの夫々の欄に、位置算出処理の算出結果であるXYZ軸の各座標値を表示する。算出結果を表示した欄は白黒反転表示する。CPU31は、算出したチェック位置のXYZ軸の各座標値を記憶装置34に記憶し(S17)、チェック位置設定処理を終了する。
−第二場面−
図16に示すNCプログラムP4は、N05行目のM380よりも前が全てインクレメンタル指令で記述してあり、チェック位置の座標値が確定しないNCプログラムの一例である。CPU31はNCプログラムP4について、上記NCプログラムP3と同様に一行ずつ解釈を進める。N01行目はG91のインクレメンタル指令、N02〜N04行目は何れもG0の位置決め指令である。故にN05行目のM380を解釈する迄に、アブソリュート指令、固定点への移動指令の何れも存在しないので(S30:NO)、CPU31はXYZ軸の夫々の軸確定情報を何れもオンしない。
N05行目のM380の解釈時(S25:YES)、XYZ軸の夫々の軸確定情報は何れもオフであるので(S26:NO)、チェック位置のXYZ軸の各座標値は何れも確定しない。故にCPU31は表示部25に警告表示を行い(S28)、NCプログラムP4に誤りがあることを操作者に通知してから位置算出処理を終了する。操作者はNCプログラムP4に誤りが有ることに気付くことができるので、NCプログラムP4を速やかに修正できる。その他、操作者は、チェック位置設定画面63においてM380に対応するチェック位置のXYZ軸の各座標値を自ら入力することもできる。
−第三場面−
図17に示すNCプログラムP5は、N06行目のM380よりも前にG31のスキップ指令が有ることにより、チェック位置の座標値が確定しないNCプログラムの一例である。N02行目のG0の位置決め指令は、アブソリュート指令で記述してあるので(S29:YES、S30)、CPU31は移動対象であるXYZ軸の夫々の軸確定情報をオンし(S31)、予測位置情報に、N02行目の位置決め指令のXYZ軸の各座標値を上書きする(S32)。CPU31はS23に戻って次のN03行目を解釈するが、N03行目はG31のスキップ指令であり(S30:NO、S33:YES)、スキップ信号を受信した時は指令位置への移動をキャンセルしてしまうので、G31実行後の終了位置は不確定である。故にCPU31はXYZ軸の夫々の軸確定情報をオフする(S34)。
CPU31はS23に戻って次のN04行目を解釈するが、N04行目はG91のインクレメンタル指令であるので(S25:NO、S29:NO)、CPU31はS23に戻って次のN05行目を解釈する。N05行目のG0の位置決め指令はインクレメンタル指令で記述してあるが(S29:YES、S30:NO、S33:NO)、移動対象であるXYZ軸の軸確定情報は何れもオフしているので(S35:NO)、CPU31はS23に戻って次のN06行目を解釈する。N06行目はM380であるが(S25:YES)、XYZ軸の夫々の軸確定情報はオフしていることから(S26:NO)、CPU31はチェック位置のXYZ軸の各座標値を確定できない。故にCPU31は表示部25に警告表示を行い(S28)、NCプログラムP5に誤りがあることを操作者に通知し、位置算出処理を終了する。操作者は、NCプログラムP5に誤りが有ることに気付くことができるので、NCプログラムP5を修正できる。その他、操作者は、チェック位置設定画面63においてM380に対応するチェック位置のXYZ軸の各座標値を自ら入力することもできる。
−第四場面−
図18に示すNCプログラムP6Bは、NCプログラムP6Aをメインプログラムとするサブプログラムであり、メインプログラムに関係無く、サブプログラムだけでチェック位置の座標値が確定するNCプログラムの一例である。NCプログラムP6Bのプログラム番号は1000番である。NCプログラムP6AのN03行目のM98P1000は、1000番のサブプログラムの呼出指令である。NCプログラムP6BはN06行目にM380を挿入する。
上記の通り、サブプログラムであるNCプログラムP6BのM380のチェック位置の自動設定機能を利用する場合、操作者は、図13に示すチェック位置設定画面63のメインプログラム番号入力部637にメインプログラムの番号を入力してから、実行キー638を押下する。チェック位置設定処理(図8参照)において、メインプログラムの番号を特定したので(S12:YES、S13)、CPU31は位置算出処理(図9参照)における解釈開始位置を、特定したメインプログラムの先頭行に設定する(S14)。故にCPU31は、メインプログラムであるNCプログラムP6Aの先頭行から一行ずつ解釈してから、サブプログラムであるNCプログラムP6Bを先頭行から一行ずつ解釈するので、チェック位置の座標値を正確に算出できる。
なお、第四場面は、サブプログラムであるNCプログラムP6Bだけでチェック位置の座標値が確定する。故に操作者は、チェック位置設定画面63(図13参照)において、メインプログラム番号入力部637にメインプログラムの番号を入力せずに、実行キー638を押下してもよい。CPU31は位置算出処理(図9参照)にて、NCプログラムP6Bの先頭行から一行ずつ解釈するが、チェック位置の座標値の算出結果はメインプログラムから算出する場合と同じである。サブプログラムを一見しただけでは、サブプログラムだけでチェック位置の座標値が確定するか否かの判断は困難であるので、サブプログラムに設定するチェック位置の座標値を算出する場合、操作者はメインプログラム番号入力部637にメインプログラムの番号を一律に入力してもよい。
−第五場面−
図19に示すNCプログラムP7Bは、NCプログラムP7Aをメインプログラムとするサブプログラムであり、サブプログラムだけではチェック位置の座標値が確定しないが、メインプログラムから解釈すれば確定するNCプログラムの一例である。NCプログラムP7Bのプログラム番号は2000番である。NCプログラムP7AのN03行目のM98P2000は、2000番のサブプログラムの呼出指令である。NCプログラムP7BはN05行目にM380を挿入する。
NCプログラムP7Bでは、N01行目がG91のインクレメンタル指令であるので、N02〜N04行目のG0の位置決め指令は全てインクレメンタル指令で記述してある。故にCPU31はNCプログラムP7Bを先頭行から解釈しても、チェック位置の座標値を算出できない。故に操作者は、チェック位置設定画面63(図13参照)のメインプログラム番号入力部637にメインプログラムの番号を入力してから、実行キー638を押下する。チェック位置設定処理(図8参照)において、メインプログラムの番号を特定したので(S12:YES、S13)、CPU31は位置算出処理(図9参照)の解釈開始位置を、特定したメインプログラムであるNCプログラムP7Aの先頭行に設定する(S14)。
NCプログラムP7AのN01行目はG90のアブソリュート指令であるので、N02行目のG0の位置決め指令はアブソリュート指令で記述してある。故にCPU31は、メインプログラムであるNCプログラムP7Aの先頭行から一行ずつ解釈してから、サブプログラムであるNCプログラムP7Bを先頭行から一行ずつ解釈することで、チェック位置の座標値を正確に算出できる。
−第六場面−
図20に示すNCプログラムP8Bは、NCプログラムP8Aをメインプログラムとするサブプログラムであり、サブプログラムだけではチェック位置の座標値を確定できず、メインプログラムから解釈しても確定できないNCプログラムの一例である。NCプログラムP8Bのプログラム番号は3000番である。NCプログラムP8AのN03行目のM98P3000は、3000番のサブプログラムの呼出指令である。NCプログラムP8BはN05行目にM380を挿入する。
NCプログラムP8Bでは、N01行目がG91のインクレメンタル指令であるので、N02〜N04行目のG0の位置決め指令は全てインクレメンタル指令で記述してある。故にCPU31はNCプログラムP8Bを先頭行から解釈しても、チェック位置の座標値を算出できない。メインプログラムであるNCプログラムP8AのN01行目もG91のインクレメンタル指令であるので、N02行目のG0の位置決め指令はインクレメンタル指令で記述してある。故にCPU31は、メインプログラムであるNCプログラムP7Aの先頭行から一行ずつ解釈しても、サブプログラムであるNCプログラムP8Bに挿入するM380のチェック位置の座標値を確定できない。
図9に示す位置算出処理において、NCプログラムP8A,P8Bの何れにも、アブソリュート指令又は固定点への移動指令が存在しないので(S30:NO)、XYZ軸の夫々の軸確定情報はオフしたままである。NCプログラムP8BのN05行目のM380を解釈する時(S25:YES)、RAM33に記憶する軸確定情報はオフであるので(S26:NO)、チェック位置のXYZ軸の各座標値を確定できない。故にCPU31は表示部25に警告表示を行い(S28)、NCプログラムP8A,P8Bの少なくとも何れかに誤りがあることを操作者に通知してから、位置算出処理を終了する。操作者は、NCプログラムP8A,P8Bの少なくとも何れかに誤りが有ることに気付くことができるので、NCプログラムP8A,P8Bを修正できる。その他、操作者は、チェック位置設定画面63においてM380に対応するチェック位置のXYZ軸の各座標値を自ら入力することもできる。
図21を参照し、NC運転処理を説明する。NC運転処理は、記憶装置34に記憶するNCプログラムを一行ずつ読み込んで各種コードを実行するものである。本実施形態は、図6に示すNCプログラムP1を実行する場合を例に説明する。NCプログラムP1のチェック位置の座標値はA1点(100,250)に予め設定したものとする。操作者が操作盤15の入力部24で複数のNCプログラムの中からNCプログラムP1を選択し、NCプログラムP1の運転開始の操作を行うと、CPU31はROM32からNC運転プログラムを読み出し、本処理を実行する。
CPU31はNCプログラムP1の先頭行から一行解釈する(S41)。解釈した行にM30が有るか否か判断する(S42)。解釈した行にM30が有れば(S42:YES)、CPU31は本処理を終了する。解釈した行にM30が無ければ(S42:NO)、CPU31は解釈した行に、位置検出用のMコードであるM380〜M387の少なくとも何れかが記述してあるか否か判断する(S43)。解釈した行にM380〜387の何れも記述して無ければ(S43:NO)、CPU31は解釈した行の制御コードに基づき、動作を実行する(S44)。例えばNCプログラムP1のN02行目を解釈した場合、N02行目はG0X100.Y250;であるので、CPU31は第一工程の軸移動を実行する。工具4はA1点(100,250)に移動する。CPU31はS41に戻り、次のN03行目を解釈する。
N03行目にはM380が記述してあるので(S43:YES)、CPU31はM380に対応するチェック位置の座標値を記憶装置34から取得する(S45)。M380に対応するチェック位置の座標値はA1点(100,250)である。CPU31は取得したチェック位置の座標値と、主軸9の実位置の座標値とが一致するか否か判断する(S46)。主軸9の実位置とは、主軸9の現在位置である。CPU31はエンコーダ51B,53B,54BからZ軸モータ51、X軸モータ53、Y軸モータ54の夫々のエンコーダ情報を取得し、主軸9の現在位置を検出する。工具4がA1点に位置する場合(図4参照)、チェック位置の座標値と実位置の座標値は一致するので(S46:YES)、CPU31はプログラム運転を継続し、S41に戻って処理を繰り返す。
例えばNCプログラムP1のN02行目の第一工程実行後、操作者がNCプログラムP1の運転を一旦停止し、工具4をA1点〜A6点迄移動する介入操作を行った後で、NCプログラムP1の運転を再開した場合を想定する。NCプログラムP1の運転はN02行目まで終了しているので、CPU31はN03行目から実行する。N03行目はM380であるので(S43:YES)、CPU31はM380に対応するチェック位置であるA1点の座標値を取得し(S45)、主軸9の実位置の座標値と一致するか否か判断する(S46)。実位置はA6点であり、チェック位置とは異なるので(S46:NO)、CPU31はエラーを出力することで、NCプログラムP1の運転を停止し(S47)、本処理を終了する。故に数値制御装置30は、NCプログラム運転途中で介入操作があった場合でも、誤った位置からNCプログラムの運転を開始するのを防止できる。
図22を参照し、NC運転処理において、メインプログラムが呼び出すサブプログラムの番号が間違っていた場合における運転停止効果を説明する。NCプログラムP9Bは、NCプログラムP9Aをメインプログラムとするサブプログラムである。NCプログラムP9Aのプログラム番号は100番である。NCプログラムP9Bのプログラム番号は4000番である。NCプログラムP9AのN03行目のM98P4000は、4000番のサブプログラムの呼出指令である。NCプログラムP9BはN03行目にM380を挿入する。
NCプログラムP9BのM380に対応するチェック位置の座標値の自動設定を行う場合、操作者は、図13に示すチェック位置設定画面63のメインプログラム番号入力部637にメインプログラムの番号である100番を入力してから、実行キー638を押下する。チェック位置設定処理(図8参照)のS12において、メインプログラムの番号は指定されているので(S12:YES)、CPU31は位置算出処理(図9参照)の解釈開始位置を、指定したメインプログラムの先頭行に設定する(S14)。故にCPU31は、メインプログラムであるNCプログラムP9Aの先頭行から一行ずつ解釈してから、サブプログラムであるNCプログラムP9Bを先頭行から一行ずつ解釈することで、チェック位置の座標値を算出する。
NCプログラムP10は、NCプログラムP9A,P9Bとは関係の無いメインプログラムであるが、N03行目はNCプログラムP9AのN03行目と同じM98P4000であり、4000番のサブプログラムの呼出指令である。操作者はNCプログラムP10の誤りに気付かずに、NCプログラムP10の運転開始の操作を行うと、CPU31はNC運転処理(図21参照)を実行する。CPU31は、NCプログラムP10のN03行目の解釈で、NCプログラムP9Bをサブプログラムとして呼び出し、NCプログラムP9Bを先頭行から解釈して実行する。N03行目のM380を解釈した場合(S43:YES)、CPU31はM380に対応するチェック位置の座標値を記憶装置34から取得し(S45)、現在位置の座標値と一致するか否か判断する(S46)。
NCプログラムP9BのN02行目のG0の位置決め指令はインクレメンタル指令で記述してある。N03行目実行後における実位置の座標値は、NCプログラムP10のN02行目のアブソリュート指令で指定した座標値(200,200,200)に、今回の位置決め指令の座標値(10,10,10)を加算した座標値である。故にチェック位置の座標値と実位置の座標値は異なるので(S46:NO)、CPU31はエラーを出力し、NCプログラムP10の運転を停止できる(S47)。故に数値制御装置30は仮にメインプログラムの実行途中で、別のサブプログラムを誤って呼び出した場合でも、CPU31はNCプログラムの運転を途中で停止できる。故に操作者はメインプログラム中のサブプログラムの呼出指令に誤りがあることに気付くことができる。
以上説明の如く、本実施形態の数値制御装置30は工作機械1の動作をNCプログラムに基づき制御する。工作機械1は主軸9と共に回転する工具4で被削材70を切削する。NCプログラムは、主軸9の位置検出用のMコード(M380)を挿入する。Mコードは、NCプログラムの中で、テーブル13又は主軸9の位置を確認したい特定箇所に挿入する。数値制御装置30のCPU31はNCプログラムに挿入するM380で特定箇所を指定する。CPU31はM380で指定した特定箇所における主軸9の予測位置を、チェック位置としてRAM33に予め記憶する。CPU31はNCプログラムの運転中、M380を実行する時、RAM33からチェック位置を取得し、主軸9の実位置と一致するか否か判断する。主軸9の実位置とチェック位置が一致する場合、主軸9はNCプログラムに基づく加工経路上に位置するので、CPU31はNCプログラムの運転は継続する。主軸9の実位置とチェック位置が一致しない場合、主軸9はNCプログラムに基づく加工経路上に位置しないので、CPU31は主軸9に装着する工具4と被削材70、又は冶具等とが干渉する可能性があるので、エラーを出力し、NCプログラムの運転を停止する。故に数値制御装置30はNCプログラム実行時に一旦停止し、介入操作を行った後で、誤った位置から加工を開始するのを防止できる。
上記実施形態のCPU31はNCプログラム中に記述した制御コードに基づき、チェック位置の座標値を演算する。故に数値制御装置30はNCプログラム中の特定箇所におけるチェック位置の座標値を演算して取得できる。
上記実施形態のCPU31はM380で指定した特定箇所がメインプログラムに従属するサブプログラムに属するか判断する。サブプログラムに属する場合、CPU31は、操作者が入力するメインプログラム番号に基づき、サブプログラムが従属するメインプログラムを特定する。CPU31はメインプログラム中に記述した制御コードに遡って、サブプログラムに属する特定箇所における主軸9のチェック位置の座標値を演算する。故に数値制御装置30は特定箇所がサブプログラムに属する場合でも、そのサブプログラムが従属するメインプログラムまで遡って予測位置を正確に演算できる。
上記実施形態は、例えば被削材を複数の工程で加工する様な長いNCプログラムを実行する場合、M380を挿入する特定箇所を、複数の工程のうち少なくとも一つの工程を実行する前の箇所に設定するとよい。特に重要な工程を実行する前の箇所に設定することで、誤った位置から被削材の加工が開始するのを防止できる。
以上説明にて、Y軸テーブル12、X軸移動機構、Y軸移動機構は本発明の移動機構の一例である。図21のS43の処理を実行するCPU31は本発明の指定手段の一例である。S45の処理を実行するCPU31は本発明の取得手段の一例である。S46の処理を実行するCPU31は本発明の判断手段の一例である。S47の処理を実行するCPU31は本発明の出力手段の一例である。図8のS12の処理を実行するCPU31は本発明のサブプログラム判断手段の一例である。S13の処理を実行するCPU31は本発明の特定手段の一例である。図21のS43の処理は本発明の指定工程の一例である。図8のS45の処理は本発明の取得工程の一例である。S46の処理は本発明の判断工程の一例である。S47の処理は本発明の出力工程の一例である。
本発明は上記実施形態に限らず、各種変形が可能なことはいうまでもない。本実施形態は、NCプログラムに設定するチェック位置を、位置検出用のMコードを特定箇所に挿入して設定する。本実施形態はMコードに代えて、例えばNCプログラム中に記述する制御コードで特定箇所を指定してもよい。制御コードは、例えばG0(位置決め指令)、G1(直線補間指令)、M03(主軸回転指令)、S(主軸回転数指令)、T(次工具設定指令)等である。数値制御装置30は例えば指定した制御コードを最初に解釈する箇所でのチェック位置の座標値を算出するようにしてもよい。但し、G0、G1等の制御コードは、NCプログラム中に何度でも記述可能であるので、例えば先頭行から何番目のG0という様に制御コードを指定してもよい。例えば図3に示すNCプログラムP1において、N03行目実行直前の位置をチェック位置として設定する場合、先頭行から1番目のG0を指定すればよい。
本実施形態は、NCプログラムに設定するチェック位置を、位置検出用のMコードを特定箇所に挿入して設定するが、Mコード以外の指定コードを用いてもよい。本実施形態は指定コードに代えて、例えばNCプログラム中に記述する制御コードのパラメータで特定箇所を指定してもよい。本実施形態のMコードは、M380〜387の何れかを用いることができるが、Mコードの番号、数等はこれに限定しない。
本実施形態の工作機械1は、工具4を装着する主軸9がZ軸方向に移動可能であり、テーブル13がX軸とY軸方向の二軸に移動可能である。テーブルに対してX軸、Y軸、Z軸方向に相対的に移動する工具4の移動機構の仕組みは上記実施形態に限定しない。例えば主軸はX、Y、Z軸方向の三軸に駆動するもので、テーブルは固定若しくは回転可能であってもよい。上記実施形態の工作機械1は主軸がZ軸方向に対して平行な縦型の工作機械であるが、主軸が水平方向に延びる横型の工作機械であってもよい。
本実施形態は、ワーク座標で主軸9の位置を指定するが、機械座標で指定してもよい。主軸9の位置を機械座標で指定する場合、チェック位置は機械座標で設定すればよい。本実施形態は、テーブル13の位置をワーク座標又は機械座標で指定してもよい。
本実施形態は、図4に示す如く、四つの工程で被削材70の側面を連続で切削するNCプログラムを一例として説明したが、被削材70を切削する工程の数は限定しない。NCプログラムの長さは長くても短くてもよい。
本実施形態は、図18〜図19を参照し、メインプログラムに従属するサブプログラムが一つの例を説明したが、サブプログラムが複数であってもよい。例えばサブプログラムが更に別のサブプログラムを呼び出すようなものでもよい。
本実施形態は、図13に示すチェック位置設定画面63において、M380に対応するチェック位置のXYZ軸の各座標値の欄をまとめて選択し自動設定を行う例を説明したが、例えば特定の軸の座標値の欄を選択して自動設定を行うことも可能である。
本実施形態の駆動回路51A〜55Aは数値制御装置30に設けているが、駆動回路51A〜55Aを工作機械1に設けてもよい。