OEEコネクタ
**OEE(総合設備効率)**コネクタは、入力ストリームに到着する累積生産カウンタから、正準的なSEMI E10製造KPIを計算します。ゲージ、チャートとしてレンダリングしたり、時系列データベースに格納したりできるように、ブロックごとのOEEに加えて3つの構成メトリック(可用性、性能、品質)を発行します。
コネクタタイプ:
OEE- スライディングウィンドウまたはシフトごとにOEEを計算するステートフルプロセッサ
OEEは次のように計算されます:
OEE = 可用性 × 性能 × 品質ここで:
- 可用性 =
runTime / plannedProductionTime - 性能 =
(idealCycleTime × totalCount) / runTime - 品質 =
goodCount / totalCount
3つすべてが[0, 1]にクランプされます。
- ✅ 2つのウィンドウモード:スライディング(時間ベース)とシフト(HH:MM括弧)
- ✅
RunTime/PlannedProductionTimeがデバイスから提供されない場合の自動累積 - ✅
runningをブール風のステータスフィールドとして受け入れ(true/false、1/0、on/off、yes/noなど) - ✅ ゲージスタイリングのための設定可能なしきい値(
red、yellow)とtarget - ✅ ウィンドウに十分なデータがない場合にN/Aペイロード(
oee.*省略)を発行 - ✅ 複数のOEEインスタンスが同じペイロードに書き込めるようにするブロックごとのID名前空間
- ✅ 寛容な数値パース — 文字列は自動的にfloatとしてパースされます
デバイスレポートカウンタを持つスライディングウィンドウ
Section titled “デバイスレポートカウンタを持つスライディングウィンドウ”{ "type": "OEE", "config": { "fields": { "plannedProductionTime": "planned_time_s", "runTime": "run_time_s", "idealCycleTime": "ideal_cycle_s", "totalCount": "parts_total", "goodCount": "parts_good" }, "windowMode": "sliding", "windowSeconds": 3600, "thresholds": { "red": 0.6, "yellow": 0.8 }, "target": 0.85 }}ステータスフラグとリテラルサイクル時間を持つシフトウィンドウ
Section titled “ステータスフラグとリテラルサイクル時間を持つシフトウィンドウ”{ "type": "OEE", "config": { "fields": { "running": "machine_running", "totalCount": "parts_total", "goodCount": "parts_good" }, "idealCycleTimeSeconds": 4.5, "windowMode": "shift", "shiftStart": "06:00", "shiftEnd": "14:00", "timezone": "Europe/Rome", "thresholds": { "red": 0.6, "yellow": 0.8 }, "target": 0.85 }}設定パラメータ
Section titled “設定パラメータ”Fields
Section titled “Fields”fieldsオブジェクトは、コネクタが各受信サンプルから読み取るペイロードキーに名前を付けます。
{ "fields": { "plannedProductionTime": "planned_time_s", "runTime": "run_time_s", "running": "machine_running", "idealCycleTime": "ideal_cycle_s", "totalCount": "parts_total", "goodCount": "parts_good" }}| フィールド | 必須? | 注意 |
|---|---|---|
plannedProductionTime | オプション | 累積秒数。省略した場合、コネクタは最初のサンプル以降のウォールクロック秒数を累積します |
runTime | runTime / runningの1つが必須 | マシンが稼働していた累積秒数 |
running | runTime / runningの1つが必須 | ブール風のステータス。内部的に積分される |
idealCycleTime | idealCycleTime / idealCycleTimeSecondsの1つが必須 | 理想速度でのパーツあたりの秒数 |
totalCount | 必須 | 試行されたパーツの累積数 |
goodCount | 必須 | 良品パーツの累積数 |
Ideal Cycle Time(リテラル)
Section titled “Ideal Cycle Time(リテラル)”デバイスが理想サイクル時間をパブリッシュしない場合、定数として宣言できます:
{ "idealCycleTimeSeconds": 4.5}これはfields.idealCycleTimeと相互排他的です。
Window Mode
Section titled “Window Mode”{ "windowMode": "sliding"}sliding- 長さwindowSecondsのローリング時間ウィンドウでデルタを計算shift-shiftStart、shiftEnd、およびオプションのtimezoneで定義された現在のシフトの開始からデルタを計算
Window Seconds(スライディングモード)
Section titled “Window Seconds(スライディングモード)”{ "windowSeconds": 3600}windowMode: slidingに必須。> 0である必要があります。
推奨値:
- リアルタイムゲージ: 300-900(5-15分)
- 時間ごとのトレンド: 3600(1時間)
- 長期平滑化: 28800(8時間)
シフト設定(シフトモード)
Section titled “シフト設定(シフトモード)”windowMode: shiftに必須:
{ "shiftStart": "06:00", "shiftEnd": "14:00", "timezone": "Europe/Rome"}shiftStart/shiftEnd-HH:MM24時間形式timezone- IANAタイムゾーン識別子(例:Europe/Rome、America/New_York、Asia/Tokyo)。省略した場合はUTCがデフォルト- 夜間シフトがサポートされる(例:
22:00→06:00)
しきい値とターゲット
Section titled “しきい値とターゲット”ダッシュボードがゲージを一貫して色付けできるように、OEE値と一緒に発行されるスタイリングヒント:
{ "thresholds": { "red": 0.6, "yellow": 0.8 }, "target": 0.85}制約:
red < yellow(厳密に)0 ≤ red, yellow ≤ 10 ≤ target ≤ 1
出力ペイロード
Section titled “出力ペイロード”各出力はOEEコネクタインスタンスのブロックIDによって名前空間化されます(Meddleが自動的に注入):
{ "oee.<blockId>": 0.78, "availability.<blockId>": 0.92, "performance.<blockId>": 0.95, "quality.<blockId>": 0.89, "red.<blockId>": 0.6, "yellow.<blockId>": 0.8, "target.<blockId>": 0.85}ウィンドウにまだ十分なデータがない場合(例:スライディングモードで2スナップショット未満、またはシフトが始まったばかり)、oee/availability/performance/qualityキーは省略され、ゲージスタイリングキーのみが発行されます。これはN/Aペイロードです。
データフロー
Section titled “データフロー”DataPayload(累積カウンタ) → OEE → DataPayload(oee.<blockId>など)例(スライディングウィンドウ、60秒):
入力ストリーム:
{ "planned_time_s": 0, "run_time_s": 0, "parts_total": 0, "parts_good": 0 }{ "planned_time_s": 60, "run_time_s": 55, "parts_total": 12, "parts_good": 11 }{ "planned_time_s": 120, "run_time_s": 110, "parts_total": 24, "parts_good": 22 }idealCycleTimeSeconds: 4.5、windowSeconds: 60の場合:
3番目のサンプルの後:
- ΔPlanned = 60秒、ΔRun = 55秒、ΔTotal = 12、ΔGood = 11
- A = 55/60 = 0.917
- P = (4.5 × 12) / 55 = 0.982
- Q = 11/12 = 0.917
- OEE = 0.917 × 0.982 × 0.917 = 0.826
出力:
{ "oee.<blockId>": 0.826, "availability.<blockId>": 0.917, "performance.<blockId>": 0.982, "quality.<blockId>": 0.917, "red.<blockId>": 0.6, "yellow.<blockId>": 0.8, "target.<blockId>": 0.85}一般的なユースケース
Section titled “一般的なユースケース”1. ローリング15分OEEゲージ
Section titled “1. ローリング15分OEEゲージ”ゲージが最近のアクティビティに応答するライブオペレーターダッシュボードに最適:
{ "type": "OEE", "config": { "fields": { "running": "is_running", "totalCount": "cumulative_parts", "goodCount": "cumulative_good" }, "idealCycleTimeSeconds": 6.0, "windowMode": "sliding", "windowSeconds": 900, "thresholds": { "red": 0.55, "yellow": 0.75 }, "target": 0.85 }}2. レポート用のシフトごとのOEE
Section titled “2. レポート用のシフトごとのOEE”{ "type": "OEE", "config": { "fields": { "plannedProductionTime": "shift_planned_s", "runTime": "shift_run_s", "idealCycleTime": "ideal_cycle_s", "totalCount": "shift_parts_total", "goodCount": "shift_parts_good" }, "windowMode": "shift", "shiftStart": "06:00", "shiftEnd": "14:00", "timezone": "Europe/Rome", "thresholds": { "red": 0.6, "yellow": 0.8 }, "target": 0.85 }}3. 夜勤(深夜境界)
Section titled “3. 夜勤(深夜境界)”{ "type": "OEE", "config": { "fields": { "running": "running_flag", "totalCount": "ct_total", "goodCount": "ct_good" }, "idealCycleTimeSeconds": 3.2, "windowMode": "shift", "shiftStart": "22:00", "shiftEnd": "06:00", "timezone": "America/New_York", "thresholds": { "red": 0.5, "yellow": 0.75 }, "target": 0.8 }}トラブルシューティング
Section titled “トラブルシューティング”出力にゲージスタイリングフィールドのみがある(oee.*なし)
Section titled “出力にゲージスタイリングフィールドのみがある(oee.*なし)”問題: N/Aペイロードが発行されている
解決策:
- スライディングモード: ウィンドウに少なくとも2つのスナップショットが必要。2番目のサンプルを待つ
- シフトモード: 現在の時刻が
[shiftStart, shiftEnd]の外側の場合、N/Aを返す - シフトモード起動: シフト内の最初のサンプルがベースラインを確立。OEEは2番目のサンプル以降に表示されます
non-positive window deltas
Section titled “non-positive window deltas”問題: デルタが0または負として報告されるエラー
解決策:
- カウンタは単調増加である必要があります。デバイスがそれらをリセットする場合(例:シフト変更時)、入力を
Transformでラップして最初にデルタに変換するか、シフトごとにOEEインスタンスを分割します - フィールド名が非ゼロ値にマップされていることを確認
- ウィンドウが非常に短く(
windowSeconds: 10)、ラインがアイドルの場合、デルタは正確にゼロになり得ます。ウィンドウを広げてください
Invalid Valueエラー
Section titled “Invalid Valueエラー”問題: invalid value for "..."エラー
解決策:
- 値は非負の有限数値である必要があります。NaN、無限大、負数は拒否されます
- 文字列は非負の有限floatとしてパースされる場合のみ許容されます
- ソースが”running”のためにブールを発行する場合、
runTimeではなくrunningフィールドが設定されていることを確認
OEEが1.0で固定
Section titled “OEEが1.0で固定”問題: 怪しいほど完璧なOEE
解決策:
idealCycleTimeが現実的であることを確認。あまりにも遅い理想は性能を≥ 1にし、1にクランプされますrunTimeがplannedProductionTimeより小さいことを確認。同一の場合、可用性は1.0です
シフト境界の間違ったタイムゾーン
Section titled “シフト境界の間違ったタイムゾーン”問題: シフトの開始/終了がN時間ずれている
解決策:
timezoneを常に有効なIANA名に設定+02:00のようなオフセット表記は使用しないでください — 拒否されます
ベストプラクティス
Section titled “ベストプラクティス”1. 利用可能な場合はデバイスレポートカウンタを優先
Section titled “1. 利用可能な場合はデバイスレポートカウンタを優先”PLCがrunTimeとplannedProductionTimeを累積秒数としてパブリッシュする場合、それらを直接使用します。内部アキュムレータは、runningフラグのみをパブリッシュするデバイスのためのフォールバックです。
2. ウィンドウをオーディエンスに合わせる
Section titled “2. ウィンドウをオーディエンスに合わせる”- オペレーター: 5-15分のスライディングウィンドウ
- スーパーバイザー: シフトごとのウィンドウ
- 役員: 日ごとまたは週ごとの集約(ダウンストリーム)
3. idealCycleTimeを正直にキャリブレーション
Section titled “3. idealCycleTimeを正直にキャリブレーション”ISO定義は「持続可能な最速サイクル時間」であり、「マーケティングパンフレット」ではありません。楽観的な値は性能を低下させ、実際のOEEを過小評価します。
4. 上流のFilterまたはTransformと組み合わせる
Section titled “4. 上流のFilterまたはTransformと組み合わせる”生のストリームに無関係なペイロードが含まれる場合、OEEブロックの前にFilterを使用してカウンタ更新のみを保持します。
5. マシンごとに別々のOEEブロックを使用
Section titled “5. マシンごとに別々のOEEブロックを使用”各OEEコネクタインスタンスはblockIdで名前空間化されるため、マルチマシンダッシュボードは単一のMeddleフロー内で共存できます。
ワークフロー例
Section titled “ワークフロー例”完全な生産ダッシュボードパイプライン
Section titled “完全な生産ダッシュボードパイプライン”ModbusReader(マシン1) ──┐ModbusReader(マシン2) ──┼─→ Merge → Reshape → OEE → Chart(ゲージ)ModbusReader(マシン3) ──┘ └→ InfluxDb2Writer- ModbusReader(×N): 各マシンからカウンタを取得
- Merge: マシンIDでキー付けされたペイロードを結合
- Reshape: フィールド名をOEE設定に合わせて正規化
- OEE: マシンインスタンスごとにOEEを計算
- Chart:
red、yellow、targetスタイリングでゲージをレンダリング - InfluxDb2Writer: 歴史的トレンドのためにOEEを永続化
OEE + アラームコンボ
Section titled “OEE + アラームコンボ”OpcuaReader → OEE → Isa182(OEE < 0.5でアラーム) → Alert(メール)持続的なOEEが50%を下回った時に通知をトリガーします — 慢性的なパフォーマンス低下の検出に役立ちます。
関連コネクタ
Section titled “関連コネクタ”- Chart - OEE出力からゲージをレンダリング
- ISA-18.2 - 低OEE時にアラームをトリガー
- Reshape - カウンタフィールド名を正規化
- InfluxDB v2 - トレンド分析のためにOEEを永続化
- Transform - 非単調カウンタからデルタを計算
追加リソース
Section titled “追加リソース”- OEE Foundation
- SEMI E10 - 設備の信頼性、可用性、保守性の定義と測定の仕様
- ISO 22400 - 製造オペレーション管理の主要パフォーマンス指標(KPI)
- IANA タイムゾーンデータベース