mcpField
B
bulk-engineering

bulk-engineering

github.com/claude-dev-suite開発4636 回インストール2 日前に更新
リポジトリ

bulk-engineering について

設備リストとテンプレートから設定を生成する、オートメーションエンジニア向けの DCS/PLC 一括エンジニアリング資料です。ABB Freelance、Siemens TIA Portal、Emerson DeltaV の手法を扱います。

主な機能

  1. 01表計算からデータベースへの工程
  2. 02テンプレートによる制御器と画面の生成
  3. 03ABB Freelance の PRT・DMF テンプレート化
  4. 04Siemens TIA Openness と SiVArc の手法
  5. 05Emerson DeltaV のクラスと FHX 生成

活用シーン

  1. 01モーター、バルブ、計器の設定を一括生成
  2. 02HMI 画面とアラーム設定の作成
  3. 03プロジェクト成果物間のタグ参照の検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill bulk-engineering

インストール後、Claude Code で/bulk-engineeringを入力して読み込まれたか確認します。

詳細

DCS/PLC オートメーション向け一括エンジニアリング

問題

一般的な中規模プラントでは、モーターが200~500台、バルブが100~300個、アナログループが500~2000個、ディスクリートI/Oが200~1000点あります。手作業で設定すると1インスタンスあたり15~60分かかります。一括エンジニアリングにより、数カ月かかる作業を数日に短縮できます。

一般的なパイプライン

[Instrument Index / Motor List / Valve List]  (Excel/CSV input)
        |
        v
[Engineering Database]  (SQLite / structured data)
        |
        v
[Template Library]  +  [Configuration Rules]
        |
        v
[Code Generator]  (Python + Jinja2 / string replacement)
        |
        v
[DCS/PLC Project Files]  (PRT, XML, FHX, etc.)
        |
        v
[Validation]  (cross-reference check, naming, completeness)
        |
        v
[Import to DCS Engineering Tool]

入力ドキュメント

ドキュメント含まれる内容用途
計器インデックス(I/Oリスト)すべてのタグ、タイプ、レンジ、単位、アラーム、P&ID参照タグの作成、スケーリング、アラーム
モーターリストモーターの出力、スタータータイプ、保護、インターロックモーターブロックの生成
バルブリストバルブのタイプ、故障時の位置、アクチュエーターバルブブロックの生成
制御ナラティブユニットごとの制御ロジックの説明ロジックの実装
原因・結果マトリクス表形式の安全ロジック/インターロックロジックインターロックロジックの生成

出力アーティファクト

  1. コントローラープログラム(ファンクションブロックのインスタンス+ロジック+パラメーター)
  2. I/O割り当て(チャネルとタグの対応付け)
  3. HMI/オペレーター画面(グラフィック、フェースプレート、ナビゲーション)
  4. アラーム設定(優先度、限界値、不感帯)
  5. ヒストリアンタグ(トレンド定義、保存レート)
  6. OPC サーバー設定

ABB Freelance の一括エンジニアリング(主な対象)

方法 1:PRT ファイルのテンプレート化(推奨)
  1. タイプごと(モーター、バルブ、アナログなど)に「ゴールデン」テンプレートの PRT を作成します
  2. .prt ファイルとしてエクスポートします
  3. 新しいインスタンスごとに、プログラムで次の処理を行います。
    • UTF-16 エンコーディングでテンプレートを読み込みます
    • すべての識別子(ノード名、MSR 名、EAM 信号、説明)を置換します
    • パラメーターを更新します
    • チェックサムを 0000000000 に設定します
    • 出力用の .prt ファイルを書き込みます
  4. 各 .prt を Freelance Engineering Workplace のターゲットプロジェクトにインポートします
テンプレート置換マップ(モーター)
要素テンプレート置換後
ノード名11301CLWW1A1{area}{equip}{num}
MSR プライマリ11301.CLWW.1A1{area}.{prefix}.{num}
MSR ショート11301.CW.1A1{area}.{short}.{num}
グラフ参照g11301CLWW1A1g{area}{equip}{num}
説明PHO RCK EXTR CNVR-1{description}
EAM 信号XA1/XA2/XB1/XL/XS1/XS2 + ノード同じプレフィックス + 新しいノード
方法 2:CSV によるプロジェクト全体の操作

プロジェクト全体の CSV を解析し、新しいセクションを追加して再インポートします。より強力ですが、リスクも高くなります。

方法 3:DMF 画面のテンプレート化
  1. DigiVis で画面テンプレートを作成します
  2. .DMF としてエクスポートします
  3. 新しい画面ごとに、次の処理を行います。
    • TXL テキストエントリー(タグ名、説明、単位)を置換します
    • ODB 変数バインディング(DIGI アドレス)を置換します
    • 画面のナビゲーション参照を更新します
