(57)【要約】【課題】本発明は、オペレータの操作に依らずに、システム全体を初期化することなくプログラムを正常状態へ復旧させることを目的とする。【解決手段】本来の処理が動作するメインスレッドとは別のサブスレッド上で動作して、メインスレッドからの定周期イベント通知を待つ処理と、メインスレッド上で動作して、メインスレッド上で動作するタイマが発生する定周期のタイマメッセージを受けて、その処理に対して定周期でイベントを通知する処理とからなる自己診断機能をプログラム内に組み込むことで、プログラム自身が異常を検出して、異常である場合には自己終了するという構成を採る。そして、そのプログラムが異常終了したのか否かを監視して、異常終了した場合には、その異常終了したプログラムの再起動が可能であるかどうかを判断して、その判断結果に基づいて、その異常終了したプログラムを再起動するという構成を採る。【選択図】　　　　　図２
2004070458.tif 000002
【特許請求の範囲】
【請求項１】
サブスレッド上で動作して、規定時間の間イベントが通知されてこない場合にタイムアウトして、プログラムを自己終了させる処理を行う診断用プログラム部分を生成する処理と、
上記診断用プログラム部分の生成に合わせて、メインスレッド上で動作して、規定周期に従ってタイマメッセージを発生する処理を行うタイマを起動する処理と、
メインスレッド上で動作して、上記タイマメッセージの発生時に、上記診断用プログラム部分に対してイベントを通知する処理とをコンピュータに実行させるための自己診断機能を持つプログラム。
【請求項２】
自己診断機能を有して、その自己診断機能に従って、異常状態が発生するときに処理を自己終了させるプログラムを監視対象として登録する手段と、
上記登録したプログラムの異常終了を監視する手段と、
上記異常終了を検出する場合に、その異常終了したプログラムの再起動が妥当であるのか否かを判断する手段と、
上記再起動の妥当性を判断する場合に、異常終了したプログラムを再起動する手段とを備えることを、
特徴とするプログラム監視装置。
【請求項３】
請求項２記載のプログラム監視装置において、
上記判断する手段は、前回の起動から一定時間経過しているのか否かを判断することで、上記異常終了したプログラムの再起動が妥当であるのか否かを判断することを、
特徴とするプログラム監視装置。
【請求項４】
請求項２記載のプログラム監視装置において、
上記判断する手段は、メモリ容量が規定量残されているのか否かを判断することで、上記異常終了したプログラムの再起動が妥当であるのか否かを判断することを、
特徴とするプログラム監視装置。
【請求項５】
請求項２ないし４のいずれか１項に記載のプログラム監視装置において、
上記監視対象となるプログラムは、サブスレッド上で動作して、規定時間の間イベントが通知されてこない場合にタイムアウトして、プログラムを自己終了させる処理を行う診断用プログラム部分を生成し、さらに、その診断用プログラム部分の生成に合わせて、メインスレッド上で動作して、規定周期に従ってタイマメッセージを発生する処理を行うタイマを起動し、さらに、メインスレッド上で動作して、そのタイマメッセージの発生時に、その診断用プログラム部分に対してイベントを通知する処理を行うことで自己診断機能を実現することを、
特徴とするプログラム監視装置。
【請求項６】
自己診断機能を有して、その自己診断機能に従って、異常状態が発生するときに処理を自己終了させるプログラムを監視対象として登録する過程と、
上記登録したプログラムの異常終了を監視する過程と、
上記異常終了を検出する場合に、その異常終了したプログラムの再起動が妥当であるのか否かを判断する過程と、
上記再起動の妥当性を判断する場合に、異常終了したプログラムを再起動する過程とを備えることを、
特徴とするプログラム監視方法。
【請求項７】
自己診断機能を有して、その自己診断機能に従って、異常状態が発生するときに処理を自己終了させるプログラムを監視対象として登録する処理と、
上記登録したプログラムの異常終了を監視する処理と、
上記異常終了を検出する場合に、その異常終了したプログラムの再起動が妥当であるのか否かを判断する処理と、
上記再起動の妥当性を判断する場合に、異常終了したプログラムを再起動する処理とをコンピュータに実行させるためのプログラム監視機能を持つプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自己診断機能を持つプログラムと、そのプログラムを監視対象とするプログラム監視装置及びその方法と、そのプログラム監視方法の実現に用いられるプログラム監視機能を持つプログラムとに関する。
【０００２】
【従来の技術】
プラントや建物の設備機器を監視・制御する中央監視装置などのソフトウェアは、バックグランド処理も含めて多数のプログラムで構成されているが、プログラム間で共有メモリアクセスを排他的に行う処理でデッドロックが発生して操作できなくなるなど、希なタイミングで操作できなくなることが発生する。
【０００３】
本質的には、そのようなタイミングが発生しないようにする設計が必要であるが、複雑化したソフトウェア環境では、現実には、これを完全に実現することは困難である。
【０００４】
一方、デッドロックしているプログラムを強制終了させてから再起動すると、全体の機能が復旧することも多い。
【０００５】
そこで、従来技術では、デッドロックして操作できなくなるプログラムが存在すると、ユーザがタスクマネージャに依頼することで、そのプログラムを強制的に終了させるようにしている。
【０００６】
【発明が解決しようとする課題】
このように、従来技術では、プラントや建物の設備機器を監視・制御する中央監視装置などで、デッドロックして操作できなくなるプログラムが発生すると、ユーザがタスクマネージャに依頼することで、そのプログラムを強制的に終了させるようにしている。
【０００７】
この強制終了の操作は、通常の操作と異なって特殊なキー操作により実現されることになる。
【０００８】
しかるに、プラントや建物の設備機器を監視・制御する中央監視装置などを操作するオペレータは、コンピュータに精通していない人も多く、通常の操作であれば特に問題なく操作できるものの、強制終了の操作などのような特別な操作については直ちに操作できない場合が多い。
【０００９】
これから、従来技術に従っていると、プラントや建物の設備機器を監視・制御する中央監視装置などで、デッドロックして操作できなくなるプログラムが発生すると、そのプログラムの復旧に手間取ることで、長い時間本来の監視処理などを実行できないという問題が発生する。
【００１０】
そうかといって、プラントや建物の設備機器を監視・制御する中央監視装置は２４時間３６５日連続稼働しなければならないことから、デッドロックして操作できなくなるプログラムが発生した場合に、直ちに、システム全体を初期化してしまうというような方法も用いることはできない。
【００１１】
本発明はかかる事情に鑑みてなされたものであって、デッドロックなどにより操作できなくなったプログラムを自動的に自己終了させるとともに、その自己終了したプログラムを自動的に再起動することで、オペレータの操作に依らずに、システム全体を初期化することなくプログラムを正常状態へ復旧させることができるようにする新たなプログラム技術の提供を目的とする。
【００１２】
【課題を解決するための手段】
この目的を達成するために、本発明は、自己診断機能を持つプログラムを実現することで、デッドロックなどにより操作できなくなったプログラムを自動的に自己終了させることを実現するとともに、そのプログラムを監視対象として、そのプログラムが自己終了した場合に、そのプログラムの再起動を実行するプログラム監視技術を実現することで、デッドロックなどにより自己終了した異常発生のプログラムを自動的に再起動することを実現する。
【００１３】
（１）本発明により実現される自己診断機能を持つプログラム
本発明の自己診断機能を持つプログラムは、▲１▼サブスレッド上で動作して、規定時間の間イベントが通知されてこない場合にタイムアウトして、プログラムを自己終了させる処理を行う診断用プログラム部分を生成する処理（例えば、プログラムの起動時に生成する）と、▲２▼その診断用プログラム部分の生成に合わせて、メインスレッド上で動作して、規定周期に従ってタイマメッセージを発生する処理を行うタイマを起動する処理と、▲３▼メインスレッド上で動作して、タイマメッセージの発生時に、診断用プログラム部分に対してイベントを通知する処理とをコンピュータに実行させるように構成する。
【００１４】
このように構成される本発明の自己診断機能を持つプログラムでは、ＷａｔｃｈＤｏｇｔｉｍｅｒ　相当の自己診断機能を組み込む構成を採っている。
【００１５】
この自己診断機能は、本来の処理が動作するメインスレッドとは別のサブスレッド上で動作して、メインスレッドからの定周期イベント通知を待つ処理（診断用プログラム部分により実行される）と、メインスレッド上で動作して、メインスレッド上で動作するタイマが発生する規定周期のタイマメッセージを受けて、診断用プログラム部分に対して定周期でイベントを通知する処理とからなる。
【００１６】
Ｗｉｎｄｏｗｓ（登録商標）上で動作するプログラムは、メッセージによってイベント的に動作するが、メインスレッドが動作不能になると、この構成により規定周期のタイマメッセージを発生することができず、診断用プログラム部分に対してイベントを通知できなくなる。
【００１７】
これから、診断用プログラム部分は、一定時間内にイベントの通知が来ない場合には、タイムアウトすることで異常を検出して、サブスレッドの中からプログラムを自己終了させる。
【００１８】
ここで、診断用ブロック部分に対してはメインスレッドとは別にＣＰＵ時間が割り当てられ、また、診断用ブロック部分はイベント通知を待つだけの単純な構成であることから、診断用ブロック部分が異常になることは無視できると考えてよい。
【００１９】
このようにして、本発明により実現される自己診断機能を持つプログラムは、デッドロックなどにより操作できなくなったプログラムを自動的に検出して強制的に自己終了させるように処理するのである。
【００２０】
（２）本発明により実現されるプログラム監視装置
本発明のプログラム監視装置は、自己診断機能を有して、その自己診断機能に従って、異常が発生するときに処理を自己終了させるプログラムを監視対象とするものであって、▲１▼監視対象となるプログラムを登録する手段と、▲２▼登録したプログラムの異常終了を監視する手段と、▲３▼その監視により、プログラムの異常終了を検出する場合に、その異常終了したプログラムの再起動が妥当であるのか否かを判断する手段と、▲４▼再起動の妥当性を判断する場合に、異常終了したプログラムを再起動する手段とを備えるように構成する。
【００２１】
以上の各処理手段により実現される本発明のプログラム監視方法はコンピュータプログラムで実現できるものであり、このコンピュータプログラムは、半導体メモリなどのような適当な記録媒体に記録して提供することができる。
【００２２】
このように構成される本発明のプログラム監視装置では、自己診断機能を有して、その自己診断機能に従って、異常が発生するときに処理を自己終了させるプログラムを監視対象として登録すると、オペレーティングシステムからの通知を監視することで、その登録したプログラムの異常終了を監視する。
【００２３】
そして、その監視により、登録したプログラムの異常終了を検出する場合に、その異常終了したプログラムの再起動が妥当であるのか否かを判断する。
【００２４】
例えば、前回の起動から一定時間経過しているのか否かを判断することで、異常終了したプログラムの再起動が妥当であるのか否かを判断したり、メモリ容量が規定量残されているのか否かを判断することで、異常終了したプログラムの再起動が妥当であるのか否かを判断する。
【００２５】
この判断処理により、再起動の妥当性を判断する場合には、異常終了したプログラムを再起動する。
【００２６】
このようして本発明により実現されるプログラム監視装置は、デッドロックなどにより操作できなくなったことで自己終了したプログラムを再起動することが妥当であるのか否かを判断して、再起動することが妥当であることを判断することを条件して、自己終了した異常発生のプログラムを再起動するように処理するのである。
【００２７】
以上説明したように、本発明では、プログラム自身が異常を検出して、異常である場合には自分自身で終了し、さらに、その異常終了したプログラムの再起動が可能であるかどうかを判断して、その判断結果に基づいて、異常終了したプログラムを再起動するようにすることから、オペレータの操作に依らずに、システム全体を初期化することなくプログラムを正常状態へ復旧させることができるようになる。
【００２８】
そして、異常終了したプログラムの再起動が妥当であるのか否かを判断して、妥当であることを条件にして、異常終了したプログラムを再起動することから、再び異常終了するといった不都合を解消することができるようになることで、システムの信頼性を大きく向上できるようになる。
【００２９】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
【００３０】
図１に、本発明を具備する中央監視装置１の一実施形態例を図示する。
【００３１】
この実施形態例に従う本発明を具備する中央監視装置１は、通信ネットワーク３を介して接続される建物の設備機器２を監視・制御する処理を行うものであって、オペレーティングシステム１０と、建物の設備機器２の監視・制御処理を実行する複数のアプリケーションプログラム１１と、異常終了したアプリケーションプログラム１１の再起動処理を実行する監視プログラム１２とを備える。
【００３２】
アプリケーションプログラム１１は、例えば、建物を模擬する画面を表示して、その画面の中から選択される建物位置に設置される設備機器２の状態データを表示するなどの処理を行うものであって、本発明により構成される場合には、自己診断機能を有して、その自己診断機能に従って、異常状態が発生することを検出すると、処理を強制的に自己終了するように処理することになる。
【００３３】
このアプリケーションプログラム１１は、ＣＰＵへの割当単位となるスレッドと呼ばれる処理単位に従って処理を実行する。
【００３４】
一方、監視プログラム１２は、本発明により構成される場合には、オペレーティングシステム１０から通知されるアプリケーションプログラム１１の異常終了を監視して、アプリケーションプログラム１１の異常終了を検出する場合には、その異常終了したプログラムの再起動が妥当であるのか否かを判断して、再起動が妥当であることを判断する場合には、その異常終了したアプリケーションプログラム１１を再起動するように処理することになる。
【００３５】
図２に、本発明により構成されるアプリケーションプログラム１１のプログラム構成の一実施形態例を図示し、図３に、本発明により構成される監視プログラム１２のプログラム構成の一実施形態例を図示する。
【００３６】
最初に、図２を使って、本発明により構成されるアプリケーションプログラム１１の実行する自己診断処理について詳細に説明する。
【００３７】
アプリケーションプログラム１１は、メインスレッド上で動作して、アプリケーション本来の処理を行うプログラム部分と、サブスレッド上で動作して、自己診断の処理を行うプログラム部分とで構成される。
【００３８】
図２に示すステップ１〜ステップ６の処理を行うプログラム部分が、メインスレッド上で動作するプログラム部分であり、図２に示すステップ１０〜ステップ１２の処理を行うプログラム部分が、サブスレッド上で動作するプログラム部分である。ここで、図２に示す１１０は、規定周期に従ってタイマメッセージを発生するタイマである。
【００３９】
アプリケーションプログラム１１は、起動されると、図２に示すように、先ず最初に、ステップ１で、メッセージが発生したのか否かを判断する。ここで、アプリケーションプログラム１１は、起動されると、一番最初に、スタートのメッセージを発生する。
【００４０】
これから、ステップ１で、このスタートのメッセージが発生したことを検出すると、ステップ２に進んで、通知用イベントを生成する。すなわち、イベント通知用のパスを生成するのである。
【００４１】
続いて、ステップ３で、規定周期に従ってタイマメッセージを発生するタイマ１１０を起動する。
【００４２】
続いて、ステップ４で、サブスレッド上で動作してステップ１０〜ステップ１２の処理を行う診断用プログラム部分（診断用サブスレッド）を生成してから、ステップ１に戻る。
【００４３】
一方、ステップ１で、スタートのメッセージではなくて、アプリケーション本来のイベントが発生したことを検出すると、ステップ５に進んで、その発生したイベントの指示するアプリケーション本来の処理を実行してから、ステップ１に戻る。
【００４４】
一方、ステップ１で、アプリケーション本来のイベントではなくて、タイマ１１０の発生するタイマメッセージのイベントが発生したことを検出すると、ステップ６に進んで、ステップ２で生成したイベント通知用のパスを使って、ステップ４で生成した診断用プログラム部分に対してイベントを通知してから、ステップ１に戻る。
【００４５】
次に、診断用プログラム部分の処理について説明する。
【００４６】
診断用プログラム部分は、メインスレッド上での処理により生成されると、サブスレッド上で動作して、先ず最初に、ステップ１０で、前回のイベント通知から規定時間が経過したのか否かを判断して、規定時間経過していないことを判断するときには、ステップ１１に進んで、メインスレッドからイベントが通知されてきたのか否かを判断する。
【００４７】
この判断処理により、メインスレッドからイベントが通知されてきたことを判断するときには、ステップ１２に進んで、前回のイベント通知からの経過時間をクリアしてからステップ１０に戻り、イベントが通知されてこないことを判断するときには、その経過時間をクリアすることなく直ちにステップ１０に戻る。
【００４８】
そして、ステップ１０で、前回のイベント通知から規定時間が経過したことを判断するときには、ステップ１３に進んで、メインスレッド上で動作するＥｘｉｔＰｒｏｃｅｓｓ　の実行を指示することで、自アプリケーションプログラム１１の処理をサブスレッド側から自己終了させて、処理を終了する。
【００４９】
すなわち、メインスレッドの動作が止まると、タイマメッセージが発生しないことでイベント通知が行われなくなり、これを受けて、サブスレッド側で、イベント待ちがタイムアウトすることでＥｘｉｔＰｒｏｃｅｓｓ　の実行が指示され、これにより、アプリケーションプログラム１１は自己終了することになるのである。
【００５０】
このようにして、本発明により構成されるアプリケーションプログラム１１は、サブスレッド上で動作して規定時間の間イベントが通知されてこない場合にタイムアウトしてプログラムを自己終了させる診断用プログラム部分を自プログラム内に生成し、それを使って自己診断を行って、異常の発生を検出する場合には、その診断用プログラム部分からの指示に従って自己終了するように処理するのである。
【００５１】
本発明を実現する場合、以上に説明したロジックをアプリケーションプログラム１１に組み込む必要があるが、ＷｉｎｄｏｗｓにはＯＣＸと呼ばれる組み込み容易なライブラリ機構が用意されている。
【００５２】
これから、Ｗｉｎｄｏｗｓを用いる場合には、図２に示すように、診断用プログラム部分とステップ２，３，４，６の処理とをこのＯＣＸに組み込むようにすれば、改造も最小限で済むことになる。
【００５３】
次に、図３を使って、本発明により構成される監視プログラム１２の実行するプログラム監視処理について詳細に説明する。
【００５４】
監視プログラム１２は、起動されると、図３に示すように、先ず最初に、ステップ２０で、オペレータと対話することで、例えば、異常終了したままの状態にあると都合の悪いアプリケーションプログラム１１を登録対象として、ＰｒｏｃｅｓｓＨａｎｄｌｅ　を取得することで、監視するアプリケーションプログラム１１を登録する。
【００５５】
例えば、アプリケーションプログラムＡ，Ｂ，Ｃを監視対象とするときには、アプリケーションプログラムＡ，Ｂ，ＣのＰｒｏｃｅｓｓＨａｎｄｌｅ　を取得することで、アプリケーションプログラムＡ，Ｂ，Ｃを監視対象として登録するのである。
【００５６】
この登録を受けて、オペレーティングシステム１０は、ＰｒｏｃｅｓｓＨａｎｄｌｅ　の取得されたアプリケーションプログラムＡ，Ｂ，Ｃのいずれかが終了（中央監視装置１が連続運転されているので、この終了は、上述した自己診断機能やその他の理由による異常終了を意味する）したときには、監視プログラム１２に対して、その旨を通知してくることになる。
【００５７】
これから、続いて、ステップ２１で、オペレーティングシステム１０からの通知を監視することで、登録したアプリケーションプログラム１１の異常終了を監視する。
【００５８】
監視対象のアプリケーションプログラム１１が動作しているのか否かを常時チェックすることはＣＰＵ時間を浪費することになる。一方、Ｗｉｎｄｏｗｓの場合には、ＷａｉｔＦｏｒＭｕｌｔｉｐｌｅＯｂｊｅｃｔ（）　というＡＰＩを用いることで、監視対象のアプリケーションプログラム１１をＯＳカーネルでＣＰＵ時間を浪費せずに監視することができる。
【００５９】
これから、Ｗｉｎｄｏｗｓを用いる場合には、このＷａｉｔＦｏｒＭｕｌｔｉｐｌｅＯｂｊｅｃｔ（）　というＡＰＩを用いて、ＣＰＵ時間を浪費せずに監視対象のアプリケーションプログラム１１を監視することができる。
【００６０】
続いて、ステップ２２で、ステップ２１で実行する監視処理により、登録したアプリケーションプログラム１１の異常終了が発生したのか否かを判断して、異常終了が発生していないことを判断するときには、ステップ２１に戻って、登録したアプリケーションプログラム１１の異常終了の監視を続行する。
【００６１】
一方、ステップ２２で、登録したアプリケーションプログラム１１の異常終了が発生したことを判断するときには、ステップ２３に進んで、その異常終了したアプリケーションプログラム１１を再起動することが妥当であるのか否かを判断する。
【００６２】
例えば、異常終了したアプリケーションプログラム１１が前回の起動後から一定時間経過している場合には、再起動することが妥当であると判断し、逆に、一定時間経過していない場合には、再起動しても再び異常終了する可能性が高いことを判断して、再起動することが妥当でないと判断するといったような処理を行う。
【００６３】
また、例えば、システムのメモリ使用量がある閾値以下である場合には、メモリ不足とならないので再起動することが妥当であると判断し、逆に、閾値以下でない場合には、メモリ不足によりシステムが不安定な状態にあることで再起動しても再び異常終了する可能性が高いことを判断して、再起動することが妥当でないと判断するといったような処理を行う。
【００６４】
このステップ２３の判断処理により、異常終了したアプリケーションプログラム１１を再起動することが妥当であることを判断するときには、ステップ２４に進んで、その異常終了したアプリケーションプログラム１１を再起動してから、ステップ２１に戻って、登録したアプリケーションプログラム１１の異常終了の監視を続行する。
【００６５】
一方、このステップ２３の判断処理により、異常終了したアプリケーションプログラム１１を再起動することが妥当でないことを判断するときには、ステップ２５に進んで、オペレーティングシステム１０に対して、システムの初期化を依頼して、処理を終了する。
【００６６】
ここで、異常終了したアプリケーションプログラム１１によっては、システムの初期化を行うのではなくて、何もしないといったような他の方法を行うことも可能である。
【００６７】
このようにして、本発明により構成される監視プログラム１２は、自己診断機能により自己終了したアプリケーションプログラム１１を監視して、そのアプリケーションプログラム１１の異常終了を検出する場合には、その異常終了したアプリケーションプログラム１１を再起動することが妥当であるのか否かを判断して、再起動することが妥当であることを判断することを条件して、その異常終了したアプリケーションプログラム１１を再起動するように処理するのである。
【００６８】
図示実施形態例に従って本発明を説明したが、本発明はこれに限定されるものではない。例えば、実施形態例では、中央監視装置１への適用を具体例にして本発明を説明したが、本発明は、その適用が中央監視装置１に限られるものではない。
【００６９】
【発明の効果】
以上説明したように、本発明では、プログラム自身が異常を検出して、異常である場合には自分自身で終了し、さらに、その異常終了したプログラムの再起動が可能であるかどうかを判断して、その判断結果に基づいて、異常終了したプログラムを再起動するようにすることから、オペレータの操作に依らずに、システム全体を初期化することなくプログラムを正常状態へ復旧させることができるようになる。
【００７０】
そして、異常終了したプログラムの再起動が妥当であるのか否かを判断して、妥当であることを条件にして、異常終了したプログラムを再起動することから、再び異常終了するといった不都合を解消することができるようになることで、システムの信頼性を大きく向上できるようになる。
【図面の簡単な説明】
【図１】本発明を具備する中央監視装置の一実施形態例である。
【図２】本発明により構成されるアプリケーションプログラムのプログラム構成の一実施形態例である。
【図３】本発明により構成される監視プログラムのプログラム構成の一実施形態例である。
【符号の説明】
１　　中央監視装置
２　　設備機器
３　　通信ネットワーク
１０　オペレーティングシステム
１１　アプリケーションプログラム
１２　監視プログラム
【図１】
2004070458.tif 000003
【図２】
2004070458.tif 000004
【図３】
2004070458.tif 000005