(57)【特許請求の範囲】
【請求項１】
入力データに基づいて異常の有無を診断する異常診断装置において、
前記診断を行うための演算の順序と、前記演算毎の入力データ名、出力データ名および必要なパラメタの一部または全部を含む演算ルールとが予め定義された演算ルール情報を管理する制御部と、
複数種類の演算モジュールクラスについて、前記演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報を管理し、前記演算ルール情報および前記演算モジュールクラス定義情報に基づいて、前記診断を行うための各前記演算をそれぞれ実行する演算モジュールオブジェクトをそれぞれ生成する演算モジュール管理部と、
前記演算モジュール管理部により生成された各前記演算モジュールオブジェクトを前記演算ルール情報において規定された前記演算の順序で実行する演算処理部と、
各前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報において対応する前記演算について定義された前記出力データ名と対応付けて管理する現在データ管理部と
を備え、
前記演算処理部は、
前記演算ルール情報において演算の順序が１つ以上前に規定された対応する前記演算モジュールオブジェクトの演算結果を、前記演算ルール情報で規定された前記入力データ名をキーとして前記現在データ管理部から取得し、
取得した前記実行結果に対して当該演算モジュールオブジェクトを実行し、
実行した前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報で規定された前記出力データ名と対応付けて前記現在データ管理部に登録する
ことを特徴とする異常診断装置。
【請求項２】
前記診断の診断結果を出力する結果出力部をさらに備え、
前記演算モジュールクラス定義情報は、
前記逐次処理動作として前記入力データを前記現在データ管理部に登録する前記演算モジュールクラスの定義を含む
ことを特徴とする請求項１に記載の異常診断装置。
【請求項３】
前記制御部は、
外部操作に応じて、前記演算ルール情報を、外部から与えられた新たな前記演算ルール情報に置き換える
ことを特徴とする請求項１に記載の異常診断装置。
【請求項４】
前記制御部は、
予め定義された前記異常診断装置に対する各設定項目のパラメタがそれぞれ登録された設定情報と、
予め定義された前記異常診断装置のデータ入出力に関する各設定項目のパラメタが登録された入出力情報とをさらに管理し、
外部操作に応じて、指定された前記設定情報または前記入出力情報を、外部から与えられた新たな前記設定情報または前記入出力情報に置き換える
ことを特徴とする請求項３に記載の異常診断装置。
【請求項５】
前記診断を中断する際に、前記演算モジュールオブジェクト毎の中間データを含むレジュームデータをそれぞれ取得して管理し、当該診断を再開する際に、前記演算モジュールオブジェクト毎の前記レジュームデータに基づいて、前記診断を中断する直前の状態に各前記演算モジュールオブジェクトの状態を戻すレジュームデータ管理部をさらに備える
ことを特徴とする請求項１に記載の異常診断装置。
【請求項６】
入力データに基づいて異常の有無を診断する異常診断装置において実行される異常診断方法であって、
前記異常診断装置は、
前記診断を行うための演算の順序と、前記演算毎の入力データ名、出力データ名および必要なパラメタの一部または全部を含む演算ルールとが予め定義された演算ルール情報を管理する制御部と、
複数種類の演算モジュールクラスについて、前記演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報を管理し、前記演算ルール情報および前記演算モジュールクラス定義情報に基づいて、前記診断を行うための各前記演算をそれぞれ実行する演算モジュールオブジェクトをそれぞれ生成する演算モジュール管理部と、
前記演算モジュール管理部により生成された各前記演算モジュールオブジェクトを前記演算ルール情報において規定された前記演算の順序で実行する演算処理部と、
各前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報において対応する前記演算について定義された前記出力データ名と対応付けて管理する現在データ管理部とを有し、
前記演算処理部が、前記演算ルール情報において演算の順序が１つ以上前に規定された対応する前記演算モジュールオブジェクトの演算結果を、前記演算ルール情報で規定された前記入力データ名をキーとして前記現在データ管理部から取得し、取得した前記実行結果に対して当該演算モジュールオブジェクトを実行する第１のステップと、
前記演算処理部が、実行した前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報で規定された前記出力データ名と対応付けて前記現在データ管理部に登録する第２のステップと
を備えることを特徴とする異常診断方法。
【請求項７】
前記異常診断装置は、
前記診断の診断結果を出力する結果出力部をさらに備え、
前記演算モジュールクラス定義情報は、
前記逐次処理動作として前記入力データを前記現在データ管理部に登録する前記演算モジュールクラスの定義を含む
ことを特徴とする請求項６に記載の異常診断方法。
【請求項８】
前記制御部は、
外部操作に応じて、前記演算ルール情報を、外部から与えられた新たな前記演算ルール情報に置き換える
ことを特徴とする請求項６に記載の異常診断方法。
【請求項９】
前記制御部は、
予め定義された前記異常診断装置に対する各設定項目のパラメタがそれぞれ登録された設定情報と、
予め定義された前記異常診断装置のデータ入出力に関する各設定項目のパラメタが登録された入出力情報とをさらに管理し、
外部操作に応じて、指定された前記設定情報または前記入出力情報を、外部から与えられた新たな前記設定情報または前記入出力情報に置き換える
ことを特徴とする請求項８に記載の異常診断方法。
【請求項１０】
前記異常診断装置は、
前記診断を中断する際に、前記演算モジュールオブジェクト毎の中間データを含むレジュームデータをそれぞれ取得して管理し、当該診断を再開する際に、前記演算モジュールオブジェクト毎の前記レジュームデータに基づいて、前記診断を中断する直前の状態に各前記演算モジュールオブジェクトの状態を戻すレジュームデータ管理部をさらに備える
ことを特徴とする請求項６に記載の異常診断方法。
【請求項１１】
入力データに基づいて異常の有無を診断する異常診断システムにおいて、
多段にカスケード接続された複数の異常診断装置を有し、
各前記異常診断装置は、
前記入力データまたは前段の前記異常診断装置の出力を入力としてそれぞれ所定の異常診断処理を実行し、
当該異常診断処理の処理結果を次段の前記異常診断装置に出力し、または、前記診断の診断結果として出力し、
前記異常診断装置は、
前記異常診断処理を実行するための演算の順序と、前記演算毎の入力データ名、出力データ名および必要なパラメタの一部または全部を含む演算ルールとが予め定義された演算ルール情報を管理する制御部と、
複数種類の演算モジュールクラスについて、前記演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報を管理し、前記演算ルール情報および前記演算モジュールクラス定義情報に基づいて、前記異常診断処理を実行するための各前記演算をそれぞれ実行する演算モジュールオブジェクトをそれぞれ生成する演算モジュール管理部と、
前記演算モジュール管理部により生成された各前記演算モジュールオブジェクトを前記演算ルール情報において規定された前記演算の順序で実行する演算処理部と、
各前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報において対応する前記演算について定義された前記出力データ名と対応付けて管理する現在データ管理部と
を備え、
前記演算処理部は、
前記演算ルール情報において演算の順序が１つ以上前に規定された対応する前記演算モジュールオブジェクトの演算結果を、前記演算ルール情報で規定された前記入力データ名をキーとして前記現在データ管理部から取得し、
取得した前記実行結果に対して当該演算モジュールオブジェクトを実行し、
実行した前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報で規定された前記出力データ名と対応付けて前記現在データ管理部に登録する
ことを特徴とする異常診断システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設備やプラント等における装置動作中の異常を早期に検知することで診断する技術に関する。
【背景技術】
【０００２】
製造設備、化学・電力等のプラント、医療機器および車両などの様々な分野において、動作異常や故障状態を早期に診断し、または、これらの予測を早期に行って、装置や部品の調整や交換などの保守作業を行うコンディションベースドメンテナンス（以下、これをＣＢＭと略す）やプレディクテイブメンテナンス（以下、これをＰＭと略す）を実施することが必要とされている。このようなＣＢＭやＰＭにより、装置または部品の故障や不具合による突発停止や、機会損失による経済的な損害、または、作業者や製品の利用者への健康ないし人命への損害を最小限に抑えることができる。従来、これらの異常診断を自動化することによって、診断結果を契機としたＣＢＭやＰＭを実施する要望が高まっている。
【０００３】
従来の異常診断では、装置や部品の動作に関係する１つ以上の物理量、すなわち、質量、長さ、時間、電流、熱力学温度、物質量、光度や、それらの組立て量（圧力、速度・加速度、電荷、電圧など）の大きさや変化を、それぞれのセンサから時系列情報として取得したベクトルデータを用いて、その正常な状態の挙動を特定の物理モデルまたは統計モデルで表現し、ここからの逸脱量、または、近い将来逸脱する可能性を求める技術が用いられていた。
【０００４】
例えば、特許文献１に代表される異常判定方法では、正常状態であることが既知であるセンサから出力された時系列の一連のセンサデータからなるセンサデータ群を訓練データとして、これらを基に線形混合モデルで規定するためのパラメタをベイズ推定法などで推定しておき、診断を行う評価データに基づく同様のパラメタを推定し、訓練データでのパラメタと比較をすることで異常の有無を判定している。
【０００５】
また、特許文献２に代表される異常検知方法では、入力されるセンサデータの特徴空間の軌跡を時間に沿って複数のクラスタ群として分割するとともに、それぞれのクラスタにおいて部分空間法または回帰分析法により対象となる装置や部品の動作をモデル化しておく。そして診断時には、入力データを同様に特徴空間の軌跡として、属するクラスタ群から対象の運転状態の軌跡を検知し、また、それぞれのクラスタにおけるはずれ値を以て異常候補として算出している。
【０００６】
これらの異常診断の方法では、データ取得と結果出力の入出力処理、データ欠損や無効データの修正・削除・付加などのデータ整形処理や、主成分分析などの特徴量化処理、データのクラスタリングやパラメタ推定などでのモデル学習処理、モデルからのはずれ値を求めるなどの測距処理、属するクラスタの判定や異常度合いからクラスを求める識別処理、などの一連の処理を組合せて用いることで異常の有無を診断している。
【０００７】
また、これらの診断アルゴリズムの各処理を要素分解して一般化することでそれぞれを部品化しておき、診断を行う分析者が、求める異常診断に最適な複数の処理要素部品ノードを任意に連結するワークフローとして組み合わせるとともにパラメタの試行錯誤を行い、その分析結果を表示するための分析基盤技術も知られている。
【０００８】
例えば、非特許文献１で示される分析基盤は、データ入力、データ変換、各種分析アルゴリズム、スクリプト型分析（Ｒ、Pythonなど）、結果可視化、結果出力など、多くのモジュールを処理ノードとして接続する処理ワークフローを画面上でグラフィカルに構成し、データをモジュールの接続関係を基に次々と処理する分析ワークベンチである。
【０００９】
また、非特許文献２で示される分析基盤では、データ入力、データ変換・統合・クレンジング、結果出力など、多くのモジュールを処理ノードとなるように接続するよう処理ワークフローを画面上グラフィカルに構成し、データをモジュールの接続関係を基に次々と処理することでデータを統合・整形するＥＴＬ（Extract/Transform/Load）処理ツールが用意されていた。また、整形されたデータを多元分析するＯＬＡＰ（Online Analytical Processing）分析ツールや、データマイニング分析用のツール（Ｗｅｋａ）、および、結果表示およびレポート作成用のツールが用意されている。
【００１０】
さらに、非特許文献３で示される分析基盤は、JavaScript（登録商標）を用いたプログラムをビジュアルプログラミングの手法でグラフィカルに複数の演算ノードを接続しながら構成するツールであり、この分析基盤では、ＳＮＳおよびＩｏＴ（Internet of Things）デバイス、クラウドサービスとの入出力が用意されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特許第５５９８０８２号明細書
【特許文献２】特許第５４９８５４０号明細書
【非特許文献】
【００１２】
【非特許文献１】“Open for Innovation”、［online］、KNIME社、［平成28年3月2日検索］、インターネット〈http://www.knime.org〉
【非特許文献２】“Any Analytics,AnyData,Simplified”、［online］、Pentaho社、［平成28年3月2日検索］、インターネット〈http://www.pentaho.com〉
【非特許文献３】“Node-RED”、［online］、Node-RED社、［平成28年3月2日検索］、インターネット〈http://nodered.org〉
【発明の概要】
【発明が解決しようとする課題】
【００１３】
これらの従来技術は、予め規定するモデルによってデータの挙動を仮定してしまうため、想定する特定の分野以外に、あるいは、そのための対象となる装置およびプラント以外に対応可能かどうか、また、対象となるデータを取得するためのセンサの種類や特性が異なる場合にも対応可能かどうかは不明であり、想定する特定の分野等以外への適用が事実上困難であった。
【００１４】
また、従来の分析基盤技術では、分野や装置・プラントなどを特定せず任意のアルゴリズムを構成可能で、処理ノードをグラフィカルにリンクでつなぐ設定ツールがあるが、受け渡すデータの定義は２つの処理ノード間リンクで局所的に限定して定義するため、診断アルゴリズム変更時のノード変更やワークフロー変更に下流で利用するデータは上流にさかのぼって変更をしたり、リンクを増やしてしまいグラフィカルな接続関係エディタ画面上でも接続関係が見づらくなったりするなど、処理定義変更時の煩雑さが課題であった。
【００１５】
また、複数個所での同一データを利用する際も各リンクでデータの複製と伝達をする必要があったり、それぞれの処理ノードではある程度の量を蓄積した入力データの全て処理を実行してその終了を待って次段ノードの入力として処理していくバッチ型処理であったり、あるいは、スクリプトによる処理のインタプリタやテキスト変換が必要であったりするため、メモリリソースの消費量増大や、計算量や処理時間の増大も課題であった。
【００１６】
従って、装置・部品やそれらの動作制御コントローラであるＰＬＣ（Programmable Logic Controller）、装置サイトから外部サーバへデータ通信のためのゲートウェイ装置など、低リソース装置への組み込みが事実上困難であった。
【００１７】
本発明は以上の点を考慮してなされたものであり、汎用性が高く、処理定義の変更も用意に行うことができ、さらにメモリリソースの消費量増大および計算量や処理時間の増大をも抑制し得る異常診断装置および方法、並びに、異常診断システムを提案しようとするものである。
【課題を解決するための手段】
【００１８】
かかる課題を解決するため本発明においては、入力データに基づいて異常の有無を診断する異常診断装置において、前記診断を行うための演算の順序と、前記演算毎の入力データ名、出力データ名および必要なパラメタの一部または全部を含む演算ルールとが予め定義された演算ルール情報を管理する制御部と、複数種類の演算モジュールクラスについて、前記演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報を管理し、前記演算ルール情報および前記演算モジュールクラス定義情報に基づいて、前記診断を行うための各前記演算をそれぞれ実行する演算モジュールオブジェクトをそれぞれ生成する演算モジュール管理部と、前記演算モジュール管理部により生成された各前記演算モジュールオブジェクトを前記演算ルール情報において規定された前記演算の順序で実行する演算処理部と、各前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報において対応する前記演算について定義された前記出力データ名と対応付けて管理する現在データ管理部とを設け、前記演算処理部が、前記演算ルール情報において演算の順序が１つ以上前に規定された対応する前記演算モジュールオブジェクトの演算結果を、前記演算ルール情報で規定された前記入力データ名をキーとして前記現在データ管理部から取得し、取得した前記実行結果に対して当該演算モジュールオブジェクトを実行し、実行した前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報で規定された前記出力データ名と対応付けて前記現在データ管理部に登録するようにした。
【００１９】
また本発明においては、入力データに基づいて異常の有無を診断する異常診断装置において実行される異常診断方法であって、前記異常診断装置は、前記診断を行うための演算の順序と、前記演算毎の入力データ名、出力データ名および必要なパラメタの一部または全部を含む演算ルールとが予め定義された演算ルール情報を管理する制御部と、複数種類の演算モジュールクラスについて、前記演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報を管理し、前記演算ルール情報および前記演算モジュールクラス定義情報に基づいて、前記診断を行うための各前記演算をそれぞれ実行する演算モジュールオブジェクトをそれぞれ生成する演算モジュール管理部と、前記演算モジュール管理部により生成された各前記演算モジュールオブジェクトを前記演算ルール情報において規定された前記演算の順序で実行する演算処理部と、各前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報において対応する前記演算について定義された前記出力データ名と対応付けて管理する現在データ管理部とを有し、前記演算処理部が、前記演算ルール情報において演算の順序が１つ以上前に規定された対応する前記演算モジュールオブジェクトの演算結果を、前記演算ルール情報で規定された前記入力データ名をキーとして前記現在データ管理部から取得し、取得した前記実行結果に対して当該演算モジュールオブジェクトを実行する第１のステップと、前記演算処理部が、実行した前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報で規定された前記出力データ名と対応付けて前記現在データ管理部に登録する第２のステップとを設けるようにした。
【００２０】
さらに本発明においては、入力データに基づいて異常の有無を診断する異常診断システムにおいて、多段にカスケード接続された複数の異常診断装置を有し、各前記異常診断装置は、前記入力データまたは前段の前記異常診断装置の出力を入力としてそれぞれ所定の異常診断処理を実行し、当該異常診断処理の処理結果を次段の前記異常診断装置に出力し、または、前記診断の診断結果として出力し、前記異常診断装置は、前記異常診断処理を実行するための演算の順序と、前記演算毎の入力データ名、出力データ名および必要なパラメタの一部または全部を含む演算ルールとが予め定義された演算ルール情報を管理する制御部と、複数種類の演算モジュールクラスについて、前記演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報を管理し、前記演算ルール情報および前記演算モジュールクラス定義情報に基づいて、前記異常診断処理を実行するための各前記演算をそれぞれ実行する演算モジュールオブジェクトをそれぞれ生成する演算モジュール管理部と、前記演算モジュール管理部により生成された各前記演算モジュールオブジェクトを前記演算ルール情報において規定された前記演算の順序で実行する演算処理部と、各前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報において対応する前記演算について定義された前記出力データ名と対応付けて管理する現在データ管理部とを備え、前記演算処理部が、前記演算ルール情報において演算の順序が１つ以上前に規定された対応する前記演算モジュールオブジェクトの演算結果を、前記演算ルール情報で規定された前記入力データ名をキーとして前記現在データ管理部から取得し、取得した前記実行結果に対して当該演算モジュールオブジェクトを実行し、実行した前記演算モジュールオブジェクトの実行結果を、前記演算ルール情報で規定された前記出力データ名と対応付けて前記現在データ管理部に登録するようにした。
【００２１】
かかる本願発明の異常診断装置および方法、並びに、異常診断システムによれば、診断内容に応じた演算ルール情報を作成するだけで種々の形態の診断に適用することができる。また演算モジュールオブジェクト間で受け渡すデータの定義を演算ルール情報として一括して行うことができるため、処理定義の変更が容易であり、さらに演算モジュールオブジェクト間のデータの入出力は各演算モジュールオブジェクトがアクセス可能な現在データ管理部を介して行うため、メモリリソースを演算モジュールオブジェクト間で共有して利用することができ、演算モジュールオブジェクトごとの入出力データ用の記憶領域をそれぞれ用意する必要がない。
【発明の効果】
【００２２】
本発明によれば、汎用性が高く、メモリリソースの消費量増大および計算量や処理時間の増大を抑制し得る異常診断装置および方法、並びに、異常診断システムを実現できる。
【図面の簡単な説明】
【００２３】
【図１】第１、第２および第３の実施の形態による異常診断システムの構成例を示すブロック図である。
【図２】第１、第３および第４の実施の形態による異常診断装置の構成例を示すブロック図である。
【図３】設定テーブルの構成例を示す概念図である。
【図４】入出力テーブルの構成例を示す概念図である。
【図５】演算モジュールクラス定義テーブルの構成例を示す概念図である。
【図６】演算ルールテーブルの構成例を示す概念図である。
【図７】現在データテーブルの構成例を示す概念図である。
【図８】レジュームデータテーブルの構成例を示す概念図である。
【図９】表示部の表示例および操作部の構成例を示す説明図である。
【図１０】表示部の表示例および操作部の構成例を示す説明図である。
【図１１】表示部の表示例および操作部の構成例を示す説明図である。
【図１２】第１の実施の形態による異常診断処理の処理手順を示すフローチャートである。
【図１３】入力データの構成例を示す概念図である。
【図１４】演算モジュール生成処理の処理手順を示すフローチャートである。
【図１５】演算モジュールオブジェクトリストの構成例を示す概念図である。
【図１６】レジューム入力処理の処理手順を示すフローチャートである。
【図１７】モジュール逐次動作処理の処理手順を示すフローチャートである。
【図１８】逐次処理動作処理の処理手順を示すフローチャートである。
【図１９】逐次処理動作の一例の説明に供する概念図である。
【図２０】逐次処理動作の一例の説明に供する概念図である。
【図２１】出力データの構成例を示す概念図である。
【図２２】異常管理／可視化装置における結果データの表示例を示す説明図である。
【図２３】レジューム出力処理の処理手順を示すフローチャートである。
【図２４】処理モジュール終了処理の処理手順を示すフローチャートである。
【図２５】第２の実施の形態による異常診断装置のハードウェア構成の構成例を示すブロック図である。
【図２６】図２５の異常診断装置における補助記憶部上の各種テーブル配置の一例を示す概念図である。
【図２７】図２５の異常診断装置におけるメモリ上に読み込まれた異常診断プログラムの構成例を示す概念図である。
【図２８】第３の実施の形態の異常診断処理の処理手順を示すフローチャートである。
【図２９】コマンド処理の処理手順を示すフローチャートである。
【図３０】表示部の表示例および操作部の構成例を示す説明図である。
【図３１】第４の実施の形態の異常診断システムの構成例を示すブロック図である。
【発明を実施するための形態】
【００２４】
本発明は、安価な低リソース装置でも入力データをストリーム型処理でリアルタイム性の高い異常診断を提供可能とするために、複数の演算モジュールを連携して異常診断を行うにあたり、各演算モジュールでの演算結果の値を識別子と共に記録し、これらを全演算モジュールで共有しながら逐次演算に用いていくことでメモリ使用量や計算量の高効率化を行うことを第１の特徴とする。
【００２５】
また本発明は、多くの演算モジュールを連携させる複雑な診断アルゴリズムであっても、どのデータを用いて演算しているかが各演算モジュールの位置で容易に想起可能とするために、演算モジュールの演算順序と入出力データの識別子により関係づけて記述することを第２の特徴とする。
【００２６】
さらに本発明は、異常診断の処理を中断する際にレジューム動作を実現することを可能とするために、それぞれの演算モジュールの中間データを保存するためのレジューム出力動作と再開する際に復元するためのレジューム入力動作を定義することを第３の特徴とする。
【００２７】
さらに本発明は、大規模な異常診断システムを容易に提供可能とすることために、第１の異常診断装置の診断結果データである出力データを第２の異常診断装置に入力データとして用いるようにする接続を再帰的に行うことを第４の特徴とする。
【００２８】
ただし、本発明の適用は以下の第１〜第４の実施の形態に限定されない。
【００２９】
以下図面について、本発明の一実施の形態を詳述する。
【００３０】
（１）第１の実施の形態
（１−１）異常診断システムの構成
図１において、１は全体として本実施の形態による異常診断システムを示す。この異常診断システム１は、異常診断装置２に１つ以上のデータ生成部３（３１，３２，……，３Ｎ）が接続されて構成される。
【００３１】
データ生成部３は、センサデータや状態を出力する診断対象となる機器若しくは部品（以下、これらを対象機器または対象部品と呼ぶ）、または、これらの動作を模擬するためのデータ生成源であり、特定のデバイスおよび通信規格を用いて所定の形式でデータの出力を行う。なお、異常診断装置２の内部にデータ生成部３を持つことを妨げるものではない。この場合、データ生成部３が、例えば、別途取得したデータファイルを逐次読み取ったり、その生成の模擬を行ったりするものであってもよい。
【００３２】
異常診断装置２は、各データ生成部３からのデータを対象機器または対象部品の状態を含む入力データとしてそれぞれ取得し、逐次これら入力データを用いて予め指定する方法により個々のデータ生成部３や、データ生成部３の集合体としての対象機器または対象部品の異常を自動分析により検出し、異常状態を診断する。そして異常診断装置２は、その診断結果（異常診断結果）をネットワーク４を介して異常管理／可視化装置５に送付する。
【００３３】
異常管理／可視化装置５は、例えば、ＣＰＵおよびメモリを備える汎用のサーバ装置から構成される。異常管理／可視化装置５は、異常診断装置２から送付された異常診断結果を、異常診断装置２あるいはそこに接続された対象機器または対象部品を単位として保持および管理したり、取得した異常診断結果を統計処理するなどしてグラフや表形式で可視化したりする。
【００３４】
また異常診断装置２は、ネットワーク４を介して装置管理サーバ６とも通信を行い、異常診断装置２の挙動を定義する各種テーブルや異常診断装置２で用いる要素動作のバージョンアップを行う。これにより異常診断装置２が常に最新かつ好適な異常診断を提供することが可能となる。なお装置管理サーバ６もＣＰＵおよびメモリを備える汎用のサーバ装置から構成される。
【００３５】
以下においては、異常診断装置２が各データ生成部３からそれぞれ逐次与えられる１つの時系列センサデータから、異常な信号となるスパイク状のデータパターンの検出、および、対象機器または対象部品の劣化状態となるデータの傾向を検出することで、対象機器または対象部品の異常診断を行うことを例に説明する。
【００３６】
（１−２）異常診断装置の構成
図２は、本実施の形態による異常診断装置２の機能構成を示す。本異常診断装置２は、各種処理を実行する機能部として、制御部１０、データ取得部１１（１１１，１１２，……１１Ｎ）、演算モジュール管理部１２、演算処理部１３、現在データ管理部１４、結果出力部１６、レジュームデータ管理部１５、通信部１７、外部記憶部１８、表示部１９、操作部２０および時計部２１を備え、テーブルとして、設定テーブル３０、入出力テーブル３１、演算モジュールクラス定義テーブル３２、演算ルールテーブル３３、現在データテーブル３４、レジュームデータテーブル３５を備えて構成される。
【００３７】
制御部１０は、別途定義された設定テーブル３０、入出力テーブル３１および演算ルールテーブル３３などを取得および管理し、データ取得部１１、演算モジュール管理部１２、演算処理部１３、現在データ管理部１４、レジュームデータ管理部１５、および、結果出力部１６等を制御することにより、異常診断装置２全体として後述のような異常診断処理を実行させる機能を有する。また制御部１０が、通信部１７を用いて装置管理サーバ６から伝送される管理コマンドや、作業者３９の指示に従って各種テーブルの置換や選択を行うことにより、各種設定や異常診断の演算ルールなどの変更を行うようにしてもよい。
【００３８】
データ取得部１１は、それぞれ１つ以上の通信規格とデバイスを用いてデータ生成部３との通信路を確立し、これらデータ生成部３の出力データを入力データとして取得する。これらは１対１の通信路であってもよいし、データ形式に識別の仕組みを含めることで複数のデータ生成部３との接続を１つのデータ取得部１１が確立し、あるいは、その逆に１つのデータ生成部３との接続を複数のデータ取得部１１が同時に確立してもよい。
【００３９】
ここでの通信規格およびデバイスとしては、ＲＳ−２３２Ｃ（およびその後継規格であるＥＩＡ−２３２−Ｄ／Ｅ、ＡＮＳＩ／ＴＩＡ／ＥＩＡ−２３２−Ｆ１９９７など）、ＲＳ−４２２（同ＥＩＡ／ＴＩＡ−４２２など）、およびＲＳ−４８５（同ＥＩＡ／ＴＩＡ−４８５など）などの有線シリアル通信規格、ＩＥＥＥ １２８４／セントロニクスなどの有線パラレル通信規格、ＵＳＢ（Universal Serial Bus）やＩ２Ｃ（Inter-Integrated Circuit）、ＩＥＥＥ １３９４系などの有線シリアルバス規格、ＩｒＤＡ（Infrared Data Association）規格のような赤外線通信規格、などをはじめとする通信規格およびそれを実現するデバイスを適用できる。必要に応じてこれらの中から１つを選択してデータ生成部３と接続し、通信対象を特定して１つ以上のデータ生成部３からのセンサデータを入力データとして取得する。
【００４０】
また通信規格およびデバイスとしては、近距離無線通信規格（ＩＥＥＥ ８０２．１５系、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＺｉｇＢｅｅなど）や、イーサネット（登録商標）（ＩＥＥＥ ８０２．３系）、ＷｉＦｉ（ＩＥＥＥ ８０２．１１系）、ＷｉＭＡＸ（ＩＥＥＥ ８０２．１６系）のような有線／無線通信規格、３Ｇ、ＬＴＥ（Long Time Evolution）、４Ｇ、ＩＳＤＮ（Integrated Services Digital Network）、光通信網の終端ＯＮＵ（Optical Network Unit）・ＤＳＵ（Digital Service Unit）などのキャリア通信網規格をはじめとするネットワーク通信規格、および、ＩＳＯ／ＩＥＥＥ １８０９２などの非接触通信規格（ＮＦＣ、ＦｅｌｉＣａなど）など、任意の通信規格およびデバイスを選択することもできる。ここでは、データ生成部３全体あるいはそれを構成するセンサ単位のアドレスやポート番号などそれぞれのプロトコルを実現する設定を行うことで通信路を確立してデータを取得することが可能である。また、ＧＰＩＯ（General Purpose Input/Output）ポートなどによるデジタル信号入力や、アナログ値を出力するセンサからのＡ／Ｄ（アナログ―デジタル）変換インタフェースによるサンプリング値をデータとして取得してもよい。
【００４１】
なお、データ取得部１１と、データ生成部３との間に上述の各通信規格間の変換手段が存在してもよく、これを実際のデータ生成部３として、元となるデータ生成部や当該データ生成部に含まれるセンサの特定や設定に関する通信を含んでもよい。ネットワーク通信の伝送プロトコルとしては、ＴＣＰ／ＩＰやＵＤＰ／ＩＰでのメッセージング、ＲＥＳＴｆｕｌｌなＨＴＴＰ、ＭＱＴＴ（Message Queue Telemetry Transport）などのメッセージ伝送プロトコル、ＥｔｈｅｒＣＡＴなどのフィールドバス規格、などを用いて、データ生成部３と直接通信する以外にも所定のメッセージブローカーを経由することで所定トピックでのメッセージの購読（サブスクライブ）としてデータ取得を行ってもよい。さらに、セキュリティを高めるために、ユーザ認証や機器認証、通信上のデータ暗号化（ＳＳＬ通信などを含む）、および、外部からの攻撃に対するファイヤウォール機能を持たせることが望ましい。
【００４２】
また、データ取得部１１が、通信内容により取得するか別途設定する定義を用いるなどして、その識別子と共に取得した入力データを時系列で保持、または、最新データのみを保持するようにしてもよい。そして、後段部からの要求に応じて識別子を用いて値を取得可能とするが、この方法はＣＳＶ（Comma-Separated Values）やＸＭＬ（eXtendable Markup Language）、ＪＳＯＮ（JavaScript（登録商標） Object Notation）などのテキスト形式、あるいは、予め規定するバイナリ形式をもって、ファイルや、データベーステーブル、共有メモリ、関数ＡＰＩ（Application Programming Interface）、名前付きパイプやソケットを用いた通信など、装置のＯＳ（Operating System）や各種関係ツールに搭載したデータ授受機能を選択して使用可能である。
【００４３】
演算モジュール管理部１２は、後述の演算モジュールクラス定義テーブル３２と、制御部１０が管理している後述の演算ルールテーブル３３とに従って、そのとき行う異常診断処理の各演算をそれぞれ実行する演算モジュールオブジェクトを実行順にそれぞれ生成するとともに、生成した各演算モジュールオブジェクトを順序付けして管理する。
【００４４】
演算処理部１３は、演算モジュール管理部１２により生成された各演算モジュールオブジェクトを順番に実行することにより、データ取得部１１が取得した入力データを現在データ管理部１４に渡したり、当該入力データに対する異常診断処理を実行する。この際、演算処理部１３は、各演算モジュールオブジェクトの実行結果をそれぞれ現在データ管理部１４に保持させる。そして演算処理部１３は、現在データ管理部１４が保持する演算モジュールオブジェクトの実行結果を利用して次の演算モジュールオブジェクトを実行する。また演算処理部１３は、このようにして実行した異常診断処理の処理結果を結果出力部１６に送信する。
【００４５】
現在データ管理部１４は、演算処理部１３によりデータ取得部１１から与えられた入力データや、演算処理部１３から与えられた各演算モジュールオブジェクトの実行結果をそのデータ識別子と対応付けて現在データテーブル３４に登録して管理する。またレジュームデータ管理部１５は、異常診断処理を中断する際に、演算処理部１３が実行する各演算モジュールオブジェクトの中間データ等を取得し、これらをそれぞれその演算モジュールオブジェクトのレジュームデータとしてレジュームデータテーブル３５に格納して管理する。
【００４６】
結果出力部１６は、演算処理部１３が実行した異常診断処理の処理結果を通信部１７や外部記憶部１８を介して外部に出力する。具体的に、結果出力部１６は、演算処理部１３からＣＳＶ、ＸＭＬ、ＪＳＯＮなどのテキスト形式、あるいは、バイナリ形式で出力される異常診断処理の処理結果を、ファイルやデータベーステーブル、共有メモリ、関数ＡＰＩ、名前付きパイプやソケットを用いた通信などの中から適切なデータ授受機能を選択して外部に出力する。
【００４７】
なお、結果出力部１６が、演算処理部１３から与えられる異常診断処理の処理結果がファイル形式の場合にはハードディスクや不揮発性のメモリなどの二次記録デバイスを、データベーステーブル形式の場合にはデータベースエンジンとの接続関係を、また必要に応じて外部記憶部１８を用いて、ＵＳＢメモリや記録可能ＤＶＤやＣＤ、ＳＤカードなどの記憶媒体３７に出力できるようにしてもよい。
【００４８】
また、本異常診断処理以外のプログラムなどからの名前付きパイプやソケットによる通信や、共有メモリ、関数呼び出しＡＰＩ経由などの方法でデータ出力を行うように結果出力部１６を構成してもよい。さらに、セキュリティを高めるために、ユーザ認証や機器認証、通信上のデータ暗号化（ＳＳＬ通信などを含む）、および、外部からの攻撃に対するファイヤウォール機能を結果出力部１６に持たせるようにしてもよい。
【００４９】
さらに、結果バッファ３６をメモリ上や二次記録デバイス上などに用意し、結果出力部１６が演算処理部１３から与えられた異常診断処理の処理結果を結果バッファ３６に随時格納するようにすることで、通信部１７での接続を確立していない場合や外部記憶部１８のメディアが準備できていない場合、出力待ち中、および、内部でのファイル記録の際のファイルオープンが確立されていない場合にも、それぞれの確立後に送付するように設定することも可能である。
【００５０】
通信部１７は、上述と同様の通信規格及びデバイスによってネットワーク３８を介して外部異常管理／可視化装置５（図１）や装置管理サーバ６（図１）との通信路、あるいは、他の異常診断装置２との間の通信路を確立し、それぞれに定めた上述のようなプロトコルにより、コマンドおよびデータを含むネットワーク通信を行う。
【００５１】
通信部１７は、結果出力部１６で通信部１７を経由したネットワーク通信を用いるよう指定された場合には、上述の各種通信規格を用いるデバイスとして機能し、外部に向けて通信による結果データの送付を行う。通信プロトコルとして、一般的なＴＣＰ／ＩＰやＵＤＰ／ＩＰ、ＲＥＳＴｆｕｌｌなＨＴＴＰ、ＭＱＴＴなどのメッセージ伝送プロトコル、ＥｔｈｅｒＣＡＴなどのフィールドバス等を用いて、直接所定のデータサーバに送付する以外にもメッセージブローカーを経由しての所定トピックでのメッセージの発行（パブリッシュ）としてデータ送出を行ってもよい。さらに、セキュリティを高めるために、ユーザ認証やデータ暗号化（ＳＳＬ通信など）、ファイヤウォール機能を持たせることが望ましい。
【００５２】
外部記憶部１８は、ＵＳＢメモリや記録可能ＤＶＤやＣＤ、ＳＤカードなどのリムーバブルメディアからなる記憶媒体３７に対応するドライバから構成され、記憶媒体３７に対する各種テーブルやデータ等の読み書きを行う。
【００５３】
表示部１９は、異常診断装置２の動作状態あるいは選択が必要な項目の列挙、表示を行う手段であり、異常診断装置２が具備する液晶ディスプレイなどから構成される。ただし、表示部１９が外部モニタにデータを出力するための手段であってもよい。表示部１９は、テキストや図形を生成することで表示を行うものであることが望ましい。
【００５４】
操作部２０は、作業者３９が異常診断装置２に対する操作を行うための操作入力手段であり、例えば、異常診断装置２が具備するスイッチやツマミ類、あるいは、表示部１９と同期するように作業者３９が操作に用いるキーボードやマウスなどから構成される。
【００５５】
時計部２１は、制御部１０が等間隔で一連の処理を実行するように、また、現在データへのタイムスタンプ出力の際の現在時刻を更新するために、異常診断装置２の装置内時刻を管理する。制御部１０は、時計部２１が管理している装置内時刻を取得可能である。なお、時計部２１が、通信部１７を介してＮＴＰ（Network Time Protocol）サーバなどから標準時刻を取得することにより、自己が管理する装置内時刻を定期的に正確な時刻に合わせるようにしてもよい。
【００５６】
なお、制御部１０、データ取得部１１、演算モジュール管理部１２、演算処理部１３、現在データ管理部１４、レジュームデータ管理部１５、結果出力部１６、および、時計部２１は、それぞれ専用のハードウェア構成であっても、また、これらの一部がソフトウェア構成であってもよい。また通信部１７は、例えばＮＩＣ（Network Interface Card）などの通信装置から構成される。
【００５７】
一方、設定テーブル３０は、予めユーザにより定義された本異常診断装置２に設定すべき各設定項目のパラメタを管理するために利用されるテーブルであり、図３に示すように、ターゲット欄３０Ａ及びパラメタ欄３０Ｂを備えて構成される。そしてターゲット欄３０Ａには、異常診断装置２の設定項目名が格納され、パラメタ欄３０Ｂには、その設定項目に関するパラメタが格納される。
【００５８】
例えば、図３の場合、異常診断装置２に設定すべき項目として、本異常診断装置２を利用するユーザに関する情報であるユーザ情報（「USER_INFO」）、本異常診断装置２の製造管理者に関する情報であるベンダ情報（「BENDOR_INFO」）、本異常診断装置２に関する情報である装置情報（「MACHINE_INFO」）、本異常診断装置２へのデータの入出力に関する情報である入出力構成（「IO_SETUP」）、演算ルールテーブル３３に関する情報である診断ルール（「ANALYTICS_RULE」）、異常診断に関する情報である診断実行（「ANALYTICS_EXEC」）、本異常診断装置２を管理する装置管理サーバ６に関する情報である管理サーバ（「MAINTENANCE_SERVER」）などが存在することが示されている。
【００５９】
そしてユーザ情報（「USER_INFO」）およびベンダ情報（「BENDOR_INFO」）については、ユーザやベンダの名称（「name」）、識別子（「userid」）および暗号化されたパスワード（「passwd」）などの情報が設定され、装置情報（「MACHINE_INFO」）については、その異常診断装置２の識別子（「id」）、シリアル番号（「serial」）およびモデル（「model」）が設定される。また入出力構成（「IO_SETUP」）については、入出力テーブル３１を含むファイルへのファイルパス（「path」）およびそのファイルのファイル名（「file」）が設定され、診断ルール（「ANALYTIC_RULE」）については、演算ルールテーブル３３を含むファイルへのファイルパス（「path」）およびそのファイルのファイル名（「file」）が設定され、診断実行（「ANALYTIC_EXEC」）については、異常診断を実行すべき周期が設定される。
【００６０】
さらに管理サーバ（「MAINTENANCE_SERVER」）については、各種テーブルや後述する演算モジュールクラス定義テーブル３２などをはじめとする異常診断の処理全般の動作変更（「enabled」）および修正／バージョンアップを行うための装置管理サーバ６（図１）の有効／無効（「mode」）やそのプロトコル（「protocol」）、そのネットワーク上のアドレス（「url」）がＵＲＬ形式で設定される。図３は、プロトコルとしては「MQTTS」を用い、ＳＳＬ通信を用いたＭＱＴＴ通信を行うこととし、トピック名を別途設定済の前述のユーザプロパティの識別子と、装置プロパティの識別子を用いるよう、「％」文字で引用して構成している例である。
【００６１】
入出力テーブル３１は、予めユーザにより定義された本異常診断装置２のデータ入出力に関する各設定項目のパラメタを管理するために利用されるテーブルであり、本異常診断装置２のユーザにより予め設定される。図４は、設定テーブル３０から指示される、データ取得部１１の設定を行うための入出力テーブル３１の構成例を示している。
【００６２】
この例では、入出力テーブル３１は、１つのレコード（行）３１−１〜３１−６が異常診断装置２に入出力する１つのデータ種別に対応しており、各レコード３１−１〜３１−６は、それぞれＩＤ欄３１Ａ、Ｉ／Ｏ欄３１Ｂ、デバイス欄３１Ｃ、ＵＲＬ欄３１Ｄ、プロトコル欄３１Ｅ、方向欄３１Ｆ、ハンドラクラスＩＤ欄３１Ｇおよびパラメタ欄３１Ｈを備えて構成される。
【００６３】
そしてＩＤ欄３１Ａには、対応するデータに付与された識別子が格納され、Ｉ／Ｏ欄３１Ｂには、そのデータの入出力方向（入力または出力）を表す情報（入力は「Ｉ」、出力は「Ｏ」）が格納される。またデバイス欄３１Ｃには、そのデータの送信元または送信先のデバイスを表す識別子が格納され、ＵＲＬ欄３１Ｄには、そのデバイスのアドレスがＵＲＬ形式で格納される。さらにプロトコル欄３１Ｅには、対応するデータを送受信する際のプロトコルを表す情報が格納され、方向欄３１Ｆには、そのデータを入力または出力する際の送受信方式（プッシュ型のときには「Push」、プル型のときには「Pull」）が格納される。さらにハンドラクラスＩＤ欄には、そのデータに対応するハンドラクラスの識別子が格納され、パラメタ欄３１Ｈには、そのハンドラクラスへのパラメタが格納される。
【００６４】
例えば、図４の場合、識別子が「V1」のレコード３１−１は、近距離無線通信規格ＺｉｇＢｅｅを用いたセンサを受信する手段を経由してＵＳＢに変換して入力するデータ生成部３から入力する設定の例である。すなわち、Ｉ／Ｏ欄３１Ｂの値が「I」、デバイスは「COM0」であり、その位置が「/dev/ttyUSB0」であることから、そのデータがＬｉｎｕｘ（登録商標） ＯＳ上である場合のＵＳＢシリアル通信を用いる特殊ファイルであることが分かる。またプロトコルとして「AT」コマンド体系を用いた「Push」型でデータを送付してくることが示されている。「Push」型通信では、データ生成部のタイミングでデータが送られてくるため、データ取得部内では非同期でデータの到着を待っており、到着時に最新のデータを更新するようにするか、到着するデータをバッファリングし最新のデータを外部に出力するように構成してもよい。ここではさらに、データの取得の手続きにはデータハンドラクラス「ZigBee_Parser」を用いて送付データを解析することとし、そのパラメタとしては「%1」、すなわちデータ内の第１引数を「$AAA」、すなわちセンサデータ識別子「AAA」のセンサデータ値として入力することとしている。
【００６５】
また、識別子が「T1」のレコード３１−２は、同様に「/dev/ttyUSB2」のＵＳＢデバイスで入力されるデータから「$BBB」、すなわちセンサデータ識別子「BBB」のセンサデータ値を取得することを示している。また、識別子が「Peripheral1」のレコード３１−３は、イーサネット（登録商標）通信によってデータを入力する例である。すなわちネットワーク通信用のイーサネット（登録商標）デバイス「ETH1」を用いて「tcp」通信プロトコルを用いてのアドレスＵＲＬから、バイナリデータ（「RAW」）を「Pull」型でデータを取得して「AT_P1」という名前のハンドラクラスで所定の形式としてデータを抽出したうち、「%2」、すなわち第２引数を「$CCC」、すなわちセンサデータ識別子「CCC」のセンサデータ値として入力するための設定であることを示す。なお、「Pull」型通信とは、異常診断装置主導で、データ要求をデータ生成部に送付したのちの返り値としてデータを取得したり、あるいは、データ生成部内にデータがあるかどうかの確認要求を行ったりしてから実際のデータを取得するようにデータハンドラクラスを構成することを示す。
【００６６】
識別子が「Machine1」のレコード３１−４は、同様のイーサネット（登録商標）を用いるが、ＭＱＴＴプロトコルを用いる例である。すなわち、プロトコルとして「MQTT」を用い、ＭＱＴＴブローカのＵＲＬを指定し、「Push」型でのデータ入力を監視する「MQTT_Sub_M1」クラスのハンドラを用いることで、指定のトピック名を用いた通信により、「%V005%」、すなわち「V005」という変数名を新たに「$EEE」すなわち「EEE」というセンサデータ識別子でのセンサデータ値を取り込むことを示している。
【００６７】
一方で、識別子が「ResultOut」のレコード３１−５は、通信部１７を用いたネットワーク通信を行い、「O」すなわち結果の出力を行うための設定の例である。ここでは、イーサネット（登録商標）通信デバイス「ETH0」でのＳＳＬ通信を用いたＭＱＴＴプロトコルを用いて、ＭＱＴＴブローカに対して特定のトピック名を用いてパケットを送付することで異常診断の結果を出力する。なお、この例では異常診断の結果は、「src」パラメタとして指定する結果出力が所定のファイルに蓄えられており、このファイルを用いてトピックデータを生成して送付することが示されている。
【００６８】
また、出力として異常診断装置が具備する表示部１９の１つであるＬＥＤ（発光ダイオード）を点灯させることも可能である。その例として、識別子が「Alert0」のレコード３１−６では、結果出力の所定のファイル中の「%PRED_RES%」すなわち結果データの識別子「PRED_RES」の値が「0.8」以上となった条件で「LED1」を点灯することが示されている。
【００６９】
演算モジュールクラス定義テーブル３２は、複数種類の演算モジュールクラスの定義を管理するために利用されるテーブルであり、本異常診断装置２の開発者等により予め作成される。
【００７０】
演算モジュールクラス定義テーブル３２は、図５に示すように、演算モジュールクラス名欄３２Ａ、内部変数欄３２Ｂ、初期化動作欄３２Ｃ、終了時動作欄３２Ｄ、逐次処理動作欄３２Ｅ、レジューム入力動作欄３２Ｆおよびレジューム出力動作欄３２Ｇを備えて構成される。なお図において、演算モジュールクラス定義テーブル３２の１つのレコード（行）が１つの演算レジュームクラスに相当する。
【００７１】
そして演算モジュールクラス名欄３２Ａには、対応する演算モジュールクラスの名称（演算モジュールクラス名）が格納され、内部変数欄３２Ｂには、対応する演算モジュールクラスにおける内部データとしての内部変数が格納される。また初期化動作欄３２Ｃ、終了時動作欄３２Ｄ、逐次処理動作欄３２Ｅ、レジューム入力動作欄３２Ｆおよびレジューム出力動作欄３２Ｇには、いわゆるメソッド、あるいは、関数ＡＰＩとして、対応する演算モジュールのオブジェクトを生成する際に処理する動作（初期化動作）、対応するオブジェクトが終了する際の動作（終了動作）、具体的な演算処理の内容（逐次処理動作）、レジュームデータを取得する際の動作（レジューム入力動作）、または、レジュームを出力する際の動作（レジューム出力動作）がそれぞれ格納される。演算モジュールクラスは、オブジェクト指向プログラミング言語でのクラス定義に相当する。ただし、他のプログラミング言語で規定することを否定するものではなく、また、ハードウェアによりそれらの処理動作を実現することを妨げるものではない。
【００７２】
初期化動作としては、オブジェクト毎に用いる入力データ名の列挙、および、出力データ名の列挙を取得してオブジェクト内部変数に設定する処理を行ったり、オブジェクト特有の処理を最初の１度だけ行ったりする動作を規定することができる。なお、図５において、内部変数欄３２Ｂに記載されている丸文字（「丸１」など）は初期化時に渡す引数およびその順序を表しており、初期化動作欄３２Ｃ、終了時動作欄３２Ｄ、逐次処理動作欄３２Ｅ、レジューム入力動作欄３２Ｆおよびレジューム出力動作欄３２Ｇ中の丸かっこ（「(1)」など）は処理の順序を示すとして説明する。
【００７３】
また終了時動作としては、初期化時にファイルを開く動作を行った場合にそのファイルを安全に閉じたり、また、動作に必要なメモリ領域を確保した場合にそれを安全に廃棄したりする動作を規定することができる。さらに逐次処理動作としては、センサデータを取得する毎に演算ルールとして設定した順に呼び出され、それぞれのオブジェクトで行う動作を規定することができる。特に、入力データ名を用いて入力となるデータを取得したり、入力データを用いた特有の演算や処理を行ったり、演算や処理の結果を、出力データ名を用いて新規追加あるいは更新を行ったりすることができる。
【００７４】
一方、演算ルールテーブル３３は、異常診断を行うために実行すべき演算の順序（正確にはその演算を行う演算モジュールオブジェクトの逐次処理動作の実行順序）と、演算モジュールクラス定義テーブル３２（図５）で定義されているこれら演算モジュールクラスから生成する演算モジュールオブジェクトの内部変数を与えるための値とをそれぞれ規定したテーブルであり、本異常診断装置２が実行すべき異常診断処理の内容に応じて予め作成される。この演算ルールテーブル３３は、図６に示すように、順序欄３３Ａ、モジュールＩＤ欄３３Ｂおよび演算モジュールクラス欄３３Ｃと、複数の引数欄３３Ｄ〜３３Ｈとを備えて構成される。演算ルールテーブル３３では、１つのレコードが１つの演算モジュールオブジェクトに対応する。
【００７５】
そして演算モジュールクラス欄３３Ｃには、生成する演算モジュールオブジェクトが属する演算モジュールクラスがそれぞれ格納され、順序欄３３Ａには、対応する演算モジュールオブジェクトの実行順位が格納され、モジュールＩＤ欄３３Ｂには、その演算モジュールオブジェクトに付与された識別子（モジュールＩＤ）が格納される。また各引数欄３３Ｄ〜３３Ｈには、演算モジュールクラス定義テーブル３２で定義されている対応する演算モジュールクラスの内部変数を与えるための値が格納される。なお、順序に関してはテーブルの最上段から下に向かい順序付けることが分かっている場合にはテーブル内の要素としてなくてもよいし、また、引数は各演算モジュールクラスの定義に従った順序および個数を規定するが可変長であってもよいし、各々の対応するパラメタ名と共に規定することで順不同であってもよい。
【００７６】
図６の例では、１番目のレコード３３−１では、「IN_P1」との識別子で演算モジュールクラス（図５）のうち「LOAD_CSV」クラス（図５のレコード３２−１）の演算モジュールオブジェクトを生成すべきことが規定されており、その演算処理に用いるパラメタとして指定のＣＳＶファイルを入力すべきことが規定されている。なお、このＣＳＶファイルは図４の入出力テーブル３１の識別子が「Peripheral1」のレコード３１−３の情報を用いてデータ生成部３のいずれかからイーサネット（登録商標）通信を用いて取得したデータであり、「CCC」というデータ識別子が含まれていることは既に説明した。
【００７７】
また２番目のレコード３３−２では、識別子が「MinC」で「MOV_MIN」クラス（図５のレコード３２−２）であり、入力データの識別子を上述の「CCC」、バッファサイズを「5」とし、出力データの識別子として「minCCC」を用いるべきことが規定されている。同様に、３番目のレコード３３−３では、識別子が「AveC」で「MOV_AVE」クラス（図５のレコード３２−６）であり、識別子が「minCCC」のデータを入力し、識別子が「aveCCC」のデータを出力すべきことが規定されている。
【００７８】
４番目のレコード３３−４では、識別子が「DiffC」で「DIFF」クラス（図５のレコード３２−２）であり、識別子が「CCC」のデータおよび識別子が「aveCCC」のデータを入力データとして識別子が「diffCCC」のデータを出力すべきことが規定されている。また５番目のレコード３３−５では、識別子が「ThC」で「THRESHOLD」クラス（図５のレコード３２−４）であり、識別子が「diffCCC」のデータを入力として、定数値「θ」を指定し、識別子が「thCCC」のデータを出力すべきことが規定されている。
【００７９】
また６番目のレコード３３−６では、識別子が「TrendC」で「MOV_LEAST_SQ_2」クラス（図５のレコード３２−７）であり、識別子が「CCC」のデータを入力とし、バッファサイズを「30」として、出力する３つのデータの識別子をそれぞれ「a」、「b」、「c」とすべきことが規定され、７番目のレコード３３−７では、識別子が「SubEqC」で「SUB_STATIC」クラス（図５のレコード３３−７）であり、識別子が「c」のデータを入力データとし、定数を「λ」として、識別子が「d」のテータを出力すべきことが規定されている。
【００８０】
さらに８番目のレコード３３−８では、識別子が「PredDeg」で「SOLVE_EQ_2」クラス（図５のレコード３２−８）であり、３つの入力データの識別子をそれぞれ「a」、「b」、「d」とし、「T」を識別子とするデータを出力すべきことが規定され、９番目のレコード３３−９では、識別子が「OUT_R」で、「OUT_CSV」クラス（図５のレコード３２−９）であり、出力ＣＳＶファイル名を指定し、出力するデータの識別子を「TIME_STAMP」、「CCC」、「thCCC」、「T」の４つとすべきことが規定されている。
【００８１】
他方、現在データテーブル３４は、一単位の演算処理オブジェクト実行のタイミングと、演算処理部１３が実行した各演算モジュールオブジェクトの実行結果とを、キーと値を組としたマップとして現在データ管理部１４が管理するために利用するテーブルであり、図７に示すように、キー欄３４Ａおよび値欄３４Ｂを備えて構成される。
【００８２】
そしてキー欄３４Ａには、一単位分の異常診断処理を開始するタイミングで時計部２１（図２）から取得した現在時刻（「TIME_STAMP」）や、各演算モジュールオブジェクトの出力データの識別子がキーとしてそれぞれ格納される。また、値欄３４Ｂには、キーが現在時刻（「TIME_STAMP」）の場合には、上述のように時計部２１から取得した現在時刻が格納され、キーが識別子の場合には、そのキーを識別子とするいずれかの演算モジュールオブジェクトの出力データの値が格納される。
【００８３】
なお、現在データテーブル３４に対して、データの新規追加を行った演算モジュールオブジェクトの識別子を各現在データと共に記録しておき、その演算モジュールオブジェクト以外の演算モジュールオブジェクトがその現在データを更新できないようにしてもよい。また、このようなデータの更新、読み取り、削除などのアクセス権を演算モジュールモジュールオブジェクトやそれ以外の異常管理／可視化装置（図１の５）および装置管理サーバ（図５の６）の単位およびそれぞれのユーザなどへの利用権限の情報を付与して管理、制限してもよい。
【００８４】
レジュームデータテーブル３５は、演算処理部１３が実行した各演算モジュールオブジェクトのレジュームデータをレジュームデータ管理部１５が管理するために利用するテーブルであり、図８に示すように、モジュールＩＤ欄３５Ａおよびレジュームデータ欄３５Ｂを備えて構成される。
【００８５】
そしてモジュールＩＤ欄３５Ａには、演算処理部１３が実行する各演算モジュールオブジェクトがそれぞれ格納され、レジュームデータ欄３５Ｂには、対応する演算モジュールオブジェクトが出力したレジュームデータがすべて格納される。
【００８６】
なお、設定テーブル３０、入出力テーブル３１、演算ルールテーブル３３、演算モジュールクラス定義テーブル３２、現在データテーブル３４、および、レジュームデータテーブル３５は、いずれも異常診断装置２内に設けられたメモリまたは図示しない記憶領域等に格納されて保持される。ただし、設定テーブル３０、入出力テーブル３１および演算ルールテーブル３３を制御部１０内に設けられたメモリまたは図示しない記憶領域に格納し、演算モジュールクラス定義テーブル３２を演算モジュール管理部１２内に設けられたメモリまたは図示しない記憶領域に格納し、現在データテーブル３４を現在データ管理部１４内に設けられたメモリまたは図示しない記憶領域に格納し、レジュームデータテーブル３５をレジュームデータ管理部１５内に設けられた図示しないメモリまたは記憶領域に格納して管理するようにしてもよい。
【００８７】
（１−３）表示部による操作画面の表示例および操作部の構成例
図９〜図１１は、表示部１９による操作画面の表示例および操作部２０の構成例を示す。この例において、表示部１９は、ＬＣＤ（液晶ディスプレイ）４０と、第１および第２のＬＥＤ４１Ａ，４１Ｂとを備えて構成されており、第１のＬＥＤ４１Ａにより電源状態、第２のＬＥＤ４１Ｂによりアラート状態をそれぞれ表示するものとする。
【００８８】
ＬＣＤ４０には、異常診断装置２の状態や診断中の装置情報などを表示可能とし、表示内容のモードを表す文字列４２や、装置プロパティを表す文字列４３、動作状態を表す文字列４４、データ入力の有無を表す第１の状態表示マーク４５Ａ、診断状態を表す第２の状態表示マーク４５Ｂ、異常診断／可視化装置５（図１）や装置管理サーバ６（図１）との接続状態を表す第２の状態表示マーク４５Ｃ、現在のモードや装置状態において操作可能な候補を表す文字列が表示される第１〜第４の操作候補マーク４６Ａ〜４６Ｄなどが表示される。
【００８９】
また操作部２０は、４つの物理的な第１〜第４の操作ボタン４７Ａ〜４７Ｄで構成される。この第１〜第４の操作ボタン４７Ａ〜４７Ｄは、それぞれＬＣＤ４０内の第１〜第４の操作候補マーク４６Ａ〜４６Ｄにそれぞれ対応する位置に配置されており、作業者３９（図１）がＬＣＤ４０に表示された操作可能な操作候補のうちの所望する操作候補に対応する第１〜第４の操作ボタン４７Ａ〜４７Ｄを１つ押圧することにより、その第１〜第４の操作ボタン４７Ａ〜４７Ｄに対応する操作を選択することができる。
【００９０】
図９は、異常診断処理の実行前のＬＣＤ４０の表示例を示すものであり、装置状態を表す文字列４４として、異常診断開始の指示待ちの状態であることを表す「Ready to start」という文字列が表示され、第１〜第４の操作候補マーク４６Ａ〜４６Ｄのうち、第１の操作候補マーク４６Ａに異常診断処理の開始を表す「Start」という文字列が表示され、診断状態を表す第２の状態表示マーク４５Ｂがオフ状態（異常診断処理を実行していない状態）を表す表示状態となっている。
【００９１】
一方、図１０は、異常診断処理の実行中のＬＣＤ４０の表示例を示すものであり、装置状態を表す文字列４４が異常診断処理を実行中であることを表す「Running…」に変化しており、第１の操作候補マーク４６Ａに表示されていた「Start」という文字列が非表示となり代わりに、第２の操作候補マーク４６Ｂに異常診断処理の停止を表す「Stop」という文字列が表示され、診断状態を表す第２の状態表示マーク４５Ｂがオン状態（異常診断処理を実行中の状態）を表す表示状態となっている。
【００９２】
（１−４）異常診断装置において実行される各種処理
次に、本異常診断装置２において実行される異常診断処理の具体的な処理の流れについて説明する。
【００９３】
（１−４−１）異常診断処理
図１２は、制御部１０により実行される異常診断処理の処理手順を示す。制御部１０は、異常診断装置２の電源が投入されるとこの異常診断処理を開始するとして説明する。まず、異常診断装置２の診断に関係する各種動作設定を行うため、設定テーブル３０および入出力テーブル３１を取得し、各動作パラメタを規定する（Ｓ１）。また制御部１０は、データ取得部１１、結果出力部１６および通信部１７に対して、必要なパラメタを用いて設定を行う（Ｓ２）。以上により、初期化や設定、演算の準備が終了する。
【００９４】
続いて、制御部１０は、演算モジュール管理部１２に対して、異常診断のために必要なすべての演算モジュールオブジェクトを生成するよう指示（以下、これを演算モジュール生成処理実行指示と呼ぶ）を与える（Ｓ３）。かくして、演算モジュール管理部１２は、この演算モジュール生成処理実行指示が与えられると、図１４について後述するように、演算モジュールクラス定義テーブル３２および演算ルールテーブル３３を参照しながら、異常診断に必要な各演算モジュールオブジェクトをそれぞれ生成する。
【００９５】
また制御部１０は、レジュームデータ管理部１５に対して、演算処理部１３が実行する各演算モジュールオブジェクトのレジュームデータが存在する場合（例えば、前回の異常診断処理が途中で中止された場合）に、そのレジュームデータを対応する演算モジュールオブジェクトに設定するよう指示（以下、これをレジュームデータ入力処理実行指示と呼ぶ）を与える（Ｓ４）。かくして、レジュームデータ管理部１５は、このレジュームデータ入力処理実行指示が与えられると、図１６について後述するように、レジュームデータテーブル３５にレジュームデータが保存されている演算モジュールオブジェクトの当該レジュームデータを読み出して演算処理部１３に出力することで、各演算モジュールオブジェクトがこれを取得して前回中止された時点での内部変数や内部状態を復元する。
【００９６】
次いで、制御部１０は、それまでにユーザの操作に応じた操作指示が操作部から与えられている場合にはその操作指示を取得し（Ｓ５）、現在、異常診断を実行中であり、かつステップＳ５で取得した操作指示が異常診断を停止すべき旨の指示であった（つまり図１０の状態で、「Stop」という文字列が表示された第２の操作候補マーク４６Ｂに対応する操作部２０の第２の操作ボタン４７Ｂが押圧された）か否かを判断する（Ｓ６）。
【００９７】
また制御部１０は、ステップＳ６の判断で否定結果を得ると、現在、異常診断を停止中であり、かつステップＳ５で取得した操作指示が異常診断を開始すべき旨の指示であった（つまり図９の状態で「Start」という文字列が表示された第１の操作候補マーク４６Ａに対応する操作部２０の第１の操作ボタン４７Ａが押圧された）か否かを判断する（Ｓ７）。
【００９８】
そして制御部１０は、この判断で否定結果を得るとステップＳ５に戻り、この後、ステップＳ６またはステップＳ７で肯定結果を得るまで、ステップＳ５〜ステップＳ７の処理を繰り返す。従って、制御部１０は、この間、異常診断を実行中にその停止指示が入力され、または、異常診断を停止中にその実行指示が入力されるのを待ち受けている状態となる。
【００９９】
やがて、図９の状態で操作部２０の第１の操作ボタン４７Ａが押圧されると（Ｓ７：ＹＥＳ）、制御部１０は、時計部２１から現在時刻を取得する（Ｓ８）。また制御部１０は、設定テーブル３０から異常診断の実行周期（ターゲット欄３０Ａに「ANALYTICS_EXEC」が格納されているレコードのパラメタ欄３０Ｂに格納されている「INTERVAL」の値であり、図３では「1000」ミリ秒）を取得し、前回の異常診断を終了してから上記実行周期の時間が経過したか否かを判断する（Ｓ９）。
【０１００】
制御部１０は、この判断で否定結果を得るとステップＳ５に戻り、この後、ステップＳ６またはステップＳ９のいずれかにおいて肯定結果を得るまでステップＳ５〜ステップＳ９の処理を繰り返す。
【０１０１】
そして制御部１０は、やがて前回の異常診断を終了してから上記実行周期の時間が経過することによりステップＳ９で肯定結果を得ると、データ取得部１１からそれぞれの最新の入力データを取得する（Ｓ１０）。
【０１０２】
なお、入力データのデータフォーマット例を図１３に示す。データ生成部３より入力されるデータは、設定テーブル３０によって指定された入出力テーブル３１（図３のレコード３０−４を参照）に従いデータ取得部１１１〜１０３を設定することで指定されるデータ取得方法によりデータを入力する。例えば、図４の入出力テーブル３１において識別子「Peripheral1」のレコード３１−３で指定するデータ生成部３から、上述のように「CCC」というデータ識別子により選定したデータ部分を入力することとなり、データ取得部１１内では最新の値、図１３の例では「0.963」として更新する。この際、時計部２１（図２）から現在時刻を取得して名称「TIME_STAMP」と共にその時刻を記録してもよい（図１３参照）。このようにある瞬間での「CCC」の値をセンサデータとして取得する。その他のデータ取得部１１も同様にデータを取得する。
【０１０３】
続いて、制御部１０は、演算処理部１３に対して、演算モジュール管理部１２が生成した各演算モジュールオブジェクトを逐次実行するモジュール逐次動作処理を実行すべき旨の指示（以下、これをモジュール逐次動作処理実行指示と呼ぶ）を与える（Ｓ１１）。これにより演算処理部１３においてかかるモジュール逐次動作処理が実行される。
【０１０４】
そして制御部１０は、演算処理部１３がモジュール逐次動作処理を終了すると、結果出力部１６に対して、当該モジュール逐次動作処理により得られた異常診断の処理結果を出力すべき旨の指示（以下、これを結果出力処理実行指示と呼ぶ）を与える（Ｓ１２）。そして制御部１０は、この後、ステップＳ５に戻り、ステップＳ５以降を繰り返す。
【０１０５】
一方、制御部１０は、上述のような異常診断の実行中に、図１０の「Stop」という文字列が表示された第２の操作候補マーク４６Ｂに対応する操作部２０の第２の操作ボタン４７Ｂが押圧されることによりステップＳ６で肯定結果を得ると、レジュームデータ管理部１５に対して、それまで演算処理部１３において実行されていた各演算モジュールオブジェクトが保持するそれまでの演算結果をレジュームデータとして取得するレジューム出力処理を実行すべき旨の指示（以下、これをレジューム出力処理実行指示と呼ぶ）を与える（Ｓ１３）。
【０１０６】
続いて、制御部１０は、演算モジュール管理部１２に対して、それまで演算処理部１３が実行していたすべての演算モジュールオブジェクトの実行を終了するための処理であるモジュール終了動作処理を実行するよう指示（以下、これをモジュール終了動作実行指示と呼ぶ）を与える（Ｓ１４）。
【０１０７】
次いで、制御部１０は、データ取得部１１での通信の適切な終了、通信部１７で生成した通信路の適切な終了、その他、利用したすべてのメモリを廃棄するなどの終了処理を実行し（Ｓ１５）、この後、この異常診断処理を正常終了する。
【０１０８】
（１−４−２）演算モジュール生成処理
図１４は、図１２について上述した異常診断処理のステップＳ３において、制御部１０から上述の演算モジュール生成処理実行指示が与えられた演算モジュール管理部１２により実行される演算モジュール生成処理の具体的な処理内容を示す。
【０１０９】
演算モジュール管理部１２は、制御部１０からかかる演算モジュール生成処理実行指示が与えられると、この図１４に示す演算モジュール生成処理を開始し、まず、演算モジュールクラス定義テーブル３２を取得する（Ｓ２０）。
【０１１０】
続いて、演算モジュール管理部１２は、以下の処理で利用する図１５に示す演算モジュールオブジェクトリスト５０を初期化する（Ｓ２１）。
【０１１１】
この演算モジュールオブジェクトリスト５０は、演算処理部１３が演算ルールテーブル３３で規定された演算順序に基づいて演算モジュールオブジェクトを順番に実行するために利用するリストであり、順序欄５０Ａ、モジュールＩＤ欄５０Ｂおよび演算モジュールオブジェクト欄５０Ｃを備えて構成される。そして、演算モジュールオブジェクト欄５０Ｃには、ステップＳ２２以降の処理により演算モジュール管理部１２により順次生成される演算ルールテーブル３３で規定された各演算モジュールオブジェクトの実体がそれぞれ格納され、モジュールＩＤ欄５０Ｂには、対応する演算モジュールオブジェクトの識別子（モジュールＩＤ）が格納される。また順序欄５０Ａには、演算ルールテーブル３３で規定された対応する演算モジュールオブジェクトを実行すべき順序が格納される。なお、順序に関してはテーブルの最上段から下に順序付けることが分かっている場合には順序欄５０Ａを設けなくてもよい。
【０１１２】
次いで、演算モジュール管理部１２は、演算ルールテーブル３３のファイルを取得する（Ｓ２２）。具体的に、演算モジュール管理部１２は、設定テーブル３０（図３）におけるターゲット欄３０Ａに「ANALYTICS_RULE」が格納されたレコード３０−５のパラメタ欄３０Ｂを参照して、演算ルールテーブル３３のファイルへのファイルパスと、そのファイルのファイル名とを取得し、取得したファイルパスの先に存在する演算ルールテーブル３３のファイルを取得する。
【０１１３】
この後、演算モジュール管理部１２は、ステップＳ２２で取得した演算ルールテーブル３３のファイルを開き（Ｓ２３）、演算ルールテーブル３３のレコード３３−１〜３３−９のうち、順序欄３３Ａに格納されている順序が最も早く、かつ未処理のレコード３３−１〜３３−９の情報を読み込む（Ｓ２４）。また演算モジュール管理部１２は、読み込んだ情報がファイルの終端を示す終了コードであるか否かを判断する（Ｓ２５）。
【０１１４】
演算モジュール管理部１２は、この判断で否定結果を得ると、そのレコード３３−１〜３３−９の情報を列要素毎の情報に分解する（Ｓ２６）。また演算モジュール管理部１２は、この分解により得られたそのレコード３３−１〜３３−９の演算モジュールクラス欄３３Ｃに格納されていた演算モジュールクラス名が演算モジュールクラス定義テーブル３２（図５）のいずれかのレコード３２−１〜３２−９の演算モジュールクラス名欄３２Ａ（図５）内に格納されているか否かを判断する（Ｓ２７）。そして演算モジュール管理部１２は、この判断で否定結果を得ると、所定のエラー処理を実行し、この後、この演算モジュール生成処理を終了する。
【０１１５】
これに対して、演算モジュール管理部１２は、ステップＳ２７の判断で肯定結果を得ると、ステップＳ２４で読み込んだ情報に基づいて、そのレコード３３−１〜３３−９に対応する演算モジュールオブジェクトを生成する（Ｓ２８）。
【０１１６】
また演算モジュール管理部１２は、生成した演算モジュールオブジェクトについて、その演算モジュールオブジェクトの他の行要素をパラメタ引数として、演算モジュールクラス定義テーブル３２を参照して、その演算モジュールオブジェクトの初期化動作を実行する（Ｓ２９）。
【０１１７】
そして演算モジュール管理部１２は、この初期化動作に成功したか否か（対応する演算モジュールオブジェクトを正しく生成できたか否か）を判断し（Ｓ３０）、否定結果を得ると所定のエラー処理を実行した後（Ｓ３２）、この演算モジュール生成処理を異常終了する。
【０１１８】
これに対して演算モジュール管理部１２は、ステップＳ３０の判断で肯定結果を得ると、そのとき生成した演算モジュールオブジェクトを演算モジュールオブジェクトリストに登録し（Ｓ３１）、この後、ステップＳ２４に戻る。そして演算モジュール管理部１２は、この後、ステップＳ２４以降を繰り返す。この繰返し処理により、演算ルールテーブル３３に規定された各演算モジュールオブジェクトが順次生成されることになる。
【０１１９】
そして演算モジュール管理部１２は、やがて演算ルールテーブル３３に規定されたすべての演算モジュールオブジェクトを生成し終えることによりステップＳ２５で肯定結果を得ると、この演算モジュール生成処理を正常終了する。
【０１２０】
（１−４−３）レジューム入力処理
図１６は、図１２について上述した異常診断処理のステップＳ４において、制御部１０から上述のレジューム入力処理実行指示が与えられたレジュームデータ管理部１５により実行されるレジューム入力処理の具体的な処理内容を示す。
【０１２１】
レジュームデータ管理部１５は、かかるレジューム入力処理実行指示が制御部１０から与えられると、この図１６に示すレジューム入力処理を開始し、まず、レジュームデータテーブル３５（図８）を取得する（Ｓ４０）。またレジュームデータ管理部１５は、図１４について上述した演算モジュール生成処理において演算モジュール管理部１２が生成した上述の演算モジュールオブジェクトリスト５０（図１５）を、演算処理部１３を介して取得する（Ｓ４１）。
【０１２２】
続いて、レジュームデータ管理部１５は、ステップＳ４１で取得した演算モジュールオブジェクトリスト５０に登録されている各演算モジュールオブジェクトの中から、ステップＳ４４以降の処理が未処理でかつ、演算モジュールオブジェクトリスト５０の順序欄５０Ａに格納された順序が最も小さい演算モジュールオブジェクトのモジュールＩＤを１つ取得する（Ｓ４２）。
【０１２３】
次いで、レジュームデータ管理部１５は、ステップＳ４２でモジュールＩＤを取得できなかったか否か（つまり演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトに対してステップＳ４４以降の処理を実行し終えたか否か）を判断する（Ｓ４３）。
【０１２４】
レジュームデータ管理部１５は、この判断で否定結果を得ると、ステップＳ４０で取得したレジュームデータテーブル３５の各レコード３５−１〜３５−３（図８）の中に、ステップＳ４２で取得したモジュールＩＤと同一のモジュールＩＤがモジュールＩＤ欄３５Ａに格納されたレコードが存在するか否かを判断する（Ｓ４４）。そしてレジュームデータ管理部１５は、この判断で否定結果を得るとステップＳ４２に戻る。
【０１２５】
これに対して、レジュームデータ管理部１５は、ステップＳ４４の判断で肯定結果を得ると、レジュームデータテーブル３５のレコード３５−１〜３５−３のうち、ステップＳ４２で取得したモジュールＩＤと同一のモジュールＩＤがモジュールＩＤ欄３５Ａに格納されたレコード３５−１〜３５−３のレジュームデータ欄３５Ｂに格納されているレジュームデータを取得し、取得したレジュームデータに基づいて、演算モジュールクラス定義テーブル３２（図５）においてその演算モジュールオブジェクトについて定義されているレジューム入力動作（図５の対応するレジューム入力動作欄３２Ｆに格納されている動作）を実行する（Ｓ４５）。
【０１２６】
そしてレジュームデータ管理部１５は、ステップＳ４５のレジューム入力動作が成功したか否かを判断し（Ｓ４６）、否定結果を得ると所定のエラー処理を実行した後（Ｓ４７）、このレジューム入力処理を異常終了する。
【０１２７】
これに対して、レジュームデータ管理部１５は、ステップＳ４６において肯定結果を得ると、ステップＳ４２に戻り、この後、ステップＳ４２で取得するモジュールＩＤを順次他のモジュールＩＤに切り替えながら、ステップＳ４２以降の処理を繰り返し実行する。
【０１２８】
そしてレジュームデータ管理部１５は、やがて演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトについてステップＳ４２以降の処理を実行し終えることによりステップＳ４３で肯定結果を得ると、このレジューム入力処理を正常終了する。
【０１２９】
なお、演算モジュールクラスにレジューム入力動作が規定されていない場合には、このレジューム入力処理を省略してもよい。
【０１３０】
（１−４−４）モジュール逐次動作処理
図１７は、図１２について上述した異常診断処理のステップＳ１１において、制御部１０から上述のモジュール逐次動作処理実行指示が与えられた演算処理部１３により実行されるモジュール逐次動作処理の具体的な処理内容を示す。
【０１３１】
演算処理部１３は、制御部１０からかかるモジュール逐次動作処理実行指示が与えられると、この図１７に示すモジュール逐次動作処理を開始し、まず、図１５について上述した演算モジュールオブジェクトリスト５０を演算モジュール管理部１２から取得する（Ｓ５０）。
【０１３２】
続いて、演算処理部１３は、取得した演算モジュールオブジェクトリスト５０に登録されている演算モジュールオブジェクトの中から、対応する順序欄５０Ａに格納された順序が最も小さく、かつ後述するステップＳ５３の処理を実行していない演算モジュールオブジェクトを１つ取得する（Ｓ５１）。
【０１３３】
次いで、演算処理部１３は、ステップＳ５１で演算モジュールオブジェクトを取得できなかったか否か（つまり演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトに対してステップＳ５３の処理を実行し終えたか否か）を判断する（Ｓ５２）。
【０１３４】
そして演算処理部１３は、この判断で否定結果を得ると、ステップＳ５１で取得した演算モジュールオブジェクトに関するクラス定義の逐次処理動作を行う逐次処理動作処理を実行する（Ｓ５３）。
【０１３５】
続いて、演算処理部１３は、ステップＳ５３の逐次処理動作処理が成功したか否かを判断する（Ｓ５４）。そして演算処理部１３は、この判断で否定結果を得ると、所定のエラー処理を実行した後（Ｓ５５）、このモジュール逐次動作処理を異常終了する。
【０１３６】
これに対して演算処理部１３は、ステップＳ５４の判断で肯定結果を得ると、ステップＳ５１に戻り、この後、ステップＳ５１において選択する演算モジュールオブジェクトを、演算モジュールオブジェクトリスト５０の対応する順序欄５０Ａに格納された順序が最も小さく、かつステップＳ５３の処理を実行していない他の演算モジュールオブジェクトに順次切り替えながらステップＳ５１〜ステップＳ５４の処理を繰り返す。これにより演算モジュールオブジェクトリスト５０に登録された各演算モジュールオブジェクトがその実行順序通りに順次実行されていくことになる。
【０１３７】
そして演算処理部１３は、やがて演算モジュールオブジェクトリスト５０に登録されたすべての演算モジュールオブジェクトを実行し終えることによりステップＳ５２で肯定結果を得ると、このモジュール逐次動作処理を正常終了する。
【０１３８】
ここで、上述のモジュール逐次動作処理のステップＳ５３で実行される逐次処理動作処理の具体的な処理内容を図１８に示す。ここでは、演算モジュールオブジェクトリスト５０（図１５）に登録されたモジュールＩＤが「AveC」である演算モジュールオブジェクトの逐次処理動作について説明する。
【０１３９】
なお演算モジュールクラス定義テーブル３２（図５）を参照すると、モジュールＩＤが「AveC」の演算モジュールオブジェクトは「MOV_AVE」、すなわち移動平均処理（Moving Average）クラスの演算モジュールオブジェクトであることが分かる。ここでは、かかる移動平均処理として単純移動平均処理を行うこととし、直近の10個のデータの相加平均を求めるものとして説明する。
【０１４０】
演算処理部１３は、モジュール逐次動作処理のステップＳ５３に進むと、この図１８に示す逐次処理動作処理を開始し、まず、現在データ管理部１４が管理する現在データテーブル３４（図７）上で、初期化動作処理時に規定した入力データの識別子をキーにして当該入力データを検索する（Ｓ６０）。
【０１４１】
続いて、演算処理部１３は、かかるキーに対応する入力データが現在データテーブル３４上に存在するか否かを判断する（Ｓ６１）。そして演算処理部１３は、この判断で否定結果を得ると、この逐次処理動作処理を異常終了する。従って、この場合には、この逐次処理動作が失敗したことになる。ただし、入力データが存在しない場合には今回の逐次処理動作を意図的にスキップしたとして、成功としてもよい。
【０１４２】
これに対して、演算処理部１３は、ステップＳ６１の判断で肯定結果を得ると、ステップＳ６０の検索により検出した入力データの値を現在時刻における入力データの値として取得し（Ｓ６２）、この演算モジュールオブジェクトが持つリングバッファの一番古いデータを削除した後、取得した入力データを登録する（Ｓ６３）。また演算処理部１３は、このリングバッファに格納されているこれまでの入力データを用いて単純相加平均の値を計算する（Ｓ６４）。
【０１４３】
具体的に、演算処理部１３は、図１９に示すように、データのバッファ数を１０として平均を求めるとする。時刻tにおいて時刻（t-9）から時刻tまでの時刻にそれぞれの値があったとすると、サイズ（データ個数）が「10」で合計が「9.4」となるから平均は「0.94」となる。そして、次の時刻（t+1）にデータを取得すると、最も古い時刻（t-9）を捨てて新たに時刻（t+1）の値をバッファに追加して計算する。すなわち、サイズ「10」のまま合計が「10.00」、平均が「1.00」となる。よって、この「MOV_AVE」クラスの演算は、時刻tでは「9.40」を、次の時刻（t+1）では「10.00」を演算結果として出力する。なお、このときのバッファは、リスト構造やベクトル、リングバッファとして構成してもよい。また、レジューム入力動作処理（図５のレジューム入力動作欄３２Ｆを参照）では、レジュームデータ管理部１５が管理しているレジュームデータテーブル３５（図８）から前回のレジューム出力動作処理（図５のレジューム出力動作欄３２Ｇを参照）で記録した前回の動作終了時のリングバッファや最後のバッファ位置を復元する。
【０１４４】
続いて、演算処理部１３は、初期化動作処理（図５の初期化動作欄３２Ｃを参照）時に規定した出力データの識別子をキーとして、そのキーを現在データテーブル３４上で検索する（Ｓ６５）。また演算処理部１３は、この検索によりかかるキーを検出できたか否か（そのキーが現在データテーブル３４上に存在するか否か）を判断する（Ｓ６６）。
【０１４５】
このステップＳ６６の判断で否定結果を得ることは、図１７について上述したモジュール逐次動作処理を開始してからその演算モジュールオブジェクトを初めて実行したことを意味する。かくして、このとき演算処理部１３は、そのキー（出力データの識別子）と対応付けて、ステップＳ６４の処理により得られた値を現在データテーブル３４に新規に登録し（Ｓ６７）、この後、この逐次処理動作処理を正常終了して図１７のモジュール逐次動作処理に戻る。
【０１４６】
これに対して、ステップＳ６６の判断で肯定結果を得ることは、モジュール逐次動作処理を開始してからその演算モジュールオブジェクトを少なくとも１回は実行している（つまり逐次処理動作を繰り返している）ことを意味する。かくして、このとき演算処理部１３は、現在データテーブル３４におけるそのキーに対応する値欄３４Ｂに格納されている値を、そのときのステップＳ６４の処理により得られた値に更新し（Ｓ６８）、この後、この逐次処理動作処理を正常終了して図１７のモジュール逐次動作処理に戻る。
【０１４７】
このように、演算モジュールクラスの逐次処理動作は、新たに０個以上のデータを入力として、それに関する演算を行い、０個以上の演算結果データを出力する動作である。例えば、指定する名称のＣＳＶファイルやデータベースのテーブル、その他特定の形式のファイル読み込みながら、レコード（行）ごとにカラム名をキーとしてその値を逐次登録する入力系モジュール、および、その逆に、それぞれの形式でファイル等に出力する出力系モジュールが考えられる。また、入力データを指定して特定の値の範囲を取る際に、データを登録するか否かを条件づける、あるいは、他の入力データとの入れ替えや２つ以上の入力データを選択して登録する、文字列の数値化や数値の文字変換、行と列の変換などのデータフィルタ系モジュールでもよい。また、入力データの絶対値・対数・逆数、一定期間前のデータの遅延出力などの単項演算系モジュール、区間窓を移動しながらの累積値、平均・分散・共分散・最大／最小・メディアン、別途入力データとする平均と分散の値を用いた正規化とその逆の計算、漸化式、最小二乗法を用いた多項式係数近似、などの値を求める統計処理系モジュール、入力データに対して定数や他の入力データを用いた四則演算や、行列演算、特定の多項式などの数式演算などの計算系モジュールであってもよい。また、１つ以上の入力データに関する、機械学習などの物理・統計モデルを用いたモデルでの学習系モジュールや、その学習結果を用いたクラス分類、閾値などの条件に基づく判断により１つ以上の結果を出力するなどの識別系モジュールであってもよい。さらに、論理積・論理和、論理否定などの論理演算系モジュールや、高速フーリエ変換・ケプストラム変換などの時系列データと特定特徴空間データの間を変換する変換系モジュールであってもよい。
【０１４８】
また、各演算モジュールクラスでは、リングバッファなどのバッファを用意して過去のデータや計算の途中の値を保持するように構成してもよいし、一般化・共通化に応じて現在データ管理部にてこれらバッファを管理してもよい。その他にも、１つ以上の入力データを１つ以上の出力データに逐次写像として変換する、あらゆる数値計算モジュールやデータ処理モジュールを用意することができる。ただし、計算コストの高い複雑な演算や機械学習のモデル学習を行う演算モジュールは、一つの診断周期内ですべてのモジュール演算の終了を行う、すなわちリアルタイム処理が完了しなくなる可能性があるため、安価な低リソースの装置での動作には注意が必要である。その場合には、学習系モジュールの処理は予めリソースの豊富な装置等で行い、学習結果のモデルのパラメタを別途ファイルなどを用いて伝達することで、異常診断処理の初期化動作においてこのパラメタによるモデルの再現を行うことで識別系モジュールの動作を実施する、などの処理分担を行うことができる。
【０１４９】
図２０は、図１５の演算モジュールオブジェクトリスト５０に従って演算処理部１３により実行される上述のモジュール逐次動作処理（図１７および図１８）の流れの具体例を示す。
【０１５０】
演算処理部１３は、データが入る毎に、演算モジュールオブジェクトが指定した入力データ（図１３を参照）を用いて逐次演算を行い、結果を出力していく。ここでは、データ生成部３から取得した１種類のデータ「CCC」を、まず１番目の演算モジュールオブジェクトである「LOAD_CSV」クラス（図１５および図６参照）の演算モジュールオブジェクト６０を用いて入力し、現在データ管理部１４を介して現在データテーブル３４に格納させる。ここでは横軸に時刻ｔを置き、取得した現在の入力データ６１の履歴を列挙してグラフ化した例である。
【０１５１】
この取得した識別子「CCC」のデータの値は、２番目の演算モジュールオブジェクトである「MOV_WIN」クラス（図１５および図６参照）の演算モジュールオブジェクト６３の入力となるが、この演算モジュールクラスは内部にメモリ２Ｂ（図１）の一部でなるリングバッファを持っており、その逐次処理動作で最新のデータを入力すると、バッファサイズの最古データを削除してから追加することで現在の値の組６２を保持しており、バッファ内のすべての中から最小の値を識別子が「minCCC」のデータ６４の値として出力する。
【０１５２】
３番目の演算モジュールオブジェクトである「MOV_AVE」クラス（図１５および図６参照）の演算モジュールオブジェクト６６は、識別子が「minCCC」のデータの値を入力としてバッファを更新して現在の値の組６５を更新し、図５に示すように移動平均処理結果の平均値を識別子が「aveCCC」のデータ６７の値として出力する。
【０１５３】
４番目の演算モジュールオブジェクトである「DIFF」クラス（図１５および図６参照）の演算モジュールオブジェクト６８は、識別子が「aveCCC」のデータ６７と、識別子が「CCC」のデータ６１との差分を計算し、計算結果を識別子が「diffCCC」のデータ６９の値として出力する。
【０１５４】
５番目の演算モジュールオブジェクトである「THRESHOLD」クラス（図１５および図６参照）の演算モジュールオブジェクト７１は、入力データとして識別子が「diffCCC」のデータ６４を、閾値である定数値７０（ここでは「θ」）と比較し、データ６４が定数値７０と等しいか、または、大きい場合には「1.0」を、データ６４が定数値７０よりも小さい場合には「0.0」を識別子が「thCCC」のデータ７２として出力する。
【０１５５】
ここまでの処理により、「CCC」という入力データ６１を順に、値の区間最小値を移動平均によりスムージングした値をベースラインにして、それよりも定数値７０（閾値θ）を超えるスパイク状の異常データを検出したこととなる。
【０１５６】
次の６番目の演算モジュールオブジェクトである「MOV_LEAST_SQ_2」クラス（図１５および図６参照）の演算モジュールオブジェクト７３は、識別子が「CCC」のデータ６１の値を、リングバッファで一定区間保持して、そのデータをｙ、その時刻をｔとして最小二乗法などを用いて次式
【数１】
0006571565.tif 000002
で曲線として近似するための係数「a」、「b」および「c」を求め、それぞれを出力する。この係数を用いた式は、識別子が「CCC」のデータ６１の２次曲線による近似曲線を示している。
【０１５７】
７番目の演算モジュールオブジェクトである「SUB_STATIC」クラス（図１５および図６参照）の演算モジュールオブジェクト７７は、識別子が「c」の入力データの値から定数値「λ」を引くことで、識別子が「d」のデータとして出力する。また８番目演算モジュールオブジェクトである「EQ_SOLVER_2」クラス（図１５および図６参照）の演算モジュールオブジェクト７８は（１）式においてy=0となる時刻Tを次式により求める。
【０１５８】
【数２】
0006571565.tif 000003
【０１５９】
ただし、７番目の演算モジュールオブジェクト７７の演算処理により「c」はオフセット値「λ」を引くことで「d」に置き換わっていることに注意する。また、（２）式では、プラスマイナス記号（±）により２つの解を得るが、これらのうちの加算による演算値を識別子が「T」の値７９として出力する。この「T」は先の近似曲線が閾値「λ」と交差する将来の時刻を示すため、今後の「CCC」の値の近似曲線がこの時刻「T」の近傍を超える時刻を示し、この装置または部品が劣化していく状況が時刻「T」で許容範囲を超えるような予測を行ったことになる。
【０１６０】
最後の９番目の演算モジュールオブジェクトである「OUT_CSV」クラス（図１５および図６参照）の演算モジュールオブジェクト８０は、上述のとおり「TIME_STAMP」、「CCC」、「thCCC」、「T」を結果ファイルにＣＳＶ形式で出力する。これは現在データ管理部１４から、それぞれの識別子をキーとして取得できる値をファイルに記載することで実現する。
【０１６１】
図２１は、結果出力部１６（図２）から出力される出力データの構成例を示す。結果出力部１６は入出力テーブル３１（図４）の出力用ブロパティ、すなわちＩ／Ｏ欄３１Ｂに格納された値が「O」であるレコード３１−５（識別子は「ResultOut」）およびレコード３１−６（識別子は「Aleart0」）を評価することで結果を出力する。
【０１６２】
例えば、図６の演算ルールテーブル３３では、演算モジュールクラスが「OUT_CSV」（レコード３３−９を参照）の演算モジュールオブジェクトにより最終的に現在データ管理部１４（図２）が管理する現在データテーブル３４（図７）にあるそれぞれ「TIME_STAMP」、「CCC」、「thCCC」、「T」という識別子のデータの値がＣＳＶ形式のファイルとして出現されているとする。この場合、指定された入出力テーブル３１（図４）の例では、識別子が「ResultOut」（レコード３１−５）に対応する設定によりこのファイルを取得し、通信部１７（図２）からのイーサネット（登録商標）を用いたＳＳＬ通信を用いたＭＱＴＴプロトコルで、指定したＵＲＬのＭＱＴＴブローカに指定したトピック名を用いてパブリッシュ、すなわちデータを送出することで結果を出力する。この場合、異常管理／可視化装置５（図１）がＭＱＴＴブローカにサブスクライブ（購読）しておきこの結果データを取得することで結果伝達が実現できる。
【０１６３】
なお、通信量を削減するために、結果データが前回から変更があった、あるいは、十分小さい数値より大きく変化した場合にのみ送出してもよい。また、異常診断装置２が動作を始めた最初の結果や一定時間経過した際の値は、前回との変化の有無にかかわらず、また変化が小さい場合であっても送出することが望ましい。
【０１６４】
図２２は、異常管理／可視化装置５（図１）における結果データの可視化画面の構成例を示す。異常管理／可視化装置５が結果データを取得すると、これらの結果データを保存したり、グラフ化したりすることができる。図２２の可視化画面９０では、最新の結果データの「TIME_STAMP」の値を表す文字列９１や識別子が「CCC」のデータのデータ値の履歴を表すグラフ９４、識別子が「thCCC」のデータの値が「1.0」となって異常なスパイクが検出された時間帯を可視化するためのフレーム９５Ａ，９５Ｂや異常発生を表す文字列９２，９３、並びに、識別子が「T」のデータの表示による劣化による部品交換時期の目安を表す文字列９６が表示されている。
【０１６５】
ただし、異常管理／可視化装置５が、このような可視化画面を、別途ネットワーク３８（図２）を介して接続された端末（図示せず）に表示させるようにしてもよい。このような端末での可視化画面の表示は、異常管理／可視化装置５が、Ｗｅｂサービスや専用のアプリケーションなどを用いてこの可視化画面の画面表示のためのスクリプトや画像などを生成し、適切な画面生成用情報を端末に送ることで実現することができる。
【０１６６】
また入出力テーブル３１（図４）における識別子が「Alert0」のレコード３１−６において、キー（識別子）が「thCCC」であるデータの値が「0.8」以上の際に、図１１のように表示部１９の第２のＬＥＤ４１Ｂを点灯させるように設定しておくことにより、異常診断処理の処理結果を表示するようにしてもよい。
【０１６７】
（１−４−５）レジューム出力処理
図２３は、図１２について上述した異常診断処理のステップＳ１３において、制御部１０から上述のレジューム出力処理実行指示が与えられたレジュームデータ管理部１５により実行されるレジューム出力処理の具体的な処理内容を示す。
【０１６８】
レジュームデータ管理部１５は、制御部１０からかかるレジューム出力処理実行指示が与えられると、この図２３に示すレジューム出力処理を開始し、まず、レジュームデータテーブル３５（図８）を初期化する（Ｓ７０）。またレジュームデータ管理部１５は、演算モジュールオブジェクトリスト５０（図１５）を、メモリ２Ｂ（図１）の自己に割り当てられた記憶領域から読み出すことにより取得する（Ｓ７１）。
【０１６９】
続いて、レジュームデータ管理部１５は、ステップＳ７１で取得した演算モジュールオブジェクトリスト５０に登録されている各演算モジュールオブジェクトの中から、後述するステップＳ７４の処理が未処理でかつ、演算モジュールオブジェクトリスト５０の順序欄５０Ａに格納された順序が最も小さい演算モジュールオブジェクトを１つ取得する（Ｓ７２）。
【０１７０】
次いで、レジュームデータ管理部１５は、ステップＳ７２で演算モジュールオブジェクトを取得できなかったか否か（つまり演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトに対してステップＳ７４の処理を実行し終えたか否か）を判断する（Ｓ７３）。
【０１７１】
そしてレジュームデータ管理部１５は、この判断で否定結果を得ると、ステップＳ７２で取得した演算モジュールオブジェクトについて演算モジュールクラス定義テーブル３２（図５）において定義されているレジューム出力動作（図５の対応するレジューム出力動作欄３２Ｇに格納されている動作）を実行する（Ｓ７４）。
【０１７２】
続いて、レジュームデータ管理部１５は、ステップＳ７４のレジューム出力動作が成功したか否かを判断する（Ｓ７５）。そしてレジュームデータ管理部１５は、この判断で否定結果を得ると所定のエラー処理を実行した後（Ｓ７６）、ステップＳ７８に進む。
【０１７３】
これに対して、レジュームデータ管理部１５は、ステップＳ７５において肯定結果を得ると、このレジューム出力動作により得られたデータをその演算モジュールオブジェクトの識別子と対応付けて（その識別子をキーにして）レジュームデータテーブル３５（図８）に登録する（Ｓ７７）。
【０１７４】
さらにレジュームデータ管理部１５は、ステップＳ７２に戻り、この後、ステップＳ７２で取得するモジュールＩＤを順次未処理の他のモジュールＩＤに切り替えながら、ステップＳ７２以降の処理を繰り返す。以上の繰返し処理により、演算モジュールオブジェクトリスト５０に登録された各演算モジュールオブジェクトのそのときのレジュームデータが順次レジュームデータテーブル３５に登録されていくことになる。
【０１７５】
そしてレジュームデータ管理部１５は、やがて演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトについて、そのレジュームデータのレジュームデータテーブル３５への登録が終了することによりステップＳ７３で肯定結果を得ると、そのレジュームデータテーブル３５をファイルまたはデータベーステーブルとして保存または更新しデータ永続化を行った後（Ｓ７８）、このレジューム出力処理を正常終了する。
【０１７６】
なお、演算モジュールクラスにレジューム出力動作が規定されていない場合には、このレジューム出力処理を省略してもよい。また、このレジューム出力動作と先のレジューム入力動作は、演算モジュールオブジェクトの内部変数等の前回の値を保存・復元するための動作であるため、その入出力のデータ型や順序を合わせるように注意する必要がある。
【０１７７】
（１−４−６）モジュール終了動作処理
図２４は、図１２について上述した異常診断処理のステップＳ１４において、制御部１０から上述のモジュール終了動作実行指示が与えられた演算モジュール管理部１２により実行されるモジュール終了時動作処理の具体的な処理内容を示す。
【０１７８】
演算モジュール管理部１２は、制御部１０からかかるモジュール終了動作実行指示が与えられると、この図２４に示すモジュール終了動作処理を開始し、まず、自己が保持する演算モジュールオブジェクトリスト５０（図１５）を取得し（Ｓ８０）、取得した演算モジュールオブジェクトリスト５０に登録されている各演算モジュールオブジェクトの中から、ステップＳ８３の処理が未処理でかつ、演算モジュールオブジェクトリスト５０の順序欄５０Ａに格納された順序が最も小さい演算モジュールオブジェクトを１つ取得する（Ｓ８１）。
【０１７９】
次いで、演算モジュール管理部１２は、ステップＳ８１で演算モジュールオブジェクトを取得できなかったか否か（つまり演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトに対して後述するステップＳ８３の処理を実行し終えたか否か）を判断する（Ｓ８２）。
【０１８０】
演算モジュール管理部１２は、この判断で否定結果を得ると、ステップＳ８１で取得した演算モジュールオブジェクトについて演算モジュールクラス定義テーブル３２（図５）で定義されているモジュール終了時動作（図５の対応する終了時動作欄３２Ｄに格納された動作）を実行する（Ｓ８３）。
【０１８１】
続いて、演算モジュール管理部１２は、ステップＳ８３のモジュール終了時動作が成功したか否かを判断する（Ｓ８４）。そして演算モジュール管理部１２は、この判断で否定結果を得ると、所定のエラー処理を実行した後（Ｓ８５）、ステップＳ８１に戻る。
【０１８２】
これに対して、演算モジュール管理部１２は、ステップＳ８４の判断で肯定結果を得ると、そのままステップＳ８１に戻る。そして演算モジュール管理部１２は、この後、ステップＳ８１で取得する演算モジュールオブジェクトを未処理の他の演算モジュールオブジェクトに順次切り替えながらステップＳ８１以降の処理を繰り返し実行する。この繰返し処理により、演算モジュールオブジェクトリスト５０に登録された各演算モジュールオブジェクトに対するモジュール終了時動作が順次行われることになる。
【０１８３】
そして演算モジュール管理部１２は、やがて演算モジュールオブジェクトリスト５０に登録されているすべての演算モジュールオブジェクトに対するモジュール終了時動作を終了することによりステップＳ８２で肯定結果を得ると、演算モジュールオブジェクトリスト５０から演算モジュールオブジェクトをすべて削除するとともに各演算モジュールオブジェクト自体を消滅させた後（Ｓ８６）、このモジュール終了動作処理を正常終了する。
【０１８４】
（１−５）本実施の形態の効果
以上のように本実施の形態の異常診断システム１では、演算モジュールクラス定義テーブル３２（図５）を参照しながら演算ルールテーブル３３（図６）に定義されている各演算を実行するための演算モジュールオブジェクトをそれぞれ生成し、これら演算モジュールオブジェクトを演算ルールテーブル３３で規定された演算の実行順序に従って順次実行することにより異常診断を行うため、そのとき実行しようとする異常診断の内容に応じた演算ルールテーブル３３を作成するだけで種々の異常診断を行うことができる。
【０１８５】
この場合において、本異常診断システム１では、演算モジュールオブジェクトの実行順序と入出力データの識別子とを関係付けて演算ルールテーブル３３に記述しているため、複雑な診断アルゴリズムであっても、どのデータを演算しているかが各演算モジュールオブジェクトの位置で容易に想起可能となり、効率的な記述が可能となる。
【０１８６】
また本異常診断システム１では、複数の演算モジュールオブジェクトを連携して異常診断を行うにあたり、各演算モジュールオブジェクトでの演算結果の値を識別子と共に記録し、これらを全演算モジュールオブジェクトで共有しながら逐次演算に用いていくため、現在データテーブル３４（図８）を保持するメモリの使用量や計算量の高効率化が可能であり、安価な低リソース装置でも入力データをストリーム型処理でリアルタイム性の高い異常診断を提供することができる。
【０１８７】
さらに本異常診断システム１では、異常診断処理を中断する際それぞれの演算モジュールオブジェクトの中間データを保存するためのレジューム出力動作、再開する際に復元するためのレジューム入力動作を、演算モジュールクラス定義テーブル３２で定義しているため、異常診断装置２がレジューム動作を実行することができる。
【０１８８】
以上のように、本実施の形態の異常診断システム１によれば、リアルタイムでの異常診断の早期実施に向けた装置状態や結果状態の監視に適用する、安価な低リソース装置でも効率的にストリーム型処理が可能であり、また、複雑な診断内容でもその動作アルゴリズムを効率的に記述して容易に変更可能とする、異常診断装置および方法、ならびに異常診断システムを提供することができる。
【０１８９】
なお上述の第１の実施の形態においては、１つのデータ生成部３の１つのセンサデータから２つの異常診断を行う場合について述べたが、本発明はこれに限らず、２つ以上のデータ生成部３およびセンサデータを入力としたセンサデータ値のベクトルとなる場合の入力であっても、それぞれの要素データ独立のパタンやトレンドの検出、または、複数データを組み合わせた多元演算や分析処理による検出を、それぞれ適切な処理を順次行うことにより異常診断を行うことができる。
【０１９０】
（２）第２の実施の形態
上述した本発明の異常診断方法を、一般的なパーソナルコンピュータやサーバ装置のようなアーキテクチャを持つコンピュータ装置を用いて、専用のプログラムを実行することで実現可能である。
【０１９１】
本実施の形態においては、データ生成部３（図１）から逐次入力される１つの時系列センサデータから、異常な信号となるスパイク状のデータパタンの検出、および、装置の劣化状態となるデータの傾向を検出することで、対象の異常診断に提供することを例に説明する。
【０１９２】
（２−１）本実施の形態による異常診断装置の構成
図２との対応部分に同一符号を付して示す図２５は、図２について上述した第１の実施の形態の異常診断装置２に代えて図１の異常診断システムに適用される、本実施の形態による異常診断装置１００のハードウェア構成を示す。本異常診断装置１００は、例えば、ＣＰＵ（Central Processing Unit）１０１、メモリ１０２、補助記憶部１０３、通信部１０４、外部記憶部１０５、表示部１０６および操作部１０７と、１または複数のデータ取得部１０８（１０８１，１０８２，……１０８Ｎ）と、時計部１０９とを備えて構成される。
【０１９３】
ＣＰＵ１０１は、プログラムの命令列を読み込みながら解釈し実行を行うことで情報の加工を行うデバイスである。メモリ１０２は、ＤＲＡＭ（Dynamic Random Access Memory）など、ＣＰＵ１０１から直接アクセス可能で、データの書き込みと読み込みを行うことが可能だが、電源の供給がなくなると容量が消える記憶装置である。
【０１９４】
補助記憶部１０３は、ハードディスク装置（ＨＤＤ：Hard Disk Drive）などの磁気ドライブや光ディスク、フラッシュメモリなど、データの書き込みと読み込みを行うことが可能で、消去を行うまではデータを電源の供給が途絶えても永続的に保持する記憶装置である。
【０１９５】
通信部１０４、外部記憶部１０５、表示部１０６、操作部１０７、データ取得部１０８および時計部１０９は、それぞれ図１や図２について上述した第１の実施の形態の通信部１７、外部記憶部１８、表示部１９、操作部２０、データ取得部１１（１１１〜１１Ｎ）、および、時計部２１と同様の機能および構成を有するものであるため、ここでの説明は省略する。
【０１９６】
これら各部は信号線・通信線であるバスＢＳで接続され、ＣＰＵ１０１上で動作する基本プログラム、ＯＳ（Operating System）の処理によりデータが伝達されることで各部それぞれ定義された動作を行う。なお、ＯＳで開示するインタフェースを用いて一般プログラムでの各部の操作が可能となるが、これらの説明は省略する。
【０１９７】
（２−２）本異常診断装置で実行される各種処理
本異常診断装置１００の電源が投入されると、ＣＰＵ１０１は、ブートした後、補助記憶部１０３からＯＳをメモリ１０２に読み込むことで起動し、ＯＳでの設定に従ってＣＰＵ１０１は補助記憶部１０３から図２７について後述する異常診断プログラム１２０をメモリ１０２に読み込み、これを実行することで異常診断処理を実施することが可能となる。
【０１９８】
図２６は、本異常診断装置１００における補助記憶部１０３上の各種テーブルの配置例を示す。補助記憶部１０３上には設定テーブル１１０、入出力テーブル１１１、演算ルールテーブル１１２、および、レジュームデータテーブル１１４が格納され、一部の記憶領域が結果バッファ１１５として確保されている。これらは、それぞれ図２について上述した第１の実施の形態の設定テーブル３０、入出力テーブル３１、演算ルールテーブル３３、現在データテーブル３４、レジュームデータテーブル３５、および、結果バッファ３６と同様の構成を有するものであるため、ここでの説明は省略する。
【０１９９】
図２７は、本異常診断装置１００のメモリ１０２上に読み込まれた異常診断プログラム１２０の構成例を示す。異常診断プログラム１２０は、制御部サブプログラム１２１、演算モジュール管理部サブプログラム１２２、現在データ管理部サブプログラム１２３、レジュームデータ管理部サブプログラム１２４、結果出力部サブプログラム１２５、および、演算処理部サブプログラム１２６の各オブジェクトから構成され、これらのサブプログラムが補助記憶部１０３からメモリ１０２上にロードされる。演算モジュールクラス定義テーブル１２７は、演算モジュール管理部サブプログラム１２２からアクセス可能なオブジェクトとなっている。また、現在データテーブル１２８は、現在データ管理部サブプログラム１２３からアクセス可能なオブジェクトとなっている。これらは別途、いわゆるクラスライブラリやダイナミックリンクライブラリなどのライブラリオブジェクトとして構成されてもよい。
【０２００】
まず、異常診断プログラム１２０がメモリ１０２上にロードされると、制御部サブプログラム１２１が起動され、図１２について上述した第１の実施の形態の異常診断処理を実行する。以下、同様に第１の実施の形態の演算モジュール管理部１２、現在データ管理部１４、レジュームデータ管理部１５、結果出力部１６、および、演算処理部１３にそれぞれに対応する各サブプログラム（演算モジュール管理部サブプログラム１２２、現在データ管理部サブプログラム１２３、レジュームデータ管理部サブプログラム１２４、結果出力部サブプログラム１２５、または、演算処理部サブプログラム１２６）の処理がそれぞれ実行され、第１の実施の形態と同様の一連の処理を行うことになる。
【０２０１】
以上のように、第１の実施の形態と同様の異常診断処理を、一般的なパーソナルコンピュータやサーバ装置のようなアーキテクチャを持つコンピュータ装置を用いて異常診断プログラムを実行することが可能であり、第１の実施の形態と同様の特徴をもつ異常診断装置１００を実現可能となる。
【０２０２】
（３）第３の実施の形態
本実施の形態では、異常診断システム１３０（図１）の異常診断装置１３１（図１）において実行される異常診断処理の演算ルールや各種設定を変更可能とする例について説明する。本実施の形態においては、演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０を外部から与えられた新たな演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０に置き換えることにより、異常診断処理の演算ルールや各設定の変更を行う。本異常診断装置１３１のこれ以外の機能は第１の実施の形態の異常診断装置２とすべて同様であるため、その説明は省略する。
【０２０３】
図２８は、本実施の形態による異常診断処理の処理手順を示す。本異常診断処理は、図１２について上述した第１の実施の形態による異常診断処理に、装置管理サーバ６（図１）からの管理コマンドの有無を判定する判定処理（Ｓ９７）、装置管理サーバ６からの管理コマンドに含まれる更新済みの演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０を仮配置する管理コマンド処理（Ｓ９８）、および、仮配置した更新済の演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０を本配置する処理（Ｓ１０６）が追加されている点が第１の実施の形態と相違する。なお、図３の設定テーブル３０では、管理サーバとの通信方法を「MAINTENANCE_SERVER」として設定しているため（レコード３０−７を参照）、ここではＭＱＴＴＳプロトコルを用いたメッセージ伝送の仕組みを用いることとして説明する。
【０２０４】
本実施の形態の異常診断装置１３１の制御部１３２（図２）は、図２８に示す異常診断処理を開始後、ステップＳ９０〜ステップＳ９６を図１２のステップＳ１〜ステップＳ７と同様に処理する。この際、制御部１３２は、ステップＳ９１の通信部設定に関して、通信部１７を介したＭＱＴＴブローカを経由する装置管理サーバ６とのメッセージ通信を設定する。特に、ＭＱＴＴでのトピック名として、ユーザ情報（図３のレコード３０−１）や装置情報（図３のレコード３０−２）を組み合わせた名称を購読しているとして、異常診断装置１３１充てのメッセージをセキュアな通信で取得可能である。
【０２０５】
かかるトピック名の最後の「control/#」は、管理コマンドをすべて受け取ることを示し、ワイルドカードである「#」の部分には、演算ルールテーブル３３の内容を更新する場合には「演算ルールテーブル更新」、入出力テーブル３１の内容を更新する場合には「入出力テーブル更新」、設定テーブル３０の内容を更新する場合には「設定テーブル更新」といった、演算ルールや各種設定の変更内容に応じた適切な文字列が格納される。また管理コマンドのメッセージのペイロードには、更新する演算ルールテーブル３３や、入出力テーブル３１または設定テーブル３０とそのファイル名とが格納される。
【０２０６】
そして制御部１３２は、ステップＳ９６の処理後、装置管理サーバ６からの管理コマンドを受信したか否かを判断する（Ｓ９７）。そして制御部１３２は、この判断で否定結果を得るとステップＳ９９に進む。
【０２０７】
これに対して、制御部１３２は、ステップＳ９７の判断で肯定結果を得ると、受信した管理コマンドに従って後述する管理コマンド処理を実施することにより、当該管理コマンドのペイロードに含まれる更新後の演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０を仮配置用に別途用意したフォルダなどに仮配置する（Ｓ９８）。
【０２０８】
続いて、制御部１３２は、ステップＳ９９に進み、この後、ステップＳ９９〜ステップＳ１０３を図１２のステップＳ８〜ステップＳ１２と同様に処理する。
【０２０９】
そして制御部１３２は、やがてステップＳ９５の判断で肯定結果を得ると（つまり異常診断を実行中に図１０の「Stop」という文字列が表示された第２の操作候補マーク４６Ｂに対応する操作部２０の第２の操作ボタン４７Ｂが押圧されると）、図１２のステップＳ１３と同様にレジューム出力処理実行指示をレジュームデータ管理部１５に与えるとともに（Ｓ１０４）、図１２のステップＳ１４と同様にモジュール終了動作実行指示を演算モジュール管理部１２に与える（Ｓ１０５）。
【０２１０】
さらに制御部１３２は、ステップＳ９８において仮配置した更新後の演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０を次の起動時に取得可能な位置に本配置し（Ｓ１０６）、この後、この異常診断処理を終了する。
【０２１１】
このようにして本配置した演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０を用いて、次回の異常診断処理の開始時のテーブル取得（Ｓ９０）で、更新済みの演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０が取得され、この後、その演算ルールテーブル３３、入出力テーブル３１または設定テーブル３０に基づいて新しい設定や演算ルールでの異常診断処理が実行されることになる。
【０２１２】
なお図２８について上述した本実施の形態の異常診断処理のステップＳ９８における制御部１３２の具体的な処理内容を図２９に示す。制御部は、かかる異常診断処理のステップＳ９８に進むと、この図２９に示す更新済みテーブル本配置処理を開始し、まず、受信した管理コマンドを取得し、取得した管理コマンドに含まれるトピック名を解析する（Ｓ１１０）。
【０２１３】
続いて、制御部１３２は、この管理コマンドのトピック名の最後にある「＃」に当てはめられた文字列に基づいて、この管理コマンドが演算ルールテーブル３３を更新すべき旨のコマンドであるか否かを判断する（Ｓ１１１）。そして制御部１３２は、この判断で肯定結果を得ると、管理コマンドのメッセージのペイロードからファイル名や更新後の演算ルールテーブルを取得する（Ｓ１１２）。そして制御部１３２は、取得した演算ルールテーブル３３を仮配置した後（Ｓ１１３）、このコマンド処理を終了して図２８の異常診断処理に戻る。
【０２１４】
これに対して、制御部１３２は、ステップＳ１１１の判断で否定結果を得ると、管理コマンドのトピック名の最後にあるワイルドカード文字「#」の部分に対応する文字列に基づいて、この管理コマンドが入出力テーブル３１を更新すべき旨のコマンドであるか否かを判断する（Ｓ１１４）。そして制御部１３２は、この判断で肯定結果を得ると、管理コマンドのメッセージのペイロードからファイル名や更新後の入出力テーブルを取得する（Ｓ１１５）。そして制御部１３２は、取得した入出力テーブル３１を仮配置した後（Ｓ１１６）、このコマンド処理を終了して図２８の異常診断処理に戻る。
【０２１５】
これに対して、制御部１３２は、ステップＳ１１４の判断で否定結果を得ると、管理コマンドのトピック名の最後にあるワイルドカード文字「#」の部分に対応する文字列に基づいて、この管理コマンドが設定テーブル３０を更新すべき旨のコマンドであるか否かを判断する（Ｓ１１７）。そして制御部１３２は、この判断で肯定結果を得ると、管理コマンドのメッセージのペイロードからファイル名や更新後の設定テーブル３０を取得する（Ｓ１１８）。そして制御部１３２は、取得した設定テーブル３０を仮配置した後（Ｓ１１９）、このコマンド処理を終了して図２８の異常診断処理に戻る。
【０２１６】
また制御部１３２は、ステップＳ１１７の判断で否定結果を得ると、対応すべきコマンドが無いとしてこのコマンド処理を正常終了して図２８の異常診断処理に戻る。
【０２１７】
なお、装置管理サーバ６からのコマンド以外にも、記憶媒体３７（図２）に配置した各テーブルをファイルとして外部記憶部１８（図２）を用いて取得したり、ＦＴＰ（File Transfer Protocol）やＳＭＢ（Server Message Block）などのファイル転送・ファイル共有プロトコルやサービスを用いて外部から各テーブルを取得したりすることも可能である。
【０２１８】
図９〜図１１との対応部分に同一符号を付して示す図３０は、本実施の形態において表示部１９により表示される演算ルールテーブル３３の変更メニューの表示例を示す。演算ルールテーブル３３を、上述のようにして異常診断装置１３１が取得した幾つかの更新済みの演算ルールテーブル３３の中からいずれかの演算ルールテーブル３３に変更する場合に、第１の実施の形態と同様に異常診断装置１３１の表示部１９や操作部２０を用いて所望する演算ルールテーブル３３の選択を行う。
【０２１９】
例えば、図９や図１０で「Menu」という文字列が表示されている第４の操作候補マーク４６Ｄに対応する操作部２０の第４の操作ボタン４７Ｄが作業者３９（図２）により押圧操作された後、適切な表示とボタン操作を経て図３０のような演算ルールテーブル３３の変更メニューが表示されるものとする。この変更メニューでは、「Rule_MK-500_v3.1」などの幾つかの演算ルールテーブル３３のファイル名をそれぞれ表す文字列１５０と、これら文字列１５０のうちの何れか１つの文字列１５０を指し示すカーソルが表示される。
【０２２０】
そしてこの変更メニューでは、「Up」という文字列が表示された第１の操作候補マーク４６Ａに対応する操作部２０の第１の操作ボタン４７Ａや、「Down」という文字列が表示された第２の操作候補マーク４６Ｂに対応する操作部２０の第２の操作ボタン４７Ｂを押圧することによりカーソル１５１を上下方向に移動させたり、文字列１５０をスクロールさせたりすることができる。
【０２２１】
そして変更メニューでは、所望するバージョンの演算ルールテーブル３３に対応する文字列１５０を指し示すようにカーソル１５１を移動させた後に、「Enter」という文字列が表示された第３の操作候補マーク４６Ｃに対応する第３の操作ボタン４７Ｃを押圧することにより、そのときカーソル１５１が指し示す文字列１５０に対応する演算ルールテーブル３３をその後使用する演算ルールテーブル３３として決定することができる。なお、この変更メニューでは、「Cancel」という文字列が表示された第４の操作候補マーク４６Ｄに対応する第４の操作ボタン４７Ｄを押圧することにより、変更を中止して上位メニューに戻ることができる。
【０２２２】
上述のようにして、いずれかの演算ルールテーブル３３の選択決定が行われた場合、コマンド処理と同様に、演算ルールテーブル３３の取得、仮配置を実施し、終了直前に本配置および必要に応じて設定テーブルの演算ルール情報（図３のレコード３０−５を参照）を変更するなどして、次回の起動時に更新した演算ルールテーブル３３に基づく演算ルールを用いた異常診断処理を行うことができる。
【０２２３】
なお本実施の形態の場合、入出力テーブル３１や設定テーブル３０についても、所定操作により同様の変更メニューを表示させることができ、この変更メニューを用いて上述と同様に所望するバージョンの入出力テーブル３１や設定テーブル３０をその後使用する入出力テーブル３１または設定テーブル３０として設定することができる。
【０２２４】
以上このように、演算モジュールの演算順序と入出力データの識別子により関係づけて記述する演算ルールテーブルや、装置の設定を行う設定テーブル、および、入出力テーブルを更新することで、異常診断装置の処理対象や演算内容、出力方法などを適宜変更可能であり、柔軟な処理を行う異常診断装置を提供することが可能となる。
【０２２５】
（４）第４の実施の形態
第１〜第３の実施の形態では、異常診断装置２，１００，１３１を安価な低リソースの装置で実現することを目的としているが、場合によっては高い演算リソースを必要とする演算モジュールクラスや、多くの演算モジュールオブジェクトを複雑な組み合わせで用いた診断を行いたい場合がある。また、複数の装置や多くの部品でそれぞれの診断を行った結果を統合する上位の診断を行った結果を異常管理／可視化装置５（図１）に送付して、サーバの管理、可視化に用いたいという場合も想定できる。そこで本実施の形態では、複数の異常診断装置を接続した連携適用例について説明する。
【０２２６】
図３１は、異常診断装置１４１（１４１１〜１４１Ｍ，１４１Ｘ）を多段に接続することにより構成した本実施の形態による異常診断システム１４０の構成例を示す。なお、本異常診断システム１４０において、異常診断装置１４１は、それぞれ第１〜第３の実施の形態の異常診断装置２，１００，１３１のうちのいずれかにより構成されるものとする。
【０２２７】
本異常診断システム１４０において、１段目の異常診断装置１４１１〜１４１Ｍには、データ生成部３がそれぞれ１台以上接続される。このとき、異常診断装置１４１１〜１４１Ｍは、その内部に設けられた図２または図２５のデータ取得部１１，１０８を介してこれらのデータ生成部３とそれぞれ接続される。
【０２２８】
また、これら１段目の異常診断装置１４１１〜１４１Ｍは、それぞれその内部に設けられた図２または図２５の通信部１７，１０４を介して第１のネットワーク１４２と接続され、第１のネットワーク１４２には、２段目の異常診断装置１４１Ｘがその内部に設けられた図２または図２５のデータ取得部１１，１０８を介して接続されている。
【０２２９】
さらに、２段目の異常診断装置１４１Ｘは、その内部に設けられた図２または図２５の通信部１７，１０４を介して第２のネットワーク１４３と接続されており、この第２のネットワークに異常管理／可視化装置５が接続されている。
【０２３０】
なお、第１のネットワーク１４２として、例えば、有線ＬＡＮおよび無線ＬＡＮによるイーサネット（登録商標）によりＴＣＰ／ＩＰ通信を行うローカルネットワークや、同様の通信を中継するハブやアクセスポイントを用いるか、専用線、および、別途用意するルータを用いるなどして遠隔地と結ぶ仮想プライベート網（ＶＰＮ）を適用することができ、また、第２のネットワーク１４３として、キャリア網を経由したインターネット網、または、仮想プライベート網を適用することができる。
【０２３１】
この際、入出力テーブル３１（図４）の各入出力の設定は、例えばＴＣＰ／ＩＰのＲＡＷ通信で、また通信相手のＩＰアドレスやポート等はそれぞれの異常診断装置１４１や異常管理／可視化装置５の対応するデータ取得部に向けて設定し、また、対応する操作クラス識別子（図４のハンドラクラスＩＤ欄３１Ｇを参照）は、通信するデータの数や、データ型、データ名、および、データなどの１組のデータ構成を送受信する形式を規定することでこれら入力データあるいは結果データを通信するように設定する。
【０２３２】
なお、例えば、通信プロトコルとしてＭＱＴＴを用いるなどして、ローカルネットワーク上にメッセージのブローカが動作する装置を別途用意し、出力側はメッセージの発行クライアントとして、また、入力側はメッセージの購読クライアントとして、それぞれの入出力テーブルを規定するように構成してもよい。
【０２３３】
例えば、データ生成部３（３１〜３Ｎ）は振動センサであるとして、それぞれの装置または部品の振動を検出しているとする。各異常診断装置１４１にはこの振動の値が時系列的に入力し、第１の実施の形態の演算ルールとして、データ入力、ＦＦＴ、データ出力を順に行うように規定すると、それぞれの振動センサの振動による周波数帯での強度ヒストグラムを演算結果として、各通信部からネットワークを通じて出力可能である。
【０２３４】
これらの演算結果を異常診断装置１４１Ｘが取得し、その演算ルールは、各異常診断装置１４１１〜１４１Ｍでの演算結果を入力データとしてそれぞれ特定の周波数帯の強度がある値より高まるか、または、低くなるかを条件としてこれを異常として検出し、それぞれの結果を、例えば予め学習を行ったニューラルネットワークの入力データとして判定を行う演算を実施し、その結果を異常診断装置１４１Ｘの診断結果として異常診断／可視化装置５に伝達することができる。
【０２３５】
本実施の形態では異常診断装置１４１を２段に接続する場合について述べたが、異常診断装置１４１を２段よりも多い多段、あるいは、複雑にカスケード接続するようにしても、同様に入出力関係を規定することにより異常診断システムを構成することができる。
【０２３６】
このように、異常診断装置１４１に関して、前段の異常診断装置１４１の診断結果データである出力データを次段の異常診断装置１４１に入力データとして用いるようにする接続を再帰的に行うことで、大規模な異常診断システム１４０を容易に構築することができる。
【０２３７】
（５）他の実施の形態
なお上述の第１〜第４の実施の形態においては、診断を行うための演算の順序と、演算毎の入力データ名、出力データ名および必要なパラメタを含む演算ルールとが予め定義された演算ルール情報（演算ルールテーブル３３）をテーブル構造とするようにした場合について述べたが、本発明はこれに限らず、かかる演算ルール情報のデータ構造としては、この他種々のデータ構造を広く適用することができる。複数種類の演算モジュールクラスについて、演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報（演算モジュールクラス定義テーブル３２）についても同様である。
【０２３８】
同様に、上述の第１〜第４の実施の形態においては、予め定義された異常診断装置に対する各設定項目のパラメタがそれぞれ登録された設定情報（設定テーブル３０）と、予め定義された前記異常診断装置のデータ入出力に関する各設定項目のパラメタが登録された入出力情報（入出力テーブル３１）とテーブル構造とするようにした場合について述べたが、本発明はこれに限らず、かかる設定情報および入出力情報のデータ構造としては、この他種々のデータ構造を広く適用することができる。
【０２３９】
また上述の第１〜第４の実施の形態においては、現在データテーブル３４，１１３をリセットすることなく図１２の異常診断処理や個々の演算モジュールオブジェクトを実行するようにした場合について述べたが、本発明はこれに限らず、図１２の異常診断処理を開始する際やモジュール逐次動作処理Ｓ１１の前に現在データテーブル３４，１１３をリセットするようにしてもよい。ただし、現在データテーブル３４，１１３をリセットすることなく図１２の異常診断処理や個々の演算モジュールオブジェクトを実行することで、前回の異常診断処理や、１ループ（図１２のステップＳ５〜ステップＳ１２）以上前の各演算モジュールオブジェクトの実行結果を必要に応じて利用することができる。
【産業上の利用可能性】
【０２４０】
本発明は、入力データに基づいて診断対象の異常診断を行う種々の異常診断装置および異常診断システムに広く適用することができる。
【符号の説明】
【０２４１】
１，１３０  異常診断システム
２，１００，１３１，１４１，１４１１，１４１Ｍ，１４１Ｘ  異常診断装置
３，３１，……３Ｎ  データ生成部
５  異常管理／可視化装置
６  装置管理サーバ
１０，１２１  制御部
１１，１０８，１０８１，……１０８Ｎ  データ取得部
１２，１２２  演算モジュール管理部
１３，１２６  演算処理部
１４，１２３  現在データ管理部
１５，１２４  レジュームデータ管理部
１６，１２５  結果出力部
１７，１０４  通信部
１８，１０５  外部記憶部
１９，１０６  表示部
２０，１０７  操作部
２１，１０９  時計部
３０，１１０  設定テーブル
３１，１１１  入出力テーブル
３２，１２６  演算モジュールクラス定義テーブル
３３，１１２  演算ルールテーブル
３４，１１３  現在データテーブル
３５，１１４  レジュームデータテーブル
３６，１１５  結果バッファ
１０１  ＣＰＵ
１０２  メモリ
１０３  補助記憶部
【図１】
0006571565.tif 000004
【図２】
0006571565.tif 000005
【図３】
0006571565.tif 000006
【図４】
0006571565.tif 000007
【図５】
0006571565.tif 000008
【図６】
0006571565.tif 000009
【図７】
0006571565.tif 000010
【図８】
0006571565.tif 000011
【図９】
0006571565.tif 000012
【図１０】
0006571565.tif 000013
【図１１】
0006571565.tif 000014
【図１２】
0006571565.tif 000015
【図１３】
0006571565.tif 000016
【図１４】
0006571565.tif 000017
【図１５】
0006571565.tif 000018
【図１６】
0006571565.tif 000019
【図１７】
0006571565.tif 000020
【図１８】
0006571565.tif 000021
【図１９】
0006571565.tif 000022
【図２０】
0006571565.tif 000023
【図２１】
0006571565.tif 000024
【図２２】
0006571565.tif 000025
【図２３】
0006571565.tif 000026
【図２４】
0006571565.tif 000027
【図２５】
0006571565.tif 000028
【図２６】
0006571565.tif 000029
【図２７】
0006571565.tif 000030
【図２８】
0006571565.tif 000031
【図２９】
0006571565.tif 000032
【図３０】
0006571565.tif 000033
【図３１】
0006571565.tif 000034