JP3607283B2 - 制御ソフトウェア実行システムの制御方法 - Google Patents

制御ソフトウェア実行システムの制御方法 Download PDF

Info

Publication number
JP3607283B2
JP3607283B2 JP2004000406A JP2004000406A JP3607283B2 JP 3607283 B2 JP3607283 B2 JP 3607283B2 JP 2004000406 A JP2004000406 A JP 2004000406A JP 2004000406 A JP2004000406 A JP 2004000406A JP 3607283 B2 JP3607283 B2 JP 3607283B2
Authority
JP
Japan
Prior art keywords
task
interrupt
time
running
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004000406A
Other languages
English (en)
Other versions
JP2004171588A (ja
Inventor
茂樹 南角
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2004000406A priority Critical patent/JP3607283B2/ja
Publication of JP2004171588A publication Critical patent/JP2004171588A/ja
Application granted granted Critical
Publication of JP3607283B2 publication Critical patent/JP3607283B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

この発明は,制御ソフトウェア実行システムの制御方法に関し,さらに詳細には,数値制御装置(以下,NC装置)の制御用ソフトウェア(コントロールプログラム)を効率的に実行するNC装置の制御ソフトウェア実行システムの制御方法に関するものである。
図73は,従来におけるNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図であり,図において,501はNC装置全体を示す。以下,このNC装置501のハードウェア構成例を用いて従来におけるNC装置の一般的概略構成を説明する。
図73において,1は各部の動作を制御したり,数値制御に必要な演算を実行するメインCPU,2は装置各部を結ぶシステムバス,3はNC装置501の主要機能を実現するための制御ソフトウェアなどを格納するROM(不揮発性記憶装置),4は一時記憶やワークエリアなどに用いられるRAM(揮発性記憶装置)である。
また,5は外部との間においてシリアル通信によりデータのやり取りを行なうSIOインタフェース部,6はNC装置501の運転状態を表示したり,NC装置501に与えた指令を確認するための表示装置,7はNC装置501に対して指令を与えるためのキーボード(入力装置),8はサーボモータを制御するための指令を演算するサーボ制御部である。このサーボ制御部8にあってはメインCPU1とは別の専用CPUを備えてもよい。
また,9はサーボ制御部8から受け取った指令を電力増幅してサーボモータや工作機械主軸(図示せず)を駆動するサーボアンプ,10は工作機械(図示せず)の加工部を制御するためのサーボモータ,11は工作機械との間でサーボ制御指令以外のデータをやり取りするためのプログラマブルコントロール部(以下,PC部という),12はメインCPU1に対して入力されるシステムクロック(図示せず)と外部割り込み信号を表している。システムクロックはNC装置501全体を制御するために同期をとるためのクロック信号である。また,外部割り込み信号12は電源異常や非常停止などイベント(緊急の出来事)の発生をメインCPU1に対して通知するための信号である。
次に,動作について説明する。図74は,図73に示したNC装置501の制御ソフトウェア実行システムの加工プログラム解析実行手順を示す説明図であり,まず,メインCPU1は,ROM3に書き込まれている制御用のソフトウェアをシステムバス2を介して順次1命令ずつ読み込んで,その内容を実行する。
図74において,加工プログラム入力処理21では,SIOインタフェース部5を介して外部から加工プログラム20を読み込み,RAM4に格納する。その後,加工プログラム20をブロック(入力する加工プログラムにより決まっている所定の単位)毎に内部で処理し易いような内部データに変換する。
また,補正計算処理22では,ブロック毎の内部データを処理,演算して移動量を算出する。また,工具径や工具長などの補正を行なう。さらに,内部座標値の更新処理なども行なう。設定表示処理23では,NC装置501の各種データを表示装置6に表示する。また,キーボード7を用いてオペレータが入力した各種設定データをRAM4に格納する。加えて,補間処理24では,補正計算処理22の処理結果を用いて微小時間毎の各軸の移動量を算出する。
また,サーボ処理25では,補間処理24の処理結果を,さらに,小さな単位時間毎の各軸の移動量に変換する。さらに,サーボモータ10や工作機械(図示せず)に取り付けている速度検出器および位置検出器(いずれも図示せず)からのフィードバック制御(図示せず)を実行する。プログラマブルコントローラ(以下,PCという)処理26では,工作機械との間において入出力処理や主軸の制御など,工作機械周辺の制御を実行する。
さて,NC装置501は,図73を用いて先に説明したようにメインCPU1に外部割り込み信号12が入力し,割り込み処理を実行させることで,非常停止などの通常処理の流れ以外の緊急事態に対処することができる。メインCPU1は,外部割り込み信号12(図73参照)が入力されると,予め指定された別処理を実行し,それら別処理が終了した後に通常の命令に復帰する。
図75は,割り込み処理を示す概念図である。30〜36は通常の命令,37〜40は割り込み命令,また,41は通常の命令への復帰命令である。例えば,メインCPU1が通常の命令33を実行中に外部割り込み信号12(図73参照)が入力されると,メインCPU1は,通常の命令33の処理終了後,割り込みを検出し,予め指定されていた割り込み命令37の実行を開始する。その後,割り込み命令37〜40の実行を終了した後,復帰命令41を実行して,通常の命令34に復帰し,続いて通常の命令35,36を実行する。
なお,割り込み処理の時間が長くなると,割り込み処理の実行中に割り込みが再び入ってくるなど多重割り込みの発生する割合が多くなり,また,割り込み処理中は割り込みを禁止していると割り込みに対して迅速に反応できなくなるなどの問題点があるため,割り込み処理は可能な限り短くすることが望ましい。
ところで,NC装置501の制御ソフトウェアは,以下に示すような特徴を有する。すなわち,
第1に,NC装置501の制御ソフトウェアにより実現すべき機能の多様性のため,ソフトウェアも大量となり,多人数で開発される。
第2に,NC装置501の制御ソフトウェアの機能ごとに,処理に必要な応答時間(ターンアラウンドタイム,デッドライン)が異なる。例えば,サーボ処理25(図74参照)は,処理結果の算出が遅れると切削が止まり,被加工物が不良品になってしまうので,実時間処理でなくてはならない。一方,表示装置6への表示処理などは,多少遅れても不都合は生じないので,実時間処理でなくともよい。
第3に,NC装置501の制御ソフトウェアの処理は,バッチ処理型あるいはコンパイラ型(1つの加工プログラムを最初から最後まで全て解析し終わってからサーボの移動データを全て一度に出力する)ではなく,インタプリタ型(加工プログラムを,いくつかに分解して,例えば,ブロックに分解し,そのブロック毎に解析していって,サーボの移動データも少しずつ出力する)である。
第4に,メインCPU1が実行しなくてはならない,割り込み処理は,多くの種類がある。
これらの特徴により,NC装置501の制御ソフトウェアは,一般にリアルタイムオペレーティングシステム(以下,RTOSという)を用い,その制御のもとで実行される機能ごとのタスクを実行単位とすることが多い。
次に,RTOSにより各タスクを制御する方法について説明する。優先順位を一定間隔毎に調べたり,あるタスクを指定時間だけ実行を遅らせたりするために,通常はメインCPU1(図73参照)に対してある一定周期でタイマ割り込み(図示せず)を入れる。これをシステムクロックという。
また,RTOSは,システムクロック割り込みがある度に各タスクの状態を調べ,実行中のタスクを止めて,別のタスクを実行させたりする。これをスケジューリングあるいはディスパッチという。
さらに,RTOSにおいては,各タスクに優先順位(実行の優先度)付けを実行する。この優先順位の意味は,より低い優先順位のタスクを実行中に,より高い優先順位のタスクを実行する準備ができたとき,その優先順位の低いタスクの実行を中断させて優先順位の高いタスクを実行させることをいう。これをタスクのプリエムプト(横取り)という。
図76は,各タスクにおける動作の時間的関係を示すタイミングムチャートであり,図において,特に,補正計算処理タスクなどは,計算対象タスクの複雑さによって処理時間が大きく変化する。通常は,最も処理時間がかかる場合を想定してシステムクロックの周期を決定する。その結果,それ以外の処理を実行する場合には,図76に示したT1のようなメインCPU1が有効な処理を何ら実行していないアイドルタイムが発生する。なお,図76において,他の処理がないときは後述のようにRTOS中のループにおいて処理が待機するものである。
通常,RTOSは,指定した周期でタスクを走行させたり,タスクの走行時間を測定する機能を有するが,それらはすべてシステムクロックΔTの整数倍の単位でしか制御測定することができない。
また,図76に示した3つのタスクの内,サーボ処理タスク,表示設定処理タスクの処理時間(演算時間)は通常一定である。しかし,補正計算処理タスクは加工プログラムの内容によって処理時間が大きく変化する。一方,サーボ処理タスクは,サーボアンプ9に対するデータ通信等を実行しているため,必ずシステムクロック1回につき1回走行する。このように制御しなければ,アンプユニットの方にサーボモータ10を動作させるデータを送信することができず,サーボモータ10が停止してしまうからである。
そのため,例えば,補正計算処理タスクを加工プログラム1ブロック毎に終了させて,1回に走行する時間が余り長くならないように制御しているものである。しかし,逆に,補正計算処理タスクの処理時間が短くて,3つのタスクの処理時間の合計がシステムクロックの1/N(Nは整数)のときであってもシステムクロック1回につき各タスクが1回づつしか走行できない。この制限によってNC装置の切削送り速度の上限が決定されている。
したがって,例えば,システムクロック1回に各タスクが2回づつ走行することができるとすると,切削送り速度を2倍にすることができ,加工時間は,図77に示すように約1/2となる。
以上のRTOSのもとで,制御ソフトウェアを実行するNC装置501は,何種類かのモードを持っている。例えば,実際に自動運転により被加工物を切削している状態や,手動モードで切削している状態,さらには実加工は行なわずグラフィックによりツールパスを表示させて,加工プログラムの正当性のチェックをしている場合などである。
また,加工プログラムの入力手段としては,NC装置501の標準の加工プログラム形式である,EIAフォーマットのほかにも,例えば,自動プログラミングというものがある。これは,例えば,使用工具と,素材形状,そして最終の加工形状などを入力する,その結果,図78(a),(b)に示すような,その最終形状を加工するように,工具の速度や位置,動作などを自動的に制御するものである。
上記のような,EIAフォーマットや,自動プログラミングなどの加工プログラムを解析するタスクは,図79に示すような処理を実行する。すなわち,ZZZ1は,加工プログラムを1ブロック読み出して,メモリ上のワークエリアへ格納する処理である。ZZZ2は,ZZZ1で読み出したデータを解析し,補正計算処理タスクへ渡すデータを作成する処理である。
ZZZ3は,タスク終了のSVCを発行する処理である。このSVCにより,このタスクは他のタスクにメインCPU1の使用権を譲り渡す。その後,例えば,補正計算処理タスクが,次のデータを要求し,この加工プログラムが解析タスクを起動するまで,システムは待機状態となる。
しかしながら,上記に示した構成のNC装置の制御ソフトウェア実行システムにあっては,その制御ソフトウェアを実行するとき,以下のような問題点が発生する。
第1に,NC装置としての機能を実現する各タスクは,優先順位によってしかその実行の順番が決められない,そのため全てのタスクを周期的に走らせたり,タスク毎に実行時間を決めたりすることができない。
第2に,タスクの制御を時間により実行するような場合であっても,その単位はシステムクロックの単位(システムクロックの整数倍)に限定される。
第3に,タスクの優先順位の決め方が難しく,特に,3個以上のタスクが関係すると,いわゆるプライオリティインバージョン(優先順位の低いタスクが優先順位の高いタスクを止めてしまうような優先順位の逆転現象)が発生する可能性があるため,優先順位だけによるに実行方式には限界がある。
第4に,システムの生成時にタスク間の優先順位を定めてしまうため,処理時間が足りないタスクや,逆に処理時間が余るタスクが存在する。
・第5に,周期を指定したい処理は割り込み処理としなくてはならないため,その処理時間を短くしなくてはならないなどの制限がある。
第6に,NC装置の運転状態や,モードによって各タスクにかかる負荷は一定ではないにもかかわらず,各タスクの走行状態をシステム生成時に決定して,そのまま変更できない。
第7に,あるタスクが正常ではない(異常状態に陥った)か否かを判定する手段がない。
第8に,加工プログラムのブロックの大きさにかかわらず,加工プログラム解析タスクが,1ブロック毎に終了するようになっているので,1ブロックの大きさによっては,処理時間が足りなかったり,逆に余ったりする場合がある。
この発明は,上記のような問題点を解決するためになされたもので,NC装置における各タスクの実行の指定方式に柔軟性を持たせることによって各タスクに適切な処理時間を与え,そのことにより,効率のよい制御ソフトウェア実行システムの制御方法を得ることを目的とする。
この発明に係る制御ソフトウェア実行システムの制御方法(実施例27に対応)は,メモリ内部のリアルタイムオペレーティングシステム内に異なるタスクのスイッチング処理を行なうスケジューラを設け,前記スケジューラによるタスクスイッチの制御に基づき,制御ソフトウェアを実行する複数タスクの実行システムの制御方法において,前記システムが,タスク単位で予め指定した所定の割合で走ることを保証するために現在からの経過クロック数を計算し,前記クロック数を記録し,前記クロック数の経過後に前記タスクを走行させ,タスクスイッチの発生時に,タスク毎に経過クロック数を読み込み,タスク毎に備えた前記経過クロック数の合計を記録し,割り込み発生時の割り込み処理も優先順位の高いタスクによって処理し,各タスクの予想全走行割合を指定し,前記指定された予想全走行割合と実際の走行時間のずれの許容度を指定し,前記指定された許容度を含めた予想走行割合から予想全走行時間を計算し,前記計算された予想全走行時間と実際の走行時間との比較によってタスクの異常事態を判定し,運転を行いながらタスクの異常事態を判定するものである。
したがって,走行時間の比較により異常が発生したタスクを特定できるので,NC装置の動作不良原因を追求し易い。
以上説明したとおり、この発明に係る制御ソフトウェア実行システムの制御方法にあっては,走行時間の比較により,異常が発生したタスクを特定できる。すなわち,NCの機能を実現しているタスクに異常が発生した時,それを検知することができるため,NC装置に異常が発生したことを直ちに判定することができる。
以下、この発明にかかる制御ソフトウェア実行システムを図について説明する。
〔実施例1〕
まず,実施例1の構成について説明する。図1は,実施例1に係るNC装置の制御ソフトウェア実行システムA1の全体構成を示すブロック図であり,この制御ソフトウェア実行システムA1は,以下の要素より構成されている。1は各部の動作を制御したり,数値制御に必要な演算を実行するメインCPU,2はシステムの各部を結ぶシステムバス,3はNC装置の主要機能を実現する制御ソフトウェアなどを格納するROM(不揮発性記憶手段),4はデータの一時記憶やワークエリアなどに用いるRAM(揮発性記憶手段),5は外部との間でシリアル通信によりデータのやり取りを行なうSIOインタフェース部である。
また,図1において,6はNC装置の運転状態を表示したり,NC装置に与えた指令を確認するためにデータ表示を行う表示装置,7はNC装置に対して指令を与えるための入力手段としてのキーボード,8はサーボモータを制御するための指令を演算するサーボ制御部であり,該サーボ制御部8はメインCPU1とは別の専用CPUを備えてもよい。
さらに,図1において,9はサーボ制御部8から受け取った指令を電力増幅してサーボモータや工作機械主軸(図示せず)を駆動するサーボアンプ,10は工作機械(図示せず)の加工部を制御するためのサーボモータ,11は工作機械との間でサーボ制御指令以外のデータをやり取りするためのプログラマブルコントロール部(以下,PC部という),12はメインCPU1に入力される,システムクロック(図示せず)と外部割り込み信号を表している。ここで,システムクロックはNC装置全体を制御するために同期をとるためのクロック信号であり,また,外部割り込み信号は電源異常や非常停止などイベント(緊急の出来事)の発生をメインCPU1に通知するための信号である。
また,図1において,200は内部割り込み信号であり,この信号はメインCPU1により,その発生やタイミングなどが制御される。201はリアルタイムクロックであり,メインCPU1により制御され,内部割り込み信号200を制御したり,時間を読み取ったりする。さらに,202はリアルタイムクロック201の内部にあるカウンタレジスタであり,これは外部からクロック信号が入力されるたびにその値を1ずつ減らし,0になると再び初期値が設定されるか,あるいはメインCPU1から再び値を設定されるまで動作を止める。この動作の選択や初期値の設定,変更はメインCPU1により任意に実行される。なお,203はリアルタイムクロック201に対してクロック信号を出力する水晶発振器である。
次に,上記の構成を有するNC装置の制御ソフトウェア実行システムA1の動作について説明する。通常,システムクロックとしては60Hzから100Hz(1秒間に60回から100回)を用いる。システムクロックをこの数値以上に速くすると,その割り込み処理を実行する回数が多くなり過ぎ,NC装置の機能を実行するタスクの走行可能な時間が少なくなってしまうからである。しかし,タスクの細かい制御に対しては,これでは最小単位が大き過ぎるため,割り込みは使用せずに,例えば,汎用のリアルタイムクロック201を使用する。水晶発振器203によって,リアルタイムクロック201に,例えば,10MHzのクロック信号を入力すると,リアルタイムクロック201はその内部カウンタレジスタ202を1ずつ減らしていく。10MHzのクロック信号の入力の場合は0.1μs(0.0000001秒)単位で測定することができる。
リアルタイムクロック201は,また,プログラマブルインターバルタイマとしての役割も果たすことができる。これは,指定した初期値が0になったときにCPU1に対して割り込みを発生させる機能である。通常リアルタイムクロック201は,上記のようにどちらの使い方もできるタイマを複数チャンネル持っている。
各タスクは,予め,あるいは,そのタスクが開始させられるときにSVC(スーパーバイザーコール,または,サービスコール)によってその実行周期を登録する。ここで,SVCとは,タスクがRTOSに対して何らかのサービスを要求するときの総称である。何らかのサービスとは,例えば,何らかの条件が成立するまで自分自身の実行を停止させたり,他のタスクと通信を行なったり,他のタスクを起動させたり(実行を開始させたり),停止させたりすることである。
このデータは,RTOSが,例えば,図2に示すような"タスク走行周期テーブル"50に登録する。図2は,タスク毎に"走行周期"と"繰り返し回数"を有するデータ構造である。ここで,走行周期とは,タスクの次に走るまでのクロック数の値であり,また,繰り返し回数とは,何回そのタスクを起動するかを示す回数である。例えば,この値がマイナスの値ならば∞を示すものとし,その場合にあっては,タスクは繰り返し起動するものとする。このタスク走行周期テーブル50を用いて,RTOSは,タスクに起動がかかるたびに図3に示すような"タスク走行待ちリスト"51を作成する。
以下に,図4を用いて具体的な動作について説明する。説明の都合上,水晶発振器203に対して入力するクロック信号は,10MHzとして内部カウンタレジスタ202は,0.1μ秒毎に1減るものとする。すなわち,計測の最小単位は0.1μ秒とする。また,説明中,リストを操作している最中など必要な処理中は,割り込みは禁止しているものとする。さらに,走行待ちブロック52を作成する場合には,タスク名としては当該タスクを示す名前を入れておくものとする。
図4は,RTOSが,タスク走行待ちリスト51を作成するときの手順を示したものである。図において,まず,B1では,要求のあった走行周期を内部クロック数に変換する。例えば,要求が10m秒であれば,100,000(100,000×0.1μ秒=10m秒)である。これをRT(request time)とする。次に,B2では,現在の走行待ちリストに走行待ちブロックがあるか否かを判定し,走行待ちブロックがないと判定した場合には,B3に処理が移行し,反対に,走行待ちブロックがあると判定した場合には,B6に処理が移行する。
B3は,走行待ちリスト51に走行待ちブロック52がなかった場合における処理であり,走行待ちブロック52を作成し,B4では,走行待ちリスト51の先頭に走行待ちブロック52を置く。その後,B5では,走行待ちリスト51の先頭ブロックの走行予定クロック数を,リアルタイムクロック201のカウンタレジスタ202に設定する。
次に,B6は,走行待ちリスト51に走行待ちブロック52があると判断した場合における処理であり,最終タスク走行時間LTを0にして,タスクインデックスTIを1にする。ここで,LTとは当該タスクを走らせるのは現在からどれだけのクロック数かを計算するための変数であり,TIは走行待ちリスト中で当該タスクを示すインデックスである。その後,B7では,現在のリアルタイムクロック201のカウンタレジスタ202の値を読み込んで,先頭の走行待ちブロック52の走行予定クロック数に入れる。次に,B8において,走行待ちリスト51内の,全ての走行待ちブロック52を調べ終ったか(たどったか)否かを判定する。
その結果,B8において,全ての走行待ちブロック52を調べ終っていないと判定した場合には,B9に処理が移行する。B9では,走行待ちブロック51が,走行待ちリスト51中にあったと判断した場合の処理であり,走行待ちリスト51の中から,TIの示す走行待ちブロック52の,走行予定クロック数を取り出してLTに加える。
その後,B10において,RTとLTとを比較する。B11は,RTとLTが等しい場合(RT=LT)の処理であり,走行待ちブロック52を作成する。このとき,走行予定クロック数は0にしておく。B12は,B11において作成した走行待ちブロック52を,走行待ちリスト51中のTIの示すブロックの同時タスク名へつなぐ。ここで,つなぐとは,例えば,B11において作成したブロックのアドレスをTIが示す走行待ちブロック52の同時タスク名の場所に置くなど,要するにB11において作成したブロックを,直ちに見つけられるような配置に設定することである。
B13は,RTがLTより大きな場合(RT>LT)の処理であり,TIの値を,1プラスして,B8へ戻り同じ処理を繰り返す。
B14は,RTがLTより小さな場合(RT<LT)の処理であり,走行待ちブロック52を作成する。このとき,走行予定クロック数は,RT−LT+(TIが示すより1つ前の走行待ちブロック52の走行予定クロック数)の値にする。その後,B15では,TIが示すブロックの走行予定クロック数をLT−RTとし,B16では,TIが示す走行待ちブロック52とその前のブロックとの間にB14において作成した走行待ちブロック52を挿入する。その後,B17では,B16で挿入したブロックが,走行待ちリスト51の先頭か否かを判定し,B18において,先頭であると判定した場合には,走行待ちリスト51の先頭ブロックの走行予定クロック数を,リアルタイムクロック201のカウンタレジスタ202に設定する。
B19では,B8において,全ての走行待ちブロックを調べ終ったと判定した場合に,走行予定クロック数がRT−LTの走行待ちブロック52を作成し,その後,B20では,B19において作成した走行待ちブロック52を走行待ちリスト51の最後に挿入する。
図5は,走行待ちリスト51の例である。この例では現在から30クロック後にタスクAを起動して,さらにそれから20クロック後(すなわち,現在から50クロック後)にタスクBを起動することを示している。このとき,タスクCを35クロック後に起動する要求がRTOSに対して発せられたとすると,図4に示したフローチャートの手順にしたがって走行待ちリストは図6に示すようになる。
図4に示したB5や,B18において走行待ちリスト51の先頭ブロックの走行予定クロック数を,リアルタイムクロック201のカウンタレジスタ202に指定し,その指定したクロック数が経過した後,"タスク起動割り込み"が発生する。このタスク起動割り込みの処理について図7を用いて説明する。
図7において,C1では,走行待ちリスト51の先頭の走行待ちブロック52を走行待ちリスト51から切り離す処理を実行し,その後,C2では,走行待ちリスト51が空になったか否かを判定する。また,C3は,走行待ちリスト51が空になったと判定した場合の処理であり,リアルタイムクロック201のカウンタレジスタ202に0を入れるなどの手段により,以後のタスク起動割り込みが発生しないように,タスク起動割り込みを禁止する。
その後,C6では,今走らせたタスクの,タスク走行周期テーブル50(図2参照)の周期回数を判定する。C7は,走行回数が∞(負)の場合の処理であり,このタスクの走行待ちブロック52の,走行予定クロック数を,タスク走行周期テーブル50の走行周期に変え,走行待ちブロックを走行待ちリストに追加する。
C8は,走行回数が正の整数だった場合の処理であり,走行予定回数を1減らす。その後,C9では,当該タスクに対して図4に示した処理により,このタスクの走行待ちブロック52を作成して走行待ちリストに追加する。
C10は,走行回数が0の場合の処理であり,この場合,何の処理も実行せずに処理を終了する。C7とC9の処理の後,C11では,RTOSのスケジューラへ飛ぶ。スケジューラの処理は,従来におけるスケジューラ処理と同様であるので,その説明を省略する。
次に,タスク起動割り込み以外の一般の割り込み処理について,図8を用いて説明する。D1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。ただし,この処理は,通常メインCPU1により割り込みが発生したときに自動的に実行される。D2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。
その後,D3では,ICBに,自分自身の割り込み処理の,実行環境を格納保存する。この中には,次に実行する命令のアドレスとしてD12の処理における先頭アドレスをICBに格納することも含まれる。また,D4では,今作成したICBを,スケジューラが実行するICB待ち行列に追加する。その後,D5は,D1の割り込みの禁止を解除する。これ以降は,再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためのものである。
次に,D6は,割り込まれた処理が,割り込み処理あるいはRTOSか,それともタスクの処理中かを判定する。その結果,D7は,割り込まれた処理が割り込み処理またはRTOSを実行中であると判断した場合であって,このときは割り込まれた処理に直接戻る。反対に,D8は,割り込まれた処理が,タスクの処理を実行中であると判断した場合であって,このときは,まず割り込まれたタスクのTCBを探し出す。その後,D9では,D8において見つけたTCBへ割り込まれたタスクの実行環境を格納保存する。
さらに,D10では,作成したTCBを,スケジューラが実行するTCB待ち行列に優先順位の順番に追加する。また,D11では,スケジューラへ飛び,スケジューラからD12に処理が戻ってくるが,スケジューラへ飛んだ後すぐにこの処理が実行されるとは限らず,他のICBが処理された後に戻る場合もある。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理が異なる。さらに,D13は,割り込み処理の終了であり,通常のサブルーチンへのリターン命令が一般的であり,このリターン命令によって,スケジューラのICB処理に戻る。
上記のとおり,実施例1に係るNC装置の制御ソフトウェア実行システムA1は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSにシステムクロックよりも細かい精度でタスク起動の制御が行なえる機能を追加し,NC装置の制御ソフトウェアを実行するものである。
実施例1によれば,NC装置の制御ソフトウェア実行システムA1は,NC装置機能を実現するタスクの時間による制御を小さな単位で行なえるようになり,さらにタスクを起動する周期を簡単に指定できる。そのため,タスクに割り当てた時間の無駄を少なくでき,さらに,タスクをその走行時間において制御できるので,システムの構築が容易になると共にNC装置の処理速度が向上する。
〔実施例2〕
次に,実施例2の構成について説明する。実施例2に係るNC装置の制御ソフトウェア実行システムA2の全体構成を示す図9の内容は,実施例1において示した図1とほぼ同様である。ただし,実施例1にあっては,リアルタイムクロック201の割り込みポートを1チャンネルしか使用しなかったが,本実施例においては3チャンネル用いている点が異なる。
以下,構成を詳細に説明する。この制御ソフトウェア実行システムA2の1〜11までは,実施例1の図1に示した構成と同様であるため,その説明を省略する。図9において,200はメインCPU1に入力される,内部割り込み信号である。この信号は,メインCPU1により,その発生およびタイミングを制御することができる。201はリアルタイムクロックであり,メインCPU1により制御され,内部割り込み信号200を制御し,あるいは時間を読み取ったりするものである。
また,202はリアルタイムクロック201の内部にあるカウンタレジスタである。これは外部からクロック信号が入力されるたびに,その値を1ずつ減らし,0になると再び初期値が設定される。なお,初期値はメインCPU1から自由に設定できる。なお,203はリアルタイムクロック201にクロック信号を入力する水晶発振器である。
また,204,205はリアルタイムクロック201の内部にある第2,第3のカウンタレジスタである。これは外部からクロック信号が入力されるたびにその値を1ずつ減らしていき,0になると再び初期値が設定されるか,あるいはメインCPU1から再び値を設定されるまで動作を止める。この動作の選択や初期値の設定,変更はメインCPU1により任意に実行される。また,202,204,205はそれぞれ独立に設定,解除ができる。本実施例ではカウンタレジスタ202,204,205をタスク走行時間計測用,基準時間割り込み用,走行時間警告用にそれぞれ用いる。
次に,NC装置の制御ソフトウェア実行システムA2の動作について説明する。図10は,本実施例において必要なデータ構造を示したもので,210は"タスク開始チックメモ"であり,RTOSが,タスクを起動する直前に図9に示したリアルタイムクロック201の内部カウンタレジスタ202の値を記録しておき,その後,タスクが終了してRTOSに戻ってきたときの内部カウンタレジスタ202との差を求めることによりタスクが走った時間を求めるものである。
また,211は"基準周期"を格納しておく領域である。システムに対して予め1つの基準周期を登録しておく。この周期毎に各タスクはどれくらい走行するかを指定する。この指定は時間でもチック数でも構わないが,ここでは説明の都合上,チック数に変換しておくものとする。
さらに,212は"タスク走行状態メモ"である。各タスクは予め,あるいは,そのタスクが開始させられるときにSVCによって,その実行の割合を登録する。例えば,タスク毎の指定走行周期,すなわち,タスクAが10%,タスクBが5%,タスクCが20%,基準周期が20m秒のとき,20m秒毎にタスクAが2m秒,タスクBが1m秒,タスクcが4m秒走ればよい。
ここで,実施例1と同様,図1において,水晶発振器203へ入力するクロック信号は10MHzとして内部カウンタレジスタ202は,0.1μ秒毎に1減少する,すなわち,計測の最小単位は0.1μ秒とするとA,B,C各タスクはクロック数200,000チックの間にそれぞれ20,000,10,000,40,000チック分走ればよいことになる。このチック数をタスク走行状態メモ212の,"走行チック数"の欄に格納する。ここで,走行する割合を指定しないタスクに対しては,この欄を0に設定しておく。
また,"走行残りチック数"の欄は,1回の基準周期が終了する毎に,走行チック数の欄をコピーし,タスクが走ったチック数だけ減算していく。1回の基準周期が終る毎に,すべてのタスクの,この欄の内容が0になっていればよい。当然走行チック数の合計は基準周期よりも少なくなければならない。そのエラーチェックは,例えば,タスク状態メモに新たに登録する毎に行なえばよい。ただし,以下の説明においては,このエラーチェックについては省略する。
次に,"繰り返し回数"の欄に設定するのは,何回そのタスクを起動するかを示す回数である。例えば,この値がマイナスの値ならば∞を示すとする。その場合には,当該タスクは繰り返し起動するものとする。
また,"走行禁止フラグ"の欄は,スケジューラが用いる。このフラグがオンになっているタスクはスケジューリングの対象から外す。すなわち,このフラグがオンのタスクはプライオリティが高くても走ることができない。
次に,割り込み処理の動作について説明する。制御ソフトウェア実行システムA2は,稼働し始めたときなど走行割合を保証するタスクが動作し始める前に,予めリアルタイムクロック(プログラマブルインターバルタイマ)201(図9参照)の内部カウンタレジスタ204に対して,基準周期211(図10参照)の値を設定しておく。
図11は,基準周期割り込み処理の手順について説明したフローチャートであり,E1では,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。通常,この処理はメインCPU1によって自動的に実行される。E2では,タスク走行状態メモ212(図10参照)の走行残りチック数の合計を求める。E3では,その合計が0以上か否かを判定し,0以上ではないと判定した場合には,E4においてエラー処理を行なうが,通常は発生しないのでここでは,その説明を省略する。
その後,E7では,タスク走行状態メモ212(図10参照)のすべてのタスクの走行禁止フラグを,オフにする処理を行う。この処理により,再びすべてのタスクがスケジューリング対象になる。さらに,E8では,基準周期211(図10参照)からタスク走行状態メモ212の走行残りチック数の合計を減算した値をリアルタイムクロック201(図9参照)の走行時間警告用の内部カウンタレジスタ205に設定する。この結果,周期を保証したタスクだけを走らせる時間しかなくなったときに走行時間警告の割り込みが発生する。
その後,E9では,割り込まれた状態がタスク処理中か否かを判定し,タスク処理中であると判定した場合には,E10において,タスクの実行環境をTCBへ保存し,E11では,E10において保存したTCBを,TCB待ち行列につなぎ,さらに,E12では,割り込みを許可し,E13では,スケジューラへ飛ぶ。
反対に,E9において,タスク処理中ではないと判定した場合には,E14において,割り込まれた処理に戻る。このとき,割り込みの禁止/許可は割り込まれたときの状態に戻す。
以上の説明においては,以後の割り込み説明において,従来例のように,割り込み処理自身のアドレスをリストに登録しておいて,多重割り込み(割り込み処理中の他の割り込み)を許可する処理を実行してはいないが,その場合にあっても,従来例のように,多重割り込みを許す処理を実行してもよい。ただし,その分オーバヘッド(必要な処理が行なわれるまでに要する無駄時間)が発生するので,タスク走行割合などを余分に設定しておく必要がある。
図12は,走行時間警告割り込み処理の手順について説明したフローチャートである。F1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。通常,この処理はメインCPU1によって自動的に実行される。F2は,タスク走行状態メモ212(図10参照)の走行残りチック数が,0または負の全てのタスクの走行禁止フラグをオンにする。
F3では,全ての走行禁止フラグがオフであるTCBが,全ての走行禁止フラグがオンのTCBの前に来るように,タスク処理の待ち行列を作り直す。すなわち,走行禁止フラグがオンのタスクの方がフラグがオフのタスクよりも前に走るようにする。F4は,割り込まれた状態がタスク処理中ならば,タスクの実行環境をTCBへ保存して,割り込みを許可し,スケジューラへ飛ぶ。反対に,割り込まれた状態がタスク処理中でなければ,割り込まれた処理に復帰する処理である。
図13は,基準周期割り込み以外の,一般の割り込み処理の手順を示すフローチャートである。G1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する,通常この処理はメインCPU1によって自動的に実行される。G2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。G3は,ICBに,この割り込み処理(自分自身の)の,実行環境を格納(保存)する。この中には,次に実行する命令のアドレスとして後述するG15の処理の先頭アドレスをICBに格納することも含まれる。
G4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。G5は,G1の割り込みの禁止を解除する。これ以降は,再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためのものである。
G6は,割り込まれた処理が,割り込み処理か,あるいは,RTOSか,それともタスクの処理中かを判定する。G7は,割り込まれた処理が割り込み処理またはRTOSを実行中の場合で,このときは割り込まれた処理に直接戻る。G8は,割り込まれた処理がタスクの処理を実行中のときで,このときにあっては,まず,割り込まれたタスクのTCBを探し出す。G9は,G8において見つけたTCBへ割り込まれたタスクの実行環境を格納する。
G10は,現在処理を行なっているタスクが,走行する割合を保証する対象のタスクであるか否かを判定する処理である。具体的には,タスク走行状態メモ212(図10参照)の走行残りチック数の欄が1以上のタスクか否かを判定する。G11は,G10において対象と判定した場合における処理であり,内部カウンタレジスタ202(図9参照)の値を,基準周期211(図10参照)に保存してある値から減算する。この結果が当該タスクの,この回に連続して走ったチック数である。これをタスク走行状態メモ211の当該タスクの走行残りチック数の欄から減算する。
G12は,G11において減算した値を,リアルタイムクロック201(図9参照)の走行時間警告用の内部カウンタレジスタ205の値に加える。走行周期を保証したタスクが,走行し終った分だけ,走行周期を保証したタスク以外のタスクを走らせるための時間が増えるわけである。
G13は,作成したTCBを,スケジューラが実行するTCB待ち行列に追加する。このとき,タスク走行状態メモ212(図10参照)の走行禁止フラグの欄が1つのタスクでもオンになっていれば,TCB待ち行列において,走行禁止フラグがオフのタスクのTCBは,走行禁止フラグがオンのタスクのTCBよりも前につなぐ。
G14は,スケジューラへ飛ぶ。G15は,スケジューラから戻ってきたときの処理であり,スケジューラへ飛んだ後すぐにこの処理が実行されるとは限らず,他のICBが処理された後の場合もあるが,いずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理内容が異なる。G16は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が一般的であり,このリターン命令によって,スケジューラのICB処理部に戻る。
次に,図14を用いて,RTOSのスケジューラの動作について説明する。以下,説明の都合上,本実施例においては,優先順位が最低であって,外部に対して何も処理を行なわない,アイドルタスクが常に走っているものとして説明を行なう。
H1は,割り込み処理(ICB)の待ち行列があるか否かを調べる処理である。H2は,H1において,割り込み処理の待ち行列があったと判断した場合の処理であり,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行おうとするとリストの整合性が保たれなくなるためである。
H3は,割り込み処理の待ち行列のリストから先頭のICBを取り除く。H4は,割り込み禁止を解除する。H5は,H3において取り除いたICBからG3(図13参照)において格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して,それを実行する。これが,G15(図13参照)の処理である。H6は,G16(図13参照)から戻ってくるところであり,再び割り込みを禁止する。H7は,H3において取り除いたICBをICBプールへ返す。H8は,割り込み禁止を解除してからH1へ戻る。後は割り込み処理待ち行列がある間はH1からH7の処理を繰り返す。
H9は,H1において,割り込み処理の待ち行列がなかったときの処理であり,ここでは,TCBの待ち行列があるか否かを判定する。H10は,H9において,TCBの待ち行列があると判定した場合の処理であり,割り込みを禁止し,その待ち行列を実行するために最初に割り込みを禁止する。H11は,当該TCBのタスクが走行割合を保証するタスクである場合には,タスク開始チックメモ210(図10参照)にリアルタイムクロック201(図9参照)の走行時間計測用の内部カウンタレジスタ202(図9参照)の値を保存しておく。
H12は,割り込み禁止を解除する。H13は,H11でタスク処理の待ち行列(リスト)から取り除いたTCBからG9(図13参照)において格納したタスクの実行環境を取り出して,それを実行する。
以上で述べたように,実施例2に係るNC装置の制御ソフトウェア実行システムA2は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSに,タスク走行時間の保証を与える制御を実行できる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例2によれば,NC装置の制御ソフトウェア実行システムA2は,NC装置機能を実現するタスクの走行時間による制御を実行することができる。そのため,タスクに割り当てた時間の無駄を少なくできる。さらに,タスクをその走行時間において制御できるので,システムの構築が容易になる。
〔実施例3〕
次に,実施例3の構成について説明する。実施例3に係るNC装置の制御ソフトウェア実行システムA3の全体構成を示す図15の内容にあっては,実施例2において示した図9の内容とほぼ同様である。ただし,実施例3にあっては,カウンタレジスタ202と同様にリアルタイムクロック201の内部にあるカウンタレジスタ206が設けられている。実施例3では,このカウンタレジスタ206を連続走行終了割り込み用に用いる。
次に,実施例3の動作について説明する。図16,図17は,タスクの連続走行を保証するのに必要なデータ構造を示したもので,図16は,"タスク終了チック数"のリスト構造である。220は,"タスク終了チックブロック"を表している。タスク終了ブロックの構成要素は,タスク終了ブロックを連結するための"リンク(ポインタ)","タスク名","終了チック数"などである。今までの説明と同様本実施例の説明でも内部的には全てチック数により時間の制御を行なうものとする。
図17は,"タスク連続走行保証テーブル"221の内容を示している。このテーブルには"タスク名"と"連続走行保証チック数"と"実行中フラグ"の欄があり,連続走行保証チック数の値は,システム起動時,またはSVCにより設定する。連続走行を指定しないタスクに対してはこの欄は0に設定しておく。実行中フラグ欄は現在連続走行を保証されたタスクが走っているときはオン,それ以外のときはオフとし,このフラグは同時には,2つ以上オンすることはない。このテーブルはタスク起動のSVCにおいて,そのパラメータとして指定することにすれば必要はなくなるが,以下の説明の都合上,ここではこのテーブルを用いることにする。
RTOSのスケジューラは,連続走行が保証されているタスクが走行しているときに,割り込みが発生しても割り込み処理の終了後における再スケジューリングは行なわないことによって,タスクの連続走行を保証する。連続走行が保証されているタスクの実行を終了させるのは"連続走行終了割り込み"が発生したときである。
RTOSは,タスク起動のSVCが発行されたときは,まず,そのタスクが連続走行を保証されたタスクか否かを判定し,もし該当タスクであると判定した場合には,タスク連続走行保証テーブル(図17参照)から連続走行チック数をリアルタイムクロック201(図15参照)の内部カウンタレジスタ206に設定する。設定したクロック数が経過すると,"連続走行終了割り込み"が発生する。
最初に,割り込み処理について説明する。図18は,連続走行割り込みの処理手順について示したフローチャートである。I1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。通常,この処理はメインCPU1によって自動的に実行される。I2は,現在走っている,連続走行を保証されたタスクのTCBを探し出して,現在のタスクの実行環境をTCBへ保存する。
次に,I3は,当該タスクの実行中フラグ(図17参照)をオフする。I4は,タスク処理の待ち行列を優先順位に応じて作り直す。さらに,I5は,割り込まれた状態がタスク処理中ならばタスクの実行環境をTCBへ保存してスケジューラへ飛び,そうでなければ割り込まれた処理に復帰させる処理である。このとき,復帰すると同時に割り込みを許可する。
次に,一般の割り込みの処理手順について図19のフローチャートを用いて説明する。J1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する,通常,この処理はメインCPU1によって自動的に実行される。J2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。J3は,ICBに,この割り込み処理(自分自身の)の,実行環境を格納する。この中には,次に実行する命令のアドレスとしてJ13の処理の先頭アドレスをICBに格納することも含まれる。
J4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。J5は,J1の割り込みの禁止を解除する。これ以降は再び割り込みが発生する可能性がある。以上の処理は,割り込み禁止時間をできる限り短くするためのものである。J6は,割り込まれた処理が割り込み処理またはRTOSか,それともタスクの処理中かを判定する。
J7は,割り込まれた処理が割り込み処理またはRTOSを実行中のときで,このときは割り込まれた処理に直接戻る。反対に,J8は,割り込まれた処理がタスクの処理を実行中のときで,このときは,まず,割り込まれたタスクのTCBを探し出す。J9は,現在処理を行なっているタスクが,連続走行を保証する対象のタスクであるか否かを判定する処理である。具体的には,タスク連続走行保証テーブル(図17参照)の連続走行保証チック数の欄が1以上のタスクか否かを判定する。連続走行保証の対象タスクであると判定した場合には,以下のJ10,J11の処理は実行しないで,J12へ処理が移行する。
J10は,連続走行保証の対象外のタスクであると判定した場合の処理で,J8において見つけたTCBへ割り込まれたタスクの実行環境を格納する。J11は,TCB待ち行列(図5参照)を優先順位に応じて作り直す。J12は,スケジューラへ飛ぶ。J13は,スケジューラから戻ってくるとここへ来る処理である。スケジューラへ飛んだ後,すぐにこの処理が実行されるとは限らず,他のICBが処理された後の場合もあるが,いずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって,その処理内容は異なる。J14は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が多い,このリターン命令によって,スケジューラのICB処理部に戻る。
以上で述べたように,実施例3に係るNC装置の制御ソフトウェア実行システムA3は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSに,タスクの連続した走行時間の保証を与える制御を実行できる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例3によれば,NC装置の制御ソフトウェア実行システムA3は,NC装置機能を実現するタスクに連続した走行時間を保証できるようになる。そのため,タスクに割り当てた時間の無駄を少なくできる。さらに,タスクをその走行時間において制御できるので,システムの構築が容易に行なえる。
〔実施例4〕
次に,実施例4の構成について説明する。実施例4に係るNC装置の制御ソフトウェア実行システムA4の全体構成を示す図20の内容は,実施例1において示した図1の内容とほぼ同様である。ただし,実施例1にあっては,リアルタイムクロック201の割り込みポートを1チャンネルしか使用していないが,本実施例では4チャンネル使用している点が異なる。以下,図2〜図4および図10の内容を参照して本実施例を説明する。
すなわち,202はリアルタイムクロック201の内部にあるカウンタレジスタであり,これは外部からクロック信号が入力されるたびにその値を1ずつ減らしていく。0になると再び初期値が設定されるか,あるいはメインCPU1から再び値を設定されるまで動作を止める。この動作の選択や初期値の設定,変更はメインCPU1から自由に実行することができる。
また,204,205,206もリアルタイムクロック201の内部にあるカウンタレジスタである。これらも外部からクロック信号が入力されるたびにその値を1ずつ減らしていく。0になると再び初期値が設定される。また,同様に初期値はメインCPU1から自由に設定できる。また,202,204,205,206は,それぞれ独立に設定,解除することができる。本実施例では,カウンタレジスタ202〜206をそれぞれタスク走行時間計測用,基準時間割り込み用,走行時間警告用,タスク走行割り込み用に用いる。
次に,NC装置の制御ソフトウェア実行システムA4の動作について説明する。実施例1と同様に,各タスクは,予め,あるいは,そのタスクが開始させられるときにSVCによってその実行周期を登録する。
このデータは,RTOSが,例えば,図2に示したような"タスク走行周期テーブル"50に登録する。図2は,タスク毎に"走行周期"と"繰り返し回数"を持ったデータ構造である。走行周期は,タスクの次に走るまでのクロック数の値であり,繰り返し回数は何回そのタスクを起動するかを示す回数である。例えば,この値がマイナスの値ならば∞を示すとする。その場合は,そのタスクは繰り返し起動するものとする。このタスク走行周期テーブル50を用いて,RTOSは,タスクに起動がかかるたびに,図3に示したような"タスク走行待ちリスト"51を作成する。
図3において,リストの中における走行待ちブロック52は,それぞれ"タスク名"と,現在からどれだけの時間の経過後に走らなくてはならないかの"走行予定クロック数",それに同時に走らせなくてはならないタスク名を示す"同時タスク名"から成るブロックである。このタスク走行待ちリストを,RTOSが作成する方法は,実施例1において図4に示したものと同様なので,その説明は省略する。
また,実施例2において示したように,図10は,タスクの走行割合を保証するのに,必要なデータ構造を示したもので,210は"タスク開始チックメモ"である。RTOSが,タスクを起動する直前に,リアルタイムクロック201(図20参照)の内部カウンタレジスタ202(図20参照)の値を記録しておく。その後,そのタスクが終了してRTOSに戻ったときにおける内部カウンタレジスタ202(図20参照)との差を求めることによって,タスクが走った時間を求める。
また,図10に示した"基準周期"211,"タスク走行状態メモ"212,"走行残りチック数"の欄,"繰り返し回数"の欄および"走行禁止フラグ"の欄については,実施例2と同様なので,その説明を省略する。
図4に示したB4や,B16において走行待ちリストの先頭ブロックの走行予定クロック数を,リアルタイムクロック201(図20参照)のカウンタレジスタ202(図20参照)に入れ,その指定したクロック数が経過した後,"タスク起動割り込み"が発生する。このタスク起動割り込みの処理については,実施例1の図7に基づいて説明したものと同様であるので,その説明を省略する。
図20に示した制御ソフトウェア実行システムA4は,稼働し始めたときなど走行割合を保証するタスクが動き始める前に,予めプログラマブルインターバルタイマ201の内部におけるカウンタレジスタ204に対して,基準周期211(図10参照)の値を設定しておく。この設定したチック数が経過した後に,基準周期割り込みが発生する。
基準周期割り込みの処理手順については,実施例2の図11に基づいて説明した手順と同様なので,その説明を省略する。また,走行時間警告割り込みの処理手順についても,実施例2の図12に基づいて説明した手順と同様なので,その説明を省略する。また,基準周期割り込み以外の,一般の割り込みの処理手順についても,実施例2の図13に基づいて説明した手順と同様なので,その説明を省略する。さらに,RTOSのスケジューラの動作についても,実施例2の図14に基づいて説明した手順と同様なので,その説明を省略する。
ここで,タスク起動割り込み,基準時間割り込み,走行時間警告割り込み,および,一般の割り込みの各処理について,TCB待ち行列への操作を中心にまとめる。
タスク起動割り込みは,この割り込みによって起動するタスクのTCBを,TCB待ち行列の先頭に挿入する。また,基準時間割り込みは,全てのタスクを走行可能とする。走行時間警告割り込みは,走行時間の割合を保証しているタスクのTCBを,そうでないタスクのTCBより前に持ってくると共に,タスク走行状態メモ212(図10参照)の走行禁止フラグをオンすることによって,走行時間警告割り込みが発生したことを,一般の割り込みに対して知らせる。さらに,一般の割り込みは,走行時間警告割り込みの処理によって,走行時間警告割り込みが発生した場合には,基準時間割り込みが発生するまでは,走行時間を保証しているタスクのTCBをそうでないタスクのTCBよりTCB待ち行列の前につなぐ。
ここで,タスク起動割り込みと一般の割り込みの優先順位に関して,どちらかを選択しておく。タスク起動割り込みを,優先すればタスクの起動時間は正確になるが,タスクの走行割合は多少不正確になる。反対に,一般の割り込みを優先すれば,タスクの走行割合は正確になるが,タスクの起動時間は多少不正確になる。これらは,何らかの手段によって閾値を決めておいてもよい。例えば,タスクの起動時間の遅れが,ある時間までは走行割合を優先するが,それ以上はタスク起動を優先するなどの方法を取ればよい。
以上で述べたように,実施例4に係るNC装置の制御ソフトウェア実行システムA4は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSに,タスク起動周期とタスク走行割合の保証を与える制御を行なえる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例4によれば,NC装置の制御ソフトウェア実行システムA4は,NC装置機能を実現するタスクの正確な起動時間と走行時間による制御を行なえるようになる。そのため,タスクに割り当てた時間の無駄を少なくでき,さらに,タスクをその走行時間で制御できるので,システムの構築が容易に行なえる。
〔実施例5〕
次に,実施例5について説明する。実施例5に係るNC装置の制御ソフトウェア実行システムA5の全体構成は,実施例1に示したものと同様であるので,その説明を省略する。
次に,実施例5に係るNC装置の制御ソフトウェア実行システムA5の動作について説明する。実施例1と同様に,各タスクは,予め,あるいは,そのタスクが開始させられるときにSVCによってその実行周期を登録する。
このデータは,RTOSが,例えば,図2に示したような"タスク走行周期テーブル"50に登録する。このタスク走行周期テーブル50における"走行周期"と"繰り返し回数"については,実施例1と同様なので,その説明を省略する。
図3において,リストの中の各走行待ちブロックは,ぞれぞれ"タスク名"と,現在からどれだけの時間の経過後に走らなくてはならないかの"走行予定クロック数",それに同時に走らせなくてはならないタスク名を示す"同時タスク名"から成るブロックである。このタスク走行待ちリストを,RTOSが作成する方法は,実施例1において図4で示したものと同様なので,その説明は省略する。
また,実施例3と同様に,図16,図17は,タスクの連続走行の走行割合を保証するのに,必要なデータ構造を示したもので,図16は,"タスク終了チック数"のリスト構造である。220は,"タスク終了チックブロック"を表している。タスク終了ブロックの構成要素はタスク終了ブロックを連結するためのポインタ,"タスク名","終了チック数"などである。今までの説明と同様本実施例の説明でも内部的には全てチック数で時間の制御を行なうものとする。"実行中フラグ"欄は現在連続走行を保証されたタスクが走っている時はオン,それ以外の時はオフとする。このフラグは同時には2つ以上オンすることはない。
図17は,"タスク連続走行保証テーブル"221である。このテーブルには"タスク名"と"連続走行保証チック数"の欄があり,連続走行保証チック数の値はシステム起動時,またはSVCにより設定する。連続走行を指定しないタスクに対してはこの欄は0にしておく。このテーブルはタスク起動のSVCにおいて,そのパラメータとして指定することにすれば,必要はなくなるが,以下の説明の都合上,ここではこのテーブルを用いることにする。
RTOSのスケジューラは,連続走行が保証されているタスクが走行しているときに,割り込みが発生しても割り込み処理の終了後における再スケジューリングは行なわないことによって,タスクの連続走行を保証する。連続走行が保証されているタスクの実行を終了させるのは"連続走行終了割り込み"が発生したときである。
RTOSはタスク起動のSVCが,発行されたときには,まずそのタスクが連続走行を保証されたタスクか否かを判定して,もし該当タスクであると判定した場合には,タスク連続走行保証テーブル221(図17参照)から連続走行チック数をリアルタイムクロック201(図1参照)の内部カウンタレジスタ206に設定する。設定したクロック数が経過すると,"連続走行終了割り込み"が発生する。
連続走行終了割り込みの処理手順については,実施例3に示した図18の内容と同様なので,その説明を省略する。基準周期割り込み以外の,一般の割り込みの処理手順についても,実施例3に示した図19の内容と同様なので,その説明を省略する。スケジューラについても,従来例と同じであるので,その説明を省略する。
ここで,連続走行終了割り込みと,一般の割り込みの処理について,TCB待ち行列への操作を中心にまとめる。すなわち,
(1) タスク起動割り込みは,この割り込みによって起動するタスクのTCBを,TCB待ち行列の先頭に挿入する,
(2) 連続走行終了割り込みは,実行中のタスクの実行中フラグをオフして他のタスクの走行を許可する,
(3) 一般の割り込みは,連続走行を保証するタスクの場合には,TCB待ち行列のディスパッチを実行しない,
がある。
ここで,上記(1)と(3)の優先順位はどちらかを選択しておく。(1)を優先すればタスクの起動時間は正確になるが,タスクの連続走行時間は多少不正確になる。一方(3)を優先すれば,タスクの連続走行時間は正確になるが,タスクの起動時間は多少不正確になる。これらは,何らかの手段によって閾値を決めておいてもよい。例えば,タスクの起動時間の遅れが,ある時間までは連続走行を優先するが,それ以上は,タスク起動を優先するなどの方法を取ればよい。
以上述べたように,実施例5に係るNC装置の制御ソフトウェア実行システムA5は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSに,タスク起動周期とタスクの連続走行の保証を与える制御を行なえる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例5によれば,NC装置の制御ソフトウェア実行システムA5は,NC装置機能を実現するタスクの正確な起動時間と連続走行時間による制御を実行することができる。そのため,タスクに割り当てた時間の無駄を少なくでき,さらに,タスクをその走行時間内において制御できるので,システムの構築が容易に行なえる。
〔実施例6〕
次に,実施例6について説明する。図21は,実施例6に係るNC装置の制御ソフトウェア実行システムA6の全体構成を示し,その内容は,実施例1とほぼ同様である。ただし,実施例1にあっては,リアルタイムクロック201の割り込みポートを1チャンネルしか使用しないのに対し,本実施例にあっては,2チャンネル使用している。
図において,202,204は,リアルタイムクロック201の内部にあるカウンタレジスタである。カウンタレジスタ202,204は,それぞれ独立に設定,解除ができる。本実施例にあっては,カウンタレジスタ202,204をそれぞれタスク走行時間計測用に用いる。
次に,NC装置の制御ソフトウェア実行システムA6の動作について説明する。本実施例に係る制御ソフトウェア実行システムA6のRTOSは,予め,例えば,システムを稼働したとき等に,リアルタイムクロック201の内部カウンタレジスタ202,204は,0になると再び初期値が設定され,また,0になっても,割り込みが発生しないように設定しておく。
また,タスクにはいる直前に,そのカウンタ値を読み取って記憶しておく。また,そのタスクを抜けた直後に,再びカウンタ値を読み取って記憶しておいた値との差を求める。その値が,タスクが走ったクロック数である。その後タスク毎に,この値の和を記憶しておく場所を設けておいて,そこに加えていくことにより,各タスクの走行時間の合計を記録する。
以下,本実施例に係るNC装置の制御ソフトウェア実行システムA6の動作について,さらに詳しく説明する。図22は,各タスクの走行時間を記録するのに必要なデータ構造であり,230はカウンタ値メモ,231はタスク走行時間テーブルであり,図に示す通り,タスク毎の合計チック数の欄がある。図23は,一般の割り込み処理の処理手順を示すフローチャートであり,図24は,スケジューラの処理手順を示す図である。
図23は,一般の割り込みの処理手順について示したフローチャートであり,K1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。通常この処理はメインCPU1によって自動的に実行される。K2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。K3は,ICBに,この割り込み処理(自分自身)の,実行環境を格納する。この中には次に実行する命令のアドレスとしてK8の処理の先頭アドレスをICBに格納することも含まれる。K4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。K5は,K1の割り込みの禁止を解除する。これ以降は,再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためである。
K6は,割り込まれた処理が,割り込み処理またはRTOSか,それともタスクの処理中かを判定する。K7は,割り込まれた処理が割り込み処理またはRTOSを実行中であると判定した場合の処理であって,割り込まれた処理に直接戻る。K8は,割り込まれた処理がタスクの処理を実行中の場合であって,割り込まれたタスクのTCBを探し出す。K9は,K8において,見つけたTCBへ割り込まれたタスクの実行環境を格納する。
K10は,リアルタイムクロック201(図21参照)の内部カウンタレジスタ204の値を読み込んで,カウンタ値メモ230(図22参照)から減算する。この結果が当該タスクがこの回に連続して走ったチック数である。K11は,K10において求めた値をタスク走行時間テーブル231(図22参照)の当該タスクの合計チック数の欄に加える。K12は,作成したTCBを,スケジューラが実行するTCB待ち行列に優先順位の順番に追加する。K13は,スケジューラへ飛ぶ。
K14は,スケジューラから戻ってきた後に実行する処理である。スケジューラへ飛んだ後すぐにこの処理が実行されるとは限らず,他のICBが処理された後の場合もあるが,いずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理は異なってくる。K15は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が一般的であり,このリターン命令によって,スケジューラのICB処理部へ戻る。
図24は,本実施例に係るRTOSのスケジューラの動作を説明したものである。以下,説明の都合上,本実施例においては,優先順位が最低で,外部に対して何ら処理を実行しないアイドルタスクが常に走っているものとする。
L1は,割り込み処理(ICB)の待ち行列があるか否かを判定する処理である。L2は,割り込み処理の待ち行列があったときの処理であり,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加しようとするとリストの整合性が保たれなくなるためである。
L3は,割り込み処理の待ち行列のリストから先頭のICBを取り除く。L4は,割り込み禁止を解除する。L5は,L3において取り除いたICBからK3(図23参照)において格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して実行する。これがK14(図23参照)の処理である。L6は,K15(図23参照)から戻ってくるところであり,再び割り込みを禁止する。L7は,L3において取り除いたICBをICBプールへ返す。L8は,割り込み禁止を解除してからL1へ戻る。後は割り込み処理待ち行列がある間はL1からL7の処理を繰り返す。
L9は,TCB待ち行列があるか否かを判断するものであり,L10は,タスク処理の待ち行列があったと判定した場合の処理であり,その待ち行列を実行するために最初に割り込みを禁止する。L11は,割り込み処理の待ち行列のリストから先頭のTCBを取り除く。L12は,カウンタ値メモ230(図22参照)にリアルタイムクロック201(図21参照)の走行時間計測用の内部カウンタレジスタ204(図22)の値を保存しておく。
L13は,割り込み禁止を解除する。L14は,L11においてタスク処理の待ち行列(リスト)から取り除いたTCBからK9(図23参照)において格納したタスクの実行環境を取り出して実行する。このときにあっては,その処理へ飛び,ここへは再び戻ってこない。L15は,L9においてTCB待ち行列がないと判断した場合における処理であり,割り込み待ちを行う。
以上のようにして,任意の時間,本システムを実行させた後,タスク走行時間テーブル231(図22参照)を調べれば,各タスクが実際に走った(処理を行なった)時間を確認することができる。
なお,タスクの走行時間のみではなく,タスク走行時間テーブル231(図22参照)に走行回数の欄も設けて,タスクの走行回数をも記録するようにしておけば,以下で説明するタスクの走行周期,走行割合,走行時間を決めるときにも役立つ。
さらに,カウンタ値メモ230(図22参照)だけでなく,タスク終了カウンタ値メモも設けて割り込み処理の先頭で,リアルタイムクロック201(図21参照)の内部カウンタレジスタ204(図21参照)の値を保存しておき,割り込み処理(図23参照)のK10の部分において,カウンタ値メモ230からタスク終了カウンタ値メモを減算した値をタスクが連続して走行したチック数とすれば割り込み処理の時間も除いたタスクが純粋に走行した時間が求められる。
以上で述べたように,実施例6に係るNC装置の制御ソフトウェア実行システムA6は,タスクの実際の走行時間を知ることができる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例6によれば,NC装置の制御ソフトウェア実行システムA6は,NC装置機能を実現するタスクの正確な実行時間を知ることにより,各タスクの走行時間の割り当てなどが,容易に行なえるようになり,システムの構築が容易となる。
〔実施例7〕
次に,実施例7について説明する。実施例7に係るNC装置の制御ソフトウェア実行システムA7の全体構成は,実施例6と同様であるので,その説明を省略する。
次に,本実施例に係るNC装置の制御ソフトウェア実行システムA7の動作について説明する。本実施例における制御ソフトウェア実行システムA7(図21参照)のRTOSは,予め,例えば,システムを稼働したとき等に,リアルタイムクロック201の内部カウンタレジスタが0になると再び初期値が設定され,また,0になっても,割り込みが発生しないように設定しておく。
また,タスクにはいる直前に,そのカウンタ値を読み取って記憶しておく。そのタスクを抜けた直後に,再びカウンタ値を読み取って記憶しておいた値との差を求める。その値が,今回このタスクが走ったクロック数である。その後,タスク毎に,この値の和をを記憶しておく場所を設け,そこに加えていくことにより,各タスクの走行時間の合計を記録する。さらに,従来例におけるスケジューラのICBの処理を,スケジューラでなく,優先順位がもっとも高いタスクで実行するものである。
以下,本実施例に係るNC装置の制御ソフトウェアを実行する動作について,さらに詳しく説明する。図25は,スケジューラの処理手順を示すフローチャートであり,図26は,ICBを処理する最高優先順位を持った,割り込み処理実行タスクの処理手順を示すフローチャートである。データ構造としては,従来例と同じICB(インタラプトコントロールブロック)を用いる。なお,割り込み処理に関しては,従来例と同じであるので,その説明を省略する。
図25は,本実施例に係るRTOSのスケジューラの動作を説明したものであり,アイドルタスクを設けることにより,常に少なくともアイドルタスクは,実行を待っているものとする。M1は,タスク処理の待ち行列(TCB)があったときの処理であり,その待ち行列を実行するために最初に割り込みを禁止する。M2は,割り込み処理の待ち行列のリストから先頭のTCBを取り除く。M3は,カウンタ値メモ230(図22参照)にリアルタイムクロック201(図21参照)の走行時間計測用の内部カウンタレジスタ204(図21参照)の値を保存しておく。
M4は,割り込み禁止を解除する。M5は,M3においてタスク処理の待ち行列(リスト)から取り除いたTCBから割り込み処理で格納したタスクの実行環境を取り出して実行する。このときにあっては,その処理へ飛び,ここへは再び戻ってこない。
図26は,本実施例に係る割り込み処理実行タスクの動作を説明したものであり,N1は,割り込み処理(ICB)の待ち行列があるか否かを判定する処理である。N2は,割り込み処理の待ち行列があったと判断した場合の処理であって,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行なおうとするとリストの整合性が保たれなくなるためである。
また,N3は,割り込み処理の待ち行列のリストから,先頭のICBを獲得する。N4は,割り込み禁止を解除する。N5は,N3で取り除いたICBから,割り込み処理で格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して実行する。N6は,N3で取り除いたICBをICBプールへ返却する。その後は,N1へ戻り,割り込み処理待ち行列がある間はN1からN6の処理を繰り返す。N7は,割り込み処理(ICB)の待ち行列が無くなったときの処理でタスク終了のSVCを発行して他のタスクにメインCPU1の使用権を譲り渡す。
以上のように,任意の時間,本実施例を走らせた後,タスク走行時間テーブル231(図22参照)を調べれば,各タスクが実際に走った(処理を行なった)時間を知ることができる。
さらに,割り込み処理もタスクレベルで実行することにより,割り込み処理実行タスクの走行時間が,割り込み処理の時間と考えることができるため,割り込み処理の処理時間も測定できる。また,割り込み処理実行タスク内で,割り込み要因により別の走行時間を記録できるようにしておけば,割り込み要因毎の処理時間を測定できる。
以上で説明したとおり,実施例7に係るNC装置の制御ソフトウェア実行システムA7は,タスクと割り込み処理の実際の走行時間を知ることができる機能を追加した方式であり,その方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例7によれば,NC装置の制御ソフトウェア実行システムA7は,NC装置機能を実現するタスクと割り込み処理の正確な実行時間を知ることにより,各タスクの走行時間の割り当てなどが容易に実行できるようになり,システムの構築が容易となる。
〔実施例8〕
次に,実施例8について説明する。タスクや割り込み処理の走行時間を計測する手段を備え,さらにタスクの走行時間を変える手段を備えるNC装置において,それを実現するためのNC装置の制御ソフトウェア実行システムA8の全体構成は,タスクの走行時間や割合の指定の仕方によって複数例あるが,この実施例では説明の都合上,タスクの走行割合を指定できる場合について説明する。
さらに,タスクの走行時間を測定するために,実施例6と同様に,タスク走行時間テーブル231(図22参照)を備える。また,タスク走行時間テーブル231(図22参照)にはタスク毎の合計チック数の欄がある。なお,カウンタ値メモ230(図22参照)はタスク走行状態メモ212(図10参照)と同じ役割を果たすものなので使用しない。また,基準時間割り込み処理の手順,走行時間警告割り込み処理の手順は,実施例2(図11,図12参照)と同様なので,その説明を省略する。
図27は,一般の割り込みの処理手順について説明したフローチャートであり,O1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する,通常この処理はメインCPU1によって自動的に実行される。O2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。
O3は,ICBに,この割り込み処理(自分自身)の,実行環境を格納する。この中には,次に実行する命令のアドレスとしてO8の処理の先頭アドレスをICBに格納することも含まれる。O4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。O5は,O1の割り込みの禁止を解除する。これ以降は再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためのものである。
O6は,割り込まれた処理が割り込み処理またはRTOSか,タスクの処理中かを判定する。O7は,割り込まれた処理が割り込み処理またはRTOSを実行中であると判断した場合で,このときは割り込まれた処理に直接戻る。O8は,割り込まれた処理がタスクの処理を実行中のときで,このときは,まず,割り込まれたタスクのTCBを探し出す。O9は,O8において探し出したTCBへ割り込まれたタスクの実行環境を格納する。
O10は,内部カウンタレジスタ202(図9参照)の値を,基準周期211(図9参照)に保存してある値から減算する。この結果が当該タスクが今回連続して走ったチック数である。これをタスク走行時間テーブル231(図22参照)の当該タスクの合計チック数の欄に加える。O11は,現在処理を実行しているタスクが,走行する割合を保証する対象のタスクであるか否かを判定する処理である。具体的には,タスク走行状態メモ212(図9参照)の走行残りチック数の欄が1以上のタスクか否かを判定する。
O12は,O11において対象のタスクであると判定した場合の処理で,O10において求めた値をタスク走行状態メモ211の当該タスクの走行残りチック数の欄から減算する。O13は,O10において求めた値を,リアルタイムクロック201(図9参照)の走行時間警告用の内部カウンタレジスタ205の値に加える。走行周期を保証したタスクが,走行し終った分だけ,走行周期を保証したタスク以外のタスクを走らせるための時間が増えるわけである。
O14は,作成したTCBを,スケジューラが実行するTCB待ち行列に,優先順位の順番に追加する。ただし,このとき,タスク走行状態メモ212(図10参照)の走行禁止フラグの欄が1つのタスクでもオンになっていれば,TCB待ち行列において,走行禁止フラグがオフのタスクのTCBは,走行禁止フラグがオンのタスクのTCBよりも前につなぐ。O15は,スケジューラへ飛ぶ。
O16は,スケジューラから戻ってくるとここへ来る処理である。スケジューラへ飛んだ後,すぐにこの処理が実行されるとは限らず,他のICBが処理される場合もあるが,いずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理は異なる。O17は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が一般的であり,このリターン命令によって,スケジューラのICB処理部に戻る。
図28は,スケジューラの動作を示すフローチャートであり,本実施例においては,優先順位が最低で,外部に対して何も処理を行なわないアイドルタスクが常に走っているものとする。P1は,割り込み処理(ICB)の待ち行列があるか否かを判定する処理である。P2は,割り込み処理の待ち行列があったと判断した場合の処理であり,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を実行しようとするとリストの整合性が保たれなくなるためである。
P3は,割り込み処理の待ち行列のリストから先頭のICBを取り除く。P4は,割り込み禁止を解除する。P5は,P3において取り除いたICBからO3(図27参照)において格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して実行する。これが,O16(図27参照)の処理である。P6は,O17(図27参照)から戻ってくるところであり,再び割り込みを禁止する。P7は,P3において取り除いたICBをICBプールへ返す。P8は,割り込み禁止を解除してからP1へ戻る。後は割り込み処理待ち行列がある間はP1からP7の処理を繰り返す。
P9は,ICB待ち行列はないと判断した場合の処理であり,タスク処理の待ち行列を実行するために,割り込みを禁止する。P10は,割り込み処理の待ち行列のリストから先頭のTCBを獲得する。P11は,タスク開始チックメモ210(図10参照)にリアルタイムクロック201(図9参照)の走行時間計測用の内部カウンタレジスタ202(図9参照)の値を保存しておく。P12は,割り込み禁止を解除する。P13は,P10においてタスク処理の待ち行列(リスト)の先頭から,獲得したTCBからO9(図27参照)において格納したタスクの実行環境を取り出して実行する。このときはその処理へ飛んでいって,ここへは再び戻ってこない。
以上において説明したように,実施例8に係るNC装置の制御ソフトウェア実行システムA8は,タスクの走行割合を設定でき,また,タスクと割り込み処理の実際の走行時間を知ることができる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例8によれば,NC装置の制御ソフトウェア実行システムA8は,NC装置機能を実現するタスクと,割り込み処理の正確な実行時間を知ることにより,各タスクの走行時間の割り当てなどが容易に行なえるようになり,システムの構築が容易となる。
〔実施例9〕
次に,実施例9について説明する。実施例9に係るNC装置の制御ソフトウェア実行システムA9の全体構成は,実施例2(図9参照)とほぼ同様であるので,その説明を省略する。
次に,NC装置の制御ソフトウェア実行システムA9の動作について説明する。図29は,NC装置の運転モード選択部分の処理手順を示すフローチャートであり,Q1は,NC装置のモードがグラフィックチェックか否かを判定する部分である。Q2は,グラフィックチェックモードであると判断した場合であり,その場合はグラフィック表示タスクの割り当てを増やし,他の,例えば,自動モード処理タスクの割り当てをその分減らす。
Q3は,グラフィックチェックモードではないと判断した場合で,自動モードか否かを判定する処理である。Q4は,自動モードであると判断した場合であって,自動モード処理タスクの割り当てを増やし,他の処理タスクの割り当てを減らす。Q5は,手動モードか否かのチェックである。Q6は,手動モードであると判断した場合であって,手動処理タスクの割り当てを増やし,他の処理タスクの割り当てを減らす。それ以降は,その他のモードの場合であるが,その説明は省略する。
以上において説明したとおり,実施例9に係るNC装置の制御ソフトウェア実行システムA9にあっては,NC装置の運転モードによってタスクの走行割合を変化させて,NC装置の制御ソフトウェアを実行するものである。
実施例9によれば,NC装置の制御ソフトウェア実行システムA9は,NC装置の運転モードによってタスクの走行割合を変化させることにより,モード毎にタスクに適した時間だけタスクを走らせることができ,NC装置の実行速度が向上する。
〔実施例10〕
実施例10に係るNC装置の制御ソフトウェア実行システムA10の全体構成は,実施例2(図9参照)とほぼ同様であるので,その説明を省略するが,以下,説明の都合上,本実施例においては,例えば,実施例8と同様に,タスク毎の走行割合を指定する手段と,実際のタスクの走行状況を記録できる手段とを備えているものとする。
使用するデータ構造としては,実施例8と同様,タスク開始チックメモ210(図10参照),基準周期を格納しておく領域211(図10参照),タスク走行状態メモ212(図10参照),タスク走行時間テーブル231(図22参照)などを備える。タスク走行状態メモ212(図10参照)は,走行残りチック数,繰り返し回数,走行禁止フラグなどの欄があり,タスク走行時間テーブル231(図22参照)にはタスク毎の合計チック数の欄がある。
基準時間割り込みの処理手順,走行時間警告割り込みの処理手順は,実施例2(図11,図12参照)と同様であり,一般の割り込みの処理手順は,実施例8(図27参照)と同様なので,その説明を省略する。
図30は,複数回加工時における処理の時間を短縮するための,各タスクの走行割り当て時間を最適化するための手順を示すフローチャートであり,R1は,同一加工の1回目か,2回目以降かを判定する処理である。R2は,1回目の加工時の処理であると判断した場合で,各タスクの総走行時間(チック数)を計測,記録する。R3は,走行したタスクの内,アイドルタスクなどの必要のないタスクを除いた,他の必要なタスクの走行時間の合計を計算する。
R4は,R3において求めた合計に基づいて,必要なタスクの走行割合を計算する。走る必要がないタスクの走行割合は0とする。R5は,R4において計算した割合をタスク走行状態メモ212(図10参照)の走行割合の欄に登録する。R6は,2回目以降の加工時における処理であり,R5で登録したタスク走行状態メモ212(図10参照)の各タスクの走行割合により,各タスクを走行させる。
以上,説明したとおり,実施例10に係るNC装置の制御ソフトウェア実行システムA10は,1回目の加工によって,最適なタスクの走行割合を自動的に設定する機能を備え,NC装置の制御ソフトウェアを実行するものである。
実施例10によれば,NC装置の制御ソフトウェア実行システムA10は,機能を実現する各タスクへの走行時間の割り当てを,自動的に最適なものにすることにより,繰り返し加工における加工時間の短縮を実行できる。
〔実施例11〕
次に,実施例11について説明する。実施例11に係るNC装置の制御ソフトウェア実行システムA11は,予め登録された,各タスクの標準の走行割合や,全走行時間と,実際に走っているNC装置の制御ソフトウェア実行システムの各タスクのデータが,予め指定した割合以上にずれている場合には,タスクの異常と判定する。
実施例11に係るNC装置の制御ソフトウェア実行システムA11の全体構成は,実施例8(図9参照)と同様であるので,その説明を省略する。また,実際に走っているNC装置の制御ソフトウェア実行システムの各タスクのデータを測定するのは,実施例8の場合と同じであるので,その説明を省略する。
各タスクが正常に走っているか否かを判定するのに必要なデータ構造を,図31に示す。250は,"タスク走行標準データ"で,タスク毎に"走行割合"や"全走行チック数"などの欄がある。これらのデータは,システム生成時に予め作成しておくか,あるいは何らかのSVCによって,そのデータを使うよりも前の,任意の時期に設定しておいてもよい。
図において,251は,この割合までは,タスク走行時間のずれがあっても,タスク異常と見なさない許容度を格納する"走行時間判定許容度"であり,また,252は,この範囲内であれば,タスク走行割合に,ずれがあってもタスク異常と見なさない許容度を格納する"走行割合判定許容度"である。この走行割合判定許容度には下限欄と上限欄があり,ずれがこの範囲内ならばタスク異常と見なさない。
各タスクが正常に走っているか否かを判定するための,タスク走行時間テーブル231(図22参照)とタスク標準データ250(図31参照)との比較は,例えば,タスクが切り替わるときに,スケジューラにより行ってもよいし,あるいは定期的に走るタスク異常判定タスクを設けて,そのタスクにより判定を行なってもよい。
以下の説明では,タスクが正常に走っているか否かの判定を,異常判定タスクに基づいて行うものとする。また,判定許容度251は全走行時間と,走行割合について別々に設けてもよいが,ここでは説明の都合上,同じ値を用いるものとする。
図32は,異常判定タスクの動作を示すフローチャートである。S1は,異常判定タスクの先頭で,タスク走行時間テーブル231(図22参照)の,タスク毎の合計チック数の欄の値,全ての和を求める処理である。S2は,全てのタスクに対して,以下のS3からS5までの処理を行なったか否かを判定し,全タスクに対して処理を終了したと判定した場合には,S6へ飛ぶ。
S3は,タスク走行時間テーブル231(図22参照)の,当該タスクの合計チック数の値と,標準データ250(図31参照)の全走行チック数を比較する。当該タスクのタスク走行時間テーブル231(図22参照)の合計チック数の値が,標準データ250(図31参照)の全走行チック数の値に走行時間判定許容度251(図31参照)の値を乗じたものよりも小さいか,等しければ,このタスクは正常であると見なす。
S4は,S3において,タスクに異常が発生したと判定した場合における処理であり,例えば,オペレータにタスク異常が発生したことを知らせるメッセージを送るなどの,何らかのエラー処理を実行する。S5は,タスクの走行割合のチェックである。タスク走行時間テーブル231(図22参照)の合計チック数の値を,全タスク分加えて,それで当該タスクの合計チックを割って,当該タスクの走行割合を求める。その値が標準データ250(図31参照)の走行割合判定許容度の下限と上限との間にあれば,このタスクは正常であると見なす。もし,異常があると判定した場合には,S4に飛ぶ。S6は,全タスクを判定した結果,異常状態のタスクは見つからなかったので,タスク終了のSVCを発行して,次に呼ばれるまで何もしない。
以上,説明した通り,実施例11に係るNC装置の制御ソフトウェア実行システムA11にあっては,NC装置の機能を実現しているタスクに異常が発生したときにそれを検知する機能を備えたものである。
実施例11によれば,NC装置の制御ソフトウェア実行システムA11は,NC装置の機能を実現しているタスクに異常が発生したときに,それを検知する機能を備えているため,NC装置に異常が発生したことを直ちに判定することができる。
〔実施例12〕
次に,実施例12について説明する。実施例12に係るNC装置の制御ソフトウェア実行システムA12の全体構成は,実施例11(図9参照)とほぼ同様であるので,その説明を省略する。データ構造についても,実施例11と同じもの(図22,図31参照)を使用するものとする。次に,新たに必要なデータを図33に示す。図33において,360は,"工具選択使用フラグ"である。このフラグは,NC装置の制御ソフトウェアのうち,新たな加工を行なう処理部でオフして,工具を選択する処理部でオンする。すなわち,このフラグがオンになっていれば,工具選択処理が呼ばれたことを示す。
また,361は,"工具選択処理スキップフラグ"である。このフラグは,NC装置の制御ソフトウェアのうち,新たな加工を行なう処理部でオフして,以下に述べる,異常判定タスクで工具を選択したときは,異常判定タスクがオンする。本来の工具選択処理は,工具選択処理スキップフラグがオンになっているときは自分では工具の選択を行なわず,異常判定タスクが選択した工具を用いる。362は,本来の工具選択処理と異常判定タスクが選択した工具を伝え合うための"選択工具メモ"である。
次に,NC装置の制御ソフトウェア実行システムA12の動作について説明する。図34は,NC装置の別工具選択部分の処理手順を示すフローチャートであり,この処理は,実施例11と同様に異常判定タスクにより実行するものとする。T1は,異常判定タスクの先頭で,タスク走行時間テーブル231(図22参照)の,タスク毎の合計チック数の欄の値全ての和を求める処理である。T2は,全てのタスクに対して以下の処理を行なったか否かの判定であり,全てのタスクに対して処理を終了すればT6へ飛ぶ。
T3は,タスク走行時間テーブル231(図22参照)の,当該タスクの合計チック数の値と,標準データ250(図31参照)の全走行チック数を比較する。当該タスクのタスク走行時間テーブル231(図22参照)の合計チック数の値が,標準データ250(図31参照)の全走行チック数の値に走行時間判定許容度251(図31参照)の値を乗じたものよりも小さいか,等しければ,このタスクは正常であると見なす。
T4は,T3で,タスクに異常が発生したと判定した場合の処理で,工具選択使用フラグ360(図33参照)がオンになっていなければ,T5に移行する。T5は,T4において,タスクに異常が発生したと判定したときの,通常の処理であり,例えば,オペレータにタスク異常が発生したことを知らせるメッセージを送るなど,何らかのエラー処理を実行する。T6は,工具選択使用フラグ360(図33参照)がオンになっている場合の処理であり,次工具を選択する。
次工具の選択とは,例えば,エンドミルならエンドミル,ボールエンドミルならボールエンドミルというように,同じ種類の工具で工具径が異なる工具を選択することをいう。このとき,例えば,加工モードを設けて,加工速度優先なら工具径のより大きな工具を選択し,精度優先なら工具径のより小さな工具を選択する,などしてもよい。
このとき,エラーを起こした工具は,選択工具メモ362(図33参照)から知ることができる。T7は,工具が正常に選択できたか否かの判定を行う。T7において,選択する工具がないと判定した場合には,通常のエラー処理部T5へと移行する。T8は,工具が正常に選択できたと判定した場合であって,工具選択使用フラグ360(図33参照)をオフに,工具選択処理スキップフラグ361(図33参照)をオンにして,本来の工具選択処理部に,ここで選択した工具を,選択工具メモ362(図33参照)に設定することによって伝達する。その後,加工プログラム解析タスクを起動するなどにより,再び加工を開始する。
T9は,タスクの走行割合のチェックである。タスク走行時間テーブル231(図22参照)の合計チック数の値を,全タスク分加えて,それで当該タスクの合計チックを割って,当該タスクの走行割合を求める。その値が標準データ250(図31参照)の走行割合判定許容度の下限と上限の間にあれば,このタスクは正常であると見なす。もし,異常があると判定した場合には,T4に移行する。T10は,全タスクを判定した結果,異常状態のタスクは見つからなかったので,タスク終了のSVCを発行して,次に呼ばれるまで何もしない。
以上,説明したとおり,実施例12に係るNC装置の制御ソフトウェア実行システムA12は,NC装置の自動加工によって,エラーが発生したと判定したとき,工具を変えて再度自動加工を行なうNC装置の制御ソフトウェアを実行するものである。
実施例12によれば,NC装置の制御ソフトウェア実行システムA12は,NC装置の自動加工によって,エラーが発生したと判定したとき,工具を変えて再度自動加工を実行することにより,エラーの発生によって加工処理が止まる可能性が低くなり,自動的に連続加工ができ,NC装置の連続運転の信頼性が高くなる。
〔実施例13〕
次に,実施例13について説明する。実施例13に係るNC装置の制御ソフトウェア実行システムA13の全体構成は,実施例11(図9参照)の内容とほぼ同様であるので,その説明を省略する。データ構造についても,実施例11と同じもの(図22,図31参照)を使用するものとする。
新たに必要なデータを図35に示す。図35において,370は,"工具速度決定フラグ"である。このフラグは,NC装置の制御ソフトウェアのうち,新たな加工を行なう処理部でオフして,工具の速度を計算する処理部でオンする。すなわち,このフラグがオンになっていれば,工具速度計算処理が呼ばれたことを示す。371は,"工具速度計算処理スキップフラグ"である。このフラグは,NC装置の制御ソフトウェアのうち,新たな加工を行なう処理部でオフして,以下に述べる,異常判定タスクにより工具の速度を変更したときは,異常判定タスクがオンする。
本来の工具速度計算処理は,工具速度計算処理スキップフラグがオンになっているとき,自分自身では速度の計算は実行せず,異常判定タスクが変更した速度を用いる。また,372は,本来の工具速度計算処理と異常判定タスクが工具速度を伝え合うための"工具速度メモ"である。373は,工具速度変更割合下限値である。この割合を下回っては工具速度は変更できない。374は,工具速度変更割合上限値である。この割合を上回っては工具速度は変更できない。工具速度変更割合下限値373や工具速度変更割合上限値374は予め指定されている。
次に,NC装置の制御ソフトウェアの実行動作について説明する。図36は,NC装置の別速度計算部分の処理手順を示すフローチャートである。この処理は,実施例11と同様に異常判定タスクで行なうものとする。図において,U1は,異常判定タスクの先頭で,タスク走行時間テーブル231(図22参照)の,タスク毎の合計チック数の欄の値,全ての和を求める処理である。U2は,全てのタスクに対して以下の処理を行なったか否かの判定であり,全てのタスクに対して処理を終了すれば,処理はU6へ移行する。
U3は,タスク走行時間テーブル231(図22参照)の,当該タスクの合計チック数の値と,標準データ250(図31参照)の全走行チック数を比較する。当該タスクのタスク走行時間テーブル231(図22参照)の合計チック数の値が,標準データ250(図31参照)の全走行チック数の値に走行時間判定許容度251(図31参照)の値を乗じたものよりも小さいか,等しければ,このタスクは正常であると見なす。
U4は,U3において,タスクに異常が発生したと判定した場合における処理であり,工具速度決定フラグ370(図35参照)がオンになっていなければ,U5に移行する。U5は,U4において,タスクに異常が発生したと判定した場合の通常の処理であり,例えば,オペレータにタスク異常が発生したことを知らせるメッセージを送るなどの,何らかのエラー処理を実行する。
U6は,工具速度決定フラグ370(図35参照)がオンになっていると判定した場合における処理であり,工具速度を変更する。ここで,速度の変更とは,速度を変えることであるが,このとき,例えば,加工モードを設けて,加工速度優先なら工具速度をある割合ずつ増していき,精度優先なら工具速度をある割合ずつ減らしていくなどしてもよい。このとき,エラーを起こした工具速度は,工具速度メモ372(図35参照)により確認する。
U7は,工具速度が決定できたか否かの判定である。U6において,工具速度が,工具速度変更割合下限値373(図35参照)と工具速度変更割合上限値374(図35参照)との間に入らないときは,通常のエラー処理部U5へと移行する。U8は,工具速度を変更できた場合で,工具速度決定フラグ370(図35参照)をオフに,工具速度計算処理スキップフラグ371(図35参照)をオンにして,本来の工具速度計算処理部に,ここで変更した工具速度を,工具速度メモ372(図35参照)に設定することによって伝える。その後,加工プログラム解析タスクを起動するなどにより,再び加工を開始する。
U9は,タスクの走行割合のチェックである。タスク走行時間テーブル231(図22参照)の合計チック数の値を,全タスク分加えて,それで当該タスクの合計チックを割って,当該タスクの走行割合を求める。その値が標準データ250(図31参照)の走行割合判定許容度の下限と上限との間にあれば,このタスクは正常であると見なす。もし,異常があると判定したときにはU4へ移行する。U10では,全タスクを判定した結果,異常状態のタスクは見つからなかったので,タスク終了のSVCを発行して,次に呼ばれるまで何もしない。
以上,説明したとおり,実施例13に係るNC装置の制御ソフトウェア実行システムA13は,NC装置の自動加工によって,エラーが発生したと判定したとき,工具速度を変えて再度自動加工を行なうNC装置の制御ソフトウェアを実行するものである。
実施例13によれば,NC装置の制御ソフトウェア実行システムA13は,NC装置の自動加工によって,エラーが発生したと判定したとき,工具速度を変えて再度自動加工を行なうことにより,エラーの発生により加工が止まる可能性が低くなり,自動的に連続加工ができNC装置の連続運転の信頼性が高くなる。
〔実施例14〕
次に,実施例14について説明する。実施例14に係るNC装置の制御ソフトウェア実行システムA14の全体構成は,実施例11(図9参照)とほぼ同様であるので,その説明を省略する。
データ構造についても,実施例11と同じもの(図22,図31参照)を使うものとする。新たに必要なデータを図37に示す。図37において,380は,"加工プログラム番号メモ"である。この加工プログラム番号メモを見て,加工プログラム解析タスクは,この番号の加工プログラムの解析を実行する。
また,381は,"加工プログラムスケジューリングテーブル"である。ここへ加工を行なう加工プログラムの"番号"と"回数"などを,予め登録しておく。382は,"加工不能プログラムメモ"である。加工が失敗した加工プログラムの番号を,異常判定タスクが記録しておく。
次に,NC装置の制御ソフトウェア実行システムA14の動作について説明する。図38は,NC装置の別加工プログラム選択の処理手順を示すフローチャートである。この処理は,実施例11と同様に異常判定タスクにより実行する。V1は,異常判定タスクの先頭で,タスク走行時間テーブル231(図22参照)の,タスク毎の合計チック数の欄の値,全ての和を求める処理である。V2は,全てのタスクに対して以下の処理を行なったか否かの判定であり,全てのタスクに対して処理を終了すれば,処理はV10へ移行する。
V3は,タスク走行時間テーブル231(図22参照)の,当該タスクの合計チック数の値と,標準データ250(図31参照)の全走行チック数を比較する。当該タスクのタスク走行時間テーブル231(図22参照)の合計チック数の値が,標準データ250(図31参照)の全走行チック数の値に走行時間判定許容度251(図31参照)の値を乗じたものよりも小さいか,等しければ,V9において,このタスクは正常であると見なす。
V4は,V3において,タスクに異常が発生したと判定した場合における処理であり,異常が発生した加工プログラム番号を,加工不能プログラムメモ382(図37参照)に記録して,加工プログラムスケジューリングテーブル381(図37参照)から次に加工する加工プログラム番号を選択して,加工プログラム番号メモ380(図37参照)に格納する。
V5は,次に加工する加工プログラムが決定できたか否かの判定である。V4において,加工プログラムスケジューリングテーブル381(図37参照)に登録されている加工プログラムを全て実行し終るとV7の処理に移行する。V6は,次に加工する加工プログラムが決定できた場合であって,加工プログラム解析タスクを起動するなどにより,再び加工を開始する。
V7は,次に加工する加工プログラムが決定できなかった場合における処理であり,加工不能プログラムメモ382(図37参照)に,データが設定されているか否かにより,加工できなかったプログラムがあるか否かを判定する。V8は,加工できなかったプログラムがあったと判定した場合における処理であり,加工不能プログラムメモ382(図37参照)に基づいて,何らかの手段でオペレータに異常が発生したことを通知する。また,V10では,全タスクを判定した結果,異常状態のタスクは見つからなかったので,タスク終了のSVCを発行して,次に呼ばれるまで何もしない。
以上,説明したとおり,実施例14に係るNC装置の制御ソフトウェア実行システムA14は,NC装置の自動加工によって,エラーが発生したと判定したとき,別の加工プログラムにより,再度自動加工を行なうNC装置の制御ソフトウェアを実行するものである。
実施例14によれば,NC装置の制御ソフトウェア実行システムA14は,NC装置の自動加工によって,エラーが発生したと判定したときは,別の加工プログラムで,再度自動加工を行なうことにより,エラーの発生により加工が止まる可能性が低くなり,自動的に連続加工ができNC装置の連続運転の信頼性が高くなる。
〔実施例15〕
次に,実施例15について説明する。実施例15に係るNC装置の制御ソフトウェア実行システムA15の全体構成は,実施例2(図9参照)と同じであるので,その説明を省略する。ただし,本実施例にあっては,リアルタイムクロック201(図9参照)の内部レジスタは,202と204の2チャンネルのみを使用する。内部カウンタレジスタ202(図9参照)は,タスクの走行チック数の計測用,内部カウンタレジスタ204(図9参照)は,タスク停止割り込み用として使用する。
図39は,本実施例において,必要なデータ構造を示したものであり,400は"タスク停止テーブル"である。各タスクは,予め,あるいは,そのタスクが開始させられるときにSVCによって,タスクが起動してから停止するまでの,チック数をこのタスク停止テーブル400の"停止チック数"の欄に登録しておく。また,指定しないタスクはこの値を0としておく。
210(図10参照)は"タスク開始チックメモ"である。RTOSが,タスクを起動する直前に,リアルタイムクロック201(図9参照)の内部カウンタレジスタ202(図9参照)の値を記録しておく,そして,そのタスクが終了してRTOSに戻って来たときの,内部カウンタレジスタ202(図9参照)との差を求めて,タスク走行時間を求める。411は,"タスク停止割り込みメモ"である。タスク停止割り込みをすぐに処理できないときは,このメモをオンしておいて後に処理する。
本実施例に係るNC装置の制御ソフトウェア実行システムA15は,タスクを起動するたびに,もし指定されていれば,タスク停止テーブル400(図39参照)の停止チック数を,リアルタイムクロック201(図9参照)の内部カウンタレジスタ204に設定する。そして,そのタスク停止割り込みが発生すれば,当該タスクを強制的に停止させる。
もし,タスク停止割り込みが発生する前に,他のタスクによってメインCPU1を占有された場合は,リアルタイムクロック201(図9参照)の内部カウンタレジスタは202(図9参照)と,タスク開始チックメモ210(図10参照)から,当該タスクの走行チック数を求め,その分をタスク停止テーブル400(図39参照)の停止チック数から減ずる。このようにして,指定タスクの最大走行チック数を制限することができる。
次に,NC装置の制御ソフトウェア実行システムA15の動作について,詳細に説明する。最初に割り込みの処理手順について説明する。図40は,タスク停止割り込みの処理手順を示すフローチャートである。W1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。通常この処理はCPUによって自動的に実行される。W2は,割り込まれた処理が,タスク処理中か,それ以外かを判定する処理部分である。W3は,タスク処理中ではないと判定した場合であり,この場合には,タスク停止割り込みメモ411(図39参照)をオンする。W4は,割り込み禁止を解除して,割り込まれた処理へ戻る。
また,W5は,タスク処理中に割り込みが発生したと判定した場合であって,まず,割り込まれたタスクのTCBを探し出す。W6は,W5において見つけたTCBへ割り込まれたタスクの実行環境を格納する。W7は,タスク停止SVCと同様の当該タスクの終了処理を実行する。例えば,当該TCBのステータスの欄を停止にして,TCB待ち行列から,停止中タスクの待ち行列へつなぎ変える,などの処理である。W8は,スケジューラへ飛ぶ。
図41は,タスク停止割り込み以外の,一般の割り込み処理の手順を示すフローチャートである。X1は,ある割り込みが発生したときにおける割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する,通常この処理はメインCPU1によって自動的に実行される。X2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。
X3は,ICBに,この割り込み処理(自分自身)の,実行環境を格納する。この中には次に実行する命令のアドレスとしてX8の処理の先頭アドレスをICBに格納することも含まれる。X4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。X5は,X1の割り込みの禁止を解除する。これ以降は再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためのものである。
また,X6は,割り込まれた処理が,割り込み処理またはRTOSか,それともタスクの処理中かを判定する。X7は,割り込まれた処理が,割り込み処理またはRTOSを実行中のときであって,このときは割り込まれた処理に直接戻る。X8は,割り込まれた処理がタスクの処理を実行中の場合であって,このときは,まず割り込まれたタスクのTCBを探し出す。X9は,X8において見つけたTCBへ,割り込まれたタスクの実行環境を格納する。X10は,タスク停止割り込みメモ411(図39参照)がオンか否かを判定する処理である。
X11は,タスク停止割り込みメモ411(図39参照)がオンのときの処理であり,タスク停止SVCと同様の,当該タスクの終了処理を実行する。例えば,当該TCBのステータスの欄を停止にして,TCB待ち行列から,停止中タスクの待ち行列へつなぎ変える等の処理である。
X12は,タスク停止割り込みメモ411(図39参照)がオフのときの処理であり,リアルタイムクロック201(図9参照)の内部カウンタレジスタは202(図9参照)と,タスク開始チックメモ210(図10参照)との差から,当該タスクの走行チック数を求め,タスク停止テーブル400(図39参照)の停止チック数から減ずる。X13は,X9において作成したTCBを,スケジューラが実行するTCB待ち行列にプライオリティの順に追加する。X14は,スケジューラへ飛ぶ。
また,X15は,スケジューラから戻ってくるとここへ来る処理である。スケジューラへ飛んだ後すぐにこの処理が行なわれるとは限らず,他のICBが処理された後かも知れないがいずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理は異なる。X16は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が一般的であり,このリターン命令によって,スケジューラのICB処理部に戻る。
図42を用いて,本実施例に係るNC装置の制御ソフトウェア実行システムA15のスケジューラの動作を説明する。以下,説明の都合上,本実施例においては,優先順位が最低で,外部に対して何も処理を行なわない,アイドルタスクが常に走っているものとする。
Y1では,割り込み処理(ICB)の待ち行列があるか否かを判定する。Y2は,割り込み処理の待ち行列があったときの処理であり,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行なおうとするとリストの整合性が保たれなくなるためである。
Y3は,割り込み処理の待ち行列のリストから先頭のICBを取り除く。Y4は,割り込み禁止を解除する。Y5は,Y3において取り除いたICBからX3(図41参照)において格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して実行する。これが,X15(図41参照)の処理である。Y6は,X16(図41参照)から戻ってくるところであり,再び割り込みを禁止する。Y7は,Y3において取り除いたICBをICBプールへ返す。Y8は,割り込み禁止を解除してからY1へ戻る。後は割り込み処理待ち行列がある間はY1からY7の処理を繰り返す。
Y9は,割り込みを禁止する。Y10は,割り込み処理の待ち行列のリストから,先頭のTCBを獲得する。Y11は,当該TCBのタスクが,タスク停止テーブル400(図39参照)の停止チック数が,0以上のタスクである場合は,当該タスクのタスク停止テーブル400(図39参照)の停止チック数の値を,リアルタイムクロック201(図9参照)の内部カウンタレジスタ204に設定する。この結果,設定した数だけのチック数が経過すると,タスク停止割り込みが発生する。Y12は,割り込み禁止を解除する。Y13は,Y10においてタスク処理の待ち行列(リスト)から獲得した,TCBからX9(図41参照)において格納したタスクの実行環境を取り出して実行する。その処理へ飛んでいって,ここへは戻ってこない。
以上,説明したように,実施例15に係るNC装置の制御ソフトウェア実行システムA15は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSに,タスク走行時間の制限を行なえる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例15によれば,NC装置の制御ソフトウェア実行システムA15は,NC装置機能を実現するタスクの,走行時間による制限を行なえるようになる。そのため,タスクに割り当てた時間を越えて,タスクが走ることがなくなり,システムの構築が容易となる。
〔実施例16〕
次に,実施例16について説明する。実施例16に係るNC装置の制御ソフトウェア実行システムA16は,加工プログラム解析処理タスクなどを,従来例のように,1ブロック処理する毎にタスクを抜けるのではなく,加工プログラムが存在する限り,解析を続けるように作成しておき,解析の中断は,時間によるものとする。
実施例16に係るNC装置の制御ソフトウェア実行システムA16の加工プログラム解析タスクの実行手順を図43に基づいて説明する。Z1は,加工プログラム解析タスクの先頭であり,指定された加工プログラムのブロックを全て解析し終えたか否かを判定する。Z2は,全ての加工プログラムのブロックの解析を終えたと判定した場合の処理であり,タスク終了SVCを発行して,再び起動されるまで何もしない。Z3は,未解析の加工プログラムのブロックが存在する場合の処理であり,ブロックの解析を実行する。以後,全ブロックの解析が終了するまで,Z1の処理を繰り返す。
以上で述べたように,実施例16に係るNC装置の制御ソフトウェア実行システムA16は,加工プログラム解析タスクを,プログラムがある限り,解析し続けるようにして,解析の中断を時間によって実行するNC装置の制御ソフトウェアを実行するものである。
実施例16によれば,NC装置の制御ソフトウェア実行システムA16は,加工プログラムの解析を行なうタスクの走行,中断を時間によって行なうようにしたので,加工プログラムのブロックの大きさによる,処理時間の余りが無くなり,特に,微小線分からなる,加工プログラムの解析において処理能力の向上が期待できる。さらにタスクの作成方法として,加工プログラムのブロック毎に,終了するなどの繁雑な処理が不必要になる。
以上のように,この発明の各実施例に係るNC装置の制御ソフトウェア実行システムによれば,NC装置の機能を,分担して実現しているタスクの制御をきめ細かく実行できるので,各タスクの処理時間を最適化することができるため,無駄時間を少なくして,全体の処理時間を早めることができる。また,NC装置の制御ソフトウェア実行システムの異常を,システム自体が判定できる手段を備えているため,異常状態が発生した時の回避処理も容易となる。
〔実施例17〕
次に,実施例17について説明する。図44は,実施例17に係る制御ソフトウェア実行システムA17の全体構成を示すブロック図であり,この制御ソフトウェア実行システムA17は,以下の要素より構成されている。1は各部の動作を制御したり,数値制御に必要な演算を実行するメインCPU,2はシステムの各部を結ぶシステムバス,3はNC装置の主要機能を実現する制御ソフトウェアなどを格納するROM(不揮発性記憶手段),4はデータの一時記憶やワークエリアなどに用いるRAM(揮発性記憶手段),5は外部との間でシリアル通信によりデータのやり取りを行なうSIOインタフェース部である。
また,図44において,6はNC装置の運転状態を表示したり,NC装置に与えた指令を確認するためにデータ表示を行う表示装置,7はNC装置に対して指令を与えるための入力手段としてのキーボード,8はサーボモータを制御するための指令を演算するサーボ制御部であり,該サーボ制御部8はメインCPU1とは別の専用CPUを備えてもよい。
さらに,図44において,9はサーボ制御部8から受け取った指令を電力増幅してサーボモータや工作機械主軸(図示せず)を駆動するサーボアンプ,10は工作機械(図示せず)の加工部を制御するためのサーボモータ,11は工作機械との間でサーボ制御指令以外のデータをやり取りするためのプログラマブルコントローラ部(以下,PC部という),12はメインCPU1に入力される,外部割り込み信号を表している。ここで,外部割り込み信号は電源異常や非常停止などイベント(緊急の出来事)の発生をメインCPU1に対して通知するための信号である。
また,図44において,500はメインCPU1に対して入力される,システムクロックである。ここで,システムクロックとは,NC装置全体を制御するために同期をとるためのクロック信号であり,システム内における各タスクの優先順位を一定間隔毎に調べたり,タスクを指定時間だけ実行を遅らせたりするために,CPU1に対してある一定周期でタイマ割り込みを入れる。この周期は少なくともマイクロ秒オーダーの十分粒度の小さいものにする。例えば,10Mヘルツのクロック信号を使用する。この場合は,0.1μ秒(0.0000001秒)単位でタスクの制御が実行できる。
RTOSは,システムクロック割り込みがある毎に各タスクの状態を調べ,実行中のタスクを止めて,別のタスクを実行させたり(これをスケジューリング,あるいは,ディスパッチという)する。
図44において,501はRAM4内に格納されたシステムクロック数メモである。このシステムクロック数メモ501は所定の条件のときに,システムクロック500の入力がある毎にRTOSが減らしていく。502はRAM4内に格納されたシステムクロック数メモ有効フラグである。このメモが有効を示す値に設定されている場合のみ前記システムクロック数メモ501を有効と見なすものである。
また,508はRAM4内に格納されたディスパッチクロック数である。ここに設定されたシステムクロックの回数分だけシステムクロックの入力があったときに,ディスパッチなど従来の実施例で行っていたのと同様のRTOSの処理を実行する。このディスパッチクロック数508の設定は,通常電源投入時に1回だけ行えばよいが,システムが稼働している最中に変更することにより,スケジューラの呼び出し頻度を変えることも可能である。
さらに,509はRAM4内に格納されたディスパッチクロック数メモであり,システムクロック500の入力がある毎に,この値を減らしていき,0になったときにディスパッチなどの従来の実施例で行ったのと同様のRTOSの処理を実行する。
次に,上記の構成を有するNC装置の制御ソフトウェア実行システムA17の動作について説明する。
各タスクは,予め,あるいは,そのタスクが開始させられるときにSVC(スーパーバイザーコール,または,サービスコール)によってその実行周期を登録する。ここで,SVCとは,タスクがRTOSに対して何らかのサービスを要求するときの総称である。何らかのサービスとは,例えば,何らかの条件が成立するまで自分自身の実行を停止させたり,他のタスクと通信を行なったり,他のタスクを起動させたり(実行を開始させたり),停止させたりすることである。
このデータは,RTOSが,例えば,上記図2に示すような"タスク走行周期テーブル"50に登録する。図2は,タスク毎に"走行周期"と"繰り返し回数"を有するデータ構造である。ここで,走行周期とは,タスクの次に走るまでのクロック数の値であり,また,繰り返し回数とは,何回そのタスクを起動するかを示す回数である。例えば,この値がマイナスの値ならば∞を示すものとし,その場合にあっては,タスクは繰り返し起動するものとする。このタスク走行周期テーブル50を用いて,RTOSは,タスクに起動がかかるたびに図3に示すような"タスク走行待ちリスト"51を作成する。
図3において,タスク走行待ちリスト51の中の各走行待ちブロック52は,ぞれぞれ,次の走行待ちブロックの位置を示す"リンク","タスク名",今現在からどれだけの時間が経過した後に走らなくてはならないかの"走行予定クロック数",同時に走らせなくてはならないタスク名を示す"同時タスク名",それにTCBの位置を示す"TCBポインタ"等の要素から構成されるブロックである。
以下に,図45のフローチャートを用いて具体的な動作について説明する。説明の都合上,システムに入力するシステムクロック500の周波数は10Mヘルツ,すなわち,0.1μ秒毎にシステムクロック500が入力されるものとする。また,説明中,リストを操作している最中など必要な処理中は,割り込みを禁止しているものとする。さらに,走行待ちブロック52を作成する場合には,タスク名としては当該タスクを示す名前を入れておくものとする。
図45は,RTOSが,タスク走行待ちリスト51を作成するときの手順を示したものである。図において,まず,BB1では,要求のあった走行周期を内部クロック数に変換する。例えば,要求が10m秒であれば,100,000(100,000×0.1μ秒=10m秒)と変換する。これをRT(request time)とする。次に,BB2では,現在の走行待ちリストに走行待ちブロックがあるか否かを判定し,走行待ちブロックがないと判定した場合には,BB3に処理が移行し,反対に,走行待ちブロックがあると判定した場合には,BB6に処理が移行する。
BB3は,走行待ちリスト51に走行待ちブロック52がなかった場合における処理であり,走行待ちブロック52を作成し,BB4では,走行待ちリスト51の先頭に走行待ちブロック52を置く。その後,BB5では,走行待ちリスト51の先頭ブロックの走行予定クロック数を,システムクロック数メモ501へ格納する。BB21では,システムクロック数メモ有効フラグ502へ有効を示す値を設定する。
次に,BB6は,走行待ちリスト51に走行待ちブロック52があると判断した場合における処理であり,最終タスク走行時間LTを0にして,タスクインデックスTIを1にする。ここで,LTとは当該タスクを走らせるのは現在からどれだけのクロック数かを計算するための変数であり,TIは走行待ちリスト中で当該タスクを示すインデックスである。
その後,BB7では,現在のシステムクロック数メモ501の値を読み込んで,先頭の走行待ちブロック52の走行予定クロック数に入れる。次に,BB8において,走行待ちリスト51内の,全ての走行待ちブロック52を調べ終ったか(たどったか)否かを判定する。
その結果,BB8において,全ての走行待ちブロック52を調べ終っていないと判定した場合には,BB9に処理が移行する。BB9では,走行待ちブロック52が,走行待ちリスト51中にあったと判断した場合の処理であり,走行待ちリスト51の中から,TIの示す走行待ちブロック52の,走行予定クロック数を取り出してLTに加える。
その後,BB10において,RTとLTとを比較する。BB11は,RTとLTが等しい場合(RT=LT)の処理であり,走行待ちブロック52を作成する。このとき,走行予定クロック数は0にしておく。BB12は,BB11において作成した走行待ちブロック52を,走行待ちリスト51中のTIの示すブロックの同時タスク名へつなぐ。ここで,つなぐとは,例えば,BB11において作成したブロックのアドレスをTIが示す走行待ちブロック52の同時タスク名の場所に置くなど,要するにBB11において作成したブロックを,直ちに見つけられるような配置に設定することである。
BB13は,RTがLTより大きな場合(RT>LT)の処理であり,TIの値を,1プラスして,BB8へ戻り同じ処理を繰り返す。
BB14は,RTがLTより小さな場合(RT<LT)の処理であり,走行待ちブロック52を作成する。このとき,走行予定クロック数は,RT−LT+(TIが示すより1つ前の走行待ちブロック52の走行予定クロック数)の値にする。
その後,BB15では,TIが示すブロックの走行予定クロック数をLT−RTとし,BB16では,TIが示す走行待ちブロック52とその前のブロックとの間にBB14において作成した走行待ちブロック52を挿入する。
その後,BB17では,BB16で挿入したブロックが,走行待ちリスト51の先頭か否かを判定し,BB18において,先頭であると判定した場合には,走行待ちリスト51の先頭ブロックの走行予定クロック数を,システムクロック数メモ501に格納する。
BB19では,BB8において,全ての走行待ちブロックを調べ終ったと判定した場合に,走行予定クロック数がRT−LTの走行待ちブロック52を作成し,その後,BB20では,BB19において作成した走行待ちブロック52を走行待ちリスト51の最後に挿入する。
上記実施例における図5は,走行待ちリスト51の例である。この例では現在から30クロック後にタスクAを起動して,さらにそれから20クロック後(すなわち,現在から50クロック後)にタスクBを起動することを示している。このとき,タスクCを35クロック後に起動する要求がRTOSに対して発せられたとすると,図45に示したフローチャートの手順にしたがって走行待ちリストは図6に示すようになる。
図45に示したBB5や,BB18において走行待ちリスト51の先頭ブロックの走行予定クロック数を,システムクロック数メモ501に格納し,その指定したクロック数が経過した後,後述するシステムクロック割り込みからタスク起動処理が呼ばれる。このタスク起動処理について図46を用いて説明する。
図46において,CC1では,走行待ちリスト51の先頭の走行待ちブロック52を走行待ちリスト51から切り離す処理を実行し,その後,CC2では,走行待ちリスト51が空になったか否かを判定する。また,CC3は,走行待ちリスト51が空になったと判定した場合の処理であり,システムクロック数メモ有効フラグ502を無効にすることにより,以降タスク起動処理が呼ばれないようにして,処理を修了する。
また,CC4は,CC2において,走行待ちリスト51に走行待ちブロック52が残っていると判定した場合の処理であり,先頭の走行待ちブロック52の走行予定クロック数を,システムクロック数メモ501に設定する。その後,CC5では,CC1において切り離した走行待ちブロック52から起動するタスクを取り出して,そのタスクのTCBをTCB待ち行列の先頭に配置する。
その後,CC6では,今走らせたタスクの,タスク走行周期テーブル50(図2参照)の周期回数を判定する。CC7は,走行回数が∞(負)の場合の処理であり,このタスクの走行待ちブロック52の,走行予定クロック数を,タスク走行周期テーブル50の走行周期に変え,走行待ちブロックを走行待ちリストに追加する。
CC8は,走行回数が正の整数だった場合の処理であり,走行予定回数を1減らす。その後,CC9では,当該タスクに対して図4に示した処理により,このタスクの走行待ちブロック52を作成して走行待ちリストに追加する。CC10は,走行回数が0の場合の処理であり,この場合,何の処理も実行せずに処理を終了する。
次に,システムクロック割り込み処理について,図47を用いて説明する。DD1は,システムクロック割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する。ただし,この処理は,通常メインCPU1により割り込みが発生したときに自動的に実行される。
次に,DD20はディスパッチクロック数メモ509から1減じる処理である。DD14はシステムクロック数メモ有効フラグ502が有効になっているか否かを判定する判定処理であり,有効になっていないと判定した場合には,後述するDD21の処理へ移行し,反対に,有効になっていると判定した場合には,DD17の処理を実行する。
DD21はディスパッチクロック数メモ509が0になったか否かを判定するする処理であり,DD22はディスパッチクロック数メモ509が0になった場合の処理で,改めてディスパッチクロック数508の値で初期化する。その後,DD2からのディスパッチ処理を実行する。
DD15はディスパッチクロック数メモ509が0になっていない場合の処理で,割り込み禁止を解除する処理である。DD16は割り込まれた処理にスケジューラを介さずに直接戻る処理である。DD17は割り込みクロック数メモ501から1減ずる処理である。
DD18は割り込みクロック数メモ501が0に等しくなったか否かを判定するための処理であり,この結果が0に等しくない場合には,まだタスク起動処理を呼ばないため,ディスパッチを行うか否かを判定するためにDD21へ移行する。DD19は,図46において説明したタスク起動処理を呼ぶための処理である。タスク起動処理から戻ってくるとDD23の処理へと移行する。DD23の処理はディスパッチクロック数メモ509が0になったか否かを判定する処理であり,DD24はディスパッチクロック数メモ509が0になった場合の処理で,改めてディスパッチクロック数508の値で初期化する。
また,DD2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。
その後,DD3では,ICBに,自分自身の割り込み処理の,実行環境を格納保存する。この中には,次に実行する命令のアドレスとしてDD12の処理における先頭アドレスをICBに格納することも含まれる。また,DD4では,今作成したICBを,スケジューラが実行するICB待ち行列に追加する。その後,DD5は,DD1の割り込みの禁止を解除する。これ以降は,再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためのものである。
次に,DD6は,割り込まれた処理が,割り込み処理あるいはRTOSか,それともタスクの処理中かを判定する。その結果,DD7は,割り込まれた処理が割り込み処理またはRTOSを実行中であると判断した場合であって,このときは割り込まれた処理に直接戻る。反対に,DD8は,割り込まれた処理が,タスクの処理を実行中であると判断した場合であって,このときは,まず割り込まれたタスクのTCBを探し出す。その後,DD9では,DD8において見つけたTCBへ割り込まれたタスクの実行環境を格納保存する。
さらに,DD10では,作成したTCBを,スケジューラが実行するTCB待ち行列に優先順位の順番に追加する。また,DD11では,スケジューラへ飛び,スケジューラからDD12に処理が戻ってくるが,スケジューラへ飛んだ後すぐにこの処理が実行されるとは限らず,他のICBが処理された後に戻る場合もある。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理が異なる。さらに,DD13は,割り込み処理の終了であり,通常のサブルーチンへのリターン命令が一般的であり,このリターン命令によって,スケジューラICB処理に戻る。
以上の説明の中では,また以後の割り込みの説明において,従来例のように,割り込み自身のアドレスをリストに登録しておいて,多重割り込み(割り込み処理中の他の割り込み)を許可する処理は,従来例と同様であるので,その説明は省略する。
上記のとおり,実施例17に係るNC装置の制御ソフトウェア実行システムA17は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSのシステムクロックを細かい時間粒度による制御を可能にし,なおかつ,毎回のシステムクロック割り込みによるスケジューラ呼び出しを必要なときだけに制限して,RTOSにオーバーヘッドもなく,タスク起動の制御が実行される機能を追加し,NC装置の制御ソフトウェアを実行するものである。
実施例17によれば,NC装置の制御ソフトウェア実行システムA17は,NC装置機能を実現するタスクの時間による制御を小さな時間単位で行なえるようになり,さらにタスクを起動する周期を簡単に指定できる。そのため,タスクに割り当てた時間の無駄を少なくでき,さらに,タスクをその走行時間で制御できるので,システムの構築が容易になると共にNC装置の処理速度が向上する。
〔実施例18〕
次に,実施例18の構成について説明する。実施例18に係るNC装置の制御ソフトウェア実行システムA18の全体構成を示す図18の内容は,実施例17において示した図44とほぼ同様である。ただし,実施例17にあっては,システムクロック数メモ501しかなかったが,本実施例では他に,積算システムクロック数メモ503と走行時間警告用システムクロック数メモ505を備えていることが異なる。
以下,実施例18に係るNC装置の制御ソフトウェア実行システムA18の構成を詳細に説明する。なお,この制御ソフトウェア実行システムA18の1〜12,500,508,509は,上記実施例17の図44に示したものと同様であるので,その説明を省略する。
図48において,501はRAM4内に格納された基準時間割り込み用のシステムクロック数メモである。このシステムクロック数メモ501はシステムクロック500の入力がある毎にRTOSが減らしていく。502はRAM4内に格納されたシステムクロック数メモ有効フラグであり,システムクロック数メモ501が有効か否かを示す。503はRAM4内に格納されたタスク走行時間計測用の積算システムクロック数メモであり,システムクロック500の入力がある毎にRTOSが増加させる。505はRAM4内に格納された走行時間警告用に用いる,走行時間警告用システムクロック数メモである。
次に,NC装置の制御ソフトウェア実行システムA18の動作について説明する。図49は,本実施例において必要なデータ構造を示したもので,510は"タスク開始システムクロックメモ"であり,RTOSが,タスクを起動する直前に図48に示した積算システムクロック数メモ503の値を記録しておき,その後,タスクが終了してRTOSに戻ってきたときの積算システムクロック数メモ503との差を求めることによって,タスクの走行時間を求めるためのものである。
また,511は"基準周期"を格納しておく領域である。システムに対して予め1つの基準周期を登録しておく。この周期毎に各タスクはどれくらい走行するかを指定する。この指定は時間でもクロック数でも構わないが,ここでは説明の都合上,クロック数に変換しておくものとする。
さらに,512は"タスク走行状態メモ"である。各タスクは予め,あるいは,そのタスクが開始させられるときにSVCによって,その実行の割合を登録する。例えば,タスク毎の指定走行周期,すなわち,タスクAが10%,タスクBが5%,タスクCが20%,基準周期が20m秒のとき,20m秒毎にタスクAが2m秒,タスクBが1m秒,タスクcが4m秒走ればよい。
ここで,実施例17と同様,図48におけるシステムクロック500は,10Mヘルツとする。すなわち,基準となる最小単位時間は0.1μ秒とすると,A,B,C各タスクはクロック数200000クロックの間に20000,1000,40000クロック分走ればよいことになる。このクロック数をタスク走行状態メモ512の"走行クロック数"の欄に格納する。ここで,走行する割合を指定しないタスクに対してはこの欄は0にしておく。
また,"走行残りクロック数"の欄は,1回の基準周期が終了する毎に,走行クロック数の欄をコピーし,タスクが走ったクロック数だけ減算していく。1回の基準周期が終る毎に,すべてのタスクの,この欄の内容が0になっていればよい。当然走行クロック数の合計は基準周期よりも少なくてはいけない。そのエラーチェックは,例えば,タスク状態メモに新たに登録する毎に行なえばよい。ただし,以下の説明において,このエラーチェックについては省略する。
次に,"繰り返し回数"の欄に設定するのは,何回そのタスクを起動するかを示す回数である。例えば,この値がマイナスの値ならば∞を示すとする。その場合には,当該タスクは繰り返し起動するものとする。
また,"走行禁止フラグ"の欄は,スケジューラが用いる。このフラグがオンになっているタスクはスケジューリングの対象から外す。すなわち,このフラグがオンのタスクはプライオリティが高くても走ることができない。
次に,基準周期リセット処理について説明する。制御ソフトウェア実行システムA18は,稼働し始めたときなど走行割合を保証するタスクが動作し始める前に,予めシステムクロック数メモ501に,基準周期511の値を設定しておく。その指定したクロック数が経過した後,後述するシステムクロック割り込みから基準周期処理が呼ばれる。
図50は,基準周期リセット処理の手順について説明したフローチャートである。基準周期リセット処理は,基準周期毎のシステムおよび全タスクの再初期化処理と考えられる。EE2では,タスク走行状態メモ512の走行残りクロック数の合計を求める。EE3では,その合計が0以上か否かを判定し,0以上ではないと判定した場合には,EE4において何らかのエラー処理を行なうが,通常は発生しないのでここでは,その説明を省略する。
反対に,EE3において,合計が0以上であると判定した場合には,EE5においてタスク走行状態メモ512の走行クロック数の欄の値を走行残りクロック数の欄に,タスク毎にコピーする。その後,EE6では,再びシステムクロック数メモ501に対して基準周期511の値を設定する。
その後,EE7では,タスク走行状態メモ512のすべてのタスクの走行禁止フラグを,オフにする処理を行う。この処理により,再びすべてのタスクがスケジューリング対象になる。さらに,EE8では,基準周期511からタスク走行状態メモ512の走行残りクロック数の合計を減算した値を走行時間警告用システムクロック数メモ505に設定する。その結果,毎回の基準周期に残り時間が周期を保証したタスクだけを走らせる時間しかなくなったときに走行時間警告処理が呼ばれる。この後,呼び出された処理に戻る。
図51は,走行時間警告処理の手順について説明したフローチャートである。FF2は,タスク走行状態メモ512の走行残りクロック数が,0または負の全てのタスクの走行禁止フラグをオンにする。
FF3では,全ての走行禁止フラグがオフであるTCBが,全ての行禁止フラグがオンのTCBの前に来るように,タスク処理の待ち行列を作り直す。すなわち,走行禁止フラグがオンのタスクの方がフラグがオフのタスクよりも前に走るようにする。
図52は,システムクロック割り込み処理の手順を示すフローチャートである。以下の説明において,有効フラグはシステムクロック数メモ有効フラグ502に関するものしか説明していないが,走行時間警告用システムクロック数メモ505に関しても同様の有効フラグが必要である。本フローチャートの中では,走行時間警告用システムクロック数メモ505用の有効フラグに対する処理は,システムクロック数メモ有効フラグ502と同様であるので,その説明は省略する。
GG1は,ある割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する,通常この処理はメインCPU1によって自動的に実行される。GG20は積算システムクロック数メモ503に1を加える処理である。GG21はskipフラグをオフにする処理である。ここで,skipフラグとは,RAM4上に設けた今回のシステムクロック割り込みでスケジューリングなどの処理を実行するか否かを示すために用いるフラグである。
GG22はシステムクロック数メモ501から1減ずる処理である。GG23はGG22の処理の結果システムクロック数メモ501が0になったか否かを判定する処理である。GG24はシステムクロック数メモ501が0になった場合の処理で,図50に示した基準周期リセット処理を呼ぶ。GG25はskipフラグをオフにする処理である。GG26は走行時間警告用システムクロック数メモ505から1減ずる処理である。
また,GG27はGG26の処理の結果,走行時間警告用システムクロック数メモ505が0になったか否かを判定する処理である。GG28は走行時間警告用システムクロック数メモ505が0になった場合の処理であって図51に示した走行時間警告処理を呼ぶ。GG29はskipフラグをオフにする処理である。GG32はディスパッチクロック数メモ509から1減算する処理である。GG33はGG32の結果,0か否かを判定する処理である。
さらに,GG34はディスパッチクロック数メモ509をディスパッチクロック数508で再初期化する処理である。GG35はskipフラグをオフにする処理である。GG30はskipフラグがオンかオフかを判定する処理であり,オフの場合には,スケジューリング処理等を実行するため,処理はGG2に移行する。GG31はskipフラグがオンの場合の処理であり,割り込まれた処理に直接復帰するものである。
GG4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。GG5は,GG1の割り込みの禁止を解除する。これ以降は,再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためのものである。
GG6は,割り込まれた処理が,割り込み処理か,あるいは,RTOSか,それともタスクの処理中かを判定する。GG7は,割り込まれた処理が割り込み処理またはRTOSを実行中の場合で,このときは割り込まれた処理に直接戻る。GG8は,割り込まれた処理がタスクの処理を実行中のときで,このときにあっては,まず,割り込まれたタスクのTCBを探し出す。GG9は,GG8において見つけたTCBへ割り込まれたタスクの実行環境を格納する。
GG10は,現在処理を行なっているタスクが,走行する割合を保証する対象のタスクであるか否かを判定する処理である。具体的には,タスク走行状態メモ512の走行残りクロック数の欄が1以上のタスクか否かを判定する。GG11は,GG10において対象と判定した場合における処理であり,当該タスクを起動したときの積算システムクロック数メモ503の値から,記録してあるタスク開始システムクロックメモ510の値を減じた当該タスクの走行クロック数を,タスク走行状態メモ512の当該タスクの走行残りクロック数の欄から減算する。
GG12は,GG11において減算した値(当該タスクの走行クロック数)を,走行時間警告用システムクロック数メモ505の値に加える。走行周期を保証したタスクが,走行し終った分だけ,走行周期を保証したタスク以外のタスクを走らせるための時間が増えるわけである。
GG13は,作成したTCBを,スケジューラが実行するTCB待ち行列に追加する。このとき,タスク走行状態メモ512の走行禁止フラグの欄が1つのタスクでもオンになっていれば,TCB待ち行列において,走行禁止フラグがオフのタスクのTCBは,走行禁止フラグがオンのタスクのTCBよりも前につなぐ。
GG14は,スケジューラへ飛ぶ。GG15は,スケジューラから戻ってきたときの処理であり,スケジューラへ飛んだ後すぐにこの処理が実行されるとは限らず,他のICBが処理された後の場合もあるが,いずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理内容が異なる。GG16は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が一般的であり,このリターン命令によって,スケジューラのICB処理部に戻る。
次に,RTOSのスケジューラの動作を図53を用いて説明する。以下,説明の都合上,本実施例においては,優先順位が最低であって,外部に対して何も処理を行なわない,アイドルタスクが常に走っているものとして説明を行なう。
HH1は,割り込み処理(ICB)の待ち行列があるか否かを調べる処理である。HH2は,HH1において,割り込み処理の待ち行列があったと判断した場合の処理であり,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加をしようとするとリストの整合性が保たれなくなるためである。
HH3は,割り込み処理の待ち行列のリストから先頭のICBを取り除く。HH4は,割り込み禁止を解除する。HH5は,HH3において取り除いたICBからGG3において格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して,それを実行する。これが,GG15の処理である。HH6は,GG16から戻ってくるところであり,再び割り込みを禁止する。HH7は,HH3において取り除いたICBをICBプールへ返す。HH8は,割り込み禁止を解除してからHH1へ戻る。後は割り込み処理待ち行列がある間はHH1からHH7の処理を繰り返す。
HH9は,タスク処理の待ち行列があったときの処理で,その待ち行列を実行するために最初に割り込みを禁止する。HH10は割り込み処理待ちの行列のリストから先頭のTCBを取り除く。HH11は当該TCBのタスクが走行割合を保証するタスクである場合には,タスクを開始し,システムクロック数メモ501に積算システムクロック数メモ503の値を保存しておく。
HH12は割り込み禁止を解除する。HH13は,HH11でタスク処理の待ち行列(リスト)から取り除いたTCBからGG9で格納したタスクの実行環境を取り出して実行する。そのときは,その処理へ飛んでいってここへは再び戻ってこない。
以上で述べたように,実施例18に係るNC装置の制御ソフトウェア実行システムA18は,通常のプライオリティベースのスケジューリング方式しか持たないRTOSに,タスク走行時間の保証を与える制御を実行できる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
上記実施例18によれば,NC装置の制御ソフトウェア実行システムA18は,NC装置機能を実現するタスクの走行時間による制御を実行することができる。そのため,タスクに割り当てた時間の無駄を少なくできる。さらに,タスクをその走行時間において制御できるので,システムの構築が容易になる。
〔実施例19〕
次に,実施例19の構成について説明する。実施例19に係るNC装置の制御ソフトウェア実行システムA19の全体構成を示す図54の内容にあっては,実施例18において示した図48の内容とほぼ同様である。以下,構成について詳細に説明する。この制御ソフトウェア実行システムA19の1〜12,500,508,509は,上記実施例17の図44に示した構成と同様であるので,その説明を省略する。
この制御ソフトウェア実行システムA19は,次の構成要素がさらに加えられている。すなわち,タスクの走行を修了させるために用いるタスク連続走行終了クロック数メモ506と,上記タスク連続走行終了クロック数メモ有効フラグ507である。
次に,実施例19の動作について説明する。図55,図56は,タスクの連続走行を保証するのに必要なデータ構造を示したもので,図55は,"タスク終了クロック数"のリスト構造である。520は,"タスク終了クロックブロック"を表している。タスク終了ブロックの構成要素は,タスク終了ブロックを連結するための"リンク(ポインタ)","タスク名","終了クロック数"などである。今までの説明と同様本実施例の説明でも内部的には全てクロック数により時間の制御を行なうものとする。
このテーブルはタスク起動のSVCにおいて,そのパラメータとして指定することにすれば必要はなくなるが,以下の説明の都合上,ここではこのテーブルを用いることにする。
RTOSのスケジューラは,連続走行が保証されているタスクが走行しているときに,割り込みが発生しても割り込み処理の終了後の再スケジューリングは行わないことによって,タスクの連続走行を保証する。連続走行が保証されているタスクの実行を終了させるのは,所定の条件が成立したとき,例えば,"連続走行終了処理"を呼んだときである。
RTOSはタスク起動のSVCが発行されたときは,まずそのタスクが連続走行を保証されたタスクか否かを判定して,もし該当するタスクなら,タスク連続走行保証テーブル521の連続走行クロック数をタスク連続走行終了クロック数メモ506に代入する。システムクロックが入力される毎にこの値から1ずつ減じていって,0になったときにタスク連続走行終了処理を呼ぶ。
最初に,タスク連続走行終了処理について説明する。図57は,タスク連続走行終了処理について示したフローチャートである。ここで,II2では現在走っている連続走行を保証されたタスクのTCBを探し出して,現在のタスクの実行環境をTCBへ保存する。II3ではタスク連続走行保証テーブル521内の,当該タスクの実行中フラグをオフする処理である。II4では同様のタスク処理の待ち行列を優先順位に応じて作り直す。
次に,システムクロック割り込み処理の手順について図58のフローチャートを用いて説明する。まず,JJ1では,割り込みが発生したときの割り込み処理の先頭であり,最初に他の割り込みの発生を禁止する,通常この処理はCPUによって自動的に行われる。JJ20は,タスク連続走行終了クロック数メモ有効フラグ507が有効か否かの判定処理である。
JJ21は,タスク連続走行終了クロック数メモ有効フラグ507が有効でなかった場合の処理で,ディスパッチクロック数メモ509から1を減算する。JJ22は,上記ディスパッチクロック数メモ509が0になったか否かを判定する処理である。JJ23は,ディスパッチクロック数メモ509の値をディスパッチクロック数508で再初期化する処理である。JJ24は,割り込み禁止の解除処理である。JJ25は,割り込まれた処理に直接復帰する処理である。
また,JJ26は,タスク連続走行終了クロック数メモ506から1減算する処理である。JJ27は,JJ26の結果を判定する処理であり,0でなければJJ21へ飛ぶ。JJ28は,図57において説明したタスク連続走行終了処理を呼ぶ処理である。
JJ29は,ディスパッチクロック数メモ509から1を減算する。JJ30は,上記ディスパッチクロック数メモ509が0になったか否かを判定する処理である。この結果が,0でない場合は,JJ2へ飛ぶ。JJ31は,ディスパッチクロック数メモ509の値をディスパッチクロック数508で再初期化する処理である。この後JJ2へ飛ぶ。
JJ2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。JJ3は,ICBに,この割り込み処理(自分自身の)の,実行環境を格納する。この中には次に実行する命令のアドレスとしてJJ13の処理の先頭アドレスをICBに格納することも含まれる。
JJ4は,今作成したICBを,スケジューラが実行するICB待ち行列に追加する。JJ5は,JJ1の割り込みの禁止を解除する。これ以降は再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためである。
JJ6は,割り込まれた処理が割り込み処理またはRTOSか,それともタスクの処理中かを判定する。JJ7は,割り込まれた処理が割り込み処理またはRTOSを実行中のときで,このときは割り込まれた処理に直接戻る。JJ8は,割り込まれた処理がタスクの処理を実行中のときで,このときはまず,割り込まれたタスクのTCBを探し出す。
JJ9は,今処理を行っているタスクが,連続走行を保証する対象のタスクであるか否かを判定する処理である。具体的には,タスク連続走行保証テーブル521(図56参照)の連続走行保証クロック数の欄が1以上のタスクか否かを判定する。連続走行保証の対象タスクの場合は,以下のJJ10,JJ11の処理は行わないで,JJ12へ飛ぶ。JJ10は,連続走行保証の対象外のタスクの場合の処理で,JJ8で見つけたTCBへ割り込まれたタスクの実行環境を格納する。
JJ11は,TCB待ち行列を優先順位に応じて作り直す。JJ12は,スケジューラへ飛ぶ。JJ13は,スケジューラから戻ってくるとここへ来る処理である。スケジューラへ飛んだ後すぐにこの処理が行われるとは限らず,他のICBが処理された後かも知れないがいずれはここへ戻ってくる。
ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理は異なる。JJ14は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が多い,このリターン命令によって,スケジューラのICB処理部に戻る。
以上で述べたように,実施例19に係るNC装置の制御ソフトウェア実行システムA19は,通常のプライオリティーベースのスケジューリング方式しか持たないRTOSに,タスクの連続した走行時間の保証を与える制御を実行できる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
上記実施例19によれば,NC装置の制御ソフトウェア実行システムA19は,NC装置機能を実現するタスクに連続した走行時間を保証できるようになる。そのため,タスクに割り当てた時間の無駄を少なくできる。さらに,タスクをその走行時間において制御できるので,システムの構築が容易に行える。
〔実施例20〕
次に,実施例20の構成について説明する。実施例20に係るNC装置の制御ソフトウェア実行システムA20の全体構成を示す図59の内容は,実施例17においてし示した図44の内容とほぼ同様である。
図59に示したRAM4において,501はシステムクロック数メモ,503は積算システムクロック数メモ,505はタスクの走行時間警告用の走行時間警告用システムクロック数メモ,506はタスク連続走行終了クロック数メモである。なお,508は,図44と同様にシステムクロック何回に1回ディスパッチ処理を呼ぶかを示すディスパッチクロック数であり,509はディスパッチクロック数メモである。
次に,NC装置の制御ネットワーク実行システムA20の動作について説明する。実施例17と同様に,各タスクは,予め,あるいはそのタスクが開始させられるときにSVCによってその実行周期を登録する。
このデータは,RTOSが,例えば,図2に示したような"タスク走行周期テーブル"50に登録する。図2は,タスク毎に"走行周期"と"繰り返し回数"を持ったデータ構造である。走行周期はタスクの次に走るまでのクロック数の値であり,繰り返し回数は何回そのタスクを起動するかを示す回数である。例えば,この値がマイナスの値ならば∞を示すとする。その場合はずっとそのタスクは繰り返し起動するものとする。他のタスク走行周期テーブル50を用いて,RTOSは,タスクに起動かかかるたびに図3のような"タスク走行待ちリスト"51を作成する。
図3において,リストの中における走行待ちブロック52は,それぞれ"タスク名"と,今現在からどれだけの時間の経過後に走らなくてはならないかの"走行予定クロック数",それに同時に走らせなくてはならないタスク名を示す"同時タスク名"から成るブロックである。
このタスク走行待ちリストを,RTOSが作成する方法は,実施例17において図45で示したものと同様なので,その説明は省略する。
また,実施例18において示したように,図49に示したは,タスクの走行割合を保証するのに,必要なデータ構造を示したもので,510は"タスク開始システムクロックメモ"である。RTOSが,タスクを起動する直前に,積算システムクロックメモ503の値を記録しておく,そしてそのタスクが終了してRTOSに戻って来たときの積算システムクロックメモ503との差を求めることによって,タスクが走った時間を求める。
また,図49に示した"基準周期"511,"タスク走行状態メモ"512"走行残りクロック数"の欄,"繰り返し回数"の欄,および"走行禁止フラグ"の欄については,実施例18と同様なので,その説明を省略する。
図45に示したBB4や,BB16において,走行待ちリストの先頭ブロックの走行予定クロック数を,システムクロック数メモ501に格納した。その指定したクロック数が経過した後,RTOSはタスク起動処理を呼ぶ。
図59に示した,制御ソフトウェア実行システムA20は,稼働し始めたときなど走行割合を保証するタスクが動き始める前に,予めシステムクロック数メモに対して,基準周期511の値を設定しておく。この設定したクロック数が経過した後に,基準周期処理をRTOSが呼ぶ。基準周期処理の手順については,実施例18の図50に示した手順と同様なので,その説明を省略する。
また,走行時間警告処理の手順についても,実施例18の図51に示した手順と同様なので,その説明を省略する。
さらに,システムクロック割り込み処理の手順についても,実施例18の図52に示した手順と同様なので,その説明を省略する。
また,RTOSのスケジューラの動作についても,実施例18の図53に示した手順と同様なので,その説明を省略する。
ここで,タスク起動処理,基準時間処理,走行時間警告処理,そして,システムクロックの割り込みの処理について,TCB待ち行列への操作を中心にまとめる。
タスク起動処理は,この処理によって起動するタスクのTCBを,TCB待ち行列の先頭に挿入する。また,基準時間処理は,全てのタスクを走行可能とする。走行時間警告処理は,走行時間の割合を保証しているタスクのTCBを,そうでないタスクのTCBより前に持っていると共に,タスク走行状態メモ512の走行禁止フラグをオンすることによって,走行時間警告処理が発生したことを,システムクロック割り込みのディスパッチ処理に対して知らせる。
システムクロック割り込みのディスパッチ処理は,走行時間警告処理によって,走行時間警告処理が発生した場合には,基準時間処理が発生するまでは,走行時間を保証しているタスクのTCBをそうでないタスクのTCBよりTCB待ち行列の前につなぐ。
ここで,タスク起動処理とシステムクロックのディスパッチ処理の優先順位はどちらかを選択しておく。タスク起動処理を,優先すればタスクの起動時間は正確になるが,タスクの走行割合は多少不正確になる。一方,ディスパッチ処理を優先すれば,タスクの走行割合は正確になるが,タスクの起動時間は多少不正確になる。これらは,何らかの手段によって閾値を決めておいてもよい。例えば,タスクの起動時間の遅れが,ある時間までは走行割合を優先するがそれ以上は,タスク起動を優先するなどの方法を取ればよい。
以上で述べたように,実施例20に係るNC装置の制御ソフトウェア実行システムA20は,通常のプライオリティーベースのスケジューリング方式しか持たないRTOSに,タスク起動周期とタスク走行割合の保証を与える制御を行える機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
〔実施例21〕
次に,実施例21について説明する。実施例21に係るNC装置の制御ソフトウェア実行システムA21の全体構成は,実施例17に示したもの(図44参照)と同様であるので,その説明を省略する。
次に,実施例21に係るNC装置の制御ソフトウェア実行システムA21の動作について説明する。実施例20と同様に,各タスクは予め,あるいはそのタスクが開始させられるときにSVCによってその実行周期を登録する。
このデータは,RTOSが,例えば図2に示したようなタスク走行周期テーブル50に登録する。このタスク走行周期テーブル50における"走行周期"と"繰り返し回数"については,実施例17と同様なので,その説明を省略する。
図3において,リストの中の各走行待ちブロックは,それぞれ"タスク名"と,現在からどれだけの時間の経過後に走らなくてはならないのか"走行予定クロック数",それに同時に走らせなくてはならないタスク名を示す"同時タスク名"から成るブロックである。
このタスク走行待ちリストを,RTOSが作成する方法は,実施例17において図45で示したものと同様なので,その説明は省略する。
また,実施例19と同様に,図55,図56は,タスクの連続走行を走行割合を保証するのに,必要なデータ構造を示したもので,図55は,"タスク終了クロック数"のリスト構造である。520は,"タスク終了クロックブロック"を表している。タスク終了ブロックの構成要素はタスク終了ブロックを連結するためのポインター,"タスク名","終了クロック数"などである。今までの説明と同様本実施例の説明でも内部的には全てクロック数で時間の制御を行うものとする。"実行中フラグ"は現在連続走行を保証をされたタスクが走っているときはオン,それ以外のときはオフとする。このフラグは同時には,2つ以上オンすることは無い。
図56は,"タスク連続走行保証テーブル"521である。このテーブルには"タスク名"と"連続走行保証クロック数"の欄があり,連続走行保証クロック数の値はシステム起動時,またはSVCにより設定する。連続走行を指定しないタスクに対してはこの欄は0にしておく。このテーブルはタスク起動のSVCにおいて,そのパラメータとして指定することにすれば,必要はなくなるが,以下の説明の都合上,ここではこのテーブルを用いることにする。
RTOSはタスク起動のSVCが,発行されたときは,まずそのタスクが連続走行を保証されたタスクか否かを判定して,もし該当タスクなら,タスク連続走行保証テーブル(図56参照)から連続走行クロック数をシステムクロック数メモに設定する。設定したクロック数が経過すると,"連続走行終了処理"RTOSから呼ばれる。
連続走行終了処理の手順については,実施例19の図57に基づいて説明したものと同様なので,その説明を省略する。
基準周期割り込み以外の,一般の割り込み処理の手順についても,実施例19の図58に基づいて説明したのと同様なので,その説明を省略する。
スケジューラも,実施例2と同様に,同じスケジューラ(図14参照)と同じであるので,その説明を省略する。
ここで,連続走行処理と,システムクロック割り込みのディスパッチ処理について,TCB待ち行列への操作を中心にまとめる。すなわち,
(1) 第1に,タスク起動処理は,この処理によって起動するタスクのTCBを,TCB待ち行列の先頭に挿入する。
(2) 第2に,連続走行終了処理は,実行中のタスクの実行中フラグをオフして他のタスクの走行を許可する。
(3) 第3に,システムクロック割り込みのディスパッチ処理は,連続走行を保証するタスクの場合は,TCB待ち行列のディスパッチを行わない。
ここで,(1)と(3)の優先順位はどちらかを選択しておく。(1)を優先すればタスクの起動時間は正確になるが,タスクの連続走行時間は多少不正確になる。一方,(3)を優先すれば,タスクの連続走行時間は正確になるが,タスクの起動時間は多少不正確になる。これらは,何らかの手段によって閾値を決めておいてもよい。例えば,タスクの起動時間の遅れが,ある時間までは連続走行を優先するがそれ以上は,タスク起動を優先するなどの方法を取ればよい。
以上で述べたように,実施例21に係るNC装置の制御ソフトウェア実行システムA21は,通常のプライオリティーベースのスケジューリング方式しか持たないRTOSに,タスク起動周期とタスクの連続走行の保証を与える制御を行える機能を追加した方式で,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
上記実施例21によれば,NC装置の制御ソフトウェア実行システムA21は,NC装置機能を実現するタスクの正確な起動時間と連続走行時間による制御実行することができる。そのため,タスクに割り当てた時間の無駄を少なくできる。さらに,タスクをその走行時間で制御できるので,システムの構築が容易に行える。
〔実施例22〕
次に,実施例22について説明する。図60は,実施例22に係るNC装置の制御ソフトウェア実行システムA22の全体構成を示し,その内容は,実施例17とほぼ同様である。
次に,NC装置の制御ソフトウェア実行システムA22の動作について説明する。本実施例に係る制御ソフトウェア実行システムA22のRTOSは,予め,例えば,システムを稼働したときなどに,積算システムクロック数メモ503を0に初期化しておく。これらの値は,システムクロック割り込みの毎にシステムクロック割り込み処理の中で1加算されている。
また,タスクにはいる直前に,そのクロック数メモの値を読み取って記憶しておく。また,そのタスクを抜けた直後に,再びクロック数メモの値を読み取って記憶しておいた値との差を求める。その値が,今回このタスクが走ったクロック数である。そしてタスク毎に,この値の合計を記憶しておく場所を設けておいて,そこに加えていくことにより,各タスクの走行時間の合計を記録する。
以下,本実施例に係るNC装置の制御ソフトウェア実行システムA22の動作について,さらに詳細に説明する。図61は,各タスクの走行時間を記録するのに必要なデータ構造であり,ここで,530はカウンタ値メモ,531はタスク走行時間テーブルであり,図に示す通り,タスク毎の合計クロック数の欄がある。
図62は,システムクロック割り込み処理の処理手順を示すフローチャートであり,図63は,スケジューラの処理手順を示すフローチャートである。
KK18はディスパッチクロック数メモ509から1減算する処理であり,KK19はその結果を0と比較する。KK20はディスパッチクロック数メモ509が0になったときの処理で,ディスパッチクロック数508で再初期化したのち,ディスパッチを行うためKK2の処理へ進む。KK19の判定結果が0でない場合は直接割り込まれた処理に戻るため,KK7の処理へ移行する。
KK2は未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。KK3はICBに,この割り込み処理(自分自身)の,実行環境を格納する。この中には次に実行する命令のアドレスとしてKK8の処理の先頭アドレスをICBに格納することも含まれる。KK4はここで作成したICBを,スケジューラが実行するICB待ち行列に追加する。KK5はKK1の割り込みの禁止を解除する。これ以降は再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためである。
KK6は割り込まれた処理が割り込み処理またはRTOSか,それともタスクの処理中かを判定する。KK7は割り込まれた処理が割り込み処理またはRTOSを実行中のときで,このときは割り込まれた処理に直接戻る。KK8は割り込まれた処理がタスクの処理を実行中のときで,このときはまず,割り込まれたタスクのTCBを探し出す。KK9は,KK8において見つけたTCBへ割り込まれたタスクの実行環境を格納する。
KK10は,積算システムクロック数メモ503の値から,カウンタ値メモ530の値を減算する。この結果,当該タスクがこの回に連続して走ったクロック数である。KK11は,KK10で求めた値をタスク走行時間テーブル531の当該タスクの合計クロック数の欄に加える。KK12は,作成したTCBを,スケジューラが実行するTCB待ち行列に優先順位の順番に追加する。
KK13はスケジューラへ飛ぶ。KK14はスケジューラから戻ってくるとここへ来る処理である。スケジューラへ飛んだ後すぐにこの処理が行われるとは限らず,他のICBが処理された後かも知れないがいずれはここへ戻ってくる。ここからが割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理は異なる。KK15は割り込み処理の終了であり,通常のサブルーチンのリターン命令が多い,このリターン命令によって,スケジューラのICB処理ブロックに戻る。
図63は,本実施例におけるRTOSのスケジューラの動作を示したフローチャートである。説明の都合上,本実施例においては,優先順位が最低で,外部に対して何も処理を行わないアイドルタスクが常に走っているものとする。すなわち,アイドルタスクは,常に走っているものとして説明を行う。
LL1は割り込み処理(ICB)の待ち行列があるか否かを調べる処理である。LL2は割り込み処理の待ち行列が合ったときの処理でその待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行おうとするとリストの整合性が保たれなくなるためである。
LL3は割り込み処理の待ち行列のリストから先頭のICBを取り除く。LL4は割り込み禁止を解除する。LL5は,LL3で取り除いたICBからKK3(図62参照)で格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して実行する。これがKK14(図62参照)の処理である。
LL10は割り込み処理の待ち行列のリストから先頭のTCBを取り除く。LL11はカウンタ値メモ530にシステムクロック数メモ501の値を保存しておく。LL12は割り込み禁止を解除する。LL13はLL11でタスク処理の待ち行列(リスト)から取り除いたTCBからKK9(図62参照)で格納したタスクの実行環境を取り出して実行する。このときはその処理へ飛んでいってここへは再び戻ってこない。
以上のようにして,任意の時間,本実施例に係るシステムを走らせた後,タスク走行時間テーブル531を調べれば,各タスクが実際に走った(処理を行った)時間を知ることができる。
なお,タスクの走行時間のみではなく,タスク走行時間テーブル531に走行回数の欄を設けて,タスクの走行回数も記録するようにしておけば,以下に述べるタスクの走行周期,走行割合,走行時間を決めるときにも役立つ。
さらに,カウンタ値メモ530だけでなく,タスク終了カウンタ値メモも設けて割り込み処理の先頭で,システムクロック数メモの値をそこへ保存しておき,スケジューラのKK10(図62参照)の部分において,カウンタ値メモ530からタスク終了カウンタ値メモを減算した値を,タスクが連続して走行したクロック数とすれば割り込み処理の時間も除いたタスクが純粋に走行した時間が求められる。
以上で述べたように,実施例22に係るNC装置の制御ソフトウェア実行システムA22は,タスクの実際の走行時間を知ることができる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例22によれば,NC装置の制御ソフトウェア実行システムA22は,NC装置機能を実現するタスクの正確な実行時間を知ることにより,各タスクの走行時間の割り当てなどが,容易に行えるようになり,システムの構築が容易に行える。
〔実施例23〕
次に,実施例23について説明する。実施例23に係るNC装置の制御ソフトウェア実行システムA23の全体構成は,実施例22と同様であるので,その説明を省略する。
次に,本実施例に係る,NC装置の制御ネットワーク実行システムA23の動作について説明する。本実施例では,制御ソフトウェア実行システムA23(図60参照)のRTOSは,予め,例えば,システムを稼働したとき等に,システムクロック数メモ501を0で初期化しておく。
また,タスクにはいる直前に,そのカウンタ値を読み取って記憶しておく。そのタスクを抜けた直後に,再びカウンタ値を読み取って記憶しておいた値との差を求める。その値が,今回このタスクが走ったクロック数である。そして,タスク毎に,この値の和を記憶しておく場所を設けておいて,そこに加えていくことにより,各タスクの走行時間の合計を記録する。
さらに,従来例におけるスケジューラのICBの処理を,スケジューラでなく,優先順位がもっとも高いタスクで実行するものである。
以下,本実施例に係るNC装置の制御ソフトウェア実行システムについて,さらに詳細に説明する。図64は,スケジューラの処理手順を示すフローチャートであり,図65は,ICBを処理する最高優先順位を持った,割り込み処理実行タスクの処理を示すフローチャートである。
データ構造としては,従来例と同じICB(インタラプトコントロールブロック)を用いる。割り込み処理に関しては,従来例と同じであるので,その説明を省略する。
図64は,本実施例に係るRTOSのスケジューラの動作を説明したものであり,アイドルタスクを設けることにより,常に少なくともアイドルタスクは,実行を待っているものとする。MM1はタスク処理の待ち行列(TCB)があったときの処理でその待ち行列を実行するために最初に割り込みを禁止する。MM2は割り込み処理の待ち行列のリストから先頭のTCBを取り除く。
MM3はカウンタ値メモ530にシステムクロック数メモ501の値を保存しておく。MM4は割り込み禁止を解除する。MM5はMM3でタスク処理の待ち行列(リスト)から取り除いたTCBから割り込み処理で格納したタスクの実行環境を取り出して実行する。このときはその処理へ飛んでいってここへは再び戻ってこない。
本実施例における割り込み処理タスクの動作は,上記図26と同様である。すなわち,N1は,割り込み処理(ICB)の待ち行列があるか否かを判定する処理である。N2は,割り込み処理の待ち行列があったと判断した場合の処理であって,その待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行なおうとするとリストの整合性が保たれなくなるためである。
また,N3は,割り込み処理の待ち行列のリストから,先頭のICBを獲得する。N4は,割り込み禁止を解除する。N5は,N3で取り除いたICBから,割り込み処理で格納した実行アドレスやレジスタなどの割り込み処理の実行環境を取り出して実行する。N6は,N3で取り除いたICBをICBプールへ返却する。その後は,N1へ戻り,割り込み処理待ち行列がある間はN1からN6の処理を繰り返す。N7は,割り込み処理(ICB)の待ち行列が無くなったときの処理でタスク終了のSVCを発行して他のタスクにメインCPU1の使用権を譲り渡す。
以上のように,任意の時間,本実施例を走らせた後,タスク走行時間テーブル531を調べれば,各タスクが実際に走った(処理を行なった)時間を知ることができる。
以上に説明した通り,実施例23に係るNC装置の制御ソフトウェア実行システムA23は,タスクと割り込み処理の実際の走行時間を知ることができる機能を追加した方式であり,その方式に基づいてNC装置の制御ソフトウェアを実行するものである。
上記実施例23によれば,NC装置の制御ソフトウェア実行システムは,NC装置機能を実現するタスクと割り込み処理の正確な実行時間を知ることにより,各タスクの走行時間の割り当てなどが容易に行えるようになり,システムの構築が容易に行える。
〔実施例24〕
次に,実施例24について説明する。実施例24に係るNC装置の制御ソフトウェア実行システムA24の全体構成は,実施例18と同様であるので,その説明を省略する。
次に,本実施例に係るNC装置の制御ソフトウェア実行システムA24の動作について説明する。タスクや割り込み処理の走行時間を計測する手段を備え,さらにタスクの走行時間を変える何らかの手段を備えるNC装置において,それを実現するためのNC装置の制御ソフトウェア実行システムの全体構成図は,タスクの走行時間や割合の指定の仕方によって複数の構成があるが,この実施例では,説明の都合上タスクの走行割合を指定できる場合について説明する。
タスクの走行割合を保証する処理については,実施例18(図50〜図51参照)とほぼ同様であり,必要なデータ構造も同じであり,タスク開始システムクロックメモ510(図49参照),基準周期511を格納しておく領域(図49参照),タスク走行状態メモ512(図49参照)などを備える。タスク走行状態メモ512(図49参照)は,"走行残りクロック数","繰り返し回数","走行禁止フラグ"などの欄を備える。
さらに,タスクの走行時間を測定するために,実施例22と同様に,タスク走行時間テーブル531(図61参照)を備える。また,タスク走行時間テーブル531(図61参照)にはタスク毎の合計クロック数の欄がある。なお,カウンタ値メモ530(図61参照)はタスク走行状態メモ512(図49参照)と同じ役目をするので使用しない。
また,基準時間処理の手順,走行時間警告処理の手順は,実施例18(図50,図51参照)と同様なので,その説明を省略する。
図65は,システムクロック割り込み処理の手順について説明した図である。以下の説明において,システムクロック数メモ501および走行時間警告用システムクロック数メモ505に関しては,実施例18のシステムクロック割り込み処理(図47参照)と同様に,それぞれに有効フラグを設けてその有効フラグが"有効"である場合のみシステムクロック数メモ501,走行時間警告用システムクロック数メモ505に対する処理を行えばよいが,その説明が煩雑になるため本実施例の説明に係るフローチャートではその処理の説明を省略する。
OO22はskipフラグをオンする処理である。ここで,skipフラグとは,RAM4上に設けた,このシステムクロック割り込みでスケジューリングなどの処理を行うか否かを示すために用いるフラグである。OO23は走行時間警告用システムクロック数メモが0になったか否かの判定であり,0になった場合は,OO24のタクス起動処理(図46参照)を呼ぶ処理へ移行する。その後,OO25でskipフラグをオフにする。OO23の判定において,走行時間警告用システムクロック数メモ505が0でない場合にはOO26の処理へ移行する。
OO26はシステムクロック数メモ501が0になったか否かの判定を行う処理であり,その結果,0であれば,OO27で基準周期処理(図12参照)を呼び,OO28でskipフラグをオフにする。
OO26の判定結果が0の場合には,OO29ではディスパッチクロック数メモ509が0か否かの判定を行う。その結果が0であれば,OO30でskipフラグをオフにして,OO31でディスパッチクロック数508の値をディスパッチクロック数メモ509へ代入することにより,ディスパッチクロック数メモ509の再初期化を実行する。
OO32はskipフラグがオンかオフかの判定を行う処理で,オンの場合は,OO33で割り込み禁止の解除を行った後,OO7へ飛び割り込まれた処理に直接復帰する。オフの場合にはOO2へ飛び,通常のディスパッチ処理を実行する。
OO2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。OO3は,ICBに,この割り込み処理(自分自身の)の,実行環境を格納する。この中には次に実行する命令のアドレスとしてOO8の処理を先頭アドレスをICBに格納することも含まれる。
OO4は,ここで作成したICBを,スケジューラが実行するICB待ち行列に追加する。OO5はOO1の割り込みの禁止を解除する。これ以降は,再び割り込みが発生する可能性がある。以上の処理は割り込み禁止時間をできる限り短くするためである。OO6は割り込まれた処理が割り込み処理またはRTOSか,それともタスクの処理中かを判定する。
OO7は割り込まれた処理が割り込み処理またはRTOSを実行中のときで,このときは割り込まれた処理に直接戻る。OO8は割り込まれた処理がタクスの処理を実行中のときで,このときはまず,割り込まれたタスクのTCBを探し出し,OO9で当該TCBへ割り込まれたタスクの実行環境を格納する。
OO10は積算システムクロック数メモ503の値から,基準周期511に保存してある値を減算する。この結果が当該タスクが今回連続して走ったクロック数である。これをタスク走行時間テーブル531の当該タスクの合計クロック数の欄に加える。
OO11は,ここで処理を行っているタスクが,走行する割合を保証する対象のタスクであるか否かを判定する処理である。具体的には,タスク走行状態メモ512の走行残りクロック数の欄が1以上のタスクか否かを判定する。OO12は,OO11で対象と判定した場合の処理で,OO10で求めた値をタスク走行状態メモ512の当該タスクの走行残りクロック数の欄から減算する。
OO13は,OO10で求めた値を走行時間警告用の走行時間警告用システムクロック数メモ505に加える。走行周期を保証したタスクが,走行し終わった分だけ,走行周期を保証したタスク以外のタスクを走らせるための時間が増えるわけである。
OO14は作成したTCBを,スケジューラが実行するTCB待ち行列に,優先順位の順番に追加する。ただし,このとき,タスク走行状態メモ512(図49)の走行禁止フラグの欄が1つのタスクでもオンになっていれば,TCB待ち行列において,走行禁止フラグがオフのタスクのTCBは,走行禁止フラグがオンのタスクのTCBよりも前につなぐ。
図66は,スケジューラの動作を示すフローチャートである。本実施例においては,優先順位が最低で,外部に対して何も処理を行わないアイドルタスクが常に走っているものとする。
図66において,PP1は割り込み処理(ICB)の待ち行列が有るか否かを調べる処理であり,PP2は割り込み処理の待ち行列があったときの処理でその待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行おうとするとリストの整合性が保たれなくなくためである。
PP3は割り込み処理の待ち行列のリストから先頭のICBを取り除く。PP4は割り込み禁止を解除する。PP5はPP3で取り除いたICBからOO3(図65参照)で格納した実行アドレスやレジスターなどの割り込み処理の実行環境を取り出して実行する。
PP6はOO17(図65参照)から戻ってくるところであり,再び割り込みを禁止する。PP7はPP3で取り除いたICBをICBプールへ返す。PP8は割り込み禁止を解除してからPP1へ戻る。後は割り込み処理待ち行列がある間はPP1からPP7の処理を繰り返す。
PP9はタスク処理の待ち行列を実行するために,割り込みを禁止する。PP10は割り込み処理の待ち行列のリストから先頭のTCBを獲得する。PP11はタスク開始システムクロックメモ510にタスク走行時間計測用の積算システムクロック数メモ503の値を保存しておく。
PP12は割り込み禁止を解除する。PP13はPP10でタスク処理の待ち行列(リスト)の先頭から,獲得したTCBからOO9(図65参照)が格納したタスクの実行環境を取り出して実行する。このときはその処理へ飛んでいって,ここへは再び戻ってこない。
以上において説明したように,実施例24に係るNC装置の制御ソフトウェア実行システムA24はタスクの走行割合を設定でき,また,タスクの割り込み処理の実際の走行時間を知ることができる機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例24によれば,NC装置の制御ソフトウェア実行システムA24は,NC装置機能を実現するタスクと,割り込み処理の正確な実行時間を知ることにより,各タスクの走行時間の割り当てが,容易に行えるようになりシステムの構築が容易となる。
〔実施例25〕
次に,実施例25について説明する。実施例25に係るNC装置の制御ソフトウェア実行システムA25の全体構成は,実施例18(図48参照)とほぼ同様であるので,その説明を省略する。
次に,NC装置の制御ソフトウェア実行システムA25の動作について説明する。NC装置の運転モード選択部分の処理手順は図29に示したものと同様である。すなわち,Q1は,NC装置のモードがグラフィックチェックか否かを判定する部分である。Q2は,グラフィックチェックモードであると判断した場合であり,その場合はグラフィック表示タスクの割り当てを増やし,他の,例えば,自動モード処理タスクの割り当てをその分減らす。
Q3は,グラフィックチェックモードではないと判断した場合で,自動モードか否かを判定する処理である。Q4は,自動モードであると判断した場合であって,自動モード処理タスクの割り当てを増やし,他の処理タスクの割り当てを減らす。Q5は,手動モードか否かのチェックである。Q6は,手動モードであると判断した場合であって,手動処理タスクの割り当てを増やし,他の処理タスクの割り当てを減らす。それ以降は,その他のモードの場合であるが,その説明は省略する。
以上において,説明したとおり,実施例25に係るNC装置の制御ソフトウェア実行システムA25は,NC装置の運転モードによってタスクの走行割合を変化させて,NC装置の制御ソフトウェアを実行するものである。
実施例25によれば,NC装置の制御ソフトウェア実行システムA25は,NC装置の運転モードによってタスクの走行割合を変化させることにより,モード毎にタスクに適した時間だけ,タスクを走らせることができ,NC装置の実行速度が向上する。
〔実施例26〕
次に,実施例26について説明する。実施例26に係るNC装置の制御ソフトウェア実行システムA26は,同一の加工プログラムを複数回走らせるとき(同じ加工を複数回行うとき),初回加工時における各タスクの走行状況に基づいて2回目以降の加工時における各タスクの走行配分を最適化するものである。
実施例26に係るNC装置の制御ソフトウェア実行システムA26の全体構成は,上記実施例18(図48参照)とほぼ同様であるので,その説明を省略するが,以下の説明の都合上,本実施例においては,例えば,実施例24と同様に,タスク毎の走行割合を指定する手段と,実際のタスクの走行状況を記録できる手段を備えているものとする。
使用するデータ構造としては,実施例24と同様,タスク開始システムクロックメモ510(図49参照),基準周期511を格納しておく領域(図49参照),タスク走行状態メモ512(図49参照),タスク走行時間テーブル531(図61参照)などを備える。タスク走行状態メモ512(図49参照)は,"走行残りクロック数","繰り返し回数","走行禁止フラグ"などの欄があり,タスク走行時間テーブル531(図61参照)にはタスク毎の"合計クロック数"の欄がある。
基準時間割り込み処理の手順,走行時間警告割り込み処理の手順は,実施例18(図50,図51参照)と同様であり,システムクロック割り込み処理の手順は,実施例24(図66参照)と同様なので,その説明は省略する。
複数回加工時の処理を時間を短縮するための,各タスクの走行割当時間の最適化するための手順は図30のフローチャートと同様である。すなわち,R1は同一加工の1回目か,2回目以降かを判定する処理である。R2は1回目の加工時の処理で,各タスクの総走行時間(クロック数)を計測し,記録する。R3は走行したタスクの内,アイドルタスクなどの必要のないタスクを除いた他の必要なタスクの走行時間の合計を計算する。
R4は,R3で求めた合計に基づいて,必要なタスクの走行割合を計算する。走る必要がないタスクの走行割合は0とする。R5は,R4で計算した割合をタスク走行状態メモ512(図49参照)の走行割合の欄に登録する。R6は2回目以降の加工時の処理で,R5で登録したタスク走行状態メモ512(図49参照)の各タスクの走行割合により各タスクを走行させる。
以上説明した通り,実施例26に係るNC装置の制御ソフトウェア実行システムA26は,1回目の加工によって最適なタスクの走行割合を自動的に設定する機能を備えてNC装置の制御ソフトウェアを実行するものである。
実施例26によれば,NC装置の制御ソフトウェア実行システムA26は,機能を実現する各タスクの走行時間の割り当てを自動的に最適なものにすることにより,繰り返し加工における加工時間の短縮を実行できる。
〔実施例27〕
次に,実施例27について説明する。実施例27に係るNC装置の制御ソフトウェア実行システムA27は,予め登録された,各タスクの基準の走行割合や,全走行時間と,実際に走っているNC装置の制御ソフトウェア実行システムの各タスクのデータが,予め指定した割合以上にずれている場合は,タスクの異常と判定する。
実施例27に係るNC装置の制御ソフトウェア実行システムA27の全体構成は,実施例24(図48参照)と同様であるので,その説明は省略する。また,実際に走っているNC装置の制御ソフトウェア実行システムの各タスクのデータを測定するのは,実施例と同様であるので,その説明は省略する。
各タスクが正常に走っているか否かを判定するのに必要なデータ構造を,図67に示す。550は"タスク走行標準データ"で,タスク毎に"走行割合"や"全走行クロック数"などの欄がある。それらのデータは,システム生成時に予め作成しておくか,あるいは何らかのSVCによって,そのデータを使うよりも前の,任意の時期に設定しておいてもよい。
図において,551は,この割合まではタスク走行時間のずれがあっても,タスク異常と見做さない許容度を格納する"走行時間判定許容度"である。552は,この範囲内であれば,タスク走行割合にずれがあってもタスク異常と見なさない許容度を格納する"走行割合判定許容度"である。この走行割合判定許容度には下限欄と上限欄があり,それがこの範囲内ならばタスク異常と見なさないものである。
各タスクが正常に走っているか否かを判定するための,タスク走行時間テーブル531(図61参照)とタスク走行標準データ550(図67参照)の比較は,例えば,タスクが切り換えるときに,スケジューラで行ってもよいし,あるいは,定期的に走るタスク異常判定タスクを設けて,そのタスクにより判定を行ってもよい。以下の説明では,タスクが正常に走っているか否かの判定を,異常判定タスクで行うものとする。また,走行時間判定許容度551は全走行時間と,走行割合について別々に設けてもよいが,ここでは説明の都合上,同じ値を用いるものとする。
図68は,異常判定タスクの動作を示すフローチャートである。SS1は,異常判定タスクの先頭で,タスク走行時間テーブル531(図61参照)の,タスク毎の合計クロック数の欄の値の全ての和を求める処理である。SS2は,全てのタスクに対して,以下のSS3からSS5までの処理を行ったか否かの判定であり,全タスクに対して処理を終了すればSS6へ処理が移行する。
SS3は,タスク走行時間テーブル531(図61参照)の,当該タスクの合計クロック数の値と,タスク走行標準データ550の全走行クロック数を比較する。当該タスクのタスク走行時間テーブル531(図61参照)の合計クロック数の値が,タスク走行標準データ550の全走行クロック数の値に走行時間判定許容度551の値を乗じたものよりも小さいか等しければ,このタスクは正常であると見なす。
SS4は,SS3において,タスクに異常が発生したと判定したときの処理で,例えば,オペレーターにタスク異常が発生したことを知らせるメッセージを送るなどの,何れかのエラー処理を行う。
以上で説明した通り,実施例27に係るNC装置の制御ソフトウェア実行システムA27にあっては,NC装置の機能を実現しているタスクに異常が発生したときにそれを検知する機能を備えている。
実施例27によれば,NC装置の制御ソフトウェア実行システムA27は,NC装置の機能を実現しているタスクに異常が発生したときにそれを検知する機能を備えているため,NC装置に異常が発生したことが直ちに判定することができる。
〔実施例28〕
次に,実施例28について説明する。実施例28に係るNC装置の制御ソフトウェア実行システムA28の全体構成は,実施例18(図48参照)と同じであるので,その説明は省略する。
ただし,本実施例では,RAM4上のデータとしてはタスク走行時間計測用の積算システムクロックメモ503,タスク停止用に使用するシステムクロック数メモ501,ディスパッチクロック数508,ディスパッチクロック数メモ509を使用する。
図69は,本実施例において,必要なデータ構造を示したものであり,600は"タスク停止テーブル"である。各タスクは予め,あるいはそのタスクが開始させられるときにSVCによって,タスクが起動してから停止するまでのクロック数をこのタスク停止テーブル600の"停止クロック数"の欄に登録しておく。指定しないタスクはこの値を0としておく。
510(図49参照)は"タスク開始システムクロックメモ"である。RTOSが,タスクを起動する直前に,積算システムクロック数メモ503(図48参照)の値を記録しておく。そして,そのタスクが終了してRTOSに戻って来たときの,積算システムクロック数メモ503との差を求めてタスク走行時間を求める。611は"タスク停止クロックメモ"である。タスク停止処理をすぐに処理できないときは,このメモをオンしておいて後で処理する。
本実施例に係る,NC装置の制御ソフトウェア実行システムA28は,タスクを起動するたびに,指定されていればタスク停止テーブル600の停止クロック数をシステムクロック数メモ501に設定する。そして,毎回のシステムクロック割り込み時に,RTOSがシステムクロック数メモ501を減じていって0になったところで,タスク停止処理を呼んで当該タスクを強制的に停止させる。
もし,タスク停止処理を呼び前に,他のタスクによってCPUを横取りされた場合は,積算システムクロックメモ503(図48参照)と,タスク停止クロックメモ611から,当該タスクの走行クロックを求め,その分をタスク停止テーブル600の停止クロック数から減ずる。このようにして,指定タスクの最大走行クロック数を制限することができる。
次に,NC装置の制御ソフトウェア実行システムA28の動作について説明する。最初にタスク停止処理について説明する。図70は,タスク停止処理の手順について説明したフローチャートである。
WW2は割り込まれた処理がタスク処理中か,それ以外かを判定する処理部分である。WW3はタスク処理中ではなかったときで,その場合には,タスク停止クロックメモ611をオンする。WW4は割り込み禁止を解除して,割り込まれた処理へ戻る。WW5はタスク処理中に割り込みが発生した場合で,まず割り込まれたタスクのTCBを探し出す。
また,WW6は,WW4で見つけたTCBへ割り込まれたタスクの実行環境を格納する。WW7はタスク停止SVCと同様の当該タスクの終了処理を行う。例えば,当該TCBのステータスの欄を停止にして,TCB待ち行列から,停止中タスクの待ち行列へつなぎ変える等の処理である。
図71は,システムクロック割り込み処理の手順を示すフローチャートである。以下の説明において,システムクロック数メモ501に関しては,実施例18のシステムクロック割り込み処理(図47参照)と同様に,有効フラグを設けてその有効フラグが"有効"である場合のみシステムクロック数メモ501に対する処理を行えばよいが,説明が煩雑になるため,本実施例の説明のフローチャートではその処理を省略する。
XX1は,割り込みが発生した時の割り込み処理の先頭であり,最初の他の割り込みの発生を禁止する,通常この処理はCPUによって自動的に行われる。
XX20は,ディスパッチクロック数メモ509,システムクロック数メモ501のそれぞれから1減算する処理であり,XX21は積算システムクロック数メモ503に1加える処理であり,XX22はskipフラグをオンする処理である。ここで,skipフラグは,RAM4上に設けた,このシステムクロック割り込みでスケジューリングなどの処理を行うか否かを示すために用いるフラグである。
XX23は,システムクロック数メモ501が,0になったか否かの判定を行う処理であり,その結果が0と判断した場合は,XX24で,図41に示したタスク停止処理を呼ぶ。その後,XX25でskipフラグをオフにする。ここで,skipフラグとはRAM4上にあり,ディスパッチ処理を呼ぶか否かの判定に使用するフラグである。
XX23の結果が0でないと判断したときは,XX26で,ディスパッチクロック数メモ509が0か否かの判定を行う。その結果が,0であれば,XX27でskipフラグをオフにして,XX28で,ディスパッチクロック数508の値をディスパッチクロック数メモ509へ代入することにより,ディスパッチクロック数メモ509の再初期化を実行する。
XX29は,skipフラグがオンかオフかの判定を行う処理で,オンの場合にはXX30で割り込み禁止の解除を行った後,XX7へ飛び,割り込まれた処理に直接復帰する。オフの場合にはXX2へ飛び,通常のディスパッチ処理を行う。
XX2は,未使用のICBをICBプール(未使用ICBを保持しておく場所)から1つ獲得する。XX3は,ICBに,この割り込み処理(自分自身の)の,実行環境を格納する。この中には次に実行する命令のアドレスとしてXX8の処理の先頭アドレスをICBに格納することも含まれる。XX4は,ここで,作成したICBを,スケジューラが実行するICB待ち行列に追加する。XX5は,XX1の割り込みの禁止を解除する。これ以降は再び割り込みが発生する可能性がある。異常の処理は割り込み禁止時間をできる限り短くするためである。
XX6は,割り込まれた処理が,割り込み処理またはRTOSか,それともタスクの処理中かを判定する。XX7は,割り込まれた処理が割り込み処理またはRTOSを実行中のときで,このときは割り込まれた処理に直接戻る。XX8は,割り込まれた処理がタスクの処理を実行中のときで,このときはまず割り込まれたタスクのTCBを探し出す。XX9は,XX8で見つけたTCBへ,割り込まれたタスクの実行環境を格納する。
XX10は,タスク停止クロックメモ611がオンか否かを調べる処理である。XX11は,タスク停止クロックメモ611がオンのときの処理で,タスク停止SVCと同様の,当該タスクの終了処理を行う。例えば,当該TCBのステータスの欄を停止にしてTCB待ち行列から,停止中タスクの待ち行列へつなぎ変える等の処理である。
XX12は,タスク停止クロックメモ611がオフのときの処理で,積算システムクロック数メモ503と,タスク開始クロックメモの差から当該タスクの走行クロック数を求め,タスク停止テーブル600の停止クロック数から減ずる。XX13は,XX9において作成したTCBを,スケジューラが実行するTCB待ち行列にプライオリティーの順に追加する。XX14は,スケジューラへ飛ぶ。
XX15は,スケジューラから戻ってくるとここへ来る処理である。スケジューラへ飛んだ後すぐにこの処理が行われるとは限らず,他のICBが処理された後かもしれないが,いずれはここへ戻ってくる。ここらから割込毎に固有の本来の割り込み処理であり,割り込み要因によって処理は異なる。XX16は,割り込み処理の終了であり,通常のサブルーチンのリターン命令が多い,このリターン命令によって,スケジューラのICB処理部に戻る。
図72を用いて,本実施例に係るNC装置の制御ソフトウェア実行システムA28のスケジューラの動作を説明する。以下の,説明の都合上,本実施例においては,優先順位が最低で,外部に対して何も処理を行わないアイドルタスクが常に走っているものとする。
YY1は,割り込み処理(ICB)の待ち行列があるか否かを調べる処理である。YY2は,割り込み処理の待ち行列があったときの処理でその待ち行列を実行するために最初に割り込みを禁止する。これは,割り込み処理の待ち行列のリストを処理している最中に,割り込みが発生して割り込み処理の待ち行列に追加を行おうとするとリストの整合性が保たれなくなるためである。
YY3は割り込み処理の待ち行列のリストから先頭のICBを取り除く。YY4は割り込み禁止を解除する。
YY5は,YY3で取り除いたICBからXX3で格納した実行アドレスやレジスターなどの割り込み処理の実行環境を取り出して実行する。これがXX15(図71参照)である。YY6は,XX16から戻ってくるところであり,再び割り込みを禁止する。YY7は,YY3で取り除いたICBをICBプールへ返す。YY8は,割り込み禁止を解除してからYY1へ戻る。後は割り込み処理待ち行列がある間はYY1からYY7の処理を繰り返す。
YY9は割り込みを禁止する。YY10は割り込み処理の待ち行列のリストから先頭のTCBを獲得する。YY11は当該TCBのタスクが,タスク停止テーブル600の停止クロック数が0以上のタスクである場合は,当該タスクのタスク停止テーブル600の停止クロック数の値をシステムクロック数メモ501に代入する。
この設定した数だけのクロック数が経過すると,図71で説明したシステムクロック割り込みがタスク停止処理を呼ぶ。YY12は,割り込み禁止を解除する。YY13は,YY10でタスク処理の待ち行列(リスト)から獲得したTCBからXX9(図71)で格納したタスクの実行環境を取り出して実行する,そしてその処理へ飛んで行き,ここへは戻ってこない。
以上,説明したように,実施例28に係るNC装置の制御ソフトウェア実行システムA28は,通常のプライオリティーベースのスケジューリング方式しか持たないRTOSに,タスク走行時間の制限を行える機能を追加した方式であり,この方式に基づいてNC装置の制御ソフトウェアを実行するものである。
実施例28によれば,NC装置の制御ソフトウェア実行システムは,NC装置機能を実現するタスクの,走行時間による制限を行えるようになる。そのため,タスクに割り当てた時間を超えてタスクが走ることがなくなり,システムの構築が容易となる。
〔実施例29〕
次に,実施例29について説明する。実施例29に係るNC装置の制御ソフトウェア実行システムは,加工プログラム解析処理タスクなどを,従来例のように,1ブロック処理する毎にタスクを抜けるのではなく,加工プログラムが存在する限り,解析を続けるようにして作成しておき,解析の中断は,時間によるものとする。
実施例29に係るNC装置の制御ソフトウェア実行システムA29の,加工プログラム解析タスクの実行手順を図43に基づいて説明する。Z1は,加工プログラム解析タスクの先頭であり,指定された加工プログラムのブロックを全て解析し終えたかを判定する。
Z2は,全ての加工プログラムのブロックの解析を終えた場合の処理で,タスク終了SVCを発行して,再び起動させるまで何もしない。Z3は,未解析の加工プログラムのブロックが存在する場合の処理で,ブロックの解析を実行する。以後,全ブロックの解析が終了するまでZ1の処理を繰り返す。
以上で説明したように,実施例29に係るNC装置の制御ソフトウェア実行システムA29は,加工プログラム解析タスクを,プログラムがある限り,解析し続けるようにして,解析の中断を時間によって行う,NC装置の制御ソフトウェアを実行するものである。
上記実施例29によれば,NC装置の制御ソフトウェア実行システムA29は,加工プログラムの解析を行うタスクの走行,中断を時間によって行うようにしたので,加工プログラムのブロックの大きさによる,処理時間の余りが無くなり,特に微小線分からなる加工プログラムの解析において処理能力の向上が期待できる。さらに,タスクの作成方法として,加工プログラムのブロック毎に,終了するなどの煩雑な処理が不必要となる。
(各実施例の効果)
以上のように,この発明の各実施例に係るNC装置の制御ソフトウェア実行システムによれば,NC装置の機能を分担して実現している,タスクの制御をきめ細かく実行でき,各タスクの処理時間を最適化することができるため,無駄時間を少なくして,全体の処理時間を早めることができる。また,NC装置の制御ネットワーク実行システムの異常を,システム自体が判定できる手段を備えているため,異常事態が発生したときの回避処理も容易となる。
実施例1に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 タスク走行周期テーブルの構造を示す説明図である。 タスク走行待ちリストの構造を示す説明図である。 実施例1に係るNC装置の制御ソフトウェア実行システムがタスク走行待ちリストを作成するときの処理手順を示すフローチャートである。 走行待ちリストの構造を示す説明図である。 走行待ちリストに,ブロックを追加した後の状態を示す説明図である。 タスク起動割り込みの処理手順を示すフローチャートである。 一般の割り込みの処理手順を示すフローチャートである。 実施例2に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例2に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 基準割り込みの処理手順を示すフローチャートである。 走行時間警告割り込みの処理手順を示すフローチャートである。 一般の割り込みの処理手順を示フローチャートである。 スケジューラの処理手順を示すフローチャートである。 実施例3に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 タスク終了チック数リストの構造を示す説明図である。 タスク連続走行保証テーブルの構造を示す説明図である。 連続走行割り込みの処理手順を示すフローチャートである。 一般の割り込みの処理手順を示すフローチャートである。 実施例4に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例6に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例6に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 一般の割り込みの処理手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 割り込み処理タスクの処理手順を示すフローチャートである。 一般の割り込みの処理手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 運転モード選択処理の処理手順を示すフローチャートである。 タスク走行時間の割り当てを最適化するための処理手順を示すフローチャートである。 実施例11に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 異常判定タスクの処理手順を示すフローチャートである。 実施例12に係るNC装置制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 工具選択処理の処理手順を示すフローチャートである。 実施例13に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 速度再計算処理の処理手順を示すフローチャートである。 実施例14に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 別加工プログラムを選択する処理の処理手順を示すフローチャートである。 実施例15に係るNC装置の制御ソフトウェア実行システムにおける必要なデータ構造を示す説明図である。 タスク停止割り込み処理の処理手順を示すフローチャートである。 一般の割り込み処理の処理手順を示すフローチャートである。 スケジューラの処理手順を示すスローチャートである。 加工プログラム解析タスクの処理手順を示すフローチャートである。 実施例17(21)に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例17に係るNC装置の制御ソフトウェア実行システムがタスク走行待ちリストを作成するときの処理手順を示すフローチャートである。 タスク起動の処理手順を示すフローチャートである。 システムクロック割り込みの処理手順を示すフローチャートである。 実施例18(24,25,26,27,28)に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例18に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 基準周期リセット処理の手順を示すフローチャートである。 走行時間警告処理の手順を示すフローチャートである。 システムクロック割り込み処理の手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 実施例19に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 タスク終了クロック数リストの構造を示す説明図である。 タスク連続走行保証テーブルの構造を示す説明図である。 タスク連続走行終了処理の手順を示すフローチャートである。 システムクロック割り込み処理の手順を示すフローチャートである。 実施例20に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例22(23)に係るNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 実施例22に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 システムクロック割り込み処理の手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 システムクロック割り込み処理の手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 実施例27に係るNC装置の制御ソフトウェア実行システムにおいて必要なデータ構造を示す説明図である。 異常判定タスクの処理手順を示すフローチャートである。 実施例28に係るNC装置の制御ソフトウェア実行システムにおける必要なデータ構造を示す説明図である。 タスク停止処理の処理手順を示すフローチャートである。 システムクロック割り込み処理の手順を示すフローチャートである。 スケジューラの処理手順を示すフローチャートである。 従来におけるNC装置の制御ソフトウェア実行システムの全体構成を示すブロック図である。 NC装置の制御ソフトウェア実行システムの,加工プログラムの解析実行手順を示す説明図である。 割り込み処理を示す概念図である。 各タスク動作の時間的関係を示すタイミングチャートである。 各タスク動作の時間的関係を示すタイミングチャートである。 自動プログラム動作の状態を示す説明図である。 解析タスクの処理の処理手順を示すフローチャートである。
符号の説明
1 メインCPU,2 システムバス,3 ROM,4 RAM,5 SIOインタフェース,6 表示装置,7 キーボード,8 サーボ制御部,9 サーボアンプ,10 サーボモータ,12 外部割り込み信号,200 内部割り込み信号,201 リアルタイムクロック(プログラマブルインタラプトコントローラ),202 内部カウンタレジスタ,203 水晶発振器,204〜207 内部カウンタレジスタ,210 タスク開始チックメモ,211 基準周期,212 タスク走行状態メモ,220 タスク終了チェック数リスト,230 カウンタ値メモ,231 タスク走行テーブル,250 タスク走行標準テーブル,251 走行時間判定許容度,252 走行割合判定許容度,360 工具選択使用フラグ,362 工具選択処理スキップフラグ,363 選択工具メモ,370 工具速度決定フラグ,371 工具速度計算処理スキップフラグ,372 工具速度メモ,373 工具速度変更割合,380 加工プログラムメモ,381 加工プログラムスケジューリングテーブル,382 加工不能プログラムメモ,400 タスク停止テーブル,411 タスク停止割り込みメモ,500 システムクロック,501 システムクロック数メモ,502 システムクロック数メモ有効フラグ,503 積算システムクロック数メモ,505 走行時間警告用システムクロック数メモ,506 タスク連続走行終了クロック数メモ,507 タスク連続走行終了クロック数メモ有効フラグ,508 ディスパッチクロック数,509 ディスパッチクロック数メモ,510 タスク開始システムクロックメモ,511 基準周期,512 タスク走行状態メモ,520 タスク終了クロックブロック,521 タスク連続走行保証テーブル,530 カウンタ値メモ,531 タスク走行時間テーブル,550 タスク走行標準データ,551 走行時間判定許容度,552 走行割合判定許容度,600 タスク停止テーブル,611 タスク停止クロックメモ。

Claims (1)

  1. メモリ内部のリアルタイムオペレーティングシステム内に異なるタスクのスイッチング処理を行なうスケジューラを設け,前記スケジューラによるタスクスイッチの制御に基づき,制御ソフトウェアを実行する複数タスクの実行システムの制御方法において,
    前記システムが,タスク単位で予め指定した所定の割合で走ることを保証するために現在からの経過クロック数を計算し,前記クロック数を記録し,前記クロック数の経過後に前記タスクを走行させ,タスクスイッチの発生時に,タスク毎に経過クロック数を読み込み,タスク毎に備えた前記経過クロック数の合計を記録し,割り込み発生時の割り込み処理も優先順位の高いタスクによって処理し,各タスクの予想全走行割合を指定し,前記指定された予想全走行割合と実際の走行時間のずれの許容度を指定し,前記指定された許容度を含めた予想走行割合から予想全走行時間を計算し,前記計算された予想全走行時間と実際の走行時間との比較によってタスクの異常事態を判定し,運転を行いながらタスクの異常事態を判定することを特徴とする制御ソフトウェア実行システムの制御方法。
JP2004000406A 1994-12-26 2004-01-05 制御ソフトウェア実行システムの制御方法 Expired - Fee Related JP3607283B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004000406A JP3607283B2 (ja) 1994-12-26 2004-01-05 制御ソフトウェア実行システムの制御方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP32323394 1994-12-26
JP2004000406A JP3607283B2 (ja) 1994-12-26 2004-01-05 制御ソフトウェア実行システムの制御方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP20560095A Division JP3727382B2 (ja) 1994-12-26 1995-08-11 制御ソフトウェア実行システムの制御方法

Publications (2)

Publication Number Publication Date
JP2004171588A JP2004171588A (ja) 2004-06-17
JP3607283B2 true JP3607283B2 (ja) 2005-01-05

Family

ID=32715358

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004000406A Expired - Fee Related JP3607283B2 (ja) 1994-12-26 2004-01-05 制御ソフトウェア実行システムの制御方法

Country Status (1)

Country Link
JP (1) JP3607283B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007058541A (ja) * 2005-08-24 2007-03-08 Matsushita Electric Ind Co Ltd プロセッサ、処理方法及び処理プログラム
JP6098110B2 (ja) * 2012-10-24 2017-03-22 富士通株式会社 情報処理装置、データ保護方法、およびプログラム

Also Published As

Publication number Publication date
JP2004171588A (ja) 2004-06-17

Similar Documents

Publication Publication Date Title
JP3727382B2 (ja) 制御ソフトウェア実行システムの制御方法
KR101312886B1 (ko) 프로세스 쓰레드의 적응형 파티셔닝을 이용하는 프로세스스케쥴러
US20120029659A1 (en) Safety controller and safety control method
EP2677377B1 (en) Safety control device and safety control method
US20080235695A1 (en) Resource allocation system for jobs, resource allocation method and resource allocation program for jobs
US20040039935A1 (en) Method and device for measuring the execution time of a real task in a real time system
JP3754369B2 (ja) 自動化装置および更新方法
JP3727637B2 (ja) 制御ソフトウェア実行システムの制御方法
KR102054832B1 (ko) 컨트롤러
JP3607283B2 (ja) 制御ソフトウェア実行システムの制御方法
JP3607282B2 (ja) 制御ソフトウェア実行システムの制御方法
US9223573B2 (en) Data processing device and method of controlling the same
JP4853390B2 (ja) 計測装置
JP2636722B2 (ja) マルチタスク実行管理方式
JP2000056989A (ja) タスク設計方法
Van Den Heuvel et al. RTOS support for mixed time-triggered and event-triggered task sets
JPH04326434A (ja) ジョブ実行予測精度向上制御方法
JPH10177489A (ja) タスクのスケジュール方法
JPH04171538A (ja) 繰返し型データ処理スケジューリング方式
JPS62257547A (ja) 計算機システムの負荷測定方式
JPS583047A (ja) デ−タ処理システムにおける負荷率デ−タ表示方法
JP4650697B2 (ja) Cpuリソース管理方式
JP2944093B2 (ja) マルチプロセッサ形情報処理装置
JPH05274016A (ja) Nc加工機械のスケジュール運転システム
CN110716801A (zh) 一种具有多个竞争代理的多任务调度方法

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20041005

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041006

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees