Headless multi-port Modbus TCP meter simulator
Replace third-party meter simulators GUI instances with a single scalable application to load-test Modbus TCP clients against 50+ virtual meters simultaneously.
What it is
Modbus TCP Server Simulator is a headless Java application that binds multiple TCP ports and serves simulated Modbus TCP meters on each. It loads register data directly from third-party meter simulators document files, ensuring byte-for-byte compatibility with the third-party meter simulators GUI. One instance replaces the need for multiple third-party meter simulators windows—each running only one port—making it ideal for fleet and load-testing scenarios. The default configuration simulates a smart meters meter across 51 ports (502–552), matching the live platform database exactly.
Key benefits
Fleet testing at scale
Simulate 50+ meters on a single machine without spawning dozens of third-party meter simulators GUI windows. Each port runs on a dedicated lightweight worker, eliminating process-per-meter overhead.
Byte-identical register data
Reads third-party meter simulators binary documents directly, ensuring the exact meter state you configured in third-party meter simulators is what your client poller sees over the wire.
Write command testing
Supports Modbus write functions (FC06 single register, FC16 multiple registers), enabling round-trip validation of device control workflows.
No external protocol dependencies
Implements Modbus TCP MBAP and PDU framing directly, reducing deployment complexity and ensuring deterministic behavior in test environments.
Capabilities
- Multi-port binding: ranges (502-552) and lists (502,600,601); each port runs independently on a lightweight worker
- Register data from third-party meter simulators documents: merge multiple document blocks into one slave image, or use the bundled smart meters meter
- Read functions: FC01/02/03/04 (coils, discrete inputs, holding registers, input registers)
- Write functions: FC06/16 (single and multiple register mutations) with in-memory state persistence
- Slave ID override: specify a custom unit ID at startup, or inherit from the document
- Exception handling: illegal function codes and out-of-spec quantities return proper Modbus exceptions
- JDK 21 runtime with automatic toolchain provisioning via Gradle
