✓ Modbus 4x Register Simulator — Windows 10/11

Modbus Holding Register Simulator

Configure holding registers (40001–49999), set INT16, FLOAT32, and DWORD values, and test FC03 reads and FC16 writes — without real hardware. Free 30-day trial.

⬇ Download Free Trial — 30 Days $99 One-Time License →

No registration · No credit card · Windows 10/11

65,535
Holding registers
FC03/06/16
Read & write support
FLOAT32
32-bit types supported
4 byte orders
ABCD, DCBA, BADC, CDAB

What Are Modbus Holding Registers?

Holding registers (data model prefix 4x) are the most versatile register type in Modbus. They are 16-bit, read-write registers accessible via three function codes: FC03 (read), FC06 (write single), FC16 (write multiple). Engineers use them to store setpoints, analog output values, configuration parameters, and any value that needs to be both read and written by the master.

A Modbus holding register simulator lets you define register values in software — so you can test a SCADA system, PLC program, or HMI application against a simulated device before the real hardware is available.

Modbus Register Type Reference

TypePrefix1-based Range0-based PDU RangeRead FCWrite FCAccess
Coils0x00001–099990–9998FC01FC05, FC15Read/Write
Discrete Inputs1x10001–199990–9998FC02Read-only
Input Registers3x30001–399990–9998FC04Read-only
Holding Registers4x40001–499990–9998FC03FC06, FC16Read/Write

Holding Register Simulator Features

📊

65,535 Configurable Holding Registers

Set any value in registers 40001–65535. Use the grid editor to enter values individually, paste from a spreadsheet, or import from a CSV register map. Changes take effect instantly — the next master read gets the updated value.

🔢

All Data Types — INT16, UINT16, INT32, FLOAT32, DWORD

Display and set values as signed/unsigned 16-bit integers, 32-bit integers spanning two registers, IEEE 754 float32 across two registers, or raw hex. Choose the data type per register block to match your device's register map.

🔄

Four Byte Orders for 32-bit Values

32-bit values spanning two registers have four possible byte orderings: ABCD (Big Endian), DCBA (Little Endian), BADC (Mid-Big), CDAB (Mid-Little). Select the one matching your device spec — critical for energy meters and VFD drives.

✍️

FC16 Write Simulation — Test Master Writes

Your SCADA or PLC sends FC16 write requests to the simulator. The new values appear instantly in the register grid. Use this to validate that your master is sending the correct register addresses, data types, and values before deploying to production.

📋

Transaction Log — Every FC03/FC06/FC16 Logged

Every read and write is logged with timestamp, function code, starting address, register count, and values. Instantly see if your master is requesting the right address range, and verify writes arrived correctly.

📂

CSV Register Map Import

Have a device datasheet with a register map? Export it to CSV format and import directly into the simulator. Columns: address, value, data type, byte order, description. Populates all registers in one click.

Holding Register Addressing — 1-based vs 0-based

The most common source of confusion when working with Modbus holding registers is the offset between datasheet notation and the actual PDU address:

Datasheet saysPDU address (send in request)FC03 request example
400010 (0x0000)FC03, start=0, count=1
400021 (0x0001)FC03, start=1, count=1
4010099 (0x0063)FC03, start=99, count=1
41000999 (0x03E7)FC03, start=999, count=1

Rule: PDU address = datasheet register number − 40001. ModbusSimulator.com shows both notations in the register grid — switch between 1-based and 0-based display with one click.

Common Use Cases

⚡ Energy Meter Simulation

Set voltage (40001), current (40003), power (40005) as 32-bit floats in ABCD byte order — typical of Eastron SDM and Schneider iEM meters.

🔧 VFD Drive Testing

Simulate speed setpoint (40001), status word (40003), output frequency (40005) — test SCADA speed control and fault monitoring logic before the drive arrives.

🌡️ Temperature Controller

Simulate process value (40001) and setpoint (40002) as INT16. Test your PLC's PID control loop reads the correct addresses before connecting the real controller.

🏗️ SCADA Driver Validation

Configure the simulator to match your device's register map. Connect Ignition, WinCC, or AVEVA and verify tags are bound to correct addresses with correct engineering unit scaling.

Also need Coils, Discrete Inputs, and Input Registers?

ModbusSimulator.com simulates all four Modbus register types in the same slave instance — holding registers (4x), input registers (3x), coils (0x), and discrete inputs (1x). One $99 license, one tool.

Full Slave Simulator → Download Free Trial

Frequently Asked Questions

What is the difference between holding registers and input registers?

Both are 16-bit registers, but with different access permissions. Holding registers (4x) are read-write — a master can both read them (FC03) and write to them (FC06/FC16). Input registers (3x) are read-only — the master can only read them (FC04), the slave device sets the values internally (e.g., a sensor reading). In ModbusSimulator.com, you can set values in both types, but only holding registers respond to FC16 write requests.

How do I set a 32-bit float in holding registers?

Select two consecutive registers (e.g., 40001 and 40002), set the data type to "FLOAT32", enter the float value (e.g., 98.6), and choose the byte order matching your device's spec. The simulator automatically splits the value across both registers. Common byte orders: energy meters often use ABCD Big Endian; some Schneider devices use CDAB. Check the device register map document.

My master can't read register 40001 — why?

Most Modbus masters send address 0 in the FC03 request to read register 40001 (0-based addressing). Some masters use 1-based addressing and send address 1 for register 40001. ModbusSimulator.com defaults to 0-based (register 40001 = address 0). If your master sends address 1 for 40001, enable the "1-based addressing" option in the simulator settings.

Can I simulate exception responses for specific register ranges?

Yes. You can configure the simulator to return FC03 exception code 02 (Illegal Data Address) for specific register ranges. This lets you test your master application's error handling for out-of-range addresses — without needing a real device that has the same restrictions.

Simulate Modbus Holding Registers — Free for 30 Days

All register types · FC03, FC06, FC16 · 32-bit float · TCP + RTU · Windows 10/11

⬇ Download Free Trial — v1.1.3 View Pricing →