コンテンツにスキップ

ISA-18.2アラームコネクタ

ISA-18.2コネクタは、ANSI/ISA-18.2標準(プロセス産業向けアラームシステム管理)で定義されたアラーム管理ライフサイクルを実装します。Meddleペイロードを消費し、ユーザー定義のアラーム条件を評価し、アラームの状態が変化するたびに新しいペイロードを発行するプロセッサです — 優先度や現在の状態などのアラームメタデータで拡張されます。

コネクタタイプ:

  • Isa182 - ステートフルアラームプロセッサ(条件を評価、アラームごとに状態を追跡)

アラーム管理はプロセス制御、バッチ製造、SCADA駆動プラントの基本要件であるため、コネクタはindustrial/カテゴリに配置されています。

  • ✅ ISA-18.2アラーム状態マシン(normal、unacknowledged、acknowledged、return-unacknowledged)
  • ✅ 任意のアラーム条件のためのMXL式言語
  • ✅ アラームごとの優先度(low、medium、high、urgent)
  • ✅ しきい値付近でのフラッピングを抑制するためのデッドバンドヒステリシス
  • ✅ 設定可能なオン遅延とオフ遅延タイマー(ミリ秒単位)
  • ✅ 状態遷移時のみペイロードを発行(ノイズを回避)
  • ✅ ダウンストリームルーティング/アラート用の標準_alarm_*メタデータキー
{
"type": "Isa182",
"config": {
"alarms": [
{
"name": "high_temperature",
"condition": "temperature > 80",
"priority": "high"
}
]
}
}
{
"type": "Isa182",
"config": {
"alarms": [
{
"name": "high_temperature",
"condition": "temperature > 80",
"priority": "high",
"setpoint": 80,
"deadband": 2.0,
"delayOn": 5000,
"delayOff": 10000
}
],
"shelveTimeout": 3600000,
"maxShelves": 25
}
}
{
"type": "Isa182",
"config": {
"alarms": [
{
"name": "high_pressure",
"condition": "pressure > 10.0",
"priority": "urgent",
"delayOn": 2000
},
{
"name": "low_flow",
"condition": "flow_rate < 5.0",
"priority": "medium",
"delayOn": 10000
},
{
"name": "tank_overflow",
"condition": "tank_level > 95",
"priority": "high",
"setpoint": 95,
"deadband": 1.0
}
]
}
}

アラーム定義の必須配列。少なくとも1つのアラームが必要です。

{
"alarms": [
{
"name": "high_temp",
"condition": "temperature > 80",
"priority": "high"
}
]
}

アラームの一意の識別子。発行されたペイロードで_alarm_name値として使用されます。

{
"name": "compressor_1_high_temp"
}

推奨される規約: <asset>_<measurement>_<condition>(例:pump_3_low_pressure)。

各受信ペイロードに対して評価されるMXL式。結果がtrueの場合、アラームはアクティブと見なされます。

{
"condition": "temperature > 80 AND pressure < 5"
}

例:

{ "condition": "temperature > 80" }
{ "condition": "vibration_rms >= 0.7" }
{ "condition": "tank_level < 10 OR tank_level > 95" }
{ "condition": "(motor_running == true) AND (current > 12.5)" }

条件は起動時にパースされます。無効な式はランタイム前にコネクタ設定を拒否します。

ダウンストリームルーティングに使用される重大度。以下のいずれかである必要があります:

  • low
  • medium
  • high
  • urgent
{
"priority": "urgent"
}

フラッピングを抑制するためにアラームしきい値の周囲に適用されるヒステリシス。

{
"setpoint": 80,
"deadband": 2.0
}
  • setpoint - 公称しきい値(情報用。deadbandと一緒に使用)
  • deadband - ヒステリシス帯。条件が非アクティブからアクティブに遷移すると、基礎となる値がsetpoint - deadbandを下回るまでアクティブのままになります

推奨値: ノイズの多い信号で偽の遷移を避けるために動作範囲の1-5%。

ミリ秒単位のオン遅延。アラームがunacknowledgedに遷移する前に、条件が連続してこの時間アクティブのままである必要があります。

{
"delayOn": 5000
}

推奨値:

  • 高速プロセス: 500-2000ms
  • 標準プロセスアラーム: 5000-15000ms
  • トレンドアラーム: 30000ms以上(30秒)

ミリ秒単位のオフ遅延。アラームがrtn_unacknowledgedに遷移する前に、条件が連続してこの時間非アクティブのままである必要があります。

