予測保全コネクタ
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 }}設定パラメータ
Section titled “設定パラメータ”Signals
Section titled “Signals”監視する信号の必須、非空リスト。
{ "signals": [ { "key": "vibration_rms", "upperLimit": 0.8, "lowerLimit": 0.0, "degradationRate": 0.001 } ]}信号: Key
Section titled “信号: Key”各サイクルで読み取るペイロードキー。受信ペイロードと正確に一致する必要があります。
{ "key": "vibration_rms" }信号: UpperLimit / LowerLimit
Section titled “信号: UpperLimit / LowerLimit”この信号に設定された動作範囲。
{ "upperLimit": 0.8, "lowerLimit": 0.0}upperLimit- “アラーム高”値。トレンドが正の時、RULはこの限界までの距離をトレンドで割った値として計算されますlowerLimit- “アラーム低”値。トレンドが負の時、RULは現在値以下の距離を|trend|で割った値として計算されます
意味のあるRULのためには、少なくとも2つのうち1つが設定されている必要があります。それ以外の場合、RULは+Infとして報告されます。
信号: DegradationRate
Section titled “信号: DegradationRate”将来の使用のために予約(信号ごとの予想される劣化勾配)。オプション。
{ "degradationRate": 0.001 }Window Size
Section titled “Window Size”必須。信号ごとのリングバッファに保持される最近のサンプル数。
{ "windowSize": 30 }推奨値:
- 高速/クリーン信号: 10-30
- ノイズの多い産業センサー: 50-200
- 緩やかな劣化信号: 500以上
ウィンドウサイズはEWMA平滑化係数も駆動します:alpha = 2 / (windowSize + 1)。
Method
Section titled “Method”必須。以下のいずれか:
linear_regression- ウィンドウ全体での最小二乗勾配(≥ 3サンプル必要)moving_average- 連続する移動平均間の差(≥ 1サンプル必要)ewma- 指数加重移動平均。トレンドは連続するEWMA値間のデルタ(≥ 1サンプル必要)
{ "method": "linear_regression" }方法の選択:
- 線形回帰: 劣化勾配の予測子として最近の過去を信頼する場合に最適(モーターベアリング、緩やかな摩耗)
- 移動平均: ノイズ除去が必要だが最小限のラグが欲しい場合に最適
- EWMA: 最近のサンプルが古いものより重みを持つべき場合に最適(急速に変化するシステム)
Alert On RUL
Section titled “Alert On RUL”オプション。RULがこのしきい値(サイクル単位)を下回ると、出力ペイロードは<key>_rul_alert: trueでタグ付けされます。
{ "alertOnRul": 168 }単位は「サイクル」 — つまり、信号がその限界に達すると予測されるまでのサンプル数です。ウォールクロック時間に変換するには、上流のサンプリング間隔を掛けます。
出力ペイロード
Section titled “出力ペイロード”各信号は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_score | 0-100スコア(100 = 健全、0 = 限界に到達/超過) |
<key>_rul_alert | alertOnRulが設定されていてRULがそれを下回る場合のみtrueに設定 |
受信ペイロードからの元のキーは変更されずにパススルーされます。
計算リファレンス
Section titled “計算リファレンス”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 > 0でupperLimit設定の場合:RUL = (upperLimit − currentVal) / trendtrend < 0でlowerLimit設定の場合:RUL = (currentVal − lowerLimit) / |trend|- それ以外:
RUL = +Inf(意味のある推定値なし)
現在値が既に関連する限界を超えている場合、RUL = 0。
ヘルススコア
Section titled “ヘルススコア”- 両方の限界が設定されている場合: 中点で100、いずれかの限界で0(線形)
- 上限のみの場合: 0で100、
upperLimitで0(線形) - 下限のみの場合: 高い値で100、
lowerLimitで0 - どちらでもない場合: 100(制約なし、信号は情報用)
すべてのスコアは[0, 100]にクランプされます。
データフロー
Section titled “データフロー”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
一般的なユースケース
Section titled “一般的なユースケース”1. ベアリング劣化追跡
Section titled “1. ベアリング劣化追跡”振動RMSを監視し、7日先の故障を予測(1分サンプリングを想定、168サイクル/週 × 60 ≈ 10080サイクル/週):
{ "type": "Predictive", "config": { "signals": [ { "key": "vibration_rms", "upperLimit": 0.8 } ], "windowSize": 60, "method": "linear_regression", "alertOnRul": 10080 }}2. 潤滑システム圧力監視
Section titled “2. 潤滑システム圧力監視”{ "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キーを集約することによって全体的なポンプヘルススコアを計算できます。
トラブルシューティング
Section titled “トラブルシューティング”insufficient data points
Section titled “insufficient data points”問題: 最初の数サンプルに対してエラーが報告される
解決策:
- 期待される動作 —
linear_regressionはトレンドを発行する前に少なくとも3サンプルが必要 - EWMAと移動平均は少なくとも1サンプルが必要
- 警告を飲み込むには、必要に応じてダウンストリームに
Filterコネクタを使用
cannot convert <type> to float64
Section titled “cannot convert <type> to float64”問題: 信号値を数値に強制変換できない
解決策:
- 上流コネクタが設定された
keyに対して数値を配信していることを確認 - ブール値、構造体、配列は処理できません — スカラーを抽出するために上流に
Transformを使用 - OEEスタイルの数値パースをパススルーする上流コネクタでは文字列が受け入れられますが、
Predictiveはconnector.ToFloat64互換の型を必要とします
RULが常に+Inf
Section titled “RULが常に+Inf”問題: トレンドが0に見える、または限界が設定されていない
解決策:
- 信号は非ゼロのトレンドAND トレンド方向に整合された限界を持つ必要があります
- 信号が変化していない場合、RULは意味のある定義ではありません — これは正しい動作です
- フラットだが劣化した信号の場合、RULよりもヘルススコアを優先
RULアラートが常時発火
Section titled “RULアラートが常時発火”問題: 多くのサイクルにわたって偽の_rul_alert: true
解決策:
- トレンド推定を平滑化するために
windowSizeを増やす - ジッターの少ないトレンドのために
linear_regressionからewmaに切り替える - 実際のリードタイムに整合するように
alertOnRulしきい値を上げる
ヘルススコアが明らかな理由なく0
Section titled “ヘルススコアが明らかな理由なく0”問題: スコアが0に固定
解決策:
- 現在値が既に設定された限界を超えていないことを確認 — そうであれば、スコアは正しく0です
lowerLimitのみが設定されていて値が0に等しい場合、value / lowerLimitの式も0- 中点ベースのスコアのために
upperLimitとlowerLimitの両方を設定
ベストプラクティス
Section titled “ベストプラクティス”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ブロックに供給して、生の予測の上に標準化された確認ワークフローを適用します。
ワークフロー例
Section titled “ワークフロー例”予測 → アラーム → 通知
Section titled “予測 → アラーム → 通知”ModbusReader → Predictive → Isa182 → Alert(メール)- ModbusReader: 振動センサーから
vibration_rmsとbearing_tempを取得 - Predictive: 両方の信号のトレンド、RUL、ヘルススコアを計算
- Isa182:
vibration_rms_rul_alert == trueまたはbearing_temp_health_score < 30の時にアラームをトリガー - Alert: 保守チームにメール
複数信号資産ヘルスダッシュボード
Section titled “複数信号資産ヘルスダッシュボード”OpcuaReader → Predictive → Reshape → Chart(信号ごとのゲージ) └→ InfluxDb2Writer- OpcuaReader: 資産のOPC UAサーバーからすべての関連信号を読み取る
- Predictive: 各信号を
_trend、_rul、_health_scoreで拡充 - Reshape: チャート消費用にペイロードを再構築
- Chart: 信号のヘルススコアごとに1つのゲージをレンダリング
- InfluxDb2Writer: 長期トレンド分析のために永続化
関連コネクタ
Section titled “関連コネクタ”- ISA-18.2 - RULアラートを状態マシンでラップ
- Anomaly Detect - 統計的外れ値を検出
- Aggregation - Predictiveに供給する前に信号を平均化
- Trigger - RULアラートでの条件付き発行
- InfluxDB v2 - 分析のために予測メトリックを永続化
追加リソース
Section titled “追加リソース”- ISO 17359 - 機械の状態監視と診断(一般ガイドライン)
- ISO 13374 - 機械システムの状態監視と診断(データ処理、通信、提示)
- NASA Prognostics Center of Excellence - RUL方法論研究
- 指数加重移動平均(EWMA)リファレンス