P&ID(配管計装図)
Schematex の P&ID エンジンを使って、ANSI/ISA-5.1-2009 準拠の配管計装図をテキスト DSL から生成する方法を解説します。
P&ID について
配管計装図(P&ID) は、プロセスプラントの「配線図」に相当するエンジニアリングドキュメントです。すべての容器、ポンプ、熱交換器、バルブ、計装ループが標準化されたシンボルで描かれ、配管とシグナルラインで接続されています。プロセスエンジニア、制御エンジニア、HSE 監査員は同じ P&ID を参照して、プラントの仕様策定、試運転、ハザード評価(HAZOP)、本番運転を行います。P&ID は、OSHA PSM および EPA RMP のもとで化学、石油化学、製薬、水処理、発電プロジェクトに法的に要求されるエンジニアリング成果物です。
Schematex は ANSI/ISA-5.1-2009 のシンボルカタログ(計器バブル、タグ文字コード、シグナルライン種別)と、ISO 10628-1:2014 の機器シンボル(容器、塔、ポンプ、熱交換器)を実装しています。DSL は意図的にコンパクトに設計されており、LLM がプロセス記述から制御ループ P&ID を一度のプロンプトで生成できます。
1. はじめての P&ID
最小構成の P&ID は、少なくとも 1 つの機器と 1 本のプロセスラインで成り立ちます。
80% のケースは次の 3 つのルールで対応できます。
- ドキュメントの先頭に
pidを記述します(タイトルと[direction: LR]属性は省略可能)。 - 各機器を
equip <ID> : <type> [tag: "label"]で宣言します。 line <ID> from <equip>.<port> to <equip>.<port> [type: "process", size: "4\""]で機器を接続します。
計装は inst <TAG> : <category> とインデントされた measures / controls 節で別途追加します。
コメントは行頭の
#を使用します。
2. 機器
equip 文でプロセス機器を宣言します。カタログは ISO 10628 / ISA-5.1 の規則に従っています。
equip T-101 : tank_atm [tag: "Feed Tank"]
equip P-101 : pump_centrifugal
equip E-201 : hx_shell_tube [tag: "Overhead Cond"]
equip T-201 : column_tray [tag: "Stripper"]2.1 機器カタログ
| タイプ | シンボル | 用途 |
|---|---|---|
tank_atm | シリンダー+ドーム頂部 | 常圧貯蔵タンク |
tank_cone_roof | シリンダー+コーン屋根 | コーン屋根貯蔵タンク |
vessel_v | 縦型カプセル | 縦型圧力容器 |
vessel_h | 横型カプセル | 横型圧力容器 |
sphere | 塗りつぶし円 | LPG / アンモニア球形タンク |
column_tray | 縦長カプセル+水平トレイライン | 蒸留トレイ塔 |
column_packed | 縦長カプセル+クロスハッチ | 充填吸収塔 |
hx_shell_tube | 横型カプセル+管束 | シェル&チューブ熱交換器 |
hx_air_cooled | 矩形+ファン円 | 空冷式(フィンファン)クーラー |
reboiler | カプセル+平行チューブライン | ケトルリボイラー |
condenser | 横型カプセル+チューブ | オーバーヘッドコンデンサー |
pump_centrifugal | 円+右側三角形出口 | 遠心ポンプ |
pump_pd | 円+内部ギア | 容積式ポンプ |
compressor | 台形(右側が狭い) | 遠心圧縮機 |
blower | 円+3 枚羽根ファン | ブロワー / ファン |
reactor_cstr | 縦型カプセル+攪拌機 | 攪拌槽型反応器(CSTR) |
reactor_pfr | 横型カプセル+充填床ドット | プラグフロー / 固定床反応器 |
filter | 矩形+斜線ハッチ | フィルター |
cyclone | シリンダー+コーン底部 | サイクロン分離器 |
flare | 縦長スタック+炎 | フレアスタック |
cooling_tower | 砂時計形 | 誘引通風型冷却塔 |
2.2 バルブカタログ
バルブは配管ライン上に配置される機器です。タイプ固有のアクチュエーター装飾付きの bowtie スタイルで描画されます。
| タイプ | 装飾 | 用途 |
|---|---|---|
valve_gate | シンプルな蝶ネクタイ | 手動開閉(全口径) |
valve_ball | 蝶ネクタイ+塗りつぶし中心円 | 手動開閉(1/4 回転) |
valve_globe | 蝶ネクタイ+上部小円 | 手動流量制御 |
valve_butterfly | 蝶ネクタイ+中央縦線 | 1/4 回転スロットル |
valve_check | 蝶ネクタイ+アーク | 逆止弁 |
valve_control | 蝶ネクタイ+ダイアフラムアクチュエーター | 空気圧制御弁(FIC と組み合わせ) |
valve_psv | 蝶ネクタイ+45° 出口+スプリングスタック | 圧力安全弁 |
equip V-101 : valve_control [tag: "V-101 (FC)"]
equip V-303 : valve_psv [tag: "V-303 · 150 psig"]3. 配管・シグナルライン
line 文で 2 つのアンカーポイント(機器ポートまたは計器タグ)を接続します。
line L1 from T-101.bottom to P-101.in [size: "4\"", service: "water", type: "process"]
line s1 from FT-101 to FIC-101 [type: "electric"]
line s2 from FIC-101 to V-101 [type: "pneumatic"]3.1 アンカー構文
ラインの各端点は次のいずれかです。
<equip-id>.<port>— §2.2 のポート名(in、out、top、bottom、feed、shell_in、tube_out、refluxなど)<equip-id>— ポートを省略した場合、機器ファミリーに応じてデフォルトはin(接続先)/out(接続元)<inst-tag>— 計器バブルの中心(シグナルライン用)
3.2 ラインタイプ(ISA-5.1 §5)
type: | 線種 | 用途 |
|---|---|---|
process | 実線・太 | 主プロセスライン(デフォルト) |
process_minor | 実線・細 | 補助 / ユーティリティ |
pneumatic | 実線+斜めティックマーク | 空気圧アクチュエーターシグナル |
electric | 長破線 | 電気 / 4–20 mA シグナル |
hydraulic | 長破線+休止 | 油圧アクチュエーター |
capillary | 点線(丸キャップ) | 充填システム温度 |
software | 短破線・細 | DCS / PLC 内部データリンク |
mechanical | 混合破線 | 機械的連結 |
3.3 ラインタグ
標準的な PIP PIC001 タグ形式は <size>"-<service>-<sequence>-<spec> です。tag: 属性で指定すると、ラインの中点に小さな白いタグ矩形が配置されます。
line L1 from T-101.bottom to P-101.in [size: "4\"", service: "PG", tag: "4\"-PG-101-A1B"]4. 計装(ISA-5.1 §4)
inst 文で計器バブルを宣言します。タグは ISA 文字コード規則を使用します。最初の文字が測定変数、以降の文字が修飾子と機能を表します。
inst FT-101 : field_discrete %% 流量トランスミッター、ループ 101
inst FIC-101 : cr_shared %% 流量指示コントローラー(DCS)
inst PSHH-301: cr_plc %% 圧力スイッチ高高(PLC)
inst LIC-201 : cr_shared
measures D-201
controls V-2024.1 文字コード(第 1 文字)
よく使われるもの:F 流量 · L レベル · P 圧力 · T 温度 · A 分析 · S 速度 · H 手動 · Y イベント/状態。全リストは ISA-5.1 表 1 を参照。
4.2 機能修飾子
I 指示 · R 記録 · C 制御 · T 伝送 · E 検出素子 · V バルブ · S スイッチ · A アラーム · H/L 高/低。複数文字のタグに組み合わせます:FIC = 流量指示コントローラー;PSHH = 圧力スイッチ高高。
4.3 バブルカテゴリー
ISA-5.1 は設置場所(計器の配置場所)とタイプ(アナログ / 共有 / コンピューター / PLC)を区別します。Schematex は最も一般的な 4 つの組み合わせを実装しています。
| カテゴリー | バブル形状 | 用途 |
|---|---|---|
field_discrete | シンプルな円 | 現場設置アナログ計器(FT、PT) |
cr_shared | 円+水平線+六角形内書き | DCS 制御 HMI ディスプレイ |
cr_computer | 円+水平線+ダイヤモンド内書き | コンピューター機能(FY、演算) |
cr_plc | 円+水平線+四角形内書き | PLC 駆動ロジック |
field_* バリアントは水平中心線を省略;local_* バリアントは破線の中心線;cr_* バリアントは実線の中心線(「主制御盤前面」を示す)を使用します。
4.4 measures / controls
inst 宣言の下にインデントして記述します。
| 節 | 効果 |
|---|---|
measures <equip-id> | 機器からバブルへの自動ルーティング破線電気シグナルライン |
controls <equip-id> | バブルから機器(通常は valve_control)への自動ルーティング空気圧シグナルライン |
inst FT-101 : field_discrete
measures P-101
inst FIC-101 : cr_shared
controls V-101これらの自動シグナルは明示的な line 文とは独立しており、関係タイプに基づいて適切なシグナルライン種別でレンダリングされます。
5. レイアウト方向
デフォルト方向は LR(左から右)です。プロセスフィードが左から入り、製品が右に出ます。ヘッダーで変更できます。
pid "Distillation Tower" [direction: TB]
equip T-201 : column_tray
…MVP レイアウトは宣言順に主方向沿いに機器を配置し、マンハッタンシグナルラインルーティングを使用します。多段 / 並列フローレイアウトと T 字分岐はロードマップ項目です(§9 参照)。
6. 使用例:蒸留塔
実際のオーバーヘッドコンデンサーループ(リボイラー、還流ドラム、計装付き):
7. 文法(EBNF)
document = header statement*
header = "pid" ( title )? ( "[" attrs "]" )? NEWLINE
attrs = attr ("," attr)*
attr = "direction:" ("LR" | "TB")
| "units:" ("imperial" | "metric")
statement = comment
| equipment-decl
| line-decl
| instrument-decl
equipment-decl = "equip" ID ":" equip-type ( "[" attr-list "]" )? NEWLINE
equip-type = "tank_atm" | "tank_cone_roof"
| "vessel_v" | "vessel_h" | "sphere"
| "column_tray" | "column_packed"
| "hx_shell_tube" | "hx_air_cooled" | "reboiler" | "condenser"
| "pump_centrifugal" | "pump_pd"
| "compressor" | "blower"
| "reactor_cstr" | "reactor_pfr"
| "filter" | "cyclone" | "flare" | "cooling_tower"
| "valve_gate" | "valve_ball" | "valve_globe" | "valve_butterfly"
| "valve_check" | "valve_control" | "valve_psv"
line-decl = "line" ID "from" anchor "to" anchor ( "[" attr-list "]" )? NEWLINE
anchor = ID ( "." port )?
port = "in" | "out" | "top" | "bottom" | "left" | "right"
| "feed" | "reflux" | "shell_in" | "shell_out"
| "tube_in" | "tube_out" | "vapor_out" | "liquid_out"
| "bottom_return"
instrument-decl = "inst" tag ":" inst-category ( "[" attr-list "]" )? NEWLINE
( indented "measures" anchor NEWLINE )*
( indented "controls" ID NEWLINE )*
tag = letter-code "-" loop-num %% 例:"FIC-101"
inst-category = "field_discrete" | "field_shared" | "field_computer" | "field_plc"
| "cr_discrete" | "cr_shared" | "cr_computer" | "cr_plc"
| "local_discrete" | "local_shared"
attr-list = attr ("," attr)*
attr = key ":" value
key = "tag" | "size" | "service" | "type" | "set_pressure"
| "actuator" | "fail" | "trays" | …
value = quoted-string | bare-word
ID = [A-Za-z] [A-Za-z0-9_-]*正式な仕様は src/diagrams/pid/parser.ts です。このドキュメントとパーサーで差異がある場合はパーサーが優先されます。差異を発見した場合は Issue を開いてください。
8. 標準準拠
現時点での実装(P0 MVP):
- ✅ 22 種類のプロセス機器シンボル(容器、塔、ポンプ、熱交換器、反応器、分離器、フレア、冷却塔)
- ✅ 7 種類のバルブシンボル(ゲート、ボール、グローブ、バタフライ、チェック、ダイアフラムアクチュエーター付き制御弁、斜め出口+スプリング付き PSV)
- ✅ 計器バブルカテゴリー 4 種類 × 設置場所クラス 2 種類 = ISA-5.1 バブルバリアント 8 種類(現場 / 中央操作室 × 個別 / 共有 / コンピューター / PLC)
- ✅ ISA 文字コードタグのパース(
FT-101、LIC-203、PSHH-301) - ✅ 8 種類のラインタイプスタイル(プロセス / プロセスマイナー / 空気圧 / 電気 / 油圧 / キャピラリー / ソフトウェア / 機械)
- ✅
measuresとcontrolsシグナルラインの自動ルーティング - ✅ ラインの中点に白背景矩形としてラインタグをレンダリング
- ✅ マンハッタンルーティング、一段機器レイアウト
未実装(ロードマップ参照):
- ⏳ 多段 / 並列フロー配置(例:2 台のポンプをミキサーに合流させる)
- ⏳ T 字分岐と分岐配管
- ⏳ 交差検出(配管交差時のジャンパーホップ)
- ⏳ ファンクションブロックオーバーレイ(Σ サマー、PID、セレクター)
- ⏳ インターロックダイヤモンドとパーミッシブ円(ISA-5.06)
- ⏳ トレース加熱 / ジャケット付きラインの装飾
- ⏳ インラインレデューサー(同心 / 偏心)
- ⏳ 容器のノズルアノテーション
参考資料:
- ANSI/ISA-5.1-2009 — Instrumentation Symbols and Identification(米国標準)
- ISO 10628-1:2014 — Diagrams for the chemical and petrochemical industry(国際標準)
- ISA-5.06.01-2007 — Functional Requirements Documentation for Control Software
- PIP PIC001 — Piping & Instrumentation Diagram Documentation Criteria(業界補足)
9. ロードマップ
MVP の P&ID は単一の線形制御ループ(タンク → ポンプ → 制御弁 → 計装)をカバーします。実際のプラントでは 2D 配置と T 字分岐が必要です。v0.4 で予定:
- DSL 拡張:多流れレイアウト用の
equip ... [row: 0, col: 2]レーン / グリッドヒント teeプリミティブ:プロセスラインの 3 方向分岐を表現するtee T1 on L1junctionプリミティブ:配管接続用の ISA 接続ドット- 交差検出:2 本の配管が交差する場合、下側の配管に小さなアーク膨らみをレンダリング
- ファンクションブロック:
Σサマー、PIDコントローラー、LS/HSロー / ハイセレクター - インターロックシンボル:
interlock I-301ダイヤモンド、permissive P-202円 - インラインレデューサー:ラインデコレーションとしての同心 / 偏心レデューサー
- ノズルリスト:容器シンボルのサイドポートアノテーション(
N1、N2、…)
現時点では、単一ループ制御スキームがそのまま綺麗にレンダリングされます。複雑な多ストリーム P&ID には手動位置ヒントが必要です(後回し)。
関連サンプル
サンプルギャラリーからすぐに使えるシナリオ:
Found this useful?
Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.