JP2014059846A - プログラム異常検出装置、そのプログラム - Google Patents

プログラム異常検出装置、そのプログラム Download PDF

Info

Publication number
JP2014059846A
JP2014059846A JP2012206138A JP2012206138A JP2014059846A JP 2014059846 A JP2014059846 A JP 2014059846A JP 2012206138 A JP2012206138 A JP 2012206138A JP 2012206138 A JP2012206138 A JP 2012206138A JP 2014059846 A JP2014059846 A JP 2014059846A
Authority
JP
Japan
Prior art keywords
refresh
task
monitoring
program
time
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.)
Granted
Application number
JP2012206138A
Other languages
English (en)
Other versions
JP6060584B2 (ja
Inventor
Takao Sawada
孝雄 澤田
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.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co 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 Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2012206138A priority Critical patent/JP6060584B2/ja
Publication of JP2014059846A publication Critical patent/JP2014059846A/ja
Application granted granted Critical
Publication of JP6060584B2 publication Critical patent/JP6060584B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】複数の定周期タスクから構成されるソフトウェアであっても異常(無限ループ等を含む)を検出できる。
【解決手段】ソフトウェアを構成する各タスク・プログラム41全てにリフレッシュ処理部42を設けて、そのタスク実行の際にリフレッシュ処理(リフレッシュ記録テーブル31における自己の情報を更新する処理)も実行させる。監視条件設定テーブル21には、各タスク・プログラム41に対応してそのタスクが実行するリフレッシュ処理に関する時間的な条件が設定・登録される。この時間的な条件は、監視タイムアウト時間、及び、リフレッシュ禁止期間である。監視部23は、定期的に、リフレッシュ記録テーブル31を参照してタスク毎に上記時間的な条件を満たしているか否かを判定し、条件を満たしていない場合にはそのタスクに異常発生と見做す。
【選択図】図2

Description

本発明は、プログラムの異常を検出する装置等に関する。
プログラムの異常を検出する方法として、WDT(ウォッチドッグタイマ)を使用して異常検出をする方法が一般的に知られている。これは、WDTに対して一定時間内にプログラムからのタイマリセット(クリア)がなされないとプログラムに異常発生したと見做して、CPUリセットまたは停止状態にするものである。
この様なプログラムの異常検出方法として、例えば特許文献1,2に記載の従来技術が知られている。
特許文献1には、プログラム処理実行される中央処理装置から送出される監視タイマリセット信号を入力して、この信号に基づいてプログラム異常を検出するプログラム異常検出回路が開示されている。プログラム異常検出回路は、監視タイマやOR回路やフリップフロップ等を有しており、上記監視タイマリセット信号を、監視タイマのカウント時間T1(T1≠0)までに受信した場合、またはカウント時間T1からT2(T1<T2)までの間に受信しなかった場合に、プログラム異常として検出する。
また、特許文献2には、WDTの機能をソフトウェアで拡張して、プログラム異常の検出精度を上げる方式が提案されている。これは、アプリケーションプログラム(AP)がWDTに設定時間を通知し、WDTが通知された設定時間をタイマに設定してリスタートさせるが、上記APから通知される設定時間が毎回異なるようにすることで、プログラムの異常を検出する方法である。この方法によれば、プログラムが暴走して繰り返し実行する部分にタイマリセットのルーチンが含まれている場合でも、当該プログラム暴走を検出できる。
特開昭59−83438号公報 特開2007−287096号公報
しかしながら、前述した従来の方法では以下のような問題が生じる。
すなわち、特許文献1に関しては、下記の問題がある。
・プログラム異常検出回路はハードウェアで実現しており、ソフトウェアが複数の定周期処理(定周期タスク)から構成されている場合には対応困難である。
例えば、WDTリセット処理を行わないプログラム(定周期タスク)が存在した場合、この定周期タスクに異常が生じても検出できない可能性がある。これに対して、全ての定周期タスクにそれぞれWDTリセット処理を行わせる場合、例えば上記監視タイマリセット信号が各定周期タスク実行に伴って出力されることになるが、プログラム異常検出回路ではどの定周期タスクによるリセット信号であるのか区別することはできないし、当然、定周期タスク毎の正常/異常を判別することはできない。あるいは、WDTリセット処理を行う定周期タスクが暴走して当該リセット処理を含む無限ループになった場合、異常を検出できない可能性がある。
また、特許文献2に関しても、下記の問題がある。
・ソフトウェアが複数の定周期処理(定周期タスク)から構成されている場合の異常検出は、考慮されていない。従って、複数の定周期タスクから構成されるソフトウェアの異常検出に関しても、何等想到されていない。更に、WDTのリセット処理を有するプログラム(定周期タスク)が暴走して、リセット処理を含む無限ループになった場合、異常検出はできない可能性がある。
上述したように、従来では、ソフトウェアが複数の定周期処理(定周期タスク)から構成されている場合において、プログラム異常検出することは、何等想到されていないし実現できないものである。
ここで、上記複数の定周期タスクとは、例えばリアルタイムOS上のタスクである。よく知られているように、リアルタイムOSは各処理(タスク)のスケジューリング機能、各タスクを一定周期毎に呼び出して実行したりタスク処理を一定時間止めておくなど時間に関係した動作を行うための時間管理機能を備えている。また、割込み管理機能等も備えている。あるいは、制御分野におけるプログラマブルコントローラ(PLC)では、複数の定周期タスクが順次実行されて何らかの制御対象機器が制御される場合が少なくない。
本発明の課題は、複数の定周期タスクから構成されるソフトウェアであっても異常検出でき、更に、任意のタスクのプログラムが暴走してリフレッシュ処理を含む無限ループになるような場合でも異常検出できるプログラム異常検出装置等を提供することである。
本発明のプログラム異常検出装置は、複数の定周期タスクから構成されるプログラムの異常を検出するプログラム異常検出装置であって、前記定周期タスク毎に対応して所定のリフレッシュ情報が記憶されるリフレッシュ情報記憶手段と、前記定周期タスク毎に対応してその定周期タスクが実行するリフレッシュ処理に関する時間的な条件が登録される条件登録手段とを有し、前記各定周期タスクは、それぞれ、前記リフレッシュ処理としてその定周期タスクに対応する前記リフレッシュ情報の更新を行うリフレッシュ手段を有し、定期的に、前記定周期タスク毎に、対応する前記リフレッシュ情報を参照して前記時間的な条件を満たしているか否かを判定し、該時間的な条件を満たしていない場合、あるいは複数回連続して該時間的な条件を満たしていない場合には、その定周期タスクの異常と判定する監視手段とを有する。
前記時間的な条件は、例えば、監視タイムアウト時間、及び、リフレッシュ禁止期間である。そして、例えば、前記監視手段は、前記定周期タスク毎に、任意の前記リフレッシュ処理実行時から前記監視タイムアウト時間経過するまでに次の前記リフレッシュ処理が実行されなかった場合、あるいは、前記リフレッシュ禁止期間内に前記リフレッシュ処理が実行された場合には、前記時間的な条件を満たしていないと判定する。
本発明のプログラム異常検出装置等によれば、複数の定周期タスクから構成されるソフトウェアであっても異常検出でき、更に、リフレッシュ処理を含む任意のタスクのプログラムが暴走して無限ループになるような場合でも異常検出できる。
本例のプログラム異常検出装置のハードウェア構成例である。 プログラム異常検出機能に係わる構成図である。 (a)、(b)は、監視条件設定テーブルの具体例を示す図である。 (a)、(b)は、リフレッシュ順序設定テーブルの具体例を示す図である。 (a)、(b)は、リフレッシュ記録テーブルの具体例を示す図である。 (a)、(b)は、リフレッシュ順序記録テーブルの具体例を示す図である。 リフレッシュ処理部の処理フローチャート図である。 監視部の処理フローチャート図である。 監視タイムアウト、禁止期間について説明する為の図である。 監視部の処理フローチャート図(順序チェック)である。
以下、図面を参照して、本発明の実施の形態について説明する。
図1は、本例のプログラム異常検出装置のハードウェア構成例である。
これは、本例のプログラム異常検出装置の機能を有する何らかのコンピュータ/情報処理装置(パソコン、組み込み機器、プログラマブルコントローラ等)のハードウェア構成例と見做してもよい。
本例のプログラム異常検出装置10は、CPU11、RAM12、ROM13、外部I/F(インタフェース)14などから構成され、それぞれバス接続されている。
ROM13は、CPU11が実行するプログラムコード等(後述するアプリケーションプログラム群40等)が格納されているメモリである。更に、ROM13には、後述するプログラム異常検出機能部20の各種処理機能を実現させる為の他のアプリケーションプログラム(不図示)も、予め記憶されている。CPU11が、このアプリケーションプログラムを読出し実行することにより、例えば後述する各種フローチャート図(図7、図8、図10)の処理が実現される。
RAM12は、書き換え可能なメモリであり、例えば後述するリフレッシュ処理情報の記憶領域30を割り当てる。後述する各設定テーブル21,22等は、RAM12、ROM13のどちらに記憶させてもよい。
外部I/F14は、不図示の何らかの外部機器と接続するためのインタフェースであり、シリアルコントローラやLANコントローラ等の通信デバイスが接続される。また、外部I/F14は、CFカードやUSBメモリといったストレージデバイスが接続されても良い。このインタフェース経由で例えば、各設定テーブル21,22等の変更を可能としても良い。
図2は、図1の情報処理装置内のプログラム異常検出機能に係わる構成図である。
まず、上記ROM13には、予め、上述した複数の定周期処理(定周期タスク;以下、省略して単にタスクと記す場合もある)から構成されるソフトウェアであるアプリケーションプログラム群40が記憶されている。
アプリケーションプログラム群40は、タスク毎に分割された複数のプログラム(タスクAプログラム〜タスクXプログラム)41から構成される。これら各タスク・プログラム41(タスク)は、それぞれ、予め決められた定周期で周期的な動作を行う。各タスク・プログラム41は、例えばリアルタイムOS上のタスク等であるが、この例に限らない。
各タスク・プログラム41は、それぞれ何らかの所定の処理を定周期で実行するが、それ以外に、上述した従来のWDTに対する一定時間毎のタイマリセット処理に相当するリフレッシュ処理を実行する、リフレッシュ処理部42が組み込まれている。尚、本手法では、タイマは使用しないで、ソフトウェア処理によって“従来のWDTを用いた異常検出”に相当する機能を実現する。
また、上記記憶領域30には、上記リフレッシュ処理情報の一例であるリフレッシュ記録テーブル31、リフレッシュ順序記録テーブル32等が格納されている。基本的には、各リフレッシュ処理部42によってリフレッシュ処理が行われる毎に少なくともリフレッシュ記録テーブル31の内容が更新される。本例では、更に、リフレッシュ順序記録テーブル32も用いるが、これは必ずしも用いる必要はない(よって後述する図10において、リフレッシュ順序記録テーブル32を用いる処理やこれに関連する処理等も、必須のものではない)。但し、これらを実行することで、後述する効果が更に得られることになる。
そして、プログラム異常検出機能部20は、監視条件設定テーブル21、リフレッシュ順序設定テーブル22、設定部23、監視部24等から構成される。
設定部23によって、上記監視条件設定テーブル21、リフレッシュ順序設定テーブル22に対する設定が行われる。設定部23は、例えば不図示の設定画面を不図示のディスプレイ等に表示して、ユーザに任意の情報を設定させて当該設定情報を設定テーブル21,22に格納するものであるが(ユーザは不図示のキーボード、マウス等を操作して設定する)、この例に限らない。例えば、設定部23は、外部でユーザ等によって任意に作成された上記設定テーブル21,22等を何らかの形で取り込んで(ネットワーク経由や可搬記憶媒体経由など)RAM12/ROM13に記憶する処理を行うものであってもよい。何れにしても、これら各設定テーブル21,22の内容は、ユーザ等が任意に設定するものであってよい。
上記監視条件設定テーブル21には、例えば、各定周期タスク(各タスク・プログラム41)に対応してその定周期タスクが実行するリフレッシュ処理に関する時間的な条件が設定・登録される。この時間的な条件は、監視タイムアウト時間、及び、リフレッシュ禁止期間であり、監視部24は、例えば、タスク・プログラム41毎に、任意のリフレッシュ処理実行時から監視タイムアウト時間経過するまでに次のリフレッシュ処理が実行されなかった場合、あるいは、リフレッシュ禁止期間内にリフレッシュ処理が実行された場合には、上記時間的な条件を満たしていないと判定する。詳しくは後述する。
リフレッシュ記録テーブル31には、例えば、タスク・プログラム41毎に対応して所定のリフレッシュ情報が記憶される。
上記各タスク・プログラム41のリフレッシュ処理部42は、上記定期的なリフレッシュ処理として、上記監視条件設定テーブル21や、リフレッシュ順序設定テーブル22の設定内容を参照しつつ、上記リフレッシュ記録テーブル31や、リフレッシュ順序記録テーブル32の後述する各種格納内容(リフレッシュ情報と呼ぶものとする)を更新する。詳しくは後に図7を参照して説明する。
監視部24は、定期的に、リフレッシュ記録テーブル31、リフレッシュ順序記録テーブル32に記録されているデータを読み出し、監視条件設定テーブル21、リフレッシュ順序設定テーブル22の設定内容を参照して、上記定周期タスク(タスク・プログラム41)毎の異常の有無の判定を行う。
以下、上記各種テーブルについて、具体例を示して説明する。
図3(a)、(b)には、監視条件設定テーブル21の具体例を示す。
図4(a)、(b)には、リフレッシュ順序設定テーブル22の具体例を示す。
図5(a)、(b)には、リフレッシュ記録テーブル31の具体例を示す。
図6(a)、(b)には、リフレッシュ順序記録テーブル32の具体例を示す。
以下、まず、図3を参照して監視条件設定テーブル21の具体例について説明する。
図3(a)に示すように、監視条件設定テーブル21は、概略的には、監視条件設定データ数211、各監視条件設定データ((1)〜(n))212から構成される。
監視条件設定データ数211には、監視条件設定データ212の数(レコード数)が格納され、図示の例ではn個が格納される。
図3(b)には、監視条件設定データ212(レコード)のデータ項目例を示す。
監視条件設定データ212は、リフレッシュ監視時間212a、リフレッシュ遅延最小時間212b、リフレッシュ遅延最大時間212c、監視時間タイムアップ連続発生許容回数212d、監視時間タイムアップ時動作212e、監視時間タイムアップ時呼出関数212f、禁止期間リフレッシュ連続発生許容回数212g、禁止期間リフレッシュ時動作212h、禁止期間リフレッシュ時呼出関数212iから構成される。
尚、これら各データ項目の内容は、例えば上記設定部23を介して、開発者等が任意に設定できる。すなわち、特に図示しないが、上記設定部23は、例えば上記各データ項目212a〜212iの内容をユーザが任意に設定・入力できるようにする画面を表示する。そして、任意の定周期タスク(タスク・プログラム41)に関して設定・入力されたデータを、上記監視条件設定テーブル21の監視条件設定データ212として格納する。その際、当該格納する監視条件設定データ212に、対応するタスク・プログラム41の識別子等を付与するようにしてもよい。そして、監視条件設定データ数211を更新(+1インクリメント等)する。
“リフレッシュ監視時間”212aは、任意のリフレッシュ実行時から次にリフレッシュが行われるまでの許容待ち時間である。換言すれば、上記従来のWDTに対する一定時間に相当する時間である。任意のタスク・プログラム41に関して、任意のリフレッシュ実行時から次にリフレッシュが行われるまでの時間(リフレッシュ間隔)が、“リフレッシュ監視時間”212aを超えると、そのタスク・プログラム41に異常発生が疑われる。
但し、本例では、1回だけで異常と判定するものではなく、リフレッシュ間隔が“リフレッシュ監視時間”212aを越える事態が複数回連続した場合に(後述する“監視時間タイムアップ連続発生回数”312eが、閾値(“監視時間タイムアップ連続発生許容回数”212d)を越えた場合に)、異常と判定する。但し、この例に限らず、1回だけで異常と判定するようにしてもよい。
“リフレッシュ遅延最小時間”212bと“リフレッシュ遅延最大時間”212cは、リフレッシュ禁止期間を設定するものである。これは、上述した“プログラムが暴走してWDTリセット処理を含む無限ループとなる”異常(簡略化して、無限ループと呼ぶものとする)に相当する異常を検出するためのものである。上記のように、この様な無限ループが発生した場合は、頻繁にリフレッシュ処理が行われる場合がある。これより、例えば、任意のリフレッシュ処理実行時から次のリフレッシュ処理が実行されるまでの時間が、短すぎる場合には(“リフレッシュ遅延最小時間”212b未満の場合)、異常と判定する。
従来でも、複数の定周期タスクから構成されるソフトウェアではない場合には、この様な無限ループを検出することができたが、複数の定周期タスクから構成されるソフトウェアの場合には従来では実現できなかった。
これに対して、本手法では、例えば、少なくとも、監視条件設定テーブル21、リフレッシュ記録テーブル31を用いて、図7、図8の処理(但し、リフレッシュ順序に係わる処理は必須ではない)を行うことで、複数の定周期タスクから構成されるソフトウェアであっても、各タスクそれぞれについて、監視タイムアウト(WDTタイムアウトに相当)に係わる異常だけでなく、上記無限ループも検出することができる。
上記無限ループの検出に関しては、例えば、タスク毎に対応して上記禁止期間を設定することで、あるタスク・プログラム41に関して禁止期間中にリフレッシュが行われた場合には、そのタスク・プログラム41の暴走(無限ループ)などの異常発生が疑われるものとした。
“リフレッシュ遅延最小時間”212bは、任意のリフレッシュ実行時から次にリフレッシュが行われるまでの時間(リフレッシュ間隔)に関する最小時間である。任意のタスク・プログラム41について“リフレッシュ遅延最小時間”212bより短い時間間隔でリフレッシュが行われると、そのタスク・プログラム41の暴走(無限ループ)などの異常発生が疑われる。
但し、本例では、1回だけで異常と判定するものではなく、リフレッシュ間隔が“リフレッシュ遅延最小時間”212bより短い場合には、後述する“禁止期間リフレッシュ連続発生回数”312fとしてカウントされる。そして、この連続発生回数312fが所定の閾値(212g)を越えた場合に、異常と判定する。但し、この例に限らず、1回だけで異常と判定するようにしてもよい。
一方、“リフレッシュ遅延最大時間”212cは、任意のリフレッシュ実行時から次にリフレッシュが行われるまでの時間(リフレッシュ間隔)に関する最大時間である。任意のタスク・プログラム41についてリフレッシュ間隔が“リフレッシュ遅延最大時間”212cを越える場合には、たとえ“リフレッシュ監視時間”212aを超えなくても、そのタスク・プログラム41に異常発生が疑われる。
但し、本例では、1回だけで異常と判定するものではなく、リフレッシュ間隔が“リフレッシュ遅延最大時間”212cより長い場合には、上記“禁止期間リフレッシュ連続発生回数”312fとしてカウントされる。そして、上記の通り、この連続発生回数312fが所定の閾値(212g)を越えた場合に、異常と判定する。但し、この例に限らず、1回だけで異常と判定するようにしてもよい。
また、上記禁止期間に関しては、“リフレッシュ遅延最大時間”212cは必ずしも用いなくてもよく、“リフレッシュ遅延最小時間”212bのみを用いても構わない。
上記のように本例では、任意のタスク・プログラム41に関して、上記“監視時間タイムアップ連続発生回数”312eや“禁止期間リフレッシュ連続発生回数”312fが、所定の閾値を越えた場合に、そのタスク・プログラム41(タスク)に異常発生と判定する。この閾値が上記監“視時間タイムアップ連続発生許容回数”212dや“禁止期間リフレッシュ連続発生許容回数”212gである。
すなわち、“監視時間タイムアップ連続発生許容回数”212dは、監視時間タイムアップ回数の連続発生を許容する回数であり、任意のタスク・プログラム41に関して、上記“監視時間タイムアップ連続発生回数”312eが“監視時間タイムアップ連続発生許容回数”212dを超えると、そのタスク・プログラム41の暴走(無限ループ)などの異常発生と判定する。そして、プログラム異常と判定した場合には、例えば“監視時間タイムアップ時動作”212eに設定されている動作を実行する。“監視時間タイムアップ時動作”212eに設定されている動作は、例えばCPUリセット、システム停止、タスク停止、タスク再起動、関数呼出等であり、例えば開発者等が設定部23を介して任意に指定したものである。
尚、“監視時間タイムアップ時呼出関数”212fは、“監視時間タイムアップ時動作”212eに“関数呼出”が指定されていた場合に呼び出される関数が設定されるものであり、例えば当該関数の格納アドレスが設定されているが、この例に限らない。
また、上記“禁止期間リフレッシュ連続発生許容回数”212gは、禁止期間にリフレッシュが行われることが連続発生する際の許容回数であり、任意のタスク・プログラム41に関して、上記“禁止期間リフレッシュ連続発生回数”312fが“禁止期間リフレッシュ連続発生許容回数”212gを超えると、そのタスク・プログラム41に無限ループの異常発生と判定する。そして、無限ループと判定した場合には、“禁止期間リフレッシュ時動作”212hに設定されている動作を実行する。“禁止期間リフレッシュ時動作”212hに設定されている動作は、例えばCPUリセット、システム停止、タスク停止、タスク再起動、関数呼出等であり、例えば開発者等が設定部23を介して任意に指定したものである。
尚、“禁止期間リフレッシュ時呼出関数”212iは、“禁止期間リフレッシュ時動作”212hに“関数呼出”が指定されていた場合に呼び出される関数が設定されるものであり、例えば当該関数の格納アドレスが設定されているが、この例に限らない。
次に、図4を参照してリフレッシュ順序設定テーブル22の具体例について説明する。
本テーブル22は、上記複数のタスク・プログラム41(タスク)のなかに、動作順番が決められている複数のタスク・プログラム41がある場合に、決められた順番通りに処理(リフレッシュ)が行われているか否かを判定するためのテーブルであり、決められた順番通りにリフレッシュが行われていない場合には、各タスク・プログラム41個々については上述した異常(無限ループなど)が無くても、プログラム異常と判断する。
例えば、図1に示すタスクAプログラム、タスクBプログラム、・・・、タスクXプログラムのうち(A〜Xまであるものとする)、仮に、タスクB→タスクD→タスクE→タスクB・・・という順番でタスク実行されるものと決められていた場合、これらタスク実行に伴ってリフレッシュ処理も実行されるので、正常であれば、リフレッシュ処理もこの順番通りに行われるはずである。
リフレッシュ順序設定テーブル22は、複数のグループ設定を可能とし、グループ毎にそれぞれ、“リフレッシュ順序設定グループデータ”222が設定・登録される。リフレッシュ順序設定テーブル22は、図4(a)に示すように概略的には、“リフレッシュ順序設定グループ数”221と“リフレッシュ順序設定グループデータ”((1)〜(m))222から構成される。“リフレッシュ順序設定グループ数”221には、“リフレッシュ順序設定グループデータ”222の数が登録され、図示の例ではm個となる。
図4(b)には、“リフレッシュ順序設定グループデータ”222のデータ項目例を示す。
“リフレッシュ順序設定グループデータ”222は、異常時動作222a、異常時呼出関数222b、順序設定データ数222c、監視条件設定データ識別子((1)〜(r))222d等から構成される。
“異常時動作”222aには、設定された順番でリフレッシュが行われなかったことを以ってプログラム異常と判断した場合の動作が指定(設定)される。設定される動作は、例えば、CPUリセット、システム停止、関数呼出等であるが、これらの例に限らない。
“異常時呼出関数”222bには、“異常時動作”222aに上記“関数呼出”が指定されていた場合に呼び出される関数が設定され、例えば当該関数の格納アドレスが設定されているものであるが、この例に限らない。
“順序設定データ数”222cには、“監視条件設定データ識別子”222dの数が登録され、図示の例ではr個が登録される。
“監視条件設定データ識別子”222dは、そのグループに属するタスク(タスク・プログラム41)の識別情報(識別子)である。これら各識別子が、任意に決められた実行順序通りに登録されている。つまり、図示の“監視条件設定データ識別子”(1)→“監視条件設定データ識別子”(2)→・・・→“監視条件設定データ識別子”(r)→“監視条件設定データ識別子”(1)→・・・という順番で、各タスクが実行されるはずであり、もしこの順番通りに実行されていないことが検出されると、プログラム異常と判定されることになる。
次に、図5を参照してリフレッシュ記録テーブル31の具体例について説明する。
図5(a)に示すように、リフレッシュ記録テーブル31は概略的には、リフレッシュ記録データ数311、リフレッシュ記録データ((1)〜(n))312から構成される。
“リフレッシュ記録データ数”311には、“リフレッシュ記録データ”312の数が格納され、図示の例ではn個となる。これは、監視条件設定テーブル21内の“監視条件設定データ”212と同一(n個)である。このn個は、基本的には、タスク・プログラム41の数と考えてよい。そして、本例では後述する処理の為に、各“リフレッシュ記録データ”312の順番が、上記“監視条件設定データ”212の順番と対応関係にあることが望ましい。つまり、例えば先頭レコードである“監視条件設定データ”(1)が図1のタスクAプログラムに関する設定データであるとするならば、同じく先頭レコードである“リフレッシュ記録データ”(1)がタスクAプログラムに関する記録データとなるように設定しておくことが望ましい。
尚、これは、上記“監視条件設定データ識別子”222dとは異なり、実行順番通りにする必要はない。
また、尚、各“リフレッシュ記録データ”312や各“監視条件設定データ”212には、対応するタスク・プログラム41の識別子も登録されていることが望ましい。
図5(b)には、リフレッシュ記録データ312のデータ項目例を示す。
リフレッシュ記録データ312は、リフレッシュカウンタ今回値312a、タイムスタンプ今回値312b、リフレッシュカウンタ前回値312c、タイムスタンプ前回値312d、監視時間タイムアップ連続発生回数312e、禁止期間リフレッシュ連続発生回数312fから構成される。
各“リフレッシュ記録データ”312は、タスク・プログラム41(特にそのリフレッシュ処理部42)毎に対応して設けられるものであり、任意のタスク・プログラム41のリフレッシュ処理部42は、そのリフレッシュ処理毎に、自己に対応する“リフレッシュ記録データ”312の内容を更新する。
すなわち、各リフレッシュ処理部42は、それぞれ、自己に対応する“リフレッシュ記録データ”312の“リフレッシュカウンタ今回値”312a、“タイムスタンプ今回値”312b等のデータを、監視条件設定テーブル21における自己に対応する“監視条件設定データ”212等を参照する等して、更新する。この更新処理は、基本的には例えば、各カウンタ値はそれぞれ+1インクリメントし、タイムスタンプは、現在日時を新たな今回値とする。
一方、"リフレッシュカウンタ前回値"312c、"タイムスタンプ前回値"312dは、監視部24が今回値を新たな前回値として更新する。また、“監視時間タイムアップ連続発生回数”312eと“禁止期間リフレッシュ連続発生回数”312fについても、監視部24が更新する。監視部24は、後述する処理で監視時間タイムアップの発生を検出した場合には“監視時間タイムアップ連続発生回数”312eを更新(+1インクリメント)し、禁止期間リフレッシュの発生検出をした場合には禁止期間リフレッシュ連続発生回数”312fを更新(+1インクリメント)する。
また、監視部24は、後述する処理で監視時間タイムアップの発生を検出しなかった場合には“監視時間タイムアップ連続発生回数”312eを‘0’クリアし、禁止期間リフレッシュの発生を検出しなかった場合には“禁止期間リフレッシュ連続発生回数”312fを‘0’クリアする。これらは文字通り連続して発生する回数をカウントするものであるので、連続発生が途切れたら‘0’に戻す。
次に、図6を参照してリフレッシュ順序記録テーブル32の具体例について説明する。
まず、図6(a)に示すように、リフレッシュ順序記録テーブル32は概略的には、リフレッシュ順序記録データ数321、リフレッシュ順序記録データ((1)〜(m))322から構成される。
“リフレッシュ順序記録データ数”321には、“リフレッシュ順序記録データ”322の数が格納され、図示の例ではm個が格納される。これは、リフレッシュ順序設定テーブル22内の“リフレッシュ設定グループ数”221と同一(m個)である。このm個は、基本的に、グループの数であると考えてよい。グループ分けや各グループ内での実行順序は、例えばプログラマ等が任意に決めて設定してよい。そして、ここでは、各“リフレッシュ順序記録データ”322の順番が、上記“リフレッシュ順序設定グループデータ”222の順番と対応関係にあることが望ましい。つまり、例えば先頭レコードである“リフレッシュ順序設定グループデータ”(1)が、任意のグループαに関する設定データであったならば、同じく先頭レコードであるリフレッシュ順序記録データ”(1)もグループαに関する記録データとなるように設定しておくことが望ましい。
図6(b)には、リフレッシュ順序記録データ322の項目例を示す。
“リフレッシュ順序記録データ”322は、“リフレッシュ共通カウンタ”322a、“カウンタ”((1)〜(r))322bから構成される。各“カウンタ”322bは、それぞれ、そのグループに属するタスク・プログラム41の何れかに対応するものであり、従って上記“監視条件設定データ識別子”222dと同じくr個となっている。各“カウンタ”322bの順番は、“監視条件設定データ識別子”222dの順番と対応関係にあることが望ましい。つまり、例えば、先頭レコードである“カウンタ”(1)は、同じく先頭レコードである“監視条件設定データ識別子”(1)に対応するカウンタである。この“カウンタ”(1)のカウント値は、識別子(1)に対応するタスク・プログラム41がリフレッシュ処理を実行する毎に更新されるが、更新方法は下記のようにリフレッシュ共通カウンタ322aを用いるものとなる。
“リフレッシュ共通カウンタ”322aは、そのグループ内で共通に使用されるカウンタであり、そのグループに属する何れかのタスク・プログラム41のリフレッシュ処理部42がリフレッシュ処理を実行する毎に、当該リフレッシュ処理部42によって更新(1ずつカウントアップ)される。そして、更新後のカウント値が、当該リフレッシュ処理部42に対応する“カウンタ”322bに格納される。
また、監視部24は後述するように、各“カウンタ”322b等に基づいて、設定された順番通りに“カウンタ”322bが更新されているか否かを判定し、設定された順番通りに“カウンタ”322bが更新されていなかった場合は、プログラム異常と判断する。
次に、上記各種処理機能部(リフレッシュ処理部42、監視部24)の処理について、図7、図8、図10の各フローチャート図を参照して説明する。これは、具体例として上記図3〜図6に示すデータ構成例を用いて説明する。
図7は、リフレッシュ処理部42の処理フローチャート図である。
上記アプリケーションプログラム群40を構成する各タスク・プログラム41は、自己のリフレッシュ処理部42を例えば定期的に呼び出す。その際に、パラメータとして自己の識別子を渡す。尚、各タスク・プログラム41には、予めユニークな識別情報(識別子)が割り当てられている。
呼び出されたリフレッシュ処理部42は、図7の処理を実行開始すると、まず、上記識別子を取得する(ステップS11)。上記のように、各設定テーブルおよび各記録テーブルの各格納情報は、識別子を用いて管理されており、取得した識別子を用いることで、自己に対応する格納情報(その格納位置等)を判別することができる。
リフレッシュ処理部42は、次に、現在のタイムスタンプを取得する(ステップS12)。尚、これは単に、装置内の時計機能等から現在時刻を取得するものであってよい。そして、ステップS11で取得した識別子によってリフレッシュ記録テーブル31内の該当するリフレッシュ記録データ312を判別して、例えばそのレコード位置をセットする(処理対象レコードとする)(ステップS13)。尚、図5(a)で説明したように、各リフレッシュ記録データ312は、例えばそれぞれが任意のタスク・プログラム41に対応するものであり、その識別子が登録されている。
そして、上記該当するリフレッシュ記録データ312(該当レコード)のデータ内容を更新する。すなわち、まず、該当レコードのリフレッシュカウンタ今回値312aを更新すると共に、タイムスタンプ今回値312bを更新する(ステップS15)。リフレッシュカウンタ今回値312aの更新は、例えば現在の値(=上記新たな前回値312cの値)に1加算した値を、新たな今回値として設定する。タイムスタンプ今回値312bの更新は、上記ステップS12で取得した現在のタイムスタンプを設定する。
以上で該当するリフレッシュ記録データ312のデータ内容を更新したら、本例では更にフレッシュ順序記録テーブル32の更新を行う。尚、フレッシュ順序記録テーブル32の利用(更新や、参照して異常判定)は、必須ではないが、これを行うことによる効果も得られる。
まず、リフレッシュ順序設定テーブル22を参照・検索して、ステップS11で取得した識別子の設定の有無を判別する(ステップS16,S17)。すなわち、上述したように、リフレッシュ順序設定テーブル22にはグループ毎にそのグループに属するタスク・プログラム41の識別子が上記“監視条件設定データ識別子”222dとして登録されている。これら複数の“監視条件設定データ識別子”222dのなかに上記ステップS11で取得した識別子と同一の識別子があるか否かを判別するのが、上記ステップS16の処理である。
尚、上述したことから、ステップS11で取得した識別子と同一の識別子がある場合には、該当する“リフレッシュ順序設定グループデータ”222や該当する“監視条件設定データ識別子”222dが分かるだけでなく、該当する“リフレッシュ順序記録データ”322や該当する“カウンタ”322bも判別できる。
これより、該当する識別子の設定がある場合には(ステップS17,YES)、該当する“リフレッシュ順序記録データ”322内の“リフレッシュ共通カウンタ”322aを更新すると共に(例えば+1インクリメントする)(ステップS18)、更に、該当する“カウンタ”322bに、上記更新後のリフレッシュ共通カウンタ322aの値を設定する(ステップS19)。そして、本処理を終了する。
一方、該当する識別子の設定が無い場合には(ステップS17,NO)、そのまま本処理を終了する。
図8は、監視部24の処理フローチャート図である。
尚、監視部24は、例えば一定周期毎に図8の処理を実行するものであって、各タスク・プログラム41より高い優先順位で動作し、かつ各タスク・プログラム41より短い周期間隔で動作するものとする。
監視部24は、図8の処理を実行開始すると、まず、現在のタイムスタンプを取得し、これを変数‘TIMcur’に代入する(ステップS51)。
次に、監視条件設定テーブル21の先頭レコードとリフレッシュ記録テーブル31の先頭レコードを、処理対象レコードとしてセットする(ステップS52,S53)。尚、セットするとは、例えばポインタ指定することであり、現在の処理対象レコードを指し示すものである。
また、尚、上記先頭レコードとは、監視条件設定テーブル21の複数の“監視条件設定データ”212のうちの先頭(図3の例では“監視条件設定データ(1)”)、リフレッシュ記録テーブル31の複数の“リフレッシュ記録データ”312のうちの先頭(図5の例では“リフレッシュ記録データ(1)”を、意味する。また、本例では、最初の処理対象レコードを上記先頭レコードとしているが、勿論、この例に限るものではない。
そして、上記処理対象レコードから下記のデータ読出しと変数への代入を行う。また、下記の発生回数の更新/クリア等も、処理対象レコードの該当データ項目に対して行われるものである。
まず、監視条件設定テーブル21の処理対象レコードの“リフレッシュ監視時間”212a、“リフレッシュ遅延最小時間”212b、“リフレッシュ遅延最大時間”212cを読出し、それぞれ変数‘Tout’,変数‘Tmin’,変数‘Tmax’に代入する(ステップS54)。また、リフレッシュ記録テーブル31の処理対象レコードの“リフレッシュカウンタ今回値”312a、“リフレッシュカウンタ前回値”312c、“タイムスタンプ今回値”312b、“タイムスタンプ前回値”312dを読出し、それぞれ変数‘CNTa’,変数‘CNTb’,変数‘TIMa’,変数‘TIMb’に代入する(ステップS55)。
次に、上記リフレッシュカウンタの今回値(CNTa)と前回値(CNTb)との差分(CNTa−CNTb)を計算し、この差分を変数‘CNTdif’に代入する(ステップS56)。また、上記タイムスタンプの今回値(TIMa)と前回値(TIMb)の差分(TIMa−TIMb)を計算し、この差分を変数‘TIMdif’に代入する(ステップS57)。
そして、概略的には、監視タイムアウトであるか否かを判定し、監視タイムアウトではない場合でも更に禁止期間にリフレッシュ処理が実行されたか否かを確認する。基本的には、監視タイムアウトではなく、且つ、禁止期間におけるリフレッシュ実行でも無い場合に、正常と見做すことになる。
すなわち、まず、上記リフレッシュカウンタの差分値(CNTdif)に基づいて、カウンタの更新があるか否か(CNTdif>0か否か)の判定を行う(ステップS58)。
カウンタの更新が無い場合(CNTdif≦0)(ステップS58,NO)は、監視タイムアウト判定処理(ステップS63〜S68)に移行する。一方、カウンタの更新がある場合(CNTdif>0)(ステップS58,YES)は、処理対象レコードの"リフレッシュカウンタ前回値"312cに"リフレッシュカウンタ今回値"312aの値を設定する。更に、処理対象レコードの"タイムスタンプ前回値"312dに"タイムスタンプ今回値"312bの値を設定したうえで(ステップS72)、そのままステップS59以降の禁止期間リフレッシュ判定処理へと移行する。
上記監視タイムアップ判定処理では、まず、現在のタイムスタンプ(TIMcur)とタイムスタンプ今回値(TIMa)との差分(TIMcur−TIMa)を計算し、この差分を変数‘TIMdif2’に代入する(ステップS63)。次に、この差分値(TIMdif2)と上記リフレッシュ監視時間(Tout)とを比較し、監視タイムアップ(TIMdif2>Tout)であるか否かの判定を行う(ステップS64)。
監視タイムアップでない場合(TIMdif2≦Tout)(ステップS64,NO)は、処理対象レコードの“監視時間タイムアップ連続発生回数”312eをクリアし(ステップS66)、ステップS59以降の処理に移る。
一方、監視タイムアップの場合(TIMdif2>Tout)(ステップS64,YES)は、処理対象レコードの“監視時間タイムアップ連続発生回数”312eを更新する(+1インクリメント等)(ステップS65)。更に、更新後の“監視時間タイムアップ連続発生回数”312eを、処理対象レコードの“監視時間タイムアップ連続発生許容回数”212dと比較して、連続発生回数312eが許容回数212dを超えたか否かを判定する(ステップS67)。
連続発生回数312eが許容回数212dを越えていれば(ステップS67,YES)、処理対象レコードに対応するタスク・プログラム41に異常ありと見做し、異常発生時の動作を行う。すなわち、本例では例えば、処理対象レコードの“監視時間タイムアップ時動作”212eに設定されている動作を行う(ステップS68)。その際、仮に“監視時間タイムアップ時動作”212eに上記「関数呼出」が設定されている場合は、“監視時間タイムアップ時呼出関数”212fに登録されている関数を呼出す。
そして、ステップS59以降の処理へと移行する。但し、この場合は、“監視時間タイムアップ時動作”212eに上記CPUリセットやシステム停止等が指定されている場合には、これらが実行されるので、ステップS59以降の処理へと移行することなく、初期化処理などが行われることになる。
一方、連続発生回数312eが許容回数212d以下であれば(ステップS67,NO)、そのままステップS59以降の処理へと移行する。
以下、ステップS59以降の処理について説明する。
まず、ステップS59においては、上記タイムスタンプの差分値(TIMdif)と上記リフレッシュ遅延最小時間(Tmin)およびリフレッシュ遅延最大時間(Tmax)に基づいて、タイムスタンプの差分値(TIMdif)がリフレッシュ遅延範囲内(Tmin≦TIMdif≦Tmax)であるか否かの判定を行う(ステップS59)。換言すれば、リフレッシュ禁止期間内にリフレッシュが行われていないかを判定する。
タイムスタンプの差分値(TIMdif)がリフレッシュ遅延範囲内(Tmin≦TIMdif≦Tmax)である場合には(ステップS59,YES)、処理対象レコードに対応するタスク・プログラム41の動作は正常と見做してよく、処理対象レコードの“禁止期間リフレッシュ連続発生回数”312fをクリアする(ステップS60)。そして、ステップS61へ移行する。
一方、タイムスタンプの差分値(TIMdif)がリフレッシュ遅延範囲内ではない場合には(Tmin>TIMdif もしくは、TIMdif>Tmax)(ステップS59,NO)、処理対象レコードに対応するタスク・プログラム41の動作に異常(暴走)の可能性ありと見做して、処理対象レコードの“禁止期間リフレッシュ連続発生回数”312fを更新する(+1インクリメント等)(ステップS69)。更に、更新後の“禁止期間リフレッシュ連続発生回数”312fを、処理対象レコードの“禁止期間リフレッシュ連続発生許容回数”212gと比較して、連続発生回数312fが許容回数212gを超えるか否かを判定する(ステップS70)。
連続発生回数312fが許容回数212gを超える場合には(ステップS70,YES)、処理対象レコードに対応するタスク・プログラム41に異常(暴走)ありと見做し、異常発生時の動作を行う。すなわち、本例では例えば処理対象レコードの“禁止期間リフレッシュ時動作”212hで設定されている動作を行う(ステップS71)。尚、“禁止期間リフレッシュ時動作”212hに上記「関数呼出」が設定されている場合には、“禁止期間リフレッシュ時呼出関数”212iに登録されている関数を呼出す。
そして、ステップS71の動作が完了したら、ステップS61へ移行する。但し、この場合は、“禁止期間リフレッシュ時動作”212hに上記CPUリセットやシステム停止等が指定されている場合には、これらが実行されるので、ステップS61へと移行することなく、初期化処理などが行われることになる。
一方、連続発生回数312fが許容回数212g以下である場合には(ステップS70,NO)、そのままステップS61へ移行する。
ステップS61では、処理対象レコードを更新する。すなわち、監視条件設定テーブル21とリフレッシュ記録テーブル31の処理対象レコードを、それぞれ、現在の処理対象レコードの次のレコード(最初は2番目のレコードとなる)にセットすると共に、変数「処理レコード数」を更新する(+1インクリメントなど)。尚、変数「処理レコード数」は、図8の処理開始時の初期化処理で‘1’となっているものとする。
そして、上記「処理レコード数」が、上記“監視条件設定データ数”211を越えた場合等には、当該監視処理が所定のレコード数分実行終了したものと判定し(ステップS62,YES)、すなわち全てのタスク・プログラム41について動作異常チェック完了したものとして、当該監視処理を終了する。
「処理レコード数」が上記設定数以下である場合には(ステップS62,NO)、未処理のレコードがあることになるので、ステップS54に戻り、新たな処理対象レコードについて上記と同様の監視処理を続行する。
ここで、上記ステップS64の監視タイムアップや、ステップS59のリフレッシュ遅延範囲内(逆に、リフレッシュ禁止期間)について、図9を参照して説明する。
図9は、監視タイムアウト、禁止期間について説明する為の図である。
図9において、任意のタスク・プログラム41のリフレッシュ処理部42によって、図示の任意のタイミングt1でリフレッシュ処理(図7の処理)が正常に行われたものとする。
この例の場合、このタイミングt1から上記リフレッシュ監視時間(Tout)経過する前に(図示のタイミングt4になる前に)次のリフレッシュ処理が実行されなければ、上記ステップS64の判定がYES(監視タイムアウト)となるはずである。つまり、例えば図示のタイミングt4以後の任意のタイミングt5において図8の監視処理が行われた場合(更に、その時点で未だ、次のリフレッシュ処理が実行されていなかった場合)、上記ステップS63で計算される上記差分‘TIMdif2’は「t5−t1」となり、当然、「‘TIMdif2’>Tout」となる(ステップS64,YES)。
また、タイミングt1時点から上記Tmin経過した時点(図示のt2)までの期間を、上記リフレッシュ禁止期間としている。また、図示のタイミングt3から上記タイミングt4までの期間も、上記リフレッシュ禁止期間としている。尚、タイミングt3は、タイミングt1時点から上記Tmax経過した時点である。
この様なリフレッシュ禁止期間を設けるのは、任意のタスク・プログラム41が上記無限ループした場合には図示のように頻繁にリフレッシュ処理が行われることが考えられるので、リフレッシュ禁止期間においてもリフレッシュ処理が行われる可能性が高く、これを以ってタスクの無限ループ発生と判定できる。
尚、上記ステップS59におけるリフレッシュ遅延範囲は、例えば図9に示す期間となる。つまり、タイミングt1から上記リフレッシュ監視時間(Tout)経過する前までの期間であって上記リフレッシュ禁止期間以外の期間となる。リフレッシュ遅延範囲は、例えばタスク・プログラム41が正常であれば必ずリフレッシュ遅延範囲内に次のリフレッシュ処理を行うと考えられる期間を、開発者等が考えて設定する。これより、設定されたリフレッシュ遅延範囲以外の期間が、上記リフレッシュ禁止期間となる。
監視部24による上記図8の監視処理は、タスク・プログラム41毎の個別の異常を検出するものであった。これに対して、たとえ図8の処理では異常と判定されない状況であっても、例えば図10の処理によって異常と判定される場合も起こり得る。すなわち、所定の順番通りに処理実行されるものと決められた複数のタスク・プログラム41があった場合、これらをグループ化して、グループ内の複数のタスク・プログラム41が所定の順番通りに処理実行されなかった場合、異常と判定する。
この様な異常を検出する処理の一例を、図10に示す。
図10は、監視部24の処理順序監視動作を説明するフローチャートである。
ここで、図1に示す情報処理装置が、例えば制御システム用のコンピュータ(PLC;プログラマブルコントローラ)等である場合においては、複数の定周期タスクが動作する場合が多い。更に、これら複数の定周期タスクは、予め決められた順番で順次実行される場合も少なくない。この様な場合、これら各定周期タスクのリフレッシュ処理も、予め決められた順番で順次実行されることになる。更に、この様な実行順序が決められた複数の定周期タスクを1グループとして、複数のグループが存在する場合もある。
例えばこの様なグループ毎に、そのグループ内の複数のタスク・プログラム41が予め決められた順番通りに実行されているか否かをチェックして、実行されていない場合には異常と判定する。その為に、上述したリフレッシュ順序設定テーブル22とリフレッシュ順序記録テーブル32とを用いて、図10の処理によって、上記のチェック・異常判定を行う例を示す。
図10の処理は、図8の処理を実行する毎に行っても良いし、図8の処理とは関係なく定周期で行っても良い。
何れにしても、監視部24は、図10の処理を実行開始すると、まず、リフレッシュ順序設定テーブル22の先頭レコードおよびリフレッシュ順序記録テーブル32の先頭レコードを、処理対象レコードとしてセットする(ステップS81,S82)。
また、尚、上記先頭レコードとは、リフレッシュ順序設定テーブル22の複数の“リフレッシュ順序設定グループデータ”222のうちの先頭(図4では“リフレッシュ順序設定グループデータ(1)”、リフレッシュ順序記録テーブル32の複数の“リフレッシュ順序記録データ”322のうちの先頭(図6では“リフレッシュ順序記録データ(1)”)を、意味するものである。尚、本例では、最初の処理対象レコードを上記先頭レコードとしているが、勿論、この例に限るものではない。
そして、処理対象レコードを順次変えながら、そのときの処理対象レコードに関して、ステップS83〜S86の処理を行う。
すなわち、まず、リフレッシュ順序記録テーブル32における処理対象レコード(上記の通り最初は“リフレッシュ順序記録データ(1)”)に記録されている各カウンタ322b(カウンタ(1)、カウンタ(2)、・・・、カウンタ(r))同士を比較することで、カウンタ更新順序が予め決められた順序通りとなっているか否を確認する(ステップS83)。
ここでは、予め決められた順番は、カウンタ322bの順番通りであるものとする(その様に設定しておく)。よって、図示の例では「カウンタ(1)→カウンタ(2)→・・・→カウンタ(r−1)→カウンタ(r)→カウンタ(1)→・・・」という順番であることになる。まず、このなかで最新の更新が行われたカウンタ322bを識別する。これは、そのカウンタ322bの値が、リフレッシュ共通カウンタ322aの値と同一であるものが、最新の更新が行われたカウンタ322bであることになる。
そして、この最新更新のカウンタ322bから上記順番の逆に見ていき、カウンタ値が1ずつ減少しているか否かをチェックする。例えば、仮に、最新更新のカウンタ322bがカウンタ(3)でありその値が‘100’であったとした場合、正常であれば、カウンタ(2)は‘99’、カウンタ(1)は‘98’、カウンタ(r)は‘97’、カウンタ(r−1)は‘96’であるはずである。各カウンタ値がこの通りになっているか否かをチェックし、この通りになっているならば順序正常(ステップS84,YES)、この通りになっていない場合には順序異常(ステップS84,NO)と判定する。
順序異常と判定された場合(設定された順番通りに処理実行されていないと見做せる場合)には(ステップS84,NO)、リフレッシュ順序設定テーブル22の処理対象レコードの上記“異常時動作”222aに従った動作を実行する(ステップS85)。“異常時動作”222aで上記「関数呼出」が設定されている場合は、“異常時呼出関数”222bに登録されている関数を呼出す。
そして、ステップS85の処理を完了したら、ステップS86へ移行する。但し、“異常時動作”222aに上記CPUリセットやシステム停止等が指定されている場合には、これらが実行されるので、ステップS86へと移行することなく、初期化処理などが行われることになる。
一方、順序正常と判定された場合(設定された順番通りに処理実行されていると見做せる場合)(ステップS84,YES)には、そのままステップS86へと移行する。
ステップS86では、リフレッシュ順序設定テーブル22およびリフレッシュ順序記録テーブル32の両方に関して、次の処理対象レコードを決定する。上記の通り最初は先頭レコードが処理対象レコードであるので、2番目のレコードが次の処理対象レコードとなる。
但し、次の処理対象レコードが無ければ(ステップS87,YES)、当該順序監視処理は終了する。未処理のレコードがあれば(ステップS87,NO)、ステップS83に戻り、次の処理対象レコードについても上記と同様の処理を行う。
以上、本手法では、複数の定周期処理(定周期タスク)から構成されるプログラムであっても、タスク毎に暴走等の異常発生を検出できる。これは、特にタスク毎の異常検出監視時間とリフレッシュ禁止期間を用いた異常判定を行うことができる。よって、例えば、ある定周期タスクのプログラムが上記「無限ループ」になるような場合においても、プログラム異常を検出することができ、プログラム暴走の検出精度の向上が期待できる。
また、図10の処理によって、複数の定周期タスクが所定の順番通りに実行されないという異常も検出可能となる。
さらに異常検出後の動作をアプリケーション側で柔軟に構成することが可能となる。
10 プログラム異常検出装置
11 CPU
12 RAM
13 ROM
14 外部I/F(インタフェース)
20 プログラム異常検出機能部
21 監視条件設定テーブル
22 リフレッシュ順序設定テーブル
23 設定部
24 監視部
30 記憶領域
31 リフレッシュ記録テーブル
32 リフレッシュ順序記録テーブル
40 アプリケーションプログラム群
41 プログラム(タスク)
42 リフレッシュ処理部
211 監視条件設定データ数
212 各監視条件設定データ((1)〜(n))
212a リフレッシュ監視時間
212b リフレッシュ遅延最小時間
212c リフレッシュ遅延最大時間
212d 監視時間タイムアップ連続発生許容回数
212e 監視時間タイムアップ時動作
212f 監視時間タイムアップ時呼出関数
212g 禁止期間リフレッシュ連続発生許容回数
212h 禁止期間リフレッシュ時動作
212i 禁止期間リフレッシュ時呼出関数
221 リフレッシュ順序設定グループ数
222 リフレッシュ順序設定グループデータ((1)〜(m))
222a 異常時動作
222b 異常時呼出関数
222c 順序設定データ数
222d 監視条件設定データ識別子((1)〜(r))
311 リフレッシュ記録データ数
312 リフレッシュ記録データ((1)〜(n))
312a リフレッシュカウンタ今回値
312b タイムスタンプ今回値
312c リフレッシュカウンタ前回値
312d タイムスタンプ前回値
312e 監視時間タイムアップ連続発生回数
312f 禁止期間リフレッシュ連続発生回数
321 リフレッシュ記録データ数
322 リフレッシュ順序記録データ((1)〜(m))
322a リフレッシュ共通カウンタ
322b カウンタ((1)〜(r))

Claims (7)

  1. 複数の定周期タスクから構成されるプログラムの異常を検出するプログラム異常検出装置であって、
    前記定周期タスク毎に対応して所定のリフレッシュ情報が記憶されるリフレッシュ情報記憶手段と、
    前記定周期タスク毎に対応してその定周期タスクが実行するリフレッシュ処理に関する時間的な条件が登録される条件登録手段とを有し、
    前記各定周期タスクは、それぞれ、前記リフレッシュ処理としてその定周期タスクに対応する前記リフレッシュ情報の更新を行うリフレッシュ手段を有し、
    定期的に、前記定周期タスク毎に、対応する前記リフレッシュ情報を参照して前記時間的な条件を満たしているか否かを判定し、該時間的な条件を満たしていない場合、あるいは複数回連続して該時間的な条件を満たしていない場合には、その定周期タスクの異常と判定する監視手段と、
    を有することを特徴とするプログラム異常検出装置。
  2. 前記時間的な条件は、監視タイムアウト時間、及び、リフレッシュ禁止期間であり、
    前記監視手段は、前記定周期タスク毎に、任意の前記リフレッシュ処理実行時から前記監視タイムアウト時間経過するまでに次の前記リフレッシュ処理が実行されなかった場合、あるいは、前記リフレッシュ禁止期間内に前記リフレッシュ処理が実行された場合には、前記時間的な条件を満たしていないと判定することを特徴とする請求項1記載のプログラム異常検出装置。
  3. 前記リフレッシュ禁止期間は、任意の前記リフレッシュ処理実行時から前記監視タイムアウト時間経過するまでの期間内であって、任意の前記リフレッシュ処理実行時点から所定の第1の時間経過する時点までの期間であることを特徴とする請求項2記載のプログラム異常検出装置。
  4. 前記リフレッシュ禁止期間は、任意の前記リフレッシュ処理実行時から前記監視タイムアウト時間経過するまでの期間内であって、任意の前記リフレッシュ処理実行時から所定の第2の時間経過する時点から、前記監視タイムアウト時間経過時点までの期間であることを特徴とする請求項2記載のプログラム異常検出装置。
  5. 前記条件登録手段には、更に、前記定周期タスク毎に、その定周期タスクが異常と判定された場合に対応する動作が登録されており、
    前記監視手段は、任意の定周期タスクに関して異常と判定した場合、その定周期タスクに対応する前記登録されている動作を実行することを特徴とする請求項1〜4の何れかに記載のプログラム異常検出装置。
  6. 前記複数の定周期タスクのうち実行順序が決められている複数の定周期タスクを実行順序監視対象として、該実行順序監視対象となる定周期タスク毎に対応して前記実行順序に従って設けられるカウンタ値記憶手段と、
    前記実行順序監視対象となる複数の定周期タスクに共通のカウンタである共通カウンタとを有し、
    前記実行順序監視対象となる各定周期タスクのリフレッシュ手段は、その前記リフレッシュ処理の際に、前記共通カウンタを更新すると共に、そのカウンタ値を自己に対応する前記カウンタ値記憶手段に記憶し、
    前記監視手段は、該各カウンタ値記憶手段を参照することで、前記実行順序監視対象となる複数の定周期タスクが前記実行順序通りに実行されているか否かを判別する処理を更に実行することを特徴とする請求項1〜5の何れかに記載のプログラム異常検出装置。
  7. 複数の定周期タスクから構成されるプログラムの異常を検出するプログラム異常検出装置のコンピュータを、
    前記定周期タスク毎に対応して所定のリフレッシュ情報が記憶されるリフレッシュ情報記憶手段と、
    前記定周期タスク毎に対応してその定周期タスクが実行するリフレッシュ処理に関する時間的な条件が登録される条件登録手段とを有し、
    前記各定周期タスクは、それぞれ、前記リフレッシュ処理としてその定周期タスクに対応する前記リフレッシュ情報の更新を行うリフレッシュ手段を有し、
    定期的に、前記定周期タスク毎に、対応する前記リフレッシュ情報を参照して前記時間的な条件を満たしているか否かを判定し、該時間的な条件を満たしていない場合、あるいは複数回連続して該時間的な条件を満たしていない場合には、その定周期タスクの異常と判定する監視手段、
    として機能させるためのプログラム。
JP2012206138A 2012-09-19 2012-09-19 プログラム異常検出装置、そのプログラム Expired - Fee Related JP6060584B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012206138A JP6060584B2 (ja) 2012-09-19 2012-09-19 プログラム異常検出装置、そのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012206138A JP6060584B2 (ja) 2012-09-19 2012-09-19 プログラム異常検出装置、そのプログラム

Publications (2)

Publication Number Publication Date
JP2014059846A true JP2014059846A (ja) 2014-04-03
JP6060584B2 JP6060584B2 (ja) 2017-01-18

Family

ID=50616237

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012206138A Expired - Fee Related JP6060584B2 (ja) 2012-09-19 2012-09-19 プログラム異常検出装置、そのプログラム

Country Status (1)

Country Link
JP (1) JP6060584B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017076294A (ja) * 2015-10-16 2017-04-20 コイト電工株式会社 処理装置、交通信号装置及び情報表示装置
JP2020155153A (ja) * 2020-06-24 2020-09-24 コイト電工株式会社 処理装置、交通信号装置及び情報表示装置
JP2020204844A (ja) * 2019-06-14 2020-12-24 富士電機株式会社 制御装置およびその保守支援装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58191045A (ja) * 1982-04-30 1983-11-08 Fujitsu Ltd 実行時間管理装置
JPH03288942A (ja) * 1990-04-05 1991-12-19 Zexel Corp マイクロコンピュータにおけるプログラム暴走検出方法
JPH09212389A (ja) * 1996-01-31 1997-08-15 Sumitomo Electric Ind Ltd コンピュータシステムの異常状態検出方法および装置
JP2005063295A (ja) * 2003-08-19 2005-03-10 Matsushita Electric Ind Co Ltd 制御装置
JP2012014523A (ja) * 2010-07-01 2012-01-19 Hitachi Ltd サブルーチン実行監視装置及びサブルーチン実行監視方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58191045A (ja) * 1982-04-30 1983-11-08 Fujitsu Ltd 実行時間管理装置
JPH03288942A (ja) * 1990-04-05 1991-12-19 Zexel Corp マイクロコンピュータにおけるプログラム暴走検出方法
JPH09212389A (ja) * 1996-01-31 1997-08-15 Sumitomo Electric Ind Ltd コンピュータシステムの異常状態検出方法および装置
JP2005063295A (ja) * 2003-08-19 2005-03-10 Matsushita Electric Ind Co Ltd 制御装置
JP2012014523A (ja) * 2010-07-01 2012-01-19 Hitachi Ltd サブルーチン実行監視装置及びサブルーチン実行監視方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017076294A (ja) * 2015-10-16 2017-04-20 コイト電工株式会社 処理装置、交通信号装置及び情報表示装置
JP2020204844A (ja) * 2019-06-14 2020-12-24 富士電機株式会社 制御装置およびその保守支援装置
JP7379875B2 (ja) 2019-06-14 2023-11-15 富士電機株式会社 制御装置およびその保守支援装置
JP2020155153A (ja) * 2020-06-24 2020-09-24 コイト電工株式会社 処理装置、交通信号装置及び情報表示装置

Also Published As

Publication number Publication date
JP6060584B2 (ja) 2017-01-18

Similar Documents

Publication Publication Date Title
TWI686696B (zh) 計算節點及其失效偵測方法與雲端資料處理系統
US8930757B2 (en) Operations management apparatus, operations management method and program
CN106844165B (zh) 告警方法及装置
US11556389B2 (en) Resource usage prediction for cluster provisioning
JP6060584B2 (ja) プログラム異常検出装置、そのプログラム
JP2017512006A5 (ja)
CN107660289A (zh) 自动网络控制
US8448025B2 (en) Fault analysis apparatus, fault analysis method, and recording medium
CN109445927B (zh) 一种存储集群的任务管理方法及装置
Bhaduri et al. Detecting abnormal machine characteristics in cloud infrastructures
EP3526674B1 (en) Time-parallelized integrity testing of software code
JP2014186624A (ja) マイグレーション処理方法及び処理装置
JP2016224883A (ja) 異常検出方法、情報処理装置および異常検出プログラム
KR101212496B1 (ko) 모니터링 자원의 사용량 표현 방법, 컴퓨팅 장치 및 그 방법을 실행시키기 위한 프로그램을 기록한 기록 매체
JP6252309B2 (ja) 監視漏れ特定処理プログラム,監視漏れ特定処理方法及び監視漏れ特定処理装置
CN106294364B (zh) 实现网络爬虫抓取网页的方法和装置
CN112035326A (zh) 基于集群节点互检的异常节点任务处理方法及装置
CN114896128A (zh) 基于区块链的应用程序性能测试方法及装置
JP2006227962A (ja) アプリケーションタスク監視システムおよび方法
JP2015121963A (ja) 情報処理システム、監視方法、及び、プログラム
CN114327835A (zh) 分布式任务的调度方法及装置、处理器和电子设备
KR102382134B1 (ko) 공격 검지 장치, 공격 검지 방법, 및 공격 검지 프로그램
JP2019120441A (ja) 施設監視装置および施設監視方法
JP7248100B2 (ja) 監視方法、監視装置、プログラム
WO2017056159A1 (ja) 管理システム、管理方法および管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150812

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160422

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160524

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160701

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161128

R150 Certificate of patent or registration of utility model

Ref document number: 6060584

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees