JP5636943B2 - スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置 - Google Patents

スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置 Download PDF

Info

Publication number
JP5636943B2
JP5636943B2 JP2010280986A JP2010280986A JP5636943B2 JP 5636943 B2 JP5636943 B2 JP 5636943B2 JP 2010280986 A JP2010280986 A JP 2010280986A JP 2010280986 A JP2010280986 A JP 2010280986A JP 5636943 B2 JP5636943 B2 JP 5636943B2
Authority
JP
Japan
Prior art keywords
area
key
watchdog
stack
watchdog timer
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.)
Active
Application number
JP2010280986A
Other languages
English (en)
Other versions
JP2012128743A (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.)
NSK Ltd
Original Assignee
NSK Ltd
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 NSK Ltd filed Critical NSK Ltd
Priority to JP2010280986A priority Critical patent/JP5636943B2/ja
Publication of JP2012128743A publication Critical patent/JP2012128743A/ja
Application granted granted Critical
Publication of JP5636943B2 publication Critical patent/JP5636943B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置に関する。
従来、例えば、メガトルクモータ(登録商標)等のモータを駆動するドライブユニットにおいては、マイクロコンピュータ上でソフトウェアを動作させてモータの駆動制御を行っている。このとき、マイクロコンピュータでは、内蔵されているRAM(Random Access Memory)に各制御変数等を格納するが、このRAMの残りの一部分をスタック領域として使用している。このスタック領域は、ソフトウェア実行中の一時的なデータ格納領域、またはサブルーチンや割込み処理に際して戻り番地を格納する領域などとしても使用される。
ここで、スタック領域は通常ワーク用メモリ領域と隣接して配置される。このとき、これらスタック領域に空き領域が十分あれば問題はないが、スタック領域の空き領域が不足してしまうとスタック領域に隣接するワーク用メモリ領域もスタック領域として利用してしまい、その結果、ワーク用メモリ領域に格納されているデータが破壊されてしまう可能性がある。
また、コード不具合あるいはコンパイラ不具合などによってもスタック領域として確保されたメモリ領域を超えてデータの書き込みが行われてワーク用メモリ領域のデータが破壊されてしまう可能性がある。このようにワーク用メモリ領域のデータが破壊されると、このワーク用メモリ領域のデータを利用して処理を行うソフトウェアプログラムが予期せぬ動作を行う等、不具合が生じる可能性がある。
そのため、このスタック領域のオーバーフローを検出する方法が従来から提案されており、例えば、スタック領域の終端に既知の値を書き込んでおき、周期的にこの既知の値が変化していないことを確認することでスタックオーバーフローを検出する方法(例えば、特許文献1参照)、或いは、タスクディスパッチャの先頭にてスタックサイズ(予め設定されているスタックの使用量)を監視することによって、スタックオーバーフローを検出する方法(例えば、特許文献2参照)などが提案されている。
特開2003−22181号公報 特開平2−293939号公報
しかしながら、上述のように、スタック領域の終端に既知の値を書き込んでおきこの既知の値を周期的に監視する方法にあっては、既知の値を周期的に監視する処理及び異常を検出したときの対応処理をソフトウェアで実行している。同様に、タスクディスパッチャの先頭にてスタックサイズを監視する方法にあっても、スタックサイズを監視する処理及び異常を検出したときにウォッチドッグタイマリセット処理部の動作を禁止する処理をソフトウェアで実行している。
このようにスタック領域のオーバーフローの検出及び異常時の停止動作にソフトウェアを介在させる方法にあっては、例えばスタックオーバーフローによりマイクロコンピュータが無限ループに入ってしまいオーバーフローの検出のための処理を実行することができない場合には、結果的にスタックオーバーフローを検出することができない可能性がある。そのため、より確実性の高いスタックオーバーフローの検出方法が望まれていた。
そこで、この発明は、上記従来の未解決の問題点に着目してなされたものであり、スタックオーバーフローの検出の確実性をより向上させることの可能なスタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置を提供することを目的としている。
上記目的を達成するために、本発明の請求項1にかかるスタックオーバーフローの検出方法は、スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータにおける、スタックオーバーフローの検出方法であって、前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、起動時に、前記スタック領域前記ワーク領域との境界領域と、前記ワーク領域の1または複数の領域とに、前記ウォッチドッグタイマキーを格納し、前記リセット操作を行うときにはその都度、前記境界領域と前記1または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うことを特徴としている。
なお、前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときとは、例えば、前記ウォッチドッグタイマキーではないキーを用いた操作や、予め設定した所定の手順ではなく異なる手順で操作が行われたときなど、前記所定のリセット操作とは異なる操作が行われたときをいう。
また、請求項にかかるスタックオーバーフローの検出方法は、前記ウォッチドッグタイマキーとして第1および第2のウォッチドッグタイマキーが設定され、前記リセット操作は、前記第1のウォッチドッグタイマキーを所定の書き込み領域に書き込んだ後、前記第2のウォッチドッグタイマキーを前記書き込み領域に書き込む操作であることを特徴としている。
また、請求項3にかかるスタックオーバーフローの検出方法は、前記境界領域と前記ワーク領域の1または複数の領域との全てに、同一のウォッチドッグタイマキーを格納することを特徴としている。
また、請求項4にかかるスタックオーバーフローの検出方法は、前記境界領域と前記ワーク領域の1または複数の領域とに、それぞれ異なるウォッチドッグタイマキーを格納することを特徴としている。
さらに、請求項にかかるスタックオーバーフローの検出方法は、前記マイクロコンピュータは、アクチュエータ駆動制御用のマイクロコンピュータであることを特徴としている。
さらにまた、請求項にかかるスタックオーバーフローの検出方法は、前記マイクロコンピュータは、モータ駆動制御用のマイクロコンピュータであることを特徴としている。
また、請求項7にかかるプログラムは、スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータに実行させる、スタックオーバーフローを検出するためのプログラムであって、前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、起動時に、前記スタック領域の前記ワーク領域との境界領域と、前記ワーク領域の1または複数の領域とに、前記ウォッチドッグタイマキーを格納するステップと、前記リセット操作を行うときにはその都度、前記境界領域と前記1または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うステップと、を有する処理を前記マイクロコンピュータに実行させることを特徴としている。
さらに、請求項8にかかるモータシステムは、請求項7記載のプログラムを備えることを特徴としている。
さらにまた、請求項9にかかる搬送装置は、請求項8記載のモータシステムを備えることを特徴としている。
本発明によれば、スタック領域と、ワーク領域との境界領域にウォッチドッグタイマキーを格納し、ウォッチドッグタイマのリセット操作を行うときには、その都度前記境界領域に格納されたウォッチドッグタイマキーを読み出しこれを利用してリセット操作を行い、スタックオーバーフローが生じている場合にはウォッチドッグタイマキーが書き換えられてしまうためリセット操作が正常に行われずに、前記マイクロコンピュータに対して所定の異常時の処理が行われることを利用して、マイクロコンピュータに対する異常時の処理を実行するため、スタックオーバーフローの検出およびスタックオーバーフロー検出時の対応を、ソフトウェア処理のみにより行う場合に比較して、より確実に行うことができる。
モータシステムの一例を示すブロック図である。 図1中のDSPの構成を示すブロック図である。 図2中のRAMの領域図の一例である。 CPUの処理手順の一例を示すフローチャートである。 本発明のその他の実施形態におけるRAMの領域図の一例である。 本発明のその他の実施形態におけるRAMの領域図の一例である。
以下、本発明の実施の形態を説明する。
図1は、本発明によるスタックオーバーフローの検出方法をメガトルクモータなどのダイレクトドライブモータを用いて、例えば搬送装置などを駆動するモータシステムに適用したものである。
図1において、1はモータコアにレゾルバが組み込まれたメガトルクモータなどのモータ、2はモータ1を駆動制御するドライブユニット、3はドライブユニット2へモータ回転指令などの指令信号を出力するプログラマブルコントローラ等の上位装置である。
ドライブユニット2は、制御部21とパワーアンプ部22とから構成される。制御部21は、マイクロコンピュータ等で構成されるDSP21aと上位装置3との間の入出力処理を行うI/O部21bとを有し、DSP21aは、I/O部21bを介して上位装置3とデータの入出力を行って上位装置3からモータ回転指令を入力し、図示しないレゾルバからの3相のレゾルバ位置検出信号φABCを入力してこれに基づきモータ1の回転角度位置検出を行うとともに、この位置検出結果と上位装置3からのモータ回転指令とに応じて、モータ1を回転駆動させるためのモータ電流指令値を生成する。パワーアンプ部22では制御部21からのモータ駆動電流指令値に応じた3相のUVWモータ駆動電流を生成しこれをモータ1に出力する。
ここで、前記モータ1としてのメガトルクモータは、高分解能の検出器を内蔵し高速高精度の位置決めが可能なダイレクトドライブモータであって、例えば日本精工株式会社製のメガトルクモータ PSシリーズ/PNシリーズ等を適用することができる。
前記DSP21aは、図2に示すように、CPU本体101、カウンタ102、RAM(記憶手段)103、ROM104、ウォッチドッグタイマ(WDT)105を備える。このDSP21aとして、例えば、Texas Instruments社のDSP(Digital Signal Processors)であるTMS320F2812を適用することができる。
ウォッチドッグタイマ105は図示しないウォッチドッグカウンタを有し、リセット操作が行われたときにはウォッチドッグカウンタをリセットし、ウォッチドッグカウンタがその最大値を超えてタイムアウトしたときには、CPU本体101をリセットするためのリセット信号をCPU本体101に出力し、CPU本体101の動作を停止させる。
前記ウォッチドッグタイマのリセット操作は、予め設定されたキーコードからなる第1のウォッチドッグキー(ウォッチドッグタイマキー)KY1がレジスタなどで構成される所定のウォッチドッグキー書き込み領域105aに書き込まれた後、予め設定されたキーコードからなる第2のウォッチドッグキー(ウォッチドッグタイマキー)KY2が前記ウォッチドッグキー書き込み領域105aに書き込まれたとき、すなわち、第1のウォッチドッグキーKY1、第2のウォッチドッグキーKY2がこの順に書き込まれたときに、ウォッチドッグタイマ105のリセット操作が行われたと判断し、ウォッチドッグカウンタをリセットする。
なお、前記ウォッチドッグキー書き込み領域105aに第1のウォッチドッグキーKY1または第2のウォッチドッグキーKY2とは異なる、誤ったキーが書き込まれたとき、また、第1のウォッチドッグキーKY1、或いは、第2のウォッチドッグキーKY2が書き込まれたとしても、これらが、第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2の順に書き込まれない場合には、即時に、CPU本体101をリセットするためのリセット信号をCPU本体101に出力し、CPU本体101の動作を停止させる。
前記ROM104には、前記モータ1を駆動制御するための処理プログラムや各種制御定数など各種の情報が格納されるとともに、前記ウォッチドッグタイマ105をリセットするための第1のウォッチドッグキーKY1と第2のウォッチドッグキーKY2とが格納されている。前記RAM103には、図3に示すように、ソフトウェア実行中の一時的なデータ格納領域、またはサブルーチンや割込み処理に際して戻り番地を格納する領域などとして使用されるスタック領域a1と、ソフトウェアにおいて一時的に利用するワーク領域a2とが形成され、スタック領域a1とワーク領域a2とは隣接して設けられている。
前記スタック領域a1のサイズは、プログラマーがスタックサイズを見積もることにより予め決定される。さらに、本発明におけるRAM103には、スタック領域a1の、ワーク領域a2との境界にウォッチドッグキー領域a11が形成されている。このウォッチドッグキー領域a11には、前記第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2が書き込まれる。
そして、CPU本体101は、起動時に、前記ROM104に格納されている処理プログラムや各種制御定数などを読み出しこれをワーク領域a2に書き込むとともに、第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2を、スタック領域a1の、ワーク領域a2との境界に形成されたウォッチドッグキー領域a11に書き込む。なお、ウォッチドッグキー領域a11は、スタック領域a1とワーク領域a2との境界に設けてもよく、またワーク領域a2の、スタック領域a1との境界に設けてもよい。
そして、以後、ウォッチドッグキー領域a11に格納された第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2を読み出し、これを前記ウォッチドッグタイマがタイムアウトしないタイミングで周期的に前記ウォッチドッグキー書き込み領域105aに第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2の順に書き込んでリセット操作を行う。
本実施形態では、前記ドライブユニット2により定周期で実行されるモータ1の駆動制御処理の実行周期に同期して行い、前記駆動制御処理を開始する前のタイミングで第1のウォッチドッグキーKY1の書き込みを行って、続いて前記駆動制御処理を実行し、この駆動制御の終了後、この駆動制御に続いて第2のウォッチドッグキーKY2の書き込みを行う。
次に、上記実施形態の動作を説明する。
DSP21aは、起動されると、まず初期処理を実行し、ROM104からモータ1の駆動制御処理プログラムやこの駆動制御処理プログラムで必要な各種制御定数などを読み出しRAM103のワーク領域a2に書き込む。また、ROM104に格納されている第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2をRAM103のウォッチドッグキー領域a11に書き込む。
そして、以後、図4に示すフローチャートにしたがって、モータ1に対する駆動制御処理を定周期で実行する。このとき、まず、ステップS1で、RAM103のウォッチドッグキー領域a11に格納されている第1のウォッチドッグキーKY1を読み出し、これをウォッチドッグタイマ105のウォッチドッグキー書き込み領域105aに書き込む。次に、所定のモータ1の駆動制御処理を実行する(ステップS2)。
次いで、ステップS3に移行し、RAM103のウォッチドッグキー領域a11に格納されている第2のウォッチドッグキーKY2を読み出し、これをウォッチドッグタイマ105のウォッチドッグキー書き込み領域105aに書き込む。以後、この処理を定周期で実行する。
これによって、モータ1の駆動制御が定周期で実行されるとともに、この定周期と同期して、第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2がウォッチドッグタイマ105のウォッチドッグキー書き込み領域105aにこの順に書き込まれる。これら第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2の書き込みは、ウォッチドッグタイマ105のカウンタがタイムアウトしないタイミングである。このため、ウォッチドッグタイマ105は、モータ1の駆動制御処理が実行される定周期のタイミングでリセット操作が行われることになる。
この状態で、スタック領域a1のスタックサイズの見積もり誤りなどによって、スタック領域a1がオーバーフローすると、スタック領域a1が満杯となった段階で、ウォッチドッグキー領域a11には別のデータがスタックされるため、ウォッチドッグキー領域a11のデータが書き換えられることになる。つまり、第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2が書き換えられてしまうことになる。
このため、次の、モータ1に対する駆動制御処理の実行タイミングでは、データの書き換えが行われたウォッチドッグキー領域a11から、第1のウォッチドッグキーKY1に相当するデ―タおよび第2のウォッチドッグキーKY2に相当するデータが読み出され、これが第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2としてウォッチドッグキー書き込み領域105aに書き込まれることになる。
ウォッチドッグタイマ105では、ウォッチドッグキー書き込み領域105aに書き込まれたデータが、真の第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2ではないため、ウォッチドッグタイマ105のリセット操作が行われたと判断せず、この時点で、CPU本体101に対してリセット信号を出力する。これによって、CPU101はリセットされ動作が停止する。
このため、スタック領域1aがオーバーフローすることによってデータの書き換えが行われたワーク領域2aの、誤ったデータに基づいてモータ1の駆動制御処理が実行されることが回避される。
ここで、上述のように、スタックオーバーフローの検出に伴う処理としては、起動時にROM104の第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2をRAM103の所定のウォッチドッグキー領域a11に書き込む処理と、ウォッチドッグキー領域a11に格納された第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2をウォッチドッグタイマ105のウォッチドッグキー書き込み領域105aに定周期で書き込む処理とのみであり、スタックオーバーフローの検出およびスタックオーバーフローを検出したことに伴う対応は、ウォッチドッグタイマ105によりハードウェア的に行っている。そのため、スタックオーバーフローの検出およびスタックオーバーフローを検出したことに伴う対応をソフトウェア的に行う場合に比較して、より確実性を向上させることができる。
特に、モータ1としての、メガトルクモータなどのダイレクトドライブモータは、高精度な位置制御を行うことができる反面、ギアボックスなど間接的機構を介さずに直接駆動対象と接続されるため、回転数の変動は回転速度に直接影響することになり、高精度な位置制御が必要なシステムにおいては、多少の回転数の変動がシステムに大きく影響を与える可能性がある。そのため、上述のように、スタックオーバーフローの検出およびスタックオーバーフロー検出時の処理における確実性を向上させることができるということは有効である。
また、第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2を、ウォッチドッグタイマ105のウォッチドッグキー書き込み領域105aに書き込む処理は従来から行われている処理であって、読み込み元が、ROM104からRAM103に切り替わっただけであり、スタックオーバーフローの検出およびスタックオーバーフロー検出時の処理はウォッチドッグタイマ105側で行っているため、スタックオーバーフローの検出およびその対応に伴うCPU101の負荷の増加分は、起動時に初期処理としてROM104に記憶された第1のウォッチドッグキーKY1および第2のウォッチドッグキーKY2を、RAM103の所定のウォッチドッグキー領域11aに書き込む処理だけである。したがって、CPU本体101の処理負荷の大幅な増加を伴うことなくスタックオーバーフローの検出の確実性を向上させることができる。
なお、上記実施の形態においては、図4に示すように、第1ウォッチドッグキーKY1の書き込み処理および第2ウォッチドッグキーKY2の書き込み処理を、モータ1の駆動制御処理の前後に行う構成とした場合について説明したがこれに限るものではない。
ウォッチドッグタイマ105がタイムアウトするまでの所要時間に応じて、第1ウォッチドッグキーKY1の書き込み処理および第2ウォッチドッグキーKY2の書き込み処理を、モータ1の駆動制御処理とは独立に実行するように構成してもよい。
また、上記実施の形態においては、第1ウォッチドッグキーKY1および第2ウォッチドッグキーKY2を用いてリセット操作を行う場合について説明したが、必ずしも2つのウォッチドッグキーを設ける必要はなく、例えば1つのウォッチドッグキーのみを用いてリセット操作を行うことも可能であり、逆に3以上のウォッチドッグキーを用いてリセット操作を行う構成とすることも可能である。
また、上記実施の形態では、第1ウォッチドッグキーKY1および第2ウォッチドッグキーKY2をこの順にウォッチドッグキー書き込み領域105aに書き込む場合について説明したが、これに限るものではなくウォッチドッグキーの書き込み順も、任意に設定することができる。
また、上記実施の形態においては、図3に示すように、スタック領域a1の、ワーク領域a2との境界部分に1つのウォッチドッグキー領域a11を設けた場合について説明したがこれに限るものではない。
例えば、図5に示すように、さらにワーク領域a2にもウォッチドッグキー領域a12およびa13を設け、第1から第3のウォッチドッグキー領域a11〜a13のウォッチドッグキーを順番に読み出して、ウォッチドッグタイマ105のリセット操作を行うように構成してもよい。なお、図5では、3つのウォッチドッグキー領域a11〜a13を設けているが、2または4以上のウォッチドッグキー領域を設けることも可能である。
このように、複数のウォッチドッグキー領域を設けることにより、以下の効果を得ることができる。
すなわち、本モータシステムの動作環境が、電子機器などに囲まれた環境等、比較的ノイズが乗り易い環境にある場合には、ノイズによりスタックポインタの位置が変わる可能性があり、そのためスタック領域a1に設けたウォッチドッグキー領域a11を飛び越えてワーク領域a2へのスタックが行われる可能性がある。この場合、ウォッチドッグキー領域a11へのデータのスタックが行われないため、実際にはワーク領域a2へのスタックが行われているにも関わらず、第1ウォッチドッグキーKY1および第2ウォッチドッグキーKY2が書き換えられないため、スタックオーバーフローが検出されない可能性がある。
しかしながら、ワーク領域a2にもウォッチドッグキー領域を設けているため、仮に、ウォッチドッグキー領域a11へのデータのスタックが行われないままスタックオーバーフローが生じている場合であっても、このスタックオーバーフローによりワーク領域a2に設けたウォッチドッグキー領域a12、或いはウォッチドッグキー領域a13へのデータのスタックが行われたときには、これらウォッチドッグキー領域a12またはa13の第1ウォッチドッグキーKY1或いは第2ウォッチドッグキーKY2が書き換えられた時点で、スタックオーバーフローを検出することができる。このため、より確実にスタックオーバーフローを検出することができる。
このように複数のウォッチドッグキー領域を設けた場合には、これら領域から順番に、或いは任意の順番でウォッチドッグキーを読み出してウォッチドッグタイマ105のウォッチドッグキー書き込み領域105aに書き込む構成とすればよい。
なお、ワーク領域a2にウォッチドッグキー領域を設けた場合には、このウォッチドッグキー領域は、ワーク領域として利用しないように構成する必要がある。
また、このように、複数のウォッチドッグキー領域を設けた場合、全てのウォッチドッグキー領域に同一のウォッチドッグキーを格納してもよく、また、全てのウォッチドッグキー領域に互いに異なるウォッチドッグキーを格納してもよい。
全てのウォッチドッグキー領域に同一のウォッチドッグキーを格納した場合には、上記と同様に、ウォッチドッグタイマ105において、第1ウォッチドッグキーKY1、第2ウォッチドッグキーKY2の順に、所定のウォッチドッグキー書き込み領域105aに書き込まれたときにリセット操作が行われたと判断すればよい。
このとき、例えば、ウォッチドッグキーの書き込みを行ったにも関わらずCPU本体101に対してリセット信号が出力されたときには、このときの、第1ウォッチドッグキーKY1、および第2ウォッチドッグキーKY2としてのデータを読み出したウォッチドッグキー領域を記憶するように構成し、この記憶した情報を参照することによって、例えば第1ウォッチドッグキー領域a11から読み出したデータである場合には、スタックオーバーフローが生じたと判断し、ワーク領域a2に設定した第2ウォッチドッグキー領域a12または第3ウォッチドッグキー領域a13から読み出したウォッチドッグキーである場合には、ノイズによる影響を考慮する必要があると判断することも可能である。
一方、ウォッチドッグキー領域毎に異なるウォッチドッグキーを格納した場合には、全てのウォッチドッグキー領域に書き込まれたウォッチドッグキーをウォッチドッグタイマ105側で記憶しておき、ウォッチドッグキー書き込み領域105aにデータが書き込まれたとき、書き込まれたデータが、予め記憶しているウォッチドッグキーのうちの何れかと一致するときにリセット操作が行われたと判断する構成とすればよい。
また、このとき例えば、ウォッチドッグキー書き込み領域105aに書き込まれたデータの履歴を、少なくともウォッチドッグキー領域の数相当だけ記憶する構成とし、ウォッチドッグキーの書き込みを行ったにも関わらずCPU本体101に対してリセット信号が出力されたときには、この記憶しておいた情報を参照することによって、例えば、ウォッチドッグキーの読み出しをアドレスの小さいもの順など各ウォッチドッグキー領域から順番に行う場合には、この読み出し順番に対応したウォッチドッグキーの並び順と、記憶しておいたウォッチドッグキー書き込み領域105aに書き込まれたデータの履歴とを比較して、どのウォッチドッグキー領域のデータが書き込まれた時点でCPU本体101に対してリセット信号が出力されたかを判断する。そして、これが第1ウォッチドッグキー領域a11から読み出したデータである場合にはスタックオーバーフローが生じたと判断し、第2ウォッチドッグキー領域a12または第3ウォッチドッグキー領域a13から読み出したウォッチドッグキーである場合にはノイズによる影響を考慮する必要があると判断することも可能である。
さらに、このとき、ワーク領域a2に2つ以上のウォッチドッグキー領域を設けた場合には、少なくとも、ワーク領域a2に設けたウォッチドッグキー領域のうち、読み出し順が最後であるウォッチドッグキー領域についてはワーク領域a2の他のウォッチドッグキー領域および第1ウォッチドッグキー領域a11に格納されるウォッチドッグキーと異なる値に設定する。
このようにすることによって、例えばアドレスの小さいものから順に各ウォッチドッグキー領域から順次ウォッチドッグキーを読み出す場合には、ウォッチドッグキーの書き込みを行ったにも関わらずCPU本体101に対してリセット信号が出力されたときの1周期前の時点でウォッチドッグキー書き込み領域105aに書き込まれたデータが、前記ワーク領域a2中の読み出し順が最後のウォッチドッグキー領域に格納されたウォッチドッグキーである場合には、第1ウォッチドッグキー領域a11のウォッチドッグキーが異常である可能性があると判断することができるため、スタックオーバーフローが生じたと判断することができる。また、前記ワーク領域a2中の読み出し順が最後のウォッチドッグキー領域を除くウォッチドッグキー領域のウォッチドッグキーまたは第1ウォッチドッグキー領域a11のウォッチドッグキーである場合には、ワーク領域a2の何れかのウォッチドッグキー領域のウォッチドッグキーが異常である可能性があると判断することができるため、ノイズによる影響を考慮する必要があると判断することができる。
また、ウォッチドッグキーを読み出すウォッチドッグキー領域は、前述のようにアドレスの若い順など順番に読み出す必要はなく、例えば、第1ウォッチドッグキー領域a11と、ワーク領域a2のウォッチドッグキー領域のうちの何れか1つとを交互に読み出し、且つワーク領域a2については読み出すウォッチドッグキー領域を順番に切り替えるなど、任意の順番で読み出すことも可能である。
この場合には、例えば、ウォッチドッグキー書き込み領域105aに書き込まれたデータの履歴を、少なくともウォッチドッグキー領域の数相当だけ記憶する構成とし、ウォッチドッグキーの書き込みを行ったにも関わらずCPU本体101に対してリセット信号が出力されたときには、この記憶しておいたウォッチドッグキー書き込み領域105aに書き込まれたデータの履歴と、予め設定された読み出し順に対応するウォッチドッグキー領域に格納されたウォッチドッグキーの並び順とを比較することで、どのウォッチドッグキー領域のデータが書き込まれた時点でタイムアウトが生じたかを判断するようにすればよい。
また、図6に示すように、スタック領域a1のワーク領域a2との境界にウォッチドッグキー領域a11を設けるだけでなく、さらに、スタック領域a1に、予め設定したキーコードからなる監視キーを格納する監視キー領域a21を設け、この監視キー領域a21に格納された監視キーが変化しないことを定期的に監視する構成としてもよい。なお、監視キー領域a21は、スタック領域a1の例えば、8割、或いは9割程度書き込みが行われたときの領域に相当する位置に設定される。
このように、監視キー領域a21を設けることによって、監視キー領域a21にスタックデータが書き込まれ監視キーが変更された時点で、監視キーが書き換えられたことが検出されることになるため、この時点でスタックオーバーフローが生じる可能性があることを検出することができる。したがって、例えば、監視キーでの監視の結果、監視キーの書き換えが検出されたときに監視キーの書き換えが行われたことを記憶しておく構成とすることによって、実際にはウォッチドッグキー領域a11の書き換えは行われなかったものの、スタック領域a1の8割或いは9割程度が利用されたことを認識することができる。そのため、この情報を収集することによって、例えば新たなモータシステムにおいてスタックサイズを決定する際の参考情報として活用することができる。
なお、この監視キー領域も、スタック領域に複数設けてもよい。
また、上記実施の形態においては、モータ1としてメガトルクモータなどのダイレクトドライブモータを用いて、例えば搬送装置などを駆動するモータシステムに適用した場合について説明したが、搬送装置や、メガトルクモータなどのダイレクトドライブモータに限るものではなく、モータの回転力を、ギアボックスなど間接的機構を介して駆動対象に伝達するようにしたモータシステムであっても適用することができる。
さらに、上記実施の形態においては、モータシステムのマイクロコンピュータに適用した場合について説明したが、これに限るものではなく、例えばアクチュエータを駆動制御する制御システムのマイクロコンピュータに適用することも可能であり、要は、スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行いつつ所定の処理を行うマイクロコンピュータであれば適用することができる。
1 モータ
2 ドライブユニット
101 CPU本体
103 RAM(記憶手段)
104 ROM
105 ウォッチドッグタイマ
105a ウォッチドッグキー書き込み領域
KY1 第1ウォッチドッグキー(ウォッチドッグタイマキー)
KY2 第2ウォッチドッグキー(ウォッチドッグタイマキー)

