本発明は、安価な低リソース装置でも入力データをストリーム型処理でリアルタイム性の高い異常診断を提供可能とするために、複数の演算モジュールを連携して異常診断を行うにあたり、各演算モジュールでの演算結果の値を識別子と共に記録し、これらを全演算モジュールで共有しながら逐次演算に用いていくことでメモリ使用量や計算量の高効率化を行うことを第1の特徴とする。
また本発明は、多くの演算モジュールを連携させる複雑な診断アルゴリズムであっても、どのデータを用いて演算しているかが各演算モジュールの位置で容易に想起可能とするために、演算モジュールの演算順序と入出力データの識別子により関係づけて記述することを第2の特徴とする。
さらに本発明は、異常診断の処理を中断する際にレジューム動作を実現することを可能とするために、それぞれの演算モジュールの中間データを保存するためのレジューム出力動作と再開する際に復元するためのレジューム入力動作を定義することを第3の特徴とする。
さらに本発明は、大規模な異常診断システムを容易に提供可能とすることために、第1の異常診断装置の診断結果データである出力データを第2の異常診断装置に入力データとして用いるようにする接続を再帰的に行うことを第4の特徴とする。
ただし、本発明の適用は以下の第1〜第4の実施の形態に限定されない。
以下図面について、本発明の一実施の形態を詳述する。
(1)第1の実施の形態
(1−1)異常診断システムの構成
図1において、1は全体として本実施の形態による異常診断システムを示す。この異常診断システム1は、異常診断装置2に1つ以上のデータ生成部3(31,32,……,3N)が接続されて構成される。
データ生成部3は、センサデータや状態を出力する診断対象となる機器若しくは部品(以下、これらを対象機器または対象部品と呼ぶ)、または、これらの動作を模擬するためのデータ生成源であり、特定のデバイスおよび通信規格を用いて所定の形式でデータの出力を行う。なお、異常診断装置2の内部にデータ生成部3を持つことを妨げるものではない。この場合、データ生成部3が、例えば、別途取得したデータファイルを逐次読み取ったり、その生成の模擬を行ったりするものであってもよい。
異常診断装置2は、各データ生成部3からのデータを対象機器または対象部品の状態を含む入力データとしてそれぞれ取得し、逐次これら入力データを用いて予め指定する方法により個々のデータ生成部3や、データ生成部3の集合体としての対象機器または対象部品の異常を自動分析により検出し、異常状態を診断する。そして異常診断装置2は、その診断結果(異常診断結果)をネットワーク4を介して異常管理/可視化装置5に送付する。
異常管理/可視化装置5は、例えば、CPUおよびメモリを備える汎用のサーバ装置から構成される。異常管理/可視化装置5は、異常診断装置2から送付された異常診断結果を、異常診断装置2あるいはそこに接続された対象機器または対象部品を単位として保持および管理したり、取得した異常診断結果を統計処理するなどしてグラフや表形式で可視化したりする。
また異常診断装置2は、ネットワーク4を介して装置管理サーバ6とも通信を行い、異常診断装置2の挙動を定義する各種テーブルや異常診断装置2で用いる要素動作のバージョンアップを行う。これにより異常診断装置2が常に最新かつ好適な異常診断を提供することが可能となる。なお装置管理サーバ6もCPUおよびメモリを備える汎用のサーバ装置から構成される。
以下においては、異常診断装置2が各データ生成部3からそれぞれ逐次与えられる1つの時系列センサデータから、異常な信号となるスパイク状のデータパターンの検出、および、対象機器または対象部品の劣化状態となるデータの傾向を検出することで、対象機器または対象部品の異常診断を行うことを例に説明する。
(1−2)異常診断装置の構成
図2は、本実施の形態による異常診断装置2の機能構成を示す。本異常診断装置2は、各種処理を実行する機能部として、制御部10、データ取得部11(111,112,……11N)、演算モジュール管理部12、演算処理部13、現在データ管理部14、結果出力部16、レジュームデータ管理部15、通信部17、外部記憶部18、表示部19、操作部20および時計部21を備え、テーブルとして、設定テーブル30、入出力テーブル31、演算モジュールクラス定義テーブル32、演算ルールテーブル33、現在データテーブル34、レジュームデータテーブル35を備えて構成される。
制御部10は、別途定義された設定テーブル30、入出力テーブル31および演算ルールテーブル33などを取得および管理し、データ取得部11、演算モジュール管理部12、演算処理部13、現在データ管理部14、レジュームデータ管理部15、および、結果出力部16等を制御することにより、異常診断装置2全体として後述のような異常診断処理を実行させる機能を有する。また制御部10が、通信部17を用いて装置管理サーバ6から伝送される管理コマンドや、作業者39の指示に従って各種テーブルの置換や選択を行うことにより、各種設定や異常診断の演算ルールなどの変更を行うようにしてもよい。
データ取得部11は、それぞれ1つ以上の通信規格とデバイスを用いてデータ生成部3との通信路を確立し、これらデータ生成部3の出力データを入力データとして取得する。これらは1対1の通信路であってもよいし、データ形式に識別の仕組みを含めることで複数のデータ生成部3との接続を1つのデータ取得部11が確立し、あるいは、その逆に1つのデータ生成部3との接続を複数のデータ取得部11が同時に確立してもよい。
ここでの通信規格およびデバイスとしては、RS−232C(およびその後継規格であるEIA−232−D/E、ANSI/TIA/EIA−232−F1997など)、RS−422(同EIA/TIA−422など)、およびRS−485(同EIA/TIA−485など)などの有線シリアル通信規格、IEEE 1284/セントロニクスなどの有線パラレル通信規格、USB(Universal Serial Bus)やI2C(Inter-Integrated Circuit)、IEEE 1394系などの有線シリアルバス規格、IrDA(Infrared Data Association)規格のような赤外線通信規格、などをはじめとする通信規格およびそれを実現するデバイスを適用できる。必要に応じてこれらの中から1つを選択してデータ生成部3と接続し、通信対象を特定して1つ以上のデータ生成部3からのセンサデータを入力データとして取得する。
また通信規格およびデバイスとしては、近距離無線通信規格(IEEE 802.15系、Bluetooth(登録商標)、ZigBeeなど)や、イーサネット(登録商標)(IEEE 802.3系)、WiFi(IEEE 802.11系)、WiMAX(IEEE 802.16系)のような有線/無線通信規格、3G、LTE(Long Time Evolution)、4G、ISDN(Integrated Services Digital Network)、光通信網の終端ONU(Optical Network Unit)・DSU(Digital Service Unit)などのキャリア通信網規格をはじめとするネットワーク通信規格、および、ISO/IEEE 18092などの非接触通信規格(NFC、FeliCaなど)など、任意の通信規格およびデバイスを選択することもできる。ここでは、データ生成部3全体あるいはそれを構成するセンサ単位のアドレスやポート番号などそれぞれのプロトコルを実現する設定を行うことで通信路を確立してデータを取得することが可能である。また、GPIO(General Purpose Input/Output)ポートなどによるデジタル信号入力や、アナログ値を出力するセンサからのA/D(アナログ―デジタル)変換インタフェースによるサンプリング値をデータとして取得してもよい。
なお、データ取得部11と、データ生成部3との間に上述の各通信規格間の変換手段が存在してもよく、これを実際のデータ生成部3として、元となるデータ生成部や当該データ生成部に含まれるセンサの特定や設定に関する通信を含んでもよい。ネットワーク通信の伝送プロトコルとしては、TCP/IPやUDP/IPでのメッセージング、RESTfullなHTTP、MQTT(Message Queue Telemetry Transport)などのメッセージ伝送プロトコル、EtherCATなどのフィールドバス規格、などを用いて、データ生成部3と直接通信する以外にも所定のメッセージブローカーを経由することで所定トピックでのメッセージの購読(サブスクライブ)としてデータ取得を行ってもよい。さらに、セキュリティを高めるために、ユーザ認証や機器認証、通信上のデータ暗号化(SSL通信などを含む)、および、外部からの攻撃に対するファイヤウォール機能を持たせることが望ましい。
また、データ取得部11が、通信内容により取得するか別途設定する定義を用いるなどして、その識別子と共に取得した入力データを時系列で保持、または、最新データのみを保持するようにしてもよい。そして、後段部からの要求に応じて識別子を用いて値を取得可能とするが、この方法はCSV(Comma-Separated Values)やXML(eXtendable Markup Language)、JSON(JavaScript(登録商標) Object Notation)などのテキスト形式、あるいは、予め規定するバイナリ形式をもって、ファイルや、データベーステーブル、共有メモリ、関数API(Application Programming Interface)、名前付きパイプやソケットを用いた通信など、装置のOS(Operating System)や各種関係ツールに搭載したデータ授受機能を選択して使用可能である。
演算モジュール管理部12は、後述の演算モジュールクラス定義テーブル32と、制御部10が管理している後述の演算ルールテーブル33とに従って、そのとき行う異常診断処理の各演算をそれぞれ実行する演算モジュールオブジェクトを実行順にそれぞれ生成するとともに、生成した各演算モジュールオブジェクトを順序付けして管理する。
演算処理部13は、演算モジュール管理部12により生成された各演算モジュールオブジェクトを順番に実行することにより、データ取得部11が取得した入力データを現在データ管理部14に渡したり、当該入力データに対する異常診断処理を実行する。この際、演算処理部13は、各演算モジュールオブジェクトの実行結果をそれぞれ現在データ管理部14に保持させる。そして演算処理部13は、現在データ管理部14が保持する演算モジュールオブジェクトの実行結果を利用して次の演算モジュールオブジェクトを実行する。また演算処理部13は、このようにして実行した異常診断処理の処理結果を結果出力部16に送信する。
現在データ管理部14は、演算処理部13によりデータ取得部11から与えられた入力データや、演算処理部13から与えられた各演算モジュールオブジェクトの実行結果をそのデータ識別子と対応付けて現在データテーブル34に登録して管理する。またレジュームデータ管理部15は、異常診断処理を中断する際に、演算処理部13が実行する各演算モジュールオブジェクトの中間データ等を取得し、これらをそれぞれその演算モジュールオブジェクトのレジュームデータとしてレジュームデータテーブル35に格納して管理する。
結果出力部16は、演算処理部13が実行した異常診断処理の処理結果を通信部17や外部記憶部18を介して外部に出力する。具体的に、結果出力部16は、演算処理部13からCSV、XML、JSONなどのテキスト形式、あるいは、バイナリ形式で出力される異常診断処理の処理結果を、ファイルやデータベーステーブル、共有メモリ、関数API、名前付きパイプやソケットを用いた通信などの中から適切なデータ授受機能を選択して外部に出力する。
なお、結果出力部16が、演算処理部13から与えられる異常診断処理の処理結果がファイル形式の場合にはハードディスクや不揮発性のメモリなどの二次記録デバイスを、データベーステーブル形式の場合にはデータベースエンジンとの接続関係を、また必要に応じて外部記憶部18を用いて、USBメモリや記録可能DVDやCD、SDカードなどの記憶媒体37に出力できるようにしてもよい。
また、本異常診断処理以外のプログラムなどからの名前付きパイプやソケットによる通信や、共有メモリ、関数呼び出しAPI経由などの方法でデータ出力を行うように結果出力部16を構成してもよい。さらに、セキュリティを高めるために、ユーザ認証や機器認証、通信上のデータ暗号化(SSL通信などを含む)、および、外部からの攻撃に対するファイヤウォール機能を結果出力部16に持たせるようにしてもよい。
さらに、結果バッファ36をメモリ上や二次記録デバイス上などに用意し、結果出力部16が演算処理部13から与えられた異常診断処理の処理結果を結果バッファ36に随時格納するようにすることで、通信部17での接続を確立していない場合や外部記憶部18のメディアが準備できていない場合、出力待ち中、および、内部でのファイル記録の際のファイルオープンが確立されていない場合にも、それぞれの確立後に送付するように設定することも可能である。
通信部17は、上述と同様の通信規格及びデバイスによってネットワーク38を介して外部異常管理/可視化装置5(図1)や装置管理サーバ6(図1)との通信路、あるいは、他の異常診断装置2との間の通信路を確立し、それぞれに定めた上述のようなプロトコルにより、コマンドおよびデータを含むネットワーク通信を行う。
通信部17は、結果出力部16で通信部17を経由したネットワーク通信を用いるよう指定された場合には、上述の各種通信規格を用いるデバイスとして機能し、外部に向けて通信による結果データの送付を行う。通信プロトコルとして、一般的なTCP/IPやUDP/IP、RESTfullなHTTP、MQTTなどのメッセージ伝送プロトコル、EtherCATなどのフィールドバス等を用いて、直接所定のデータサーバに送付する以外にもメッセージブローカーを経由しての所定トピックでのメッセージの発行(パブリッシュ)としてデータ送出を行ってもよい。さらに、セキュリティを高めるために、ユーザ認証やデータ暗号化(SSL通信など)、ファイヤウォール機能を持たせることが望ましい。
外部記憶部18は、USBメモリや記録可能DVDやCD、SDカードなどのリムーバブルメディアからなる記憶媒体37に対応するドライバから構成され、記憶媒体37に対する各種テーブルやデータ等の読み書きを行う。
表示部19は、異常診断装置2の動作状態あるいは選択が必要な項目の列挙、表示を行う手段であり、異常診断装置2が具備する液晶ディスプレイなどから構成される。ただし、表示部19が外部モニタにデータを出力するための手段であってもよい。表示部19は、テキストや図形を生成することで表示を行うものであることが望ましい。
操作部20は、作業者39が異常診断装置2に対する操作を行うための操作入力手段であり、例えば、異常診断装置2が具備するスイッチやツマミ類、あるいは、表示部19と同期するように作業者39が操作に用いるキーボードやマウスなどから構成される。
時計部21は、制御部10が等間隔で一連の処理を実行するように、また、現在データへのタイムスタンプ出力の際の現在時刻を更新するために、異常診断装置2の装置内時刻を管理する。制御部10は、時計部21が管理している装置内時刻を取得可能である。なお、時計部21が、通信部17を介してNTP(Network Time Protocol)サーバなどから標準時刻を取得することにより、自己が管理する装置内時刻を定期的に正確な時刻に合わせるようにしてもよい。
なお、制御部10、データ取得部11、演算モジュール管理部12、演算処理部13、現在データ管理部14、レジュームデータ管理部15、結果出力部16、および、時計部21は、それぞれ専用のハードウェア構成であっても、また、これらの一部がソフトウェア構成であってもよい。また通信部17は、例えばNIC(Network Interface Card)などの通信装置から構成される。
一方、設定テーブル30は、予めユーザにより定義された本異常診断装置2に設定すべき各設定項目のパラメタを管理するために利用されるテーブルであり、図3に示すように、ターゲット欄30A及びパラメタ欄30Bを備えて構成される。そしてターゲット欄30Aには、異常診断装置2の設定項目名が格納され、パラメタ欄30Bには、その設定項目に関するパラメタが格納される。
例えば、図3の場合、異常診断装置2に設定すべき項目として、本異常診断装置2を利用するユーザに関する情報であるユーザ情報(「USER_INFO」)、本異常診断装置2の製造管理者に関する情報であるベンダ情報(「BENDOR_INFO」)、本異常診断装置2に関する情報である装置情報(「MACHINE_INFO」)、本異常診断装置2へのデータの入出力に関する情報である入出力構成(「IO_SETUP」)、演算ルールテーブル33に関する情報である診断ルール(「ANALYTICS_RULE」)、異常診断に関する情報である診断実行(「ANALYTICS_EXEC」)、本異常診断装置2を管理する装置管理サーバ6に関する情報である管理サーバ(「MAINTENANCE_SERVER」)などが存在することが示されている。
そしてユーザ情報(「USER_INFO」)およびベンダ情報(「BENDOR_INFO」)については、ユーザやベンダの名称(「name」)、識別子(「userid」)および暗号化されたパスワード(「passwd」)などの情報が設定され、装置情報(「MACHINE_INFO」)については、その異常診断装置2の識別子(「id」)、シリアル番号(「serial」)およびモデル(「model」)が設定される。また入出力構成(「IO_SETUP」)については、入出力テーブル31を含むファイルへのファイルパス(「path」)およびそのファイルのファイル名(「file」)が設定され、診断ルール(「ANALYTIC_RULE」)については、演算ルールテーブル33を含むファイルへのファイルパス(「path」)およびそのファイルのファイル名(「file」)が設定され、診断実行(「ANALYTIC_EXEC」)については、異常診断を実行すべき周期が設定される。
さらに管理サーバ(「MAINTENANCE_SERVER」)については、各種テーブルや後述する演算モジュールクラス定義テーブル32などをはじめとする異常診断の処理全般の動作変更(「enabled」)および修正/バージョンアップを行うための装置管理サーバ6(図1)の有効/無効(「mode」)やそのプロトコル(「protocol」)、そのネットワーク上のアドレス(「url」)がURL形式で設定される。図3は、プロトコルとしては「MQTTS」を用い、SSL通信を用いたMQTT通信を行うこととし、トピック名を別途設定済の前述のユーザプロパティの識別子と、装置プロパティの識別子を用いるよう、「%」文字で引用して構成している例である。
入出力テーブル31は、予めユーザにより定義された本異常診断装置2のデータ入出力に関する各設定項目のパラメタを管理するために利用されるテーブルであり、本異常診断装置2のユーザにより予め設定される。図4は、設定テーブル30から指示される、データ取得部11の設定を行うための入出力テーブル31の構成例を示している。
この例では、入出力テーブル31は、1つのレコード(行)31−1〜31−6が異常診断装置2に入出力する1つのデータ種別に対応しており、各レコード31−1〜31−6は、それぞれID欄31A、I/O欄31B、デバイス欄31C、URL欄31D、プロトコル欄31E、方向欄31F、ハンドラクラスID欄31Gおよびパラメタ欄31Hを備えて構成される。
そしてID欄31Aには、対応するデータに付与された識別子が格納され、I/O欄31Bには、そのデータの入出力方向(入力または出力)を表す情報(入力は「I」、出力は「O」)が格納される。またデバイス欄31Cには、そのデータの送信元または送信先のデバイスを表す識別子が格納され、URL欄31Dには、そのデバイスのアドレスがURL形式で格納される。さらにプロトコル欄31Eには、対応するデータを送受信する際のプロトコルを表す情報が格納され、方向欄31Fには、そのデータを入力または出力する際の送受信方式(プッシュ型のときには「Push」、プル型のときには「Pull」)が格納される。さらにハンドラクラスID欄には、そのデータに対応するハンドラクラスの識別子が格納され、パラメタ欄31Hには、そのハンドラクラスへのパラメタが格納される。
例えば、図4の場合、識別子が「V1」のレコード31−1は、近距離無線通信規格ZigBeeを用いたセンサを受信する手段を経由してUSBに変換して入力するデータ生成部3から入力する設定の例である。すなわち、I/O欄31Bの値が「I」、デバイスは「COM0」であり、その位置が「/dev/ttyUSB0」であることから、そのデータがLinux(登録商標) OS上である場合のUSBシリアル通信を用いる特殊ファイルであることが分かる。またプロトコルとして「AT」コマンド体系を用いた「Push」型でデータを送付してくることが示されている。「Push」型通信では、データ生成部のタイミングでデータが送られてくるため、データ取得部内では非同期でデータの到着を待っており、到着時に最新のデータを更新するようにするか、到着するデータをバッファリングし最新のデータを外部に出力するように構成してもよい。ここではさらに、データの取得の手続きにはデータハンドラクラス「ZigBee_Parser」を用いて送付データを解析することとし、そのパラメタとしては「%1」、すなわちデータ内の第1引数を「$AAA」、すなわちセンサデータ識別子「AAA」のセンサデータ値として入力することとしている。
また、識別子が「T1」のレコード31−2は、同様に「/dev/ttyUSB2」のUSBデバイスで入力されるデータから「$BBB」、すなわちセンサデータ識別子「BBB」のセンサデータ値を取得することを示している。また、識別子が「Peripheral1」のレコード31−3は、イーサネット(登録商標)通信によってデータを入力する例である。すなわちネットワーク通信用のイーサネット(登録商標)デバイス「ETH1」を用いて「tcp」通信プロトコルを用いてのアドレスURLから、バイナリデータ(「RAW」)を「Pull」型でデータを取得して「AT_P1」という名前のハンドラクラスで所定の形式としてデータを抽出したうち、「%2」、すなわち第2引数を「$CCC」、すなわちセンサデータ識別子「CCC」のセンサデータ値として入力するための設定であることを示す。なお、「Pull」型通信とは、異常診断装置主導で、データ要求をデータ生成部に送付したのちの返り値としてデータを取得したり、あるいは、データ生成部内にデータがあるかどうかの確認要求を行ったりしてから実際のデータを取得するようにデータハンドラクラスを構成することを示す。
識別子が「Machine1」のレコード31−4は、同様のイーサネット(登録商標)を用いるが、MQTTプロトコルを用いる例である。すなわち、プロトコルとして「MQTT」を用い、MQTTブローカのURLを指定し、「Push」型でのデータ入力を監視する「MQTT_Sub_M1」クラスのハンドラを用いることで、指定のトピック名を用いた通信により、「%V005%」、すなわち「V005」という変数名を新たに「$EEE」すなわち「EEE」というセンサデータ識別子でのセンサデータ値を取り込むことを示している。
一方で、識別子が「ResultOut」のレコード31−5は、通信部17を用いたネットワーク通信を行い、「O」すなわち結果の出力を行うための設定の例である。ここでは、イーサネット(登録商標)通信デバイス「ETH0」でのSSL通信を用いたMQTTプロトコルを用いて、MQTTブローカに対して特定のトピック名を用いてパケットを送付することで異常診断の結果を出力する。なお、この例では異常診断の結果は、「src」パラメタとして指定する結果出力が所定のファイルに蓄えられており、このファイルを用いてトピックデータを生成して送付することが示されている。
また、出力として異常診断装置が具備する表示部19の1つであるLED(発光ダイオード)を点灯させることも可能である。その例として、識別子が「Alert0」のレコード31−6では、結果出力の所定のファイル中の「%PRED_RES%」すなわち結果データの識別子「PRED_RES」の値が「0.8」以上となった条件で「LED1」を点灯することが示されている。
演算モジュールクラス定義テーブル32は、複数種類の演算モジュールクラスの定義を管理するために利用されるテーブルであり、本異常診断装置2の開発者等により予め作成される。
演算モジュールクラス定義テーブル32は、図5に示すように、演算モジュールクラス名欄32A、内部変数欄32B、初期化動作欄32C、終了時動作欄32D、逐次処理動作欄32E、レジューム入力動作欄32Fおよびレジューム出力動作欄32Gを備えて構成される。なお図において、演算モジュールクラス定義テーブル32の1つのレコード(行)が1つの演算レジュームクラスに相当する。
そして演算モジュールクラス名欄32Aには、対応する演算モジュールクラスの名称(演算モジュールクラス名)が格納され、内部変数欄32Bには、対応する演算モジュールクラスにおける内部データとしての内部変数が格納される。また初期化動作欄32C、終了時動作欄32D、逐次処理動作欄32E、レジューム入力動作欄32Fおよびレジューム出力動作欄32Gには、いわゆるメソッド、あるいは、関数APIとして、対応する演算モジュールのオブジェクトを生成する際に処理する動作(初期化動作)、対応するオブジェクトが終了する際の動作(終了動作)、具体的な演算処理の内容(逐次処理動作)、レジュームデータを取得する際の動作(レジューム入力動作)、または、レジュームを出力する際の動作(レジューム出力動作)がそれぞれ格納される。演算モジュールクラスは、オブジェクト指向プログラミング言語でのクラス定義に相当する。ただし、他のプログラミング言語で規定することを否定するものではなく、また、ハードウェアによりそれらの処理動作を実現することを妨げるものではない。
初期化動作としては、オブジェクト毎に用いる入力データ名の列挙、および、出力データ名の列挙を取得してオブジェクト内部変数に設定する処理を行ったり、オブジェクト特有の処理を最初の1度だけ行ったりする動作を規定することができる。なお、図5において、内部変数欄32Bに記載されている丸文字(「丸1」など)は初期化時に渡す引数およびその順序を表しており、初期化動作欄32C、終了時動作欄32D、逐次処理動作欄32E、レジューム入力動作欄32Fおよびレジューム出力動作欄32G中の丸かっこ(「(1)」など)は処理の順序を示すとして説明する。
また終了時動作としては、初期化時にファイルを開く動作を行った場合にそのファイルを安全に閉じたり、また、動作に必要なメモリ領域を確保した場合にそれを安全に廃棄したりする動作を規定することができる。さらに逐次処理動作としては、センサデータを取得する毎に演算ルールとして設定した順に呼び出され、それぞれのオブジェクトで行う動作を規定することができる。特に、入力データ名を用いて入力となるデータを取得したり、入力データを用いた特有の演算や処理を行ったり、演算や処理の結果を、出力データ名を用いて新規追加あるいは更新を行ったりすることができる。
一方、演算ルールテーブル33は、異常診断を行うために実行すべき演算の順序(正確にはその演算を行う演算モジュールオブジェクトの逐次処理動作の実行順序)と、演算モジュールクラス定義テーブル32(図5)で定義されているこれら演算モジュールクラスから生成する演算モジュールオブジェクトの内部変数を与えるための値とをそれぞれ規定したテーブルであり、本異常診断装置2が実行すべき異常診断処理の内容に応じて予め作成される。この演算ルールテーブル33は、図6に示すように、順序欄33A、モジュールID欄33Bおよび演算モジュールクラス欄33Cと、複数の引数欄33D〜33Hとを備えて構成される。演算ルールテーブル33では、1つのレコードが1つの演算モジュールオブジェクトに対応する。
そして演算モジュールクラス欄33Cには、生成する演算モジュールオブジェクトが属する演算モジュールクラスがそれぞれ格納され、順序欄33Aには、対応する演算モジュールオブジェクトの実行順位が格納され、モジュールID欄33Bには、その演算モジュールオブジェクトに付与された識別子(モジュールID)が格納される。また各引数欄33D〜33Hには、演算モジュールクラス定義テーブル32で定義されている対応する演算モジュールクラスの内部変数を与えるための値が格納される。なお、順序に関してはテーブルの最上段から下に向かい順序付けることが分かっている場合にはテーブル内の要素としてなくてもよいし、また、引数は各演算モジュールクラスの定義に従った順序および個数を規定するが可変長であってもよいし、各々の対応するパラメタ名と共に規定することで順不同であってもよい。
図6の例では、1番目のレコード33−1では、「IN_P1」との識別子で演算モジュールクラス(図5)のうち「LOAD_CSV」クラス(図5のレコード32−1)の演算モジュールオブジェクトを生成すべきことが規定されており、その演算処理に用いるパラメタとして指定のCSVファイルを入力すべきことが規定されている。なお、このCSVファイルは図4の入出力テーブル31の識別子が「Peripheral1」のレコード31−3の情報を用いてデータ生成部3のいずれかからイーサネット(登録商標)通信を用いて取得したデータであり、「CCC」というデータ識別子が含まれていることは既に説明した。
また2番目のレコード33−2では、識別子が「MinC」で「MOV_MIN」クラス(図5のレコード32−2)であり、入力データの識別子を上述の「CCC」、バッファサイズを「5」とし、出力データの識別子として「minCCC」を用いるべきことが規定されている。同様に、3番目のレコード33−3では、識別子が「AveC」で「MOV_AVE」クラス(図5のレコード32−6)であり、識別子が「minCCC」のデータを入力し、識別子が「aveCCC」のデータを出力すべきことが規定されている。
4番目のレコード33−4では、識別子が「DiffC」で「DIFF」クラス(図5のレコード32−2)であり、識別子が「CCC」のデータおよび識別子が「aveCCC」のデータを入力データとして識別子が「diffCCC」のデータを出力すべきことが規定されている。また5番目のレコード33−5では、識別子が「ThC」で「THRESHOLD」クラス(図5のレコード32−4)であり、識別子が「diffCCC」のデータを入力として、定数値「θ」を指定し、識別子が「thCCC」のデータを出力すべきことが規定されている。
また6番目のレコード33−6では、識別子が「TrendC」で「MOV_LEAST_SQ_2」クラス(図5のレコード32−7)であり、識別子が「CCC」のデータを入力とし、バッファサイズを「30」として、出力する3つのデータの識別子をそれぞれ「a」、「b」、「c」とすべきことが規定され、7番目のレコード33−7では、識別子が「SubEqC」で「SUB_STATIC」クラス(図5のレコード33−7)であり、識別子が「c」のデータを入力データとし、定数を「λ」として、識別子が「d」のテータを出力すべきことが規定されている。
さらに8番目のレコード33−8では、識別子が「PredDeg」で「SOLVE_EQ_2」クラス(図5のレコード32−8)であり、3つの入力データの識別子をそれぞれ「a」、「b」、「d」とし、「T」を識別子とするデータを出力すべきことが規定され、9番目のレコード33−9では、識別子が「OUT_R」で、「OUT_CSV」クラス(図5のレコード32−9)であり、出力CSVファイル名を指定し、出力するデータの識別子を「TIME_STAMP」、「CCC」、「thCCC」、「T」の4つとすべきことが規定されている。
他方、現在データテーブル34は、一単位の演算処理オブジェクト実行のタイミングと、演算処理部13が実行した各演算モジュールオブジェクトの実行結果とを、キーと値を組としたマップとして現在データ管理部14が管理するために利用するテーブルであり、図7に示すように、キー欄34Aおよび値欄34Bを備えて構成される。
そしてキー欄34Aには、一単位分の異常診断処理を開始するタイミングで時計部21(図2)から取得した現在時刻(「TIME_STAMP」)や、各演算モジュールオブジェクトの出力データの識別子がキーとしてそれぞれ格納される。また、値欄34Bには、キーが現在時刻(「TIME_STAMP」)の場合には、上述のように時計部21から取得した現在時刻が格納され、キーが識別子の場合には、そのキーを識別子とするいずれかの演算モジュールオブジェクトの出力データの値が格納される。
なお、現在データテーブル34に対して、データの新規追加を行った演算モジュールオブジェクトの識別子を各現在データと共に記録しておき、その演算モジュールオブジェクト以外の演算モジュールオブジェクトがその現在データを更新できないようにしてもよい。また、このようなデータの更新、読み取り、削除などのアクセス権を演算モジュールモジュールオブジェクトやそれ以外の異常管理/可視化装置(図1の5)および装置管理サーバ(図5の6)の単位およびそれぞれのユーザなどへの利用権限の情報を付与して管理、制限してもよい。
レジュームデータテーブル35は、演算処理部13が実行した各演算モジュールオブジェクトのレジュームデータをレジュームデータ管理部15が管理するために利用するテーブルであり、図8に示すように、モジュールID欄35Aおよびレジュームデータ欄35Bを備えて構成される。
そしてモジュールID欄35Aには、演算処理部13が実行する各演算モジュールオブジェクトがそれぞれ格納され、レジュームデータ欄35Bには、対応する演算モジュールオブジェクトが出力したレジュームデータがすべて格納される。
なお、設定テーブル30、入出力テーブル31、演算ルールテーブル33、演算モジュールクラス定義テーブル32、現在データテーブル34、および、レジュームデータテーブル35は、いずれも異常診断装置2内に設けられたメモリまたは図示しない記憶領域等に格納されて保持される。ただし、設定テーブル30、入出力テーブル31および演算ルールテーブル33を制御部10内に設けられたメモリまたは図示しない記憶領域に格納し、演算モジュールクラス定義テーブル32を演算モジュール管理部12内に設けられたメモリまたは図示しない記憶領域に格納し、現在データテーブル34を現在データ管理部14内に設けられたメモリまたは図示しない記憶領域に格納し、レジュームデータテーブル35をレジュームデータ管理部15内に設けられた図示しないメモリまたは記憶領域に格納して管理するようにしてもよい。
(1−3)表示部による操作画面の表示例および操作部の構成例
図9〜図11は、表示部19による操作画面の表示例および操作部20の構成例を示す。この例において、表示部19は、LCD(液晶ディスプレイ)40と、第1および第2のLED41A,41Bとを備えて構成されており、第1のLED41Aにより電源状態、第2のLED41Bによりアラート状態をそれぞれ表示するものとする。
LCD40には、異常診断装置2の状態や診断中の装置情報などを表示可能とし、表示内容のモードを表す文字列42や、装置プロパティを表す文字列43、動作状態を表す文字列44、データ入力の有無を表す第1の状態表示マーク45A、診断状態を表す第2の状態表示マーク45B、異常診断/可視化装置5(図1)や装置管理サーバ6(図1)との接続状態を表す第2の状態表示マーク45C、現在のモードや装置状態において操作可能な候補を表す文字列が表示される第1〜第4の操作候補マーク46A〜46Dなどが表示される。
また操作部20は、4つの物理的な第1〜第4の操作ボタン47A〜47Dで構成される。この第1〜第4の操作ボタン47A〜47Dは、それぞれLCD40内の第1〜第4の操作候補マーク46A〜46Dにそれぞれ対応する位置に配置されており、作業者39(図1)がLCD40に表示された操作可能な操作候補のうちの所望する操作候補に対応する第1〜第4の操作ボタン47A〜47Dを1つ押圧することにより、その第1〜第4の操作ボタン47A〜47Dに対応する操作を選択することができる。
図9は、異常診断処理の実行前のLCD40の表示例を示すものであり、装置状態を表す文字列44として、異常診断開始の指示待ちの状態であることを表す「Ready to start」という文字列が表示され、第1〜第4の操作候補マーク46A〜46Dのうち、第1の操作候補マーク46Aに異常診断処理の開始を表す「Start」という文字列が表示され、診断状態を表す第2の状態表示マーク45Bがオフ状態(異常診断処理を実行していない状態)を表す表示状態となっている。
一方、図10は、異常診断処理の実行中のLCD40の表示例を示すものであり、装置状態を表す文字列44が異常診断処理を実行中であることを表す「Running…」に変化しており、第1の操作候補マーク46Aに表示されていた「Start」という文字列が非表示となり代わりに、第2の操作候補マーク46Bに異常診断処理の停止を表す「Stop」という文字列が表示され、診断状態を表す第2の状態表示マーク45Bがオン状態(異常診断処理を実行中の状態)を表す表示状態となっている。
(1−4)異常診断装置において実行される各種処理
次に、本異常診断装置2において実行される異常診断処理の具体的な処理の流れについて説明する。
(1−4−1)異常診断処理
図12は、制御部10により実行される異常診断処理の処理手順を示す。制御部10は、異常診断装置2の電源が投入されるとこの異常診断処理を開始するとして説明する。まず、異常診断装置2の診断に関係する各種動作設定を行うため、設定テーブル30および入出力テーブル31を取得し、各動作パラメタを規定する(S1)。また制御部10は、データ取得部11、結果出力部16および通信部17に対して、必要なパラメタを用いて設定を行う(S2)。以上により、初期化や設定、演算の準備が終了する。
続いて、制御部10は、演算モジュール管理部12に対して、異常診断のために必要なすべての演算モジュールオブジェクトを生成するよう指示(以下、これを演算モジュール生成処理実行指示と呼ぶ)を与える(S3)。かくして、演算モジュール管理部12は、この演算モジュール生成処理実行指示が与えられると、図14について後述するように、演算モジュールクラス定義テーブル32および演算ルールテーブル33を参照しながら、異常診断に必要な各演算モジュールオブジェクトをそれぞれ生成する。
また制御部10は、レジュームデータ管理部15に対して、演算処理部13が実行する各演算モジュールオブジェクトのレジュームデータが存在する場合(例えば、前回の異常診断処理が途中で中止された場合)に、そのレジュームデータを対応する演算モジュールオブジェクトに設定するよう指示(以下、これをレジュームデータ入力処理実行指示と呼ぶ)を与える(S4)。かくして、レジュームデータ管理部15は、このレジュームデータ入力処理実行指示が与えられると、図16について後述するように、レジュームデータテーブル35にレジュームデータが保存されている演算モジュールオブジェクトの当該レジュームデータを読み出して演算処理部13に出力することで、各演算モジュールオブジェクトがこれを取得して前回中止された時点での内部変数や内部状態を復元する。
次いで、制御部10は、それまでにユーザの操作に応じた操作指示が操作部から与えられている場合にはその操作指示を取得し(S5)、現在、異常診断を実行中であり、かつステップS5で取得した操作指示が異常診断を停止すべき旨の指示であった(つまり図10の状態で、「Stop」という文字列が表示された第2の操作候補マーク46Bに対応する操作部20の第2の操作ボタン47Bが押圧された)か否かを判断する(S6)。
また制御部10は、ステップS6の判断で否定結果を得ると、現在、異常診断を停止中であり、かつステップS5で取得した操作指示が異常診断を開始すべき旨の指示であった(つまり図9の状態で「Start」という文字列が表示された第1の操作候補マーク46Aに対応する操作部20の第1の操作ボタン47Aが押圧された)か否かを判断する(S7)。
そして制御部10は、この判断で否定結果を得るとステップS5に戻り、この後、ステップS6またはステップS7で肯定結果を得るまで、ステップS5〜ステップS7の処理を繰り返す。従って、制御部10は、この間、異常診断を実行中にその停止指示が入力され、または、異常診断を停止中にその実行指示が入力されるのを待ち受けている状態となる。
やがて、図9の状態で操作部20の第1の操作ボタン47Aが押圧されると(S7:YES)、制御部10は、時計部21から現在時刻を取得する(S8)。また制御部10は、設定テーブル30から異常診断の実行周期(ターゲット欄30Aに「ANALYTICS_EXEC」が格納されているレコードのパラメタ欄30Bに格納されている「INTERVAL」の値であり、図3では「1000」ミリ秒)を取得し、前回の異常診断を終了してから上記実行周期の時間が経過したか否かを判断する(S9)。
制御部10は、この判断で否定結果を得るとステップS5に戻り、この後、ステップS6またはステップS9のいずれかにおいて肯定結果を得るまでステップS5〜ステップS9の処理を繰り返す。
そして制御部10は、やがて前回の異常診断を終了してから上記実行周期の時間が経過することによりステップS9で肯定結果を得ると、データ取得部11からそれぞれの最新の入力データを取得する(S10)。
なお、入力データのデータフォーマット例を図13に示す。データ生成部3より入力されるデータは、設定テーブル30によって指定された入出力テーブル31(図3のレコード30−4を参照)に従いデータ取得部111〜103を設定することで指定されるデータ取得方法によりデータを入力する。例えば、図4の入出力テーブル31において識別子「Peripheral1」のレコード31−3で指定するデータ生成部3から、上述のように「CCC」というデータ識別子により選定したデータ部分を入力することとなり、データ取得部11内では最新の値、図13の例では「0.963」として更新する。この際、時計部21(図2)から現在時刻を取得して名称「TIME_STAMP」と共にその時刻を記録してもよい(図13参照)。このようにある瞬間での「CCC」の値をセンサデータとして取得する。その他のデータ取得部11も同様にデータを取得する。
続いて、制御部10は、演算処理部13に対して、演算モジュール管理部12が生成した各演算モジュールオブジェクトを逐次実行するモジュール逐次動作処理を実行すべき旨の指示(以下、これをモジュール逐次動作処理実行指示と呼ぶ)を与える(S11)。これにより演算処理部13においてかかるモジュール逐次動作処理が実行される。
そして制御部10は、演算処理部13がモジュール逐次動作処理を終了すると、結果出力部16に対して、当該モジュール逐次動作処理により得られた異常診断の処理結果を出力すべき旨の指示(以下、これを結果出力処理実行指示と呼ぶ)を与える(S12)。そして制御部10は、この後、ステップS5に戻り、ステップS5以降を繰り返す。
一方、制御部10は、上述のような異常診断の実行中に、図10の「Stop」という文字列が表示された第2の操作候補マーク46Bに対応する操作部20の第2の操作ボタン47Bが押圧されることによりステップS6で肯定結果を得ると、レジュームデータ管理部15に対して、それまで演算処理部13において実行されていた各演算モジュールオブジェクトが保持するそれまでの演算結果をレジュームデータとして取得するレジューム出力処理を実行すべき旨の指示(以下、これをレジューム出力処理実行指示と呼ぶ)を与える(S13)。
続いて、制御部10は、演算モジュール管理部12に対して、それまで演算処理部13が実行していたすべての演算モジュールオブジェクトの実行を終了するための処理であるモジュール終了動作処理を実行するよう指示(以下、これをモジュール終了動作実行指示と呼ぶ)を与える(S14)。
次いで、制御部10は、データ取得部11での通信の適切な終了、通信部17で生成した通信路の適切な終了、その他、利用したすべてのメモリを廃棄するなどの終了処理を実行し(S15)、この後、この異常診断処理を正常終了する。
(1−4−2)演算モジュール生成処理
図14は、図12について上述した異常診断処理のステップS3において、制御部10から上述の演算モジュール生成処理実行指示が与えられた演算モジュール管理部12により実行される演算モジュール生成処理の具体的な処理内容を示す。
演算モジュール管理部12は、制御部10からかかる演算モジュール生成処理実行指示が与えられると、この図14に示す演算モジュール生成処理を開始し、まず、演算モジュールクラス定義テーブル32を取得する(S20)。
続いて、演算モジュール管理部12は、以下の処理で利用する図15に示す演算モジュールオブジェクトリスト50を初期化する(S21)。
この演算モジュールオブジェクトリスト50は、演算処理部13が演算ルールテーブル33で規定された演算順序に基づいて演算モジュールオブジェクトを順番に実行するために利用するリストであり、順序欄50A、モジュールID欄50Bおよび演算モジュールオブジェクト欄50Cを備えて構成される。そして、演算モジュールオブジェクト欄50Cには、ステップS22以降の処理により演算モジュール管理部12により順次生成される演算ルールテーブル33で規定された各演算モジュールオブジェクトの実体がそれぞれ格納され、モジュールID欄50Bには、対応する演算モジュールオブジェクトの識別子(モジュールID)が格納される。また順序欄50Aには、演算ルールテーブル33で規定された対応する演算モジュールオブジェクトを実行すべき順序が格納される。なお、順序に関してはテーブルの最上段から下に順序付けることが分かっている場合には順序欄50Aを設けなくてもよい。
次いで、演算モジュール管理部12は、演算ルールテーブル33のファイルを取得する(S22)。具体的に、演算モジュール管理部12は、設定テーブル30(図3)におけるターゲット欄30Aに「ANALYTICS_RULE」が格納されたレコード30−5のパラメタ欄30Bを参照して、演算ルールテーブル33のファイルへのファイルパスと、そのファイルのファイル名とを取得し、取得したファイルパスの先に存在する演算ルールテーブル33のファイルを取得する。
この後、演算モジュール管理部12は、ステップS22で取得した演算ルールテーブル33のファイルを開き(S23)、演算ルールテーブル33のレコード33−1〜33−9のうち、順序欄33Aに格納されている順序が最も早く、かつ未処理のレコード33−1〜33−9の情報を読み込む(S24)。また演算モジュール管理部12は、読み込んだ情報がファイルの終端を示す終了コードであるか否かを判断する(S25)。
演算モジュール管理部12は、この判断で否定結果を得ると、そのレコード33−1〜33−9の情報を列要素毎の情報に分解する(S26)。また演算モジュール管理部12は、この分解により得られたそのレコード33−1〜33−9の演算モジュールクラス欄33Cに格納されていた演算モジュールクラス名が演算モジュールクラス定義テーブル32(図5)のいずれかのレコード32−1〜32−9の演算モジュールクラス名欄32A(図5)内に格納されているか否かを判断する(S27)。そして演算モジュール管理部12は、この判断で否定結果を得ると、所定のエラー処理を実行し、この後、この演算モジュール生成処理を終了する。
これに対して、演算モジュール管理部12は、ステップS27の判断で肯定結果を得ると、ステップS24で読み込んだ情報に基づいて、そのレコード33−1〜33−9に対応する演算モジュールオブジェクトを生成する(S28)。
また演算モジュール管理部12は、生成した演算モジュールオブジェクトについて、その演算モジュールオブジェクトの他の行要素をパラメタ引数として、演算モジュールクラス定義テーブル32を参照して、その演算モジュールオブジェクトの初期化動作を実行する(S29)。
そして演算モジュール管理部12は、この初期化動作に成功したか否か(対応する演算モジュールオブジェクトを正しく生成できたか否か)を判断し(S30)、否定結果を得ると所定のエラー処理を実行した後(S32)、この演算モジュール生成処理を異常終了する。
これに対して演算モジュール管理部12は、ステップS30の判断で肯定結果を得ると、そのとき生成した演算モジュールオブジェクトを演算モジュールオブジェクトリストに登録し(S31)、この後、ステップS24に戻る。そして演算モジュール管理部12は、この後、ステップS24以降を繰り返す。この繰返し処理により、演算ルールテーブル33に規定された各演算モジュールオブジェクトが順次生成されることになる。
そして演算モジュール管理部12は、やがて演算ルールテーブル33に規定されたすべての演算モジュールオブジェクトを生成し終えることによりステップS25で肯定結果を得ると、この演算モジュール生成処理を正常終了する。
(1−4−3)レジューム入力処理
図16は、図12について上述した異常診断処理のステップS4において、制御部10から上述のレジューム入力処理実行指示が与えられたレジュームデータ管理部15により実行されるレジューム入力処理の具体的な処理内容を示す。
レジュームデータ管理部15は、かかるレジューム入力処理実行指示が制御部10から与えられると、この図16に示すレジューム入力処理を開始し、まず、レジュームデータテーブル35(図8)を取得する(S40)。またレジュームデータ管理部15は、図14について上述した演算モジュール生成処理において演算モジュール管理部12が生成した上述の演算モジュールオブジェクトリスト50(図15)を、演算処理部13を介して取得する(S41)。
続いて、レジュームデータ管理部15は、ステップS41で取得した演算モジュールオブジェクトリスト50に登録されている各演算モジュールオブジェクトの中から、ステップS44以降の処理が未処理でかつ、演算モジュールオブジェクトリスト50の順序欄50Aに格納された順序が最も小さい演算モジュールオブジェクトのモジュールIDを1つ取得する(S42)。
次いで、レジュームデータ管理部15は、ステップS42でモジュールIDを取得できなかったか否か(つまり演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトに対してステップS44以降の処理を実行し終えたか否か)を判断する(S43)。
レジュームデータ管理部15は、この判断で否定結果を得ると、ステップS40で取得したレジュームデータテーブル35の各レコード35−1〜35−3(図8)の中に、ステップS42で取得したモジュールIDと同一のモジュールIDがモジュールID欄35Aに格納されたレコードが存在するか否かを判断する(S44)。そしてレジュームデータ管理部15は、この判断で否定結果を得るとステップS42に戻る。
これに対して、レジュームデータ管理部15は、ステップS44の判断で肯定結果を得ると、レジュームデータテーブル35のレコード35−1〜35−3のうち、ステップS42で取得したモジュールIDと同一のモジュールIDがモジュールID欄35Aに格納されたレコード35−1〜35−3のレジュームデータ欄35Bに格納されているレジュームデータを取得し、取得したレジュームデータに基づいて、演算モジュールクラス定義テーブル32(図5)においてその演算モジュールオブジェクトについて定義されているレジューム入力動作(図5の対応するレジューム入力動作欄32Fに格納されている動作)を実行する(S45)。
そしてレジュームデータ管理部15は、ステップS45のレジューム入力動作が成功したか否かを判断し(S46)、否定結果を得ると所定のエラー処理を実行した後(S47)、このレジューム入力処理を異常終了する。
これに対して、レジュームデータ管理部15は、ステップS46において肯定結果を得ると、ステップS42に戻り、この後、ステップS42で取得するモジュールIDを順次他のモジュールIDに切り替えながら、ステップS42以降の処理を繰り返し実行する。
そしてレジュームデータ管理部15は、やがて演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトについてステップS42以降の処理を実行し終えることによりステップS43で肯定結果を得ると、このレジューム入力処理を正常終了する。
なお、演算モジュールクラスにレジューム入力動作が規定されていない場合には、このレジューム入力処理を省略してもよい。
(1−4−4)モジュール逐次動作処理
図17は、図12について上述した異常診断処理のステップS11において、制御部10から上述のモジュール逐次動作処理実行指示が与えられた演算処理部13により実行されるモジュール逐次動作処理の具体的な処理内容を示す。
演算処理部13は、制御部10からかかるモジュール逐次動作処理実行指示が与えられると、この図17に示すモジュール逐次動作処理を開始し、まず、図15について上述した演算モジュールオブジェクトリスト50を演算モジュール管理部12から取得する(S50)。
続いて、演算処理部13は、取得した演算モジュールオブジェクトリスト50に登録されている演算モジュールオブジェクトの中から、対応する順序欄50Aに格納された順序が最も小さく、かつ後述するステップS53の処理を実行していない演算モジュールオブジェクトを1つ取得する(S51)。
次いで、演算処理部13は、ステップS51で演算モジュールオブジェクトを取得できなかったか否か(つまり演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトに対してステップS53の処理を実行し終えたか否か)を判断する(S52)。
そして演算処理部13は、この判断で否定結果を得ると、ステップS51で取得した演算モジュールオブジェクトに関するクラス定義の逐次処理動作を行う逐次処理動作処理を実行する(S53)。
続いて、演算処理部13は、ステップS53の逐次処理動作処理が成功したか否かを判断する(S54)。そして演算処理部13は、この判断で否定結果を得ると、所定のエラー処理を実行した後(S55)、このモジュール逐次動作処理を異常終了する。
これに対して演算処理部13は、ステップS54の判断で肯定結果を得ると、ステップS51に戻り、この後、ステップS51において選択する演算モジュールオブジェクトを、演算モジュールオブジェクトリスト50の対応する順序欄50Aに格納された順序が最も小さく、かつステップS53の処理を実行していない他の演算モジュールオブジェクトに順次切り替えながらステップS51〜ステップS54の処理を繰り返す。これにより演算モジュールオブジェクトリスト50に登録された各演算モジュールオブジェクトがその実行順序通りに順次実行されていくことになる。
そして演算処理部13は、やがて演算モジュールオブジェクトリスト50に登録されたすべての演算モジュールオブジェクトを実行し終えることによりステップS52で肯定結果を得ると、このモジュール逐次動作処理を正常終了する。
ここで、上述のモジュール逐次動作処理のステップS53で実行される逐次処理動作処理の具体的な処理内容を図18に示す。ここでは、演算モジュールオブジェクトリスト50(図15)に登録されたモジュールIDが「AveC」である演算モジュールオブジェクトの逐次処理動作について説明する。
なお演算モジュールクラス定義テーブル32(図5)を参照すると、モジュールIDが「AveC」の演算モジュールオブジェクトは「MOV_AVE」、すなわち移動平均処理(Moving Average)クラスの演算モジュールオブジェクトであることが分かる。ここでは、かかる移動平均処理として単純移動平均処理を行うこととし、直近の10個のデータの相加平均を求めるものとして説明する。
演算処理部13は、モジュール逐次動作処理のステップS53に進むと、この図18に示す逐次処理動作処理を開始し、まず、現在データ管理部14が管理する現在データテーブル34(図7)上で、初期化動作処理時に規定した入力データの識別子をキーにして当該入力データを検索する(S60)。
続いて、演算処理部13は、かかるキーに対応する入力データが現在データテーブル34上に存在するか否かを判断する(S61)。そして演算処理部13は、この判断で否定結果を得ると、この逐次処理動作処理を異常終了する。従って、この場合には、この逐次処理動作が失敗したことになる。ただし、入力データが存在しない場合には今回の逐次処理動作を意図的にスキップしたとして、成功としてもよい。
これに対して、演算処理部13は、ステップS61の判断で肯定結果を得ると、ステップS60の検索により検出した入力データの値を現在時刻における入力データの値として取得し(S62)、この演算モジュールオブジェクトが持つリングバッファの一番古いデータを削除した後、取得した入力データを登録する(S63)。また演算処理部13は、このリングバッファに格納されているこれまでの入力データを用いて単純相加平均の値を計算する(S64)。
具体的に、演算処理部13は、図19に示すように、データのバッファ数を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」を演算結果として出力する。なお、このときのバッファは、リスト構造やベクトル、リングバッファとして構成してもよい。また、レジューム入力動作処理(図5のレジューム入力動作欄32Fを参照)では、レジュームデータ管理部15が管理しているレジュームデータテーブル35(図8)から前回のレジューム出力動作処理(図5のレジューム出力動作欄32Gを参照)で記録した前回の動作終了時のリングバッファや最後のバッファ位置を復元する。
続いて、演算処理部13は、初期化動作処理(図5の初期化動作欄32Cを参照)時に規定した出力データの識別子をキーとして、そのキーを現在データテーブル34上で検索する(S65)。また演算処理部13は、この検索によりかかるキーを検出できたか否か(そのキーが現在データテーブル34上に存在するか否か)を判断する(S66)。
このステップS66の判断で否定結果を得ることは、図17について上述したモジュール逐次動作処理を開始してからその演算モジュールオブジェクトを初めて実行したことを意味する。かくして、このとき演算処理部13は、そのキー(出力データの識別子)と対応付けて、ステップS64の処理により得られた値を現在データテーブル34に新規に登録し(S67)、この後、この逐次処理動作処理を正常終了して図17のモジュール逐次動作処理に戻る。
これに対して、ステップS66の判断で肯定結果を得ることは、モジュール逐次動作処理を開始してからその演算モジュールオブジェクトを少なくとも1回は実行している(つまり逐次処理動作を繰り返している)ことを意味する。かくして、このとき演算処理部13は、現在データテーブル34におけるそのキーに対応する値欄34Bに格納されている値を、そのときのステップS64の処理により得られた値に更新し(S68)、この後、この逐次処理動作処理を正常終了して図17のモジュール逐次動作処理に戻る。
このように、演算モジュールクラスの逐次処理動作は、新たに0個以上のデータを入力として、それに関する演算を行い、0個以上の演算結果データを出力する動作である。例えば、指定する名称のCSVファイルやデータベースのテーブル、その他特定の形式のファイル読み込みながら、レコード(行)ごとにカラム名をキーとしてその値を逐次登録する入力系モジュール、および、その逆に、それぞれの形式でファイル等に出力する出力系モジュールが考えられる。また、入力データを指定して特定の値の範囲を取る際に、データを登録するか否かを条件づける、あるいは、他の入力データとの入れ替えや2つ以上の入力データを選択して登録する、文字列の数値化や数値の文字変換、行と列の変換などのデータフィルタ系モジュールでもよい。また、入力データの絶対値・対数・逆数、一定期間前のデータの遅延出力などの単項演算系モジュール、区間窓を移動しながらの累積値、平均・分散・共分散・最大/最小・メディアン、別途入力データとする平均と分散の値を用いた正規化とその逆の計算、漸化式、最小二乗法を用いた多項式係数近似、などの値を求める統計処理系モジュール、入力データに対して定数や他の入力データを用いた四則演算や、行列演算、特定の多項式などの数式演算などの計算系モジュールであってもよい。また、1つ以上の入力データに関する、機械学習などの物理・統計モデルを用いたモデルでの学習系モジュールや、その学習結果を用いたクラス分類、閾値などの条件に基づく判断により1つ以上の結果を出力するなどの識別系モジュールであってもよい。さらに、論理積・論理和、論理否定などの論理演算系モジュールや、高速フーリエ変換・ケプストラム変換などの時系列データと特定特徴空間データの間を変換する変換系モジュールであってもよい。
また、各演算モジュールクラスでは、リングバッファなどのバッファを用意して過去のデータや計算の途中の値を保持するように構成してもよいし、一般化・共通化に応じて現在データ管理部にてこれらバッファを管理してもよい。その他にも、1つ以上の入力データを1つ以上の出力データに逐次写像として変換する、あらゆる数値計算モジュールやデータ処理モジュールを用意することができる。ただし、計算コストの高い複雑な演算や機械学習のモデル学習を行う演算モジュールは、一つの診断周期内ですべてのモジュール演算の終了を行う、すなわちリアルタイム処理が完了しなくなる可能性があるため、安価な低リソースの装置での動作には注意が必要である。その場合には、学習系モジュールの処理は予めリソースの豊富な装置等で行い、学習結果のモデルのパラメタを別途ファイルなどを用いて伝達することで、異常診断処理の初期化動作においてこのパラメタによるモデルの再現を行うことで識別系モジュールの動作を実施する、などの処理分担を行うことができる。
図20は、図15の演算モジュールオブジェクトリスト50に従って演算処理部13により実行される上述のモジュール逐次動作処理(図17および図18)の流れの具体例を示す。
演算処理部13は、データが入る毎に、演算モジュールオブジェクトが指定した入力データ(図13を参照)を用いて逐次演算を行い、結果を出力していく。ここでは、データ生成部3から取得した1種類のデータ「CCC」を、まず1番目の演算モジュールオブジェクトである「LOAD_CSV」クラス(図15および図6参照)の演算モジュールオブジェクト60を用いて入力し、現在データ管理部14を介して現在データテーブル34に格納させる。ここでは横軸に時刻tを置き、取得した現在の入力データ61の履歴を列挙してグラフ化した例である。
この取得した識別子「CCC」のデータの値は、2番目の演算モジュールオブジェクトである「MOV_WIN」クラス(図15および図6参照)の演算モジュールオブジェクト63の入力となるが、この演算モジュールクラスは内部にメモリ2B(図1)の一部でなるリングバッファを持っており、その逐次処理動作で最新のデータを入力すると、バッファサイズの最古データを削除してから追加することで現在の値の組62を保持しており、バッファ内のすべての中から最小の値を識別子が「minCCC」のデータ64の値として出力する。
3番目の演算モジュールオブジェクトである「MOV_AVE」クラス(図15および図6参照)の演算モジュールオブジェクト66は、識別子が「minCCC」のデータの値を入力としてバッファを更新して現在の値の組65を更新し、図5に示すように移動平均処理結果の平均値を識別子が「aveCCC」のデータ67の値として出力する。
4番目の演算モジュールオブジェクトである「DIFF」クラス(図15および図6参照)の演算モジュールオブジェクト68は、識別子が「aveCCC」のデータ67と、識別子が「CCC」のデータ61との差分を計算し、計算結果を識別子が「diffCCC」のデータ69の値として出力する。
5番目の演算モジュールオブジェクトである「THRESHOLD」クラス(図15および図6参照)の演算モジュールオブジェクト71は、入力データとして識別子が「diffCCC」のデータ64を、閾値である定数値70(ここでは「θ」)と比較し、データ64が定数値70と等しいか、または、大きい場合には「1.0」を、データ64が定数値70よりも小さい場合には「0.0」を識別子が「thCCC」のデータ72として出力する。
ここまでの処理により、「CCC」という入力データ61を順に、値の区間最小値を移動平均によりスムージングした値をベースラインにして、それよりも定数値70(閾値θ)を超えるスパイク状の異常データを検出したこととなる。
次の6番目の演算モジュールオブジェクトである「MOV_LEAST_SQ_2」クラス(図15および図6参照)の演算モジュールオブジェクト73は、識別子が「CCC」のデータ61の値を、リングバッファで一定区間保持して、そのデータをy、その時刻をtとして最小二乗法などを用いて次式
で曲線として近似するための係数「a」、「b」および「c」を求め、それぞれを出力する。この係数を用いた式は、識別子が「CCC」のデータ61の2次曲線による近似曲線を示している。
7番目の演算モジュールオブジェクトである「SUB_STATIC」クラス(図15および図6参照)の演算モジュールオブジェクト77は、識別子が「c」の入力データの値から定数値「λ」を引くことで、識別子が「d」のデータとして出力する。また8番目演算モジュールオブジェクトである「EQ_SOLVER_2」クラス(図15および図6参照)の演算モジュールオブジェクト78は(1)式においてy=0となる時刻Tを次式により求める。
ただし、7番目の演算モジュールオブジェクト77の演算処理により「c」はオフセット値「λ」を引くことで「d」に置き換わっていることに注意する。また、(2)式では、プラスマイナス記号(±)により2つの解を得るが、これらのうちの加算による演算値を識別子が「T」の値79として出力する。この「T」は先の近似曲線が閾値「λ」と交差する将来の時刻を示すため、今後の「CCC」の値の近似曲線がこの時刻「T」の近傍を超える時刻を示し、この装置または部品が劣化していく状況が時刻「T」で許容範囲を超えるような予測を行ったことになる。
最後の9番目の演算モジュールオブジェクトである「OUT_CSV」クラス(図15および図6参照)の演算モジュールオブジェクト80は、上述のとおり「TIME_STAMP」、「CCC」、「thCCC」、「T」を結果ファイルにCSV形式で出力する。これは現在データ管理部14から、それぞれの識別子をキーとして取得できる値をファイルに記載することで実現する。
図21は、結果出力部16(図2)から出力される出力データの構成例を示す。結果出力部16は入出力テーブル31(図4)の出力用ブロパティ、すなわちI/O欄31Bに格納された値が「O」であるレコード31−5(識別子は「ResultOut」)およびレコード31−6(識別子は「Aleart0」)を評価することで結果を出力する。
例えば、図6の演算ルールテーブル33では、演算モジュールクラスが「OUT_CSV」(レコード33−9を参照)の演算モジュールオブジェクトにより最終的に現在データ管理部14(図2)が管理する現在データテーブル34(図7)にあるそれぞれ「TIME_STAMP」、「CCC」、「thCCC」、「T」という識別子のデータの値がCSV形式のファイルとして出現されているとする。この場合、指定された入出力テーブル31(図4)の例では、識別子が「ResultOut」(レコード31−5)に対応する設定によりこのファイルを取得し、通信部17(図2)からのイーサネット(登録商標)を用いたSSL通信を用いたMQTTプロトコルで、指定したURLのMQTTブローカに指定したトピック名を用いてパブリッシュ、すなわちデータを送出することで結果を出力する。この場合、異常管理/可視化装置5(図1)がMQTTブローカにサブスクライブ(購読)しておきこの結果データを取得することで結果伝達が実現できる。
なお、通信量を削減するために、結果データが前回から変更があった、あるいは、十分小さい数値より大きく変化した場合にのみ送出してもよい。また、異常診断装置2が動作を始めた最初の結果や一定時間経過した際の値は、前回との変化の有無にかかわらず、また変化が小さい場合であっても送出することが望ましい。
図22は、異常管理/可視化装置5(図1)における結果データの可視化画面の構成例を示す。異常管理/可視化装置5が結果データを取得すると、これらの結果データを保存したり、グラフ化したりすることができる。図22の可視化画面90では、最新の結果データの「TIME_STAMP」の値を表す文字列91や識別子が「CCC」のデータのデータ値の履歴を表すグラフ94、識別子が「thCCC」のデータの値が「1.0」となって異常なスパイクが検出された時間帯を可視化するためのフレーム95A,95Bや異常発生を表す文字列92,93、並びに、識別子が「T」のデータの表示による劣化による部品交換時期の目安を表す文字列96が表示されている。
ただし、異常管理/可視化装置5が、このような可視化画面を、別途ネットワーク38(図2)を介して接続された端末(図示せず)に表示させるようにしてもよい。このような端末での可視化画面の表示は、異常管理/可視化装置5が、Webサービスや専用のアプリケーションなどを用いてこの可視化画面の画面表示のためのスクリプトや画像などを生成し、適切な画面生成用情報を端末に送ることで実現することができる。
また入出力テーブル31(図4)における識別子が「Alert0」のレコード31−6において、キー(識別子)が「thCCC」であるデータの値が「0.8」以上の際に、図11のように表示部19の第2のLED41Bを点灯させるように設定しておくことにより、異常診断処理の処理結果を表示するようにしてもよい。
(1−4−5)レジューム出力処理
図23は、図12について上述した異常診断処理のステップS13において、制御部10から上述のレジューム出力処理実行指示が与えられたレジュームデータ管理部15により実行されるレジューム出力処理の具体的な処理内容を示す。
レジュームデータ管理部15は、制御部10からかかるレジューム出力処理実行指示が与えられると、この図23に示すレジューム出力処理を開始し、まず、レジュームデータテーブル35(図8)を初期化する(S70)。またレジュームデータ管理部15は、演算モジュールオブジェクトリスト50(図15)を、メモリ2B(図1)の自己に割り当てられた記憶領域から読み出すことにより取得する(S71)。
続いて、レジュームデータ管理部15は、ステップS71で取得した演算モジュールオブジェクトリスト50に登録されている各演算モジュールオブジェクトの中から、後述するステップS74の処理が未処理でかつ、演算モジュールオブジェクトリスト50の順序欄50Aに格納された順序が最も小さい演算モジュールオブジェクトを1つ取得する(S72)。
次いで、レジュームデータ管理部15は、ステップS72で演算モジュールオブジェクトを取得できなかったか否か(つまり演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトに対してステップS74の処理を実行し終えたか否か)を判断する(S73)。
そしてレジュームデータ管理部15は、この判断で否定結果を得ると、ステップS72で取得した演算モジュールオブジェクトについて演算モジュールクラス定義テーブル32(図5)において定義されているレジューム出力動作(図5の対応するレジューム出力動作欄32Gに格納されている動作)を実行する(S74)。
続いて、レジュームデータ管理部15は、ステップS74のレジューム出力動作が成功したか否かを判断する(S75)。そしてレジュームデータ管理部15は、この判断で否定結果を得ると所定のエラー処理を実行した後(S76)、ステップS78に進む。
これに対して、レジュームデータ管理部15は、ステップS75において肯定結果を得ると、このレジューム出力動作により得られたデータをその演算モジュールオブジェクトの識別子と対応付けて(その識別子をキーにして)レジュームデータテーブル35(図8)に登録する(S77)。
さらにレジュームデータ管理部15は、ステップS72に戻り、この後、ステップS72で取得するモジュールIDを順次未処理の他のモジュールIDに切り替えながら、ステップS72以降の処理を繰り返す。以上の繰返し処理により、演算モジュールオブジェクトリスト50に登録された各演算モジュールオブジェクトのそのときのレジュームデータが順次レジュームデータテーブル35に登録されていくことになる。
そしてレジュームデータ管理部15は、やがて演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトについて、そのレジュームデータのレジュームデータテーブル35への登録が終了することによりステップS73で肯定結果を得ると、そのレジュームデータテーブル35をファイルまたはデータベーステーブルとして保存または更新しデータ永続化を行った後(S78)、このレジューム出力処理を正常終了する。
なお、演算モジュールクラスにレジューム出力動作が規定されていない場合には、このレジューム出力処理を省略してもよい。また、このレジューム出力動作と先のレジューム入力動作は、演算モジュールオブジェクトの内部変数等の前回の値を保存・復元するための動作であるため、その入出力のデータ型や順序を合わせるように注意する必要がある。
(1−4−6)モジュール終了動作処理
図24は、図12について上述した異常診断処理のステップS14において、制御部10から上述のモジュール終了動作実行指示が与えられた演算モジュール管理部12により実行されるモジュール終了時動作処理の具体的な処理内容を示す。
演算モジュール管理部12は、制御部10からかかるモジュール終了動作実行指示が与えられると、この図24に示すモジュール終了動作処理を開始し、まず、自己が保持する演算モジュールオブジェクトリスト50(図15)を取得し(S80)、取得した演算モジュールオブジェクトリスト50に登録されている各演算モジュールオブジェクトの中から、ステップS83の処理が未処理でかつ、演算モジュールオブジェクトリスト50の順序欄50Aに格納された順序が最も小さい演算モジュールオブジェクトを1つ取得する(S81)。
次いで、演算モジュール管理部12は、ステップS81で演算モジュールオブジェクトを取得できなかったか否か(つまり演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトに対して後述するステップS83の処理を実行し終えたか否か)を判断する(S82)。
演算モジュール管理部12は、この判断で否定結果を得ると、ステップS81で取得した演算モジュールオブジェクトについて演算モジュールクラス定義テーブル32(図5)で定義されているモジュール終了時動作(図5の対応する終了時動作欄32Dに格納された動作)を実行する(S83)。
続いて、演算モジュール管理部12は、ステップS83のモジュール終了時動作が成功したか否かを判断する(S84)。そして演算モジュール管理部12は、この判断で否定結果を得ると、所定のエラー処理を実行した後(S85)、ステップS81に戻る。
これに対して、演算モジュール管理部12は、ステップS84の判断で肯定結果を得ると、そのままステップS81に戻る。そして演算モジュール管理部12は、この後、ステップS81で取得する演算モジュールオブジェクトを未処理の他の演算モジュールオブジェクトに順次切り替えながらステップS81以降の処理を繰り返し実行する。この繰返し処理により、演算モジュールオブジェクトリスト50に登録された各演算モジュールオブジェクトに対するモジュール終了時動作が順次行われることになる。
そして演算モジュール管理部12は、やがて演算モジュールオブジェクトリスト50に登録されているすべての演算モジュールオブジェクトに対するモジュール終了時動作を終了することによりステップS82で肯定結果を得ると、演算モジュールオブジェクトリスト50から演算モジュールオブジェクトをすべて削除するとともに各演算モジュールオブジェクト自体を消滅させた後(S86)、このモジュール終了動作処理を正常終了する。
(1−5)本実施の形態の効果
以上のように本実施の形態の異常診断システム1では、演算モジュールクラス定義テーブル32(図5)を参照しながら演算ルールテーブル33(図6)に定義されている各演算を実行するための演算モジュールオブジェクトをそれぞれ生成し、これら演算モジュールオブジェクトを演算ルールテーブル33で規定された演算の実行順序に従って順次実行することにより異常診断を行うため、そのとき実行しようとする異常診断の内容に応じた演算ルールテーブル33を作成するだけで種々の異常診断を行うことができる。
この場合において、本異常診断システム1では、演算モジュールオブジェクトの実行順序と入出力データの識別子とを関係付けて演算ルールテーブル33に記述しているため、複雑な診断アルゴリズムであっても、どのデータを演算しているかが各演算モジュールオブジェクトの位置で容易に想起可能となり、効率的な記述が可能となる。
また本異常診断システム1では、複数の演算モジュールオブジェクトを連携して異常診断を行うにあたり、各演算モジュールオブジェクトでの演算結果の値を識別子と共に記録し、これらを全演算モジュールオブジェクトで共有しながら逐次演算に用いていくため、現在データテーブル34(図8)を保持するメモリの使用量や計算量の高効率化が可能であり、安価な低リソース装置でも入力データをストリーム型処理でリアルタイム性の高い異常診断を提供することができる。
さらに本異常診断システム1では、異常診断処理を中断する際それぞれの演算モジュールオブジェクトの中間データを保存するためのレジューム出力動作、再開する際に復元するためのレジューム入力動作を、演算モジュールクラス定義テーブル32で定義しているため、異常診断装置2がレジューム動作を実行することができる。
以上のように、本実施の形態の異常診断システム1によれば、リアルタイムでの異常診断の早期実施に向けた装置状態や結果状態の監視に適用する、安価な低リソース装置でも効率的にストリーム型処理が可能であり、また、複雑な診断内容でもその動作アルゴリズムを効率的に記述して容易に変更可能とする、異常診断装置および方法、ならびに異常診断システムを提供することができる。
なお上述の第1の実施の形態においては、1つのデータ生成部3の1つのセンサデータから2つの異常診断を行う場合について述べたが、本発明はこれに限らず、2つ以上のデータ生成部3およびセンサデータを入力としたセンサデータ値のベクトルとなる場合の入力であっても、それぞれの要素データ独立のパタンやトレンドの検出、または、複数データを組み合わせた多元演算や分析処理による検出を、それぞれ適切な処理を順次行うことにより異常診断を行うことができる。
(2)第2の実施の形態
上述した本発明の異常診断方法を、一般的なパーソナルコンピュータやサーバ装置のようなアーキテクチャを持つコンピュータ装置を用いて、専用のプログラムを実行することで実現可能である。
本実施の形態においては、データ生成部3(図1)から逐次入力される1つの時系列センサデータから、異常な信号となるスパイク状のデータパタンの検出、および、装置の劣化状態となるデータの傾向を検出することで、対象の異常診断に提供することを例に説明する。
(2−1)本実施の形態による異常診断装置の構成
図2との対応部分に同一符号を付して示す図25は、図2について上述した第1の実施の形態の異常診断装置2に代えて図1の異常診断システムに適用される、本実施の形態による異常診断装置100のハードウェア構成を示す。本異常診断装置100は、例えば、CPU(Central Processing Unit)101、メモリ102、補助記憶部103、通信部104、外部記憶部105、表示部106および操作部107と、1または複数のデータ取得部108(1081,1082,……108N)と、時計部109とを備えて構成される。
CPU101は、プログラムの命令列を読み込みながら解釈し実行を行うことで情報の加工を行うデバイスである。メモリ102は、DRAM(Dynamic Random Access Memory)など、CPU101から直接アクセス可能で、データの書き込みと読み込みを行うことが可能だが、電源の供給がなくなると容量が消える記憶装置である。
補助記憶部103は、ハードディスク装置(HDD:Hard Disk Drive)などの磁気ドライブや光ディスク、フラッシュメモリなど、データの書き込みと読み込みを行うことが可能で、消去を行うまではデータを電源の供給が途絶えても永続的に保持する記憶装置である。
通信部104、外部記憶部105、表示部106、操作部107、データ取得部108および時計部109は、それぞれ図1や図2について上述した第1の実施の形態の通信部17、外部記憶部18、表示部19、操作部20、データ取得部11(111〜11N)、および、時計部21と同様の機能および構成を有するものであるため、ここでの説明は省略する。
これら各部は信号線・通信線であるバスBSで接続され、CPU101上で動作する基本プログラム、OS(Operating System)の処理によりデータが伝達されることで各部それぞれ定義された動作を行う。なお、OSで開示するインタフェースを用いて一般プログラムでの各部の操作が可能となるが、これらの説明は省略する。
(2−2)本異常診断装置で実行される各種処理
本異常診断装置100の電源が投入されると、CPU101は、ブートした後、補助記憶部103からOSをメモリ102に読み込むことで起動し、OSでの設定に従ってCPU101は補助記憶部103から図27について後述する異常診断プログラム120をメモリ102に読み込み、これを実行することで異常診断処理を実施することが可能となる。
図26は、本異常診断装置100における補助記憶部103上の各種テーブルの配置例を示す。補助記憶部103上には設定テーブル110、入出力テーブル111、演算ルールテーブル112、および、レジュームデータテーブル114が格納され、一部の記憶領域が結果バッファ115として確保されている。これらは、それぞれ図2について上述した第1の実施の形態の設定テーブル30、入出力テーブル31、演算ルールテーブル33、現在データテーブル34、レジュームデータテーブル35、および、結果バッファ36と同様の構成を有するものであるため、ここでの説明は省略する。
図27は、本異常診断装置100のメモリ102上に読み込まれた異常診断プログラム120の構成例を示す。異常診断プログラム120は、制御部サブプログラム121、演算モジュール管理部サブプログラム122、現在データ管理部サブプログラム123、レジュームデータ管理部サブプログラム124、結果出力部サブプログラム125、および、演算処理部サブプログラム126の各オブジェクトから構成され、これらのサブプログラムが補助記憶部103からメモリ102上にロードされる。演算モジュールクラス定義テーブル127は、演算モジュール管理部サブプログラム122からアクセス可能なオブジェクトとなっている。また、現在データテーブル128は、現在データ管理部サブプログラム123からアクセス可能なオブジェクトとなっている。これらは別途、いわゆるクラスライブラリやダイナミックリンクライブラリなどのライブラリオブジェクトとして構成されてもよい。
まず、異常診断プログラム120がメモリ102上にロードされると、制御部サブプログラム121が起動され、図12について上述した第1の実施の形態の異常診断処理を実行する。以下、同様に第1の実施の形態の演算モジュール管理部12、現在データ管理部14、レジュームデータ管理部15、結果出力部16、および、演算処理部13にそれぞれに対応する各サブプログラム(演算モジュール管理部サブプログラム122、現在データ管理部サブプログラム123、レジュームデータ管理部サブプログラム124、結果出力部サブプログラム125、または、演算処理部サブプログラム126)の処理がそれぞれ実行され、第1の実施の形態と同様の一連の処理を行うことになる。
以上のように、第1の実施の形態と同様の異常診断処理を、一般的なパーソナルコンピュータやサーバ装置のようなアーキテクチャを持つコンピュータ装置を用いて異常診断プログラムを実行することが可能であり、第1の実施の形態と同様の特徴をもつ異常診断装置100を実現可能となる。
(3)第3の実施の形態
本実施の形態では、異常診断システム130(図1)の異常診断装置131(図1)において実行される異常診断処理の演算ルールや各種設定を変更可能とする例について説明する。本実施の形態においては、演算ルールテーブル33、入出力テーブル31または設定テーブル30を外部から与えられた新たな演算ルールテーブル33、入出力テーブル31または設定テーブル30に置き換えることにより、異常診断処理の演算ルールや各設定の変更を行う。本異常診断装置131のこれ以外の機能は第1の実施の形態の異常診断装置2とすべて同様であるため、その説明は省略する。
図28は、本実施の形態による異常診断処理の処理手順を示す。本異常診断処理は、図12について上述した第1の実施の形態による異常診断処理に、装置管理サーバ6(図1)からの管理コマンドの有無を判定する判定処理(S97)、装置管理サーバ6からの管理コマンドに含まれる更新済みの演算ルールテーブル33、入出力テーブル31または設定テーブル30を仮配置する管理コマンド処理(S98)、および、仮配置した更新済の演算ルールテーブル33、入出力テーブル31または設定テーブル30を本配置する処理(S106)が追加されている点が第1の実施の形態と相違する。なお、図3の設定テーブル30では、管理サーバとの通信方法を「MAINTENANCE_SERVER」として設定しているため(レコード30−7を参照)、ここではMQTTSプロトコルを用いたメッセージ伝送の仕組みを用いることとして説明する。
本実施の形態の異常診断装置131の制御部132(図2)は、図28に示す異常診断処理を開始後、ステップS90〜ステップS96を図12のステップS1〜ステップS7と同様に処理する。この際、制御部132は、ステップS91の通信部設定に関して、通信部17を介したMQTTブローカを経由する装置管理サーバ6とのメッセージ通信を設定する。特に、MQTTでのトピック名として、ユーザ情報(図3のレコード30−1)や装置情報(図3のレコード30−2)を組み合わせた名称を購読しているとして、異常診断装置131充てのメッセージをセキュアな通信で取得可能である。
かかるトピック名の最後の「control/#」は、管理コマンドをすべて受け取ることを示し、ワイルドカードである「#」の部分には、演算ルールテーブル33の内容を更新する場合には「演算ルールテーブル更新」、入出力テーブル31の内容を更新する場合には「入出力テーブル更新」、設定テーブル30の内容を更新する場合には「設定テーブル更新」といった、演算ルールや各種設定の変更内容に応じた適切な文字列が格納される。また管理コマンドのメッセージのペイロードには、更新する演算ルールテーブル33や、入出力テーブル31または設定テーブル30とそのファイル名とが格納される。
そして制御部132は、ステップS96の処理後、装置管理サーバ6からの管理コマンドを受信したか否かを判断する(S97)。そして制御部132は、この判断で否定結果を得るとステップS99に進む。
これに対して、制御部132は、ステップS97の判断で肯定結果を得ると、受信した管理コマンドに従って後述する管理コマンド処理を実施することにより、当該管理コマンドのペイロードに含まれる更新後の演算ルールテーブル33、入出力テーブル31または設定テーブル30を仮配置用に別途用意したフォルダなどに仮配置する(S98)。
続いて、制御部132は、ステップS99に進み、この後、ステップS99〜ステップS103を図12のステップS8〜ステップS12と同様に処理する。
そして制御部132は、やがてステップS95の判断で肯定結果を得ると(つまり異常診断を実行中に図10の「Stop」という文字列が表示された第2の操作候補マーク46Bに対応する操作部20の第2の操作ボタン47Bが押圧されると)、図12のステップS13と同様にレジューム出力処理実行指示をレジュームデータ管理部15に与えるとともに(S104)、図12のステップS14と同様にモジュール終了動作実行指示を演算モジュール管理部12に与える(S105)。
さらに制御部132は、ステップS98において仮配置した更新後の演算ルールテーブル33、入出力テーブル31または設定テーブル30を次の起動時に取得可能な位置に本配置し(S106)、この後、この異常診断処理を終了する。
このようにして本配置した演算ルールテーブル33、入出力テーブル31または設定テーブル30を用いて、次回の異常診断処理の開始時のテーブル取得(S90)で、更新済みの演算ルールテーブル33、入出力テーブル31または設定テーブル30が取得され、この後、その演算ルールテーブル33、入出力テーブル31または設定テーブル30に基づいて新しい設定や演算ルールでの異常診断処理が実行されることになる。
なお図28について上述した本実施の形態の異常診断処理のステップS98における制御部132の具体的な処理内容を図29に示す。制御部は、かかる異常診断処理のステップS98に進むと、この図29に示す更新済みテーブル本配置処理を開始し、まず、受信した管理コマンドを取得し、取得した管理コマンドに含まれるトピック名を解析する(S110)。
続いて、制御部132は、この管理コマンドのトピック名の最後にある「#」に当てはめられた文字列に基づいて、この管理コマンドが演算ルールテーブル33を更新すべき旨のコマンドであるか否かを判断する(S111)。そして制御部132は、この判断で肯定結果を得ると、管理コマンドのメッセージのペイロードからファイル名や更新後の演算ルールテーブルを取得する(S112)。そして制御部132は、取得した演算ルールテーブル33を仮配置した後(S113)、このコマンド処理を終了して図28の異常診断処理に戻る。
これに対して、制御部132は、ステップS111の判断で否定結果を得ると、管理コマンドのトピック名の最後にあるワイルドカード文字「#」の部分に対応する文字列に基づいて、この管理コマンドが入出力テーブル31を更新すべき旨のコマンドであるか否かを判断する(S114)。そして制御部132は、この判断で肯定結果を得ると、管理コマンドのメッセージのペイロードからファイル名や更新後の入出力テーブルを取得する(S115)。そして制御部132は、取得した入出力テーブル31を仮配置した後(S116)、このコマンド処理を終了して図28の異常診断処理に戻る。
これに対して、制御部132は、ステップS114の判断で否定結果を得ると、管理コマンドのトピック名の最後にあるワイルドカード文字「#」の部分に対応する文字列に基づいて、この管理コマンドが設定テーブル30を更新すべき旨のコマンドであるか否かを判断する(S117)。そして制御部132は、この判断で肯定結果を得ると、管理コマンドのメッセージのペイロードからファイル名や更新後の設定テーブル30を取得する(S118)。そして制御部132は、取得した設定テーブル30を仮配置した後(S119)、このコマンド処理を終了して図28の異常診断処理に戻る。
また制御部132は、ステップS117の判断で否定結果を得ると、対応すべきコマンドが無いとしてこのコマンド処理を正常終了して図28の異常診断処理に戻る。
なお、装置管理サーバ6からのコマンド以外にも、記憶媒体37(図2)に配置した各テーブルをファイルとして外部記憶部18(図2)を用いて取得したり、FTP(File Transfer Protocol)やSMB(Server Message Block)などのファイル転送・ファイル共有プロトコルやサービスを用いて外部から各テーブルを取得したりすることも可能である。
図9〜図11との対応部分に同一符号を付して示す図30は、本実施の形態において表示部19により表示される演算ルールテーブル33の変更メニューの表示例を示す。演算ルールテーブル33を、上述のようにして異常診断装置131が取得した幾つかの更新済みの演算ルールテーブル33の中からいずれかの演算ルールテーブル33に変更する場合に、第1の実施の形態と同様に異常診断装置131の表示部19や操作部20を用いて所望する演算ルールテーブル33の選択を行う。
例えば、図9や図10で「Menu」という文字列が表示されている第4の操作候補マーク46Dに対応する操作部20の第4の操作ボタン47Dが作業者39(図2)により押圧操作された後、適切な表示とボタン操作を経て図30のような演算ルールテーブル33の変更メニューが表示されるものとする。この変更メニューでは、「Rule_MK-500_v3.1」などの幾つかの演算ルールテーブル33のファイル名をそれぞれ表す文字列150と、これら文字列150のうちの何れか1つの文字列150を指し示すカーソルが表示される。
そしてこの変更メニューでは、「Up」という文字列が表示された第1の操作候補マーク46Aに対応する操作部20の第1の操作ボタン47Aや、「Down」という文字列が表示された第2の操作候補マーク46Bに対応する操作部20の第2の操作ボタン47Bを押圧することによりカーソル151を上下方向に移動させたり、文字列150をスクロールさせたりすることができる。
そして変更メニューでは、所望するバージョンの演算ルールテーブル33に対応する文字列150を指し示すようにカーソル151を移動させた後に、「Enter」という文字列が表示された第3の操作候補マーク46Cに対応する第3の操作ボタン47Cを押圧することにより、そのときカーソル151が指し示す文字列150に対応する演算ルールテーブル33をその後使用する演算ルールテーブル33として決定することができる。なお、この変更メニューでは、「Cancel」という文字列が表示された第4の操作候補マーク46Dに対応する第4の操作ボタン47Dを押圧することにより、変更を中止して上位メニューに戻ることができる。
上述のようにして、いずれかの演算ルールテーブル33の選択決定が行われた場合、コマンド処理と同様に、演算ルールテーブル33の取得、仮配置を実施し、終了直前に本配置および必要に応じて設定テーブルの演算ルール情報(図3のレコード30−5を参照)を変更するなどして、次回の起動時に更新した演算ルールテーブル33に基づく演算ルールを用いた異常診断処理を行うことができる。
なお本実施の形態の場合、入出力テーブル31や設定テーブル30についても、所定操作により同様の変更メニューを表示させることができ、この変更メニューを用いて上述と同様に所望するバージョンの入出力テーブル31や設定テーブル30をその後使用する入出力テーブル31または設定テーブル30として設定することができる。
以上このように、演算モジュールの演算順序と入出力データの識別子により関係づけて記述する演算ルールテーブルや、装置の設定を行う設定テーブル、および、入出力テーブルを更新することで、異常診断装置の処理対象や演算内容、出力方法などを適宜変更可能であり、柔軟な処理を行う異常診断装置を提供することが可能となる。
(4)第4の実施の形態
第1〜第3の実施の形態では、異常診断装置2,100,131を安価な低リソースの装置で実現することを目的としているが、場合によっては高い演算リソースを必要とする演算モジュールクラスや、多くの演算モジュールオブジェクトを複雑な組み合わせで用いた診断を行いたい場合がある。また、複数の装置や多くの部品でそれぞれの診断を行った結果を統合する上位の診断を行った結果を異常管理/可視化装置5(図1)に送付して、サーバの管理、可視化に用いたいという場合も想定できる。そこで本実施の形態では、複数の異常診断装置を接続した連携適用例について説明する。
図31は、異常診断装置141(1411〜141M,141X)を多段に接続することにより構成した本実施の形態による異常診断システム140の構成例を示す。なお、本異常診断システム140において、異常診断装置141は、それぞれ第1〜第3の実施の形態の異常診断装置2,100,131のうちのいずれかにより構成されるものとする。
本異常診断システム140において、1段目の異常診断装置1411〜141Mには、データ生成部3がそれぞれ1台以上接続される。このとき、異常診断装置1411〜141Mは、その内部に設けられた図2または図25のデータ取得部11,108を介してこれらのデータ生成部3とそれぞれ接続される。
また、これら1段目の異常診断装置1411〜141Mは、それぞれその内部に設けられた図2または図25の通信部17,104を介して第1のネットワーク142と接続され、第1のネットワーク142には、2段目の異常診断装置141Xがその内部に設けられた図2または図25のデータ取得部11,108を介して接続されている。
さらに、2段目の異常診断装置141Xは、その内部に設けられた図2または図25の通信部17,104を介して第2のネットワーク143と接続されており、この第2のネットワークに異常管理/可視化装置5が接続されている。
なお、第1のネットワーク142として、例えば、有線LANおよび無線LANによるイーサネット(登録商標)によりTCP/IP通信を行うローカルネットワークや、同様の通信を中継するハブやアクセスポイントを用いるか、専用線、および、別途用意するルータを用いるなどして遠隔地と結ぶ仮想プライベート網(VPN)を適用することができ、また、第2のネットワーク143として、キャリア網を経由したインターネット網、または、仮想プライベート網を適用することができる。
この際、入出力テーブル31(図4)の各入出力の設定は、例えばTCP/IPのRAW通信で、また通信相手のIPアドレスやポート等はそれぞれの異常診断装置141や異常管理/可視化装置5の対応するデータ取得部に向けて設定し、また、対応する操作クラス識別子(図4のハンドラクラスID欄31Gを参照)は、通信するデータの数や、データ型、データ名、および、データなどの1組のデータ構成を送受信する形式を規定することでこれら入力データあるいは結果データを通信するように設定する。
なお、例えば、通信プロトコルとしてMQTTを用いるなどして、ローカルネットワーク上にメッセージのブローカが動作する装置を別途用意し、出力側はメッセージの発行クライアントとして、また、入力側はメッセージの購読クライアントとして、それぞれの入出力テーブルを規定するように構成してもよい。
例えば、データ生成部3(31〜3N)は振動センサであるとして、それぞれの装置または部品の振動を検出しているとする。各異常診断装置141にはこの振動の値が時系列的に入力し、第1の実施の形態の演算ルールとして、データ入力、FFT、データ出力を順に行うように規定すると、それぞれの振動センサの振動による周波数帯での強度ヒストグラムを演算結果として、各通信部からネットワークを通じて出力可能である。
これらの演算結果を異常診断装置141Xが取得し、その演算ルールは、各異常診断装置1411〜141Mでの演算結果を入力データとしてそれぞれ特定の周波数帯の強度がある値より高まるか、または、低くなるかを条件としてこれを異常として検出し、それぞれの結果を、例えば予め学習を行ったニューラルネットワークの入力データとして判定を行う演算を実施し、その結果を異常診断装置141Xの診断結果として異常診断/可視化装置5に伝達することができる。
本実施の形態では異常診断装置141を2段に接続する場合について述べたが、異常診断装置141を2段よりも多い多段、あるいは、複雑にカスケード接続するようにしても、同様に入出力関係を規定することにより異常診断システムを構成することができる。
このように、異常診断装置141に関して、前段の異常診断装置141の診断結果データである出力データを次段の異常診断装置141に入力データとして用いるようにする接続を再帰的に行うことで、大規模な異常診断システム140を容易に構築することができる。
(5)他の実施の形態
なお上述の第1〜第4の実施の形態においては、診断を行うための演算の順序と、演算毎の入力データ名、出力データ名および必要なパラメタを含む演算ルールとが予め定義された演算ルール情報(演算ルールテーブル33)をテーブル構造とするようにした場合について述べたが、本発明はこれに限らず、かかる演算ルール情報のデータ構造としては、この他種々のデータ構造を広く適用することができる。複数種類の演算モジュールクラスについて、演算モジュールクラス毎の初期化動作と、演算内容である逐次処理動作とをそれぞれ定義した演算モジュールクラス定義情報(演算モジュールクラス定義テーブル32)についても同様である。
同様に、上述の第1〜第4の実施の形態においては、予め定義された異常診断装置に対する各設定項目のパラメタがそれぞれ登録された設定情報(設定テーブル30)と、予め定義された前記異常診断装置のデータ入出力に関する各設定項目のパラメタが登録された入出力情報(入出力テーブル31)とテーブル構造とするようにした場合について述べたが、本発明はこれに限らず、かかる設定情報および入出力情報のデータ構造としては、この他種々のデータ構造を広く適用することができる。
また上述の第1〜第4の実施の形態においては、現在データテーブル34,113をリセットすることなく図12の異常診断処理や個々の演算モジュールオブジェクトを実行するようにした場合について述べたが、本発明はこれに限らず、図12の異常診断処理を開始する際やモジュール逐次動作処理S11の前に現在データテーブル34,113をリセットするようにしてもよい。ただし、現在データテーブル34,113をリセットすることなく図12の異常診断処理や個々の演算モジュールオブジェクトを実行することで、前回の異常診断処理や、1ループ(図12のステップS5〜ステップS12)以上前の各演算モジュールオブジェクトの実行結果を必要に応じて利用することができる。