(57)【特許請求の範囲】
【請求項１】
スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータにおける、スタックオーバーフローの検出方法であって、
前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、
起動時に、前記スタック領域の前記ワーク領域との境界領域と、前記ワーク領域の１または複数の領域とに、前記ウォッチドッグタイマキーを格納し、
前記リセット操作を行うときにはその都度、前記境界領域と前記１または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うことを特徴とするスタックオーバーフローの検出方法。
【請求項２】
前記ウォッチドッグタイマキーとして第１および第２のウォッチドッグタイマキーが設定され、
前記リセット操作は、前記第１のウォッチドッグタイマキーを所定の書き込み領域に書き込んだ後、前記第２のウォッチドッグタイマキーを前記書き込み領域に書き込む操作であることを特徴とする請求項１に記載のスタックオーバーフローの検出方法。
【請求項３】
前記境界領域と前記ワーク領域の１または複数の領域との全てに、同一のウォッチドッグタイマキーを格納することを特徴とする請求項１または請求項２記載のスタックオーバーフローの検出方法。
【請求項４】
前記境界領域と前記ワーク領域の１または複数の領域とに、それぞれ異なるウォッチドッグタイマキーを格納することを特徴とする請求項１または請求項２記載のスタックオーバーフローの検出方法。
【請求項５】
前記マイクロコンピュータは、アクチュエータ駆動制御用のマイクロコンピュータであることを特徴とする請求項１から請求項４のいずれか１項に記載のスタックオーバーフローの検出方法。
【請求項６】
前記マイクロコンピュータは、モータ駆動制御用のマイクロコンピュータであることを特徴とする請求項１から請求項４のいずれか１項に記載のスタックオーバーフローの検出方法。
【請求項７】
スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータに実行させる、スタックオーバーフローを検出するためのプログラムであって、
前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、
起動時に、前記スタック領域の前記ワーク領域との境界領域と、前記ワーク領域の１または複数の領域とに、前記ウォッチドッグタイマキーを格納するステップと、
前記リセット操作を行うときにはその都度、前記境界領域と前記１または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うステップと、を有する処理を前記マイクロコンピュータに実行させることを特徴とするプログラム。
【請求項８】
請求項７記載のプログラムを備えることを特徴とするモータシステム。
【請求項９】
請求項８記載のモータシステムを備えることを特徴とする搬送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置に関する。
【背景技術】
【０００２】
従来、例えば、メガトルクモータ（登録商標）等のモータを駆動するドライブユニットにおいては、マイクロコンピュータ上でソフトウェアを動作させてモータの駆動制御を行っている。このとき、マイクロコンピュータでは、内蔵されているＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に各制御変数等を格納するが、このＲＡＭの残りの一部分をスタック領域として使用している。このスタック領域は、ソフトウェア実行中の一時的なデータ格納領域、またはサブルーチンや割込み処理に際して戻り番地を格納する領域などとしても使用される。
【０００３】
ここで、スタック領域は通常ワーク用メモリ領域と隣接して配置される。このとき、これらスタック領域に空き領域が十分あれば問題はないが、スタック領域の空き領域が不足してしまうとスタック領域に隣接するワーク用メモリ領域もスタック領域として利用してしまい、その結果、ワーク用メモリ領域に格納されているデータが破壊されてしまう可能性がある。
【０００４】
また、コード不具合あるいはコンパイラ不具合などによってもスタック領域として確保されたメモリ領域を超えてデータの書き込みが行われてワーク用メモリ領域のデータが破壊されてしまう可能性がある。このようにワーク用メモリ領域のデータが破壊されると、このワーク用メモリ領域のデータを利用して処理を行うソフトウェアプログラムが予期せぬ動作を行う等、不具合が生じる可能性がある。
【０００５】
そのため、このスタック領域のオーバーフローを検出する方法が従来から提案されており、例えば、スタック領域の終端に既知の値を書き込んでおき、周期的にこの既知の値が変化していないことを確認することでスタックオーバーフローを検出する方法（例えば、特許文献１参照）、或いは、タスクディスパッチャの先頭にてスタックサイズ（予め設定されているスタックの使用量）を監視することによって、スタックオーバーフローを検出する方法（例えば、特許文献２参照）などが提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２２１８１号公報
【特許文献２】特開平２−２９３９３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述のように、スタック領域の終端に既知の値を書き込んでおきこの既知の値を周期的に監視する方法にあっては、既知の値を周期的に監視する処理及び異常を検出したときの対応処理をソフトウェアで実行している。同様に、タスクディスパッチャの先頭にてスタックサイズを監視する方法にあっても、スタックサイズを監視する処理及び異常を検出したときにウォッチドッグタイマリセット処理部の動作を禁止する処理をソフトウェアで実行している。
【０００８】
このようにスタック領域のオーバーフローの検出及び異常時の停止動作にソフトウェアを介在させる方法にあっては、例えばスタックオーバーフローによりマイクロコンピュータが無限ループに入ってしまいオーバーフローの検出のための処理を実行することができない場合には、結果的にスタックオーバーフローを検出することができない可能性がある。そのため、より確実性の高いスタックオーバーフローの検出方法が望まれていた。
そこで、この発明は、上記従来の未解決の問題点に着目してなされたものであり、スタックオーバーフローの検出の確実性をより向上させることの可能なスタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置を提供することを目的としている。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明の請求項１にかかるスタックオーバーフローの検出方法は、スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータにおける、スタックオーバーフローの検出方法であって、前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、起動時に、前記スタック領域の前記ワーク領域との境界領域と、前記ワーク領域の１または複数の領域とに、前記ウォッチドッグタイマキーを格納し、前記リセット操作を行うときにはその都度、前記境界領域と前記１または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うことを特徴としている。
【００１０】
なお、前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときとは、例えば、前記ウォッチドッグタイマキーではないキーを用いた操作や、予め設定した所定の手順ではなく異なる手順で操作が行われたときなど、前記所定のリセット操作とは異なる操作が行われたときをいう。
【００１１】
また、請求項２にかかるスタックオーバーフローの検出方法は、前記ウォッチドッグタイマキーとして第１および第２のウォッチドッグタイマキーが設定され、前記リセット操作は、前記第１のウォッチドッグタイマキーを所定の書き込み領域に書き込んだ後、前記第２のウォッチドッグタイマキーを前記書き込み領域に書き込む操作であることを特徴としている。
また、請求項３にかかるスタックオーバーフローの検出方法は、前記境界領域と前記ワーク領域の１または複数の領域との全てに、同一のウォッチドッグタイマキーを格納することを特徴としている。
また、請求項４にかかるスタックオーバーフローの検出方法は、前記境界領域と前記ワーク領域の１または複数の領域とに、それぞれ異なるウォッチドッグタイマキーを格納することを特徴としている。
さらに、請求項５にかかるスタックオーバーフローの検出方法は、前記マイクロコンピュータは、アクチュエータ駆動制御用のマイクロコンピュータであることを特徴としている。
さらにまた、請求項６にかかるスタックオーバーフローの検出方法は、前記マイクロコンピュータは、モータ駆動制御用のマイクロコンピュータであることを特徴としている。
また、請求項７にかかるプログラムは、スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータに実行させる、スタックオーバーフローを検出するためのプログラムであって、前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、起動時に、前記スタック領域の前記ワーク領域との境界領域と、前記ワーク領域の１または複数の領域とに、前記ウォッチドッグタイマキーを格納するステップと、前記リセット操作を行うときにはその都度、前記境界領域と前記１または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うステップと、を有する処理を前記マイクロコンピュータに実行させることを特徴としている。
さらに、請求項８にかかるモータシステムは、請求項７記載のプログラムを備えることを特徴としている。
さらにまた、請求項９にかかる搬送装置は、請求項８記載のモータシステムを備えることを特徴としている。
【発明の効果】
【００１２】
本発明によれば、スタック領域と、ワーク領域との境界領域にウォッチドッグタイマキーを格納し、ウォッチドッグタイマのリセット操作を行うときには、その都度前記境界領域に格納されたウォッチドッグタイマキーを読み出しこれを利用してリセット操作を行い、スタックオーバーフローが生じている場合にはウォッチドッグタイマキーが書き換えられてしまうためリセット操作が正常に行われずに、前記マイクロコンピュータに対して所定の異常時の処理が行われることを利用して、マイクロコンピュータに対する異常時の処理を実行するため、スタックオーバーフローの検出およびスタックオーバーフロー検出時の対応を、ソフトウェア処理のみにより行う場合に比較して、より確実に行うことができる。
【図面の簡単な説明】
【００１３】
【図１】モータシステムの一例を示すブロック図である。
【図２】図１中のＤＳＰの構成を示すブロック図である。
【図３】図２中のＲＡＭの領域図の一例である。
【図４】ＣＰＵの処理手順の一例を示すフローチャートである。
【図５】本発明のその他の実施形態におけるＲＡＭの領域図の一例である。
【図６】本発明のその他の実施形態におけるＲＡＭの領域図の一例である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態を説明する。
図１は、本発明によるスタックオーバーフローの検出方法をメガトルクモータなどのダイレクトドライブモータを用いて、例えば搬送装置などを駆動するモータシステムに適用したものである。
図１において、１はモータコアにレゾルバが組み込まれたメガトルクモータなどのモータ、２はモータ１を駆動制御するドライブユニット、３はドライブユニット２へモータ回転指令などの指令信号を出力するプログラマブルコントローラ等の上位装置である。
【００１５】
ドライブユニット２は、制御部２１とパワーアンプ部２２とから構成される。制御部２１は、マイクロコンピュータ等で構成されるＤＳＰ２１ａと上位装置３との間の入出力処理を行うＩ／Ｏ部２１ｂとを有し、ＤＳＰ２１ａは、Ｉ／Ｏ部２１ｂを介して上位装置３とデータの入出力を行って上位装置３からモータ回転指令を入力し、図示しないレゾルバからの３相のレゾルバ位置検出信号φＡＢＣを入力してこれに基づきモータ１の回転角度位置検出を行うとともに、この位置検出結果と上位装置３からのモータ回転指令とに応じて、モータ１を回転駆動させるためのモータ電流指令値を生成する。パワーアンプ部２２では制御部２１からのモータ駆動電流指令値に応じた３相のＵＶＷモータ駆動電流を生成しこれをモータ１に出力する。
ここで、前記モータ１としてのメガトルクモータは、高分解能の検出器を内蔵し高速高精度の位置決めが可能なダイレクトドライブモータであって、例えば日本精工株式会社製のメガトルクモータ  ＰＳシリーズ/ＰＮシリーズ等を適用することができる。
【００１６】
前記ＤＳＰ２１ａは、図２に示すように、ＣＰＵ本体１０１、カウンタ１０２、ＲＡＭ（記憶手段）１０３、ＲＯＭ１０４、ウォッチドッグタイマ（ＷＤＴ）１０５を備える。このＤＳＰ２１ａとして、例えば、Texas Instruments社のＤＳＰ（Digital Signal Processors）であるTMS320F2812を適用することができる。
ウォッチドッグタイマ１０５は図示しないウォッチドッグカウンタを有し、リセット操作が行われたときにはウォッチドッグカウンタをリセットし、ウォッチドッグカウンタがその最大値を超えてタイムアウトしたときには、ＣＰＵ本体１０１をリセットするためのリセット信号をＣＰＵ本体１０１に出力し、ＣＰＵ本体１０１の動作を停止させる。
【００１７】
前記ウォッチドッグタイマのリセット操作は、予め設定されたキーコードからなる第１のウォッチドッグキー（ウォッチドッグタイマキー）ＫＹ１がレジスタなどで構成される所定のウォッチドッグキー書き込み領域１０５ａに書き込まれた後、予め設定されたキーコードからなる第２のウォッチドッグキー（ウォッチドッグタイマキー）ＫＹ２が前記ウォッチドッグキー書き込み領域１０５ａに書き込まれたとき、すなわち、第１のウォッチドッグキーＫＹ１、第２のウォッチドッグキーＫＹ２がこの順に書き込まれたときに、ウォッチドッグタイマ１０５のリセット操作が行われたと判断し、ウォッチドッグカウンタをリセットする。
【００１８】
なお、前記ウォッチドッグキー書き込み領域１０５ａに第１のウォッチドッグキーＫＹ１または第２のウォッチドッグキーＫＹ２とは異なる、誤ったキーが書き込まれたとき、また、第１のウォッチドッグキーＫＹ１、或いは、第２のウォッチドッグキーＫＹ２が書き込まれたとしても、これらが、第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２の順に書き込まれない場合には、即時に、ＣＰＵ本体１０１をリセットするためのリセット信号をＣＰＵ本体１０１に出力し、ＣＰＵ本体１０１の動作を停止させる。
【００１９】
前記ＲＯＭ１０４には、前記モータ１を駆動制御するための処理プログラムや各種制御定数など各種の情報が格納されるとともに、前記ウォッチドッグタイマ１０５をリセットするための第１のウォッチドッグキーＫＹ１と第２のウォッチドッグキーＫＹ２とが格納されている。前記ＲＡＭ１０３には、図３に示すように、ソフトウェア実行中の一時的なデータ格納領域、またはサブルーチンや割込み処理に際して戻り番地を格納する領域などとして使用されるスタック領域ａ１と、ソフトウェアにおいて一時的に利用するワーク領域ａ２とが形成され、スタック領域ａ１とワーク領域ａ２とは隣接して設けられている。
【００２０】
前記スタック領域ａ１のサイズは、プログラマーがスタックサイズを見積もることにより予め決定される。さらに、本発明におけるＲＡＭ１０３には、スタック領域ａ１の、ワーク領域ａ２との境界にウォッチドッグキー領域ａ１１が形成されている。このウォッチドッグキー領域ａ１１には、前記第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２が書き込まれる。
【００２１】
そして、ＣＰＵ本体１０１は、起動時に、前記ＲＯＭ１０４に格納されている処理プログラムや各種制御定数などを読み出しこれをワーク領域ａ２に書き込むとともに、第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２を、スタック領域ａ１の、ワーク領域ａ２との境界に形成されたウォッチドッグキー領域ａ１１に書き込む。なお、ウォッチドッグキー領域ａ１１は、スタック領域ａ１とワーク領域ａ２との境界に設けてもよく、またワーク領域ａ２の、スタック領域ａ１との境界に設けてもよい。
【００２２】
そして、以後、ウォッチドッグキー領域ａ１１に格納された第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２を読み出し、これを前記ウォッチドッグタイマがタイムアウトしないタイミングで周期的に前記ウォッチドッグキー書き込み領域１０５ａに第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２の順に書き込んでリセット操作を行う。
【００２３】
本実施形態では、前記ドライブユニット２により定周期で実行されるモータ１の駆動制御処理の実行周期に同期して行い、前記駆動制御処理を開始する前のタイミングで第１のウォッチドッグキーＫＹ１の書き込みを行って、続いて前記駆動制御処理を実行し、この駆動制御の終了後、この駆動制御に続いて第２のウォッチドッグキーＫＹ２の書き込みを行う。
【００２４】
次に、上記実施形態の動作を説明する。
ＤＳＰ２１ａは、起動されると、まず初期処理を実行し、ＲＯＭ１０４からモータ１の駆動制御処理プログラムやこの駆動制御処理プログラムで必要な各種制御定数などを読み出しＲＡＭ１０３のワーク領域ａ２に書き込む。また、ＲＯＭ１０４に格納されている第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２をＲＡＭ１０３のウォッチドッグキー領域ａ１１に書き込む。
【００２５】
そして、以後、図４に示すフローチャートにしたがって、モータ１に対する駆動制御処理を定周期で実行する。このとき、まず、ステップＳ１で、ＲＡＭ１０３のウォッチドッグキー領域ａ１１に格納されている第１のウォッチドッグキーＫＹ１を読み出し、これをウォッチドッグタイマ１０５のウォッチドッグキー書き込み領域１０５ａに書き込む。次に、所定のモータ１の駆動制御処理を実行する（ステップＳ２）。
【００２６】
次いで、ステップＳ３に移行し、ＲＡＭ１０３のウォッチドッグキー領域ａ１１に格納されている第２のウォッチドッグキーＫＹ２を読み出し、これをウォッチドッグタイマ１０５のウォッチドッグキー書き込み領域１０５ａに書き込む。以後、この処理を定周期で実行する。
これによって、モータ１の駆動制御が定周期で実行されるとともに、この定周期と同期して、第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２がウォッチドッグタイマ１０５のウォッチドッグキー書き込み領域１０５ａにこの順に書き込まれる。これら第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２の書き込みは、ウォッチドッグタイマ１０５のカウンタがタイムアウトしないタイミングである。このため、ウォッチドッグタイマ１０５は、モータ１の駆動制御処理が実行される定周期のタイミングでリセット操作が行われることになる。
【００２７】
この状態で、スタック領域ａ１のスタックサイズの見積もり誤りなどによって、スタック領域ａ１がオーバーフローすると、スタック領域ａ１が満杯となった段階で、ウォッチドッグキー領域ａ１１には別のデータがスタックされるため、ウォッチドッグキー領域ａ１１のデータが書き換えられることになる。つまり、第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２が書き換えられてしまうことになる。
【００２８】
このため、次の、モータ１に対する駆動制御処理の実行タイミングでは、データの書き換えが行われたウォッチドッグキー領域ａ１１から、第１のウォッチドッグキーＫＹ１に相当するデ―タおよび第２のウォッチドッグキーＫＹ２に相当するデータが読み出され、これが第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２としてウォッチドッグキー書き込み領域１０５ａに書き込まれることになる。
【００２９】
ウォッチドッグタイマ１０５では、ウォッチドッグキー書き込み領域１０５ａに書き込まれたデータが、真の第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２ではないため、ウォッチドッグタイマ１０５のリセット操作が行われたと判断せず、この時点で、ＣＰＵ本体１０１に対してリセット信号を出力する。これによって、ＣＰＵ１０１はリセットされ動作が停止する。
このため、スタック領域１ａがオーバーフローすることによってデータの書き換えが行われたワーク領域２ａの、誤ったデータに基づいてモータ１の駆動制御処理が実行されることが回避される。
【００３０】
ここで、上述のように、スタックオーバーフローの検出に伴う処理としては、起動時にＲＯＭ１０４の第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２をＲＡＭ１０３の所定のウォッチドッグキー領域ａ１１に書き込む処理と、ウォッチドッグキー領域ａ１１に格納された第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２をウォッチドッグタイマ１０５のウォッチドッグキー書き込み領域１０５ａに定周期で書き込む処理とのみであり、スタックオーバーフローの検出およびスタックオーバーフローを検出したことに伴う対応は、ウォッチドッグタイマ１０５によりハードウェア的に行っている。そのため、スタックオーバーフローの検出およびスタックオーバーフローを検出したことに伴う対応をソフトウェア的に行う場合に比較して、より確実性を向上させることができる。
【００３１】
特に、モータ１としての、メガトルクモータなどのダイレクトドライブモータは、高精度な位置制御を行うことができる反面、ギアボックスなど間接的機構を介さずに直接駆動対象と接続されるため、回転数の変動は回転速度に直接影響することになり、高精度な位置制御が必要なシステムにおいては、多少の回転数の変動がシステムに大きく影響を与える可能性がある。そのため、上述のように、スタックオーバーフローの検出およびスタックオーバーフロー検出時の処理における確実性を向上させることができるということは有効である。
【００３２】
また、第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２を、ウォッチドッグタイマ１０５のウォッチドッグキー書き込み領域１０５ａに書き込む処理は従来から行われている処理であって、読み込み元が、ＲＯＭ１０４からＲＡＭ１０３に切り替わっただけであり、スタックオーバーフローの検出およびスタックオーバーフロー検出時の処理はウォッチドッグタイマ１０５側で行っているため、スタックオーバーフローの検出およびその対応に伴うＣＰＵ１０１の負荷の増加分は、起動時に初期処理としてＲＯＭ１０４に記憶された第１のウォッチドッグキーＫＹ１および第２のウォッチドッグキーＫＹ２を、ＲＡＭ１０３の所定のウォッチドッグキー領域１１ａに書き込む処理だけである。したがって、ＣＰＵ本体１０１の処理負荷の大幅な増加を伴うことなくスタックオーバーフローの検出の確実性を向上させることができる。
【００３３】
なお、上記実施の形態においては、図４に示すように、第１ウォッチドッグキーＫＹ１の書き込み処理および第２ウォッチドッグキーＫＹ２の書き込み処理を、モータ１の駆動制御処理の前後に行う構成とした場合について説明したがこれに限るものではない。
ウォッチドッグタイマ１０５がタイムアウトするまでの所要時間に応じて、第１ウォッチドッグキーＫＹ１の書き込み処理および第２ウォッチドッグキーＫＹ２の書き込み処理を、モータ１の駆動制御処理とは独立に実行するように構成してもよい。
【００３４】
また、上記実施の形態においては、第１ウォッチドッグキーＫＹ１および第２ウォッチドッグキーＫＹ２を用いてリセット操作を行う場合について説明したが、必ずしも２つのウォッチドッグキーを設ける必要はなく、例えば１つのウォッチドッグキーのみを用いてリセット操作を行うことも可能であり、逆に３以上のウォッチドッグキーを用いてリセット操作を行う構成とすることも可能である。
【００３５】
また、上記実施の形態では、第１ウォッチドッグキーＫＹ１および第２ウォッチドッグキーＫＹ２をこの順にウォッチドッグキー書き込み領域１０５ａに書き込む場合について説明したが、これに限るものではなくウォッチドッグキーの書き込み順も、任意に設定することができる。
また、上記実施の形態においては、図３に示すように、スタック領域ａ１の、ワーク領域ａ２との境界部分に１つのウォッチドッグキー領域ａ１１を設けた場合について説明したがこれに限るものではない。
【００３６】
例えば、図５に示すように、さらにワーク領域ａ２にもウォッチドッグキー領域ａ１２およびａ１３を設け、第１から第３のウォッチドッグキー領域ａ１１〜ａ１３のウォッチドッグキーを順番に読み出して、ウォッチドッグタイマ１０５のリセット操作を行うように構成してもよい。なお、図５では、３つのウォッチドッグキー領域ａ１１〜ａ１３を設けているが、２または４以上のウォッチドッグキー領域を設けることも可能である。
このように、複数のウォッチドッグキー領域を設けることにより、以下の効果を得ることができる。
【００３７】
すなわち、本モータシステムの動作環境が、電子機器などに囲まれた環境等、比較的ノイズが乗り易い環境にある場合には、ノイズによりスタックポインタの位置が変わる可能性があり、そのためスタック領域ａ１に設けたウォッチドッグキー領域ａ１１を飛び越えてワーク領域ａ２へのスタックが行われる可能性がある。この場合、ウォッチドッグキー領域ａ１１へのデータのスタックが行われないため、実際にはワーク領域ａ２へのスタックが行われているにも関わらず、第１ウォッチドッグキーＫＹ１および第２ウォッチドッグキーＫＹ２が書き換えられないため、スタックオーバーフローが検出されない可能性がある。
【００３８】
しかしながら、ワーク領域ａ２にもウォッチドッグキー領域を設けているため、仮に、ウォッチドッグキー領域ａ１１へのデータのスタックが行われないままスタックオーバーフローが生じている場合であっても、このスタックオーバーフローによりワーク領域ａ２に設けたウォッチドッグキー領域ａ１２、或いはウォッチドッグキー領域ａ１３へのデータのスタックが行われたときには、これらウォッチドッグキー領域ａ１２またはａ１３の第１ウォッチドッグキーＫＹ１或いは第２ウォッチドッグキーＫＹ２が書き換えられた時点で、スタックオーバーフローを検出することができる。このため、より確実にスタックオーバーフローを検出することができる。
【００３９】
このように複数のウォッチドッグキー領域を設けた場合には、これら領域から順番に、或いは任意の順番でウォッチドッグキーを読み出してウォッチドッグタイマ１０５のウォッチドッグキー書き込み領域１０５ａに書き込む構成とすればよい。
なお、ワーク領域ａ２にウォッチドッグキー領域を設けた場合には、このウォッチドッグキー領域は、ワーク領域として利用しないように構成する必要がある。
【００４０】
また、このように、複数のウォッチドッグキー領域を設けた場合、全てのウォッチドッグキー領域に同一のウォッチドッグキーを格納してもよく、また、全てのウォッチドッグキー領域に互いに異なるウォッチドッグキーを格納してもよい。
全てのウォッチドッグキー領域に同一のウォッチドッグキーを格納した場合には、上記と同様に、ウォッチドッグタイマ１０５において、第１ウォッチドッグキーＫＹ１、第２ウォッチドッグキーＫＹ２の順に、所定のウォッチドッグキー書き込み領域１０５ａに書き込まれたときにリセット操作が行われたと判断すればよい。
【００４１】
このとき、例えば、ウォッチドッグキーの書き込みを行ったにも関わらずＣＰＵ本体１０１に対してリセット信号が出力されたときには、このときの、第１ウォッチドッグキーＫＹ１、および第２ウォッチドッグキーＫＹ２としてのデータを読み出したウォッチドッグキー領域を記憶するように構成し、この記憶した情報を参照することによって、例えば第１ウォッチドッグキー領域ａ１１から読み出したデータである場合には、スタックオーバーフローが生じたと判断し、ワーク領域ａ２に設定した第２ウォッチドッグキー領域ａ１２または第３ウォッチドッグキー領域ａ１３から読み出したウォッチドッグキーである場合には、ノイズによる影響を考慮する必要があると判断することも可能である。
【００４２】
一方、ウォッチドッグキー領域毎に異なるウォッチドッグキーを格納した場合には、全てのウォッチドッグキー領域に書き込まれたウォッチドッグキーをウォッチドッグタイマ１０５側で記憶しておき、ウォッチドッグキー書き込み領域１０５ａにデータが書き込まれたとき、書き込まれたデータが、予め記憶しているウォッチドッグキーのうちの何れかと一致するときにリセット操作が行われたと判断する構成とすればよい。
【００４３】
また、このとき例えば、ウォッチドッグキー書き込み領域１０５ａに書き込まれたデータの履歴を、少なくともウォッチドッグキー領域の数相当だけ記憶する構成とし、ウォッチドッグキーの書き込みを行ったにも関わらずＣＰＵ本体１０１に対してリセット信号が出力されたときには、この記憶しておいた情報を参照することによって、例えば、ウォッチドッグキーの読み出しをアドレスの小さいもの順など各ウォッチドッグキー領域から順番に行う場合には、この読み出し順番に対応したウォッチドッグキーの並び順と、記憶しておいたウォッチドッグキー書き込み領域１０５ａに書き込まれたデータの履歴とを比較して、どのウォッチドッグキー領域のデータが書き込まれた時点でＣＰＵ本体１０１に対してリセット信号が出力されたかを判断する。そして、これが第１ウォッチドッグキー領域ａ１１から読み出したデータである場合にはスタックオーバーフローが生じたと判断し、第２ウォッチドッグキー領域ａ１２または第３ウォッチドッグキー領域ａ１３から読み出したウォッチドッグキーである場合にはノイズによる影響を考慮する必要があると判断することも可能である。
【００４４】
さらに、このとき、ワーク領域ａ２に２つ以上のウォッチドッグキー領域を設けた場合には、少なくとも、ワーク領域ａ２に設けたウォッチドッグキー領域のうち、読み出し順が最後であるウォッチドッグキー領域についてはワーク領域ａ２の他のウォッチドッグキー領域および第１ウォッチドッグキー領域ａ１１に格納されるウォッチドッグキーと異なる値に設定する。
【００４５】
このようにすることによって、例えばアドレスの小さいものから順に各ウォッチドッグキー領域から順次ウォッチドッグキーを読み出す場合には、ウォッチドッグキーの書き込みを行ったにも関わらずＣＰＵ本体１０１に対してリセット信号が出力されたときの１周期前の時点でウォッチドッグキー書き込み領域１０５ａに書き込まれたデータが、前記ワーク領域ａ２中の読み出し順が最後のウォッチドッグキー領域に格納されたウォッチドッグキーである場合には、第１ウォッチドッグキー領域ａ１１のウォッチドッグキーが異常である可能性があると判断することができるため、スタックオーバーフローが生じたと判断することができる。また、前記ワーク領域ａ２中の読み出し順が最後のウォッチドッグキー領域を除くウォッチドッグキー領域のウォッチドッグキーまたは第１ウォッチドッグキー領域ａ１１のウォッチドッグキーである場合には、ワーク領域ａ２の何れかのウォッチドッグキー領域のウォッチドッグキーが異常である可能性があると判断することができるため、ノイズによる影響を考慮する必要があると判断することができる。
【００４６】
また、ウォッチドッグキーを読み出すウォッチドッグキー領域は、前述のようにアドレスの若い順など順番に読み出す必要はなく、例えば、第１ウォッチドッグキー領域ａ１１と、ワーク領域ａ２のウォッチドッグキー領域のうちの何れか１つとを交互に読み出し、且つワーク領域ａ２については読み出すウォッチドッグキー領域を順番に切り替えるなど、任意の順番で読み出すことも可能である。
【００４７】
この場合には、例えば、ウォッチドッグキー書き込み領域１０５ａに書き込まれたデータの履歴を、少なくともウォッチドッグキー領域の数相当だけ記憶する構成とし、ウォッチドッグキーの書き込みを行ったにも関わらずＣＰＵ本体１０１に対してリセット信号が出力されたときには、この記憶しておいたウォッチドッグキー書き込み領域１０５ａに書き込まれたデータの履歴と、予め設定された読み出し順に対応するウォッチドッグキー領域に格納されたウォッチドッグキーの並び順とを比較することで、どのウォッチドッグキー領域のデータが書き込まれた時点でタイムアウトが生じたかを判断するようにすればよい。
【００４８】
また、図６に示すように、スタック領域ａ１のワーク領域ａ２との境界にウォッチドッグキー領域ａ１１を設けるだけでなく、さらに、スタック領域ａ１に、予め設定したキーコードからなる監視キーを格納する監視キー領域ａ２１を設け、この監視キー領域ａ２１に格納された監視キーが変化しないことを定期的に監視する構成としてもよい。なお、監視キー領域ａ２１は、スタック領域ａ１の例えば、８割、或いは９割程度書き込みが行われたときの領域に相当する位置に設定される。
【００４９】
このように、監視キー領域ａ２１を設けることによって、監視キー領域ａ２１にスタックデータが書き込まれ監視キーが変更された時点で、監視キーが書き換えられたことが検出されることになるため、この時点でスタックオーバーフローが生じる可能性があることを検出することができる。したがって、例えば、監視キーでの監視の結果、監視キーの書き換えが検出されたときに監視キーの書き換えが行われたことを記憶しておく構成とすることによって、実際にはウォッチドッグキー領域ａ１１の書き換えは行われなかったものの、スタック領域ａ１の８割或いは９割程度が利用されたことを認識することができる。そのため、この情報を収集することによって、例えば新たなモータシステムにおいてスタックサイズを決定する際の参考情報として活用することができる。
なお、この監視キー領域も、スタック領域に複数設けてもよい。
【００５０】
また、上記実施の形態においては、モータ１としてメガトルクモータなどのダイレクトドライブモータを用いて、例えば搬送装置などを駆動するモータシステムに適用した場合について説明したが、搬送装置や、メガトルクモータなどのダイレクトドライブモータに限るものではなく、モータの回転力を、ギアボックスなど間接的機構を介して駆動対象に伝達するようにしたモータシステムであっても適用することができる。
【００５１】
さらに、上記実施の形態においては、モータシステムのマイクロコンピュータに適用した場合について説明したが、これに限るものではなく、例えばアクチュエータを駆動制御する制御システムのマイクロコンピュータに適用することも可能であり、要は、スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行いつつ所定の処理を行うマイクロコンピュータであれば適用することができる。
【符号の説明】
【００５２】
１  モータ
２  ドライブユニット
１０１  ＣＰＵ本体
１０３  ＲＡＭ（記憶手段）
１０４  ＲＯＭ
１０５  ウォッチドッグタイマ
１０５ａ  ウォッチドッグキー書き込み領域
ＫＹ１  第１ウォッチドッグキー（ウォッチドッグタイマキー）
ＫＹ２  第２ウォッチドッグキー（ウォッチドッグタイマキー）
【図１】
0005636943.tif 000002
【図２】
0005636943.tif 000003
【図３】
0005636943.tif 000004
【図４】
0005636943.tif 000005
【図５】
0005636943.tif 000006
【図６】
0005636943.tif 000007