Claims (9)

  1. スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータにおける、スタックオーバーフローの検出方法であって、
    前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、
    起動時に、前記スタック領域前記ワーク領域との境界領域と、前記ワーク領域の1または複数の領域とに、前記ウォッチドッグタイマキーを格納し、
    前記リセット操作を行うときにはその都度、前記境界領域と前記1または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うことを特徴とするスタックオーバーフローの検出方法。
  2. 前記ウォッチドッグタイマキーとして第1および第2のウォッチドッグタイマキーが設定され、
    前記リセット操作は、前記第1のウォッチドッグタイマキーを所定の書き込み領域に書き込んだ後、前記第2のウォッチドッグタイマキーを前記書き込み領域に書き込む操作であることを特徴とする請求項1に記載のスタックオーバーフローの検出方法。
  3. 前記境界領域と前記ワーク領域の1または複数の領域との全てに、同一のウォッチドッグタイマキーを格納することを特徴とする請求項1または請求項2記載のスタックオーバーフローの検出方法。
  4. 前記境界領域と前記ワーク領域の1または複数の領域とに、それぞれ異なるウォッチドッグタイマキーを格納することを特徴とする請求項1または請求項2記載のスタックオーバーフローの検出方法。
  5. 前記マイクロコンピュータは、アクチュエータ駆動制御用のマイクロコンピュータであることを特徴とする請求項1から請求項4のいずれか1項に記載のスタックオーバーフローの検出方法。
  6. 前記マイクロコンピュータは、モータ駆動制御用のマイクロコンピュータであることを特徴とする請求項1から請求項のいずれか1項に記載のスタックオーバーフローの検出方法。
  7. スタック領域と当該スタック領域に隣接したワーク領域とを備えた記憶手段を有し、前記スタック領域へのデータの書き込みを行い所定の処理を実行するマイクロコンピュータに実行させる、スタックオーバーフローを検出するためのプログラムであって、
    前記マイクロコンピュータは、予め設定されたウォッチドッグタイマキーを用いてリセット操作が行われるとともにタイムアウトしたときまたは前記ウォッチドッグタイマキーを用いた所定のリセット操作が行われないときに前記マイクロコンピュータに対して所定の異常時の処理を実行するウォッチドッグタイマを有し、
    起動時に、前記スタック領域の前記ワーク領域との境界領域と、前記ワーク領域の1または複数の領域とに、前記ウォッチドッグタイマキーを格納するステップと、
    前記リセット操作を行うときにはその都度、前記境界領域と前記1または複数の領域とのうち前記ウォッチドッグタイマキーを読み出す領域を順次切り替え、当該領域から前記ウォッチドッグタイマキーを読み出して前記リセット操作を行うステップと、を有する処理を前記マイクロコンピュータに実行させることを特徴とするプログラム。
  8. 請求項7記載のプログラムを備えることを特徴とするモータシステム。
  9. 請求項8記載のモータシステムを備えることを特徴とする搬送装置。
