以下、本発明の一実施例である数値制御装置について、図面を参照しながら説明する。本実施例の数値制御装置(NC装置)1は、図2に示す工作機械2に接続されて、該工作機械2を数値制御するものである。この工作機械2は、パレットに取り付けられたワークを主軸3に取り付けられたドリルやタップ等の工具4で加工するものである。
上記工作機械2は、XY軸移動装置5,Z軸移動装置6,主軸回転装置7,工具交換装置8,パレット交換装置9等から構成されている。XY軸移動装置5は、X軸モータ10とY軸モータ11とをそれぞれ駆動源とし、工具4をワークに対して主軸の方向(以下、Z軸方向という。図2中において、上下方向と一致する)に直角なX軸方向とY軸方向とにそれぞれ相対的に移動させる。Z軸移動装置6は、Z軸モータ12を駆動源とし、工具4をワークに対してZ軸方向に相対的に移動させる。
主軸回転装置7は、主軸モータ13を駆動源として主軸3を回転させ、これにより工具4を回転させる。工具交換装置8は、マガジンモータ14により旋回させられる工具マガジン15を有し、多数の工具4を工具マガジン15の複数の工具ポットにおいて着脱自在に収納保持し、それら工具4の一つを主軸3に装着するための工具交換可能な位置への割出しを行う。更に、工具交換装置8は、主軸3から工具4を外して工具マガジン15に戻した後、上記割り出された工具4を主軸3に装着する。
パレット交換装置9は、パレット交換モータ(以下、単にC軸モータという)16を駆動源として水平なテーブル17をZ軸に平行な軸線の回りに間欠的に回転させるものであり、テーブル17を180度ずつ回転させることにより、そのテーブル17の、回転軸線に関して対称な2部分のうち図2において左側の部分である第1パレット(加工パレット)18と右側の部分である第2パレット(加工パレット)19とのそれぞれの位置を交互に交換するものである。
図2に示す状態の場合、第1パレット18は、作業者により開閉可能な扉20を経て作業者によるワークの着脱が行われる着脱位置にあり(以降、着脱位置にあるパレットを、外側パレットと称す)、第2パレット19は、工具4によるワークの加工が行われる加工位置にある(以降、加工位置にあるパレットを、内側パレットと称す)。この状態で、テーブル17が180度だけ回転させられることにより、第1パレット18は加工位置に、第2パレット19は着脱位置にそれぞれ移動させられることになる。
上記構成の場合、パレット交換装置9をワーク交換装置と称しても良く、また、工作機械2のうちのパレット交換装置9を除く部分をワーク加工装置と称しても良い。
さて、数値制御装置1は、図2に示すように、工作機械2の後部に取り付けられている。この数値制御装置1について、図1に示すブロック図を参照して説明する。数値制御装置1は、コンピュータを主体として構成されており、図1に示すように、複数のCPU、即ち、第1のCPU21と第2のCPU22を備えている。
第1のCPU21は、数値制御のNCプログラムを管理する制御を実行するものであり、この第1のCPU21には、RAM23と、不揮発メモリ24と、RAM25と、リムーバブルディスク26とが接続されている。RAM23には、一時的な演算の中間データを保持(記憶)させる。不揮発メモリ24は、フラッシュメモリ等で構成された記憶装置であり、これには、第1のCPU21の制御プログラム(制御コード)と大量のNCプログラムを記憶(保有)させている。
リムーバブルディスク26は、着脱可能なハードディスクであり、記憶装置を構成しており、これには、ユーザーが新たに作成した大量のNCプログラムを記憶させておくことができる。第1のCPU21の転送処理によって、リムーバブルディスク26内のユーザーのNCプログラムを不揮発メモリ24へ転送する。
また、RAM25は、第1のCPU21と第2のCPU22との双方からリード・ライト可能なRAMであり、このRAM25は、第1のCPU21と第2のCPU22のデータのやり取りに使用される。特に、上記RAM25内には、運転するNCプログラムを転送して記憶させておく領域、即ち、運転バッファの領域が確保されている。上記RAM25が、記憶手段及びアドレス記憶手段を構成している。
第1のCPU21は、不揮発メモリ24内のNCプログラムの中から、運転するNCプログラムを選び出しRAM25内の運転バッファへ転送する機能を有している。上記第1のCPU21が、空き容量算出手段、プログラム容量算出手段、第1転送手段及び第2転送手段としての各機能を有している。
一方、第2のCPU22は、数値制御装置1の運転全般を制御する機能を有しており、RAM25の運転バッファ内のNCプログラムを解析し、動力系の信号へ変換し出力する制御を実行する。この第2のCPU22が、転送判断手段及び実行手段としての各機能を有している。上記第2のCPU22には、上記RAM25の他に、RAM27と、ROM28と、動力系IF29と、外部入出力IF30とが接続されている。
RAM27には、一時的な演算の中間データが記憶(保持)され、ROM28には、第2のCPU22の制御プログラム(制御コード)が記憶されている。動力系IF29には、XYZ軸の各モータ10、11、12や、主軸モータ13や、工具交換用のマガジンモータ14や、パレット交換モータ16等が接続されている(図1にはこれらのモータを図示していない)。
外部入出力IF30には、ワーク交換機構35と、NCプログラムスケジュール装置36とが接続されている。そして、外部入出力IF30は、外側起動スイッチ31と、次プログラム番号入力端子32と、次プログラムready端子33と、次プログラム要求端子34とを有している。上記外部入出力IF30が、入力手段及び完了信号検出手段としての各機能を有している。
外側起動スイッチ31は、ワーク交換機構35により、外側パレットにおいて加工済のワークの取り外し作業と新しいワークの取り付け作業が終了すると、その旨を示すために、例えばONされるようになっている。尚、ワーク交換機構35は、作業者またはロボット等で構成されている。
次プログラム番号入力端子32には、NCプログラムスケジュール装置36から、次に運転するNCプログラムのNCプログラム番号を示すデータ(NCプログラム番号を入力可能なbit数のデータ)が入力可能なように構成されている。次プログラムready端子33は、NCプログラムスケジュール装置36から、次に運転するNCプログラムのNCプログラム番号を示すデータの上記次プログラム番号入力端子32への入力が完了したとき、そのことを示すために、例えばONされる(ON信号が入力される)ようになっている。
また、次プログラム要求端子34は、NCプログラムスケジュール装置36に対して、次プログラム番号入力端子32へ次に運転するプログラム番号の入力と、次プログラムready端子33のセット(ON)を要求するときに、例えばONされる(ON信号が出力される)ように構成されている。尚、NCプログラムスケジュール装置36は、外部のシーケンサ等の機器で構成しても良いし、数値制御装置1の内部に設けるように構成しても良い。
次に、上記した構成の数値制御装置1の動作について、図3ないし図16を参照しながら説明する。
図3及び図4のフローチャートは、第2のCPU22の運転の制御内容を示しており、最初に、運転するNCプログラムの取得、及び、運転するNCプログラム番号の取得についての制御を行なう。
まず、図3のステップS201において、始めに運転するべきNCプログラムを求めるため、後述する図5の制御動作(第2のCPU22の制御のうち、図3、4の内の「“次プログラム要求”の出力」が発生してから、並列処理する制御)を起動(稼動)させる。尚、このステップS201は、電源を入れてから1回目の運転の前に実行されるだけである。
この後、「プログラム番号取得」フラグがON(図5のステップS308参照)するまで待つ(ステップS202)。
そして、「プログラム番号取得」のフラグがONしたら(ステップS202にてYES)、「プログラム転送完了」フラグがOFFのときだけ(ステップS202にてNO)、運転するNCプログラム番号と共に、「プログラム転送」フラグをONしたことを、RAM25を介して第1のCPU21へ伝達する(ステップS204)。
その後、外側起動スィッチ31がONするまで待つ(ステップS205)。通常の加工サイクル(加工を連続して行う)では、内側パレットで加工している間に、ワーク交換機構35により、ワークの取替えが行われ、外側起動スィッチ31がONとなるように工程が実行されるので、ここでの待ち時間は無い。
次に、外側起動スィッチ31がONしていれば(ステップS205にてYES)、並列動作命令(特開平5−313719号公報参照)が設定されているかを判断する(ステップS206)。ここで、並列動作命令の設定が無い場合(ステップS206にてNO)には、準備された外側パレットを加工装置へ移動させるため、パレット交換装置9の旋回要求を、図示しないパレットの制御動作へ出力する(ステップS213)。
これに対して、並列動作命令の設定が有る場合(ステップS206にてYES)、「並列動作転送完了」フラグがON(図5のステップS306、図7のステップS507、図11のステップS906参照)されるのを待つ(ステップS207)。尚、並列動作命令とは、NCプログラム内にある、パレット交換装置9の旋回と同時動作を行う命令のことで、予め数値制御装置1に登録しておく。多くは、NCプログラムの先頭から最初に行われる工具交換命令(NCプログラム上の“M6”コード)を登録することが多い。
上記「並列動作転送完了」フラグがONしたら、NCプログラムを1ブロック読み込み、運転バッファ上のNCプログラムの<読み込み位置>を、読み込んだブロックの終端の次アドレスへ設定する(ステップS208)。
尚、<読み込み位置>とは、第2のCPU22が運転バッファから1ブロック読み込むとき(図3のステップS208、図4のステップS218参照)、読むべきブロックの先頭アドレスのことである。ステップS205を実行開始してから、最初のブロックを読む際には、図12に示すプログラム管理データの一番上のNCプログラムの親プログラムのアドレス(図12のA0(A列0行))を参照し、そこが初期の<読み込み位置>となる。プログラム管理データは、RAM25内に設けられており、図12に示すような形態に構成されている。
プログラム管理データのAの列には、運転するNCプログラム番号が入っている。また、一番上の行(0行)には、運転するNCプログラムの親プログラムが入り、Bの列には、運転バッファ内の親プログラムの絶対位置のアドレスが入る。2番目の行以降は、運転するNCプログラムのサブプログラムが入り、Aの列には、サブプログラムの番号、Bの列には運転バッファ内の親プログラム先頭からみて、おのおののサブプログラムの先頭への相対アドレスが入る。また、最後の行(T行)のA列には、サブプログラムも含めたNCプログラム全ての総文字数が、B列には、最初の並列動作命令があるブロックの先頭アドレスが入っている。
次に、前ブロックの動作完了を得る(S211の動作が終了する、ただし、S205を開始して1回目は動作完了とする)まで待つ(ステップS209)。前ブロックの動作が完了した場合(ステップS209にてYES)、ステップS208にて読んだブロックが並列動作命令であるか否かを判断する(ステップS210)。ここで、並列動作命令でない場合(ステップS210にてNO)には、ブロックの命令に従った動作の開始を、即ち、図示しない、おのおのの制御動作の実行を指示する(ステップS211)。
一方、ステップS208で読んだブロックが並列動作命令であるならば(ステップS210にてYES)、パレット交換装置9の旋回の開始と、並列動作命令の開始を指示する、即ち、おのおのの制御動作の実行を指示する(ステップS212)。
続いて、図4のステップS214へ進み、ステップS204で要求した「プログラム転送」の要求の完了信号である「プログラム転送完了」フラグがON(図5のステップS306、図7のステップS507、図11のステップS908参照)するまで待つ。つまり、第2のCPU22がステップS203からステップS212の処理を行っている間に、第1のCPU21が「プログラム転送」の要求に応える処理を実行することとなる。
そして、「並列動作転送完了」フラグ、「プログラム番号の取得」フラグ、「プログラム転送完了」フラグをすべてOFFし、次のパレット(ステップS212、S213で外側へ搬出した外側パレット)用のNCプログラムの取得状態を初期化する(ステップS215)。
続いて、外側パレットが加工位置に移動して、ワークを加工するときに運転するNCプログラムを求めるために、後述する図5の制御動作を起動させる(ステップS216)。
そして、NCプログラムの次の<読み込み位置>が運転バッファ内にあるか否かを判断する(ステップS217)。ここで、次の<読み込み位置>が運転バッファ内にある場合(ステップS217にてYES)、NCプログラムを1ブロック読み込み、<読み込み位置>をブロックの終端の次アドレスへ設定する(ステップS218)。尚、ステップS205を実行開始してからステップS213までを実行した後、最初のブロックを読む際には、プログラム管理データ(図12参照)の一番上の親プログラムのアドレスを参照し、そこが<読み込み位置>となる。
次に、前ブロック(指示された1つ前の制御動作、S213、S212ないしS221で指示された動作)が動作完了(動作終了)するまで待つ(ステップS219)。前ブロックの動作が完了した場合(ステップS219にてYES)、ステップS218で読んだブロックがプログラムエンド命令であるか否かを判断する(ステップS220)。ここで、プログラムエンド命令の場合(ステップS220にてYES)には、次のパレットの運転を開始する、即ち、図3のステップS202へ戻る(遷移する)。
また、ステップS218で読んだブロックの命令が、プログラムエンド命令以外である場合(ステップS220にてNO)、ブロックの命令に従った動作の開始をおのおのの制御動作へ指示し、ワークに加工を施す(ステップS221)。この後、現在運転をしているNCプログラムがテープ運転であるか否かを判断し、テープ運転でなければ(ステップS222にてNO)、ステップS217へ戻り、処理を繰り返し実行する。
また、上記ステップS220において、ステップS218で読んだブロックの命令が、サブプログラムへの遷移命令の場合、プログラム管理データ上のプログラム番号に対応する、アドレス(図12のB列)を読み込み、親プログラムのアドレス(図12の0行A列の値)から加算した位置(リングバッファを加味した位置)に<読み込み位置>を更新する。
また、サブプログラムへの遷移命令のとき、その元の<読み込み位置>をRAM25へスタックしておき、その後、親プログラムに戻る指令の場合には、スタックしたものを<読み込み位置>に戻す。ここにおいて、サブプログラムが、プログラム管理データ上に無い場合には、<読み込み位置>が領域内にないとし、ステップS217へ戻った際、<読み込み位置>が運転バッファ内に無い(ステップS217にてNO)となる。
そして、読み込むブロックが運転バッファ内に無い場合(ステップS217にてNO)、及び、テープ運転の場合(ステップS222にてYES)、ステップS223へ進み、「プログラム領域」フラグをONして、第1のCPU21に対して、サブプログラムの要求の場合には、サブプログラムの要求と共に、転送して欲しいサブプログラム番号を、RAM25を介して伝達し、テープ運転の場合には、転送されていない部分の転送の要求と共に、開放してよい運転バッファの領域を、RAM25を介して伝達する。
次に、図5のフローチャートは、図3及び図4の制御とは別に第2のCPU22で並列稼動(処理)する制御の内容を示している。ここでの並列処理とは、第2のCPU22の処理資源を、リアルタイムOSなどにより、図3及び図4の制御と図5の処理とを短い時間間隔で分割して行い実現すれば良い。この図5の制御は、図3のステップS201及び図4のステップS216を開始トリガとして、起動されて実行される。
即ち、図3のステップS201及び図4のステップS216から起動された直後、NCプログラムスケジュール装置36に対して、次プログラム要求端子34をONする(ステップS301)。続いて、“次プログラムready”端子33がONされる(ON信号あり)まで待つ(ステップS302)。これに対して、NCプログラムスケジュール装置36は、次プログラム要求端子34のONを受けて、次に運転するべきNCプログラムのNCプログラム番号を次プログラム番号入力端子32に出力する共に、次プログラムready端子33をONする。
すると、第2のCPU22においては、上記次プログラムready端子33のONを受けて、ステップS302にてYESへ進み、次プログラム番号入力端子32を読み取り(ステップS303)、次プログラム要求端子34をOFFする(ステップS304)。これに対して、NCプログラムスケジュール装置36は、次プログラム要求端子34のOFFを受けて、次プログラムready端子33をOFFする。
この後、第2のCPU22においては、ステップS303で得たプログラム番号が、既に親プログラムとして、運転バッファに登録(転送)されているかどうか判断する(ステップS305)。ここで、プログラム管理データは、RAM25上にパレットの数(2つ)だけ存在し、テープ運転の場合を除き、運転バッファのプログラム管理データに登録されているNCプログラムが上書きされた場合、プログラム管理データも第1のCPU21によって初期化される。よって、プログラム管理データを参照すれば、運転バッファ内にNCプログラムが存在するか否かを判断できる。例えば、両パレットのNCプログラムが運転バッファに全て収まっている場合、パレット毎のNCプログラム番号が変わらない限り、運転バッファに登録されたままとなる。
さて、次に運転するNCプログラムが既に運転バッファにある場合(ステップS305にてYES)には、「並列動作転送完了」フラグと「プログラム転送完了」フラグとをONする(ステップS306)。
一方、運転バッファに登録されていない場合(ステップS305にてNO)には、「並列動作転送完了」フラグと「プログラム転送完了」フラグとをOFFし、「次プログラム準備」フラグをONし、ステップS303で得たプログラム番号と共に、「次プログラム準備」フラグのONを、RAM25を介して第1のCPU21に伝達する(ステップS307)。続いて、ステップS308へ進み、最後に、「プログラム番号取得フラグ」をONして図5の制御を終了する(ステップS308)。
さて、図6のフローチャートは、第1のCPU21の制御の内容を示すものであり、特には、第2のCPU22から、ステップS204の「プログラム転送」フラグのON、ステップS223の「プログラム領域」フラグのON、及び、ステップS307の「次プログラム準備」フラグのON、即ち、「プログラム転送」、「プログラム領域」、及び、「次プログラム準備」の各要求がRAM25を介して第1のCPU21に伝達されたかどうかを定常的に監視し、要求に応えるように動作する制御を示している。
まず、ステップS401において、「プログラム転送」フラグがONしているか否かを判断する。ここで、「プログラム転送」フラグがONしていれば、即ち、「プログラム転送」要求があれば(ステップS401にてYES)、後述する図7のサブルーチンを実行する(ステップS404)。尚、図7のサブルーチンの実行が完了すると、ステップS401へ戻る。
続いて、「プログラム転送」フラグがONしていなければ(ステップS401にてNO)、「プログラム領域」フラグがONしているか否かを判断する(ステップS402)。ここで、「プログラム領域」フラグがONしていれば、即ち、「プログラム領域」要求があれば(ステップS402にてYES)、図8のサブルーチンを実行する(ステップS405)。尚、図8のサブルーチンの実行が完了すると、ステップS401へ戻る。
そして、「プログラム領域」フラグがONしていなければ(ステップS402にてNO)、「次プログラム準備」フラグがONしているか否かを判断する(ステップS403)。ここで、「次プログラム準備」フラグがONしていれば、即ち、「次プログラム準備」要求があれば(ステップS403にてYES)、図9のサブルーチンを実行する(ステップS406)。尚、図9のサブルーチンの実行が完了すると、ステップS401へ戻る。
次に、図7のフローチャートで示すサブルーチンについて、即ち、第2のCPU22からの「プログラム転送」要求に応える第1のCPU21の制御について説明する。
まず、図7のステップS501においては、ステップS204によってセットされたNCプログラム番号(親プログラム番号)をRAM25から得る。続いて、上記ステップS501で得た親プログラム番号に対応する<解析終了>フラグがOFFしているか否かを判断する(ステップS502)。
ここで、<解析終了>フラグがOFFしていれば(ステップS502にてYES)、プログラムの解析を行う、即ち、後述する図10のサブルーチンを実行する(ステップS511)。<解析終了>フラグは、親プログラムの番号毎に保有(確保)されている。また、<解析終了>フラグがONしている親プログラムは、RAM23、RAM25、不揮発メモリ24のいずれかに、対応するプログラム管理データが保有(作成)されている。尚、一度、図10の制御が実行されると、<解析終了>フラグがON(図10のステップS811参照)し、第2のCPU22が使用するRAM25上のプログラム管理データを作成すると共に、前記バックアップデータへも複写する。また、図示しないが、対応するプログラム管理データ上のNCプログラムの1つが、中身が変更されたときや、対応するプログラム管理データが初期化されたときなどに、<解析終了>フラグがOFFされ、対応するプログラム管理データのバックアップデータも削除されるようになっている。
一方、ステップS502において、上記ステップS501で得た親プログラム番号に対応する<解析終了>フラグがONしていれば(ステップS502にてNO)、現在の<転送位置>を得る(ステップS503)。ここで、<転送位置>とは、第1のCPU21が次にNCプログラムを転送する運転バッファの位置を示すアドレスのことである。
続いて、ステップS504へ進み、サブプログラムを含めた全てのNCプログラムが運転バッファに転送されているか否かを判断する。この場合、既に転送したNCプログラムの文字数と、プログラム管理データ上にあるNCプログラム全ての総文字数とを比較して、同じであれば、全てのNCプログラムが運転バッファに転送されたと判断する。
そして、ステップS511のプログラム解析後(図10のサブルーチンを実行した後)、または、NCプログラムの転送が全て終わっていない(ステップS504にてYES)の場合、ステップS505へ進み、<転送位置>から、可能な限り(プログラム管理データのアドレスの1つ前まで)、続きのNCプログラムを運転バッファに転送する。尚、ここで全てを転送できない場合は、テープ運転のときのみである。
続いて、<転送位置>を、ステップS505で運転バッファに転送した最終番地の次のアドレスとするように更新する(ステップS506)。
そして、「プログラム転送」フラグと「プログラム領域」フラグをOFFし、「プログラム転送完了」フラグと「並列動作転送完了」フラグをONし、「プログラム転送」処理の完了を第2のCPU22へ伝達する(ステップS507)。これにより、図7のサブルーチンを終了し、呼び出しステップへ戻るようになっている。
尚、上記ステップS504において、NCプログラムの転送が全て終わっている(ステップS504にてNO)場合も、上記ステップS507へ進む。
次に、図10のサブルーチン(NCプログラム解析処理)について説明する。この図10のサブルーチンは、次に運転するNCプログラムが、テープ運転か、内部メモリ運転かを判断し、対応するプログラム管理データを作成する制御(第1のCPU21の制御)である。
まず、ステップS801において、親プログラムのサイズと、運転バッファを比較する。ここで、親プログラムのサイズよりも運転バッファが大きい場合(ステップS801にてYES)、ステップS802へ進み、NCプログラムを解析し、NCプログラム内に記述されてある全てのサブプログラム番号を抽出する。
この場合、図13に示すように、NCプログラム内にあるサブプログラムコード(M98)を探し出し、対応するNCプログラム番号(Pのあとの数字)をサブプログラムとして抽出する。また、抽出されたサブプログラムについても、また同様にして、その内部にあるサブプログラムコード(M98)を探し出し、孫プログラムを抽出していくように構成されている。
続いて、ステップS803へ進み、抽出されたサブプログラム全てを含むNCプログラム容量(総プログラム容量)と、運転バッファを比較する。ここで、運転バッファが総プログラム容量より小さい場合(ステップS803にてNO)、並びに、運転バッファが親プログラムのサイズより小さい場合(ステップS801にてNO)、ステップS807へ進み、親プログラムだけのプログラム管理データをRAM25上に作成し、親プログラム番号のみをプログラム管理データに登録し、プログラム管理データのバックアップデータとして、RAM23、RAM25、不揮発性メモリ24のいずれかに複写する。そして、このNCプログラムについてはテープ運転とする(ステップS808)。
一方、抽出された全てのNCプログラムが運転バッファに入る場合(ステップS803にてYES)、全てのNCプログラム番号と、ファイルをつなげた形で、親プログラムからそれぞれのNCプログラムの先頭番地の差と、全てのNCプログラムの総文字数をRAM25上のプログラム管理データに登録し、プログラム管理データのバックアップデータとして、RAM23、RAM25、不揮発性メモリ24のいずれかに複写する(ステップS805)。そして、このNCプログラムについては内部メモリ運転とする(ステップS806)。
続いて、並列動作命令の設定が有るか否かを判断する(ステップS809)。ここで、並列動作命令の設定が有る場合(ステップS809にてYES)、親プログラム先頭から、最初の並列動作命令をサーチし、その位置を、プログラム管理データの一番最後の枠のアドレスに、先頭からの差分位置を登録する(ステップS810)。このとき、プログラム管理データのバックアップデータ側へも登録する。そして、解析終了フラグをONする(ステップS811)。これにて、図10のサブルーチンを終了し、呼び出しステップへ戻る。
次に、図8のフローチャートで示すサブルーチンについて、即ち、第2のCPU22からの「プログラム領域」要求に応える第1のCPU21の制御について説明する。
まず、図8のステップS601においては、要求情報を得る、具体的には、ステップS223によってセットされた転送して欲しいサブプログラム番号や開放領域を、RAM25から読み込んで獲得し、また、ステップS506(またはステップS607)でセットされた<転送位置>を得る。
続いて、ステップS602へ進み、要求が、テープ運転更新であるか否かを判断する。ここで、テープ運転更新以外、つまり、サブプログラム更新の場合(ステップS602にてNO)、運転バッファの例外領域に要求されたサブプログラムを転送する(ステップS605)。
上記例外領域とは、運転バッファ内に予め別領域として確保する領域であり(図14参照)、パラメータなどでその量を設定できる。通常は、内部メモリ運転において動的にサブプログラム番号が確定するような構文を組んだり、テープ運転においてサブプログラグラムの遷移命令があったときに、このエリアにサブプログラムを転送して行う。
一方、要求が、テープ運転更新である場合、即ち、テープ運転の続きのプログラムが要求されている場合(ステップS602にてYES)、ステップS603へ進み、全ての転送が完了した(送るデータが無くなった)かどうかを判断する。
ここで、全ての転送が完了していない場合(ステップS603にてNO)には、開放領域に、<転送位置>からNCプログラム(NCプログラムの続き)を書き込む(ステップS606)。尚、ステップS605またはステップS606を実行した後は、<転送位置>を更新する、即ち、<転送位置>を、ステップS605またはステップS606で転送した最終番地の次アドレスとする(ステップS607)。
一方、上記ステップS603において、全ての転送が完了した場合(ステップS603にてYES)、図11のサブルーチンを実行し、次パレットのNCプログラムを転送する(ステップS611)。そして、「プログラム領域」フラグをOFFする(ステップS608)。これにより、上記サブルーチンを終了し、呼び出しステップへ戻るようになっている。
次に、図11のサブルーチン(プログラム転送処理)について説明する。この図11のサブルーチンは、次パレットのNCプログラムを運転バッファへ転送する制御(第1のCPU21の制御)である。
まず、ステップS901において、<転送位置>を読み込んで得る。続いて、現在運転しているNCプログラムが消えないように、運転バッファの空き容量を計算する(ステップS902)。そして、運転バッファの空き容量に次のプログラムを可能な限り転送し(ステップS903)、空き容量の最後の次の位置を<転送位置>として記憶する(ステップS904)。また、このとき、RAM25に転送するNCプログラムに対応するプログラム管理データが無い場合には、RAM23、RAM25、不揮発メモリ24のプログラム管理データのバックアップデータから、RAM25のプログラム管理データへ複写する。また、RAM25のプログラム管理データに、転送するNCプログラムに対応する親プログラムのアドレス(図12のA0(A列0行))が登録されていない場合には、転送を始めた<転送位置>を、プログラム管理データの親プログラムのアドレス(図12のA0(A列0行))へ書き込む。
続いて、ステップS905へ進み、並列動作命令の設定が有るか否かを判断する。ここで、並列動作命令の設定が有る場合(ステップS905にてYES)、ステップS903の転送処理において、並列動作命令が転送されたか否かを判断して、転送されているならば、「並列動作転送完了」フラグをONする(ステップS906)。
この後、ステップS907へ進み、NCプログラムを全て転送できたか否かを判断する。ここで、NCプログラムを全て転送できた場合(ステップS907にてYES)、「プログラム転送完了」フラグをONする(ステップS908)。これにより、図11のサブルーチンを終了し、呼び出しステップへ戻る。
次に、図9のフローチャートで示すサブルーチンについて、即ち、第2のCPU22からの「次プログラム準備」要求に応える第1のCPU21の制御について説明する。
まず、図9のステップS701においては、ステップS305によってセットされた次のパレットの親プログラム番号をRAM25から読む。続いて、上記ステップS701で得た親プログラム番号に対応する<解析終了>フラグがOFFしているか否かを判断する(ステップS702)。ここで、<解析終了>フラグがOFFしていれば(ステップS702にてYES)、プログラムの解析を行う、即ち、前述した図10のサブルーチンを実行する(ステップS711)。
そして、ステップS703へ進み、現行運転がテープ運転であるか否かを判断する。ここで、現行運転が内部メモリ運転の場合(ステップS703にてNO)、次パレットのNCプログラムを転送する、即ち、前述した図11のサブルーチンを実行する(ステップS712)。
この後、ステップS704へ進み、「次プログラム準備」フラグをOFFする。これにより、サブルーチンを終了し、呼び出しステップへ戻るようになっている。
次に、図14を用いて、運転バッファの構成の流れを説明する。図14中の左部に示すような形態のNCプログラムが、図14中の中央部に示すように、現在の運転バッファに入る。そして、図5のステップS307において、「次プログラム準備」フラグがONすると、第1のCPU21は、次の運転バッファの先頭部(次に運転するNCプログラムの先頭部)を書き込む。
運転が終了すると、次の運転バッファが現在の運転バッファとなり、続いて、図3のステップS203において、「プログラム転送」がONすると、図4のステップS214までの間に、図14中の右部に示すように、現在の運転バッファの続きをセット(残りのNCプログラムを転送)する。
そして、運転バッファの次部に、同様にして、「次プログラム準備」フラグが再びONすると、次の運転バッファの先頭部(次に運転するNCプログラムの先頭部)を書き込む。以下、同様の動作を繰り返すようになっている。
次に、図15に、内部メモリ運転を実行する場合において、パレットの旋回動作(並列動作命令である工具交換動作)と、第2のCPU22による主運転の動作(図3及び図4の各フローチャートの制御)と、第2のCPU22による並列運転の動作(図5のフローチャートの制御)と、第1のCPU21による運転の動作(図6〜図11の各フローチャートの制御)と、NCプログラムスケジュール装置36の動作との間の時系列な関係を示す。
この図15から、現在実行中の加工(第2のCPU22によるステップS219,S217〜223、時刻T1〜T2)と、運転バッファの空き容量よりも次に運転するNCプログラムの容量が大きい場合に、該NCプログラムの先頭から運転バッファの空き容量分、該運転バッファに転送する処理(第1のCPU21によるS701〜702,S810〜811,S703〜704,S901〜908、時刻t1〜t2)とが並列動作で実行されていることがわかる。尚、時刻T1、T2、t1、t2は、時系列で並べると、T1<t1<t2<T2となる。
また、現在実行中のNCプログラムの運転が終了したときに(第2のCPU22によるステップS202、S203〜206、時刻T3)、次に運転するNCプログラムを、転送されたNCプログラムの最後のアドレスまたは転送されなかった最初のアドレスに基づいて運転バッファに転送する処理(第1のCPU21によるS501〜507、時刻t3〜t4)と、時刻t1〜t2間で、並列動作転送完了している場合に、プログラム先頭から並列動作命令とパレット旋回動作までの処理(第2のCPU22によるS208〜S212及び、並列動作開始とパレット旋回動作開始による実動作、時刻T3〜T4)とが並列動作で実行されていることがわかる。尚、パレット旋回時間よりもt3〜t4間が短い為、時刻T3、T4、t3、t4は、時系列で並べると、T3≦t3<t4<T4となる。
一方、図16A、図16Bに、テープ運転を実行する場合において、パレットの旋回動作(並列動作命令である工具交換動作)と、第2のCPU22による主運転の動作(図3及び図4の各フローチャートの制御)と、第2のCPU22による並列運転の動作(図5のフローチャートの制御)と、第1のCPU21による運転の動作(図6〜図11の各フローチャートの制御)と、NCプログラムスケジュール装置36の動作との間の時系列な関係を示す。
上記図16Aから、現在実行中の加工(第2のCPU22によるステップS219,S217〜223、時刻T’1〜T’2)と、次に運転するNCプログラムを解析する処理(第1のCPU21によるS701〜702,S810〜811,S703〜704、時刻t’1〜t’2)とが並列動作で実行されていることがわかる。
更に、テープ運転の実行中に運転するNCプログラムが全て転送され、運転バッファに開放部分が発生したときに(第2のCPU22によるステップS223、時刻T’11、T’12、T’13)、運転バッファの開放部分に次に運転するNCプログラムを転送する処理(第1のCPU21によるS601〜603,S901〜908、S608,時刻t’11〜t’12、t’13〜t’14、t’15〜t’16)とが並列動作で実行されていることがわかる。尚、上記した各時刻を時系列で並べると、T’1<t’1<t’2<T’11<t’11<t’12<T’12<t’13<t’14<T’13<t’15<t’16<T’2となる。
また、現在実行中のNCプログラムの運転が終了したときに(第2のCPU22によるステップS202、S203〜206、時刻T’3)、次に運転するNCプログラムを、転送されたNCプログラムの最後のアドレスまたは転送されなかった最初のアドレスに基づいて運転バッファに転送する処理(第1のCPU21によるS501〜507、時刻t’3〜t’4)が実行される。尚、上記各時刻を時系列で並べると、T’3≦t’3<t’4となる。
このような構成の本実施例によれば、次に運転するNCプログラム番号の入力の完了を検出したときに、現在実行中の加工と並列動作で、次に運転するNCプログラムの容量を算出し、運転バッファの空き容量よりも、上記NCプログラムの容量が大きい場合に、該NCプログラムの先頭から運転バッファの空き容量分、該運転バッファに転送するように構成したので、運転するNCプログラムを切り替えるときに、NCプログラムを運転バッファに転送する際に要する時間を極力短縮することができ、生産性を高めることが可能になる。
また、上記実施例の場合、NCプログラムを、メインプログラムとメインプログラムから呼び出されるサブプログラムとから構成し、プログラム容量を算出するに際して、メインプログラムの容量とサブプログラムの容量との総和を算出するように構成したので、内部メモリ運転またはテープ運転のいずれかを選択するときに、正確に選択することができる。
更に、上記実施例では、NCプログラムのプログラム番号とサブプログラム番号とを記憶する記憶手段を備えると共に、NCプログラムを運転バッファに転送する際に、サブプログラムのプログラム番号と、該サブプログラム番号の先頭アドレスを対応付けたプログラム管理データを前記記憶手段に記憶させるプログラム管理データ作成手段を備える構成としたので、メインプログラムからサブプログラムを呼び出すときに、プログラム管理データを参照することにより、時間的遅延なく、次の読み込み番地を決定することが可能となる。
また、上記実施例においては、パレットの旋回動作と並列動作命令である最初の工具交換動作を並列動作で実行するように構成し、次パレットのNCプログラム番号の入力が完了したことを検出したときに、現在実行中の加工パレットの加工と並列動作で、次に運転するNCプログラムの容量を算出し、運転バッファの空き容量よりも上記NCプログラムの容量が大きい場合に、該NCプログラムの先頭から運転バッファの空き容量分、該運転バッファに転送するように構成したので、回転テーブル機において、運転するNCプログラムを切り替えるときに(パレットを交換するときに)、NCプログラムを運転バッファに転送する際に要する時間を短縮できる。
更に、上記実施例では、最初の工具交換動作に対応するNCプログラムが転送されている場合には、現在の加工パレットの加工が終了したときに、パレットの旋回動作と最初の工具交換動作を並列動作で実行し、加えて、パレットの旋回動作並びに最初の工具交換動作と並列動作で、次に運転するNCプログラムを転送されたNCプログラムの最後のアドレスまたは転送されなかった最初のアドレスに基づいて運転バッファに転送するように構成したので、NCプログラムを運転バッファに転送する際に要する時間をより一層短縮することができる。
尚、上記実施例においては、第1のCPU21と、第2のCPU22との間を、RAM25を介して接続するように構成したが、これに限られるものではなく、第1のCPU21と第2のCPU22間を通信手段で繋ぎ、RAM25は第2のCPU22に接続し、通信手段により、データ転送するように構成し、第1のCPU21が第2のCPU22を介して間接的に読み書きするように構成しても良い。
図面中、1は数値制御装置、2は工作機械、3は主軸、4は工具、8は工具交換装置、9はパレット交換装置、15は工具マガジン、16はパレット交換モータ、17はテーブル、18は第1パレット(加工パレット)、19は第2パレット(加工パレット)、21は第1のCPU、22は第2のCPU、23はRAM、24は不揮発メモリ、25はRAM(記憶手段)、26はリムーバブルディスク、27はRAM、28はROM、29は動力系IF、30は外部入出力IF、31は外側起動スイッチ、32は次プログラム番号入力端子、33は次プログラムready端子、34は次プログラム要求端子、35はワーク交換機構、36はNCプログラムスケジュール装置を示す。