コンテンツにスキップ

予測保全コネクタ

Predictiveコネクタは、1つまたは複数の設定された信号について予測保全メトリックで受信Meddleペイロードを拡充します。各信号について、トレンド(変化率)、残存有用寿命(RUL)(サイクル単位)の推定値、およびヘルススコア(0〜100)を計算します。また、RULがユーザー定義のしきい値を下回った時にオプションのアラートフラグを立てます。

コネクタタイプ:

  • Predictive - 信号ごとのローリングバッファを維持し、拡充されたペイロードを発行するステートフルプロセッサ

プロセッサですが、主な使用例がマシン、モーター、ポンプ、その他の産業資産の状態監視であるため、コネクタはindustrial/の下に分類されています。

  • ✅ 3つのトレンド計算方法:線形回帰、移動平均、EWMA
  • ✅ 信号ごとの上限と下限
  • ✅ 設定された限界に向かうサイクル単位のRUL推定
  • ✅ 設定された限界までの距離から導出されるヘルススコア(0-100)
  • ✅ しきい値を下回るオプションのRULアラートフラグ
  • ✅ 寛容な数値変換(int、float、文字列を処理)
  • ✅ 元のペイロードを保持 — 予測フィールドはマージされる

RULアラート付きの線形回帰トレンド

Section titled “RULアラート付きの線形回帰トレンド”
{
"type": "Predictive",
"config": {
"signals": [
{
"key": "vibration_rms",
"upperLimit": 0.8,
"degradationRate": 0.001
}
],
"windowSize": 30,
"method": "linear_regression",
"alertOnRul": 168
}
}

ノイズの多い信号のためのEWMA平滑化

Section titled “ノイズの多い信号のためのEWMA平滑化”
{
"type": "Predictive",
"config": {
"signals": [
{
"key": "bearing_temperature",
"upperLimit": 95.0,
"lowerLimit": 20.0
}
],
"windowSize": 50,
"method": "ewma"
}
}
{
"type": "Predictive",
"config": {
"signals": [
{
"key": "motor_current",
"upperLimit": 25.0
},
{
"key": "vibration_rms",
"upperLimit": 0.8
},
{
"key": "oil_pressure",
"lowerLimit": 2.0
}
],
"windowSize": 30,
"method": "linear_regression",
"alertOnRul": 48
}
}

監視する信号の必須、非空リスト。

{
"signals": [
{
"key": "vibration_rms",
"upperLimit": 0.8,
"lowerLimit": 0.0,
"degradationRate": 0.001
}
]
}

各サイクルで読み取るペイロードキー。受信ペイロードと正確に一致する必要があります。

{ "key": "vibration_rms" }

この信号に設定された動作範囲。

{
"upperLimit": 0.8,
"lowerLimit": 0.0
}
  • upperLimit - “アラーム高”値。トレンドが正の時、RULはこの限界までの距離をトレンドで割った値として計算されます
  • lowerLimit - “アラーム低”値。トレンドが負の時、RULは現在値以下の距離を|trend|で割った値として計算されます

意味のあるRULのためには、少なくとも2つのうち1つが設定されている必要があります。それ以外の場合、RULは+Infとして報告されます。

将来の使用のために予約(信号ごとの予想される劣化勾配)。オプション。

{ "degradationRate": 0.001 }

必須。信号ごとのリングバッファに保持される最近のサンプル数。

{ "windowSize": 30 }

推奨値:

  • 高速/クリーン信号: 10-30
  • ノイズの多い産業センサー: 50-200
  • 緩やかな劣化信号: 500以上

ウィンドウサイズはEWMA平滑化係数も駆動します:alpha = 2 / (windowSize + 1)

必須。以下のいずれか:

  • linear_regression - ウィンドウ全体での最小二乗勾配(≥ 3サンプル必要)
  • moving_average - 連続する移動平均間の差(≥ 1サンプル必要)
  • ewma - 指数加重移動平均。トレンドは連続するEWMA値間のデルタ(≥ 1サンプル必要)
{ "method": "linear_regression" }

方法の選択:

  • 線形回帰: 劣化勾配の予測子として最近の過去を信頼する場合に最適(モーターベアリング、緩やかな摩耗)
  • 移動平均: ノイズ除去が必要だが最小限のラグが欲しい場合に最適
  • EWMA: 最近のサンプルが古いものより重みを持つべき場合に最適(急速に変化するシステム)

