Pod

Available as Markdown and JSON. Pod is also available over MCP.

Reported issues for TiaCommander

Pod holds 19 of 22 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to TiaCommander.

Most discussed

blocks_read/db ignore blocks inside Program-blocks user groups (subfolders); xref recurses correctly - asymmetric traversal + undercounted compile

Thanks again for the tool. Reporting a second, unrelated issue.

Environment: TiaCommander v2.30.3 (portable), TIA Portal V18, S7-1200 project.

Problem: blocks_read (list, get_details, get_interface) and db (list, get_structure) only see blocks sitting directly at the Program-blocks root. Any block moved into a user group (subfolder) becomes invisible: get_details/get_interface on its exact name returns "Block not found" (tried plain name, Group/Block, and…

Read the thread · 2026-07-16 · closed · external user · 2 comments

No way to target a specific TIA Portal version on multi-version machines - always binds V18 (V17/V18/V21 installed)

Hi -- first off, thanks for TiaCommander; setup and licensing were smooth and the tool itself works well. I've hit a wall on version selection, though.

Environment: TiaCommander v2.30.3 (portable), Windows 11 Pro, TIA Portal V17, V18, and V21 installed side by side. All Openness prerequisites in place (Openness user group, .NET 4.8).

Problem: My work is in a V17 project, but TiaCommander always binds the V18 engine, no matter which project path I pass to session open.…

Read the thread · 2026-07-16 · closed · external user · 2 comments

NullReferenceException on every project with TIA Portal V16

TiaCommander cannot perform any project operation on TIA Portal V16. session open, create, connect, and get_project all fail with a NullReferenceException. The Openness layer itself works fine, the project file is physically created on disk and opens in the TIA Portal GUI, and Openness correctly rejects a second open with "Another project is already open." The exception is thrown afterwards, inside TiaCommander's own code, so the project is never registered and every downstream tool…

Read the thread · 2026-06-12 · closed · external user · 1 comment

[Bug] udt move of a UDT makes every UDT that uses it inconsistent (moving the same UDT in the TIA UI does not)

Description

udt move is emulated as export → delete → import. When the moved UDT is used by another UDT, the using UDT becomes inconsistent after the move and has to be recompiled before it can be exported or moved. Moving the same UDT by drag and drop in the TIA project tree keeps the using UDT consistent – so this is caused by the emulation, not by TIA.

Steps to Reproduce

  1. UDT UDT_Repro_Pos (root) is used by UDT_Repro_Params (root, member AxisX : Struct with Home/`Work :…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Feature] Usability improvements: export overwrite, safer imports, compile hints, debug logging, project languages, catalog on empty project

Problem

Several small gaps make automated workflows (AI client driving TiaCommander) fragile or hard to diagnose:

  1. Exports never overwrite. blocks_read export_xml_file / export_source fail with ... already exists when the target file exists, and there is no overwrite option. In an export → patch → import loop the old file stays in place; when the error is overlooked, the old code is re-imported (this happened in practice).
  2. Import overwrite without a backup is silent.…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] LAD create_block: absolute operands (%I0.2, %M101.0) are emitted as symbolic tags ("%I0"."2") – compile error

Description

In blocks_write create_block language=LAD, an absolute address used as operand of a contact or coil is written to the network as a symbolic access to a tag named "%I0" with member "2". The import succeeds, the compile fails. This happens also when a tag exists at that address. The tool description lists memory addresses as valid operands ("global tags or memory addresses").

Steps to Reproduce

  1. `blocks_write action=create_block blockName="OB_Repro_LAD" blockType=OB…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] udt get_structure shows a nested Struct incorrectly – first sub-member missing, second shown at top level

Description

For a UDT with a Struct member that contains sub-members, udt get_structure drops the first sub-member and shows the second one as a top-level member. The UDT itself is correct (verified with udt export_xml). Only the read-out is wrong, but it is misleading for anyone (or any AI client) relying on it to build code or documentation.

Steps to Reproduce

  1. `udt action=create udtName="UDT_Repro_Pos"…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] Bulk modes still require the single-item parameters; members[] key name mismatch (memberName vs name)

Description

  1. The bulk variants (tags[], members[], memberNames[]) are rejected with MissingArgument unless the single-item parameters are also passed (for delete_member the parameter description explicitly says the single-item memberName is ignored when memberNames is present). Dummy single-item values are indeed ignored (no extra object is created), so the check is only a validation issue.
  2. udt create members[] requires the key name, while its description refers to…

Read the thread · 2026-10-01 · open · external user · 0 comments

Most recent

[Bug] OB numbers 30–38 (cyclic interrupt) refused by create_block; create_ob silently changes OB number and type; wrong default OB title

Description

  1. create_block with blockType=OB and secondaryType=CyclicInterrupt works, but any blockNumber from 2 to 122 is refused as "reserved for system OBs". On S7-1500, OB30–OB38 are the standard numbers for cyclic interrupt OBs (likewise OB10–17 time-of-day, OB20–23 time-delay, OB40–47 hardware interrupt, OB100 startup …). TIA itself accepts OB30 – verified by XML import.
  2. create_ob has no OB type parameter; obNumber=30 is silently replaced (here by 124) and the OB is…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] Block names containing "/" cannot be addressed – even right after the tool created the block

Description

/ is a valid character in TIA block names (real project: cyclic interrupt OB30 "EtherNet/IP" that calls an EtherNet/IP scanner FB). TiaCommander cannot address such a block by name – apparently / is treated as a folder separator. The resolver does find the block, it even offers it in "Did you mean", but refuses to use it. This also breaks the tool's own post-import verification.

Steps to Reproduce

  1. blocks_write action=import_xml_inline with an SW.Blocks.OB:…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] udt update_member_comment fails on a UDT that contains a Struct member – generated SCL source has a syntax error

Description

udt update_member_comment goes through a generated SCL source. For a UDT that contains a member of type Struct (with nested UDT members), the generated source is invalid and GenerateBlocksFromSource fails. The UDT itself is not damaged.

Steps to Reproduce

  1. udt action=create udtName="UDT_Repro_Pos" members=[{"name":"Pos","dataType":"Real"},{"name":"Vel","dataType":"Real"}]
  2. `udt action=create udtName="UDT_Repro_Params" members=[{"name":"AxisX","dataType":"Struct…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] UDT import with overwrite fails for a UDT in a subfolder ("fully qualified name already exists"); import_xml_file targetFolder looks in Program blocks

Description

  1. udt import_xml overwrite=true fails for a UDT located in a subfolder of PLC data types: TIA reports that an element with the same fully qualified name already exists. The same file imports fine when the UDT is at the root.
  2. blocks_write import_xml_file with a UDT XML and targetFolder reports FolderNotFound for an existing PLC data types folder – the folder is apparently looked up in Program blocks.

Steps to Reproduce

  1. UDT UDT_Repro_Params at root. `folders…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] Devices in "Ungrouped devices" are invisible to all device-based tools; devices only addressable by the internal Device object name

Description

PROFINET IO devices that TIA places in Project tree → Ungrouped devices (the default when an IO device is added or pasted in the network view) are not enumerated by TiaCommander. They are missing from session list_devices and hardware get_full_config, cannot be addressed by deviceName, and hardware get_network shows their network node without a device. After moving the device to the top level of the project tree it becomes visible.

Related: devices can only be…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] hardware: I/O addresses of all modules (local, PROFINET IO devices, GSDML devices) are reported on the CPU; modules show no addresses

Description

The hardware read actions report every I/O address range of the project on the CPU (PLC_1) – for modules in the CPU station, for modules of a PROFINET IO device and for a GSDML device. The modules themselves are listed without addresses. Start addresses and lengths are correct; only the owner (device/module) is wrong.

Impact: tags for a specific module cannot be created from the tool output (the original use case: "create tags for the addresses of the newly added module").…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] instantiate_library_type of an FB fails with a misleading "F-A-5 already instantiated" message after its UDTs were instantiated separately

Description

Instantiating an FB library type from a global library fails if the FB's UDT dependencies were instantiated from the same library first (separate instantiate_library_type calls). The tool reports the "V19 F-A-5 rule" (version already instantiated on the device), but the FB does not exist on the device. Instantiating the FB directly – without the UDTs first – works and brings the UDTs automatically.

Steps to Reproduce

Global library Libraries_Comm_Controller (Siemens,…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] Post-import verification attributes compile errors of OTHER blocks to the edited block → false rollback, valid change lost

Description

After an edit (here blocks_write add_network) the tool verifies the change by compiling. The compile result contains errors of other blocks in the program; the tool treats them as errors of the edited block, reports VERIFY FAILED, restores the backup and the change is lost – although the edited block itself compiled successfully. It also reports RESTORE INCOMPLETE, because the unrelated error is still there after the restore.

Steps to Reproduce

  1. Project contains an…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] move_block on a know-how protected block deletes it – re-import of the exported XML fails, restore fails the same way

Description

blocks_write move_block emulates a move as export → delete → import. For a know-how protected FB the export succeeds, but the exported XML cannot be imported back – neither into the target folder nor as the restore. The block is removed from the project.

The tool reports this correctly (MoveFailedRestoreFailed, block MISSING, backup path, "do not save"), so data loss can be avoided by closing the project without saving – but the operation should not delete the original in…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] Non-ASCII text passed in tool parameters is corrupted (UTF-8 read as Windows-1250) – comments, titles in blocks, DBs, tags, UDTs

Description

Every text with non-ASCII characters (here Polish: ą ć ę ł ń ó ś ź ż) that is passed to TiaCommander in a tool parameter arrives corrupted in TIA. The pattern is exactly UTF-8 bytes decoded as Windows-1250 (e.g. ś → Ĺ›, ę → Ä™, ł → Ĺ‚).

It affects all tested paths, including ones that do not go through External Source or XML import (e.g. tag add_tag writes the comment directly via the API, into the correct culture, but already corrupted). The text is therefore…

Read the thread · 2026-10-01 · open · external user · 0 comments

[Bug] create_block language=SCL drops member attributes (Retain, ExternalAccessible/Visible/Writable), also on overwrite

Description

blocks_write create_block with language=SCL (External Source route) does not apply member attributes and resets them on every overwrite=true:

Read the thread · 2026-10-01 · open · external user · 0 comments

The remaining reports are on the project's issue tracker.