(57)【要約】【課題】起動時の待ち時間を短くしつつ、診断すべき診断項目を診断し、安全性を確保する。【解決手段】診断計画作成部１２０は、診断項目データベース記憶部１１０（診断項目記憶部）が記憶した複数の診断項目のなかから一回の診断処理において診断する診断項目を抽出し、複数回の診断処理により、診断項目データベース記憶部１１０が記憶した複数の診断項目について診断をする診断計画を作成する。診断実行部２００は、組込み機器８００（対象装置）が起動した場合に、診断計画作成部１２０が作成した診断計画に基づいて、一回の診断処理を実行する。【選択図】図３
2010122790.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶装置と、データを処理する処理装置と、診断項目記憶部と、診断計画作成部と、診断実行部とを有し、
上記診断項目記憶部は、上記記憶装置を用いて、対象装置の故障を診断する複数の診断項目を記憶し、
上記診断計画作成部は、上記処理装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のなかから一回の診断処理において診断する診断項目を抽出し、複数回の診断処理により、上記診断項目記憶部が記憶した複数の診断項目について診断をする診断計画を作成し、
上記診断実行部は、上記処理装置を用いて、上記対象装置が起動した場合に、上記診断計画作成部が作成した診断計画に基づいて、一回の診断処理を実行することを特徴とする診断装置。
【請求項２】
上記診断装置は、更に、診断所要時間記憶部を有し、
上記診断所要時間記憶部は、上記記憶装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のそれぞれについて、診断にかかる所要時間を記憶し、
上記診断計画作成部は、上記処理装置を用いて、上記診断所要時間記憶部が記憶した所要時間に基づいて、一回の診断処理にかかる所要時間を算出し、算出した所要時間が所定の制限時間以内となる診断計画を作成することを特徴とする請求項１に記載の診断装置。
【請求項３】
上記診断装置は、更に、診断所要時間計測部を有し、
上記診断所要時間計測部は、上記処理装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のそれぞれについて、上記診断実行部が診断をするのに要した所要時間を計測し、
上記診断所要時間記憶部は、上記記憶装置を用いて、上記診断所要時間計測部が計測した所要時間を記憶することを特徴とする請求項２に記載の診断装置。
【請求項４】
上記診断装置は、更に、動作中診断可否記憶部を有し、
上記動作中診断可否記憶部は、上記記憶装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のそれぞれについて、上記対象装置の動作中に診断できる項目であるか否かを表わす動作中診断可否フラグを記憶し、
上記診断計画作成部は、上記処理装置を用いて、上記動作中診断可否記憶部が記憶した動作中診断可否フラグに基づいて、上記診断項目記憶部が記憶した複数の診断項目を、上記対象装置の動作中に診断できる動作中診断可能項目と、上記対象装置の動作中に診断できない動作中診断不可項目とに分類し、複数回の診断処理により、分類した動作中診断不可項目について診断をする起動時診断計画と、複数回の診断処理により、分類した動作中診断可能項目について診断をする動作中診断計画とを作成し、
上記診断実行部は、上記処理装置を用いて、上記対象装置が起動した場合に、上記診断計画作成部が作成した起動時診断計画に基づいて、一回の診断処理を実行し、上記対象装置が動作中の場合に、上記診断計画作成部が作成した動作中診断計画に基づいて、一回の診断処理を実行することを特徴とする請求項１乃至請求項３のいずれかに記載の診断装置。
【請求項５】
上記診断実行部は、上記処理装置を用いて、上記対象装置がアイドル状態となった場合に、上記診断計画作成部が作成した動作中診断計画に基づいて、一回の診断処理を実行することを特徴とする請求項４に記載の診断装置。
【請求項６】
上記診断計画作成部は、上記処理装置を用いて、上記診断項目記憶部が記憶した複数の診断項目を複数の診断項目群に分類し、複数回の診断処理のそれぞれにおいて、分割した複数の診断項目群のなかから順に選択した一つの診断項目群に属する診断項目について診断をする診断計画を作成することを特徴とする請求項１乃至請求項５のいずれかに記載の診断装置。
【請求項７】
上記診断装置は、更に、診断重要度記憶部を有し、
上記診断重要度記憶部は、上記記憶装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のそれぞれについて、診断の重要性を表わす診断重要度を記憶し、
上記診断計画作成部は、上記処理装置を用いて、上記診断重要度記憶部が記憶した診断重要度に基づいて、診断重要度が高い診断項目ほど高い頻度で診断をする診断計画を作成することを特徴とする請求項１乃至請求項６のいずれかに記載の診断装置。
【請求項８】
上記診断装置は、更に、異常状況判定部を有し、
上記異常状況判定部は、、上記処理装置を用いて、上記対象装置が故障しやすくなる異常状況が発生したか否かを判定し、
上記診断計画作成部は、上記処理装置を用いて、異常状況が発生したと上記異常状況判定部が判定した場合に、所定の異常時診断回数の診断処理により、上記診断項目記憶部が記憶した複数の診断項目について診断をする診断計画を作成し、異常状況が発生していないと上記異常状況判定部が判定した場合に、上記所定の異常時診断回数よりも多い回数の診断処理により、上記診断項目記憶部が記憶した複数の診断項目について診断をする診断計画を作成することを特徴とする請求項１乃至請求項７のいずれかに記載の診断装置。
【請求項９】
上記診断装置は、更に、異常状況判定部と、故障発生可能性記憶部とを有し、
上記異常状況判定部は、上記処理装置を用いて、上記対象装置が故障しやすくなる異常状況が発生したか否かを判定し、
上記故障発生可能性記憶部は、上記記憶装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のそれぞれについて、上記異常状況判定部が判定する異常状況が発生した場合に上記対象装置が故障する可能性を表わす故障発生可能性を記憶し、
上記診断計画作成部は、上記処理装置を用いて、異常状況が発生したと上記異常状況判定部が判定した場合に、上記故障発生可能性記憶部が記憶した故障発生可能性に基づいて、故障する可能性の高い診断項目ほど優先して診断をする診断計画を作成することを特徴とする請求項１乃至請求項８のいずれかに記載の診断装置。
【請求項１０】
データを記憶する記憶装置と、データを処理する処理装置とを有するコンピュータが実行することにより、上記コンピュータが請求項１乃至請求項９のいずれかに記載の診断装置として機能することを特徴とするコンピュータプログラム。
【請求項１１】
データを記憶する記憶装置と、データを処理する処理装置とを有する診断装置が、対象装置の故障を診断する診断方法において、
上記処理装置が、上記記憶装置が記憶した複数の診断項目のなかから一回の診断処理において診断する診断項目を抽出し、複数回の診断処理により、上記記憶装置が記憶した複数の診断項目について診断をする診断計画を作成し、
上記対象装置が起動した場合に、上記処理装置が、作成した診断計画に基づいて、一回の診断処理を実行することを特徴とする診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、組込み機器などの装置に内蔵され、内蔵された装置の故障を診断する診断装置に関する。
【背景技術】
【０００２】
カーナビゲーション端末、ポータブルナビゲーション端末、携帯電話、ライフログ端末、デジカメ、ビデオレコーダなど、組み込み型の小型のコストを抑えた情報処理機器や、ウエアラブル端末などの装置は、暴走、異常な動作、ユーザの大事なデータの破壊などを防ぐため、起動時に診断を行う。
一方、これらの装置は、一般ユーザが電源を入れたら待つことなくすぐにでも使いたいという要望がある。
【特許文献１】特開平９−６２５３４号公報
【特許文献２】特開２０００−２７６３１５号公報
【特許文献３】特開平５−１２０１５７号公報
【特許文献４】特開２０００−２３１３１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
起動時に診断を行わなければ、起動を速くすることができるが、安全性が確保できないという課題がある。
装置がアイドル状態となった場合など装置の動作中に診断を行う方式も考えられるが、装置の動作中には診断できない部分がある場合は、やはり、安全性が確保できないという課題がある。
この発明は、例えば上記のような課題を解決するためになされたものであり、対象装置の起動にかかる時間を短くしつつ、診断が必要な項目についての診断を実行し、対象装置を安全に使用できるようにすることを目的とする。
【課題を解決するための手段】
【０００４】
この発明にかかる診断装置は、
データを記憶する記憶装置と、データを処理する処理装置と、診断項目記憶部と、診断計画作成部と、診断実行部とを有し、
上記診断項目記憶部は、上記記憶装置を用いて、対象装置の故障を診断する複数の診断項目を記憶し、
上記診断計画作成部は、上記処理装置を用いて、上記診断項目記憶部が記憶した複数の診断項目のなかから一回の診断処理において診断する診断項目を抽出し、複数回の診断処理により、上記診断項目記憶部が記憶した複数の診断項目について診断をする診断計画を作成し、
上記診断実行部は、上記処理装置を用いて、上記対象装置が起動した場合に、上記診断計画作成部が作成した診断計画に基づいて、一回の診断処理を実行することを特徴とする。
【発明の効果】
【０００５】
この発明にかかる診断装置によれば、対象装置が起動したとき、診断すべき複数の診断項目のなかから診断計画作成部が抽出した診断項目について診断をするので、起動時の待ち時間を短くすることができる。また、診断計画作成部が、複数回の診断処理で、診断すべき複数の診断項目を診断する診断計画を作成するので、故障を見逃すことなく、対象装置を安全に使用することができる。
【発明を実施するための最良の形態】
【０００６】
実施の形態１．
実施の形態１について、図１〜図１２を用いて説明する。
【０００７】
図１は、この実施の形態における組込み機器８００のハードウェア構成の一例を示すハードウェア構成図である。
組込み機器８００は、例えば、ＣＰＵ９１１、表示装置９０１、入力装置９０２、ＲＡＭ９１４、スピーカ９０８、磁気ディスク装置９２０、フラッシュメモリ９３０、メモリカード読取装置９５１、カメラ９５２、通信メモリ９５３、温度センサ９６１、衝撃センサ９６２などを有する。組込み機器８００は、コンピュータの一種である。
【０００８】
ＲＡＭ９１４（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）・磁気ディスク装置９２０・フラッシュメモリ９３０は、ＣＰＵ９１１が実行するプログラムや、ＣＰＵ９１１が処理するデータなどを記憶する記憶装置である。ＲＡＭ９１４は、揮発性の記憶装置であり、磁気ディスク装置９２０やフラッシュメモリ９３０は、不揮発性の記憶装置である。
【０００９】
ＣＰＵ９１１は、ＲＡＭ９１４・磁気ディスク装置９２０・フラッシュメモリ９３０などの記憶装置が記憶したプログラムを実行することにより、ＲＡＭ９１４・磁気ディスク装置９２０・フラッシュメモリ９３０などの記憶装置が記憶したデータを処理する処理装置である。
【００１０】
入力装置９０２は、例えばキーボードやボタンなど、データを入力する装置である。
表示装置９０１は、例えばＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）など、文字や図形などを表示することにより、利用者に対して、データを視覚的に出力する装置である。
スピーカ９０８は、音声などを出力することにより、利用者に対して、データを聴覚的に出力する装置である。
【００１１】
メモリカード読取装置９５１は、メモリカード８１０からデータを読み取ったり、メモリカード８１０にデータを書き込んだりする装置である。
カメラ９５２は、静止画や動画などの画像や映像を撮影する装置である。
通信メモリ９５３は、カメラ９５２が撮影した画像や映像を表わすデータを一時的に記憶しておくための記憶装置である。ＣＰＵ９１１は、通信メモリ９５３が記憶したデータを読み出すことにより、カメラ９５２が撮影した画像や映像を取得する。
【００１２】
温度センサ９６１は、ＣＰＵ９１１・磁気ディスク装置９２０・組込み機器８００の周辺などの温度を測定する測定装置である。
衝撃センサ９６２は、組込み機器８００に加えられた衝撃を測定する測定装置である。
なお、組込み機器８００が動作していない間の温度や衝撃も測定し、最高温度や最大衝撃を記憶しておく機能を有する温度センサ９６１・衝撃センサ９６２であれば、更に望ましい。
【００１３】
図２は、この実施の形態における組込み機器８００のソフトウェアの階層構成の一例を示すソフトウェア階層図である。
磁気ディスク装置９２０などの記憶装置は、ＯＳ９２１、ミドルウェア９２２、アプリケーション９２３〜９２５などのプログラムを記憶している。
ＯＳ９２１（Ｏｐｅｒａｔｉｎｇ  Ｓｙｔｅｍ）は、図１で説明したハードウェア上で動作するプログラムである。
ミドルウェア９２２は、ＯＳ９２１上で動作するプログラムである。
アプリケーション９２３〜９２５は、ミドルウェア９２２上で動作するプログラムである。
【００１４】
この例において、診断装置１００は、ソフトウェア的に実現される。すなわち、磁気ディスク装置９２０などの記憶装置が記憶したプログラムをＣＰＵ９１１が実行することにより、組込み機器８００が診断装置１００として機能する。なお、診断装置１００は、ハードウェア的に実現されるものであってもよいし、診断装置１００の機能のうちの一部分をハードウェア的に実現し、他の部分をソフトウェア的に実現するものであってもよい。
【００１５】
診断装置１００は、起動時診断実行部２１０、動作中診断実行部２２０を有する。
起動時診断実行部２１０は、組込み機器８００の起動時に自己診断を実行し、組込み機器８００が故障しているか否かを判定する。起動時診断実行部２１０が自己診断を実行して、組込み機器８００が故障していないと判定した場合、ＣＰＵ９１１はＯＳ９２１を起動し、組込み機器８００の本来の動作を実行する。起動時診断実行部２１０は、ＯＳ９２１起動前に自己診断を実行するので、ＯＳ９２１の機能に頼らずに動作する。これにより、起動時診断実行部２１０は、ＯＳ９２１が動作中には診断できない部分の診断をすることができる。
【００１６】
動作中診断実行部２２０は、組込み機器８００の動作中に自己診断を実行し、組込み機器８００が故障しているか否かを判定する。動作中診断実行部２２０は、ＯＳ９２１起動後に自己診断を実行するので、ＯＳ９２１あるいはミドルウェア９２２が提供する機能を利用することができるが、ＯＳ９２１やミドルウェア９２２が動作中でも診断できる部分の診断しかすることができない。
【００１７】
図３は、この実施の形態における診断装置１００の機能ブロックの構成の一例を示すブロック構成図である。
診断装置１００は、診断項目データベース記憶部１１０、診断計画作成部１２０、制限時間入力部１３０、異常状況判定部１４０、診断所要時間計測部１５０、診断結果記憶部１６０、診断結果出力部１７０、診断計画記憶部１９０、診断実行部２００を有する。
上述した起動時診断実行部２１０及び動作中診断実行部２２０は、診断実行部２００の一部である。
【００１８】
診断項目データベース記憶部１１０は、磁気ディスク装置９２０を用いて、診断項目に関する情報を記憶する。
診断項目とは、組込み機器８００を構成するハードウェアごとに分け、更に、それぞれのハードウェアについて、その機能などによって分けた項目であって、それぞれ単独で試験をするなどして、故障しているか否かを診断することができる単位のことである。診断項目は、後述する診断計画作成の自由度を高くするため、なるべく細分化されているほうがよい。例えば、フラッシュメモリ９３０を診断対象とする診断項目であれば、全記憶領域を一つの診断項目とするのではなく、読み出し・書き込みの診断であればページごと、消去の診断であればブロックごとに分割した診断項目とするほうが望ましい。
なお、磁気ディスク装置９２０が故障した場合に備えて、診断項目データベース記憶部１１０は、磁気ディスク装置９２０を用いて記憶したのと同じ情報を、フラッシュメモリ９３０など他の記憶装置を用いて記憶する構成としてもよい。後述する診断計画記憶部１９０、診断結果記憶部１６０なども同様である。
【００１９】
制限時間入力部１３０は、入力装置９０２を用いて、利用者が指定する制限時間を入力する。制限時間入力部１３０は、ＣＰＵ９１１を用いて、入力した制限時間を出力する。
制限時間とは、一回の診断処理に許容する最大時間のことである。例えば、組込み機器８００の起動時に行う診断は、組込み機器８００を起動後すぐに利用したいという利用者のニーズに鑑みれば、できるかぎり短い時間で行うほうがよい。そのため、起動時の診断処理にかかる時間の制限を設け、制限時間内に診断を終え、組込み機器８００が利用可能になるようにする。
また、動作中に行う診断は、通常、組込み機器８００がアイドル状態になったときに実行する。診断処理の実行中に、利用者が組込み機器８００を利用しようとした場合、診断処理が終了してから、通常の動作に復帰するとすると、最大で、動作中の診断処理にかかる時間だけ、利用者を待たせることになる。そのため、動作中の診断処理にかかる時間にも制限を設け、利用者の待ち時間が、最大でも制限時間内に収まるようにする。なお、起動時における診断処理の制限時間（以下「起動時制限時間」と呼ぶ。）と、動作中における診断処理の制限時間（以下「動作中制限時間」と呼ぶ。）とは、異なっていてもよい。
なお、組込み機器８００が、動作中における診断処理の実行中に、利用者が組込み機器８００を利用しようとした場合、診断処理を中断して通常の動作に復帰する構成である場合などは、動作中制限時間を設けなくともよい。
【００２０】
異常状況判定部１４０は、ＣＰＵ９１１を用いて、温度センサ９６１や衝撃センサ９６２が測定した温度や衝撃に基づいて、組込み機器８００の故障の原因となるような異常状況が発生したか否かを判定する。異常状況判定部１４０は、ＣＰＵ９１１を用いて、判定した判定結果を出力する。
例えば、組込み機器８００が強い衝撃を受けた場合には、磁気ディスク装置９２０が故障する可能性が高くなる。
なお、温度や衝撃は、組込み機器８００が故障しやすくなる状況を判定するための基礎となる情報の一例であり、組込み機器８００が、他の情報を測定するセンサを備え、異常状況判定部１４０が、その情報に基づいて、異常状況が発生したか否かを判定する構成であってもよい。
【００２１】
診断計画作成部１２０は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目に関する情報に基づいて、診断計画を作成する。診断計画作成部１２０は、ＣＰＵ９１１を用いて、作成した診断計画を出力する。
診断計画とは、起動時あるいは動作中の診断処理において、どの診断項目をどのような順序で診断するかを定めたものである。診断計画作成部１２０は、ＣＰＵ９１１を用いて、制限時間入力部１３０が出力した制限時間を入力し、入力した制限時間に基づいて、一回の診断処理にかかる時間が制限時間を超えないように、診断計画を作成する。すべての診断項目について診断するのにかかる時間が制限時間を超える場合、診断計画作成部１２０は、一回の診断処理では一部の診断項目についての診断を実行し、複数回の診断処理で、すべての診断項目についての診断を終えるよう、診断計画を作成する。
また、診断計画作成部１２０は、ＣＰＵ９１１を用いて、異常状況判定部１４０が出力した判定結果を入力し、入力した判定結果に基づいて、異常状況が発生した場合、その異常状況によって故障しやすくなった部分についての診断を、他の診断より優先して行うよう、診断計画を作成する。
【００２２】
診断計画記憶部１９０は、ＣＰＵ９１１を用いて、診断計画作成部１２０が出力した診断計画を入力する。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、入力した診断計画を記憶する。
【００２３】
診断実行部２００は、ＣＰＵ９１１を用いて、診断計画記憶部１９０が記憶した診断計画を入力する。診断実行部２００は、ＣＰＵ９１１を用いて、入力した診断計画に基づいて、診断処理を実行する。起動時診断実行部２１０は、ＣＰＵ９１１を用いて、起動時における診断処理を実行し、動作中診断実行部２２０は、ＣＰＵ９１１を用いて、動作中における診断処理を実行する。診断実行部２００は、ＣＰＵ９１１を用いて、診断した診断結果を出力する。
【００２４】
診断所要時間計測部１５０は、ＣＰＵ９１１を用いて、診断実行部２００が実行した診断処理において診断した診断項目それぞれについて、診断にかかった時間（以下「診断所要時間」と呼ぶ。）を計測する。診断所要時間計測部１５０は、ＣＰＵ９１１を用いて、計測した診断所要時間を出力する。診断所要時間計測部１５０が出力した診断所要時間は、診断項目データベース記憶部１１０が入力し、記憶した診断項目に関する情報の更新に利用する。
【００２５】
診断結果記憶部１６０は、ＣＰＵ９１１を用いて、診断実行部２００が出力した診断結果を入力する。診断結果記憶部１６０は、磁気ディスク装置９２０を用いて、入力した診断結果を記憶する。
【００２６】
診断結果出力部１７０は、ＣＰＵ９１１を用いて、診断結果記憶部１６０が記憶した診断結果を入力する。診断結果出力部１７０は、表示装置９０１やスピーカ９０８を用いて、入力した診断結果に基づいて、利用者に知らせるべき情報を出力する。
利用者に知らせるべき情報には、例えば、「故障のため、組込み機器８００を起動できない」旨、「故障のため、組込み機器８００の動作を停止する」旨、「故障があり、特定の機能が利用できない」旨、「故障があり、特に利用できない機能はないが、注意が必要である」旨など、故障箇所や故障の深刻度に応じた情報がある。診断結果出力部１７０は、ＣＰＵ９１１を用いて、入力した診断結果に基づいて、利用者に知らせるべき情報を生成し、生成した情報を、表示装置９０１を用いて表示したり、スピーカ９０８を用いて音声案内として出力したりする。
【００２７】
図４は、この実施の形態における診断項目データベース記憶部１１０が記憶する診断項目に関する情報の一例を示す図である。
診断項目データベース記憶部１１０は、例えば、一つの診断項目について、診断対象５１１、診断内容５１２、診断所要時間５２１、診断重要度５３１、動作中診断可否５４１、故障発生可能性５５１、故障発生可能性５５２などの情報の組（レコード）を記憶し、複数の診断項目に対応する複数のレコードを記憶する。
【００２８】
診断対象５１１は、その診断項目において診断の対象となるハードウェアを表わす情報である。
診断内容５１２は、その診断項目において診断対象のハードウェアの何について診断をするかを表わす情報である。例えば、ハードウェアの機能ごとに診断項目を分ける場合、診断内容５１２は、診断する機能を表わし、ハードウェアを複数の部分に分割して診断する場合（例えば、フラッシュメモリ９３０をページやブロックごとに分けて診断する場合や、磁気ディスク装置９２０をセクタやトラックごとに分けて診断する場合など）、診断内容５１２は、分割された部分を表わす番号などである。
診断対象５１１及び診断内容５１２は、診断項目の一例であり、診断項目データベース記憶部１１０のうち、診断対象５１１及び診断内容５１２を記憶する部分は、診断項目記憶部１１１の一例である。
【００２９】
診断所要時間５２１は、その診断項目について、診断実行部２００が診断をするのにかかる時間を表わす情報である。例えば、診断項目データベース記憶部１１０は、ＣＰＵ９１１を用いて、診断所要時間計測部１５０が出力した診断所要時間を入力し、入力した診断所要時間を所定の回数分平均して、平均所要時間を算出し、算出した平均所要時間を診断所要時間５２１として記憶する。なお、まだ診断を実行していない初期状態においては、あらかじめ予測した診断所要時間５２１を、診断項目データベース記憶部１１０が記憶しておく構成とすることが望ましい。
診断項目データベース記憶部１１０のうち、診断所要時間５２１を記憶する部分は、診断所要時間記憶部１１２の一例である。
【００３０】
診断重要度５３１は、その診断項目の重要性を数値化した情報である。診断項目の重要性は、例えば、その診断項目によって診断できる故障が組込み機器８００に与える影響の大きさに比例する。すなわち、故障により動作停止など重大な障害が発生する項目は、重要性が高く、故障によりその機能が使えないだけで全体の動作には影響しない項目は、重要性が低い。また、診断項目の重要性は、その診断項目によって診断できる故障の発生しやすさにも比例する。すなわち、故障の発生頻度が高い項目は、重要性が高く、故障が滅多に発生しない項目は、重要性が低い。診断重要度５３１は、診断項目の重要性が高いほど、大きい数値で表わす構成であってもよいし、診断項目の重要性が高いほど、小さい数値で表わす構成であってもよいが、以下の説明では、診断項目の重要性が高いほど、大きい数値で表わすものとする。
診断項目データベース記憶部１１０のうち、診断重要度５３１を記憶する部分は、診断重要度記憶部１１３の一例である。
【００３１】
動作中診断可否５４１は、その診断項目が、組込み機器８００の動作中に診断することのできる項目であるか否かを表わす情報である。例えば、この例において、「可」は、動作中診断実行部２２０が組込み機器８００の動作中に診断することのできる項目を表わし、「否」は、動作中診断実行部２２０が組込み機器８００の動作中に診断することはできず、起動時診断実行部２１０が組込み機器８００の起動時に診断する必要がある項目を表わす。
診断項目データベース記憶部１１０のうち、動作中診断可否５４１を記憶する部分は、動作中診断可否記憶部１１４の一例である。
【００３２】
故障発生可能性５５１，５５２は、異常状況が発生した場合に、その診断項目によって診断できる故障が発生する可能性を数値化した情報である。例えば、故障発生可能性５５１は、組込み機器８００の温度が所定の温度より高くなった場合に、その故障が発生する可能性を表わす。また、故障発生可能性５５２は、組込み機器８００が所定の閾値よりも強い衝撃を受けた場合に、その故障が発生する可能性を表わす。故障発生可能性５５１，５５２は、故障発生の可能性が高いほど、大きい数値で表わす構成であってもよいし、故障発生の可能性が高いほど、小さい数値で表わす構成であってもよいが、以下の説明では、故障発生の可能性が高いほど、大きい数値で表わすものとする。
診断項目データベース記憶部１１０のうち、故障発生可能性５５１，５５２を記憶する部分は、故障発生可能性記憶部１１５の一例である。
【００３３】
図５は、この実施の形態における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図である。
診断計画作成部１２０は、制限時間記憶部１２１、総所要時間算出部１２２、診断所要回数算出部１２３、診断項目振り分け部１２４を有する。
【００３４】
制限時間記憶部１２１は、ＣＰＵ９１１を用いて、制限時間入力部１３０が出力した制限時間（起動時制限時間及び動作中制限時間）を入力する。制限時間記憶部１２１は、磁気ディスク装置９２０を用いて、入力した制限時間を記憶する。
【００３５】
総所要時間算出部１２２は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶したすべての診断項目について診断所要時間５２１と動作中診断可否５４１とを入力する。総所要時間算出部１２２は、ＣＰＵ９１１を用いて、入力した動作中診断可否５４１に基づいて、診断項目を、組込み機器８００の動作中に診断できる項目（以下「動作中診断項目」と呼ぶ。）と、組込み機器８００の動作中に診断できない項目（以下「起動時診断項目」と呼ぶ。）とに分類する。総所要時間算出部１２２は、ＣＰＵ９１１を用いて、分類したそれぞれの項目について、診断所要時間５２１を合計する。総所要時間算出部１２２は、ＣＰＵ９１１を用いて、動作中診断項目について計算した合計を、動作中診断総所要時間として出力する。総所要時間算出部１２２は、ＣＰＵ９１１を用いて、起動時診断項目について計算した合計を、起動時診断総所要時間として出力する。
【００３６】
診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した起動時制限時間及び動作中制限時間と、総所要時間算出部１２２が出力した起動時診断総所要時間及び動作中診断総所要時間とを入力する。
診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、入力した起動時診断総所要時間と起動時制限時間とに基づいて、起動時の診断処理を何回実行すれば起動時診断項目すべてについての診断ができるか（以下「起動時診断所要回数」と呼ぶ。）を算出する。診断所要回数算出部１２３は、算出した起動時診断所要回数を出力する。
例えば、診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、起動時診断総所要時間を起動時制限時間で割った商を算出し、算出した商の端数を切り上げて整数にして、起動時診断所要回数とする。なお、余裕を見て、診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、更に１を加えたものを起動時診断所要回数とする構成であってもよい。
また、診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、入力した動作中診断総所要時間と動作中制限時間とに基づいて、動作中の診断処理を何回実行すれば動作中診断項目すべてについての診断ができるか（以下「動作中診断所要回数」と呼ぶ。）を算出する。診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、算出した動作中診断所要回数を出力する。なお、動作中診断所要回数の具体的な算出方式は、起動時診断所要回数と同様である。
【００３７】
診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断所要回数算出部１２３が出力した起動時診断所要回数及び動作中診断所要回数と、制限時間記憶部１２１が記憶した起動時制限時間及び動作中制限時間とを入力する。
診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、入力した起動時診断所要回数と起動時制限時間とに基づいて、診断項目データベース記憶部１１０が記憶した診断項目のうち、起動時診断項目を、一回の診断処理にかかる時間の合計が起動時制限時間を超えないよう、起動時診断所要回数の診断処理に振り分ける。診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、各回の診断処理にどの診断項目を振り分けたかを表わす情報（以下「起動時診断計画」と呼ぶ。）を出力する。
また、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、入力した動作中診断所要回数と動作中制限時間とに基づいて、診断項目データベース記憶部１１０が記憶した診断項目のうち、動作中診断項目を、一回の診断処理にかかる時間の合計が動作中制限時間を超えないよう、動作中診断回数の診断処理に振り分ける。診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、各回の診断処理にどの診断項目を振り分けたかを表わす情報（以下「動作中診断計画」と呼ぶ。）を出力する。
診断項目振り分け部１２４が出力した起動時診断計画と動作中診断計画とは、診断計画記憶部１９０が入力し、記憶する。
【００３８】
なお、診断項目振り分け部１２４は、動作中診断項目の一部あるいは全部を、動作中診断処理ではなく、起動時診断処理で診断する診断計画を作成する構成としてもよい。
例えば、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、作成した起動時診断計画において、各回の診断処理にかかる時間が制限時間より短い場合、余った時間を利用して、動作中診断項目を診断する起動時診断計画を作成する。診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、動作中診断項目のなかから、起動時に診断することとした診断項目を除き、残りの診断項目について、動作中診断計画を作成する。このとき、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断所要回数算出部１２３が算出した動作中所要回数よりも少ない回数の診断処理で、一回あたりの診断処理にかかる時間が制限時間を超えることなく、残った診断項目についての診断が実行できるのであれば、動作中所要回数を減らす構成としてもよい。
あるいは、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、起動時診断所要回数が所定の回数（例えば４回）以下であり、かつ、動作中診断所要回数が所定の回数（例えば１０回）を超える場合に、起動時診断所要回数を所定の回数まで増やし、起動時診断計画を作成する。上述した例と同様、余った時間には、動作中診断項目を診断することとし、その分、動作中診断所要回数を減らす構成としてもよい。
【００３９】
図６は、この実施の形態における診断計画作成部起動時診断実行部２１０及び動作中診断実行部２２０の詳細ブロックの構成の一例を示す詳細ブロック図である。
起動時診断実行部２１０は、起動時診断回数記憶部２１１、起動時診断計画取得部２１２、起動時診断部２１３、起動時診断回数更新部２１４、動作中診断計画取得部２１５、動作中診断項目確保部２１６を有する。
動作中診断実行部２２０は、動作中診断回数記憶部２２１、確保項目開放部２２２、診断項目確保判定部２２３、動作中診断部２２４、動作中診断回数更新部２２５を有する。
【００４０】
起動時診断回数記憶部２１１は、磁気ディスク装置９２０を用いて、起動時診断計画のうち、何回目の診断処理までが終わったか（以下「起動時診断回数」と呼ぶ。）を記憶する。例えば、起動時診断処理をまだ一度も実行したことがなければ、起動時診断回数記憶部２１１は、起動時診断回数として「０」を記憶している。
【００４１】
起動時診断計画取得部２１２は、ＣＰＵ９１１を用いて、起動時診断回数記憶部２１１が記憶した起動時診断回数を入力する。起動時診断計画取得部２１２は、ＣＰＵ９１１を用いて、入力した起動時診断回数に基づいて、次に実行すべき起動時診断処理についての診断計画を、診断計画記憶部１９０が記憶した起動時診断計画から取得する。起動時診断計画取得部２１２は、ＣＰＵ９１１を用いて、取得した診断計画を出力する。
【００４２】
起動時診断部２１３は、ＣＰＵ９１１を用いて、起動時診断計画取得部２１２が出力した診断計画を入力する。起動時診断部２１３は、ＣＰＵ９１１を用いて、入力した診断計画に基づいて、診断すべき診断項目についての診断を実行する。
起動時診断部２１３は、ＣＰＵ９１１を用いて、各診断項目についての診断を開始する前に、これから診断を開始する診断項目を、診断所要時間計測部１５０に対して通知する。また、起動時診断部２１３は、ＣＰＵ９１１を用いて、各診断項目についての診断が終了した後に、診断が終了した診断項目を、診断所要時間計測部１５０に対して通知する。診断所要時間計測部１５０は、起動時診断部２１３からの通知に基づいて、各診断項目についての診断所要時間を計測する。
また、起動時診断部２１３は、ＣＰＵ９１１を用いて、各診断項目についての診断が終了した後、診断した結果、故障を発見したか否か、故障を発見した場合はその程度などを、診断結果として出力する。起動時診断部２１３が出力した診断結果は、診断結果記憶部１６０が入力し、記憶する。
更に、起動時診断部２１３は、ＣＰＵ９１１を用いて、診断計画で予定されていたすべての診断項目についての診断が終了した場合、起動時診断回数更新部２１４に対して、診断終了を通知する。
【００４３】
起動時診断回数更新部２１４は、ＣＰＵ９１１を用いて、起動時診断部２１３からの通知を入力する。起動時診断回数更新部２１４は、ＣＰＵ９１１を用いて、起動時診断部２１３が診断終了を通知した場合に、起動時診断回数記憶部２１１が記憶した起動時診断回数を更新する。起動時診断回数更新部２１４は、ＣＰＵ９１１を用いて、起動時診断回数記憶部２１１が記憶した起動時診断回数を入力し、入力した起動時診断回数に「１」を加える。起動時診断回数更新部２１４は、ＣＰＵ９１１を用いて、起動時診断回数が起動時診断所要回数に達した場合、起動時診断回数を「０」にする。起動時診断回数記憶部２１１は、磁気ディスク装置９２０を用いて、起動時診断回数更新部２１４が更新した起動時診断回数を記憶する。
【００４４】
動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、後述する動作中診断回数記憶部２２１が記憶した動作中診断回数を入力する。動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、入力した動作中診断回数に基づいて、次に実行すべき動作中診断処理についての診断計画を、診断計画記憶部１９０が記憶した動作中診断計画のなかから取得する。動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、取得した診断計画を出力する。
【００４５】
動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、動作中診断計画取得部２１５が出力した診断計画を入力する。動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、入力した診断計画に含まれる診断項目の診断対象のうち、あとで診断を実行するために確保しておくべき診断対象を抽出し、抽出した診断対象を確保する。
例えば、ＲＡＭ９１４の記憶領域の一部が診断対象である場合、その記憶領域を、ＯＳ９２１、ミドルウェア９２２、アプリケーション９２３〜９２５などが使っていると、組込み機器８００の動作中に診断をすることができなくなる。このため、動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、その記憶領域をＯＳ９２１などが使わないよう、切り離して確保する。
【００４６】
動作中診断回数記憶部２２１は、磁気ディスク装置９２０を用いて、動作中診断計画のうち、何回目の動作中診断処理までが終わったか（「動作中診断回数」と呼ぶ。）を記憶する。例えば、動作中診断処理をまだ一度も実行したことがなければ、動作中診断回数記憶部２２１は、動作中診断回数として「０」を記憶している。
【００４７】
確保項目開放部２２２は、組込み機器８００が動作中であるとき、ＣＰＵ９１１を用いて、組込み機器８００が動作するために必要な資源が不足しているか否かを判定する。確保項目開放部２２２は、ＣＰＵ９１１を用いて、資源が不足していると判定した場合、動作中診断項目確保部２１６が確保した診断対象のうち、開放することで資源不足を解消することができるものがあるかを判定する。確保項目開放部２２２は、ＣＰＵ９１１を用いて、資源不足を解消することができると判定した診断対象を開放する。
例えば、動作中診断項目確保部２１６がＲＡＭ９１４の記憶領域の一部を確保している状態で、組込み機器８００がメモリ不足状態となった場合、確保項目開放部２２２は、ＣＰＵ９１１を用いて、動作中診断項目確保部２１６が確保した記憶領域を開放して、ＯＳ９２１などが利用できるようにする。
また、確保項目開放部２２２は、ＣＰＵ９１１を用いて、後述する動作中診断部２２４が診断終了を通知した場合、動作中診断項目確保部２１６が確保した診断対象を開放する。
【００４８】
診断項目確保判定部２２３は、組込み機器８００が動作中であり、かつ、組込み機器８００がアイドル状態になるなど、動作中診断処理の開始条件が整ったとき、ＣＰＵ９１１を用いて、動作中診断計画取得部２１５が出力した診断計画を入力する。診断項目確保判定部２２３は、ＣＰＵ９１１を用いて、入力した診断計画に含まれる診断項目の診断対象のうち、診断を実行するために確保しておくべき診断対象を確保項目開放部２２２が開放したか否かを判定する。診断項目確保判定部２２３は、ＣＰＵ９１１を用いて、判定した判定結果を出力する。
【００４９】
動作中診断部２２４は、ＣＰＵ９１１を用いて、診断項目確保判定部２２３が出力した判定結果を入力する。動作中診断部２２４は、ＣＰＵ９１１を用いて、入力した判定結果に基づいて、診断を実行するために確保しておくべき診断対象を確保項目開放部２２２が開放していないと診断項目確保判定部２２３が判定した場合、診断すべき診断項目についての診断を実行する。
動作中診断部２２４は、ＣＰＵ９１１を用いて、各診断項目について診断を開始する前に、これから診断を開始する診断項目を、診断所要時間計測部１５０に対して通知する。また、動作中診断部２２４は、ＣＰＵ９１１を用いて、各診断項目について診断が終了した後に、診断が終了した診断項目を、診断所要時間計測部１５０に対して通知する。診断所要時間計測部１５０は、動作中診断部２２４からの通知に基づいて、各診断項目についての診断所要時間を計測する。
また、動作中診断部２２４は、ＣＰＵ９１１を用いて、各診断項目についての診断が終了した後、診断した診断結果を出力する。動作中診断部２２４が出力した診断結果は、診断結果記憶部１６０が入力し、記憶する。
更に、動作中診断部２２４は、ＣＰＵ９１１を用いて、診断計画で予定されていたすべての診断項目についての診断が終了した場合、確保項目開放部２２２と動作中診断回数更新部２２５とに対して、診断終了を通知する。
【００５０】
動作中診断回数更新部２２５は、ＣＰＵ９１１を用いて、動作中診断部２２４からの通知を入力する。動作中診断回数更新部２２５は、ＣＰＵ９１１を用いて、動作中診断部２２４が診断終了を通知した場合に、動作中診断回数記憶部２２１が記憶した動作中診断回数を更新する。動作中診断回数更新部２２５は、ＣＰＵ９１１を用いて、動作中診断回数記憶部２２１が記憶した動作中診断回数を入力し、入力した動作中診断回数に「１」を加える。動作中診断回数更新部２２５は、動作中診断回数が動作中診断所要回数に達した場合、動作中診断回数を「０」にする。動作中診断回数記憶部２２１は、磁気ディスク装置９２０を用いて、動作中診断回数更新部２２５が更新した動作中診断回数を記憶する。
【００５１】
図７は、この実施の形態における組込み機器８００全体の動作の流れの一例を示すフローチャート図である。
【００５２】
電源投入などにより組込み機器８００が起動すると、組込み機器８００は、まず、故障検出判定工程Ｓ６１０を実行する。
故障検出判定工程Ｓ６１０において、組込み機器８００は、ＣＰＵ９１１を用いて、診断装置１００が故障を既に検出しているか否かを判定する。
組込み機器８００は、ＣＰＵ９１１を用いて、診断装置１００が故障を既に検出していると判定した場合、故障警告工程Ｓ７１０へ進む。
組込み機器８００は、ＣＰＵ９１１を用いて、診断装置１００が故障を検出していないと判定した場合、診断計画作成済判定工程Ｓ６２０へ進む。
【００５３】
診断計画作成済判定工程Ｓ６２０において、診断装置１００は、ＣＰＵ９１１を用いて、診断計画作成部１２０が診断計画を既に作成してあるか否かを判定する。
診断装置１００は、ＣＰＵ９１１を用いて、診断計画作成部１２０が診断計画を既に作成してあると判定した場合、起動時診断処理Ｓ６４０へ進む。
診断装置１００は、ＣＰＵ９１１を用いて、診断計画作成部１２０が診断計画をまだ作成していないと判定した場合、診断計画作成処理Ｓ６３０へ進む。
【００５４】
診断計画作成処理Ｓ６３０において、診断計画作成部１２０は、ＣＰＵ９１１を用いて、診断計画を作成する。診断計画作成処理Ｓ６３０の詳細については、後述する。
【００５５】
起動時診断処理Ｓ６４０において、起動時診断実行部２１０は、ＣＰＵ９１１を用いて、診断計画作成処理Ｓ６３０で診断計画作成部１２０が作成した起動時診断計画に基づいて、一回の診断処理を実行する。
診断装置１００は、ＣＰＵ９１１を用いて、診断処理により故障を発見した場合、故障警告工程Ｓ７１０へ進む。
診断装置１００は、ＣＰＵ９１１を用いて、診断処理により故障を発見しなかった場合、動作中診断項目確保処理Ｓ６５０へ進む。
【００５６】
動作中診断項目確保処理Ｓ６５０において、起動時診断実行部２１０は、ＣＰＵ９１１を用いて、診断計画作成処理Ｓ６３０で診断計画作成部１２０が作成した動作中診断計画に基づいて、次回の診断処理を実行するために必要な診断対象を確保する。
【００５７】
動作処理Ｓ６６０において、組込み機器８００は、ＣＰＵ９１１を用いて、ＯＳ９２１などを起動し、組込み機器８００本来の動作をする。
組込み機器８００本来の動作中に、組込み機器８００が資源不足になった場合、組込み機器８００は、ＣＰＵ９１１を用いて、確保項目開放処理Ｓ６７０へ進む。
組込み機器８００本来の動作中に、組込み機器８００がアイドル状態となった場合、組込み機器８００は、ＣＰＵ９１１を用いて、診断項目確保判定処理Ｓ６８０へ進む。
それ以外の場合、組込み機器８００は、ＣＰＵ９１１を用いて、動作処理Ｓ６６０を繰り返す。
【００５８】
なお、動作処理Ｓ６６０において、制限時間入力部１３０が制限時間を入力できる構成としてもよい。その場合、診断計画作成部１２０は、ＣＰＵ９１１を用いて、新しく入力された制限時間に基づいて、診断計画を作成し直す。
【００５９】
確保項目開放処理Ｓ６７０において、確保項目開放部２２２は、ＣＰＵ９１１を用いて、動作中診断項目確保処理Ｓ６５０で起動時診断実行部２１０が確保した診断対象のうち、資源不足を解消するために必要な診断対象を開放する。
その後、組込み機器８００は、ＣＰＵ９１１を用いて、動作処理Ｓ６６０に戻る。
【００６０】
診断項目確保判定処理Ｓ６８０において、診断項目確保判定部２２３は、ＣＰＵ９１１を用いて、今回の診断処理を実行するために必要な診断対象が、動作中診断項目確保処理Ｓ６５０で確保されたままであるか、確保項目開放処理Ｓ６７０で開放されたかを判定する。
組込み機器８００は、ＣＰＵ９１１を用いて、診断対象が開放されたと診断項目確保判定部２２３が判定した場合、動作処理Ｓ６６０に戻る。
組込み機器８００は、ＣＰＵ９１１を用いて、診断対象が確保されていると診断項目確保判定部２２３が判定した場合、動作中診断処理Ｓ６９０へ進む。
【００６１】
動作中診断処理Ｓ６９０において、動作中診断実行部２２０は、ＣＰＵ９１１を用いて、診断計画作成処理Ｓ６３０で診断計画作成部１２０が作成した動作中診断計画に基づいて、一回の診断処理を実行する。
診断装置１００は、ＣＰＵ９１１を用いて、診断処理により故障を発見した場合、故障警告工程Ｓ７１０へ進む。
診断装置１００は、ＣＰＵ９１１を用いて、診断処理により故障を発見しなかった場合、動作処理Ｓ６６０に戻る。
【００６２】
故障警告工程Ｓ７１０において、診断結果出力部１７０は、表示装置９０１やスピーカ９０８を用いて、組込み機器８００の故障を利用者に対して通知する。
その後、組込み機器８００は、ＣＰＵ９１１を用いて、動作を停止する。
なお、診断装置１００は、ＣＰＵ９１１を用いて、発見した故障が致命的なものか軽度なものかを判定し、故障が軽度であって、組込み機器８００の動作を停止する必要がない場合には、故障警告工程Ｓ７１０が終了したのち、元に戻って、続きの処理をする構成としてもよい。
【００６３】
図８は、この実施の形態における診断計画作成部１２０が診断計画を作成する診断計画作成処理Ｓ６３０の流れの一例を示すフローチャート図である。
診断計画作成処理Ｓ６３０は、例えば、制限時間入力工程Ｓ６３１，総所要時間算出工程Ｓ６３２、診断所要回数算出工程Ｓ６３３、診断項目整列工程Ｓ６３４、診断項目繰り返し工程Ｓ６３５、診断項目振り分け工程Ｓ６３６、残り時間算出工程Ｓ６３７、繰り返し判定工程Ｓ６３８を有する。
【００６４】
制限時間入力工程Ｓ６３１において、制限時間入力部１３０は、入力装置９０２を用いて、利用者が指定する起動時制限時間及び動作中制限時間を入力する。
【００６５】
総所要時間算出工程Ｓ６３２において、総所要時間算出部１２２は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目に関する情報に基づいて、起動時診断総所要時間及び動作中診断総所要時間を算出する。
【００６６】
診断所要回数算出工程Ｓ６３３において、診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、制限時間入力工程Ｓ６３１で制限時間入力部１３０が入力した起動時制限時間と、総所要時間算出工程Ｓ６３２で総所要時間算出部１２２が算出した起動時診断総所要時間とに基づいて、起動時診断所要回数を算出する。また、診断所要回数算出部１２３は、ＣＰＵ９１１を用いて、制限時間入力工程Ｓ６３１で制限時間入力部１３０が入力した動作中制限時間と、総所要時間算出工程Ｓ６３２で総所要時間算出部１２２が算出した動作中総所要時間とに基づいて、動作中診断所要回数を算出する。
診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断所要回数算出部１２３が算出した起動時診断所要回数と動作中診断所要回数とに基づいて、起動時診断計画と動作中診断計画とを初期化する。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、起動時診断計画として、起動時診断所要回数分の起動時診断処理を記憶する記憶領域と、動作中診断計画として、動作中診断所要回数分の動作中診断処理を記憶する記憶領域とを確保する。診断項目振り分け部１２４は、ＲＡＭ９１４を用いて、それぞれの起動時診断処理について、残り時間として、起動時制限時間を記憶し、それぞれの動作中診断処理について、残り時間として、動作中制限時間を記憶する。
【００６７】
診断項目整列工程Ｓ６３４において、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目に関する情報に基づいて、全ての診断項目を診断所要時間５２１が長い順に整列する。
【００６８】
診断項目繰り返し工程Ｓ６３５において、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目すべてについて、診断項目整列工程Ｓ６３４で整列した順に一つずつ診断項目を選択し、選択した診断項目について、診断項目振り分け工程Ｓ６３６〜残り時間算出工程Ｓ６３７の処理をする。
【００６９】
診断項目振り分け工程Ｓ６３６において、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６３５で選択した診断項目が起動時診断項目か動作中診断項目かを判定する。
選択した診断項目が起動時診断項目である場合、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、起動時診断処理のなかから、記憶した残り時間が最も長いものを選択する。診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６３５で選択した診断項目を、選択した起動時診断処理に割り当てる。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、診断項目を割り当てた起動時診断処理を記憶する。
選択した診断項目が動作中診断項目である場合、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、動作中診断処理のなかから、記憶した残り時間が最も長いものを選択する。診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６３５で選択した診断項目を、選択した動作中診断処理に割り当てる。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、診断項目を割り当てた動作中診断処理を記憶する。
【００７０】
残り時間算出工程Ｓ６３７において、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目振り分け工程Ｓ６３６で選択した起動時診断処理または動作中診断処理について記憶した残り時間から、診断項目繰り返し工程Ｓ６３５で選択した診断項目の診断所要時間５２１を差し引いた差を算出し、ＲＡＭ９１４を用いて、算出した差を、選択した起動時診断処理または動作中診断処理についての残り時間として記憶する。
【００７１】
繰り返し判定工程Ｓ６３８において、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目すべてについて、診断項目振り分け工程Ｓ６３６〜残り時間算出工程Ｓ６３７の処理が終了したか判定する。
診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、未処理の診断項目があると判定した場合、診断項目繰り返し工程Ｓ６３５に戻り、次の診断項目を選択する。
診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、すべての診断項目についての処理が終了したと判定した場合、診断計画作成処理Ｓ６３０を終了する。
【００７２】
図９は、この実施の形態における診断計画作成処理において、診断項目振り分け部１２４が診断項目を振り分ける様子を示す概念図である。
この図において、診断項目を表わす長方形の横方向の長さは、その診断項目の診断所要時間を表わす。
【００７３】
診断項目振り分け部１２４は、起動時診断所要回数（この例では「３」）個の起動時診断処理についての残り時間と、動作中診断所要回数（この例では「５」）個の動作中診断処理について残り時間とを算出する。起動時診断処理についての残り時間の初期値は、起動時制限時間とし、動作中診断処理についての残り時間の初期値は、動作中制限時間とする。診断項目振り分け部１２４は、各診断処理に診断項目を振り分けたとき、振り分けた診断項目についての診断所要時間を、その診断処理の残り時間から差し引く。
診断項目振り分け部１２４は、診断所要時間が長い順に、診断項目を一つずつ、診断計画に振り分けていく。振り分ける診断項目が起動時診断項目であれば起動時診断処理のなかで、振り分ける診断項目が動作中診断項目であれば動作中診断処理のなかで、それぞれ残り時間が一番長い診断処理に、診断項目を振り分ける。
【００７４】
なお、この例では、一つの診断処理に振り分けられた診断項目の診断所要時間の合計が制限時間を超えないよう、あらかじめ診断所要回数を十分な回数に設定しているので、診断所要時間の合計が制限時間を超えたか否かの判定を省略している。しかし、確実を期するため、以下のような構成としてもよい。
例えば、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目を振り分けようとしている診断処理の残り時間と、その診断項目の診断所要時間とを比較する。診断所要時間が残り時間以下の場合、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、その診断項目をその診断処理に振り分ける。診断所要時間が残り時間を超える場合、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断所要回数を１つ増やし、新たな診断処理を設定して、新たに設定した診断処理に、その診断項目を振り分ける。
また、そのような構成とした場合、最初に設定した診断所要回数が足りなくても、診断項目振り分け部１２４が診断所要回数を増やして、自動的に最適な診断所要回数とすることができる。そのため、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、総所要時間や制限時間とは関係なく、診断所要回数の初期値を所定の値（例えば「１」）に設定する構成としてもよい。その場合、総所要時間算出部１２２及び診断所要回数算出部１２３は、なくてもよい。
【００７５】
なお、この例では、起動時診断項目の振り分けと動作中診断項目の振り分けとを並行して実行しているが、起動時診断項目の振り分けを先に実行し、動作中診断項目の振り分けをその後実行する構成としてもよい。
例えば、診断項目整列工程Ｓ６３４において、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、診断項目を起動時診断項目と動作中診断項目に分類した上で、分類された診断項目をそれぞれ整列する。診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、まず、起動時診断項目について、診断所要時間が長い順に、起動時診断処理に振り分ける。次に、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、動作中診断項目について、診断所要時間が長い順に、動作中診断処理に振り分ける。このとき、診断項目振り分け部１２４は、ＣＰＵ９１１を用いて、振り分けようとしている動作中診断項目の診断所要時間が、いずれかの起動時診断処理についての残り時間以下であれば、その動作中診断項目を、動作中診断処理に振り分けるのではなく、起動時診断処理に振り分ける構成としてもよい。
【００７６】
図１０は、この実施の形態における起動時診断実行部２１０が組込み機器８００の起動時に自己診断をする起動時診断処理Ｓ６４０の流れの一例を示すフローチャート図である。
起動時診断処理Ｓ６４０は、例えば、起動時診断回数取得工程Ｓ６４１、起動時診断計画取得工程Ｓ６４２、診断項目繰り返し工程Ｓ６４３、診断工程Ｓ６４４、繰り返し判定工程Ｓ６４５、起動時診断回数更新工程Ｓ６４６を有する。
【００７７】
起動時診断回数取得工程Ｓ６４１において、起動時診断計画取得部２１２は、ＣＰＵ９１１を用いて、起動時診断回数記憶部２１１が記憶した起動時診断回数を取得する。
【００７８】
起動時診断計画取得工程Ｓ６４２において、起動時診断計画取得部２１２は、ＣＰＵ９１１を用いて、起動時診断回数取得工程Ｓ６４１で取得した起動時診断回数に基づいて、診断計画記憶部１９０が記憶した起動時診断計画のなかから、今回の起動時診断処理で診断をする診断項目を取得する。
【００７９】
診断項目繰り返し工程Ｓ６４３において、起動時診断部２１３は、ＣＰＵ９１１を用いて、起動時診断計画取得工程Ｓ６４２で取得した診断項目から、診断項目を一つずつ選択し、選択した診断項目について、診断工程Ｓ６４４の処理をする。
【００８０】
診断工程Ｓ６４４において、起動時診断部２１３は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６４３で選択した診断項目を診断する。
起動時診断部２１３は、ＣＰＵ９１１を用いて、診断により故障を発見した場合、故障と判定して、起動時診断処理Ｓ６４０を終了する。
起動時診断部２１３は、ＣＰＵ９１１を用いて、診断により故障を発見しなかった場合、繰り返し判定工程Ｓ６４５へ進む。
【００８１】
繰り返し判定工程Ｓ６４５において、起動時診断部２１３は、ＣＰＵ９１１を用いて、起動時診断計画取得工程Ｓ６４２で取得した診断項目すべてについて、診断工程Ｓ６４４の処理が終了したか否かを判定する。
起動時診断部２１３は、ＣＰＵ９１１を用いて、未処理の診断項目があると判定した場合、診断項目繰り返し工程Ｓ６４３に戻り、次の診断項目を選択する。
起動時診断部２１３は、ＣＰＵ９１１を用いて、起動時診断計画取得工程Ｓ６４２で取得したすべての診断項目についての処理が終了したと判定した場合、起動時診断回数更新工程Ｓ６４６へ進む。
【００８２】
起動時診断回数更新工程Ｓ６４６において、起動時診断回数更新部２１４は、ＣＰＵ９１１を用いて、起動時診断回数記憶部２１１が記憶した起動時診断回数を更新する。起動時診断回数記憶部２１１は、磁気ディスク装置９２０を用いて、起動時診断回数更新部２１４が更新した起動時診断回数を記憶する。
起動時診断実行部２１０は、ＣＰＵ９１１を用いて、正常と判定して、起動時診断処理Ｓ６４０を終了する。
【００８３】
図１１は、この実施の形態における起動時診断実行部２１０が動作中診断処理のために動作中診断項目を確保する動作中診断項目確保処理Ｓ６５０の流れの一例を示すフローチャート図である。
動作中診断項目確保処理Ｓ６５０は、例えば、動作中診断回数取得工程Ｓ６５１、動作中診断計画取得工程Ｓ６５２、診断項目繰り返し工程Ｓ６５３、診断項目確保工程Ｓ６５４、繰り返し判定工程Ｓ６５５を有する。
【００８４】
動作中診断回数取得工程Ｓ６５１において、動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、動作中診断回数記憶部２２１が記憶した動作中診断回数を取得する。
【００８５】
動作中診断計画取得工程Ｓ６５２において、動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、動作中診断回数取得工程Ｓ６５１で取得した動作中診断回数に基づいて、診断計画記憶部１９０が記憶した動作中診断計画のなかから、今回の動作中診断処理で診断をする診断項目を取得する。
【００８６】
診断項目繰り返し工程Ｓ６５３において、動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、動作中診断計画取得工程Ｓ６５２で動作中診断計画取得部２１５が取得した診断項目から、診断項目を一つずつ選択し、選択した診断項目について、診断項目確保工程Ｓ６５４の処理をする。
【００８７】
診断項目確保工程Ｓ６５４において、動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６５３で選択した診断項目が、診断をするために確保しておく必要がある項目か否かを判定する。
動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、診断項目が確保しておく必要がある項目であると判定した場合、その診断項目の診断対象を確保する。
【００８８】
繰り返し判定工程Ｓ６５５において、動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、動作中診断計画取得工程Ｓ６５２で取得した診断項目すべてについて、診断項目確保工程Ｓ６５４の処理が終了したか否かを判定する。
動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、未処理の診断項目があると判定した場合、診断項目繰り返し工程Ｓ６５３に戻り、次の診断項目を選択する。
動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、動作中診断計画取得工程Ｓ６５２で取得したすべての診断項目について、診断項目確保工程Ｓ６５４の処理が終了したと判定した場合、動作中診断項目確保処理Ｓ６５０を終了する。
【００８９】
図１２は、この実施の形態における動作中診断実行部２２０が組込み機器８００の動作中に自己診断をする動作中診断処理Ｓ６９０の流れの一例を示すフローチャート図である。
動作中診断処理Ｓ６９０は、例えば、確保項目取得工程Ｓ６９１、診断項目繰り返し工程Ｓ６９２、診断工程Ｓ６９３、繰り返し判定工程Ｓ６９４、動作中診断回数更新工程Ｓ６９５を有する。
【００９０】
確保項目取得工程Ｓ６９１において、動作中診断部２２４は、ＣＰＵ９１１を用いて、今回の動作中診断処理で診断をする診断項目を取得する。
【００９１】
診断項目繰り返し工程Ｓ６９２において、動作中診断部２２４は、ＣＰＵ９１１を用いて、確保項目取得工程Ｓ６９１で取得した診断項目から、診断項目を一つずつ選択し、選択した診断項目について、診断工程Ｓ６９３の処理をする。
【００９２】
診断工程Ｓ６９３において、動作中診断部２２４は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６９２で選択した診断項目を診断する。
動作中診断部２２４は、ＣＰＵ９１１を用いて、診断により故障を発見した場合、故障と判定して、動作中診断処理Ｓ６９０を終了する。
動作中診断部２２４は、ＣＰＵ９１１を用いて、診断により故障を発見しなかった場合、繰り返し判定工程Ｓ６９４へ進む。
【００９３】
繰り返し判定工程Ｓ６９４において、動作中診断部２２４は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６９２で取得した診断項目すべてについて、診断工程Ｓ６９３の処理が終了したか否かを判定する。
動作中診断部２２４は、ＣＰＵ９１１を用いて、未処理の診断項目があると判定した場合、診断項目繰り返し工程Ｓ６９２に戻り、次の診断項目を選択する。
動作中診断部２２４は、ＣＰＵ９１１を用いて、診断項目繰り返し工程Ｓ６９２で取得したすべての診断項目について、診断工程Ｓ６９３の処理が終了したと判定した場合、動作中診断回数更新工程Ｓ６９５へ進む。
【００９４】
動作中診断回数更新工程Ｓ６９５において、動作中診断回数更新部２２５は、ＣＰＵ９１１を用いて、動作中診断回数記憶部２２１が記憶した動作中診断回数を更新する。動作中診断回数記憶部２２１は、磁気ディスク装置９２０を用いて、動作中診断回数更新部２２５が更新した動作中診断回数を記憶する。
動作中診断実行部２２０は、ＣＰＵ９１１を用いて、正常と判定して、動作中診断処理Ｓ６９０を終了する。
【００９５】
この実施の形態における診断装置１００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）と、診断項目記憶部１１１と、診断計画作成部１２０と、診断実行部２００とを有する。
上記診断項目記憶部１１１は、上記記憶装置（磁気ディスク装置９２０）を用いて、対象装置（組込み機器８００）の故障を診断する複数の診断項目を記憶する。
上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目のなかから一回の診断処理において診断する診断項目を抽出し、複数回の診断処理により、上記診断項目記憶部１１１が記憶した複数の診断項目について診断をする診断計画を作成する。
上記診断実行部２００は、上記処理装置（ＣＰＵ９１１）を用いて、上記対象装置（組込み機器８００）が起動した場合に、上記診断計画作成部１２０が作成した診断計画に基づいて、一回の診断処理を実行する。
【００９６】
この実施の形態における診断装置１００によれば、対象装置が起動したとき、診断すべき複数の診断項目のなかから診断計画作成部１２０が抽出した診断項目について診断をするので、起動時の待ち時間を短くすることができる。また、診断計画作成部１２０が、複数回の診断処理で、診断すべき複数の診断項目を診断する診断計画を作成するので、故障を見逃すことなく、対象装置を安全に使用することができる。
【００９７】
この実施の形態における診断装置１００は、更に、診断所要時間記憶部１１２を有する。
上記診断所要時間記憶部１１２は、上記記憶装置（磁気ディスク装置９２０）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目のそれぞれについて、診断にかかる所要時間（診断所要時間）を記憶する。
上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、上記診断所要時間記憶部１１２が記憶した所要時間（診断所要時間）に基づいて、一回の診断処理にかかる所要時間を算出し、算出した所要時間が所定の制限時間以内となる診断計画を作成する。
【００９８】
この実施の形態における診断装置１００によれば、診断計画作成部１２０が、一回の診断処理にかかる所要時間が所定の制限時間内となる診断計画を作成するので、起動時の待ち時間を制限時間内に収めることができる。制限時間を長くすれば、診断すべき診断項目について診断をするのにかかる診断所要回数を少なくすることができ、いち早く故障を発見できるので、対象装置の安全性が高くなる反面、起動時の待ち時間が長くなる。逆に、制限時間を短くすれば、起動時の待ち時間が短くなる反面、診断すべき診断項目について診断をするのにかかる診断所要回数が多くなるので、故障の発見が遅れる可能性が生じる。制限時間を適切な値に設定することにより、両者のバランスを取ることができ、利用者のニーズに合った対象装置を提供することができる。
【００９９】
また、この実施の形態で説明したように、対象装置の利用者が制限時間を指定できるよう構成してもよい。そうすれば、利用者自らが利便性を取るか安全性を取るかを選択することができる。
【０１００】
この実施の形態における診断装置１００は、更に、診断所要時間計測部１５０を有する。
上記診断所要時間計測部１５０は、上記処理装置（ＣＰＵ９１１）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目のそれぞれについて、上記診断実行部２００が診断をするのに要した所要時間を計測する。
上記診断所要時間記憶部１１２は、上記記憶装置（磁気ディスク装置９２０）を用いて、上記診断所要時間計測部１５０が計測した所要時間を記憶する。
【０１０１】
この実施の形態における診断装置１００によれば、実際に診断をするのにかかった所要時間を診断所要時間計測部１５０が計測して、診断所要時間記憶部１１２が記憶するので、個々の組込み機器８００が置かれた状況によって診断にかかる時間が変化する場合であっても、一回の診断処理にかかる時間が制限時間内に収まる診断計画を診断計画作成部１２０が作成することができる。
【０１０２】
この実施の形態における診断装置１００は、更に、動作中診断可否記憶部１１４を有する。
上記動作中診断可否記憶部１１４は、上記記憶装置（磁気ディスク装置９２０）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目のそれぞれについて、上記対象装置（組込み機器８００）の動作中に診断できる項目であるか否かを表わす動作中診断可否フラグ（動作中診断可否）を記憶する。
上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、上記動作中診断可否記憶部１１４が記憶した動作中診断可否フラグに基づいて、上記診断項目記憶部１１１が記憶した複数の診断項目を、上記対象装置（組込み機器８００）の動作中に診断できる動作中診断可能項目（動作中診断項目）と、上記対象装置（組込み機器８００）の動作中に診断できない動作中診断不可項目（起動時診断項目）とに分類し、複数回の診断処理（動作中診断処理）により、分類した動作中診断不可項目について診断をする起動時診断計画と、複数回の診断処理（起動時診断処理）により、分類した動作中診断可能項目について診断をする動作中診断計画とを作成する。
上記診断実行部２００は、上記処理装置（ＣＰＵ９１１）を用いて、上記対象装置（組込み機器８００）が起動した場合に、上記診断計画作成部１２０が作成した起動時診断計画に基づいて、一回の診断処理（起動時診断処理）を実行し、上記対象装置（組込み機器８００）が動作中の場合に、上記診断計画作成部１２０が作成した動作中診断計画に基づいて、一回の診断処理（動作中診断処理）を実行する。
【０１０３】
この実施の形態における診断装置１００によれば、対象装置の動作中でも診断できる診断項目を動作中に診断することにより、対象装置の起動時に診断する診断項目を少なくすることができ、起動時の待ち時間を更に短くすることができる。
【０１０４】
この実施の形態における診断装置１００において、上記診断実行部２００は、上記処理装置（ＣＰＵ９１１）を用いて、上記対象装置（組込み機器８００）がアイドル状態となった場合に、上記診断計画作成部１２０が作成した動作中診断計画に基づいて、一回の診断処理（動作中診断処理）を実行する。
【０１０５】
この実施の形態における診断装置１００によれば、対象装置の動作中でも診断できる診断項目を、複数回の診断処理に分け、対象装置がアイドル状態となった場合に、一回の診断処理をするので、診断処理からの復帰にかかる時間を短くすることができる。また、複数回の診断処理で、対象装置の動作中でも診断できる複数の診断項目を診断するので、故障を見逃すことなく、対象装置を安全に使用することができる。
【０１０６】
この実施の形態における診断装置１００において、上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目を複数の診断項目群に分類し、複数回の診断処理のそれぞれにおいて、分割した複数の診断項目群のなかから順に選択した一つの診断項目群に属する診断項目について診断をする診断計画を作成する。
【０１０７】
この実施の形態における診断装置１００によれば、診断計画作成部１２０が分類した診断項目群の数と同じ回数の診断処理をすることにより、すべての診断項目について確実に診断をすることができるので、故障を見逃すことなく、対象装置を安全に使用することができる。
【０１０８】
この実施の形態における診断装置１００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）とを有するコンピュータが実行することにより、上記コンピュータが上記診断装置１００として機能するコンピュータプログラムにより、実現することができる。
【０１０９】
この実施の形態における診断装置１００を実現するコンピュータプログラムによれば、対象装置が起動したとき、診断すべき複数の診断項目のなかから診断計画作成部１２０が抽出した診断項目について診断をするので、起動時の待ち時間を短くすることができるとともに、診断計画作成部１２０が、複数回の診断処理で、診断すべき複数の診断項目を診断する診断計画を作成するので、故障を見逃すことなく、対象装置を安全に使用することができる診断装置１００を実現することができる。
【０１１０】
この実施の形態における診断装置１００が、対象装置（組込み機器８００）の故障を診断する診断方法は、以下の工程を有する。
上記処理装置（ＣＰＵ９１１）が、上記記憶装置（磁気ディスク装置９２０）が記憶した複数の診断項目のなかから一回の診断処理において診断する診断項目を抽出し、複数回の診断処理により、上記記憶装置（磁気ディスク装置９２０）が記憶した複数の診断項目について診断をする診断計画を作成する。
上記対象装置（組込み機器８００）が起動した場合に、上記処理装置（ＣＰＵ９１１）が、作成した診断計画に基づいて、一回の診断処理を実行する。
【０１１１】
この実施の形態における診断方法によれば、対象装置が起動したとき、診断すべき複数の診断項目のなかから抽出した診断項目について診断をするので、起動時の待ち時間を短くすることができる。また、複数回の診断処理で、診断すべき複数の診断項目を診断する診断計画を作成するので、故障を見逃すことなく、対象装置を安全に使用することができる。
【０１１２】
以上説明した診断装置１００（組み込み機器起動時自己診断装置）は、
プログラムコードを格納するフラッシュメモリ９３０またはＨＤＤドライブ（磁気ディスク装置９２０）と、プログラムやデータを格納することができるＲＡＭ９１４とＣＰＵ９１１とをバスで接続し、複数の周辺デバイス（メモリカード読取装置９５１、カメラ９５２など）や周辺メモリ（通信メモリ９５３）を保持した組込み機器８００において、
フラッシュメモリ９３０、ＨＤＤドライブ、ＲＡＭ９１４、周辺メモリなどを複数の診断対象に分けるメモリ分割部（診断項目記憶部１１１）と、
周辺機器も診断機能ごとに複数の部位に分ける機器分割部（診断項目記憶部１１１）と、
各診断機能毎に予め測定した正常に終了するまでの各部位ごとの単位診断処理時間を管理する単位診断処理時間管理部（診断所要時間記憶部１１２）と、
毎回の診断がほぼ同じ時間で終えることを保証するように診断機能を分割する診断機能分割部（診断計画作成部１２０）と、
部分的に毎起動ごとに診断を行う部分診断部（診断実行部２００）と、
一定回数で全体を診断することを保障する診断計画部（診断計画作成部１２０）とからなる。
【０１１３】
以上説明した診断装置１００（機器起動時自己診断装置）において、メモリ分割部（診断項目記憶部１１１）は、フラッシュメモリ９３０であれば消去ブロック単位、通常のＲＡＭ９１４であれば、一定のアクセスする単位である物理的なページ単位に分割する。
【０１１４】
以上説明した診断装置１００（機器起動時自己診断装置）において、機器分割部（診断項目記憶部１１１）は、単に複数の機器グループに分けるだけでなく、例えば一つの制御機器であっても、正常な接続判定と正常な動作判定のように、診断対象とする機能を分割することも含める。
【０１１５】
以上説明した診断装置１００（機器起動時自己診断装置）において、単位診断処理時間管理部（診断所要時間記憶部１１２）は、分割された各診断対象の単位診断時間（診断所要時間）を保持する。
【０１１６】
以上説明した診断装置１００（機器起動時自己診断装置）において、診断機能分割部（診断計画作成部１２０）は、単位診断時間（診断所要時間）を利用してすべて同一の時間で診断できるように診断機能を分割する。
【０１１７】
以上説明した診断装置１００（機器起動時自己診断装置）において、診断機能分割部（診断計画作成部１２０）は、単位診断時間（診断所要時間）を利用してすべて一定時間以内で診断できるように診断機能を分割する。
【０１１８】
以上説明した診断装置１００（機器起動時自己診断装置）において、部分診断部（診断実行部２００）は、分割された診断機能から０以上の機能を診断計画部（診断計画作成部１２０）の指示に基づいて選択し、診断する。
【０１１９】
以上説明した診断装置１００（機器起動時自己診断装置）において、診断計画部（診断計画作成部１２０）は、部分診断部（診断実行部２００）に対して、１回の起動時の診断は一定時間に終えることを指示し、一定回数ですべての部分的な診断を行い、結果的に全体の診断を行う。
【０１２０】
以上説明した診断装置１００は、例えば、一般的な組込み機器８００の一部である。
組込み機器８００は、命令を実行するＣＰＵ９１１、プログラムコードを格納するフラッシュメモリ９３０（ＨＤＤがあれば存在しない構成でもよい）、揮発性のメモリのＲＡＭ９１４、フラッシュカードリードや制御機器などの周辺接続機器、周辺接続機器との通信用のメモリ、ＨＤＤ（磁気ディスク装置９２０）（フラッシュメモリ９３０があれば存在しない構成でもよい）、温度計（温度センサ９６１）や衝撃センサ９６２などのセンサを有する。
【０１２１】
組込み機器８００のソフトウェア構成は、例えば、上記のようなハードウェア上で動作するＯＳ層（ＯＳ９２１）（組込み機器８００によっては存在しない構成でもよい）、ＯＳ層の上でサービスを実現するミドルウエア層（ミドルウェア９２２）（組込み機器８００によっては存在しない構成でもよい）、ナビゲーションアプリやＤＴＶアプリなどのアプリケーション、これらのアプリケーションと同じアプリケーションの一つであって、実行時に機器を診断する装置（動作中診断実行部２２０）を実現するプログラム、ＯＳなどのサービスがなくとも動作するプログラムであって、起動時の自己診断装置（起動時診断実行部２１０など）を実現するプログラムなどからなる。
【０１２２】
起動時自己診断装置は、複数のメモリ領域に物理的な分割を行うメモリ分割部（診断項目記憶部１１１）（分割は例えばページ単位に行う）、メモリ以外の診断対象となる機器を複数のグループに分割したり、一つの機器でも診断対象が複数あれば、対象を分けることを実施する機器分割部（診断項目記憶部１１１）、分割された診断対象単位ごとに正常であることを診断するのにどの程度の時間がかかるかを管理する単位診断処理時間管理部（診断所要時間記憶部１１２）、分割結果を単位診断処理時間と合わせて計算し、診断計画部から指示される一定の時間（制限時間）に収まるように組み合わせる診断機能分割部（診断計画作成部１２０）、実際に部分診断を行う部分診断部（起動時診断実行部２１０）を有する。
【０１２３】
実行時自己診断装置は、メモリ分割部、診断対象分割部、診断処理時間管理部、診断機能分割部、実行中にのみ診断する機能の診断計画部、実行中に診断できるものを選び出しグループ化するグループ分割部、実際に部分的な診断を行う部分診断部（動作中診断実行部２２０）、アプリケーションとして部分診断部を呼び出すことにより診断を行う診断アプリケーションを有する。
【０１２４】
例えば、組込み機器８００の工場出荷前に、診断計画作成に必要な情報を調査設定する。
まず、メモリの構成情報としてページの情報やフラッシュメモリならば消去ブロックの情報などを設定し、診断項目記憶部１１１が、磁気ディスク装置９２０を用いて、記憶する。
次に、診断対象とする周辺機器の情報などを出荷担当者が設定するか、設定情報を記載されたデータを読み込んで設定し、診断項目記憶部１１１が、磁気ディスク装置９２０を用いて、記憶する。
診断実行部２００は、一度すべての機能の診断を行い、診断所要時間計測部１５０は、各診断ごとの単位時間を測定する。診断所要時間記憶部１１２は、測定結果を記録する。なお、診断所要時間記憶部１１２は、実測結果を記憶するのではなく、予め設定されたデータを読み込んで設定しても構わない。
診断計画作成部１２０は、予め設定された制限時間に診断が終わるような診断単位の時間の合計を計算した組を作成する。例えば、診断計画作成部１２０は、順番に時間を加えておき、制限時間を越えた場合には、最後に加えた対象を次のグループにするという処理を繰り返して診断対象がなくなるまでグルーピングを行う。あるいは、診断計画作成部１２０は、単位診断時間の大きい順にソーティングした上で、総診断時間を制限時間で割った数のグループに大きい順に割り当てるというような計算をしてグルーピングをする。診断計画作成部１２０は、作成したグループの実行順序などを適当に決めて診断計画とする。あるいは、診断計画作成部１２０は、毎回同一の時間で終了するような組み合わせを発見する程度で良い場合もある。なお、「適当に決める」とは、例えばグルーピングした際にグループにＩＤを順に付与しておき、その順に診断計画するという手法でもよい。
【０１２５】
また、出荷後の最初の起動時、例えば、組込み機器８００が携帯電話であって、携帯電話ショップの店員が起動したとき、あるいは、組込み機器８００がカーナビゲーションシステムであって、自動車販売店の店員が起動したとき、また、組込み機器８００が通常の家電であって、ユーザ自らが起動したときなどに、特別な設定をする構成としてもよい。
【０１２６】
例えば、組込み機器８００が起動すると、最初に、診断実行部２００が、全機能を診断し、出荷時設定の設定値に問題がないかどうかや、診断対象の機能がついているかどうかを判断する。また、同時に診断も行い、問題があれば異常と判断して、異常終了する。問題なければ、ユーザの要望する起動時間保障を設定する。起動時間（制限時間）を短くすると、１回の診断対象が減りリスクが大きくなることなどは通知し、推奨値などを示すなどしてもよい。このとき、最低値以下は指定できないようなインタフェースにするのが好ましい。
ユーザの要望が出荷時設定と変更があった場合は、診断計画作成部１２０が、診断対象のグループ数や診断計画を変更する。
【０１２７】
二回目以降の起動時は、通常の診断処理をする。
組込み機器８００が起動すると、すぐに診断処理に移る。起動時診断実行部２１０は、診断計画に基づき、今回の起動でするべき診断処理を抽出する。例えば、順番に診断する場合、前回に診断した部位の次が候補である。また、１日に１回という指定を行っている場合には、診断計画部が診断結果の報告状況に基づいて判断し、診断するべきところがなければ部位なしとする。あるいは、前回の診断からの時間で判断しても構わない。このように実行することによって、一定の起動回数で全部位の診断が可能になる。
【０１２８】
抽出された部位（診断項目）の診断処理において、例えば診断対象がメモリであれば、起動時診断実行部２１０は、あるパターンを書いて読んで正しいことを確認する。あるいは、周辺装置の診断であれば、起動時診断実行部２１０は、診断用の信号を出力し，想定時間内に想定した信号が戻ることで確認する。
診断が終了すると、起動時診断実行部２１０は、診断計画部に報告し、いつ実施したかのログを保存し、次の起動時に診断を実施するかしないかなどの判断のための情報とする。
【０１２９】
以上説明した診断装置１００は、このように構成されているため、通常の利用時にユーザビリティを損なうことなく、ユーザのデータを破壊するなどの可能性を事前診断により排除する可能性を高くできるという効果がある。また実行時にできる診断は実行時に動作させることにより診断の頻度をあげ、より確実な診断ができるという効果がある。
また、組込み機器のソフトウエアやハードウェアのバージョンアップにより起動時間が変わった場合も、制限値を変更するだけで１回の診断量が変わり、制限起動時間までの起動を保障できるという点でも開発の効率化という効果がある。
【０１３０】
実施の形態２．
実施の形態２について、図１３〜図１６を用いて説明する。
なお、実施の形態１で説明した組込み機器８００と共通する部分については、同一の符号を付し、説明を省略する。
【０１３１】
この実施の形態では、診断項目の重要度に基づいて診断の頻度を変化させる構成、動作中診断計画の他の例、及び、動作中診断項目について診断直前に診断対象を確保する構成について説明する。
【０１３２】
図１３は、この実施の形態における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図である。
診断計画作成部１２０は、制限時間記憶部１２１、重要度記憶部２３１、起動時診断項目抽出部２３２、動作中診断項目抽出部２３３、重要度更新部２３４、起動時診断処理初期化部２４１、残り時間記憶部２４２、起動時診断処理選択部２４３、残り時間減算部２４４、完了判定部２４５を有する。
【０１３３】
制限時間記憶部１２１は、ＣＰＵ９１１を用いて、制限時間入力部１３０が入力した制限時間を入力し、磁気ディスク装置９２０を用いて、記憶する。なお、この実施の形態において、制限時間入力部１３０が入力し、制限時間記憶部１２１が記憶する制限時間は、起動時制限時間のみであり、動作中制限時間は含まれない。
【０１３４】
重要度記憶部２３１は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目すべてについて、診断重要度５３１を入力する。重要度記憶部２３１は、ＲＡＭ９１４を用いて、入力した診断重要度５３１を記憶する。
【０１３５】
起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、重要度記憶部２３１が記憶した診断重要度を入力する。起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、入力した診断重要度に基づいて、起動時診断項目のなかから、最も診断重要度の高い診断項目を抽出する。起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、抽出した診断項目を出力する。
【０１３６】
動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、重要度記憶部２３１が記憶した診断重要度を入力する。動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、入力した診断重要度に基づいて、動作中診断項目のなかから、最も診断重要度の高い診断項目を抽出する。動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、抽出した診断項目を出力する。
【０１３７】
診断計画記憶部１９０は、ＣＰＵ９１１を用いて、動作中診断項目抽出部２３３が出力した診断項目を入力する。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、入力した診断項目を順に、動作中診断計画として記憶する。
この実施の形態における動作中診断計画では、一回の動作中診断処理で複数の診断項目を診断するのではなく、一回の診断処理で一つの診断項目を診断する。動作中診断計画は、診断項目を診断する順序を定める。
【０１３８】
重要度更新部２３４は、ＣＰＵ９１１を用いて、起動時診断項目抽出部２３２及び動作中診断項目抽出部２３３が出力した診断項目を入力する。重要度更新部２３４は、ＣＰＵ９１１を用いて、入力した診断項目について、重要度記憶部２３１が記憶した診断重要度を更新する。重要度記憶部２３１は、ＲＡＭ９１４を用いて、重要度更新部２３４が更新した診断重要度を記憶する。
例えば、重要度更新部２３４は、ＣＰＵ９１１を用いて、入力した診断項目について、重要度記憶部２３１が記憶した診断重要度を「２」で割った商を算出し、更新後の診断重要度とする。
【０１３９】
起動時診断処理初期化部２４１は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した起動時制限時間を入力する。起動時診断処理初期化部２４１は、ＣＰＵ９１１を用いて、入力した起動時制限時間に基づいて、新たな起動時診断処理を初期化する。具体的には、起動時診断処理初期化部２４１は、ＣＰＵ９１１を用いて、診断計画記憶部１９０に、新たな起動時診断処理に振り分けられた診断項目を記憶する記憶領域を確保するとともに、残り時間記憶部２４２に、新たな起動時診断処理の残り時間として、入力した制限時間を設定する。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、新たな起動時診断処理に振り分けられた診断項目を記憶する記憶領域を確保する。
【０１４０】
残り時間記憶部２４２は、磁気ディスク装置９２０を用いて、診断計画記憶部１９０が記憶した起動時診断計画に含まれる起動時診断処理のそれぞれについて、残り時間を記憶する。起動時診断処理初期化部２４１が新たな起動時診断処理を初期化した場合、残り時間記憶部２４２は、磁気ディスク装置９２０を用いて、新たな起動時診断処理についての残り時間として、起動時制限時間を記憶する。
【０１４１】
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、起動時診断項目抽出部２３２が出力した診断項目を入力する。起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、入力した診断項目を振り分けるべき起動時診断処理を選択する。起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、選択した起動時診断処理を出力する。
例えば、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、入力した診断項目について、診断項目データベース記憶部１１０が記憶した診断所要時間５２１を取得する。起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、残り時間記憶部２４２が記憶した残り時間を取得する。起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、取得した診断所要時間５２１と、残り時間とに基づいて、残り時間が診断所要時間５２１以上である起動時診断処理のなかから、入力した診断項目を振り分ける起動時診断処理を選択する。
選択できる起動時診断処理がない場合は、起動時診断処理初期化部２４１が、ＣＰＵ９１１を用いて、新たな起動時診断処理を初期化し、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、起動時診断処理初期化部２４１が初期化した新たな起動時診断処理を選択する。
【０１４２】
診断計画記憶部１９０は、ＣＰＵ９１１を用いて、起動時診断処理選択部２４３が出力した起動時診断処理を入力する。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、入力した起動時診断処理に振り分けられた診断項目を記憶する記憶領域に、起動時診断項目抽出部２３２が抽出した診断項目を記憶する。
【０１４３】
残り時間減算部２４４は、ＣＰＵ９１１を用いて、起動時診断処理選択部２４３が出力した起動時診断処理を入力する。残り時間減算部２４４は、ＣＰＵ９１１を用いて、入力した起動時診断処理について、残り時間記憶部２４２が記憶した残り時間から、起動時診断項目抽出部２３２が抽出した診断項目についての診断所要時間５２１を差し引いた差を算出する。残り時間記憶部２４２は、磁気ディスク装置９２０を用いて、残り時間減算部２４４が算出した差を、起動時診断処理選択部２４３が選択した起動時診断処理についての残り時間として記憶する。
【０１４４】
完了判定部２４５は、ＣＰＵ９１１を用いて、作成した診断計画が、すべての診断項目を少なくとも一回は実行する診断計画となっているか否かを判定する。
例えば、完了判定部２４５は、ＣＰＵ９１１を用いて、あらかじめ、最も重要度が低い診断項目を抽出しておき、抽出しておいた診断項目を、診断計画記憶部１９０が記憶した場合に、すべての診断項目を少なくとも一回は実行する診断計画となったと判定する。
【０１４５】
図１４は、この実施の形態における起動時診断実行部２１０及び動作中診断実行部２２０の詳細ブロックの一例を示す詳細ブロック図である。
起動時診断実行部２１０は、起動時診断回数記憶部２１１、起動時診断計画取得部２１２、起動時診断部２１３、起動時診断回数更新部２１４を有する。
動作中診断実行部２２０は、診断済項目記憶部２２６、動作中診断計画取得部２１５、動作中診断項目確保部２１６、動作中診断部２２４、確保項目開放部２２２を有する。
実施の形態１と異なり、動作中診断計画取得部２１５、動作中診断項目確保部２１６は、起動時診断実行部２１０ではなく、動作中診断実行部２２０に含まれる。
【０１４６】
診断済項目記憶部２２６は、磁気ディスク装置９２０を用いて、診断計画記憶部１９０が記憶した動作中診断計画に含まれる動作中診断項目のそれぞれについて、診断が終わったか否か（以下「診断済フラグ」と呼ぶ。）を記憶する。
【０１４７】
動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、診断済項目記憶部２２６が記憶した診断済フラグを入力する。動作中診断計画取得部２１５は、入力した診断済フラグに基づいて、診断計画記憶部１９０が記憶した動作中診断計画のなかから、次に実行すべき診断項目を取得する。動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、取得した診断項目を出力する。
【０１４８】
動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、動作中診断計画取得部２１５が出力した診断項目を入力する。動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、入力した診断項目を診断するため、その診断項目の診断対象を確保する。
【０１４９】
動作中診断部２２４は、ＣＰＵ９１１を用いて、動作中診断項目確保部２１６が確保した診断項目についての診断を実行する。
【０１５０】
確保項目開放部２２２は、ＣＰＵ９１１を用いて、動作中診断部２２４が診断を終えた診断項目について、動作中診断項目確保部２１６が確保した診断対象を開放する。
【０１５１】
図１５は、この実施の形態における組込み機器８００全体の動作の流れの一例を示すフローチャート図である。
起動時診断処理Ｓ６４０において、診断装置１００は、ＣＰＵ９１１を用いて、診断処理により故障を発見しなかった場合、動作処理Ｓ６６０へ進む。
【０１５２】
動作処理Ｓ６６０において、組込み機器８００がアイドル状態となった場合、組込み機器８００は、ＣＰＵ９１１を用いて、動作中診断項目繰り返し工程Ｓ６５８へ進む。
【０１５３】
動作中診断項目繰り返し工程Ｓ６５８において、動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、診断計画記憶部１９０が記憶した動作中診断計画と、診断済項目記憶部２２６が記憶した診断済フラグとを入力する。動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、入力した動作中診断計画と診断済みフラグとに基づいて、まだ診断をしていない診断項目のなかから、診断の順序が最も早い診断項目を取得する。
【０１５４】
動作中診断項目確保処理Ｓ６５０において、動作中診断項目確保部２１６は、ＣＰＵ９１１を用いて、動作中診断項目繰り返し工程Ｓ６５８で動作中診断計画取得部２１５が取得した診断項目について、診断対象を確保する。
動作中診断実行部２２０は、ＣＰＵ９１１を用いて、動作中診断項目確保部２１６が診断対象の確保に成功した場合、動作中診断処理Ｓ６９０へ進む。
動作中診断実行部２２０は、ＣＰＵ９１１を用いて、動作中診断項目確保部２１６が診断対象の確保に失敗した場合、繰り返し判定工程Ｓ６５９へ進む。
例えば、確保しようとした診断対象を、他のアプリケーションなどが使用中である場合、動作中診断項目確保部２１６は、その診断対象の確保に失敗する。
【０１５５】
繰り返し判定工程Ｓ６５９において、動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、今回の診断を諦めるか否かを判定する。
動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、今回の診断を諦めると判定した場合、動作処理Ｓ６６０に戻る。
動作中診断計画取得部２１５は、ＣＰＵ９１１を用いて、今回の診断を諦めないと判定した場合、動作中診断項目繰り返し工程Ｓ６５８に戻り、次の順番の診断項目を取得する。
例えば、動作中診断項目繰り返し工程Ｓ６５８で動作中診断計画取得部２１５がまだ診断していない診断項目をすべて取得した場合や、今回取得した診断項目の数が所定の数に達した場合に、動作中診断項目確保部２１６は、今回の診断を諦めると判定する。
【０１５６】
動作中診断処理Ｓ６９０において、動作中診断部２２４は、ＣＰＵ９１１を用いて、動作中診断項目繰り返し工程Ｓ６５８で動作中診断計画取得部２１５が取得した診断項目について、診断を実行する。
診断済項目記憶部２２６は、磁気ディスク装置９２０を用いて、動作中診断部２２４が診断した診断項目が診断済みであることを表わす診断済フラグを記憶する。
【０１５７】
確保項目開放処理Ｓ６７０において、確保項目開放部２２２は、ＣＰＵ９１１を用いて、動作中診断項目確保処理Ｓ６５０で動作中診断項目確保部２１６が確保した診断対象を開放する。
【０１５８】
動作中診断実行部２２０は、ＣＰＵ９１１を用いて、確保項目開放処理Ｓ６７０で動作中診断部２２４が診断した結果、故障を発見した場合、故障警告工程Ｓ７１０へ進む。
動作中診断実行部２２０は、ＣＰＵ９１１を用いて、確保項目開放処理Ｓ６７０で動作中診断部２２４が診断した結果、故障を発見しなかった場合、動作処理Ｓ６６０に戻る。
【０１５９】
図１６は、この実施の形態における診断計画作成部１２０が診断計画を作成する診断計画作成処理Ｓ６３０の流れの一例を示すフローチャート図である。
【０１６０】
診断計画作成処理Ｓ６３０は、例えば、制限時間入力工程Ｓ６３１、初期化工程Ｓ７２１、起動時診断項目抽出工程Ｓ７２２、診断所要時間取得工程Ｓ７２３、診断処理繰り返し工程Ｓ７２４、振り分け済判定工程Ｓ７２５、残り時間比較工程Ｓ７２６、繰り返し判定工程Ｓ７２７、新規診断処理追加工程Ｓ７２８、起動時診断項目設定工程Ｓ７２９、重要度更新工程Ｓ７３０、完了判定工程Ｓ７３１、動作中診断項目抽出工程Ｓ７３２、動作中診断順序設定工程Ｓ７３３、重要度更新工程Ｓ７３４、完了判定工程Ｓ７３５を有する。
【０１６１】
制限時間入力工程Ｓ６３１において、制限時間入力部１３０は、入力装置９０２を用いて、起動時制限時間を入力する。
【０１６２】
初期化工程Ｓ７２１において、起動時診断処理初期化部２４１は、ＣＰＵ９１１を用いて、起動時診断計画として、最初の起動時診断処理を初期化する。残り時間記憶部２４２は、ＲＡＭ９１４を用いて、起動時診断処理初期化部２４１が初期化した最初の起動時診断処理についての残り時間として、制限時間入力工程Ｓ６３１で制限時間入力部１３０が入力した起動時制限時間を記憶する。
重要度記憶部２３１は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目すべてについて、診断重要度５３１を取得し、ＲＡＭ９１４を用いて、取得した診断重要度５３１を記憶する。
診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、起動時診断計画として、起動時診断処理初期化部２４１が初期化した最初の起動時診断処理を記憶する。また、診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、動作中診断計画として、動作中診断項目の順序を記憶する記憶領域を初期化する。
【０１６３】
起動時診断項目抽出工程Ｓ７２２において、起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、重要度記憶部２３１が記憶した診断重要度に基づいて、診断項目データベース記憶部１１０が記憶した起動時診断項目のなかから、最も重要度の高い起動時診断項目を抽出する。
【０１６４】
診断所要時間取得工程Ｓ７２３において、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、起動時診断項目抽出工程Ｓ７２２で起動時診断項目抽出部２３２が抽出した起動時診断項目について、診断項目データベース記憶部１１０が記憶した診断所要時間５２１を取得する。
【０１６５】
診断処理繰り返し工程Ｓ７２４において、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、設定されている起動時診断処理のうちから、初期化された順に一つずつ起動時診断処理を選択する。
【０１６６】
振り分け済判定工程Ｓ７２５において、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、診断処理繰り返し工程Ｓ７２４で選択した起動時診断処理のなかに、起動時診断項目抽出工程Ｓ７２２で起動時診断項目抽出部２３２が抽出した診断項目と同じ項目が既に振り分け済であるか否かを判定する。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、既に振り分け済であると判定した場合、繰り返し判定工程Ｓ７２７へ進む。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、振り分け済でないと判定した場合、残り時間比較工程Ｓ７２６へ進む。
【０１６７】
この実施の形態において、診断計画作成部１２０は、重要度の高い診断項目を、重要度の低い診断項目よりも高い頻度で診断する診断計画を作成するので、一つの起動時診断計画のなかに、同じ診断項目が複数回現れる場合がある。しかし、一回の起動時診断処理のなかで、同じ診断項目を複数回診断しても無意味なので、起動時診断処理選択部２４３は、選択した起動時診断処理のなかに、同じ診断項目がないかを判定する。
【０１６８】
残り時間比較工程Ｓ７２６において、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、診断処理繰り返し工程Ｓ７２４で選択した起動時診断処理について、残り時間記憶部２４２が記憶した残り時間を取得する。起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、取得した残り時間と、診断所要時間取得工程Ｓ７２３で取得した診断所要時間とを比較する。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、残り時間が診断所要時間以上である場合、起動時診断項目設定工程Ｓ７２９へ進む。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、残り時間が診断処理時間より短い場合、繰り返し判定工程Ｓ７２７へ進む。
【０１６９】
繰り返し判定工程Ｓ７２７において、起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、設定されているすべての起動時診断処理について、残り時間比較工程Ｓ７２６の処理が終わったか否かを判定する。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、未処理の起動時診断処理があると判定した場合、診断処理繰り返し工程Ｓ７２４に戻り、次の起動時診断処理を選択する。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、設定されている起動時診断処理すべてについて、残り時間比較工程Ｓ７２６の処理が終わったと判定した場合、新規診断処理追加工程Ｓ７２８へ進む。
【０１７０】
新規診断処理追加工程Ｓ７２８において、起動時診断処理初期化部２４１は、ＣＰＵ９１１を用いて、新しい起動時診断処理を初期化する。残り時間記憶部２４２は、ＲＡＭ９１４を用いて、起動時診断処理初期化部２４１が初期化した新しい起動時診断処理についての残り時間として、制限時間入力工程Ｓ６３１で制限時間入力部１３０が入力した起動時制限時間を記憶する。
起動時診断処理選択部２４３は、ＣＰＵ９１１を用いて、起動時診断処理初期化部２４１が新しく初期化した起動時診断処理を選択する。
【０１７１】
起動時診断項目設定工程Ｓ７２９において、診断計画記憶部１９０は、ＣＰＵ９１１を用いて、診断処理繰り返し工程Ｓ７２４または新規診断処理追加工程Ｓ７２８で起動時診断処理選択部２４３が選択した起動時診断処理で診断をする診断項目に、起動時診断項目抽出工程Ｓ７２２で動作中診断項目抽出工程Ｓ７３２が抽出した診断項目を追加し、磁気ディスク装置９２０を用いて、記憶する。
残り時間減算部２４４は、ＣＰＵ９１１を用いて、診断処理繰り返し工程Ｓ７２４または新規診断処理追加工程Ｓ７２８で起動時診断処理選択部２４３が選択した起動時診断処理について、残り時間記憶部２４２が記憶した残り時間から、診断所要時間取得工程Ｓ７２３で起動時診断処理選択部２４３が取得した診断所要時間を差し引いた差を算出する。残り時間記憶部２４２は、ＲＡＭ９１４を用いて、残り時間減算部２４４が算出した差を、診断処理繰り返し工程Ｓ７２４または新規診断処理追加工程Ｓ７２８で起動時診断処理選択部２４３が選択した起動時診断処理についての残り時間として記憶する。
【０１７２】
重要度更新工程Ｓ７３０において、重要度更新部２３４は、ＣＰＵ９１１を用いて、起動時診断項目抽出工程Ｓ７２２で起動時診断項目抽出部２３２が抽出した起動時診断項目について、重要度記憶部２３１が記憶した診断重要度を更新する。重要度記憶部２３１は、ＲＡＭ９１４を用いて、重要度更新部２３４が更新した診断重要度を、起動時診断項目抽出工程Ｓ７２２で起動時診断項目抽出部２３２が抽出した起動時診断項目についての診断重要度として記憶する。
【０１７３】
起動時診断項目抽出工程Ｓ７２２で起動時診断項目抽出部２３２が抽出した起動時診断項目についての診断重要度を半分にするなどして更新することにより、次回の起動時診断項目抽出工程Ｓ７２２において、起動時診断項目抽出部２３２は、異なる起動時診断項目を抽出する。しかし、ある起動時診断項目の元々の診断重要度が、別の起動時診断項目の元々の診断重要度の二倍以上であれば、起動時診断項目抽出部２３２は、診断重要度が低い起動時診断項目を抽出するよりも前に、診断重要度が高い起動時診断項目をもう一度抽出する。診断計画作成部１２０は、このようにして、診断重要度に応じて診断の頻度が変化する起動時診断計画を作成する。
【０１７４】
完了判定工程Ｓ７３１において、完了判定部２４５は、ＣＰＵ９１１を用いて、診断計画記憶部１９０が記憶した起動時診断計画が、診断項目データベース記憶部１１０が記憶した起動時診断項目すべてについて、いずれかの起動時診断処理で、少なくとも一回は診断をする起動時診断計画であるか否かを判定する。
いずれの起動時診断処理でも診断をすることとなっていない起動時診断項目がまだあると完了判定部２４５が判定した場合、診断計画作成部１２０は、ＣＰＵ９１１を用いて、起動時診断項目抽出工程Ｓ７２２に戻り、次の起動時診断項目を抽出する。
すべての起動時診断項目が、いずれかの起動時診断処理で、少なくとも一回は診断をする起動時診断計画であると完了判定部２４５が判定した場合、診断計画作成部１２０は、ＣＰＵ９１１を用いて、動作中診断項目抽出工程Ｓ７３２へ進む。
【０１７５】
動作中診断項目抽出工程Ｓ７３２において、動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、重要度記憶部２３１が記憶した診断重要度に基づいて、診断項目データベース記憶部１１０が記憶した動作中診断項目のなかから、最も重要度の高い動作中診断項目を抽出する。
【０１７６】
動作中診断順序設定工程Ｓ７３３において、診断計画記憶部１９０は、ＣＰＵ９１１を用いて、動作中診断項目抽出工程Ｓ７３２で動作中診断項目抽出部２３３が抽出した動作中診断項目を、
記憶した動作中診断計画が示す診断の順序の最後に追加する。診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、動作中診断項目抽出工程Ｓ７３２で動作中診断項目抽出部２３３が抽出した動作中診断項目を追加した動作中診断計画を記憶する。
【０１７７】
重要度更新工程Ｓ７３４において、重要度更新部２３４は、ＣＰＵ９１１を用いて、動作中診断項目抽出工程Ｓ７３２で動作中診断項目抽出部２３３が抽出した動作中診断項目について、重要度記憶部２３１が記憶した診断重要度を更新する。重要度記憶部２３１は、ＲＡＭ９１４を用いて、重要度更新部２３４が更新した診断重要度を記憶する。
【０１７８】
完了判定工程Ｓ７３５において、完了判定部２４５は、ＣＰＵ９１１を用いて、診断計画記憶部１９０が記憶した動作中診断計画が、診断項目データベース記憶部１１０が記憶した動作中診断項目すべてについて、少なくとも一回は診断をする動作中診断計画であるか否かを判定する。
一回も診断をすることとなっていない動作中診断項目がまだあると完了判定部２４５が判定した場合、診断計画作成部１２０は、ＣＰＵ９１１を用いて、動作中診断項目抽出工程Ｓ７３２に戻り、次の動作中診断項目を抽出する。
すべての動作中診断項目が、少なくとも一回は診断をする動作中診断計画であると完了判定部２４５が判定した場合、診断計画作成部１２０は、ＣＰＵ９１１を用いて、診断計画作成処理Ｓ６３０を終了する。
【０１７９】
この実施の形態における診断装置１００は、更に、診断重要度記憶部１１３を有する。
上記診断重要度記憶部１１３は、上記記憶装置（磁気ディスク装置９２０）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目のそれぞれについて、診断の重要性を表わす診断重要度を記憶する。
上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、上記診断重要度記憶部１１３が記憶した診断重要度に基づいて、診断重要度が高い診断項目ほど高い頻度で診断をする診断計画を作成する。
【０１８０】
この実施の形態における診断装置１００によれば、診断計画作成部１２０が、診断の重要性に応じて診断の頻度を変化させる診断計画を作成するので、重大な故障を早く発見することができ、組込み機器８００を安全に使用することができる。
【０１８１】
以上説明した診断装置１００（組み込み機器自己診断装置）は、
プログラムコードを格納するフラッシュメモリ９３０またはＨＤＤドライブ（磁気ディスク装置９２０）と、プログラムやデータを格納することができるＲＡＭ９１４とＣＰＵ９１１とをバスで接続し、複数の周辺デバイス（メモリカード読取装置９５１、カメラ９５２など）や周辺メモリ（通信メモリ９５３）を保持した組込み機器８００において、
フラッシュメモリ９３０、ＨＤＤドライブ、ＲＡＭ９１４、周辺メモリなどを複数の診断対象に分けるメモリ分割部（診断項目記憶部１１１）と、
周辺機器も診断機能ごとに複数の部位に分ける機器分割部（診断項目記憶部１１１）と、
分割された診断機能が起動時にのみ実行可能なのか運用時に実行可能かを示す情報（動作中診断可否５４１）に基づいて、起動時実行グループと実行時実行グループとに分割するグループ分割部（診断項目振り分け部１２４）と、
各診断機能毎に予め測定した正常に終了するまでの各部位ごとの単位診断処理時間を管理する単位診断処理時間管理部（診断所要時間記憶部１１２）と、
毎回の診断がほぼ同じ時間で終えることを保証するように診断機能を分割する診断機能分割部（診断計画作成部１２０）と、
部分的に毎起動ごとに起動時に行える診断対象に対して診断を行う部分診断部（起動時診断実行部２１０）と、
動作中にも他のプロセスに影響を与えずに実行時診断を行う動作中部分診断部（動作中診断実行部２２０）と、
一定回数で全体を診断することを保障する診断計画部（診断計画作成部１２０）とからなる。
【０１８２】
以上説明した診断装置１００（機器自己診断装置）において、メモリ分割部（診断項目記憶部１１１）は、フラッシュメモリ９３０であれば消去ブロック単位、通常のＲＡＭ９１４であれば、一定のアクセスする単位である物理的なページ単位に分割し、実行時には、起動時にアプリケーションから診断対象を確保しておく。
【０１８３】
以上説明した診断装置１００（機器自己診断装置）において、機器分割部（診断項目記憶部１１１）は、単に複数の機器グループに分けるだけでなく、例えば一つの制御機器であっても、正常な接続判定と正常な動作判定のように、診断対象とする機能を分割することも含め、実行時には、排他制御を行いながらも一定時間に診断を終了することができる。
【０１８４】
以上説明した診断装置１００（機器自己診断装置）において、単位診断処理時間管理部（診断所要時間記憶部１１２）は、分割された各診断対象の単位診断時間（診断所要時間）を起動時、実行時ごとに保持する。
【０１８５】
以上説明した診断装置１００（機器自己診断装置）において、診断機能分割部（診断計画作成部１２０）は、単位診断時間（診断所要時間）を利用してすべて同一の時間で診断できるように診断機能を分割する。
【０１８６】
以上説明した診断装置１００（機器自己診断装置）において、診断機能分割部（診断計画作成部１２０）は、単位診断時間（診断所要時間）を利用してすべて一定時間以内で診断できるように診断機能を分割する。
【０１８７】
以上説明した診断装置１００（機器自己診断装置）において、部分診断部（診断実行部２００）は、分割された診断機能から０つ以上の機能を診断計画部（診断計画作成部１２０）の指示に基づいて選択し、起動時および実行時に診断する。
【０１８８】
以上説明した診断装置１００（機器自己診断装置）において、診断計画部（診断計画作成部１２０）は、部分診断部（診断実行部２００）に対して、１回の起動時の診断は起動時のみ一定時間に終えることを指示し、実行時にはアイドル中に実行することにより部分的な診断を行う。
【０１８９】
以上説明した診断装置１００において、実行時の診断機能は、アプリケーションとして実行する。診断アプリケーションは、アイドルプロセスより少し高い程度の優先度で動作させる。なお、優先度制御のないＯＳ環境やＯＳの存在しない場合は、アイドル状態となったときに処理が動作するようにする。
【０１９０】
組込み機器８００の起動時において、動作中診断計画取得部２１５は、診断計画に従い診断部位（診断項目）を抽出する。この処理は、起動時の診断計画とほぼ同じであるが、実行時に診断できる部分のみが対象となる。動作中診断項目確保部２１６は、例えばメモリ診断であれば、対象となるメモリを使う旨宣言して確保し、他のアプリケーションなどには使わせないようにする。なお、周辺機器など、確保してしまうと通常のアプリケーションが動作できないような場合は、確保しない。
【０１９１】
組込み機器８００がアイドル状態になった場合、動作中診断実行部２２０は、あらかじめ計画された診断計画に基づき診断を開始する。ただし、メモリを確保していなかった場合などは、メモリの移動（退避）を行うことにより問題のない場合は移動（退避）を行って診断する。問題のある場合はスキップする。周辺機器の場合も同様で使われている場合には、スキップする。
動作中診断実行部２２０は、結果を報告し、次の診断候補を抽出して、処理を繰り返す。
【０１９２】
なお、診断処理中に優先度の高いプロセスが周辺機器を使いにきた場合は，診断はやめてリソースを開放するために、診断プログラムは単位診断ごとにリソースを確保しては開放する構成としてもよい。こうすることにより、一定時間以内での診断中でも他の処理の動作を保障するための中断をすることができる。
【０１９３】
実施の形態３．
実施の形態３について、図１７〜図１９を用いて説明する。
なお、実施の形態２で説明した組込み機器８００と共通する部分については、同一の符号を付し、説明を省略する。
【０１９４】
この実施の形態では、状況に応じて動的に診断計画を変更する構成について説明する。
【０１９５】
図１７は、この実施の形態における診断装置１００の機能ブロックの構成の一例を示すブロック構成図である。
診断装置１００は、実施の形態１で説明した機能ブロックに加えて、更に、診断対象利用率計測部１５５を有する。
【０１９６】
診断対象利用率計測部１５５は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目それぞれの診断対象について、その診断対象の利用率を計測する。診断対象利用率計測部１５５は、ＣＰＵ９１１を用いて、計測した利用率を出力する。
例えば、診断対象利用率計測部１５５は、ＣＰＵ９１１を用いて、診断対象が利用されるたびに、利用回数を計数し、所定の期間内に診断対象が利用された利用回数に基づいて、利用率を算出する。
【０１９７】
診断項目データベース記憶部１１０は、ＣＰＵ９１１を用いて、診断対象利用率計測部１５５が出力した利用率を入力する。診断項目データベース記憶部１１０は、ＣＰＵ９１１を用いて、入力した利用率に基づいて、記憶した診断重要度５３１を更新する。診断項目データベース記憶部１１０は、磁気ディスク装置９２０を用いて、更新した診断重要度５３１を記憶する。
【０１９８】
例えば、利用者が組込み機器８００の撮影機能を滅多に利用せず、カメラ９５２の利用率が低い場合、カメラ９５２の故障を診断する重要性は低い。診断項目データベース記憶部１１０は、ＣＰＵ９１１を用いて、利用率が低い診断対象についての診断項目について、診断重要度５３１を低くする。
逆に、利用者が毎回必ず利用する機能を実現する診断対象については、その診断対象の故障が致命的なものでなくても、その利用者にとっては、故障を診断する重要性が高いといえる。診断項目データベース記憶部１１０は、ＣＰＵ９１１を用いて、利用率が高い診断対象についての診断項目について、診断重要度５３１を高くする。
【０１９９】
なお、組込み機器８００の動作にとって故障が致命的である診断対象については、たとえ利用率が低くても、診断の重要性が高い。したがって、そのような診断対象についての診断項目は、利用率にかかわらず、高い診断重要度５３１とする。
このように、利用率とは無関係に診断重要度５３１を設定する診断対象について利用率を計測する必要がないので、診断対象利用率計測部１５５が、利用率を計測しない構成であってもよい。
【０２００】
図１８は、この実施の形態における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図である。
診断計画作成部１２０は、例えば、、優先度記憶部２５１、起動時診断項目抽出部２３２、動作中診断項目抽出部２３３、優先度更新部２５４、診断間隔記憶部２５５、診断間隔更新部２５６、診断間隔加算部２５７、重要度加算部２５８、故障可能性加算部２５９、制限時間記憶部１２１、起動時診断処理初期化部２４１、残り時間記憶部２４２、起動時診断処理選択部２４３、残り時間減算部２４４、完了判定部２４５を有する。
【０２０１】
優先度記憶部２５１は、磁気ディスク装置９２０を用いて、診断項目データベース記憶部１１０が記憶した診断項目それぞれについての優先度を記憶する。優先度とは、その診断項目を診断する順序を判定する目安となる数値であり、優先度が高いほど、その診断項目を他の診断項目に優先して診断すべきことを表わす。優先度記憶部２５１が記憶した優先度は、組込み機器８００の状況に応じて更新される。
【０２０２】
起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、優先度記憶部２５１が記憶した優先度を入力する。起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、入力した優先度に基づいて、診断項目データベース記憶部１１０が記憶した起動時診断項目のなかから、最も優先度の高い起動時診断項目を抽出する。起動時診断項目抽出部２３２は、ＣＰＵ９１１を用いて、抽出した起動時診断項目を出力する。
【０２０３】
動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、優先度記憶部２５１が記憶した優先度を入力する。動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、入力した優先度に基づいて、診断項目データベース記憶部１１０が記憶した動作中診断項目のなかから、最も優先度の高い動作中診断項目を抽出する。動作中診断項目抽出部２３３は、ＣＰＵ９１１を用いて、抽出した動作中診断項目を出力する。
【０２０４】
優先度更新部２５４は、ＣＰＵ９１１を用いて、起動時診断項目抽出部２３２及び動作中診断項目抽出部２３３が抽出した診断項目を入力する。優先度更新部２５４は、ＣＰＵ９１１を用いて、入力した診断項目について、優先度記憶部２５１が記憶した優先度を更新する。優先度記憶部２５１は、磁気ディスク装置９２０を用いて、優先度更新部２５４が更新した優先度を記憶する。
例えば、優先度更新部２５４は、ＣＰＵ９１１を用いて、入力した診断項目について優先度記憶部２５１が記憶した優先度を入力し、入力した優先度から所定の値を減算して、更新後の優先度とする。
これにより、その診断項目について診断をする診断計画が作成された診断項目の優先度が低くなる。
【０２０５】
診断間隔記憶部２５５は、磁気ディスク装置９２０を用いて、診断項目データベース記憶部１１０が記憶したすべての診断項目について、診断間隔を記憶する。診断間隔とは、その診断項目について前回診断をしてからの間隔である。例えば、診断間隔は、その診断項目について診断をしたのち、その診断項目を含まない診断処理を実行した回数である。あるいは、最後にその診断項目について診断をしてからの経過日数などであってもよい。
【０２０６】
診断間隔更新部２５６は、ＣＰＵ９１１を用いて、起動時診断項目抽出部２３２及び動作中診断項目抽出部２３３が抽出した診断項目を入力する。診断間隔更新部２５６は、ＣＰＵ９１１を用いて、入力した診断項目に基づいて、診断間隔記憶部２５５が記憶した診断間隔を更新する。診断間隔記憶部２５５は、磁気ディスク装置９２０を用いて、診断間隔更新部２５６が更新した診断間隔を記憶する。
例えば、診断間隔更新部２５６は、ＣＰＵ９１１を用いて、入力した診断項目について、診断間隔更新部２５６が記憶した診断間隔を「０」にし、それ以外の診断項目について、診断間隔更新部２５６が記憶した診断間隔に「１」を加える。
【０２０７】
診断間隔加算部２５７は、ＣＰＵ９１１を用いて、診断間隔記憶部２５５が記憶した診断間隔を入力する。診断間隔加算部２５７は、ＣＰＵ９１１を用いて、入力した診断間隔に基づいて、優先度記憶部２５１が記憶した優先度を更新する。優先度記憶部２５１は、磁気ディスク装置９２０を用いて、診断間隔加算部２５７が更新した優先度を記憶する。
例えば、診断間隔加算部２５７は、ＣＰＵ９１１を用いて、それぞれの診断項目について、診断間隔記憶部２５５が記憶した診断間隔を入力し、入力した診断間隔と、所定の閾値とを比較する。診断間隔加算部２５７は、ＣＰＵ９１１を用いて、診断間隔が所定の閾値よりも大きい場合に、その診断項目について、優先度記憶部２５１が記憶した優先度を入力し、入力した優先度に所定の値を加算して、更新後の優先度とする。
これにより、所定の間隔より長い間、診断されていない診断項目の優先度が高くなる。
【０２０８】
重要度加算部２５８は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断重要度５３１を入力する。重要度加算部２５８は、ＣＰＵ９１１を用いて、入力した診断重要度５３１に基づいて、優先度記憶部２５１が記憶した優先度を更新する。優先度記憶部２５１は、磁気ディスク装置９２０を用いて、重要度加算部２５８が更新した優先度を記憶する。
例えば、重要度加算部２５８は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目それぞれについて、診断重要度５３１を入力する。重要度加算部２５８は、ＣＰＵ９１１を用いて、その診断項目について、優先度記憶部２５１が記憶した優先度を入力する。重要度加算部２５８は、ＣＰＵ９１１を用いて、入力した優先度に、入力した診断重要度５３１を加算して、更新後の優先度とする。
これにより、重要度が高い診断項目の優先度は、重要度が低い診断項目の優先度よりも速い速度で高くなる。
【０２０９】
故障可能性加算部２５９は、ＣＰＵ９１１を用いて、異常状況判定部１４０が出力した判定結果を入力する。故障可能性加算部２５９は、ＣＰＵ９１１を用いて、入力した判定結果に基づいて、異常状況が発生したと異常状況判定部１４０が判定した場合に、診断項目データベース記憶部１１０が記憶した故障発生可能性５５１，５５２のなかから、異常状況判定部１４０が判定した異常状況についての故障発生可能性を取得する。故障可能性加算部２５９は、ＣＰＵ９１１を用いて、取得した故障発生可能性に基づいて、優先度記憶部２５１が記憶した優先度を更新する。優先度記憶部２５１は、磁気ディスク装置９２０を用いて、故障可能性加算部２５９が更新した優先度を記憶する。
例えば、故障可能性加算部２５９は、ＣＰＵ９１１を用いて、診断項目データベース記憶部１１０が記憶した診断項目それぞれについて、故障発生可能性を入力する。故障可能性加算部２５９は、ＣＰＵ９１１を用いて、その診断項目について、優先度記憶部２５１が記憶した優先度を入力する。故障可能性加算部２５９は、ＣＰＵ９１１を用いて、入力した優先度に、入力した故障発生可能性を加算して、更新後の優先度とする。
これにより、異常状況が発生した場合に、故障発生の可能性が高くなった診断項目の優先度が高くなる。
【０２１０】
完了判定部２４５は、ＣＰＵ９１１を用いて、診断計画の作成が完了したか否かを判定する。
この実施の形態における完了判定部２４５は、実施の形態２と異なり、ある程度のところまで診断計画が作成できたら、作成が完了したと判定する。
例えば、完了判定部２４５は、ＣＰＵ９１１を用いて、次回実行すべき起動時診断処理について残り時間記憶部２４２が記憶した残り時間が、所定の閾値よりも短くなった場合、起動時診断計画の作成が完了したと判定する。
また、完了判定部２４５は、ＣＰＵ９１１を用いて、動作中診断計画として診断を実行する順序を定めた動作中診断項目の数が、所定の数以上になった場合に、動作中診断計画の作成が完了したと判定する。
あるいは、完了判定部２４５は、ＣＰＵ９１１を用いて、優先度記憶部２５１が記憶した優先度が所定の閾値以上の診断項目がなくなった場合に、診断計画の作成が完了したと判定する構成としてもよい。
【０２１１】
図１９は、この実施の形態における組込み機器８００全体の動作の流れの一例を示すフローチャート図である。
実施の形態２と比較して、診断計画作成処理Ｓ７４０がある点が異なる。
【０２１２】
この実施の形態における診断計画作成処理Ｓ６３０において、診断計画作成部１２０は、ＣＰＵ９１１を用いて、完全な診断計画を作成するのではなく、状況の変化に柔軟に応じられるよう、とりあえず次回（もしくは数回先まで）の診断処理が実行できる程度の暫定的な診断計画を作成する。
【０２１３】
そのため、組込み機器８００がアイドル状態となり、動作中診断処理が終わった段階（もしくは診断対象が確保できなかったために動作中診断処理ができなかった段階）で、診断計画作成処理Ｓ７４０を実行する。
【０２１４】
診断計画作成処理Ｓ７４０において、診断計画作成部１２０は、ＣＰＵ９１１を用いて、暫定的な診断計画を作成する。このとき、診断計画作成部１２０は、診断計画記憶部１９０が記憶した診断計画を初期化して、また最初から診断計画を作成する構成でもよいし、診断計画記憶部１９０が記憶した診断計画を初期化せず、作成済の診断計画の続きとして、診断計画を作成する構成でもよい。
診断計画記憶部１９０は、磁気ディスク装置９２０を用いて、診断計画作成部１２０が作成した診断計画を記憶する。
【０２１５】
なお、診断計画作成部１２０は、組込み機器８００がアイドル状態となった場合だけでなく、組込み機器８００の動作を終了させる終了時にも、診断計画を作成する構成としてもよい。そうすれば、組込み機器８００がアイドル状態となる前に組込み機器８００の動作が終了するなどした場合であっても、診断計画作成部１２０が作成した診断計画が枯渇することがなくなるので、組込み機器８００の起動時に、診断計画作成処理Ｓ６３０を実行する機会がほとんどなくなり、組込み機器８００の起動時における待ち時間を短くすることができる。
【０２１６】
この実施の形態における診断装置１００は、更に、異常状況判定部１４０と、故障発生可能性記憶部１１５とを有する。
上記異常状況判定部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記対象装置（組込み機器８００）が故障しやすくなる異常状況が発生したか否かを判定する。
上記故障発生可能性記憶部１１５は、上記記憶装置（磁気ディスク装置９２０）を用いて、上記診断項目記憶部１１１が記憶した複数の診断項目のそれぞれについて、上記異常状況判定部１４０が判定する異常状況が発生した場合に上記対象装置（組込み機器８００）が故障する可能性を表わす故障発生可能性５５１，５５２を記憶する。
上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、異常状況が発生したと上記異常状況判定部１４０が判定した場合に、上記故障発生可能性記憶部１１５が記憶した故障発生可能性に基づいて、故障する可能性の高い診断項目ほど優先して診断をする診断計画を作成する。
【０２１７】
この実施の形態における診断装置１００によれば、異常状況が発生した場合に、故障する可能性の高い診断項目ほど優先して診断をする診断計画を、診断計画作成部１２０が作成するので、異常状況により発生した故障を早期に発見することができ、組込み機器８００を安全に使用することができる。
【０２１８】
以上説明した診断装置１００（機器起動時自己診断装置、機器自己診断装置）において、診断計画部（診断計画作成部１２０）は、利用率に基づき、よく利用される部分の診断頻度を上げる。
例えば、メモリや外部装置へのアクセスの頻度をとっておき、利用頻度の高かったメモリ部位や利用頻度の高かった装置を中心に重みをつけて、診断計画を作成する。
あるいは、診断実行部２００が診断計画から診断項目を抽出する際に、アクセス履歴を利用して利用率の高いものに重みをつけて選択する構成としても良い。
【０２１９】
以上説明した診断装置１００（機器起動時自己診断装置、機器自己診断装置）において、診断計画部（診断計画作成部１２０）は、部分診断部（診断実行部２００）に対して、１日１回あるいは前回の起動から一定時間以上たったとき、あるいは当該組込み機器８００が使われる状況下において高温や低温、振動状態など通常とは異なる状況になったときのみ外部機器からの情報に基づいて起動時の診断を行うことを指示することにより診断を行う。
例えば、温度計や衝撃センサなどで異常な高温や衝撃を受けたと判断できるような情報がある場合は、関連する部位（例えば温度であればＣＰＵ、衝撃であればＨＤＤ）を優先的に診断対象とする診断計画を作成する。
あるいは、診断実行部２００が診断計画から診断項目を抽出する際に、外部のセンサーの情報を利用して異常状態があった場合に関連する部位の診断の優先度を高くする構成としても良い。
【０２２０】
実施の形態４．
実施の形態４について、図２０を用いて説明する。
なお、実施の形態３で説明した組込み機器８００と共通する部分については、同一の符号を付し、説明を省略する。
【０２２１】
この実施の形態では、異常状況が発生した場合に、すべての診断項目についての診断を終えるまでの所要回数を少なくする構成について説明する。
【０２２２】
図２０は、この実施の形態における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図である。
診断計画作成部１２０は、実施の形態３で説明した機能ブロックに加えて、制限時間緩和部２６１を有する。
【０２２３】
制限時間緩和部２６１は、ＣＰＵ９１１を用いて、異常状況判定部１４０が出力した判定結果を入力する。制限時間緩和部２６１は、ＣＰＵ９１１を用いて、入力した判定結果に基づいて、以上状況が発生したと異常状況判定部１４０が判定した場合に、制限時間記憶部１２１が記憶した制限時間を緩和する。制限時間記憶部１２１は、磁気ディスク装置９２０を用いて、制限時間緩和部２６１が緩和した制限時間を記憶する。
例えば、制限時間緩和部２６１は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した制限時間を入力し、入力した制限時間を「１．２５」倍して、緩和した制限時間とする。
これにより、異常状況が発生した場合は、通常時よりも、少ない所要回数（以下「異常時診断回数」と呼ぶ。）で、すべての診断項目についての診断をすることができる。
【０２２４】
あるいは、制限時間緩和部２６１は、ＣＰＵ９１１を用いて、あらかじめ定められた異常時診断回数に基づいて、異常時診断回数の診断処理ですべての診断項目についての診断が終了するよう、緩和した制限時間を算出する構成であってもよい。
例えば、診断計画作成部１２０は、ＣＰＵ９１１を用いて、すべての診断項目について少なくとも一回は診断をする診断計画を作成し、その診断計画における診断所要回数を算出する。制限時間緩和部２６１は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した制限時間と、算出した診断所要回数との積を算出し、算出した積を、所定の異常時診断回数で割った商を算出し、算出した商を、緩和した制限時間とする。
これにより、異常状況が発生した場合は、あらかじめ定めた異常時診断回数で、すべての診断項目についての診断をすることができる。
【０２２５】
また、制限時間緩和部２６１は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した制限時間を緩和したのち、組込み機器８００が故障していないことを確認できたか否かを判定する。制限時間緩和部２６１は、ＣＰＵ９１１を用いて、組込み機器８００が故障していないことを確認できたと判定した場合、制限時間記憶部１２１が記憶した制限時間を元に戻す。制限時間記憶部１２１は、磁気ディスク装置９２０を用いて、制限時間緩和部２６１が元に戻した制限時間を記憶する。
例えば、制限時間緩和部２６１は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した制限時間を入力し、入力した制限時間を「０．８」倍して、元に戻した制限時間とする。
【０２２６】
組込み機器８００が故障していないことを確認する方式には、例えば、以下の方式がある。
制限時間緩和部２６１は、ＣＰＵ９１１を用いて、制限時間記憶部１２１が記憶した制限時間を緩和して以降における組込み機器８００の起動回数を計数することにより、起動時診断処理の実行回数を算出する。制限時間緩和部２６１は、算出した実行回数に基づいて、すべての診断項目についての診断を終えるに十分な回数の起動時診断処理を実行した場合に、組込み機器８００が故障していないことが確認できたと判定する。
【０２２７】
この実施の形態における診断装置１００は、更に、異常状況判定部１４０を有する。
上記異常状況判定部１４０は、、上記処理装置（ＣＰＵ９１１）を用いて、上記対象装置（組込み機器８００）が故障しやすくなる異常状況が発生したか否かを判定する。
上記診断計画作成部１２０は、上記処理装置（ＣＰＵ９１１）を用いて、異常状況が発生したと上記異常状況判定部１４０が判定した場合に、所定の異常時診断回数の診断処理により、上記診断項目記憶部１１１が記憶した複数の診断項目について診断をする診断計画を作成し、異常状況が発生していないと上記異常状況判定部１４０が判定した場合に、上記所定の異常時診断回数よりも多い回数の診断処理により、上記診断項目記憶部１１１が記憶した複数の診断項目について診断をする診断計画を作成する。
【０２２８】
この実施の形態における診断装置１００によれば、異常状況が発生した場合に、通常よりも少ない診断所要回数ですべての診断項目についての診断をする診断計画を、診断計画作成部１２０が作成するので、異常状況により発生した故障を早期に発見することができ、組込み機器８００を安全に使用することができる。
【図面の簡単な説明】
【０２２９】
【図１】実施の形態１における組込み機器８００のハードウェア構成の一例を示すハードウェア構成図。
【図２】実施の形態１における組込み機器８００のソフトウェアの階層構成の一例を示すソフトウェア階層図。
【図３】実施の形態１における診断装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図４】実施の形態１における診断項目データベース記憶部１１０が記憶する診断項目に関する情報の一例を示す図。
【図５】実施の形態１における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図。
【図６】実施の形態１における診断計画作成部起動時診断実行部２１０及び動作中診断実行部２２０の詳細ブロックの構成の一例を示す詳細ブロック図。
【図７】実施の形態１における組込み機器８００全体の動作の流れの一例を示すフローチャート図。
【図８】実施の形態１における診断計画作成部１２０が診断計画を作成する診断計画作成処理Ｓ６３０の流れの一例を示すフローチャート図。
【図９】実施の形態１における診断計画作成処理において、診断項目振り分け部１２４が診断項目を振り分ける様子を示す概念図。
【図１０】実施の形態１における起動時診断実行部２１０が組込み機器８００の起動時に自己診断をする起動時診断処理Ｓ６４０の流れの一例を示すフローチャート図。
【図１１】実施の形態１における起動時診断実行部２１０が動作中診断処理のために動作中診断項目を確保する動作中診断項目確保処理Ｓ６５０の流れの一例を示すフローチャート図。
【図１２】実施の形態１における動作中診断実行部２２０が組込み機器８００の動作中に自己診断をする動作中診断処理Ｓ６９０の流れの一例を示すフローチャート図。
【図１３】実施の形態２における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図。
【図１４】実施の形態２における起動時診断実行部２１０及び動作中診断実行部２２０の詳細ブロックの一例を示す詳細ブロック図。
【図１５】実施の形態２における組込み機器８００全体の動作の流れの一例を示すフローチャート図。
【図１６】実施の形態２における診断計画作成部１２０が診断計画を作成する診断計画作成処理Ｓ６３０の流れの一例を示すフローチャート図。
【図１７】実施の形態３における診断装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図１８】実施の形態３における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図。
【図１９】実施の形態３における組込み機器８００全体の動作の流れの一例を示すフローチャート図。
【図２０】実施の形態４における診断計画作成部１２０の詳細ブロックの構成の一例を示す詳細ブロック図。
【符号の説明】
【０２３０】
１００  診断装置、１１０  診断項目データベース記憶部、１１１  診断項目記憶部、１１２  診断所要時間記憶部、１１３  診断重要度記憶部、１１４  動作中診断可否記憶部、１１５  故障発生可能性記憶部、１２０  診断計画作成部、１２１  制限時間記憶部、１２２  総所要時間算出部、１２３  診断所要回数算出部、１２４  診断項目振り分け部、１２５  診断計画記憶部、１３０  制限時間入力部、１４０  異常状況判定部、１５０  診断所要時間計測部、１５５  診断対象利用率計測部、１６０  診断結果記憶部、１７０  診断結果出力部、１９０  診断計画記憶部、２００  診断実行部、２１０  起動時診断実行部、２１１  起動時診断回数記憶部、２１２  起動時診断計画取得部、２１３  起動時診断部、２１４  起動時診断回数更新部、２１５  動作中診断計画取得部、２１６  動作中診断項目確保部、２２０  動作中診断実行部、２２１  動作中診断回数記憶部、２２２  確保項目開放部、２２３  診断項目確保判定部、２２４  動作中診断部、２２５  動作中診断回数更新部、２２６  診断済項目記憶部、２３１  重要度記憶部、２３２  起動時診断項目抽出部、２３３  動作中診断項目抽出部、２３４  重要度更新部、２４１  起動時診断処理初期化部、２４２  残り時間記憶部、２４３  起動時診断処理選択部、２４４  残り時間減算部、２４５  完了判定部、２５１  優先度記憶部、２５２  起動時優先項目抽出部、２５３  動作中優先項目抽出部、２５４  優先度更新部、２５５  診断間隔記憶部、２５６  診断間隔更新部、２５７  診断間隔加算部、２５８  重要度加算部、２５９  故障可能性加算部、２６１  制限時間緩和部、５１１  診断対象、５１２  診断内容、５２１  診断所要時間、５３１  診断重要度、５４１  動作中診断可否、５５１，５５２  故障発生可能性、８００  組込み機器、８１０  メモリカード、９０１  表示装置、９０２  入力装置、９０８  スピーカ、９１１  ＣＰＵ、９１４  ＲＡＭ、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ミドルウェア、９２３〜９２５  アプリケーション、９３０  フラッシュメモリ、９５１  メモリカード読取装置、９５２  カメラ、９５３  通信メモリ、９６１  温度センサ、９６２  衝撃センサ。
【図１】
2010122790.tif 000003
【図２】
2010122790.tif 000004
【図３】
2010122790.tif 000005
【図４】
2010122790.tif 000006
【図５】
2010122790.tif 000007
【図６】
2010122790.tif 000008
【図７】
2010122790.tif 000009
【図８】
2010122790.tif 000010
【図９】
2010122790.tif 000011
【図１０】
2010122790.tif 000012
【図１１】
2010122790.tif 000013
【図１２】
2010122790.tif 000014
【図１３】
2010122790.tif 000015
【図１４】
2010122790.tif 000016
【図１５】
2010122790.tif 000017
【図１６】
2010122790.tif 000018
【図１７】
2010122790.tif 000019
【図１８】
2010122790.tif 000020
【図１９】
2010122790.tif 000021
【図２０】
2010122790.tif 000022