予知保全を始めるとき、最初に要るのは新しいセンサーとは限りません。装置は異常を検知すると、アラームという記録を既に出しています。SECS/GEMの公開ライブラリsecsgem 0.3.0では、それが番号(ALID)・区分(ALCD)・文面(ALTX)の三つを載せたS5F1というメッセージで上位に届く。この履歴が、後でセンサーの値から予兆を探すときの「答え合わせの帳面」になります。secsgem 0.3.0ではアラームの既定は無効で、装置側のコードで有効にしていなければ、ホストがS5F3で有効にするまでS5F1は送られません。自社のループバック試験(実機ではなく同ライブラリ同士、正常5回)で、その手順を流して確かめました。最初の一手は、HSMS対応の装置1台について、メーカーにアラーム一覧を請求し、保全担当に履歴の残り方を聞くことです。
30秒でわかるSECS/GEMのアラーム
| 項目 | 内容 |
|---|---|
| ひとことで | 装置が出す異常の記録。番号・区分・文面の三点セット |
| 工場での意味 | 保全日報に書く「何が起きたか」を、装置自身が上位へ送る仕組み |
| なぜ今 | 予兆を探す前に、「いつ、何が起きたか」の正解がないと答え合わせができない |
| 最初の手間 | 装置1台のALID一覧と、履歴の保存先・保存期間を確かめる。配線は増えない |
| この記事の根拠 | secsgem 0.3.0のソースと、同ライブラリ同士のループバック試験(2026年10月9日、正常5回) |
予知保全は、センサーを足すところから始まるとは限らない
センサーの値をいくら貯めても、照らし合わせる相手がなければ予兆は見つかりません。
予知保全というと、まず「どこに振動センサーを付けるか」を考えがちです。センサーの値が貯まり始めると、次の壁が来る。グラフの山や谷のどれが故障の前触れだったのか、照らし合わせる記録が手元にないのです。
その記録の候補が、装置が既に出しているアラームです。温度の超過、パラメータの警告、装置の安全に関わる異常。装置は検知した異常を画面に出し、SECS/GEMでつながっていれば上位にも知らせることができます。
本質は、アラームを予兆として使うことではありません。センサーの値から予兆を探すときに、「この時点で、この異常が起きた」と照合できる目印として残しておくことです。目印のない時系列データは、どれだけ集めても答え合わせができない。逆に、目印さえ残っていれば、センサーを後から足しても過去と突き合わせられます。
工場の言葉で言うと、S5F1は装置の日誌の一行
S5F1に載るのは、番号・区分・文面の三つだけです。
前回の記事では、secsgem 0.3.0で装置役とホスト役を立て、接続から最初のイベント報告までを流しました。そこではアラームは表の一行で済ませましたが、ログを開くと装置役からはこう届いています。
S5F1
<L [3]
<B 0x82>
<U1 1 >
<A "Chamber over temperature">
> .
三つの項目を現場の言葉に置き換えると、次の通りです。
| 項目 | 今回の値 | 現場の言葉で |
|---|---|---|
| ALID | 1 | アラームの番号。装置ごとの一覧表の行番号に当たる |
| ALCD | 0x82 | 異常の区分。読み方は次の項で |
| ALTX | "Chamber over temperature" | 画面に出る文面。secsgem 0.3.0では最大120文字の文字列 |
ALCDは、区分と「発生」の印を重ねた1バイト
0x82は10進数で130。secsgem 0.3.0のソースでは、区分の定数2(EQUIPMENT_SAFETY)に、発生を示す定数128(ALARM_SET)をビット和で重ねた値です。下位の数字が「何の異常か」、128の印が「今、起きている」を表す。同じ実装では、解除のときは128を重ねず、区分の数字だけを送るように書かれています。
| 値 | secsgem 0.3.0の定数名 | 日本語にすると |
|---|---|---|
| 1 | PERSONAL_SAFETY | 人の安全 |
| 2 | EQUIPMENT_SAFETY | 装置の安全 |
| 3 | PARAMETER_CONTROL_WARNING | パラメータ管理の警告 |
| 4 | PARAMETER_CONTROL_ERROR | パラメータ管理のエラー |
| 5 | IRRECOVERABLE_ERROR | 復旧できないエラー |
| 6 | EQUIPMENT_STATUS_WARNING | 装置状態の警告 |
| 7 | ATTENTION_FLAGS | 注意フラグ |
| 8 | DATA_INTEGRITY | データの完全性 |
| 128 | ALARM_SET | 発生中の印(区分に重ねる) |
ソースの説明文では、0が "Not used"、9〜63が "Other catogeries"(綴りは原文のまま)です。
断っておくと、この表はsecsgem 0.3.0というライブラリの定数で、SEMI規格の本文と突き合わせた値ではありません。メッセージとデータ項目の定義がSEMI E5(SECS-II)の担当であることは、GEM(SEMI E30)の要旨に書かれています。
"The SEMI E5 (SECS-II) Standard provides the definition of messages and related data items exchanged between host and equipment."(SEMI E5(SECS-II)規格は、ホストと装置の間でやり取りされるメッセージと関連するデータ項目の定義を提供する)
SEMI E30-0526, 2.1(SEMI Store 要旨)
ところが、そのE5のストア要旨を最後まで読んでも、アラームもALCDもストリーム5も出てきません。要旨が語るのは、メッセージをストリームとファンクションに分類する骨組みまでです。規格本文は有料のPDFで、今回は開いていない。自社装置のALCDの意味は、装置メーカーの通信仕様書で確かめるのが確実です。
アラームは、既定では送られない
secsgem 0.3.0では、アラームの既定は「無効」です。画面にアラームが出ていても、上位に届いているとは限りません。
ソースを読むと、アラームの定義は生成した時点で self.enabled = False になっています。装置側の set_alarm は if self.alarms[alid].enabled: の分岐の中でだけS5F1を送る。無効なら、S5F1は送らずに内部の状態を「発生」に切り替え、発生用のコレクションイベントを起こすだけです。定義を作るときに装置側のコードが enabled を指定すれば、この既定は上書きされます。ライブラリのメッセージ処理の中で enabled を切り替えるのは、S5F3の受信処理です。
だから今回のホスト役は、アラームを起こす前にS5F3を送っています。実際に流れた順番はこうでした。
| 向き | メッセージ | 中身 | 現場の言葉で |
|---|---|---|---|
| ホスト → 装置 | S5F3 | ALED 0x80、ALID 1 | 「1番のアラームは知らせてください」 |
| 装置 → ホスト | S5F4 | ACKC5 0x00 | 「承知しました」 |
| 装置 → ホスト | S5F1 | ALCD 0x82、ALID 1、"Chamber over temperature" | 「1番が起きました」 |
| ホスト → 装置 | S5F2 | ACKC5 0x00 | 「受け取りました」 |
| 装置 → ホスト | S6F11 | CEID 60、レポート1000の値 | 「そのときの計器の値です」 |
正常の5回とも、この順番と値は変わりませんでした。secsgem 0.3.0の定数では、ALEDの0x80(128)がENABLE、0がDISABLE。ACKC5の0はACCEPTED(受け付け)です。
装置の画面にはアラームが出ているのに、上位の履歴には一件も残っていない。装置側で有効にしておらず、ホストもS5F3を送っていなければ、secsgem 0.3.0の装置役ではそうなります。実機のアラームが最初から有効なのか、ホストの有効化を待つのかは、装置ごとにメーカーへ確かめるしかありません。
無効でも、発生のイベントは起きる
ソースにはもう一つ読みどころがあります。無効のアラームでも、発生用のコレクションイベントは起きる。ホストがそのイベントを報告の対象にしていれば、S5F1が来なくてもS6F11で発生を知る道が残るように読めます(ソース上の挙動。今回の試験範囲外)。
S5F1には、温度の値が載っていない
その瞬間のチャンバー温度は、S5F1のどこにも入っていません。今回の試験で値を運んだのは、直後に届いたS6F11です。装置役の発生用イベントCEID 60には、S2F35でレポート1000を結び付けておきました。レポート1000は、ChamberTemp、WaferCount、RecipeNameの三つの状態変数を束ねたものです。届いた値は23.5、1、"RCP-A"。
S6F11 W
<L [3]
<U1 1 >
<U1 60 >
<L [1]
<L [2]
<U2 1000 >
<L [3]
<F4 23.5 >
<U4 1 >
<A "RCP-A">
>
>
>
> .
この23.5は試験用に固定した値で、アラームも試験スクリプトが呼び出して起こしたものです。「温度超過」の文面と温度の値がかみ合わないのはそのためで、実際の温度とアラームの間に因果はありません。
この食い違いが、かえってアラームの性質をよく表しています。ALTXは測定値ではなく、あらかじめ決めた見出しです。予兆を探すときに要るのは、見出しと、その瞬間の計器の値の両方。発生用のイベントにレポートを結び付けておくかどうかで、後から取り出せる情報の厚みが変わります。
今回測ったもの、測っていないもの
| 区分 | 内容 |
|---|---|
| 測った | S5F3 → S5F4、S5F1 → S5F2、続くS6F11(CEID 60)。ALID 1件・区分2のアラームで、正常5回 |
| 測っていない | アラームの解除、S5F3での無効化(ALED 0)、アラーム一覧の要求(S5F5)、有効なアラームの一覧(S5F7)、ALIDが2件以上の装置、区分2以外のALCD、実機 |
| ソースで読んだだけ | 解除時のALCD、S5F5・S5F7の受信処理、未登録のALIDへのS5F3にACKC5のERRORを返す処理、無効時のイベント発火 |
アラーム履歴を、保全の現場でどう読むか
停止の記録を、ALIDの番号で数え直す
保全日報の「温度異常で停止」は、書く人によって言い回しが揺れます。ALIDなら、同じ装置の中では同じ番号で数えられる。日報の停止日時とアラーム履歴を並べ、どの番号が停止の直前に出ていたかを拾うところから始められます。
注意したいのは、番号が装置の外では通じないことです。GEMの要旨は、装置メーカーが追加できる機能の例にアラームを挙げています。しかも、それが装置の種類や個体に固有であり得る、と("unique to a class (etchers, steppers, etc.) or specific instance of equipment")。同じALID 1でも、隣の装置では別の異常かもしれない。集計は装置ごとに切るのが前提になります。
区分で、見る順番を決める
名前から読むかぎり、人や装置の安全に関わる区分は、出たその場で止めて対応するものと考えられます。予兆探しでは、本稿は警告側の区分から見ることを勧めます。secsgem 0.3.0の定数で言えば、パラメータ管理の警告(3)や装置状態の警告(6)。停止に至らなかった警告が、停止の前にどれだけ出ていたか。それを並べることが、センサーを当てる箇所を絞り込む最初の手掛かりになります。実機で各区分がどう使われているかは装置次第で、ALID一覧の区分欄を見るまで分かりません。
発生と解除の対で、異常の長さを取る
secsgem 0.3.0の実装では、発生時に128を重ねたALCDを、解除時に区分だけのALCDを、それぞれS5F1で送ります。今回の装置役には、発生用にCEID 60、解除用にCEID 61も定義しました。発生と解除を対で受け取れれば、その異常が続いた長さを上位の受信時刻で残せます(ソース上の挙動。今回の試験範囲外)。実機が解除を報告するかどうかは、メーカーへの確認事項です。
始めるなら、装置1台のALID一覧と保存期間から
月曜日にやることは二つです。HSMS対応の装置1台について、装置メーカーに通信仕様書のアラーム一覧(ALID・ALCD・ALTX)を請求する。同じ装置のアラーム履歴が、装置のコントローラ、ホスト(EAP)のログ、MESのどこに、どれだけの期間残るかを保全担当に聞く。
この記事はHSMS対応の装置が対象です。通信機能のない装置が混ざっている場合は、以前の棚卸し表の三列から始めてください。棚卸し表があれば、HSMS対応の列から1台選び、下の表を埋めます。
| 確かめること | 誰に聞く・どこを見る | 見どころ | secsgem 0.3.0での観測・実装 |
|---|---|---|---|
| ALID一覧 | 装置メーカー(通信仕様書) | アラーム一覧に、ALIDごとのALCDの区分とALTXの文面が載っているか | S5F5を空の一覧で受けると全ALIDを返す実装(試験範囲外) |
| 履歴の保存先と保存期間 | 保全担当、ホスト(EAP)担当 | コントローラ、EAPのログ、MESのうち、どこに写り、いつ上書き・削除されるか | 試験の対象外 |
| 有効化の状況 | ホスト(EAP)担当、装置メーカー | 装置の既定で有効か。ホストの接続手順にS5F3が入っているか | 既定は無効。S5F3(ALED 0x80)の後にS5F1が届いた |
| 発生時の値 | ホスト(EAP)担当 | 発生用のCEIDにレポートが結び付いているか(S2F35の設定) | CEID 60に結び付けたレポートの値がS6F11で届いた |
| 解除の記録 | 装置メーカー | 解除時にS5F1が来るか。解除用のCEIDがあるか | ソース上は解除時に区分だけを送る(試験範囲外) |
二行目の保存期間は、早めに確かめてください。装置の画面で見えている履歴が、上位のどこにも写されないまま上書きされていくなら、予兆を探す段階になって照合する材料が残っていません。予知保全の最初の投資は、センサーではなく、装置が今出しているアラームを捨てない設定です。
装置とホストの接続そのものを試験したい場合は、前回の接続試験チェックリストから始められます。
参考資料
- secsgem 0.3.0(PyPI):gem/alarm.py、gem/alarm_capability.py、secs/data_items(ALCD・ALED・ALID・ALTX・ACKC5)
- bparzella/secsgem(GitHub):README、ソースコード
- SEMI E30-0526:Specification for the Generic Model for Communications and Control of Manufacturing Equipment (GEM)(SEMI Store 要旨)
- SEMI E5-0725:Specification for SEMI Equipment Communications Standard 2 Message Content (SECS-II)(SEMI Store 要旨)
- techandchips 自社実測:secsgem 0.3.0 ループバック試験(2026年10月9日、装置役PASSIVE/ホスト役ACTIVE、同一プロセス、127.0.0.1、正常5回)
- SECS/GEMを実際に流してみた|secsgem 0.3.0の装置役とホストで追う接続手順と詰まる地点(techandchips)
- SECS/GEM非対応の装置は三列に分けてMESに繋ぐ|HSMS対応・SECS-Iのみ・通信なし(techandchips)
