---
title: "PLC reference and troubleshooting"
---

# PLC reference and troubleshooting

Settings, commands, views, supported vendor tools, controllers and file formats of the PLC module with their verification state, and fixes for common problems.

## Settings

All settings are under **Neural Inverse PLC** in Settings. They do nothing while `neuralInverse.plc.enabled` is off.

| Setting | Type, default | Scope | Purpose |
|---|---|---|---|
| `neuralInverse.plc.enabled` | boolean, `false` | Window | Turns the PLC environment on for TwinCAT, CODESYS and TIA Portal projects. Set it with **Neural Inverse: Enable PLC Environment** |
| `neuralInverse.plc.paths.twincat` | string, empty | Machine | The TwinCAT 3.1 folder (with `Config` and `Components`). Empty looks in `C:\TwinCAT\3.1` |
| `neuralInverse.plc.paths.codesys` | string, empty | Machine | `CODESYS.exe` or its folder. CODESYS is found only through this setting |
| `neuralInverse.plc.paths.tiaPortal` | string, empty | Machine | A TIA Portal installation folder (with `PublicAPI`). Empty reads the installed versions from the registry |
| `neuralInverse.plc.codesys.profile` | string, empty | Machine | The CODESYS profile for `--profile`, as shown in Help > About of CODESYS |
| `neuralInverse.plc.engineHost.path` | string, empty | Machine | Absolute path of the engineering host executable |
| `neuralInverse.plc.watch.intervalMs` | number, `500`, minimum `100` | Window | Milliseconds between reads of watched values while a Watch view is visible. Reads never overlap. CODESYS reads at least every 1000 ms |