オプション。RULがこのしきい値(サイクル単位)を下回ると、出力ペイロードは<key>_rul_alert: trueでタグ付けされます。

{ "alertOnRul": 168 }

単位は「サイクル」 — つまり、信号がその限界に達すると予測されるまでのサンプル数です。ウォールクロック時間に変換するには、上流のサンプリング間隔を掛けます。

各信号は3つの新しいキー(およびオプションで4つ目)を生成します:

{
"vibration_rms": 0.62,
"vibration_rms_trend": 0.005,
"vibration_rms_rul": 36,
"vibration_rms_health_score": 22.5,
"vibration_rms_rul_alert": true
}
キー意味
<key>_trendサイクルあたりの変化率
<key>_rulサイクル単位の残存有用寿命(または予測不可能な場合+Inf
<key>_health_score0-100スコア(100 = 健全、0 = 限界に到達/超過)
<key>_rul_alertalertOnRulが設定されていてRULがそれを下回る場合のみtrueに設定

受信ペイロードからの元のキーは変更されずにパススルーされます。

  • linear_regression: ウィンドウ上の勾配 m = (n·Σxy − Σx·Σy) / (n·Σx² − (Σx)²)
  • moving_average: mean(window_t) − mean(window_{t−1})
  • ewma: EWMA_t − EWMA_{t−1}alpha = 2 / (windowSize + 1)
  • trend > 0upperLimit設定の場合: RUL = (upperLimit − currentVal) / trend
  • trend < 0lowerLimit設定の場合: RUL = (currentVal − lowerLimit) / |trend|
  • それ以外: RUL = +Inf(意味のある推定値なし)

現在値が既に関連する限界を超えている場合、RUL = 0

  • 両方の限界が設定されている場合: 中点で100、いずれかの限界で0(線形)
  • 上限のみの場合: 0で100、upperLimitで0(線形)
  • 下限のみの場合: 高い値で100、lowerLimitで0
  • どちらでもない場合: 100(制約なし、信号は情報用)

すべてのスコアは[0, 100]にクランプされます。

DataPayload → Predictive → DataPayload + (<key>_trend, _rul, _health_score, _rul_alert?)

例(linear_regression、windowSize=10、upperLimit=0.8):

vibration_rmsの最後の10サンプル:

[0.42, 0.45, 0.47, 0.51, 0.55, 0.58, 0.60, 0.63, 0.65, 0.68]
  • トレンド(勾配): ≈ +0.029 /サイクル
  • 現在値: 0.68
  • RUL: (0.8 − 0.68) / 0.029 ≈ 4.1サイクル
  • ヘルススコア: ((0.8 − 0.68) / 0.8) × 100 = 15.0
  • alertOnRul: 10が設定されている場合 → _rul_alert: true

振動RMSを監視し、7日先の故障を予測(1分サンプリングを想定、168サイクル/週 × 60 ≈ 10080サイクル/週):

{
"type": "Predictive",
"config": {
"signals": [
{
"key": "vibration_rms",
"upperLimit": 0.8
}
],
"windowSize": 60,
"method": "linear_regression",
"alertOnRul": 10080
}
}
{
"type": "Predictive",
"config": {
"signals": [
{
"key": "oil_pressure_bar",
"lowerLimit": 2.0
}
],
"windowSize": 30,
"method": "ewma",
"alertOnRul": 240
}
}

3. 複数信号ポンプヘルススコアリング

Section titled “3. 複数信号ポンプヘルススコアリング”
{
"type": "Predictive",
"config": {
"signals": [
{ "key": "motor_current", "upperLimit": 25 },
{ "key": "discharge_pressure", "lowerLimit": 5, "upperLimit": 12 },
{ "key": "vibration_rms", "upperLimit": 0.7 },
{ "key": "bearing_temp", "upperLimit": 90 }
],
"windowSize": 50,
"method": "moving_average"
}
}

ダウンストリームパイプラインは<signal>_health_scoreキーを集約することによって全体的なポンプヘルススコアを計算できます。

問題: 最初の数サンプルに対してエラーが報告される

解決策:

  1. 期待される動作 — linear_regressionはトレンドを発行する前に少なくとも3サンプルが必要
  2. EWMAと移動平均は少なくとも1サンプルが必要
  3. 警告を飲み込むには、必要に応じてダウンストリームにFilterコネクタを使用

問題: 信号値を数値に強制変換できない

解決策:

  1. 上流コネクタが設定されたkeyに対して数値を配信していることを確認
  2. ブール値、構造体、配列は処理できません — スカラーを抽出するために上流にTransformを使用
  3. OEEスタイルの数値パースをパススルーする上流コネクタでは文字列が受け入れられますが、Predictiveconnector.ToFloat64互換の型を必要とします

問題: トレンドが0に見える、または限界が設定されていない

解決策:

  1. 信号は非ゼロのトレンドAND トレンド方向に整合された限界を持つ必要があります
  2. 信号が変化していない場合、RULは意味のある定義ではありません — これは正しい動作です
  3. フラットだが劣化した信号の場合、RULよりもヘルススコアを優先

問題: 多くのサイクルにわたって偽の_rul_alert: true

解決策:

  1. トレンド推定を平滑化するためにwindowSizeを増やす
  2. ジッターの少ないトレンドのためにlinear_regressionからewmaに切り替える
  3. 実際のリードタイムに整合するようにalertOnRulしきい値を上げる

ヘルススコアが明らかな理由なく0

Section titled “ヘルススコアが明らかな理由なく0”

問題: スコアが0に固定

解決策:

  1. 現在値が既に設定された限界を超えていないことを確認 — そうであれば、スコアは正しく0です
  2. lowerLimitのみが設定されていて値が0に等しい場合、value / lowerLimitの式も0
  3. 中点ベースのスコアのためにupperLimitlowerLimitの両方を設定

1. 実際の運用データに対して限界をキャリブレーション

Section titled “1. 実際の運用データに対して限界をキャリブレーション”

ベンダーのデータシートからupperLimitを持ち上げないでください。資産を数週間プロファイルし、破滅的しきい値の10-20%以内の限界を選択します。

2. ウィンドウサイズをサンプリングケイデンスに合わせる

Section titled “2. ウィンドウサイズをサンプリングケイデンスに合わせる”

1Hzデータと週単位の劣化の場合、約1時間(3600サンプル)のウィンドウはやり過ぎかもしれません — ほとんどの劣化信号はそれほど多くの履歴を必要としません。約30サンプルから始めて調整します。

3. 診断トレンドには線形回帰を使用

Section titled “3. 診断トレンドには線形回帰を使用”

線形回帰の勾配は最も解釈可能なトレンド出力であり、遅い産業劣化の正しいデフォルトです。

4. 最初のサンプルでのアラートを避ける

Section titled “4. 最初のサンプルでのアラートを避ける”

最初の≤ 3サンプルはゼロのトレンドまたは+InfのRULを生成します。起動時にアラートが偽発火しないように、ダウンストリームでTriggerまたはFilterを使用します。

5. アラーム状態マシンとチェーン

Section titled “5. アラーム状態マシンとチェーン”

_rul_alertフラグをIsa182ブロックに供給して、生の予測の上に標準化された確認ワークフローを適用します。

ModbusReader → Predictive → Isa182 → Alert(メール)
  1. ModbusReader: 振動センサーからvibration_rmsbearing_tempを取得
  2. Predictive: 両方の信号のトレンド、RUL、ヘルススコアを計算
  3. Isa182: vibration_rms_rul_alert == trueまたはbearing_temp_health_score < 30の時にアラームをトリガー
  4. Alert: 保守チームにメール

複数信号資産ヘルスダッシュボード

Section titled “複数信号資産ヘルスダッシュボード”
OpcuaReader → Predictive → Reshape → Chart(信号ごとのゲージ)
└→ InfluxDb2Writer
  1. OpcuaReader: 資産のOPC UAサーバーからすべての関連信号を読み取る
  2. Predictive: 各信号を_trend_rul_health_scoreで拡充
  3. Reshape: チャート消費用にペイロードを再構築
  4. Chart: 信号のヘルススコアごとに1つのゲージをレンダリング
  5. InfluxDb2Writer: 長期トレンド分析のために永続化
  • ISA-18.2 - RULアラートを状態マシンでラップ
  • Anomaly Detect - 統計的外れ値を検出
  • Aggregation - Predictiveに供給する前に信号を平均化
  • Trigger - RULアラートでの条件付き発行
  • InfluxDB v2 - 分析のために予測メトリックを永続化