(57)【要約】【課題】数値制御装置において、実行される加工プログラムの中からスクリプト言語で記述されたプログラムを呼出して実行できるようにする。【解決手段】加工プログラム１を解釈して実行するプログラム解釈部３は、スクリプトプログラムの設定やロード、実行指示などのために用意された所定のニーモニック（スクリプト用ニーモニック）を認識可能であり、加工プログラム１の解釈実行中にスクリプト用ニーモニックを認識すると、そのニーモニックのパラメータに示されたスクリプトプログラム（インスタンス）の実行をスクリプトエンジン部１２に指示する。スクリプトエンジン部１２は、指示されたスクリプトプログラムを実行する。【選択図】図１
2006018697.tif 000002
【特許請求の範囲】
【請求項１】
加工プログラムに基づきサーボ装置などを駆動して機械制御を行う数値制御装置において、
加工プログラムを実行する加工プログラム実行手段と、
加工プログラム実行手段による加工プログラムの実行の際に、加工プログラムからスクリプト言語で記述されたスクリプトプログラムを呼出すスクリプト呼出手段と、
を備えることを特徴とする数値制御装置。
【請求項２】
請求項１記載の数値制御装置において、前記スクリプト呼出手段は、前記加工プログラム実行手段の一部として実装され、一以上の所定のスクリプト命令を認識可能であり、前記加工プログラムの実行の際にその加工プログラム中からスクリプト命令を認識した場合に、認識したそのスクリプト命令に付随するパラメータが示すスクリプトプログラムを呼出すことを特徴とする数値制御装置。
【請求項３】
請求項２記載の数値制御装置において、前記一以上の所定のスクリプト命令の中には、スクリプトプログラムを呼出す直前のブロックの完了を待たずにそのスクリプトプログラムの呼出しを開始する非同期開始モードの命令、及び、スクリプトプログラムの呼出しが終了する前にそのスクリプトプログラムを呼出すブロックに後続のブロックの動作を開始する非同期再開モードの命令、のうちの少なくとも一方が含まれることを特徴とする数値制御装置。
【請求項４】
請求項１記載の数値制御装置において、前記スクリプト呼出手段は、前記加工プログラム実行手段の一部として実装され、スクリプトプログラムの開始を示す開始タグ及び終了を示す終了タグを認識可能であり、前記加工プログラムの実行の際にその加工プログラムから開始タグを検出した場合、その開始タグから次の終了タグまでの記述をスクリプトプログラムとして抽出し、抽出したそのスクリプトプログラムを呼出すことを特徴とする数値制御装置。
【請求項５】
請求項１〜４のいずれか１項に記載の数値制御装置において、
前記スクリプト呼出手段により呼出されたスクリプトプログラムを実行するスクリプトエンジン手段が、前記加工プログラムを記述する言語で記述された部分プログラムの実行を前記加工プログラム実行手段に指示する手段を備えることを特徴とする数値制御装置。
【請求項６】
請求項１〜５のいずれか１項に記載の数値制御装置において、スクリプトプログラムを実行するスクリプトエンジン手段を、前記加工プログラム実行手段とは別に設けることを特徴とする数値制御装置。
【請求項７】
請求項６記載の数値制御装置において、前記スクリプトエンジン手段は複数のスクリプトエンジンインスタンスを生成可能であり、１つの加工プログラムにおいて複数の異なる種類のスクリプト言語で記述されたスクリプトプログラムの呼出しを可能とすることを特徴とする数値制御装置。
【請求項８】
請求項６または７に記載の数値制御装置において、前記加工プログラム実行手段はリアルタイムオペレーティングシステム上で動作し、前記スクリプトエンジン手段は汎用オペレーティングシステム上で動作することを特徴とする数値制御装置。
【請求項９】
請求項８において、コンポーネント機構を用いてスクリプトプログラムからリアルタイムオペレーティングシステム上で動作する前記加工プログラム実行手段の機能の呼出しを可能とすることを特徴とする数値制御装置。
【請求項１０】
請求項１または２記載の数値制御装置において、
前記スクリプト呼出手段に呼出されたスクリプトプログラムを実行するスクリプトエンジン手段を有し、
前記スクリプト呼出手段は、イベントが発生したときに動作するスクリプトプログラムを登録するためのイベント駆動スクリプト命令を認識可能であり、前記加工プログラム中からイベント駆動スクリプト命令を認識すると、認識したイベント駆動スクリプト命令のパラメータに指定されたイベント及びスクリプトプログラムを認識し、認識したスクリプトプログラムを、認識したイベントを実行条件に指定して呼出し、
前記スクリプトエンジン手段は、呼出されたスクリプトプログラムに対して実行条件とするイベントが指定されている場合は、そのイベントが発生したことを示す通知を受けた場合に、そのスクリプトプログラムを実行する、
ことを特徴とする数値制御装置。
【請求項１１】
加工プログラムに基づきサーボ装置などを駆動して機械制御を行う数値制御装置において、イベントが発生したときに動作するスクリプト言語で記述されたスクリプトプログラムを指定可能とし、当該イベントが発生したときには、指定されたスクリプトプログラムを実行することを特徴とする数値制御装置。
【請求項１２】
請求項１０又は１１に記載の数値制御装置において、イベントとして、加工プログラムが選択されたとき、加工プログラム実行が開始されたとき、加工プログラムの実行が終了したとき、アラームが発生したとき、リセットが発生したときの、少なくともいずれか１つを含むことを特徴とする数値制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、加工プログラムに基づきサーボ装置などを駆動して機械制御を行う数値制御装置に関する。
【背景技術】
【０００２】
今日パーソナルコンピュータ（ＰＣ）の普及とともにＰＣベース数値制御装置（ＮＣ）が普及し始めている。ＰＣは生産管理、設計・製図、自動プログラミングなどのアプリケーションが豊富にそろい、加工現場におけるＩＴ化を推し進める上で有効である。しかし、これらのアプリケーションがＰＣベースＮＣ上で利用できることは、単にＰＣとＮＣを同居させたに過ぎず、ＰＣとＮＣを有機的に結合したとは言えなかった。
【０００３】
一方、ＰＣにはエンドユーザーによって容易に自動化機能を盛り込むための手段としてスクリプトエンジン機能が提供されている。これは、スクリプト言語というＮＣの加工プログラムと同様に平易な文法で、プログラミングに関する特別な知識がなくてもプログラムを作成して実行できるものである。この技術はＷＥＢブラウザ機能やＷＥＢサーバー機能を拡張する目的で用いられることが多いが、それ以外にも表計算アプリケーションの内部で使用したり、独立したアプリケーションを作成したりすることができ、専門のプログラマーでなくても容易に作業の自動化を図ることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、上述の問題および現状に鑑みてなされたもので、実行される加工プログラムの中からスクリプト言語で記述されたプログラムを呼出して実行できるようにすることを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、加工プログラムに基づきサーボ装置などを駆動して機械制御を行う数値制御装置において、加工プログラムを実行する加工プログラム実行手段と、加工プログラム実行手段による加工プログラムの実行の際に、加工プログラムからスクリプト言語で記述されたスクリプトプログラムを呼出すスクリプト呼出手段と、を備えることを特徴とする数値制御装置を提供する。
【０００６】
本発明の好適な態様では、前記スクリプト呼出手段は、前記加工プログラム実行手段の一部として実装され、一以上の所定のスクリプト命令を認識可能であり、前記加工プログラムの実行の際にその加工プログラム中からスクリプト命令を認識した場合に、認識したそのスクリプト命令に付随するパラメータが示すスクリプトプログラムを呼出す。
【０００７】
更に好適な態様では、前記一以上の所定のスクリプト命令の中には、スクリプトプログラムを呼出す直前のブロックの完了を待たずにそのスクリプトプログラムの呼出しを開始する非同期開始モードの命令、及び、スクリプトプログラムの呼出しが終了する前にそのスクリプトプログラムを呼出すブロックに後続のブロックの動作を開始する非同期再開モードの命令、のうちの少なくとも一方が含まれる。
【０００８】
別の好適な態様では、前記スクリプト呼出手段は、前記加工プログラム実行手段の一部として実装され、スクリプトプログラムの開始を示す開始タグ及び終了を示す終了タグを認識可能であり、前記加工プログラムの実行の際にその加工プログラムから開始タグを検出した場合、その開始タグから次の終了タグまでの記述をスクリプトプログラムとして抽出し、抽出したそのスクリプトプログラムを呼出す。
【０００９】
別の好適な態様では、前記スクリプト呼出手段により呼出されたスクリプトプログラムを実行するスクリプトエンジン手段が、前記加工プログラムを記述する言語で記述された部分プログラムの実行を前記加工プログラム実行手段に指示する手段を備える。
【００１０】
別の好適な態様では、スクリプトプログラムを実行するスクリプトエンジン手段を、前記加工プログラム実行手段とは別に設けることを特徴とする。
【００１１】
更に好適な態様では、前記スクリプトエンジン手段は複数のスクリプトエンジンインスタンスを生成可能であり、１つの加工プログラムにおいて複数の異なる種類のスクリプト言語で記述されたスクリプトプログラムの呼出しを可能とすることを特徴とする。
【００１２】
更に好適な態様では、前記加工プログラム実行手段はリアルタイムオペレーティングシステム上で動作し、前記スクリプトエンジン手段は汎用オペレーティングシステム上で動作することを特徴とする。
【００１３】
更に好適な態様では、コンポーネント機構を用いてスクリプトプログラムからリアルタイムオペレーティングシステム上で動作する前記加工プログラム実行手段の機能の呼出しを可能とすることを特徴とする。
【００１４】
また、本発明の別の好適な態様では、数値制御装置は、前記スクリプト呼出手段に呼出されたスクリプトプログラムを実行するスクリプトエンジン手段を有し、前記スクリプト呼出手段は、イベントが発生したときに動作するスクリプトプログラムを登録するためのイベント駆動スクリプト命令を認識可能であり、前記加工プログラム中からイベント駆動スクリプト命令を認識すると、認識したイベント駆動スクリプト命令のパラメータに指定されたイベント及びスクリプトプログラムを認識し、認識したスクリプトプログラムを、認識したイベントを実行条件に指定して呼出し、前記スクリプトエンジン手段は、呼出されたスクリプトプログラムに対して実行条件とするイベントが指定されている場合は、そのイベントが発生したことを示す通知を受けた場合に、そのスクリプトプログラムを実行する。
【００１５】
また本発明は、加工プログラムに基づきサーボ装置などを駆動して機械制御を行う数値制御装置において、イベントが発生したときに動作するスクリプト言語で記述されたスクリプトプログラムを指定可能とし、当該イベントが発生したときには、指定されたスクリプトプログラムを実行することを特徴とする数値制御装置を提供する。
【発明の効果】
【００１６】
本発明の加工プログラムからスクリプト言語記述されたプログラムを呼出し可能とした数値制御装置では、メールを送信する機能や、データベースにアクセスしてデータ更新する機能、グラフィックスを画面に表示する機能、さらには数値制御装置の提供する各種の機能にアクセスする機能など、およそスクリプト言語によりなし得るほとんどの機能を実現可能となる。これらの機能は従来の加工プログラムでは実行できなかったものなので、本発明によれば、数値制御装置の機能を飛躍的に向上させることができる。また、スクリプト言語の習得は容易であるので、多くの人が容易に数値制御装置をカスタマイズ可能になし得るという効果が得られる。
【００１７】
好適な態様では、スクリプトプログラムの開始、終了を加工プログラムの前後のブロックの終了、開始と同期しても非同期にも行うことができ、タイミングが問題になる場合と、そうではなくてすばやく並列に動かしたい場合の両方を実現できるという効果を有する。
【００１８】
別の好適な態様では、スクリプト言語記述されたプログラムを、タグによって区切って加工プログラムに混ぜて記述できるから、加工プログラムとスクリプトプログラムの動作の流れがわかりやすくなるという効果がある。
【００１９】
別の好適な態様では、スクリプトプログラムの中から加工プログラムを記述するための言語（例えばＧコード）で記述されたブロックを実行可能であるから、スクリプト言語記述されたプログラムにより算出された文字列を加工プログラム用の言語で記述した部分プログラムとして実行できるため、加工プログラムの進行状況に応じて加工プログラムを自動生成し実行可能とするという効果がある。
【００２０】
別の好適な態様では加工プログラム解釈部とスクリプトエンジン部とに分けて実現するから、従来の加工プログラム解釈部を大幅に変更することなくスクリプト言語記述されたプログラムの呼出しを可能とすることができるという効果がある。
【００２１】
別の好適な態様では、スクリプトエンジン部は複数のスクリプトエンジンインスタンスを生成可能とするから、サブプログラムを含めた１つの加工プログラムで異なるスクリプト言語を混用可能となるという効果がある。
【００２２】
別の好適な態様では、イベントに応じたスクリプトプログラムを指定可能とするから、イベントに応じた動作、例えばイベントの発生をデータベースに登録するなどのスクリプトプログラムを実行させることが可能となるという効果がある。
【発明を実施するための最良の形態】
【００２３】
図１は、本発明による数値制御装置のブロック図である。加工プログラム１は、この数値制御装置の制御対象、例えば加工機に設けられた各種のサーボ装置、の動作制御のためのプログラムである。加工プログラム１は、ブロックごとにプログラム読取り部２により読取られて、プログラム解釈部３に送られる。プログラム解釈部３は、受け取ったプログラムを解釈し、実行する。この加工プログラムの解釈、実行の中で、制御のための関数やシーケンスが適宜呼出される。関数発生部４は、プログラム解釈部３の解釈結果に基づいて関数発生を行い、この発生された関数に従いサーボ駆動部５がサーボモータ６を駆動することで、図示しない機械を動作させる。位置検出器７はサーボモータ６の回転状態を検出し、それをサーボ駆動部５にフィードバックすることで、サーボ制御を可能としている。ＰＬＣ（プログラマブル・ロジック・コントロール）制御部８はプログラム解釈部３のプログラム解釈、実行において呼出されたシーケンスに基づきＰＬＣ制御を行い、周辺機器駆動部９は主軸や工具交換装置などの周辺機器１０を駆動する。
【００２４】
ここまでに説明した加工プログラム１の処理機構は、従来から存在するＰＣベースＮＣの処理機構と同様のものである。以下、従来のＰＣベースＮＣにはない本実施形態の機構を説明する。
【００２５】
スクリプトエンジン部１２はスクリプト言語で記述されたプログラム（以下、簡単のため、適宜「スクリプトプログラム」と略称する）１１をロードして実行する。このスクリプトプログラムの実行により、例えば図示しないデータベースソフトウェアやメール配信ソフトウェアなどが駆動される。
【００２６】
ここで、図２を参照して、本実施形態の数値制御装置が処理可能な加工プログラム例を説明する。例示したのは、加工プログラムの記述に従来よりよく利用されているＧコードに対し、スクリプトエンジン部１２に対する実行要求する命令のためのニーモニックとして、SCRIPT（スクリプト言語指定），SLOAD（スクリプトプログラムのロード），SCALL（スクリプトの呼出し），SCALLS（「非同期開始」のスクリプトの呼出し），SCALLE（「非同期再開」のスクリプトの呼出し），SEVENT（イベント定義）などのニーモニックを追加したものである。なお、「非同期開始」とは、当該ニーモニックにより指定されたスクリプト指令を、加工プログラム中の直前の処理（ブロック）とは無関係に（すなわち非同期的に）開始するモードを意味する。すなわち、加工プログラム中に非同期開始のスクリプト指令がある場合、そのスクリプト指令は、直前のブロックの実行の完了を待たずに処理が開始される。逆に非同期開始でないスクリプト指令（「同期開始」モードのスクリプト指令）は、前のブロックの実行完了を待って処理を開始する。
【００２７】
また、「非同期再開」とは、当該ニーモニックにより指定されたスクリプト指令の実行と非同期的に、そのスクリプト指令の後のブロックの動作を開始するモードである。すなわち、加工プログラム中に非同期再開のスクリプト指令がある場合は、そのスクリプト指令の実行が完了するのを待たずに、後続のブロックの処理が開始される。逆に非同期再開でないスクリプト指令（「同期再開」スクリプト指令）の場合、後続のブロックの処理は、そのスクリプト指令の実行の終了を待って開始される。
【００２８】
これらのニーモニックは以下の呼出し形式である。
SCRIPT    ［言語名］，［エンジンインスタンス名］
SLOAD    ［スクリプトファイル名］，［エンジンインスタンス名］
SCALL    ［関数名］，［エンジンインスタンス名］
SCALLS    ［関数名］，［エンジンインスタンス名］
SCALLE    ［関数名］，［エンジンインスタンス名］
SEVENT    ［イベント種類］，［関数名］，［エンジンインスタンス名］
ここで「言語名」はVBScript,JScriptなどのプログラミング言語（スクリプト言語）名である。VBScriptは、米国Microsoft社が提供するMicrosoft（登録商標）Visual Basic（登録商標）Script Editionの略称である。また、JScriptは、米国マイクロソフト社が開発したJava（登録商標）Script互換のスクリプト言語である。
【００２９】
「エンジンインスタンス名」は、スクリプトプログラムを実行するスクリプトエンジンインスタンスの名称である。すなわち、本実施形態のスクリプトエンジン部１２は、個々のスクリプトプログラムの処理ごとにスクリプトエンジンインスタンスを生成し、このインスタンスにスクリプト処理を実行させる。このように処理ごとにスクリプトエンジンインスタンスを生成する構成を採ることで、１つの加工プログラムにおいて異なる言語を利用可能となるとともに、メインプログラム中から呼出されるスクリプトプログラムとサブプログラムから呼出されるスクリプトプログラムにおいて名前衝突が起こらないようにエンジンインスタンスを切換えて使用できる。
【００３０】
「関数名」にはスクリプト言語記述されたプログラムの関数名あるいはサブプログラム名を指定する。「イベント種類」には、加工プログラムの選択（PSELECT）、起動（START）、終了（END）、アラーム発生（ALARM）、ＮＣリセット（RESET）など、イベント検出部１４が検出するイベントの種類を指定する。
【００３１】
以下、プログラム解釈部３の動作について、図５および図６のフローチャートに基づき、図２の加工プログラムの例を交えながら説明する。
【００３２】
まず図２の加工プログラムの例について概説する。このプログラムは、シーケンス名N001のブロックでVBScriptのスクリプトエンジンインスタンス（インスタンス名”VBSEngine”）を生成し、次のN002でそのインスタンスに"sendmail.vbs"というスクリプトプログラムをロードする。"sendmail.vbs"は、メール送信のためのスクリプトであり、その記述例を図４に示す。次にN003でJScriptのスクリプトエンジンインスタンスJSEngineを生成し、N004でそのインスタンスに”scriptlibrary．js”というスクリプトをロードする。”scriptlibrary．js”は、数値制御加工の際に実行したい各種の処理を示す関数群を記述したスクリプトプログラムであり、そのコード記述例を図３に例示する。次にN005では、アラーム発生イベントが起きたときに実行する関数”ALARMMAIL”と、これを実行するスクリプトエンジンインスタンス”VBSEngine”（これはsendmail．vbsを実行するエンジンである）を登録する。次にN006，N007では工具移動や工具交換などのＮＣ指令が実行され、その次のN008では、N007における工具交換の情報を記録するべく、スクリプトエンジンインスタンスJSEngineが呼出され、このエンジンにて関数”RECORDTOOL”が実行される。次に、N009，N010，N011では主軸回転、早送りなどのＮＣ指令が実行され、N012にてJSEngineを呼出すことで、そのＮＣ指令の実行による送り速度を計算し、データベースに記録する。そしてN013で切削送り指令を実行する。またN014では、図３に例示したスクリプトプログラム”scriptlibrary．js”中の関数”DOFIXEDCYCLE”を呼出し、この関数が示す固定サイクルの切削動作制御を行わせる。そして、N075でメール送信スクリプトのエンジンVBSEngineを呼出して加工プログラムの終了を示すメールを送信させ、N076の終了指令にて加工プログラムを終了する。
【００３３】
このような加工プログラムを実行するため、プログラム解釈部３は、処理を開始すると（ステップＳ１）、始めにプログラム読取り部２より加工プログラムの中の１ブロック受取る（ステップＳ２）。次に受取った１ブロックについて解釈を行う（ステップＳ３）。するとサブプログラムにより１ブロックの解釈が開始される（ステップＳ１１）。受取ったブロックが、図２のシーケンス名N006，N010，N013などのブロックのように移動指令であれば（ステップＳ１２）、終点位置、移動速度、直線、円弧などの関数発生モードを算出し（ステップＳ１３）、これらの情報を関数発生部４へ送出し（ステップＳ１４）、関数を発生させる。関数発生部４は速度指令信号をサーボ駆動部５に送出する。サーボ駆動部５は速度指令信号に基づきサーボモータ６を指令された速度で動作させるよう、検出器７のフィードバック信号を受けながら制御する。
【００３４】
また、プログラム解釈部３は受取ったブロックごとにプログラムを解釈し、図２のシーケンス名N007，N009などのブロックのように周辺機器に対する指令であれば（ステップＳ１５）、周辺機器動作指令をＰＬＣ制御部８へ送出する（ステップＳ１６）。ＰＬＣ制御部８は、周辺機器駆動部９に対し駆動信号を発し、工具交換装置や主軸などの周辺機器１０を駆動する。
【００３５】
さらにプログラム解釈部３は受取ったブロックごとにプログラムを解釈し、図２のシーケンス名N001〜N005，N008，N014，N075のブロックのようにスクリプト指令であれば（ステップＳ１７）、そのスクリプト指令が「非同期開始」かどうかを判定し（ステップＳ１８）、非同期開始でなければ（すなわちこの場合そのスクリプト指令は同期開始である）前ブロックが終了するのを待つ（ステップＳ１９）。そして、前ブロックが終了したら、スクリプトエンジン部１２にそのスクリプト指令の実行要求を送出する（ステップＳ２０）。
【００３６】
N075のブロックの場合は、前ブロックの実行完了を待たない非同期開始のSCALLS指令であるので、ステップＳ１９はスキップされる。すなわち、１つ前のN074のブロックの早送り指令が完了することなくスクリプトが実行され、ステップＳ２０へ進む。そしてスクリプトエンジン部１２に実行要求を送出する（ステップＳ２０）。
【００３７】
スクリプトエンジン部１２にスクリプト指令の実行を要求した後、そのスクリプト指令が非同期再開か否かを判定する（ステップＳ２１）。この判定の結果、非同期再開でなければ、そのスクリプト指令の実行が完了するまで待つ（ステップＳ２２）。これに対し、非同期再開である場合は、スクリプト指令の実行完了を待たずに、ステップＳ２５に進む。例えばN008のブロックは、スクリプトの実行完了を待たない非同期再開のSCALLE指令であるので、ステップＳ２２はスキップされ、ステップＳ２５へ進みこの１ブロックの解釈を終了する。ステップＳ２２にてスクリプトの完了を待つとき（すなわち非同期再開でない場合）は、そのスクリプト自身が完了するまでは後続のブロックは開始されない。
【００３８】
ただし、非同期再開でないスクリプト指令のブロックであっても、そのスクリプト指令が示すスクリプトプログラムの内部から、Ｇコードで記述されたブロックの実行が指令された場合は、そのスクリプト指令に対応した処理の実行が完了していない場合でも、スクリプトプログラム内部から指令されたそのブロックを実行する。このようなスクリプトプログラム内部からのＧコードブロックの呼出しは、ｎｃコンポーネント部１３により実現される。
【００３９】
すなわち、ステップＳ２２でスクリプトの実行が完了していないと判定された場合でも、ｎｃコンポーネント部１３より１ブロックの実行要求がある場合には（ステップＳ２３）、要求されたその１ブロックの解釈を行う（ステップＳ２４）。この１ブロックの処理は、ステップＳ１１を再帰呼出しすることで実現される。なお、ｎｃコンポーネント部１３関連の構成や処理内容については、後で詳しく説明する。
【００４０】
ステップＳ２５にて１ブロックの解釈を終わると、ステップＳ４へ戻り終了コード（M02）が実行されたかどうかを判定し（ステップＳ４）、終了していなければステップＳ２から繰返す。終了していれば、スクリプトエンジン部にも終了指令を発し（ステップＳ５）、プログラム解釈を終わる（ステップＳ６）。
【００４１】
なお、以上の説明では簡単のために、軸移動指令、周辺機器動作指令およびスクリプト指令を各ブロックにわけて記述するものとしているが、１つのブロックにこれらを混合して記述できるように変更してもよい。また、ニーモニックや呼出し形式は一例として示したにすぎず、必ずしも上記のものである必要はない。
【００４２】
次に図７のフローチャートに基づきスクリプトエンジン部１２の動作について説明する。スクリプトエンジン部１２は加工プログラムの解釈開始とともに動作が開始され（ステップＳ３１）、プログラム解釈部３からスクリプト指令があるか（ステップＳ３２）またはイベント検出部１４より検出イベントがあるか（ステップＳ４３）を検査する。この検査で、もしプログラム解釈部３のステップＳ２０の実行によるスクリプト指令があれば、プログラム解釈部３よりスクリプト指令を１ブロック受取る（ステップＳ３３）。
【００４３】
受取ったスクリプト指令が”SCRIPT”であれば（ステップＳ３４）、指定された言語名に従ってスクリプトエンジンインスタンスを生成する（ステップＳ３５）。
【００４４】
受取ったスクリプト指令が“SLOAD”であれば（ステップＳ３６）、指定されたスクリプトエンジンインスタンスにスクリプトプログラムをロードする（ステップＳ３７）。
【００４５】
受取ったスクリプト指令が“SCALL”，“SCALLS“，“SCALLE“のいずれかであれば（ステップＳ３８）、指定されたスクリプトエンジンインスタンスで、指定された関数名の関数を呼出し実行する（ステップＳ３９）。なおSCALL，SCALLS，SCALLEの間の動作の差違は、プログラム解釈部３によって達成される。
【００４６】
受取ったスクリプト指令が“SEVENT”であれば（ステップＳ４０）、その指令のパラメータとして指定されているイベントタイプ、指定されたスクリプトエンジンインスタンス、指定された関数名の関数を登録する（ステップＳ４１）。
【００４７】
また受取ったスクリプト指令がステップＳ５により発せされた終了指令であれば（ステップＳ４２）、終了する（ステップＳ４５）。
【００４８】
またステップＳ４３では、イベント検出部１４から、PSELECT，ALARM，START，END，RESETなどの検出対象のイベントが検出されたかどうかを検査して、そのようなイベントが検出された場合は、予めステップＳ４１で登録された情報に基づき、指定されたスクリプトエンジンで、指定された関数を実行させる（ステップＳ４４）。
【００４９】
次に図９に示す第２の加工プログラム例について説明する。図２の加工プログラム例ではスクリプト指令の実行のための各種のニーモニックを導入していたのに対し、この加工プログラム例では、Ｇコードの加工プログラムの中に混じってスクリプト言語によるプログラムが直接記述されている。このような混合記法を利用すると、図２〜４の加工プログラムとスクリプトプログラムを別に記述した場合に比べ、全体の流れを把握しやすいというメリットがある。
【００５０】
図９のプログラム例では、スクリプト記述の開始がタグ「<?」で、終了がタグ「?>」でそれぞれ示されている。
【００５１】
前述の図２のプログラム例を処理する場合、プログラム解釈部３は、従来のＰＣベースＮＣのプログラム解釈部に対し、スクリプト処理のための上述のニーモニックを解釈する機能を付加したものになる。これに対し、図９のプログラム例を処理する場合、プログラム解釈部３は、タグによりスクリプト記述の開始と終了を認識して、その間のスクリプト記述をスクリプトエンジン部１２に渡す機能を持つよう、従来のものを機能拡張すればよい。
【００５２】
図８は図９の加工プログラム例を解釈して実行可能な数値制御装置の構成図である。図１の構成要素と同じ働きをするものについては同じ符号を付し、ここでの説明を省略する。同じ名称の構成要素でも働きの異なるものについては異なる符号を付した。
【００５３】
加工プログラム８１は図９の加工プログラム例で示したようなＧコードのプログラムとスクリプトプログラムが混合して記述された加工プログラムであり、加工プログラム・スクリプトプログラム分別部８２により、Ｇコードとニーモニックからなる加工プログラム一時ファイル８３と、スクリプトプログラム一時ファイル８４（図１１に作成例を示す）に分別される。加工プログラム８１中で、開始のタグからそれに対応する終了のタグまでに記述された文字列が、１つのスクリプトプログラム一時ファイル８４となる。加工プログラム８１中に複数のスクリプトプログラムが記述される場合もあり、その場合にはそれら各スクリプトプログラムがそれぞれ抽出され、一時ファイルとなる。これらのファイルをプログラム読取り部２、スクリプトエンジン部１２の入力ファイルとすることで、図１を使って説明した数値制御装置と構成を共通化することができる。
【００５４】
図１２のフローチャートは、加工プログラム・スクリプトプログラム分別部８２によって加工プログラム８１（図９に例示）が、加工プログラム一時ファイル８３（図１０に例示）とスクリプトプログラム一時ファイル８４（図１１に例示）に分別する手順を示すものである。
【００５５】
加工プログラム・スクリプトプログラムの分別を開始すると（ステップＳ５１）、加工プログラム一時ファイル８３（ここでは”TEMP.NC”という名前）を書込みモードで開き、これを一時ファイルＴＰＦとする（ステップＳ５２）。次にスクリプトプログラム一時ファイル８４（ここでは”TEMP.js”という名前）を書込みモードで開き、これを一時スクリプトＴＳＦとする（ステップＳ５３）。
【００５６】
加工プログラム８１を１行読み込み、変数stに代入する（ステップＳ５４）。もしstがファイルの終了を示していれば（ステップＳ５５）、分別を終了する（ステップＳ６６）。
【００５７】
stの行頭が”<?”であれば（ステップＳ５６）、スクリプトプログラムの開始を表すのでステップＳ５８からの処理を実行する。そうでなれば、Ｇコードの加工プログラムであるので、stを加工プログラム一時ファイル８３すなわちＴＰＦに書きこみ（ステップＳ５７）、ステップＳ５４より繰返す。
【００５８】
なおステップＳ５６においてstの行頭が”<?”であれば、加工プログラム一時ファイル８３すなわちＴＰＦに、”SCRIPT JScript,JSEngine”，“SLOAD TEMP.js,JSEngine”，“SCALL JSFunc0,JSEngine”の３行を書きこむ（ステップＳ５８〜Ｓ６０）。これは、加工プログラム８１中に直接記述されたスクリプトを、図２に例示したスクリプト用のニーモニックを用いた記述と等価な記述に置き換えるための処理である。ここで、スクリプト言語の種類とスクリプトエンジンインスタンス名は、加工プログラム８１中のスクリプト記述にしめされているもの（図９の４行目）を用いればよい。関数名JSFunc0は自動生成すればよい。次にスクリプト一時ファイル８４すなわちＴＳＦに”function JSFunc0()[“を書きこむ（ステップＳ６１）。これは加工プログラム一時ファイル８３中のニーモニックで指定される関数名と、スクリプト一時ファイル８４中で記述された実際の関数とを関連づけるためである。そして加工プログラム８１より１行の記述を、変数stに読み込む（ステップＳ６２）。stの行頭が”?>”であればスクリプトプログラムの終わりを表すので（ステップＳ６３）、ステップＳ６５へ進む。そうでなければスクリプト一時ファイル８４すなわちＴＳＦにstを書込み（ステップＳ６４）、ステップＳ６２から繰返す。スクリプトプログラムの終わりに達したときは、スクリプト一時ファイル８４すなわちＴＳＦに関数の終わりを表す”]”を書込み、ステップＳ５４から繰返す。
【００５９】
以上により加工プログラム８１は、加工プログラム一時ファイル８３とスクリプトプログラム一時ファイル８４とに分別され、これらを加工プログラム解釈部３とスクリプトエンジン部１２の入力とすることで、図１を使って説明した数値制御装置を利用して、図９に示したＧコードとスクリプトプログラムの混合記述した加工プログラムを解釈し実行する数値制御装置が実現できる。
【００６０】
以上の実施例においては、スクリプトプログラムの開始と終了を”<?”，“?>”で表したが、一例に過ぎず他の記号を用いてもよい。またこの図９以下の例では、説明を簡潔に保つために、加工プログラム８１にスクリプト記述が一箇所以下、スクリプト言語はJScriptのみ、スクリプトエンジンインスタンは１つだけ、関数定義は禁止などの制約を設けていたが、これらを解除することは自然な拡張であり、本発明の範囲である。
【００６１】
本実施例ではスクリプト言語としてJScript, VBScriptを例として挙げたが、この他にもJava（登録商標）script，Perl，Rubyなどのスクリプト言語を利用してもよいし、UNIX（登録商標）やWindows（登録商標）で利用されるB-shell，C-shellなどと呼ばれるシェルによるシェルスクリプトを用いてもよい。また本発明の実施例では、スクリプトプログラムの引数や戻り値を扱うようにはしていなかったが、それらを扱うようにすることも容易にできる。また、加工プログラムは、例示のような単純なものだけでなく、メインプログラムから１乃至複数のサブプログラムを呼出すようなものも存在するが、メインプログラムとサブプログラムの双方からそれぞれスクリプト言語記述されたプログラムを呼出すようにすることも可能であり、このようなケースも本発明の範囲内である。
【００６２】
図１３および図１４は、いずれも本発明に係るスクリプト言語で記述されたプログラムを呼出し可能な数値制御装置のハードウェア構成の例である。
【００６３】
図１３の構成において、ＣＰＵ（中央演算装置）１０１は、ＲＯＭ１０２やハードディスク１０４に記憶された各種プログラムを、ＲＡＭ１０３を作業領域として利用しつつ実行する。このプログラム実行により、図１のプログラム読取部２，プログラム解釈部３，関数発生部４，スクリプトエンジン部１２，ｎｃコンポーネント部１３，イベント検出部１４，コモン変数記憶部１５が実現される。シーケンス制御部１０５は、図１のＰＬＣ制御部８に対応したものであり、シーケンス制御を実行するプログラマブルコントローラである。グラフィック表示制御部１０７は、表示装置１０９への画面表示を制御する回路であり、操作パネルＩ／Ｆ（インタフェース）部１１１は、操作パネル１１２上のハードウエアボタンやインジケータなどの制御のためのインタフェース回路である。サーボ制御部１１３は、図１のサーボ駆動部５に対応するハードウエア回路であり、ＣＰＵ１０１からの指令に応じ、位置検出器の検出信号を用いて、サーボモータ１１４をサーボ制御する。
【００６４】
図１３の場合は１つのＣＰＵ１０１によりリアルタイム制御と非リアルタイム制御を同時に実現しようとするものであり、ITRONなどのリアルタイムＯＳ（オペレーティングシステム）と、UNIX（登録商標）やWindows（登録商標）などの汎用ＯＳを組合わせて構成することができる。この場合、リアルタイムＯＳにおいて図１の部分２２（すなわちプログラム読取部２，プログラム解釈部３，関数発生部４，ＰＬＣ制御部８，ｎｃコンポーネント部１３，イベント検出部１４，及びコモン変数記憶部１５）の演算制御を実現し、汎用ＯＳにおいて図１の部分２１（すなわちスクリプトエンジン部１２及びｎｃコンポーネント部１３）の演算制御を実現するとよい。そうすることでＧコードによるプログラム解釈はリアルタイムＯＳのもとで時間制約に対し安定した動作が期待でき、スクリプト言語記述されたプログラムは汎用ＯＳ上の豊富な機能を容易に利用することができ高い利便性が実現される。
【００６５】
図１４の例は、数値制御装置を、UNIX（登録商標）やWindows（登録商標）などの汎用ＯＳにより制御される部分１２０と、ITRONなどのリアルタイムＯＳにより制御される部分１２１という２つの部分に分けて構成した例である。それら２つの部分１２０及び１２１は、それぞれプログラム実行のためのＣＰＵ１０１，１０１’、ＲＯＭ１０２，１０２’、ＲＡＭ１０３，１０３’を備えており、両者の間はバスＩ／Ｆ部１１５により結合される。なお、図１４において、図１３と同一のコンポーネントには、同一符号を付してその説明を省略する。
【００６６】
図１４の構成の場合は、図１の部分２１の演算制御を汎用ＯＳにより制御される部分１２０で実現し、図１の部分２２の演算制御はリアルタイムＯＳにより制御される部分１２１で実現するとよい。これは図１３の場合と同様の理由による。この場合加工機制御のための操作パネルＩ／Ｆ部１１１やサーボ制御部１１３は、リアルタイムＯＳにより制御される部分１２１に設けられる。これに対し、汎用ＯＳにより制御される部分１２０には、画面表示の制御のためのグラフィック表示制御部１０７などのユーザインタフェース装置が接続される。
【００６７】
ここでバスＩ／Ｆ部１１５は共有メモリやFIFOであってもよいが、RS232CやEthernet（登録商標）などの通信を用いて結合してもよい。
【００６８】
次に、図１におけるｎｃコンポーネント部１３について説明する。
【００６９】
ｎｃコンポーネント部１３は、スクリプトエンジン部１２から呼び出され、数値制御のための関数を実行する。数値制御のための関数は、図３に例示したnc.SetCommonVarのように”nc.”から始まる関数名を有している。スクリプトエンジン部１２は、実行するスクリプトプログラム中からそのような関数名の関数を検出すると、ｎｃコンポーネント部１３に含まれるその関数を呼び出す。呼び出されたｎｃコンポーネント部１３の関数は、その関数の引数に従ってＧコード命令を生成し、このＧコード命令をプログラム解釈部３に渡して実行させる。また、ｎｃコンポーネント部１３が提供する関数の中には、コモン変数記憶部１５に記憶されたコモン変数を操作するための関数もある。なお、コモン変数は、プログラム解釈部３における加工プログラム実行と、スクリプトエンジン部１２におけるスクリプトプログラム実行との間で、共用する変数のことである。
【００７０】
ｎｃコンポーネント部１３は、例えば図３のスクリプトプログラム中で用いられている以下の部分プログラムの機能を提供する。このうち、SetCommonVarという関数はコモン変数記憶部１５が記憶するコモン変数の値を変更する機能を提供するものであり、GetCommonVarはコモン変数記憶の値を読み出す機能を提供するものであり、ExecuteBlockは１ブロックを解釈し実行すると言う機能を提供するものである。
nc.SetCommonVar(number,value)
string=nc.GetCommonVar(number)
nc.ExecuteBlock(blockString)
【００７１】
具体例で説明すると、図３のスクリプト例において
nc.SetCommonVar(1,feed)
と記述されて使用されているのは、コモン変数の１番に変数feedの内容を代入することを表している。
nc.ExecuteBlock(“G81 Z0 R50 P1 F100")
と記述されて使用されているのは、スクリプトプログラム内から加工プログラムの１ブロックを実行させるもので、この場合はＧ８１指令による固定サイクルを行わせる。
ここでは単純に固定の文字列を指定したが、スクリプト言語の持つ文字列演算機能を用いることで、スクリプト言語記述されたプログラムによってＧコード記述されたブロックの文字列を生成し、実行させることも可能である。例えば、図３のスクリプト例において、
var cycle=nc.GetCommonVar(2);
var block="G" & cycle & " Z0 R50 P1 F" & feed;
nc.ExecuteBlock(block)
と記述されているのは、コモン変数の２番の値を読み出して変数cycleに代入し、これを文字列演算子して変数blockにＧコード記述されたブロックを代入し、変数blockの文字列を解釈し実行させる。
【００７２】
本出願人は、特願２００３−３４３２７９号「デバイスドライバのインターフェース方法」にて、リアルタイムＯＳ（リアルタイムＯＳは汎用ＯＳのカーネル部の一部として動作）と汎用ＯＳのアプリケーション部との間でのコンポーネント機構を利用した通信手段を提案した。コンポーネント機構としては、例えばマイクロソフト社が提供しているＣＯＭ（Component Object Model）などを利用することができる。本実施形態のｎｃコンポーネント部１３は、このコンポーネント機構を利用した通信手段を利用することで容易に実現できる。図１５はｎｃコンポーネントのインターフェース定義（ＩＤＬファイル）の抜粋である。ここには、ｎｃコンポーネント部１３がスクリプトエンジン部に対して提供する機能のインターフェースが記述されており、GetCommonVar,ExecuteBlockなどが記述されている。このＩＤＬファイルをＩＤＬコンパイラに通し、プロキシー部、スタブ部を生成させ、プロキシー部を汎用ＯＳにより制御されるソフトウェアの一部として用い、スタブ部をリアルタイムＯＳにより制御されるソフトウェアの一部として用いることでｎｃコンポーネント部１３が実現される。この手段を利用することで、ｎｃコンポーネント部１３に関数を追加して機能拡張を図ることが容易化され、スクリプト言語からリアルタイム部のデータを取得したり、機能呼出ししたりする活用範囲を大幅に広げることができる。
【図面の簡単な説明】
【００７３】
【図１】本発明による数値制御装置の構成図である。
【図２】本発明による加工プログラムの例である。
【図３】JScript言語を利用したスクリプト言語プログラムの例である。
【図４】VBScript言語を利用したスクリプト言語プログラムの例である。
【図５】プログラム解釈部の動作を示すフローチャートである。
【図６】プログラム解釈部（１ブロック解釈）の動作を示すフローチャートである。
【図７】スクリプトエンジン部の動作を表すフローチャートである。
【図８】本発明による第２の数値制御装置の構成図である。
【図９】本発明による第２の加工プログラムの例である。
【図１０】加工プログラム一時ファイルの例である。
【図１１】スクリプトプログラム一時ファイルの例である。
【図１２】加工プログラム・スクリプトプログラム分別部の動作を表すフローチャートである。
【図１３】本発明による数値制御装置のハードウェア構成図である。
【図１４】本発明による第２の数値制御装置のハードウェア構成図である。
【図１５】ｎｃコンポーネントのインターフェース定義（ＩＤＬファイル）の抜粋を示す図である。
【符号の説明】
【００７４】
１  加工プログラム、２  プログラム読取り部、３  プログラム解釈部、４  関数発生部、５  サーボ駆動部、６  サーボモータ、７  位置検出器、８  ＰＬＣ制御部、９  周辺機器駆動部、１０  周辺機器、１１  スクリプト言語記述されたプログラム、１２  スクリプトエンジン部、１３  ｎｃコンポーネント部、１４  イベント検出部、１５  コモン変数記憶部、８１  第２の加工プログラム、８２  加工プログラム・スクリプトプログラム分別部、８３  加工プログラム一時ファイル、８４  スクリプトプログラム一時ファイル、１０１  ＣＰＵ、１０２  ＲＯＭ、１０３  ＲＡＭ、１０４  ハードディスク、１０５  シーケンス制御部、１０６  システムバス、１０７  グラフィック表示制御部、１０９  表示装置、１１１  操作パネルＩ／Ｆ部、１１２  操作パネル、１１３  サーボ制御部、１１４  サーボモータ。
【図１】
2006018697.tif 000003
【図２】
2006018697.tif 000004
【図３】
2006018697.tif 000005
【図４】
2006018697.tif 000006
【図５】
2006018697.tif 000007
【図６】
2006018697.tif 000008
【図７】
2006018697.tif 000009
【図８】
2006018697.tif 000010
【図９】
2006018697.tif 000011
【図１０】
2006018697.tif 000012
【図１１】
2006018697.tif 000013
【図１２】
2006018697.tif 000014
【図１３】
2006018697.tif 000015
【図１４】
2006018697.tif 000016
【図１５】
2006018697.tif 000017