mcpField
T
TiaCommander

TiaCommander

ローカル
github.com/a4webdev開発ツール527 週間前に更新

TiaCommander について

TiaCommanderは、Siemens TIA Portalを扱うオートメーション技術者や開発者向けのMCPサーバーです。Openness APIを通じて、プロジェクト管理、PLCプログラミング、ハードウェア設定、診断、デプロイを行えます。

主な機能

  1. 01複数言語でのPLCブロックの読み書き
  2. 02プロジェクト、タグ、UDT、ライブラリの管理
  3. 03ハードウェアとテクノロジーオブジェクトの設定
  4. 04コンパイル、診断、クロスリファレンスの確認
  5. 05PLCへのアップロードとダウンロード

活用シーン

  1. 01TIA PortalプロジェクトでのPLCブロック作成・更新
  2. 02コンパイル結果とクロスリファレンスの確認
  3. 03ハードウェア設定やテクノロジーオブジェクトの調整
  4. 04変更をコンパイルしてPLCへデプロイ

MCP 対応

Openness APIを介してMCPクライアントをSiemens TIA Portalに接続し、プロジェクトやPLCの操作をツールとして公開します。MCP over stdioで通信します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbTiaCommander-v3.42.0.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

TiaCommander — Siemens TIA Portal 用 MCP サーバー

バージョン3.42.0
プロトコルMCP 2024-11-05 (stdio)
ランタイム.NET Framework 4.8
TIA PortalV17 – V20 (Openness API、V19 でテスト済み)
ライセンスプロプライエタリ(ベータ版は無料)

このリリースの新機能: technology_objects ツールを新たに追加しました。技術オブジェクトの一覧表示と読み取り、パラメーターの変更、構造の編集、エクスポート/インポート、オブジェクトとハードウェアの接続を行う 15 のアクションを利用できます。また、Manager に新しい Credentials タブを追加し、プロジェクトごとの PLC 認証情報に対応しました。まずプロジェクト固有のパスワードを試し、設定されていない場合はグローバルのパスワードを使用します。ブロックの上書きはトランザクション方式になりました。インポート前にブロックをエクスポートし、インポートに失敗した場合は復元します。また、上書きによって属性、ブロック番号、フォルダーの配置が失われることもなくなりました。さらに、コンパイラーの結果には実際の診断情報のみが表示されるため、合計数は常にコンパイラー自身のカウントと一致します。v3.15.2 以降、ほかにも数十件の修正と改善を行っています。すべての変更については CHANGELOG.md をご覧ください。

* プロジェクト作業では V17 から V20 までをサポートしています。V16 以前は検出され、明確なメッセージとともに拒否されます。完全にテスト済みなのは V19 のみです。TIA Portal はバージョン間で後方互換性のある Openness API を維持しているため、ほかのバージョンでも動作する見込みです。


概要

TiaCommander は、Openness API を介して AI アシスタントを Siemens TIA Portal に接続する MCP サーバーです。自然言語を通じて、AI による PLC プログラミング、プロジェクト管理、ライブラリ操作、ハードウェア構成、相互参照分析、デプロイを実行できます。

テスト済みの AI クライアント: Claude Desktop、Claude Code、VS Code(Copilot)、Cursor、Windsurf、Codex CLI、Gemini CLI。

19 個のツール、230 個のアクションで、TIA Portal プロジェクトのライフサイクル全体をカバーします。

ツール機能
adminサーバー管理、使用統計、エクスポートストレージ
alarm_textアラームテキストとテキストリスト、XLSX のインポート/エクスポート
blocks_readFB/FC/OB/DB ブロックの読み取り、検査、エクスポート(XML、SCL)
blocks_writeブロックの作成とインポート(SCL、LAD、FBD、STL)
dbグローバルおよびインスタンスデータブロックのメンバーと値
diagnostics接続の設定、オンライン/オフライン比較、PLC の状態
download_uploadコンパイルチェック付きの PLC へのダウンロード/PLC からのアップロード
foldersプロジェクトツリー内のグループの移動と整理
get_infoサーバーの機能とバージョン
hardwareデバイス、ラック/スロット、ネットワーク、I/O の設定
libraryマスターコピー、ライブラリタイプ、バージョン管理されたインスタンス化
live_data稼働中のコントローラーのリアルタイム値と CPU 診断情報
open_managerTiaCommander Manager ウィンドウを開く
sessionプロジェクトのオープン、保存、アーカイブ、切り替え、接続のライフサイクル管理
tagPLC タグテーブル:作成、編集、検索、アドレス割り当て
technology_objects軸などの技術オブジェクト:読み取り、調整、ハードウェアへの接続
udtユーザー定義型:作成、メンバーの編集、インポート/エクスポート
watchウォッチテーブルと強制テーブル
xref相互参照:呼び出し元、未使用ブロック、孤立したインスタンス DB

ダウンロード内容

TiaCommander-v3.42.0-portable/
├── bridge/                              ← Live PLC data helper (S7CommPlus / TLS)
│   ├── libcrypto-3-x64.dll
│   ├── libssl-3-x64.dll
│   ├── S7CommPlusDriver.dll
│   ├── TiaCommander.S7Bridge.exe
│   ├── TiaCommander.S7Classic.dll
│   └── zlib.net.dll
├── data/
│   └── exports/                         ← Export output folders
│       ├── alarm_text/
│       ├── hardware/
│       ├── tag/
│       └── watch/
├── docs/
│   ├── configs/
│   │   ├── claude_code.txt
│   │   ├── claude_desktop_config.json
│   │   ├── codex_cli_config.toml
│   │   ├── cursor_mcp.json
│   │   ├── gemini_cli_settings.json
│   │   ├── generic_stdio.json
│   │   ├── vscode_copilot_mcp.json
│   │   └── windsurf_mcp_config.json
│   ├── 1-QUICKSTART.md
│   ├── KNOWN_LIMITATIONS.md
│   ├── LICENSE.txt
│   ├── README.md
│   └── THIRD-PARTY.md
├── help/
│   ├── github-offline.html
│   └── readme-offline.html
├── licenses/                            ← Full third-party licence texts
│   ├── Apache-2.0.txt
│   ├── BSD-3-Clause.txt
│   ├── GPL-3.0.txt
│   ├── LGPL-3.0.txt
│   ├── Microsoft-WebView2-SDK.txt
│   ├── MIT.txt
│   └── Polyform-Noncommercial-1.0.0.txt
├── Resources/
│   ├── logoBlack.png
│   └── tiacommander.png
├── runtimes/                            ← WebView2 native loaders
│   ├── win-x64/native/WebView2Loader.dll
│   ├── win-x86/native/WebView2Loader.dll
│   └── win-arm64/native/WebView2Loader.dll
├── Templates/                           ← Block XML, alarm & diagnostics templates
│   ├── diagnostics/
│   │   ├── TC_Diag_1200.xml
│   │   └── TC_DiagOB.xml
│   ├── Fb.xml
│   ├── Fc.xml
│   ├── GlobalDb.xml
│   ├── Ob.xml
│   ├── Ob_FBD.xml
│   ├── Ob_LAD.xml
│   ├── Ob_SCL.xml
│   └── TextListTemplate.xlsx
├── x64/                                 ← SQLite native library (64-bit)
│   └── SQLite.Interop.dll
├── x86/                                 ← SQLite native library (32-bit)
│   └── SQLite.Interop.dll
├── CHANGELOG.md
├── EPPlus.dll
├── EPPlus.Interfaces.dll
├── icon.png
├── manifest.json
├── Microsoft.Bcl.AsyncInterfaces.dll
├── Microsoft.IO.RecyclableMemoryStream.dll
├── Microsoft.Web.WebView2.Core.dll
├── Microsoft.Web.WebView2.WinForms.dll
├── System.Buffers.dll
├── System.ComponentModel.Annotations.dll
├── System.Data.SQLite.dll
├── System.IO.Pipelines.dll
├── System.Memory.dll
├── System.Numerics.Vectors.dll
├── System.Runtime.CompilerServices.Unsafe.dll
├── System.Security.Cryptography.Xml.dll
├── System.Text.Encodings.Web.dll
├── System.Text.Json.dll
├── System.Threading.Tasks.Extensions.dll
├── THIRD-PARTY-NOTICES.md
├── TiaCommander.exe                     ← MCP server + Manager GUI
└── TiaCommander.exe.config

インストーラーも、レジストリの変更も、システムの変更もありません。展開して、設定し、実行するだけです。最新の .zip はGitHub Releasesからダウンロードしてください。

Claude Desktop をお使いの方: Releasesから .mcpb バンドルをダウンロードし、設定 → 拡張機能 → 詳細設定 → 拡張機能をインストールからインストールしてください。設定ファイルを編集する必要はありません。詳細はクイックスタートガイドをご覧ください。

前提条件: Siemens TIA Portal V17 以降が、Openness コンポーネントを有効にした状態でお使いのマシンにインストールされている必要があります。TiaCommander は、実行時に Siemens Openness ライブラリを TIA Portal のインストール先から直接読み込みます。TIA Portal がインストールされていない場合、サーバーは機能を制限した縮退モードで起動し、セットアップを案内します。


このツールが存在する理由

まず初めに、私たちはソフトウェア開発者であり、日々 Siemens 製品を使うオートメーションエンジニアです。自社の設備でも、クライアントの現場でも、産業オートメーションが必要なあらゆるプロジェクトでも使っています。私たちは Siemens 製品が大好きです。Siemens ならシンプルで、ただ動きます。毎回、いつでもです。

Siemens PLC のプログラミング、配線、テスト、デバッグを実際に何年も行い、さまざまなものを実現してきた中で、TiaCommander は社内のニーズのためだけに作りました。これが開発した正直な理由です。自分たちのために作り、素晴らしいツールだと感じています。作業が10倍、時には20倍、あるいはそれ以上速くなり、「いったい、これがなかった頃はどうやって作業していたんだろう?」と思うほどです。