JP2010280986A 2010-12-16 2010-12-16 スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置 Active JP5636943B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010280986A JP5636943B2 (ja) 2010-12-16 2010-12-16 スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010280986A JP5636943B2 (ja) 2010-12-16 2010-12-16 スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置

Publications (2)

Publication Number Publication Date
JP2012128743A JP2012128743A (ja) 2012-07-05
JP5636943B2 true JP5636943B2 (ja) 2014-12-10

Family

ID=46645666

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010280986A Active JP5636943B2 (ja) 2010-12-16 2010-12-16 スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置

Country Status (1)

Country Link
JP (1) JP5636943B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729240B (zh) * 2017-09-30 2020-10-30 山东省科学院自动化研究所 嵌入式软件堆栈溢出检测方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06195476A (ja) * 1992-07-21 1994-07-15 Advanced Micro Devicds Inc マイクロコントローラを組入れる集積回路およびそれによる電力消費を減じるための方法
US5454767A (en) * 1993-12-30 1995-10-03 Agco Corporation Powershift transmission control system with turbo boost monitor
JPH07281912A (ja) * 1994-04-07 1995-10-27 Nippondenso Co Ltd スタック異常検出装置
JP2008172896A (ja) * 2007-01-10 2008-07-24 Nsk Ltd 車両用電動機の制御装置

