# Editor `devices/` — reference copy, NOT generated

These files are the **hand-made** half of the OpenPLC Editor project. Everything
else in the project (`project.json`, `pous/`) is generated from `src/` by
`../gen_project.py`; `devices/` is not, because it is configured through GUI
dialogs and holds machine-specific settings.

They live here so the setup is not lost when the Editor project is recreated —
which it will have to be, because the machine that held it has been retired. See
`../DEPLOY.md` §0.

**This is a reference copy, not the live one.** `DEPLOY.md` §A is the procedure
for reproducing it through the GUI; these files show what the result should look
like.

Captured 2026-08-14, from the working setup that first served Modbus data.

| File | What it is |
|---|---|
| `configuration.json` | Device board (`OpenPLC Runtime v4`) and runtime address |
| `pin-mapping.json` | Board pin map — Editor default, unused by this program |
| `servers/Modbus01.json` | The Modbus TCP **server** definition — the file that enables the runtime's `modbus_slave` plugin |

## Two things to know before reusing these

**`configuration.json` says `localhost`, and that is now wrong.** It was correct
when the Editor and the runtime were on the same host. The runtime is now on
`yau-sls-poc-lin001`, so a new Editor installation must point at **`10.0.0.17`**,
port `8443`.

**`servers/Modbus01.json` says `networkInterface: 0.0.0.0`, and that is correct —
leave it alone.** It looks like it contradicts the container publishing port 502
on `10.0.0.17` only, but the two settings operate at different layers:

| Layer | Setting | Effect |
|---|---|---|
| PLC runtime, **inside** the container | `0.0.0.0:502` | the Modbus slave listens on all of the container's own interfaces |
| Docker, **outside** the container | `10.0.0.17:502:502` | only the host's LAN address forwards to it |

Narrowing the runtime's own bind address gains nothing and risks the slave not
listening at all. The **Docker publish** is the security control. See
`../../02-environment/`.

## What is deliberately absent

There is **no `remote/` directory**. Remote Devices is the Modbus *master*
configuration — it would make the PLC poll someone else, inverting the
architecture invariant, and its IO groups claim `%IW` addresses that collide with
the field inputs in `src/10_globals.st`.

CI Server needs no entry in the PLC project at all. It is the client; it simply
connects.
