# DL205 Modbus Simulator Wraps the `dl205.json` pymodbus profile as a standalone launcher and as an xUnit managed lifecycle. ## Manual launch ```powershell pwsh tests/sim/run-dl205-sim.ps1 -Port 5020 ``` On first run the script creates a Python venv at `tests/sim/.venv` and installs: ``` pymodbus==3.13.0 aiohttp ``` (`pymodbus 3.13.0` does not provide a `[server]` extra; the simulator is included in the base package. `aiohttp` is required by the simulator's HTTP console.) Re-runs detect the existing venv and skip provisioning (fast path, < 2 s to first packet). Ctrl-C exits cleanly. The venv directory is gitignored. ## Requirements - Python 3.10+ on `PATH` (tested with 3.13). The script also tries the Windows `py` launcher. - Network access for first-run venv provisioning. Subsequent runs are fully offline. ## Parameters | Parameter | Default | Description | |------------|--------------------------------|------------------------------------| | `-Profile` | `dl205.json` | pymodbus JSON device profile | | `-Port` | `5020` | TCP port the Modbus server binds | ## xUnit integration Test classes that need a live simulator declare: ```csharp [Collection(nameof(DL205SimulatorCollection))] ``` The `DL205SimulatorFixture` (in `tests/Mbproxy.Tests/Sim/`) spawns `run-dl205-sim.ps1` via `pwsh -NoProfile -File`, polls for a TCP connection within 10 s, and exposes `Host`, `Port`, and `LogTail`. If Python is unavailable, `SkipReason` is populated and every test in the collection skips cleanly rather than failing. ## Version pin `pymodbus[server]==3.13.0` — update this README and `run-dl205-sim.ps1` together when re-pinning.