主な課題
  1. UTF-16 エンコーディング:正しく読み書きする必要があります
  2. 内部相互参照:EAM、MSR、LAD:PARA_REF の整合性を保つ必要があります
  3. チェックサム:0 に設定すると、Freelance が再計算します
  4. 一意の名前付け:重複は許可されません
  5. エリアマッピング:タグを正しいエリアコードに対応付ける必要があります

Siemens TIA Portal の一括エンジニアリング

TIA Openness API(.NET)
using Siemens.Engineering;
using Siemens.Engineering.SW;

TiaPortal tia = new TiaPortal(TiaPortalMode.WithUserInterface);
Project project = tia.Projects.Open(new FileInfo(@"Project.ap17"));
PlcSoftware sw = device.GetService<PlcSoftware>();
sw.BlockGroup.Blocks.Import(new FileInfo(@"MotorFB.xml"), ImportOptions.Override);
PlcTagTable table = sw.TagTableGroup.TagTables.Create("Motors");
SiVArc(HMI の自動生成)

ルールベースで、「すべての MotL FB に対してフェースプレートを作成する」といったルールを定義します。PLC 構造を読み取り、WinCC 画面を自動生成します。


Emerson DeltaV の一括エンジニアリング

クラスベースの設定(最も強力)

モジュールテンプレート(クラス)を定義し、多数のインスタンスを作成します。テンプレートの変更はすべてのインスタンスに反映されます。

FHX ファイルの生成
MODULE TEMPLATE "MT_MOTOR_1SPD" /
  MODULE_CLASS = DEVICE /
{
  FUNCTION_BLOCK "DC-1" / DEFINITION = "DC" /
  { ATTRIBUTE MODE_BLK.TARGET = AUTO ; ... }
}

テキストベースで解析可能であり、Python で生成できます。


推奨テクノロジースタック

コンポーネントテクノロジー目的
言語Python 3.10+自動化の中核
Excel I/Oopenpyxl, pandas入力スプレッドシートの読み込み
テンプレートJinja2 / string.Template出力ファイルの生成
データベースSQLiteエンジニアリングデータベース
ファイル I/Ocodecs (UTF-16)Freelance ファイルの読み書き
XMLlxmlPLCopen XML、SimaticML
検証pydanticデータ検証
GUI(任意)Streamlit / PyQt6ユーザーインターフェース
VCSGitバージョン管理

Python のテンプレート方式

import codecs
import re
import pandas as pd

# Read motor list
motors = pd.read_excel('motor_list.xlsx')

# Read template
with codecs.open('MOT_template.prt', 'r', 'utf-16') as f:
    template = f.read()

# Generate for each motor
for _, motor in motors.iterrows():
    output = template
    output = output.replace('11301CLWW1A1', motor['node_name'])
    output = output.replace('11301.CLWW.1A1', motor['msr_name'])
    output = output.replace('PHO RCK EXTR CNVR-1', motor['description'])
    # ... more replacements

    # Reset checksum
    output = re.sub(r'\[CHECKSUM\];.*', '[CHECKSUM];0000000000', output)

    with codecs.open(f"{motor['node_name']}.prt", 'w', 'utf-16-le') as f:
        f.write('\ufeff' + output)

NAMUR NE 148 の要件

オートメーションエンジニアリングツールに関する NAMUR 規格では、次の項目が定められています。

  1. 単一のデータソース - 1つの計装機器を一度だけ定義し、あらゆる場所で使用する
  2. テンプレートベースのエンジニアリング - 一度定義し、何度でもインスタンス化する
  3. 一括操作 - 大量の作成・変更・削除を行う
  4. 整合性チェック - 相互参照を検証する
  5. インポート/エクスポート - Excel や P&ID ツールとの連携
  6. バージョン管理 - 変更を追跡する
  7. マルチユーザー対応 - 複数人で同時にエンジニアリングを行う
  8. ターゲット非依存性 - 複数の DCS ターゲット向けに生成する

サードパーティ製ツール

ツールベンダー説明
SmartPlant InstrumentationAVEVA一元管理された計装機器データベース。すべてのベンダー向けに DCS 設定を生成
COMOSSiemensP&ID から PLC コードを生成し、TIA Portal と連携
Engineering BaseAUCOTECオブジェクト指向で、複数の DCS 向けに出力
Unity App GeneratorSchneiderExcel ベースで Modicon PLC を生成
IgnitionInductive Automationデータベース駆動型の SCADA/HMI。Python スクリプトに対応

アセット中心と信号中心

信号中心(従来型): I/O 信号から開始します。AI_Card1_Ch3 -> タグを作成 -> 設定。ハードウェアには合致しますが、設備とのつながりはありません。

アセット中心(現代型): 物理的な設備から開始します。ポンプ P-101A には、モーター、流量、圧力、振動、保護が含まれます。テンプレート化が容易です。ISA-88/95 に準拠しています。

アプローチABB FreelanceSiemens PCS 7Emerson DeltaV
対応状況中程度(MSR 階層)中程度(プラント階層)強力(クラスベース)

コメント