Machine-scoped settings cannot be set by a workspace for the engineering host, so a project cannot change which program the Editor starts. See [Vendor tools and the engineering host](https://neuralinverse.com/docs/modules/plc/toolchain/).

## Commands

All under **Neural Inverse PLC** in the Command Palette, except the enable command. No key runs a controller action.

| Area | Commands | Page |
|---|---|---|
| Environment | Neural Inverse: Enable PLC Environment; Disable PLC Environment; Show PLC Toolchain | [Set up](https://neuralinverse.com/docs/modules/plc/set-up/) |
| Project | Refresh TwinCAT Projects; Add POU; Add GVL; Add DUT; Add Method; Add Property; Add Action; Rename Object; Move Object to Folder; Remove Object | [Objects](https://neuralinverse.com/docs/modules/plc/project-objects/) |
| Editors | Open Declaration as Table; Open Declaration as Text; Open as Diagram; Open Diagram as Text | [Declaration table](https://neuralinverse.com/docs/modules/plc/declaration-table/), [Diagrams](https://neuralinverse.com/docs/modules/plc/diagrams/) |
| TwinCAT libraries | Add Library Reference; Remove Library Reference; Pin Library Version; Unpin Library Version; Set Library Namespace; Save PLC Project as Library... | [Libraries](https://neuralinverse.com/docs/modules/plc/libraries/) |
| CODESYS libraries | Read CODESYS Library References; Add CODESYS Library Reference...; Add CODESYS Library Placeholder...; Remove CODESYS Library Reference...; Pin CODESYS Library Placeholder...; Unpin CODESYS Library Placeholder... | [Libraries](https://neuralinverse.com/docs/modules/plc/libraries/) |
| TwinCAT tasks and I/O | Open Task Configuration; Set Task Cycle Time; Set Task Priority; Assign Program to Task; Remove Program from Task; Open I/O Links; Add I/O Link; Remove I/O Link; Go to TcLinkTo Declaration | [Tasks and I/O links](https://neuralinverse.com/docs/modules/plc/tasks-and-io/) |
| CODESYS tasks | Read CODESYS Task Configuration; Change CODESYS Task Setting...; Add CODESYS Program Call to Task...; Remove CODESYS Program Call from Task... | [Tasks and I/O links](https://neuralinverse.com/docs/modules/plc/tasks-and-io/) |
| TIA Portal tags | Read TIA Portal PLC Tags; Open TIA Portal Tag Table; Add TIA Portal PLC Tag...; Remove TIA Portal PLC Tag...; Rename TIA Portal PLC Tag...; Change Data Type of TIA Portal PLC Tag...; Change Address of TIA Portal PLC Tag...; Change Comment of TIA Portal PLC Tag...; Go to TIA Portal PLC Tag; Go to TIA Portal PLC Tag... | [TIA Portal PLC tags](https://neuralinverse.com/docs/modules/plc/tia-portal-tags/) |
| Compare | Compare TwinCAT Object with HEAD; Compare TwinCAT Object with Source Control Original (Git: Staged) | [Review changes](https://neuralinverse.com/docs/modules/plc/review-changes/) |
| Build | Build Project; Rebuild Project; Cancel Build | [Build](https://neuralinverse.com/docs/modules/plc/build/) |
| TwinCAT controller | Activate Configuration...; Login and Download...; Start PLC; Stop PLC; Logout; Generate Boot Project... | [TwinCAT](https://neuralinverse.com/docs/modules/plc/twincat-controller/) |
| CODESYS controller | CODESYS Login and Download...; CODESYS Login without Download...; CODESYS Online Change...; Start CODESYS Application; Stop CODESYS Application; CODESYS Reset Warm...; CODESYS Reset Cold...; CODESYS Reset Origin...; CODESYS Logout | [CODESYS](https://neuralinverse.com/docs/modules/plc/codesys-online/) |
| TIA Portal and PLCSIM | Download to S7-1500...; Download to PLCSIM Advanced...; Register PLCSIM Advanced Instance...; Power On PLCSIM Advanced Instance...; Power Off PLCSIM Advanced Instance...; Unregister PLCSIM Advanced Instance... | [TIA Portal download](https://neuralinverse.com/docs/modules/plc/tia-portal-download/) |
| TwinCAT online | Connect to TwinCAT Target (with Add TwinCAT Target... in its list); Disconnect from TwinCAT Target; Show TwinCAT Target Symbols; Add Watch; Remove Watch; Clear Watches; Write Value; Show Live Values; Choose PLC Project for Live Values; Announce Live Value | [Targets](https://neuralinverse.com/docs/modules/plc/targets/), [Watch](https://neuralinverse.com/docs/modules/plc/watch/), [Live values](https://neuralinverse.com/docs/modules/plc/live-values/), [Write](https://neuralinverse.com/docs/modules/plc/write-values/) |
| CODESYS online | Add CODESYS Watch...; Write CODESYS Value... | [Watch](https://neuralinverse.com/docs/modules/plc/watch/), [Write](https://neuralinverse.com/docs/modules/plc/write-values/) |
| S7-1500 | Add S7-1500 Target; Connect to S7-1500 Target; Disconnect from S7-1500 Target; Set S7-1500 Web Server User; Forget S7-1500 Pinned Certificate; Remove S7-1500 Target; Refresh S7-1500 Diagnostic Buffer; Export S7-1500 Diagnostic Buffer; Add S7-1500 Watch; Remove S7-1500 Watch; Clear S7-1500 Watches | [Targets](https://neuralinverse.com/docs/modules/plc/targets/), [Diagnostics](https://neuralinverse.com/docs/modules/plc/s7-1500-diagnostics/) |
| Trace | Open Trace; Start Trace...; Stop Trace; Export Trace as CSV... | [Trace](https://neuralinverse.com/docs/modules/plc/trace/) |

## Views, editors and status bar

| Where | What |
|---|---|
| PLC container: TwinCAT Projects | Solutions, projects, objects, libraries, tasks, I/O devices, issues; CODESYS and TIA Portal project rows with Libraries, Task Configuration and PLC Tags groups |
| PLC container: Watch | TwinCAT watches and CODESYS expressions |
| PLC container: S7-1500 Diagnostics, S7-1500 Watch (Web API) | Read-only S7-1500 diagnostic buffer and values |
| Testing view: PLC Tests | TcUnit suites and tests; TF1140 test cases, listed only. Run profiles Run on TwinCAT Target and Read Results from Target |
| Editor tabs | Declaration Table, Diagram, task configuration, I/O links, TIA Portal tag table, Trace |
| Status bar | TwinCAT Target; PLC Tools (missing tools); PLC Build ("Building ..."); PLC Controller Action |
| Output, channel PLC | Tool discovery, connections, symbol uploads, every write, controller action, library save and S7-1500 session event |
| Welcome page | Walkthrough Get Started with PLC Engineering |
| Agents | Language model tools `neuralInverse_plc_*`, see [Agent tools](https://neuralinverse.com/docs/modules/plc/agents/) |

## Vendor tools and engines

| Tool | How it is driven | State |
|---|---|---|
| TwinCAT XAE 3.1.4024, 4026 (Automation Interface) | Engineering host: build, rebuild, activate, login with download, start, stop, logout, boot project, save as library | Build and save as library kit shipped; controller actions modelled |
| TwinCAT runtime (ADS over TCP 48898) | The module's own ADS client: read-only connection, symbols, watch, live values, writes, trace, TcUnit results | Kit shipped |
| CODESYS V3.5 SP17 to SP22 (scripting engine) | Engineering host: build, rebuild, online actions, values and writes, libraries, task configuration | Build, libraries and tasks kit shipped; online actions, values and writes modelled |
| TIA Portal V17 to V21 (Openness) | Engineering host: build (compile), download, PLC tags | Build and tags kit shipped; download modelled |
| PLCSIM Advanced (Runtime API) | Engineering host: register, power on, power off, unregister instances; download through PLCSIM | Modelled |
| S7-1500 web API (HTTPS JSON-RPC) | The module's own client: diagnostic buffer, read-only values | Kit shipped |
| TcUnit | Discovery from source; results read over ADS | Kit shipped |
| TF1140 Test Framework | Discovery only | Listed, results not read |

None has been run against the real tool or controller.

## File formats

| Format | Read | Written | State |
|---|---|---|---|
| `.sln` (Visual Studio solution) | Yes | Byte for byte unchanged | Kit shipped |
| `.tsproj`, `.xti` | Yes | Task and I/O link edits | Kit shipped (open, round trip); edits modelled |
| `.plcproj` | Yes | Object entries, library references | Kit shipped; pin, unpin and namespace edits modelled |
| `.TcPOU`, `.TcGVL`, `.TcDUT`, `.TcIO`, `.TcTTO` | Yes, including LD, FBD, SFC and CFC bodies | Minimal edits, GUIDs kept | Kit shipped; diagrams modelled and kit shipped |
| `.st`, `.iecst` | Yes | Through the editor | Modelled |
| `.library`, `.compiled-library` | No | Saved by XAE through the engineering host | Kit shipped |
| CODESYS `.project` | Through CODESYS only | Through CODESYS only | Kit shipped or modelled per function |
| TIA Portal `.apNN` | Through Openness only | Through Openness only | Kit shipped or modelled per function |
| Trace CSV, S7-1500 diagnostic buffer CSV and JSON | No | Yes | Kit shipped with their functions |

The test fixtures are 88 real TwinCAT files written by TwinCAT 4022.14 to 4026.25 from Beckhoff samples and TcUnit, plus nine files with graphical bodies written by 3.1.4019 to 4026.

## Troubleshooting

| Symptom | What to do |
|---|---|
| Nothing PLC appears | Check the workspace is trusted and `neuralInverse.plc.enabled` is on. In an untrusted workspace a notification says why nothing runs |
| The TwinCAT Projects view is empty | It searches three folders deep and says what it searched. Open the folder that holds the `.sln` or `.tsproj` |
| A file shows under Issues as "not found" | The project lists a file the folder lacks. The rest of the project is still read |
| An edit is refused | The file changed on disk since it was read, a name is taken (also in another case), or a symbolic link is involved. Refresh and try again |
| A task edit is refused | The stored copies disagree, a motion project uses the task, or a file that may hold a copy is missing |
| A diagram edit is refused | The status line says why: the element is in a form the module does not edit, or the text changed meanwhile |
| PLC Tools appears in the status bar | Click it: Show PLC Toolchain lists what is missing and who can grant it, for example membership of "Siemens TIA Openness" |
| A CODESYS build starts nothing | Set `neuralInverse.plc.paths.codesys`; CODESYS cannot be discovered |
| A TwinCAT build refuses the project | The TwinCAT version the `.tsproj` pins is not installed; it is never opened in another version |
| The engineering host does not start | A path setting holds a value the host refuses (not absolute, quotes, control characters, over 1024 characters); the PLC log names the setting |
| A CODESYS library or task change is refused | Log out of the application, save or discard changes in CODESYS's copy, or read the project again |
| A TIA Portal tag change is refused | TIA Portal reports unsaved changes, or the table changed since it was read. Read the tags again |
| A TwinCAT target cannot be reached | Add a route on the PLC for this machine's AMS Net ID and use ADS on TCP 48898. A target that opens only secure ADS on 8016 cannot be reached |
| Login, Start, Stop or Logout is refused with nothing sent | The PLC project names no AMS port, or not the target's port. Add a target with that port |
| A controller action says "not known whether the controller changed" | The request may have been applied. Check the controller in the vendor tool before you try again |
| A CODESYS action is refused for a device | The device has no address: set it in CODESYS, Communication Settings |
| CODESYS watch rows say "Not trustworthy" | The controller does not run the project's application. Log in and download first |
| A TIA Portal download stops with a second dialog | TIA Portal asked for consequences the first confirmation did not accept. Read each one before you accept |
| Live values show nothing for a variable | The symbol path does not follow exactly from the source and the uploaded table (function or method variables, `VAR_TEMP`, an index, several instances of a block). This is by design |
| Watch values say "change detection unavailable" | The device does not report its symbol version; an online change or download will not be detected on this connection |
| An S7-1500 request fails with another certificate | The web server presents a certificate other than the pinned one. Check why before using **Forget S7-1500 Pinned Certificate** |
| A second "permission denied" from the S7-1500 | The web server user lacks the rights for that method |
| TcUnit results cannot be read | The program has no TcUnit runner the symbol table shows, or TcUnit has not finished; Read Results from Target says which |

To take part in verification on your own bench, ask your Neural Inverse contact for the verification kits.
