---
title: "Vendor tools and the engineering host"
---

# Vendor tools and the engineering host

How the PLC module finds TwinCAT, CODESYS and TIA Portal installations, the path settings that point it at them, and the engineering host helper that runs the vendor engines.

The PLC module never compiles or downloads IEC 61131-3 code itself. It uses the vendor installation already on the engineering machine, through one helper process, the engineering host. This page covers how the module finds those installations and how the helper runs.

**State:** tool discovery in the Editor is modelled: tested against models of the Windows tools it runs (`reg.exe`, `net.exe`, `whoami.exe`). The engineering host is kit shipped: compiled for .NET Framework 4.8, its protocol tested on Linux through a .NET 8 build of the same source against the Editor's client. **It has not run on Windows or against any vendor engine.** Offline install, no administrator rights on a managed machine, a licence server and a packaged, signed build have not been checked.

## Check the toolchain

Run **Neural Inverse PLC: Show PLC Toolchain**. The **PLC** output lists, side by side:

- TwinCAT, from `C:\TwinCAT\3.1` or the path setting, with the automation hosts registered (TcXaeShell, Visual Studio);
- TIA Portal versions from the registry, with the Openness APIs each ships;
- CODESYS, only through its path setting, since it cannot be discovered;
- for the workspace's projects: whether the pinned TIA Portal version is installed, whether TwinCAT XAE is there and whether you are in the "Siemens TIA Openness" group.

A registry read that fails is reported as unreadable, never as "not installed". On Linux and macOS nothing is looked for, and the log says why.

## The PLC Tools status bar entry

When a tool or prerequisite a project in the workspace needs is missing, a **PLC Tools** status bar entry appears ("1 PLC toolchain problem needs attention"). Its tooltip lists each item and who can grant it, for example membership of "Siemens TIA Openness" from your IT department. Clicking it runs Show PLC Toolchain.

## Point the module at your tools

| Setting | Value |
|---|---|
| `neuralInverse.plc.paths.twincat` | The TwinCAT 3.1 folder, the one that contains `Config` and `Components`. Empty looks in `C:\TwinCAT\3.1` |
| `neuralInverse.plc.paths.codesys` | `CODESYS.exe`, or the folder that contains it. CODESYS is found only through this setting |
| `neuralInverse.plc.codesys.profile` | The CODESYS profile the scripting engine starts with (`--profile`), named as in Help > About of CODESYS |
| `neuralInverse.plc.paths.tiaPortal` | A TIA Portal installation folder, the one that contains `PublicAPI`. Empty reads the installed versions from the registry |
| `neuralInverse.plc.engineHost.path` | The absolute path of the engineering host, `NeuralInverse.Plc.EngineHost.exe`. It must be an `.exe` or an executable file; a batch file cannot be started |

These settings are machine scoped: a workspace cannot set them for the engineering host, so a project cannot redirect which program the Editor starts.

- A configured path is used first and exclusively for its vendor. The helper looks by itself (`C:\TwinCAT\3.1`, the TIA Portal registry key, the Windows installed-programs list for CODESYS) only for a vendor whose path is not set.
- Each path must be an absolute Windows path of at most 1024 characters without quotes or control characters; the profile at most 256 characters without control characters or surrounding white space. A value the engineering host would refuse stops it from starting, with the setting named, rather than being left out.
- When one of these settings changes, a running engineering host is restarted with the new values, its engine sessions end, and the PLC log says so.
- A CODESYS session uses the CODESYS version the helper read from the configured `CODESYS.exe`. A CODESYS the helper found by itself never stands in for the configured one.

## The engineering host

The engineering host is the one helper process that runs the vendor engines. It is a .NET Framework 4.8 program built from the Editor's sources, so nothing is installed and no administrator rights are needed. It binds at run time to TwinCAT's COM objects, the CODESYS executable (`CODESYS.exe --noUI` with scripts it generates), the TIA Openness assemblies and the PLCSIM Advanced Runtime API of your installation; nothing of a vendor is shipped or referenced at build time.

- Each engine session runs on its own thread, and one resident session per project serves its builds, controller actions, library, task and tag reads and changes one after the other.
- Requests have timeouts and can be cancelled. After a crash the host is restarted, and a state-changing request is never replayed.
- Every state-changing request carries a confirmation that the engineer issued, bound to that action, used once and fresh; the helper refuses one without it. See [Approvals and audit](https://neuralinverse.com/docs/modules/plc/approvals-and-audit/).
- The engine version is never upgraded: TwinCAT builds with the version the `.tsproj` pins, TIA Portal with the version of the `.apNN` extension, CODESYS with the installation of the path setting.
- The helper reports, per vendor, the installations it found and what each lacks (for TIA Portal, membership of "Siemens TIA Openness" and the Openness assemblies). Off Windows it reports every engine as not installed, with that reason.
- Two Editor windows each start their own engineering host. There is no lock across windows.

## Several vendor versions side by side

Discovery lists every TwinCAT, TIA Portal and configured CODESYS installation it finds, and the project decides which one runs: a TwinCAT project whose pinned version is not installed is not opened in another one, and a TIA Portal project is never opened in a newer version, which would upgrade it.

## Take part in verification

Every vendor path here waits for its first run on a real installation. To run the verification kits on your own bench, ask your Neural Inverse contact.