{
"delayOff": 10000
}

オペレーターが確認するのに十分な期間アラームを表示するために、より長いオフ遅延が役立ちます。

{
"shelveTimeout": 3600000,
"maxShelves": 25
}
  • shelveTimeout - アラームがシェルブされ得るデフォルトの期間(ms)
  • maxShelves - 同時にシェルブされるアラームの最大数

これらのパラメータはISA-18.2シェルビング制約を反映し、ダウンストリームのUI/管理ツールに転送されます。

コネクタはISA-18.2状態マシンを実装します。各アラームは以下の状態のいずれかを保持します:

状態意味
normal条件は非アクティブ。オペレーターの注意は不要
unacknowledged条件がアクティブになった。オペレーターが確認していない
acknowledged条件がまだアクティブな間にオペレーターが確認した
rtn_unacknowledged条件が正常に戻ったが、以前のアラームは確認されなかった

状態遷移ごとに新しいペイロードが発行されます。

アラームが状態を変更すると、元のペイロードがコピーされ、以下のキーで拡張されます:

{
"...original fields...": "...",
"_alarm_name": "high_temperature",
"_alarm_state": "unacknowledged",
"_alarm_priority": "high",
"_alarm_timestamp": "2026-05-20T10:14:33.123456789Z"
}

フィールドリファレンス:

  • _alarm_name - アラーム定義のnameと一致
  • _alarm_state - 現在の状態(normalunacknowledgedacknowledgedrtn_unacknowledged
  • _alarm_priority - アラーム定義の優先度
  • _alarm_timestamp - 遷移のRFC 3339ナノ秒UTCタイムスタンプ
DataPayload → Isa182 → (状態変更時) → DataPayload + _alarm_*メタデータ
→ (状態変更なし) → 静かに吸収

例:

入力ストリーム(1Hz):

{ "temperature": 78.0 }
{ "temperature": 81.0 }
{ "temperature": 82.0 }
{ "temperature": 79.0 }
{ "temperature": 78.5 }

アラームhigh_temperature: temperature > 80, delayOn: 0, delayOff: 0の場合:

  • サンプル1(78.0): 条件false、状態はnormalのまま、発行なし
  • サンプル2(81.0): 条件true、状態 → unacknowledged、ペイロード発行
  • サンプル3(82.0): 条件はまだtrue、状態変更なし、発行なし
  • サンプル4(79.0): 条件false、状態 → rtn_unacknowledged、ペイロード発行
  • サンプル5(78.5): 条件はまだfalse、状態変更なし、発行なし
{
"type": "Isa182",
"config": {
"alarms": [
{
"name": "reactor_high_temp",
"condition": "reactor_temperature > 150",
"priority": "urgent",
"setpoint": 150,
"deadband": 5,
"delayOn": 3000,
"delayOff": 10000
}
]
}
}

2. マルチ変数コンプレッサーヘルス

Section titled “2. マルチ変数コンプレッサーヘルス”
{
"type": "Isa182",
"config": {
"alarms": [
{
"name": "compressor_overload",
"condition": "motor_current > 25 AND oil_pressure < 2.0",
"priority": "urgent",
"delayOn": 5000
},
{
"name": "compressor_vibration",
"condition": "vibration_rms > 0.7",
"priority": "high",
"setpoint": 0.7,
"deadband": 0.05,
"delayOn": 10000
},
{
"name": "compressor_temp_drift",
"condition": "discharge_temp > 95",
"priority": "medium",
"delayOn": 30000
}
]
}
}

3. ヒステリシス付きタンクレベル監視

Section titled “3. ヒステリシス付きタンクレベル監視”
{
"type": "Isa182",
"config": {
"alarms": [
{
"name": "tank_low_level",
"condition": "tank_level < 10",
"priority": "high",
"setpoint": 10,
"deadband": 2,
"delayOn": 5000,
"delayOff": 30000
},
{
"name": "tank_high_level",
"condition": "tank_level > 90",
"priority": "high",
"setpoint": 90,
"deadband": 2,
"delayOn": 5000,
"delayOff": 30000
}
],
"shelveTimeout": 3600000,
"maxShelves": 10
}
}

問題: 基礎となるデータがそれをアクティブにするはずなのに、条件がfalseと評価されているように見える

解決策:

  1. 条件のフィールド名がペイロードと正確に一致することを確認(大文字小文字を区別)
  2. データ型を確認 — temperature > 80temperatureが文字列として到着する場合に失敗します。型を強制するために上流にTransformを挿入してください
  3. 上流コネクタが実際にプロセッサにペイロードを配信していることを確認(LogまたはConsoleライターでデータフローを確認)

一定の再トリガー(フラッピング)

Section titled “一定の再トリガー(フラッピング)”

問題: ノイズの多い信号がしきい値の周りで繰り返し振動し、多くの遷移を生成する

解決策:

  1. 動作範囲の1-5%のdeadbandを追加
  2. 短時間の逸脱が無視されるようにdelayOnを増やす
  3. 入力を平滑化するために上流にMovingAverageまたはEWMAを適用

問題: アラームはアクティブではなくなったが、状態がnormalに戻らない

解決策:

  1. ISA-18.2はnormalに戻る前に明示的な確認を要求します。rtn_unacknowledged状態は、確認前に条件がクリアされた場合の標準的なパスです
  2. 確認は通常HMIまたはアラートツールから駆動されます — ダウンストリームシステムでアラーム状態を更新するものを接続してください

問題: コネクタがErrIsa182ConditionEvalで起動に失敗する

解決策:

  1. 条件がMXL構文でパースされることを確認 — 比較は><>=<===!=を使用
  2. ブール接続子はANDORNOT
  3. 複雑なサブ式は括弧で囲む

1. ノイズの多いセンサーでは積極的にデッドバンドを使用

Section titled “1. ノイズの多いセンサーでは積極的にデッドバンドを使用”

小さなデッドバンド(範囲の1-2%)でも、実際のプラントでアラーム量を劇的に削減します。

2. 優先度ごとに遅延を段階的に設定

Section titled “2. 優先度ごとに遅延を段階的に設定”
[
{ "priority": "urgent", "delayOn": 1000 },
{ "priority": "high", "delayOn": 5000 },
{ "priority": "medium", "delayOn": 15000 },
{ "priority": "low", "delayOn": 30000 }
]

緊急アラームは素早く発火する必要があります。優先度の低いアラームはより長い確認ウィンドウを許容できます。

ダウンストリームアラートはしばしば_alarm_nameを中心に展開します。アラーム名をパブリックスキーマの一部として扱い、軽々しくリネームしないでください。

4. 優先度ベースのエスカレーションのためにRouterと組み合わせる

Section titled “4. 優先度ベースのエスカレーションのためにRouterと組み合わせる”

_alarm_priorityで異なるアラートチャネルにルーティング(urgent → SMS、high → email、medium → ダッシュボードのみ)。

5. 過剰なアラームを避ける(ISA-18.2 §8)

Section titled “5. 過剰なアラームを避ける(ISA-18.2 §8)”

標準は、平均してオペレーターあたり時間あたり≤6アラームを推奨します。その範囲内に留まるために、デッドバンド、遅延、統合アラーム条件を使用してください。

エンドツーエンドのアラームパイプライン

Section titled “エンドツーエンドのアラームパイプライン”
OpcuaReader → Isa182 → Router → ┬─ Alert(urgent → SMS)
├─ Alert(high → email)
└─ InfluxDb2Writer(監査ログ)
  1. OpcuaReader: 500msのケイデンスでPLCからプロセス変数を取得
  2. Isa182: 設定されたすべてのアラームを評価。状態変更時のみペイロードを発行
  3. Router: _alarm_priorityでブランチ
  4. Alert(urgent): 通知チャネル経由でSMSを送信
  5. Alert(high): メールを送信
  6. InfluxDb2Writer: コンプライアンスのためにすべてのアラーム遷移を監査

アラームトリガリングと組み合わせた予測保全

Section titled “アラームトリガリングと組み合わせた予測保全”
ModbusReader → Predictive → Isa182 → Alert
  1. ModbusReader: 振動と温度を読み取る
  2. Predictive: トレンドと残存有用寿命を計算
  3. Isa182: vibration_rms_rul < 168(残り7日未満の有用寿命)でトリガー
  4. Alert: 保守チームに通知
  • Trigger - 状態マシンなしのよりシンプルな条件ベースの発行
  • Alert - アラームペイロードを通知チャネルに送信
  • Router - _alarm_priorityでブランチ
  • Predictive - プロアクティブなアラームのために予測RULと組み合わせる
  • Filter - アラーム評価前に入力をフィルタリング