AI アシスタントを通じて、1分足らずでプロジェクトのコンテキスト全体を取得できます。SCL、LAD、FBD、DB などのブロックを数秒で作成し、インターフェイス構造の取得、マルチインスタンス DB の構築、相互参照の実行、コンパイル、デバッグ、エラーの取得など、さまざまな操作ができます。

以下のツールマップにある各ツールは、Siemens PLC を使った日々の業務で実際に必要としている、または使っている機能をもとに作られています。S7-1200 シリーズでも S7-1500 シリーズでも関係ありません。Siemens TIA Portal が対応していれば、TiaCommander で管理できます。

このツールを公開するにあたり、皆さんの開発ワークフローで不足している機能について、ぜひお聞かせください。遠慮なく機能リクエストを送信したり、バグを報告したり、感想をお聞かせください。エンジニア同士、いただいたフィードバックにはすべて目を通します。

TiaCommander をお楽しみください。


アーキテクチャ

AI Clients
  Claude Desktop / Code · Cursor · VS Code / Copilot · Windsurf · Codex CLI · Gemini CLI
    │
    │  JSON-RPC 2.0 · stdio
    ▼
TiaCommander MCP Server
  19 tools · 230 actions · standalone I/O · .NET Framework 4.8
    │
    │  Siemens Openness API
    ▼
TIA Portal  (V17 – V20*, tested on V19)
    │
    ▼
S7-1200 · S7-1500 · S7-300 · S7-400 · ET 200

ツールマップ

ツール / アクション#説明
admin13サーバー管理
    clear_exports(任意 olderThanHours=24) 期限切れのエクスポートを削除します。
    delete_export(exportId) 単一のエクスポートを削除します。
    get_device_profilesサーバーが認識したすべての一意なデバイス。
    get_export(exportId、任意 offset、length、raw=false) ページング付きでエクスポート内容を取得します。raw=true はメタデータヘッダーなしで内容のみを返します。
    get_recent_errors(任意 count=10) デバイス/ファームウェアのコンテキスト付きで、直近 N 件の失敗したツール呼び出し。
    get_system_infoOS、.NET バージョン、TIA Portal バージョン、プロセス稼働時間。
    get_stats(任意 top_n=20) ツール+アクションごとの呼び出し統計を、合計呼び出し回数でソートして表示します。
    get_versionサーバーバージョン、DB パス、DB サイズ。
    list_exports(任意 tool、limit=20) エクスポート DB に保存された最近のエクスポート結果。
    open_file(filePath) Windows の既定のアプリケーションを使用してファイルを開きます (.xlsx は Excel、.html はブラウザーなど)。エクスポートアクションの後に使用すると、ユーザーが結果をすぐに確認できます。
    reset_device_catalogローカルのデバイスカタログをクリアし、接続されていれば TIA Portal から再ダンプします。
    save_export(exportId、outputPath) エクスポート内容をファイルに保存します。バイナリ形式 (XLSX) の場合は base64 を自動デコードします。保存後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    search_device_catalog(任意 filter、limit=50) ローカル DB からインストール済みの TIA ハードウェアカタログを検索します。TIA Portal は不要です。ハードウェア参照の検索 (注文番号、CPU モデル、互換モジュール) に使用します。
alarm_text15アラームテキストとテキストリスト
    add_entries(deviceName、textlistName、entries[]) テキストリストにエントリを追加します。各エントリ: {from, to, text}。
    create_textlist(deviceName、textlistName、任意 listRange=Decimal、comment、entries[]) 新しいテキストリストを作成します。空のデバイスでも動作します (テンプレート経由で自動シード)。1 回の呼び出しで任意でエントリを設定できます。
    delete_entries(deviceName、textlistName、fromValues[]) From 値でエントリを削除します。
    delete_textlist(deviceName、textlistName) ユーザーテキストリストを削除します。システムテキストリストは拒否されます。
    export_alarm_classes(deviceName、outputPath) アラームクラス定義をエクスポートします。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_alarm_data(deviceName、format:csv|xlsx、任意 scope:alarm_texts|textlists|alarm_classes、outputPath、includeInfoText) ドキュメント用にアラームデータを CSV または XLSX にエクスポートします。既定では exports_root\alarm_text\ になります。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_alarm_texts(deviceName、outputPath、任意 includeInfoText) アラームインスタンステキストを XLSX にエクスポートします。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_textlists(deviceName、outputPath、任意 textListNames[]) テキストリストを XLSX にエクスポートします。フィルターがなければすべて。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    get_entries(deviceName、textlistName) テキストリストのすべてのエントリを読み取ります。
    import_alarm_classes(deviceName、filePath) アラームクラス定義をインポートします。
    import_alarm_texts(deviceName、filePath) XLSX からアラームインスタンステキストをインポートします。
    import_textlists(deviceName、filePath、任意 overwrite) XLSX からテキストリストをインポートします。
    list_textlists(deviceName) システムおよびユーザーテキストリストを名前、ID、範囲とともに一覧表示します。
    update_entries(deviceName、textlistName、entries[]) From 値でエントリを更新します。各エントリ: {from, to?, text?}。
    update_textlist_comment(deviceName、textlistName、newComment) テキストリストのコメントを直接更新します。
blocks_read17ブロックの読み取りとエクスポート
    check_consistency(deviceName) M10: IsConsistent フラグはコンパイルに遅れることがあります — 代わりに compile_all の出力を使用してください。
    compile_all(deviceName) すべてをコンパイルします。F6 を解決するために早めに実行してください。初回実行は遅いです (約 30~60 秒)。
    compile_block(deviceName、blockName) 1 つのブロックをコンパイルします。
    export_all_xml(deviceName、outputDirectory) すべてのブロックを .xml ファイルとして出力します。M5: 引数は 'outputPath' ではなく 'outputDirectory' です。エクスポート後、ユーザーに出力ディレクトリを開くかどうかを確認してください (admin action=open_file を使用)。
    export_source(deviceName、blockName、任意 outputPath、returnInline、outputDirectory) SCL/STL ソース。outputPath を指定するとディスクに書き込まれます (M3: これは DIRECTORY でなければなりません)。省略すると returnInline が適用されます。LAD/FBD は空を返します。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_xml_file(deviceName、blockName、任意 outputPath、returnInline、outputDirectory) ブロック XML。outputPath を指定するとディスクに書き込まれます。省略すると returnInline が適用されます。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_xml_inline(deviceName、blockName) 解析済み XML の概要。F6 が適用されます。
    get_all_interfaces_summary(deviceName) すべてのブロックについてセクションごとのメンバー数。
    get_compiler_errors(deviceName) エラーのみのフィルター。M8 の再コンパイルの癖は同じです。
    get_compiler_messages(deviceName) M8: 新たなコンパイルをトリガーします。コンパイル直後なら compile_all の出力を優先してください。
    get_details(deviceName、blockName) 種類、番号、言語、インターフェースサイズ、整合性。
    get_edit_capabilities(deviceName、blockName、任意 networkIndex) #232 P0: 発見のための呼び出し。ネットワークごとに、それ自体のコンパイル単位の言語 (ブロックレベルのものは混在言語ブロックでは誤解を招きます)、ラングモデルがそれをラウンドトリップできるか、どの書き込みアクションが適用されるか、またどれも適用されない場合のフォールバック経路を返します。散在する十数のヒントの代わりに 1 回の呼び出しで済みます。コストはエクスポート 1 回 — 実測: ネットワーク単位のオブジェクトモデルの再... はありません。
    get_element_pins(deviceName、blockName、networkIndex、任意 elementUId または elementIndex) 「配線する前に見る」カード: Call または命令 Part について、セクション、EXPECTED データ型 (呼び出し先のインターフェース / インスタンス構造からライブで読み取り)、現在の配線 (オペランド + その解決済み型、または UNWIRED OpenCon) を含むすべてのピン。セレクターなしの場合: UId 付きでネットワークの要素を一覧表示します。blocks_write の前に使用...
    get_interface(deviceName、blockName) 完全なインターフェースセクション。F6: 不整合なブロックでは不安定になります — 先に compile_all を実行してください。
    get_network(deviceName、blockName、networkIndex、任意 includeUIds) #171 ラングエディターの READ 側: ネットワークのフラットな Parts+Wires グラフを JSON ラングモデルに再構築します — これは create_block の networks[].rungs が受け入れる語彙とまったく同じです (contacts/parallelBranches/box/output/call、および ENO 連鎖の呼び出しチェーン用の enFrom)。出力: {title, comment, editable, rungs[], unmodelled[]}。editable=true は、そのモ... を意味します。
    get_xml_raw(deviceName、blockName) 生の XML 文字列。F6 が適用されます。
    list(deviceName、任意 typeFilter:all|code|OB|FB|FC|DB|GlobalDB|InstanceDB、includeInstanceDbs) コンパクトなブロックテーブル。