Also Published As

Publication number Publication date
JP2012128743A (ja) 2012-07-05

Similar Documents

Publication Publication Date Title
JP5911922B2 (ja) 安全関連制御ユニットおよび自動化設備の制御方法
CN100549986C (zh) 信息处理装置
JP6816345B2 (ja) 駆動制御装置
RU2520399C2 (ru) Микрокомпьютер и способ его работы
US20150234661A1 (en) Semiconductor integrated circuit device and system using the same
US20120266022A1 (en) Method for Verifying an Application Program in a Failsafe Programmable Logic Controller, and Programmable Logic Controller for Performing the Method
JP4917604B2 (ja) 記憶装置構成およびその駆動方法
US20090259899A1 (en) Method and apparatus for automatic scan completion in the event of a system checkstop
US20210124655A1 (en) Dynamic Configurable Microcontroller Recovery
JP5041290B2 (ja) プログラマブルコントローラおよびその異常時復旧方法
CN1173264C (zh) 保护计算机的核心免受外部窜改的方法
JP5636943B2 (ja) スタックオーバーフローの検出方法、プログラム、モータシステムおよび搬送装置
JP2009129463A (ja) 車両制御装置のリアルタイムシステムにおける一時的エラーの処理方法
JP6007677B2 (ja) 安全制御システム、及び安全制御システムのプロセッサ
KR20100010390A (ko) 마이크로컴퓨터와 마이크로컴퓨터의 제어방법
JP2016066139A (ja) 車両制御装置
JP6502211B2 (ja) 車両制御装置
JP5627414B2 (ja) 動作ログ収集システム及びプログラム
JP2020016511A (ja) 半導体集積回路および回転検出装置
JP2019168835A (ja) 電子制御装置
JP2011039667A (ja) 数値制御装置
JP2009520290A (ja) 耐故障性があるプロセッサシステム
EP2615423B1 (en) Method for checking the operability of a digital signal processing unit of a position sensor and position encoder
JP5057911B2 (ja) マルチプロセッサシステム
JP2014225110A (ja) 安全コントローラ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131003

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140520

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140603

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140716

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: 20140924

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141007

R150 Certificate of patent or registration of utility model

Ref document number: 5636943

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150