(57)【要約】【課題】独自機能を安全に追加することができる数値制御装置を提供する。【解決手段】独自機能を追加するための安全なタスク制御を行うインタフェースを提供可能な数値制御装置１００は、タスクが実行するプログラムをメモリ上に展開するメモリ管理部１６０と、タスクの実行時間を算出する実行時間算出部１７０と、メモリ管理部および実行時間算出部の実行結果に基づいて、タスクの実行条件を設定する実行条件設定部１８０と、演算ユニットの状態を監視し、タスクを割り当てる演算ユニットを決定するタスク監視部１９０と、実行条件に基づき、割り当てられた演算ユニットにおいてタスクの登録および起動を行うタスク制御部１１０と、を有することを特徴とする。【選択図】図１
2019079336.tif 000002
【特許請求の範囲】
【請求項１】
独自機能を追加するための安全なタスク制御を行うインタフェースを提供可能な数値制御装置であって、
前記タスクが実行するプログラムをメモリ上に展開または初期化し、前記プログラムを解析して前記プログラムの情報を取得するメモリ管理部と、
前記タスクの実行時間を算出する実行時間算出部と、
前記メモリ管理部、および前記実行時間算出部の実行結果に基づいて、前記タスクの実行条件を設定する実行条件設定部と、
演算ユニットの状態を監視し、前記タスクを割り当てる前記演算ユニットを決定するタスク監視部と、
前記実行条件に基づき、前記割り当てられた前記演算ユニットにおいて前記タスクの登録および起動を行うタスク制御部と、
を有することを特徴とする数値制御装置。
【請求項２】
前記タスク制御部は、指令に応じ、起動中の前記タスクを停止することを特徴とする
請求項１記載の数値制御装置。
【請求項３】
前記タスク制御部は、指令に応じ、停止中の前記タスクを削除することを特徴とする
請求項２記載の数値制御装置。
【請求項４】
前記タスク監視部は、複数の前記演算ユニットのアイドル、スリープ又はドーズモードの時間に基づいて、前記タスクを実行する前記演算ユニットを決定することを特徴とする
請求項１記載の数値制御装置。
【請求項５】
前記メモリ管理部が前記プログラムを前記メモリ上に展開できない場合、又は前記タスク監視部が前記タスクを実行する演算ユニットを決定できない場合に通知を出力することを特徴とする
請求項１記載の数値制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は数値制御装置に関し、特に独自機能を安全に追加することができる数値制御装置に関する。
【背景技術】
【０００２】
数値制御装置に対し、工作機械の状態監視、軸の高速制御、非常時の安全機能といった独自機能を追加したいという要望がある。このような要望を実現するためには、加工プログラムの運転中等任意のタイミングでタスクを登録するためのインタフェースや、特定の処理をメモリ上に常駐させて繰り返し実行するための仕組み等が必要である。
汎用のマルチタスクオペレーティングシステムでは、タスクを任意のタイミングで登録し、起動、停止、削除する操作が可能であり、このようなタスク制御を目的やタスク実行状況に応じて行うためのインタフェースがソフトウェアの開発者に提供されている。また、タスクの起動周期や優先度を指定することにより、複数のタスクの実行順序や実行時間を管理し、システムの動作をより細かく調整することも可能である。
例えば特許文献１には、現在のメモリ残量が、新しいタスクを実行するには不足であると判断した場合に、タスク利用率を計算し、最もタスク利用率が低い実行中のタスクを停止させ、空きが出るまで前記の計算とタスクの停止を繰り返すオペレーティングシステムが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−２９３３８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、数値制御装置には汎用のオペレーティングシステムよりも高い信頼性、安全性が求められる。そのため、従来の数値制御装置は、実行すべきタスクが予め登録されることを前提として、メモリの使用率やＣＰＵの稼働率が適切な値に保たれるようにタスクの切換えタイミング等を調整した設計となっている。換言すれば、従来の数値制御装置では、ユーザの任意のタイミングでタスクの登録や起動等を行うといったことが想定されていない。
【０００５】
このような従来の数値制御装置に対し、任意にタスクを制御するためのインタフェースを単に追加するならば、予期せぬ挙動の変化を引き起こす恐れもある。例えば、任意のタイミングでタスクを登録、起動することにより、軸制御処理の遅延や、通信速度の低下、メモリ枯渇によるシステムエラー等が生じることが考えられる。これにより、数値制御装置の信頼性や、動作の安定性を低下させる可能性がある。したがって、信頼性、安全性を担保しつつ、任意にタスクを制御することが可能なインタフェースが求められている。
【０００６】
本発明はこのような問題点を解決するためになされたものであって、独自機能を安全に追加することができる数値制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一実施の形態にかかる数値制御装置は、独自機能を追加するための安全なタスク制御を行うインタフェースを提供可能な数値制御装置であって、前記タスクが実行するプログラムをメモリ上に展開または初期化し、前記プログラムを解析して前記プログラムの情報を取得するメモリ管理部と、前記タスクの実行時間を算出する実行時間算出部と、前記メモリ管理部、および前記実行時間算出部の実行結果に基づいて、前記タスクの実行条件を設定する実行条件設定部と、演算ユニットの状態を監視し、前記タスクを割り当てる前記演算ユニットを決定するタスク監視部と、前記実行条件に基づき、前記割り当てられた前記演算ユニットにおいて前記タスクの登録および起動を行うタスク制御部と、を有することを特徴とする。
本発明の一実施の形態にかかる数値制御装置は、前記タスク制御部は、指令に応じ、起動中の前記タスクを停止することを特徴とする。
本発明の一実施の形態にかかる数値制御装置は、前記タスク制御部は、指令に応じ、停止中の前記タスクを削除することを特徴とする。
本発明の一実施の形態にかかる数値制御装置は、前記タスク監視部は、複数の前記演算ユニットのアイドル、スリープ又はドーズモードの時間に基づいて、前記タスクを実行する演算ユニットを決定することを特徴とする。
本発明の一実施の形態にかかる数値制御装置は、前記メモリ管理部が前記プログラムを前記メモリ上に展開できない場合、又は前記タスク監視部が前記タスクを実行する演算ユニットを決定できない場合に通知を出力することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、独自機能を安全に追加することができる数値制御装置を提供することが可能である。
【図面の簡単な説明】
【０００９】
【図１】数値制御装置１００の機能構成を示すブロック図である。
【図２】タスクの登録処理の構成要素を示すブロック図である。
【図３】実行プログラムをメモリに配置する方法を示す図である。
【図４】タスクの起動処理の構成要素を示すブロック図である。
【図５】タスクを実行している様子を示す図である。
【図６】タスクの停止処理の構成要素を示すブロック図である。
【図７】タスクの削除処理の構成要素を示すブロック図である。
【図８】実施例におけるタスクの登録処理を示す図である。
【図９】実施例におけるタスクの起動処理を示す図である。
【図１０】実施例におけるタスクの停止処理を示す図である。
【図１１】実施例におけるタスクの削除処理を示す図である。
【００１０】
本発明の実施の形態にかかる数値制御装置１００について図面を用いて説明する。図１は、数値制御装置１００の機能構成を示すブロック図である。
【００１１】
数値制御装置１００は、タスク制御部１１０、加工プログラム解析部１２０、実行データ変換部１３０、実行制御部１４０、軸駆動部１５０、メモリ管理部１６０、実行時間算出部１７０、実行条件設定部１８０、タスク監視部１９０を有する。典型的な数値制御装置１００は、中央処理装置（ＣＰＵ）、記憶装置及び入出力装置等を有し、記憶装置に格納されたプログラムをＣＰＵが実行することにより、これらの処理部を論理的に実現する。
【００１２】
まず、数値制御装置の典型的な構成要素であるタスク制御部１１０、加工プログラム解析部１２０、実行データ変換部１３０、実行制御部１４０、軸駆動部１５０について説明する。
【００１３】
タスク制御部１１０は、タスクの登録、起動、停止、削除といったタスクの操作、およびタスクのスケジューリング、タスクのリソース管理を行う。
【００１４】
加工プログラム解析部１２０は、加工プログラムを読み込み、１ブロックずつ字句解析を行い、加工に関する指令を実行データ変換部１３０に出力する。また本実施の形態では、加工プログラム内にタスクに関する指令を記載することができるものとする。タスクに関する指令は、実行プログラムを構成する指令群と、タスクの登録、起動、停止、削除に関する指令とを含む。実行プログラムは、実行データ変換部１３０に出力される。タスクの登録、起動、停止、削除に関する指令は、タスク監視部１９０に出力される。
【００１５】
実行データ変換部１３０は、加工に関する指令を実行形式のバイナリデータへ変換し、実行制御部１４０に出力する。また、実行プログラムが入力された場合は、実行プログラムの指令群を実行形式のバイナリデータへ変換し、メモリ管理部１６０へ出力する。
【００１６】
実行制御部１４０は、実行形式のバイナリデータを基に補間処理を行い、軸の移動量を算出して軸駆動部１５０に出力する。
【００１７】
軸駆動部１５０は、実行制御部１４０で算出された移動量を基に、電流及び電圧を制御し、軸を駆動する。
【００１８】
次に、本実施の形態にかかる数値制御装置１００が独自に備える構成要素であるメモリ管理部１６０、実行時間算出部１７０、実行条件設定部１８０、タスク監視部１９０について説明する。これらの構成要素により、本発明の特徴的な機能であるタスク登録処理、タスク起動処理、タスク停止処理、タスク削除処理が実現される。
【００１９】
図２に示すように、タスクの登録処理に関連する構成要素は、主にメモリ管理部１６０、実行時間算出部１７０、実行条件設定部１８０である。
【００２０】
メモリ管理部１６０は、実行データ変換部１３０から出力されたタスクの実行形式のバイナリデータを一時的に保存し、タスクが実行するプログラムのサイズを算出する。また、メモリ上の空き領域を計算し、メモリ上にプログラムを展開する方法を決定する。プログラム全体を展開できるだけの連続した空き容量をメモリ上に確保できる場合には、当該空き領域にプログラムを展開する（図３上図）。プログラム全体を展開できるだけの連続した空き容量を確保することは出来ないが、複数の空き領域を合算すればプログラム全体を展開できる場合は、プログラムを複数の断片に分割し、分割されたプログラムにリンク情報を付した上で、当該複数の空き領域に分割されたプログラムを展開する（図３中図）。リンク情報とは、典型的には次に読み込むべきプログラム断片の先頭アドレスを示す情報であり、各プログラム断片の末尾に付加される。プログラム全体を展開できるだけの連続した空き容量がない場合（図３下図）は、アラーム等の手段でユーザに通知する。タスクを登録しない状態で運転を継続するか否かをユーザに選択させ、選択結果に応じて運転を継続又は中止しても良い。
【００２１】
さらに、メモリ管理部１６０は、プログラムを解析してリンク情報、使用する変数の数、および変数の型等を特定し、特定した情報に基づいてタスクが動作するために必要なリソースを計算し、計算されたリソースをタスク制御部１１０に通知する。なお代表的なリソースとしては、例えばスタックサイズ、ユーザ権限、アカウント情報等がある。タスク制御部１１０は、必要なリソースを確保できるか否かを確認し、確認結果をメモリ管理部１６０に通知する。
【００２２】
なお、実行周期や優先度は、メモリ管理部１６０が算出する他に、加工プログラム中で予め設定されても良く、ユーザが予めパラメータとして設定しておいても良い。加工プログラム中に記載された実行周期や優先度は、メモリ管理部１６０、実行時間算出部１７０を経由して取得することができる。
【００２３】
メモリ管理部１６０は、リソースが確保できた場合は、プログラムを展開したアドレス、プログラムのサイズ、タスクのエントリポイント（タスクが起動した際に処理を始める最初のコード）等の情報を、実行時間算出部１７０、実行条件設定部１８０に通知する。一方、リソースが確保できなかった場合は、上述した、プログラム全体を展開できるだけの連続した空き容量を確保できなかった場合と同様の処理を行う。
【００２４】
実行時間算出部１７０は、メモリ管理部１６０より通知された上記情報に基づいて、登録されたタスクの実行時間を推定する。例えば、プログラムに含まれる１命令ごとの消費時間（実行に掛かるクロック数）に、タスクが実行し得る命令数を乗じた値を実行時間とすることができる。なお、ループ、サブプログラム（サブルーチン）呼び出し等により重複して実行される命令群に関しては、実行回数分の時間を累計する。実行時間算出部１７０は、算出した実行時間を、タスクの情報として実行条件設定部１８０に通知する。
【００２５】
実行条件設定部１８０は、メモリ管理部１６０、実行時間算出部１７０から通知された上記情報を、タスクの登録に必要な情報とタスクの起動に必要な情報とに分類し、タスク制御部１１０に通知することで、新たなタスクの登録を要求する。タスクの登録に必要な情報とは、例えばタスクの実行周期、優先度、スタックサイズ、エントリポイント等である。タスクの起動に必要な情報とは、例えば実行プログラムのサイズ、タスクの実行時間等である。
【００２６】
好ましくは、タスク制御部１１０は、タスクの実行時間に応じてタスクの実行周期を調整することができる。タスクの実行時間＞タスクの実行周期である場合、タスクが正常に動作しない可能性が高い。よってこの場合、可能であればタスクの実行時間≦タスクの実行周期となるよう、タスクの実行周期を変更する。不可能であれば、タスクの実行周期をできるだけ長い時間に設定すると良い。
【００２７】
図４に示すように、タスクの起動処理に関連する構成要素は、主にタスク監視部１９０、実行時間算出部１７０である。
【００２８】
タスク監視部１９０は、ＣＰＵがマルチコアであれば、常時、各コアの実行状態を監視し、登録されたタスクの実行時間を確保できるコアを決定する。例えば図５に示すように、各コアの実行周期内のアイドル時間（又はスリープ、ドーズモードの時間でも良い）を計測し、タスクの実行時間≦アイドル時間であるコアを登録先として抽出する。複数のコアが抽出された場合には、実行周期内で最もアイドル時間の長いコアにタスクを割り当てることができる。上記判断においては、複数の実行周期のアイドル時間の平均値や積算値と、タスクの実行時間と、を比較しても良い。例えば図５の例では、コア１のアイドル時間（太い破線で示す）の積算値が最も大きいので、処理時間に最も余裕があると判断される。この場合タスク監視部１９０は、新たなタスクの割当先をコア１に決定する。
【００２９】
タスク監視部１９０は、タスクの割当先が決定したならば、タスク制御部１１０に当該タスクの起動を依頼する。そしてタスク制御部１１０が、タスク監視部１９０により指定されたタスクを起動させる。
【００３０】
なお、全てのコアにおいてアイドル時間（又はその平均値や積算値等）が少なく、実行時間算出部１７０が算出したタスクの実行時間を確保できない場合には、アラーム等の手段でユーザに通知する。タスクを登録しない状態で運転を継続するか否かをユーザに選択させ、選択結果に応じて運転を継続又は中止しても良い。
【００３１】
あるいは、新たなタスクに優先度の近い他のタスクが既に動作しているコアに割り当てても良く（ラウンドロビン方式で、実行時間を平均的に分配し易い環境で動作させることが可能）や、既に動作しているタスクの数が少ないコアに割り当てても良い（新たなタスクを登録することにより影響を受ける他のタスクが少ない環境で動作させることが可能）。
【００３２】
図６に示すように、タスクの停止処理に関連する構成要素は、主にタスク監視部１９０である。
【００３３】
タスク監視部１９０は、加工プログラム解析部１２０から特定のタスクの停止指令を通知されると、タスク制御部１１０に当該タスクの停止を依頼する。そしてタスク制御部１１０が、タスク監視部１９０により指定されたタスクを停止させる。なおタスク制御部１１０に対するタスクの停止依頼の通知は、当該タスクが実行中の一連の処理が完了した時点で実施することが好ましい。タスクを実行中に停止すると、不整合なデータがメモリ上に残ったり、機械の挙動が不安定になったりする恐れがあるためである。
【００３４】
図７に示すように、タスクの削除処理に関連する構成要素は、主にタスク監視部１９０、メモリ管理部１６０である。
【００３５】
タスク監視部１９０は、加工プログラム解析部１２０から特定のタスクの削除指令を通知されると、当該タスクが停止していることを確認し、停止していればタスク制御部１１０に当該タスクの削除を依頼し、メモリ管理部に通知する。
【００３６】
メモリ管理部１６０は、タスク監視部１９０から特定のタスクの削除依頼が通知されると、当該タスクが実行していたプログラムを特定し、そのプログラムを他のタスクが利用していないことを確認する。他のタスクが利用していない場合は、プログラムを削除し、メモリを初期化（開放）する。一方、他のタスクが利用している場合には、プログラムをメモリ上に残すか、一部の不要なメモリ領域のみを初期化して処理を終了する。
【００３７】
＜実施例＞
図８乃至図１１を用いて、数値制御装置１００の一実施例について説明する。本実施例における数値制御装置１００は、加工プログラム内に記述されている指令に応じてタスクを登録、起動、停止及び削除する。
【００３８】
（タスクの登録）
図８に示すように、本実施例では加工プログラム内に実行プログラムを構成する指令群と、タスクの登録指令とを記載することができる（図８、破線で囲まれた部分）。「＠＠ＣＲＥＡＴＥ［Ａ］」はタスク［Ａ］の登録指令である。「ＰＲＩＯＲＩＴＹ  ＬＯＷ」はタスクの優先度をＬＯＷに設定するコマンドである。「ＥＸＥＣＣＹＣＬＥ  ３２」はタスクの実行周期を３２に設定するコマンドである。そして「ＩＦ・・・」から「ＥＮＤ  ＩＦ；」に至るブロックが実行プログラムである。
【００３９】
タスクの登録指令及び実行プログラムを構成する指令群は、加工プログラム解析部１２０により字句解析される。また、実行プログラムを構成する指令群は、実行データ変換部１３０によって実行形式のバイナリデータに変換された後、メモリ管理部１６０に出力される。
【００４０】
加工プログラム中の１ブロック「Ｇ１１０  Ｃ５０．０；」を例として、字句解析処理及びバイナリデータ変換処理の一例を示す。まず加工プログラム解析部１２０が、上記ブロックの文字列を「Ｇ」「１１０」「Ｃ」「５０．０」「；」に分割する。「Ｇ」については、数値制御装置の準備機能を示すコードと解釈される。「１１０」については、準備機能のうち周辺軸制御を示すコードと解釈される。「Ｃ」については、Ｃという周辺軸のアドレスを設定するコードと解釈される。「５０．０」については、Ｃのアドレスに５０．０という浮動小数点数を格納するコードと解釈される。「；」については、ブロック終了を示すコードと解釈される。
【００４１】
次に実行データ変換部１３０が、字句解析結果に基づいてバイナリデータを生成する。まず実行データ変換部１３０は、例えば周辺軸制御を指定するバイナリ「０ｘ３６Ｄ０００００」を生成する。次に、Ｃのアドレスを付加したバイナリ「０ｘ００００１０００」を生成する。最後に、これらに基づいて実行形式のバイナリデータ「０ｘ３６Ｄ０１００００」を生成し、メモリ管理部１６０に出力する。
【００４２】
メモリ管理部１６０は、受け取った実行形式のバイナリデータが使用するメモリサイズを算出する。バイナリデータを展開できるだけのメモリの空き容量がある場合は、メモリに実行形式のデータを登録する。空き容量がない場合は、アラームやワーニング等でユーザにタスクの登録ができないことを通知する。
【００４３】
また、メモリ管理部１６０は、タスクの諸属性を示す情報を実行時間算出部１７０、実行条件設定部１８０に通知する。実行時間算出部１７０はタスクの実行時間を算出し、実行条件設定部１８０に通知する。実行条件設定部１８０は、タスクの諸属性を示す情報及び実行時間をタスク制御部１１０に通知して、タスクの登録を依頼する。
【００４４】
（タスクの起動）
図９に示すように、本実施例では加工プログラム内にタスクを起動する指令を記載することができる（図９、破線で囲まれた部分）。「＠＠ＳＴＡＲＴ［Ａ］」はタスク［Ａ］の起動指令である。「＠＠ＳＴＡＲＴ［Ｂ］」はタスク［Ｂ］の起動指令である。
【００４５】
加工プログラム解析部１２０は、タスク起動指令を解釈したならば、タスク監視部１９０に対し、指定したタスクを起動するよう通知する。タスク監視部１９０は、未だ登録されていないタスクや既に起動されているタスクが起動対象として指定された場合、アラームやワーニング等でユーザにタスクが起動できないことを通知する。
【００４６】
タスク監視部１９０は、ＣＰＵの各コアで動作する全てのタスクの実行状態を監視し、処理時間に最も余裕があるコアに対してタスクを割り当てる。なお、全てのＣＰＵで新たなタスクを実行するだけの余裕がない場合は、タスクを起動させずに、アラームやワーニング等でタスクが起動できないことをユーザに通知する。
【００４７】
（タスクの停止）
図１０に示すように、本実施例では加工プログラム内にタスクを停止する指令を記載することができる（図１０、破線で囲まれた部分）。「＠＠ＨＯＬＤ［Ａ］」はタスク［Ａ］の停止指令である。
【００４８】
加工プログラム解析部１２０は、タスク停止指令を解釈したならば、タスク監視部１９０に対し、指定したタスクを停止するよう通知する。タスク監視部１９０は、既に停止しているタスクが停止対象として指定された場合、アラームやワーニング等でユーザにタスクが既に停止していることを通知する。
【００４９】
（タスクの削除）
図１１に示すように、本実施例では加工プログラム内にタスクを削除する指令を記載することができる（図１１、破線で囲まれた部分）。「＠＠ＤＥＬＥＴＥ［Ａ］」はタスク［Ａ］の削除指令である。
【００５０】
加工プログラム解析部１２０は、タスク削除指令を解釈したならば、タスク監視部１９０に対し、指定したタスクを削除するよう通知する。タスク監視部１９０は、存在しないタスクや動作中のタスクが削除対象として指定された場合、アラームやワーニング等でユーザにタスクを削除できないことを通知する。
【００５１】
メモリ管理部１６０は、指定されたタスクが実行していたプログラムが他のタスクで利用されていなければ、当該プログラムの実行形式のデータをメモリ上から削除する。利用されていれば、一部の不要な実行形式のデータのみをメモリ上から削除する。
【００５２】
本実施の形態によれば、数値制御装置１００において、独自機能を追加するための安全なタスク制御インタフェースを提供することができる。
【００５３】
以上、本発明の実施の形態について説明したが、本発明は上述した実施の形態又は実施例のみに限定されることなく、適宜の変更を加えることにより様々な態様で実施することができる。
【００５４】
例えば、上述の実施の形態では、タスク監視部１９０が、ＣＰＵがマルチコアである場合にタスクの割当先となるコアを決定する処理を示した。しかしながら、本発明はこれに限定されるものでなく、例えばＣＰＵが複数存在する場合にタスクの割当先となるＣＰＵを決定したり、複数の情報処理装置が存在する場合にタスクの割当先となる情報処理装置を決定したりする場合に、同様の処理を行うことも可能である。本発明では、このような処理により決定されるコア、ＣＰＵ及び情報処理装置を、総じてタスクを実行する演算ユニットと称する。
【００５５】
また、上記実施例において示したタスクの登録、起動、停止及び削除コマンドはあくまで一例であって、他の任意の形式で記述することが可能である。
【符号の説明】
【００５６】
１００  数値制御装置
１１０  タスク制御部
１２０  加工プログラム解析部
１３０  実行データ変換部
１４０  実行制御部
１５０  軸駆動部
１６０  メモリ管理部
１７０  実行時間算出部
１８０  実行条件設定部
１９０  タスク監視部
【図１】
2019079336.tif 000003
【図２】
2019079336.tif 000004
【図３】
2019079336.tif 000005
【図４】
2019079336.tif 000006
【図５】
2019079336.tif 000007
【図６】
2019079336.tif 000008
【図７】
2019079336.tif 000009
【図８】
2019079336.tif 000010
【図９】
2019079336.tif 000011
【図１０】
2019079336.tif 000012
【図１１】
2019079336.tif 000013