blocks_write26ブロックの作成とインポート
    add_interface_member(deviceName、blockName、section、memberName、dataType、任意 startValue、comment、confirm) #171 インターフェースエディター: FB/FC/OB インターフェースセクション (Input、Output、InOut、Static、Temp、Constant) にメンバーを追加します。BLAST RADIUS は最初に計算されます (呼び出しサイトが古くなる xref の呼び出し元 + FB のインスタンス DB + #183 reinitializeDataBlocks の警告: ダウンロードすると影響を受ける... の実際の値がリセットされます)。
    add_multi_instance_member(deviceName、parentFB、memberName、innerType、任意 onCollision=fail|replace) FB に型付き静的メンバーを追加します。innerType はデバイスまたは project.ProjectLibrary に存在する必要があります。
    add_network(deviceName、blockName、任意 position、title、comment) 指定した位置 (既定: 末尾) に空のネットワークを挿入します。LAD/FBD のみ — SCL ブロックは単一のコンパイル単位を持ち、複数のネットワークをサポートしません。ロジックを追加するには、後で populate_network / insert_rung を使用してください。
    copy_block(deviceName、blockName、newName、任意 targetFolder、createParents=false) ブロックを新しい名前で複製します (ブロック名は PLC 全体で一意であるため、newName は必須で、再帰的にチェックされます)。targetFolder を省略すると、コピーはソースブロックの隣に配置されます。コピーにはその型の次の空き番号が割り当てられます。ソースブロックは決して変更されません。OFFLINE が必要です。
    create_block(deviceName、blockName、blockType:FB|FC|OB、language、任意 blockNumber、interface、sclCode、networks、blockTitle、blockComment、author、version、memoryLayout、secondaryType、overwrite、targetFolder、createParents) カスタムインターフェースとロジックを備えた完全なブロック作成。blockNumber は省略すると自動割り当てされます — 本当に新しいブロックに対してのみです。overwrite=true を使用して既存のブロックを更新する場合 (e...
    create_fb(deviceName、fbName、任意 fbNumber、language:LAD|SCL|FBD (STL は非サポート - Openness の制限)、author、version、autoCompile=true、targetFolder、createParents=false) 新しい FB。番号は省略すると自動割り当てされます。自動コンパイルしてエラーを返します。targetFolder ('Motors/Drives' 構文) はそのフォルダー内に直接ブロックを作成します。存在しないフォルダーは createParents=true でない限りエラーです。
    create_fc(deviceName、fcName、任意 fcNumber、language、returnType=Void、author、version、autoCompile=true、targetFolder、createParents=false) 新しい FC。番号は省略すると自動割り当てされます。自動コンパイルしてエラーを返します。targetFolder は create_fb と同じです。
    create_ob(deviceName、obName、任意 obNumber、language、author、version、autoCompile=true、targetFolder、createParents=false) 新しい OB。番号は省略すると自動割り当てされます (123 から開始)。obNumber=1 は許可されます。2~122 は予約済みです。自動コンパイルしてエラーを返します。targetFolder は create_fb と同じです。
    delete_block(deviceName、blockName、任意 force=false) 任意のブロックを削除します。インスタンス DB は force=true でない限り拒否されます (孤立したインスタンス DB に便利です)。
    delete_interface_member(deviceName、blockName、memberName、任意 section、confirm) インターフェースメンバーを削除します。同じ blast-radius の確認ゲートがあります。メンバーをまだ参照しているロジックはコンパイルに失敗します — 先に xref get_references で確認してください。
    delete_network(deviceName、blockName、networkIndex) 0 始まりのインデックスでネットワークを削除します。最後のネットワークの場合は拒否します。LAD/FBD のみ。
    delete_rung(deviceName、blockName、networkIndex、rungIndex、任意 expectTitle) ラング rungIndex を削除します。次のラングが削除されるラングから (enFrom で) 連鎖している場合は拒否します — 先にターゲットを変更するか、末尾を削除してください。
    delete_scl_statement(deviceName、blockName、networkIndex、statementIndex、matchText) #232 P0: SCL ネットワークから 1 つのステートメントを 1 回の呼び出しで削除します。まず blocks_read action=get_network でステートメントを読み取ってください。これは 0 始まりで、空白を正規化したテキストとともに一覧表示されます。matchText は必須で、何かが変更される前に statementIndex のステートメントと比較されます — インデックスはあらゆる編集でずれるため、...
    import_xml_file(deviceName、filePath、任意 overwrite、autoCompile=true、targetFolder、createParents=false) XML ファイルからインポートします。自動コンパイルしてエラーを返します。大きなペイロードに推奨されます。targetFolder は import_xml_inline と同じです。OVERWRITE はマージではなくオブジェクト全体の置換です: overwrite=true の場合、ドキュメントに存在しない要素は保持されるのではなく既定値に RESET されます (ImportOptions.Overrid...
    import_xml_inline(deviceName、xmlContent、任意 overwrite、autoCompile=true、targetFolder、createParents=false) XML 文字列からブロックをインポートします。自動コンパイルしてエラーを返します。大きなペイロード (12KB 以上) で検証済みです。targetFolder はそのフォルダーにインポートします。これがない場合、overwrite=true は既存ブロックが既に存在するフォルダーを自動的にターゲットにします (所有グループへのインポート)。OVERWRITE はマージではなくオブジェクト全体の置換です: wit...
    insert_rung(deviceName、blockName、networkIndex、rung、任意 position、expectTitle) #171 ラングエディター: 既存の LAD ネットワークの指定した位置 (既定: 追加) に 1 つのラングを挿入します (create_block のラング語彙: contacts/parallelBranches/box/output または call{blockName,blockType,instanceDB,scope,pins}、eno 連鎖用の任意 enFrom)。ネットワークは完全にモデル化されている必要があります (get_network editable=true) — 拒否され...
    move_block(deviceName、blockName、targetFolder、任意 createParents=false) ブロックを別のフォルダーに移動します ('' または '/' = コンテナールート)。Openness V19 にはネイティブの移動はありません — これはエクスポート → 削除 → ターゲットグループへのインポートであり、インポートが失敗した場合は元のフォルダーに自動的に復元されます。再解決で検証され、その後再コンパイルされます。OFFLINE が必要です。
    populate_network(deviceName、blockName、networkIndex、rungs、任意 overwriteExisting、expectTitle) rungs[] 配列 (enFrom チェーンを含む create_block の networks[].rungs 語彙) でネットワークを埋めます。空のネットワーク (新規 add_network) は直接埋められます。空でないネットワークは overwriteExisting=true かつ完全なモデル化 (内容を保持するために先に get_network) が必要です。#164 形式の JSON パス付きインポート前検証...
    remove_multi_instance_member(deviceName、parentFB、memberName) 静的マルチインスタンスメンバーを削除します。
    rename_block(deviceName、blockName、任意 newName、newNumber) 名前変更 / 番号変更。呼び出し元への自動カスケードは行いません。
    replace_network(deviceName、blockName、networkIndex、任意 title、comment) ネットワークのタイトル / コメントを置換します。LAD/FBD のみ — sclCode は非サポートです (SCL XML はトークン化されています。SCL ブロックを再構築するには overwrite=true で create_block を使用してください)。
    split_network(deviceName、blockName、networkIndex、splitBefore[]、titles[]) #232 P0: 1 つの SCL ネットワークをステートメント境界で複数に分割し、それぞれに独自のタイトルを付けます。splitBefore は新しいネットワークが始まるステートメントインデックスを列挙します: 6 ステートメントのネットワークで [2,4] を指定すると、0-1、2-3、4-5 の 3 つのネットワークになります。titles[] は splitBefore よりちょうど 1 つ多いエントリを持つ必要があり、決して既定値にはなりません。分割であり、... ではありません。
    update_interface_member(deviceName、blockName、memberName、任意 section、newName、newDataType、newStartValue、newComment、confirm) インターフェースメンバーを更新または名前変更 (newName) します。セクションを省略すると、すべてのセクションで検索されます。見つからない場合はセクションごとにメンバーを一覧表示します。同じ blast-radius の確認ゲートがあります。空文字列の newStartValue/newComment は削除します。
    update_network(deviceName、blockName、networkIndex、任意 title、comment) ネットワークのタイトル / コメントを更新します (0 始まりのインデックス)。
    update_network_element(deviceName、blockName、networkIndex、elementUId または elementIndex、任意 newInstance、newTarget、pinWires) LAD/FBD の Call 要素に対する外科的な編集。newInstance: インスタンス DB を交換します。newTarget: 別の FB/FC にリターゲットします (パラメーターを再生成し、一致する配線を保持します)。pinWires: ピン名を新しいオペランドにマッピングする JSON オブジェクト — 変更の前にピンの宣言された型に対して型チェックされます...
    update_rung(deviceName、blockName、networkIndex、rungIndex、rung、任意 expectTitle) ラング rungIndex を指定されたラングオブジェクトで置換します。insert_rung と同じモデル化されたネットワークの要件と番号振り直しの注意事項が適用されます。
db11データブロック管理
    add_member(deviceName、dbName、memberName、dataType、任意 comment、initialValue) グローバル DB にメンバーを追加します。配列 (例: Array[0..9] of Int) や UDT 参照を含むすべての型をサポートします。グローバル DB のみ — インスタンス DB は拒否されます。
    create(deviceName、dbName、任意 dbNumber、author、version、memoryLayout、targetFolder、createParents) 新しいグローバル DB。番号は省略すると自動割り当てされます。targetFolder ('Motors/Drives' 構文) はそのフォルダー内に直接 DB を作成します。存在しないフォルダーは createParents=true でない限りエラーです。インスタンス DB には代わりに create_instance_db を使用してください。
    create_instance_db(deviceName、dbName、instanceOfName、任意 dbNumber) FB のインスタンス DB を作成します。TIA は FB からインターフェースを自動的に設定します。instanceOfName は既存の FB でなければなりません。番号は省略すると自動割り当てされます。
    delete(deviceName、dbName) DB を削除します。インスタンス DB は拒否されます (代わりに所有する FB を削除してください)。
    delete_member(deviceName、dbName、memberName) グローバル DB からメンバーを削除します。最後のメンバーの場合は拒否します。
    get_member(deviceName、dbName、path、任意 depth=2) #171 任意の深さでのインスタンスデータ READ: ネストされたマルチインスタンスチェーン、命令インスタンス、UDT/struct メンバーへのドット付きメンバーパス (例: 'modbus.BWTT-RR8_Instance.mb_addr')。カードには型、開始値 (配列要素ごとを含む)、コメント、指定された深さまでの子が表示されます。グローバル DB とインスタンス DB の両方で動作します (例外: システムブロックの iDB はエクスポートできません)。メンバー...
    get_structure(deviceName、dbName) XML エクスポートによる、型、開始値、属性を含む完全なメンバーリスト。フラットなリストです (ネスト階層なし)。
    list(deviceName) すべてのグローバル DB とインスタンス DB。名前は修飾された 'Folder/Sub/Name' パスです (#185)。
    set_start_value(deviceName、dbName、path、value | values{path:value,...}) #171 任意の深さでのインスタンスデータ WRITE、グローバル DB とインスタンス DB の両方 (開始値のみ、構造は決して変更しません - マルチインスタンス設定の面、例えばポーリング DB 内のステーション呼び出しの mb_addr 既定値)。配列要素は最後のセグメントで [index] を使用します ('Cfg_HwId[3]')。値は文字列としての TIA リテラルです ('33'、'TRUE'、'T#2S'、'16#00FF')。すべての pa...
    update_member(deviceName、dbName、memberName、任意 newDataType、newStartValue、newComment) メンバープロパティを更新します。少なくとも 1 つのフィールドが必要です。newStartValue が明示的に指定されない限り、型変更時に開始値は保持されます。型/値の不一致により TIA が拒否する場合は、互換性のある newStartValue を指定してください。連続したメンバー編集は DB をエクスポート不整合な状態にする可能性があります — ツールは自動コンパイルして ON... で再試行します。
    update_member_comment(deviceName、dbName、memberName、newComment) コメントのみの更新のショートカット。重要: 引数は 'newComment' であり、'comment' ではありません。
diagnostics7PLC 診断と接続
    compare_online_offline(deviceName) オフラインプロジェクトとオンライン PLC の間で、すべてのソフトウェアオブジェクト (ブロック、タグ、UDT、テクノロジーオブジェクト) を比較します。オフラインの場合は自動接続します。読み取り専用。項目ごとのステータス (Identical/Different/Only on PLC/Only in project) を返します。
    configure_connection(deviceName、pcInterfaceName、confirm、任意 targetIp、skipConfirm=false) ダウンロード接続をプログラムで設定します。targetIp はハードウェア構成からプロジェクトで設定されたデバイスの IP を既定とします — 通常のケースでは省略してください。別のアドレス (例: scan_devices から) をターゲットにする場合にのみ渡してください。TargetInterface 内に ConfigurationAddress を作成し、その後構成を適用します。...
    get_device_ip(deviceName) 読み取り専用。デバイスのプロジェクトで設定された IP (configure_connection と download_to_device の既定のターゲット) と、IP/マスク/サブネットを持つすべてのネットワークインターフェースを報告します。プロジェクトから「この PLC はどの IP を使うか」に答えるために呼び出します — ネットワークスキャンは不要です。
    get_plc_status(deviceName) 接続状態 (Online/Offline/NotReachable/Protected/...)、ダウンロード接続が構成されているかどうか、および CPU の実際の動作状態をライブで読み取ります。RUN/STOP はエンジニアリング API にまったく存在しないため、状態は live_data 経由で取得されます: このアクションは、指定したデバイスの IP を解決し、空きがあれば live-data セッションを開き、CPU の ID を... に対して確認します。
    go_offline(deviceName) PLC から切断します。
    go_online(deviceName) OnlineProvider 経由で PLC に接続します。インターフェースが構成されていることを確認するために、先に download_check を (サイレントで) 実行してください。
    scan_devices(任意 deviceName) 読み取り専用のネットワークスキャン。GetAccessibleDevices() 経由でアクセス可能な PLC を検出します。PcInterface ごとに IP、DeviceSeries、MAC、Name を返し、それぞれに [IN PROJECT: ] または [NOT IN THIS PROJECT] の注釈が付きます。deviceName 指定時: DownloadProvider 経由でスキャンします。指定なし: StationUploadProvider 経由でスキャンします (プロジェクトスコープ)。確認は不要です。SCOPE: これはレイヤー 2 の PROFINET DCP ブロードキャストです — これは...
download_upload4PLC へのダウンロード / アップロード
    download_check(deviceName) サイレントなプリフライト。ダウンロードまたは go_online の前にこれを呼び出してください。呼び出す前にテキストを出力しないでください。判定: READY (コンパイルを含むすべてのゲートが検証済み)、NOT READY (ゲートが FAILED — 問題を伝えてください)、COMPILE UNVERIFIED (コンパイルゲートを実行できなかった、例: デバイスがオンライン — 合格ではありません。download_to_device 自体はオフラインでコンパイルしますが、チェックはそれを検証していません)。
    download_to_device(deviceName、confirm、任意 mode=software_changes、stopModules=false、startAfterDownload=true、reinitializeDataBlocks=false、pcInterfaceName) 破壊的。コンパイルの事前チェックが必須です。confirm='I understand this will modify the PLC'。mode: software_changes|software|hardware_software|hardware。pcInterfaceName はどのネットワークアダプター経由でルーティングするかを選択します (scan_devices の結果から)。hardware/...
    upload_checkサイレントなプリフライト。アップロードの前にこれを呼び出してください。呼び出す前にテキストを出力しないでください。結果が READY を示す場合は、upload_station に進んでください。NOT READY の場合は、問題をユーザーに伝えてください。
    upload_station(modeName、pcInterfaceName、confirm、任意 addressIndex=0、readPassword、writePassword) プロジェクトに対して破壊的 (デバイスを追加します)。confirm='I understand this will add a device to the project'。
folders5プロジェクトツリーのフォルダー (グループ)
    create_folder(deviceName、container、path、任意 createParents=false) path にフォルダーを作成します。ネストされたパスは '/' を使用します (例: 'Motors/Drives')。存在しない中間フォルダーは createParents=true でない限りエラーです — 決してサイレントに作成されません。
    delete_folder(deviceName、container、path、任意 deleteContents=false、confirm) 破壊的。空のフォルダーは即座に削除されます。空でない場合は deleteContents=true と 'I understand' を含む confirm の両方が必要です — 削除は含まれるすべての項目とサブフォルダーを完全に削除します。
    find(deviceName、container、query、任意 path、typeFilter、caseSensitive=false) コンテナー全体にわたる glob 検索: * は任意のシーケンス、? は 1 文字に一致します (例: 'mb_*'、'HMI')。Name [key=value, ...] (get_tree と同じエンベロープとコンテナーごとのキー) + 一致ごとのフォルダー位置を返します。切り捨てが明示された 200 件が上限です。get_tree は SHAPE に答え、find は IDENTITY に答えます — y... の場合は find を使用してください。
    get_tree(deviceName、container、任意 path、nested=true、includeItems=false、depth=0 無制限 (1 = 直接の子)、typeFilter、limit) 1 回の呼び出しでのツリービュー: 項目/サブフォルダーの数を持つフォルダー、および includeItems=true の場合は含まれる項目。項目行はすべてのコンテナーで 1 つのエンベロープを使用します: Name [key=value, key=value] で、キーは小文字、カンマ+スペース区切り、該当しないキーは省略されます。コンテナーごとのキー...
    rename_folder(deviceName、container、path、newName) technology_objects でのみ動作します。他の 5 つのコンテナー (program_blocks、tag_tables、udts、watch_tables、external_sources) では、フォルダーの Name は Openness V19 では取得専用であり、これは AccessMode 付きの Error: RenameFailed を返します — それらは TIA Portal UI で名前を変更してください。いずれにも移動 API はありません。(#231 修正 14: 以前のテキストではこれを ... と呼んでいました)
get_info-サーバー情報
hardware14ハードウェア構成
    compile_allすべての HW をコンパイルします。M4: 'Not compilable' = 再コンパイルが必要なものは何もなかった (エラーではありません)。
    compile_device(deviceName) F1: NullReferenceException — 代わりに compile_all を使用してください。
    dump_catalogTIA Portal のフルハードウェアカタログ (約 11K エントリ) をローカル DB にダンプします。初回の TIA 接続時または TIA バージョン変更時に自動的に実行されます。HSP 更新の手動トリガー。
    export_csv(outputPath) デバイスリストを CSV に出力します。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_hardware_map(format:csv|xlsx、任意 deviceName、outputPath) デバイスの生の CAx/AML ハードウェアデータをフラットテーブルとしてエクスポートします。Siemens がエクスポートするすべてを表示します: ラック、CPU、サブ項目、シグナルモジュール、チャネル、アドレス、タグ。単一シート。既定では exports_root/hardware/ になります。ファイル名: {ProjectName}_{PLCName}hardware_map{timestamp}.{ext}。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin ac...
    export_io_map(format:csv|xlsx、任意 deviceName、outputPath) ラック/スロットのトポロジーとタグ割り当てを組み合わせた、デバイスの完全な I/O マップをエクスポートします。XLSX: スロットごとに 1 シート + サマリー。CSV: フラットな統合。deviceName を省略するとすべてのデバイスをエクスポートします (それぞれ 1 ファイル)。既定では exports_root/hardware/ になります。ファイル名: {ProjectName}_{PLCName}io_map{timestamp}.{ext}。エクスポート後、ユーザーにファイルを開くかどうかを確認してください ...
    export_xlsx(outputPath) デバイスリストを Excel に出力します。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    get_device(deviceName) 1 つのデバイスの詳細な構成。
    get_full_configすべてのデバイスの完全なハードウェア構成。
    get_io_mapすべてのデバイス/モジュールにわたる完全な I/O アドレスマップ。
    get_networkプロジェクト全体のサブネット、ノード、IO システム。
    get_rack_slot_details(deviceName) I/O アドレス割り当て付きのラック/スロットのトポロジー。
    search_catalog(filter) TIA Portal ハードウェアカタログのライブリアルタイム検索。TIA Portal が実行中である必要があります。結果は 50 件が上限です。
    set_network_config(deviceName、confirm、任意 ipAddress、subnetMask、useRouter、routerAddress、ipProtocolSelection、useIsoProtocol、pnDeviceNameAutoGeneration、stationName、pnDeviceName) デバイスの PROFINET インターフェースにネットワーク構成を設定します。pnDeviceName は PROFINET デバイス名を直接設定します (自動生成を自動的に無効にします)。stationName はデバイスの名前を変更します。プロジェクト構成のみを変更します — PLC へのダウンロードが必要です...
library29ライブラリ管理
    add_to_multi_instance_fb(deviceName、parentFB、memberName、path、任意 library='project'、version、onCollision=fail|replace) ライブラリ型を解決し、blocks_write の add_multi_instance_member に委譲します。型は先に instantiate_library_type 経由でシードされている必要があります。
    archive_global_library(libraryName、任意 targetDirectory、targetName、mode=Compressed) .zal19 アーカイブを作成します。targetDirectory は既定で構成済みのアーカイブルートになります — ユーザーが明示的に別のパスを指定しない限り、targetDirectory を渡さないでください。アーカイブルートが構成されていない場合は、ユーザーに open_manager → Paths タブを開いて設定するよう案内してください。
    close_global_library(libraryName) 読み込まれたグローバルライブラリを閉じます。
    compare_to_target(targetLibrary、任意 library='project'、includeIdentical=false) ライブラリを比較します: only_in_source、only_in_target、differs、identical。読み取り専用。
    create_global_library(name、任意 targetDirectory) 新しい空の .al19 を作成します。targetDirectory は既定で構成済みのライブラリルートになります — ユーザーが明示的に別のパスを指定しない限り、targetDirectory を渡さないでください。ライブラリルートが構成されていない場合は、ユーザーに open_manager → Paths タブを開いて設定するよう案内してください。ReadWrite で開きます。永続化するには save_global_library を呼び出してください。
    create_library_folder(folderPath、任意 library='project'、typeFilter=master_copies|types) サブフォルダーを作成します (冪等、中間フォルダーを自動作成)。typeFilter はセクションを選択します: master_copies (既定) または types。読み取り専用のグローバルライブラリはその理由とともに拒否されます。
    delete_library_folder(folderPath、任意 library='project'、recursive=false、typeFilter=master_copies|types) 指定されたセクションからサブフォルダーを削除します。空でない場合は recursive=true でない限り拒否されます。
    delete_master_copy(path、任意 library='project') 完全なスラッシュパスで削除します。
    delete_unused_types(任意 library='project'、path、mode=preserve_default|delete_all、dryRun=true、confirm) インスタンスがゼロの型を削除します。dryRun=true が既定です。実行するには false に設定し confirm を指定してください。
    export_type_xml(library、path、outputPath、任意 version、overwrite=false) 型バージョンを XML ファイルにエクスポートします。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    find(library、query、任意 path、typeFilter:all|types|master_copies、caseSensitive=false、limit) glob 検索 (* と ?)。再帰的に走査し、上限 500 件で切り捨て時に大きな NOTICE を出します。一致は get_tree と同じエンベロープを持ちます。巨大なライブラリでは path でスコープを絞ってください。section は削除されました (typeFilter を使用してください)。
    get_info(library) メタデータ: 編集モード、バージョン、作成者、項目数、ルートフォルダー。
    get_master_copy(library、path) マスターコピーのメタデータと CONTENT MANIFEST: ラップされたオブジェクトごとに 1 行と分かりやすい種類を持つ Contents (N)。マスターコピーは依存関係を持ちません — 参照されるブロックと UDT は別々に公開してください。XML 本体は利用できません: MasterCopy は V19 Openness に Export メソッドを持ちません (#231 H11)。
    get_type(library、path、任意 version='latest_committed'、includeXml=false) 型メタデータ + バージョンリスト。includeXml=true は XML 本体をインライン化します (上限約 30KB)。
    get_tree(library、任意 path (既定はルート)、depth=0 無制限 (1 = 直接の子)、nested=true、includeItems=false、typeFilter:all|types|master_copies、limit) 再帰的なサブツリービュー - 引数、既定値、深さのルールは folders の get_tree と同一になりました (v3.0.0)。nested=false = フラットなパスリスト (マシン契約)。項目は 1000 件が上限で、切り捨て時に大きな NOTICE を出します。型の行は統一されたエンベロープ [ve... を持ちます。
    instantiate_library_type(deviceName、path、任意 library='project'、version='latest_committed') 型バージョンをデバイスブロックにインスタンス化します。Committed バージョンのみ。副作用: project.ProjectLibrary をシードします。
    instantiate_master_copy(deviceName、path、任意 library='project') マスターコピーをデバイスブロックに実体化します。
    list_librariesすべてのライブラリ (プロジェクト + 読み込まれたグローバル)。'library' 引数用の名前を返します。予約名 'project' = プロジェクトライブラリ。
    open_global_library(任意 path、任意 openMode=ReadOnly|ReadWrite) .al19 ファイルを読み込みます。path なしの場合は、構成済みのライブラリルートから利用可能なライブラリを一覧表示します。
    promote_to_global(targetLibraryName、任意 sourceLibrary='project'、path、forceUpdateMode、structureConflictMode、deleteUnusedVersions) 型を書き込み可能なグローバルライブラリにコピーします。
    publish_block_as_master_copy(deviceName、blockName、任意 library='project'、folderPath=''、onCollision=autoRename|replace|fail) FB/FC/OB/GlobalDB をマスターコピーとして公開します。不整合なブロックでも動作します。
    publish_plc_type_as_master_copy(deviceName、udtName、任意 library、folderPath、onCollision) UDT について上記と同じです。
    reload_global_library(libraryName、任意 discardChanges=false) このセッション外で変更された後、ディスクからグローバルライブラリを再読み込みします。Openness には更新機能がないため、これは監視付きの閉じて開く操作です: discardChanges=true でない限り、ライブラリに未保存の変更 (IsModified) がある場合は拒否します。再読み込み前のすべてのパスやハンドルは古くなります。
    rename_library_folder(folderPath、newName、任意 library='project'、typeFilter=master_copies|types) いずれかのセクションのユーザーフォルダーの名前を変更します。セクションのシステムルートは名前を変更できません。(#231 H15)
    rename_master_copy(path、newName、任意 library='project') マスターコピーの名前を変更します。ラップされたオブジェクトは自身の名前を保持し (ContentName は読み取り専用)、結果はそのことを示します。(#231 H13)
    rename_type(path、newName、任意 library='project') ライブラリ型の名前を変更します。バージョンと既にインスタンス化されたブロックは影響を受けません。(#231 H15)
    save_global_library(libraryName) 開いているグローバルライブラリを .al19 に永続化します。
    update_check(任意 library='project'、path、mode=ReportOutOfDateOnly) update_project が変更する内容をプレビューします。読み取り専用。
    update_project(任意 library='project'、path、deleteUnusedVersions=false) 破壊的: 一致するすべてのブロックにライブラリ型の更新を適用します。先に update_check を実行してください。
live_data11PLC のライブ値 + 診断
    connect(host、任意 password) 暗号化された接続 (TCP ポート 102) を介して PLC に接続します。host = PLC の IP。password は CPU のアクセスレベルが要求する場合のみ (決してログに記録/エコーされません)。password を省略し、このホストに対して set_credential で保存されたものがある場合は、自動的に使用されます。
    delete_credential(host、任意 passwordClass、scope) ホストの保存された資格情報を削除します。scope='project' は開いているプロジェクトの資格情報を削除します。scope='global' は任意のプロジェクトで共有されるものを削除します。応答はどの層が削除されたかを示します。
    disconnectlive-data セッションを解放します。
    get_statuslive-data の準備状態、接続状態、PLC の ID。いつでも安全です。
    list_credentials保存された資格情報を一覧表示します (host、SCOPE、class、label、timestamps)。秘密は決して表示しません。各行は scope 引数が取るのと同じ語彙を使って scope=project または scope=global を示すため、ここで読んだ行をそのまま delete_credential に渡し戻すことができます。プロジェクトの行はそのプロジェクトパスも示し、scope=project が作用するものである場合は [OPEN in TIA] とマークされます。
    list_readable(任意 root、limit) PLC が読み取り用に実際に公開しているものをルートごとに表示します。引数なし = ルートごとに 1 行とリーフ数。root=MArea (または DB 名) はそのルートのリーフを一覧表示します。タグが未解決で返ってきたときにこれを使用してください — 「宣言されていない」と「エリア全体が空」を区別します。
    read_db(dbName、任意 members[]) データブロック (最適化または標準) のライブ値を、シンボリックに、品質コード付きで読み取ります。members[] は特定のメンバーに限定します。
    read_diagnostics(任意 kind=all|identity|protection|alarms|buffer、maxEntries) CPU の注文番号 + ファームウェア (オンライン - Openness はこれを読み取れません)、保護レベル、アクティブ + 構成済みアラーム、および CPU 診断バッファ (kind=buffer または all): TIA Portal が Online and Diagnostics の下に表示するのと同じイベントログで、新しい順、CPU クロックから UTC でタイムスタンプされます。イベントテキストはカタログからローカルに解決されます...
    read_tag_table(deviceName、tagTableName、任意 tags[]) PLC タグテーブルのライブ値。タグはシンボリックに、または絶対アドレス (%M1.0、%MB1、%MW20、%MD4、および %I/%Q 相当) で指定できます。指定したデバイスの注文番号が接続された CPU のものと異なる場合はブロックします。
    read_watch_table完全修飾シンボル用の (symbols[])、またはプロジェクトのウォッチテーブルを解決してそのエントリをライブで読み取る (deviceName、watchTableName) のいずれか。両方を渡すとエラーです。
    set_credential(host、password、任意 passwordClass、label、scope) CPU パスワードを保存時に暗号化して (マシンにバインド) 保存し、connect が毎回パスワードを渡さずに使用できるようにします。秘密は決してエコーまたはログに記録されません。scope='project' は開いているプロジェクトにバインドします。scope='global' は任意のプロジェクトに適用されます。connect はプロジェクトの資格情報を優先し、グローバルのものにフォールバックします。
open_manager-Open Manager ウィンドウ
session16セッション管理
    archive(任意 outputDirectory、任意 archiveName、timestamp、archivationMode、saveChanges) .zapXX アーカイブを作成します。outputDirectory は既定で構成済みのアーカイブルートになります — ユーザーが明示的に別のパスを指定しない限り、outputDirectory を渡さないでください。アーカイブルートが構成されていない場合は、ユーザーに open_manager → Paths タブを案内してください。timestamp=true が既定です。archivationMode: None|Compressed|DiscardRestorabl...
    close_project(任意 saveChanges) プロジェクトを閉じます。saveChanges: prompt|save|discard|auto。
    configure(任意 projectsRoot、archivesRoot、exportsRoot、librariesRoot、httpEnabled) create/open/archive/exports/libraries の既定のフォルダーパスを設定します。ディレクトリの存在を検証します (exportsRoot は存在しない場合自動作成)。代替として open_manager GUI を使用してください。ALSO (#168): preferredTiaBinding= は TIA Portal の SELECTOR です - 複数の TIA Portal がインストールされた PC で、どの TiaCommander bin... を選ぶかを指定します。
    connect(任意 withUI=true) 実行中の TIA Portal に接続し、最初のプロジェクトを自動的に読み込みます。先に古くなったハンドルを解放します。
    create(name、任意 parentDirectory、withUI=true) 新しいプロジェクトを作成します。自己完結型: TIA Portal を自動起動するか実行中のインスタンスに接続し、古くなったハンドルをクリーンアップします。ASCII 名のみ (M12)。parentDirectory は既定で構成済みのプロジェクトルートになります — ユーザーが明示的に別のパスを指定しない限り、parentDirectory を渡さないでください。プロジェクトルートが構成されていない場合は、ユーザーに open_manager → Paths ... を案内してください。
    disconnect(任意 saveChanges、closeTia) Openness ハンドルを解放します。closeTia=true は TIA プロセスも終了します。
    get_project開いているプロジェクトの名前、パス、バージョン、デバイス数。
    get_stateプロアクティブな状態チェック。状態レベル (0-4)、TIA/プロジェクト/デバイスの状態、ライセンス情報、再起動フラグを返します。セッション開始時に呼び出してください。どの状態でも動作します。
    infoサーバーバージョン、ツール数、ワークフローのヒント。
    is_dirty未保存の変更について true/false を返します。
    launch(任意 withUI=true) 新しい TIA Portal を起動します (プロジェクトなし)。先に古くなったハンドルを解放します。自動起動する create/open を優先してください。
    list_archives(任意 archivesRoot) 構成済みまたは明示的なアーカイブルートからすべての .zap* アーカイブファイルを一覧表示します。ファイル名、サイズ、日付、TIA バージョンを示します。
    list_devicesプロジェクト内のすべてのデバイス。他のツール用の deviceName を提供します。
    open(任意 projectPath、任意 withUI=true) プロジェクトを開き、必要に応じて TIA を自動起動します。冪等。projectPath なしの場合は、構成済みのプロジェクトルートから利用可能なプロジェクトを一覧表示します。
    saveプロジェクトを保存します。OFFLINE が必要です: いずれかのデバイスがオンラインの間は OnlineModeRestriction で拒否します — 先に diagnostics go_offline を実行してください。
    save_as(newName、任意 newParentDirectory) 新しい場所にコピーを保存します。newParentDirectory は設定されていれば構成済みのプロジェクトルートを既定とします。
tag16PLC タグ管理
    add_tag(deviceName、tagTableName、tagName、dataType、任意 logicalAddress、comment) タグを追加します。dataType: Bool、Int、Real など。logicalAddress: %%M0.0、%%MW100。
    create_table(deviceName、tagTableName、任意 targetFolder、createParents=false) 新しい空のテーブル。targetFolder ('Motors/Drives' 構文) は PLC タグツリーのそのフォルダー内に直接作成します。存在しないフォルダーは createParents=true でない限りエラーです。名前の衝突はすべてのフォルダーにわたって再帰的にチェックされます。
    delete_table(deviceName、tagTableName) テーブルとすべてのタグを削除します。
    delete_tag(deviceName、tagTableName、tagName、任意 tagNames、confirm) 単一のタグを削除します。タグがコメントまたは非既定のアクセスフラグを持つ場合は拒否します。add_tag はそれらを復元できないためです — 上書きするには confirm='I understand this destroys the comment and access flags' を渡すか、action=move を使用して無損失で再配置してください。なお delete+add は名前変更ではありません: 新しいオブジェクトを作成し、すべての参照が...
    export_tag_table_data(deviceName、tagTableName、format:csv|xlsx|xml、任意 outputPath、returnInline=false) タグテーブルをドキュメント/分析用に CSV または XLSX に、または import_table 経由のラウンドトリップ用に生の TIA XML (format=xml) にエクスポートします。列: Name、DataType、Address、Comment、ExternalAccessible、ExternalVisible、ExternalWritable。outputPath がない場合は既定で exports_root\tag\ になり、自動生成された名前は重複排除されます...
    find_next_free(deviceName、任意 area:M|I|Q、startByte:int、dataType:Bool|Byte|Word|DWord|Int|Real|など、mode:declared|used) 次の空きアドレスを検索します。mode=declared (既定、最も安全): すべての宣言済みタグアドレスをスキップします。mode=used: コードで参照されているアドレスのみをスキップします。アラインメント: Bool=任意のビット、Byte=バイト、Word=偶数バイト、DWord=4 バイト。
    get_assignment_list(deviceName、任意 area:M|I|Q|all、mode:declared|used|conflicts) M/I/Q エリア + HW I/O のアドレス占有。mode=declared (既定): すべてのタグアドレス。mode=used: ブロックコードで参照されているアドレスのみ (TIA 割り当てリストを反映)。mode=conflicts: 2 つ以上のブロックで使用されているアドレスを Read/Write の詳細付きで表示 — 二重割り当てを検出します。
    get_table_details(deviceName、tagTableName) 型、アドレス、コメント付きのすべてのタグ。
    import_table(deviceName、filePath または xmlContent または exportId、任意 overwrite=false、targetFolder、createParents=false) OFFLINE が必要です。生の TIA XML — export_tag_table_data format=xml が生成するドキュメント — からタグテーブルをインポートします。overwrite=false は作成し、そのテーブル名が既に存在する場合は拒否します。overwrite=true は既存のテーブルを置換します。これはフィールドレベルのマージではなくテーブル全体のインポートであるため、タグは...
    list_tables(deviceName) すべてのタグテーブルを、修飾された 'Folder/Sub/Name' パスと統一エンベロープ [type=PlcTagTable, tags=N] 付きで 1 行ずつ。合計は folders get_tree (container=tag_tables) と一致します。
    move(deviceName、tagTableName、tagName、targetTable) 1 つのタグを別のテーブルに移動し、そのコメントと 3 つのアクセスフラグ (ExternalAccessible/Visible/Writable) をすべて保持します。delete_tag + add_tag の代わりにこれを使用してください: add_tag はアクセスフラグを運べないため、手作りの経路はそれらをサイレントにリセットします。読み戻しで検証され、いずれかのプロパティが保持されなかった場合は大きな音で失敗します。
    move_table(deviceName、tagTableName、targetFolder、任意 createParents=false) OFFLINE が必要です。タグテーブルをフォルダー間で移動します ('' = コンテナールート)。エクスポート → 削除 → ターゲットフォルダーへのインポートとしてエミュレートされます (スパイクで実証済みの完全な忠実性)。失敗時は元の場所に復元します。注意: タグテーブルはコピーできません - PLC タグ名はすべてのテーブルにわたってグローバルです。
    rename(deviceName、tagTableName、tagName、newName) 設計上、常に拒否します。Openness V19 はタグの名前変更を公開していません: PlcTag.Name は取得専用で、SetAttribute('Name') は AccessMode: Read で拒否されます。エクスポート/再インポート経由でもエミュレートされません — タグ名は PLC 全体でグローバルであり、Openness は何もカスケードしないため、再構築されたタグはすべての LAD/FBD/STL/SCL オペランドが古いシンボルを指したままになり、SCL にはプログラムによる ... がありません。
    search(deviceName、tagName) すべてのテーブルにわたる部分文字列一致。
    set_access(deviceName、tagTableName、tagName、accessible、visible、writable) 重要: 引数は accessible/visible/writable であり、externalAccessible などではありません。
    update_comment(deviceName、tagTableName、tagName、newComment) 重要: 引数は 'newComment' であり、'comment' ではありません。
technology_objects15****
    capabilities(任意 family) ドキュメント化されたファミリー/バージョン/ファームウェアのマトリックス。TIA 接続は不要です。
    compile(deviceName、name、任意 scope=group) 即座に実行されます。ドライランはありません。前後ですべてのオブジェクトバージョンを報告します。
    connect_hardware(deviceName、name、interface、target、任意 confirm) チャネルを再配線します。センサーインデックスは 1 始まりです。
    create(deviceName、name、family、version、任意 path、confirm) family と version は作成時に固定され、後から変更できません。
    create_from_master_copy(deviceName、masterCopy、任意 path、confirm) マスターコピーは TIA UI で作成する必要があります。Openness の呼び出しでは作成できません。
    delete(deviceName、name、任意 confirm) 元に戻せません: 再作成されたオブジェクトは既定値から始まります。
    exportimport — (deviceName、name | file、任意 confirm) SimaticML。ファミリーごとにバージョンで制限されます。拒否の場合は必要なバージョンとそのマニュアルのセクションを示します。
    find_parameter(deviceName、name、parameter) 1 つのパラメーター: 値、型、アクセス。オブジェクトのパラメーターの最初の読み取りは遅いです (実測約 5.5~7.5 秒 - コストは Openness 内部にあります)。以降の読み取りは約 150 ms で、アイドル後にリンクは再び冷たくなります。
    get_hardware_connection(deviceName、name) 読み取り専用の配線レポート。ファミリーに適用されないプロバイダーは、エラーではなくそのように報告されます。
    get_parameters(deviceName、name、任意 prefix、summary、limit) コミッショニングデータを型付きで。prefix は 1 つのエリアをフィルターします。summary=true はエリアと数のみを返します。各行はそのアクセスを示し、裸/アンダースコアのペアは書き込みを受け入れる側を示す 1 行にまとめられます。
    import
    list(deviceName、任意 limit) すべてのオブジェクト: Name [type=, version=<Vx.y>, parent=]。サブレベルのオブジェクト (出力カム、カムトラック、測定入力) は親軸にぶら下がり、含まれます。
    rename(deviceName、name、newName、任意 confirm) プログラムブロックはオブジェクトを名前で参照し、更新されません。
    set_parameter(deviceName、name、parameter、value、expectedCurrentValue) 1 つのパラメーターを書き込みます。expectedCurrentValue は必須で、現在の値と一致しなければ書き込みは拒否されます。読み取り専用パラメーターは事前に拒否されます。コピー&ペースト可能な元に戻す操作とともに old -> new をエコーします。
    show_in_editor(deviceName、name) TIA UI で開きます。
udt11ユーザー定義型管理
    add_member(deviceName、udtName、memberName、dataType、任意 comment、initialValue) XML ラウンドトリップ経由でメンバーを追加します。
    create(deviceName、udtName) 新しい空の UDT。TIA は空の STRUCT を拒否するため、プレースホルダーメンバー _placeholder (Bool) 付きで作成されます - delete_member で削除するか、members[] (add_member の一括モードと同じ形) を渡すとプレースホルダーは作成されません。任意の targetFolder ('Motors/Drives' 構文) + createParents でそのフォルダー内に直接作成します。(内部的に SCL ExternalSources のワークアラウンドを使用...
    delete(deviceName、udtName) UDT を削除します。まだ参照されている場合は拒否します。
    delete_member(deviceName、udtName、memberName) XML ラウンドトリップ経由でメンバーを削除します。
    export_xml(deviceName、udtName、任意 outputPath、returnInline、outputDirectory) UDT を XML にエクスポートします。outputPath を指定するとディスクに書き込まれます。省略すると returnInline が適用されます。
    get_structure(deviceName、udtName) XML による、型、コメント、アクセスフラグ付きの完全なメンバーリスト。
    import_xml(deviceName、filePath または xmlContent、任意 overwrite) XML から UDT をインポートします。filePath はディスクから読み取ります。xmlContent はインライン XML 文字列を受け付けます (ファイルツール不要)。ラウンドトリップには信頼できます。合成された XML では失敗する可能性があります (代わりに create+add_member を使用してください)。OVERWRITE はマージではなくオブジェクト全体の置換です: overwrite=true の場合、ドキュメントに存在しない要素は p... ではなく既定値に RESET されます。
    list(deviceName) すべての UDT を、修飾された 'Folder/Sub/Name' パス、統一エンベロープ [type=PlcStruct, num=N]、および変更日付付きで 1 行ずつ。
    move(deviceName、udtName、targetFolder、任意 createParents=false) OFFLINE が必要です。UDT をフォルダー間で移動します ('' = コンテナールート)。エクスポート → 削除 → ターゲットフォルダーへのインポートとしてエミュレートされます (スパイクで実証済み)。失敗時は元の場所に復元します。
    update_member(deviceName、udtName、memberName、任意 newDataType、newInitialValue、newComment) メンバープロパティを更新します。少なくとも 1 つのフィールドが必要です。SCL ラウンドトリップを使用します。
    update_member_comment(deviceName、udtName、memberName、newComment) 重要: 引数は 'newComment' であり、'comment' ではありません。
watch14ウォッチ & フォーステーブル
    add_entry(deviceName、target、tableName、address、任意 displayFormat、modifyValue[watch]、forceValue[force]、modifyTrigger[watch]、monitorTrigger、comment)。重要: displayFormat は必ずソース変数のデータ型に合わせて設定してください — Bool→Bool、Int/Word→DEC_signed、DInt/DWord→DEC_signed、Real→Float、Time→Time、String→String。既定の Hex のままにしないでください。データ型はソースブロックから調べ...
    clear_table(deviceName、watchTableName) すべてのエントリを削除し、テーブルは保持します。
    create_table(deviceName、watchTableName、任意 targetFolder、createParents=false) 新しい空のウォッチテーブル。targetFolder はウォッチ/フォーステーブルツリーのそのフォルダー内に直接作成します。存在しないフォルダーは createParents=true でない限りエラーです。名前の衝突は再帰的にチェックされます (ウォッチ AND フォーステーブル)。
    delete_entry(deviceName、target、watchTableName|forceTableName、address) エントリを削除します。ADDRESS 形式: 裸の絶対アドレス (%%M60.0) または正確なシンボリック名を渡してください。TIA はタグ所有のアドレスをシンボリックに保存するため、裸の形式はそれにリテラルで一致するエントリがない場合にタグテーブル経由で解決され、結果は 'matched symbolically as ""TagName""' と表示されます。裸のアドレスが複数のタグに所有されている場合...
    delete_table(deviceName、watchTableName) ウォッチテーブルを削除します。
    export_force_data(deviceName、forceTableName、format:csv|xlsx、任意 outputPath) ドキュメント用にフォーステーブルを CSV または XLSX にエクスポートします。既定では exports_root\watch\ になります。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_table(deviceName、target、tableName、outputPath) XML にエクスポートします。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    export_watch_data(deviceName、watchTableName、format:csv|xlsx、任意 outputPath) ドキュメント用にウォッチテーブルを CSV または XLSX にエクスポートします。既定では exports_root\watch\ になります。エクスポート後、ユーザーにファイルを開くかどうかを確認してください (admin action=open_file を使用)。
    get_entries(deviceName、target、watchTableName|forceTableName) エントリを一覧表示します。
    import_table(deviceName、filePath または xmlContent、任意 overwrite) XML からインポートします。filePath はディスクから読み取ります。xmlContent はインライン XML 文字列を受け付けます (ファイルツール不要)。OVERWRITE はマージではなくオブジェクト全体の置換です: overwrite=true の場合、ドキュメントに存在しない要素は保持されるのではなく既定値に RESET されます (ImportOptions.Override; 実測 #231 P1)。完全なドキュメントを提供してください - export fi...
    list_tables(deviceName) すべてのウォッチテーブルとフォーステーブルを、修飾された 'Folder/Sub/Name' パスと統一エンベロープ [type=PlcWatchTable|PlcForceTable, entries=N, force=true|false] 付きで 1 行ずつ。合計は folders get_tree (container=watch_tables) と一致します。
    move_table(deviceName、watchTableName、targetFolder、任意 createParents=false) OFFLINE が必要です。ウォッチ/フォーステーブルをフォルダー間で移動します ('' = コンテナールート)。エクスポート → 削除 → ターゲットフォルダーへのインポートとしてエミュレートされます。失敗時は元の場所に復元します。
    rename_table(deviceName、watchTableName、newName) 名前を変更します (内部的に XML ラウンドトリップ)。
    update_entryadd_entry と同じパラメーター。フィールドをクリアすることはできません (代わりに削除+再追加してください)。どちらのアドレス形式も受け付けます — delete_entry を参照してください。
xref6クロスリファレンス分析
    find_call_paths(deviceName、blockName、任意 maxDepth=10) OB ルートからターゲットブロックへの CALL エッジ上のすべての呼び出しパス (例: Main [OB1] -> ModbusPoll [FB2] -> mb_query [FB8])。find_callers を補完します (find_callers = 直接の呼び出し元のみ。これ = OB からの完全な修飾パス)。blockName は裸の名前 (すべてのフォルダーにわたって再帰的に解決) またはフォルダー修飾パスを受け付けます。
    find_callers(deviceName、blockName) 逆引き: 指定されたターゲットを参照するブロック。ターゲットは BLOCK (呼び出しサイト) または PLC TAG にできます — タグの場合、Access=Read/Write とネットワーク付きの読み取り/書き込みブロックが得られるため、別途タグアクションは不要です。すべてのブロックを反復します。ブロックにもタグにも一致しない名前は、参照がゼロであると報告する代わりにその旨を伝えます。
    find_orphaned_instance_dbs(deviceName) 所有する FB が存在しない、または TypeInstance/InstanceType 参照を持たないインスタンス DB。
    find_unused(deviceName) どの OB チェーンからも呼び出されていないすべてのブロック。すべてのブロックを反復します (各約 5~10ms)。
    get_call_tree(deviceName、任意 blockName、maxDepth=10) 前方 CALL ツリー: ルートが呼び出すもの、任意の深さまで再帰的 (既定のルート: すべての OB。blockName は裸またはフォルダー修飾名を受け付けます)。各ノードはフォルダー修飾名、ブロック番号、呼び出しサイトのネットワーク、インスタンス DB を示します。システム命令はリーフとして現れます。サイクルセーフ。既に表示されたサブツリーはマーカー付きで折りたたまれます。
    get_references(deviceName、blockName、任意 filter:AllObjects|ObjectsWithReferences|ObjectsWithoutReferences|UnusedObjects) 1 つのブロックのクロスリファレンス。参照されたオブジェクトをアクセス種別 (Read/Write/Call など) と場所とともに示します。
合計: 19 ツール、230 アクション — この表のアクション説明は簡略化されています。すべてのアクションの完全なテキストは、機械可読なツールリスト (data/tool-list/tools.json) にあります。
各メタツールは、関連する操作を単一のactionパラメーターの背後にまとめます。get_infoとopen_managerは、ライセンスなしで使える単独のユーティリティです。まずsessionで接続してから、ほかのツールを使用してください。

テスト済みハードウェア

TiaCommanderは、TIA PortalおよびOpenness APIがサポートするすべてのPLCで動作するはずです。以下のデバイスは、すべてのツールが利用できる状態で社内テスト済みです。

デバイスオーダー番号ファームウェアTIA Portal
S7-1200 CPU 1212C DC/DC/Rly6ES7 212-1BE31-0XB0V3.0V19
S7-1200 CPU 1214C DC/DC/DC6ES7 214-1AG31-0XB0V3.0V19
S7-1200 CPU 1214C DC/DC/DC6ES7 214-1HG40-0XB0V4.5V19
S7-1200 CPU 1215C DC/DC/DC6ES7 215-1AG31-0XB0V3.0V19
S7-1200 CPU 1215C DC/DC/Rly6ES7 215-1BG31-0XB0V3.0V19
S7-1200 CPU 1217C DC/DC/DC6ES7 217-1AG40-0XB0V4.2V19

コミュニティで実際に使われているデバイスをご覧ください — tiacommander.com/stats。 ライブ互換性リストには、すべてのユーザーから動作が報告されたデバイスが網羅され、オーダー番号、ファームウェア、使用が確認されたTIA Portalのバージョンに加え、コミュニティでのツール利用状況やAIクライアントの採用状況も表示されます。匿名化・集計されたテレメトリをもとに作成されており、上記の社内テーブルよりもはるかに幅広い状況を示しています。


ブロックの作成

TiaCommanderは、構造化されたJSON記述から完全なPLCブロックを作成します。

  • SCLブロック — External Source API経由(ファームウェアに依存しません)
  • LAD/FBDブロック — 69種類の検証済み命令タイプを備えたFlgNet XMLビルダー経由:
    • ビット論理、タイマー(TON/TOF/TP)、カウンター(CTU/CTD/CTUD)
    • 数学演算(Add、Sub、Mul、Div、Mod、Abs、Sqrt、Sin、Cosなど)
    • 比較演算子(EQ、NE、GT、GE、LT、LE)
    • 移動と変換、ワード論理、シフトとローテーション、選択
    • プログラムフロー(パラメーター配線を伴うFB/FC呼び出し、JMP/JMPN、RET、LABEL)
  • ブロック番号 — 省略した場合は自動割り当て、または明示的に指定可能
  • カスタムインターフェイス — Input、Output、InOut、Static、Temp、Constantの各セクション

ライブデータ

live_dataツールは、実行中のCPUからデータブロック、タグテーブル、監視テーブル、CPU診断バッファー全体の実際の値を直接読み取ります。デバッグや、迅速な開発フィードバックループを実現するうえで、TiaCommanderが真価を発揮する機能です。ブロックを変更してダウンロードし、AIクライアントから一度も離れることなく値の変化を確認できます。

  • 独立したパイプ — ライブ読み取りは、専用ヘルパープロセス(S7ブリッジ)を介して行われます。このプロセスはTCPポート102経由でCPUと直接通信し、Opennessのエンジニアリング接続とは独立しているため、ライブ値を読み取ってもTIA Portalのセッションが妨げられることはありません。
  • ライセンス不要、追加ソフトウェア不要 — ライブデータの経路ではOpennessライセンスも追加のSiemensソフトウェアも不要です。S7プロトコルを直接使用します。
  • TLSと平文の両方をサポート — S7-1200 V4.5以降およびS7-1500 V2.9以降はTLS経由で接続し、旧型CPUは平文で接続します。connectは、接続先CPUとの間で実際にネゴシエートされた方式を報告します。
  • 最適化ブロックと標準ブロック — read_dbは、最適化されたデータブロックと最適化されていない(標準)データブロックの両方から、品質コード付きのシンボル値を返します。
  • パスワード対応 — CPUの保護レベルで必要な場合にのみCPUパスワードが必要です。保存時に暗号化でき(プロジェクト単位またはグローバル)、connectが自動的に使用します。パスワードがログに記録されたり、表示されたりすることはありません。Manager GUIのCredentialsタブに保存するか、AIアシスタントに保存を依頼してください。PLCのIPアドレスに対してグローバルに保存することも、プロジェクトごとに保存することもできます。

安全性

MCPサーバーは、PLCへのデプロイ操作を破壊的な操作として扱います。これらの操作を実行するには、明示的な確認文字列が必要です。

操作内容
download_to_device稼働中のPLCにソフトウェア/ハードウェアをダウンロードします
upload_stationPLCステーションをプロジェクトにアップロードします
delete_unused_typesインスタンス数がゼロのライブラリタイプを削除します

それ以外の操作はすべてTIA Portalプロジェクト内で行われ、ダウンロード前であれば元に戻せます。


スタンドアロンの入出力

TiaCommander は完全にスタンドアロンで動作するため、外部のファイル管理ツールは必要ありません。

インポートでは、すべてに3 つの入力モードを利用できます。ファイルパス、インラインコンテンツ、またはエクスポートデータベース参照です。

エクスポートでは、すべてに3 つの出力モードを利用できます。インライン(デフォルト)、エクスポートデータベース、またはファイルです。

エクスポートは 24 時間後に自動的に期限切れになります。admin ツールのアクションで管理できます。

ただし、日々の AI エージェントのワークフローには、TiaCommander と Desktop Commander(GitHub)を組み合わせて使用することを強くおすすめします。Desktop Commander を使うと、AI アシスタントは OS 全体でターミナルへのアクセス、ファイル管理、コード編集を行えます。これは有料の宣伝ではありません。私たち自身も毎日の仕事で Desktop Commander を使っており、たまたま同じラトビア出身の Eduards Ruzga が開発したものです。無料のオープンソースで、使うと作業がより快適になります。


データとプライバシー

すべてのデータはお使いのマシン内に保存されます。ローカルの SQLite データベースには、ツール呼び出しの統計情報、デバイスプロファイル、エラーログ、一時的なエクスポートキャッシュが保存されます。

TiaCommander は、製品の改善に役立てるため、限定的なテレメトリーを収集します。

  • エラーレポート — ツール呼び出しが失敗した際、問題を特定して修正できるよう、エラーの種類とコンテキストが送信されます。
  • ツール使用統計 — どのツールやアクションが最も頻繁に使用されているかを把握し、最も価値のある機能を理解するために収集します。
  • AI クライアント情報 — 互換性を確保するため、接続されている AI アシスタント(クライアント名とバージョン)を確認します。

PLC プログラムのデータ、プロジェクトファイル、ブロックの内容が送信されることはありません。

登録時に提供された個人情報(氏名、姓、メールアドレス)は、欧州連合の GDPR 規則に基づいて取り扱われます。お客様のデータを第三者と共有、販売、開示することはありません。また、お客様から明示的に依頼された場合を除き、マーケティング資料や、TiaCommander のご利用に直接関係のないものをお送りすることはありません。


今後の予定

TiaCommander は現在も積極的に開発されています。以下の機能に取り組んでいます。

  • HMI 統合 — HMI 画面、タグ、アラームビューへのアクセス
  • ライブデータ対応範囲の拡大 — より多くの CPU ファミリーで、稼働中の PLC が公開する情報をさらに取得
  • シミュレーション対応 — オフラインでの開発とテストに PLCSIM を使用
  • 幅広いハードウェア検証 — 実際の使用状況を参考に、より多くのデバイスファミリーとファームウェアを社内で検証

機能のアイデアがありますか?GitHub でお知らせください。


クイックスタート

Claude Desktop(ワンクリック): Releases から TiaCommander.mcpb をダウンロードし、Settings -> Extensions -> Advanced Settings -> Install Extension からインストールしてください。これで完了です。

その他すべての AI クライアント: **ポータブル ZIP をダウンロードし、クイックスタートガイド**を参照してください。抽出、Openness グループの設定、テスト済みの 7 クライアントすべてに対応する AI クライアント設定、ライセンスの有効化、最初のコマンドまで、5 分で使い始めるために必要な情報がすべて記載されています。

各 AI クライアントですぐに使える設定ファイルは、configs/ フォルダーにあります。


ライセンスとフィードバック

TiaCommanderは、SIA A4 Studioが公開するプロプライエタリーソフトウェアです。ベータ期間中は、完全無料で使用回数無制限、すべてのツールを利用可能です。制限はありません。

そのお返しとして、TiaCommanderの改善にご協力いただければ幸いです。バグを見つけた場合、新機能のアイデアがある場合、あるいはワークフローでのツールの使い方を共有したい場合は、ぜひお知らせください。

すべての報告、ご提案、コメントが、Siemensの自動化コミュニティにとってより良いツールの開発に役立ちます。

詳しい利用条件については、LICENSE.txtをご覧ください。詳細はtiacommander.comをご覧ください。


商標

TiaCommander™はSIA A4 Studioの商標です。Siemens、TIA Portal、SIMATIC、S7-1200、S7-1500はSiemens AGの商標です。TiaCommanderはSiemens AGと提携関係になく、同社から承認や後援を受けていません。


ありがとうございます

Issueを作成したり、フィードバックを送ってくださった皆さま、ありがとうございます。皆さまの声はTiaCommanderの改善に本当に役立っており、一つひとつ大切に読んでいます。問題なくご利用いただけて、特に報告することがない場合は、リポジトリにスターを付けていただけると幸いです。小さなことですが、ほかのSiemensのエンジニアがこのツールを見つける助けになります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。