R-MSMの状態監視

1.概要

R-CPSでは、R-MSMに内蔵されたもしくは外付けのセンサからデータを収集してPDH(Physical Data Hub)に送信しています。センサの状態もしくは測定環境によってはデータの中に測定エラーやノイズによる明らかに外れ値が混じることがあります。このような外れ値の発生頻度をモニタし、通常と異なる頻度を示した際には異常を連絡することで、R-MSMの状態を監視するシステムの検討を行いましたので説明します。

具体的には、海産物の養殖水槽に取り付けた水温センサ(DS18B20)のデータが、図1のようにたまに測定できず外れ値を表示することが分かりました。この外れ値の発生頻度をモニタし、通常と異なる頻度を示した際には異常を連絡するシステムを構築しました。

      図1 水槽に設置したR-MSM04の水温推移

2. システム概要

・ 水温センサDS18B20の測定範囲は、-55℃~125℃までなので、-55℃より小さいもしくは125℃より大きい出力値を外れ値とする(図2 異常検出フロー参照)
・ GCPでの水温センサのモニタは1分間に1回行っている。1時間(60回)毎の外れ値の回数を24時間(24回)保存し、直近24時間の平均値Mと標準偏差σを求める
・ 以下の場合、異常を通知する
  1)直近の1時間の回数が、それ以前の24時間の基準値(M+3×σ)を超えた場合
  2)直近1時間の回数が、基準値10回/時を超えた場合
・ 異常の通知は、次の方法とする
  1)ダッシュボードのLEDを青から赤の点燈に変える
  2)メールアドレス登録時はメールを発信する(今回のNode-REDには未実装:方法はこちら(Node-REDからGmailを送信)を参照)

■ 24時間の外れ値取得例

外れ値の取得例を以下に示します。Dim[24]は、1時間毎の外れ値の発生回数を記録している配列です。8月8日9時から10時の間に1回外れ値が発生しましたので、それを10時の時点でDim[24]を上位側にシフトしてDim[0]に追加しています。同様に、10時から11時の間の外れ値は0回でしたので、11時の時点でDim[0]に0を追加しています。
この配列Dim[24]に保管されている外れ値の24時間分のデータの平均値Mと標準偏差σを計算しています。これらから判定値(=M+3×σ)の値をそれぞれ求めています。

3. Node-REDへの実装例

3-1. フローエディタ画面

次に、Node-REDへの実装した結果を示します。

① 左上のinjectノードのボタンを押すと配列を含め変数が初期化されます。
② link inノードに水温データが送られてきます。
③ switchノードで外れ値かどうかを判定し、外れ値であればNG数をカウントアップし、正常値であればOK数をカウントアップします。
④ NG数が判定値を超えた場合に、異常としてLEDを赤色にする(正常時:緑色)
⑤ 1時間毎に配列を上位にシフトするとともに、前の1時間の外れ値の数を配列の最下位に格納します。そして、OK数/NG数を0にします。
⑥平均値、分散、標準偏差、判定値の計算を行います。判定値は、flow変数として共有します。
⑦ デバッグ用:global変数の配列の中身をmsg.arrayとして表示できる変数に入れます。

3-2. ダッシュボード画面