Public Modbus-TCP Test Server

Free environment for testing Modbus-TCP communication

SCADA Pult.Online PultModbusTester Utility Russian version

Connection Data

IP Address45.8.248.56
Modbus Port502
Slave ID1 - 10 (slaves represent different data formats)

Supported Commands

CodeName
 1 (0x01)Read Coils (CL)
 2 (0x02)Read Discrete Inputs (DI)
 3 (0x03)Read Holding Registers (HR)
 4 (0x04)Read Input Registers (IR)
 5 (0x05)Write Single Coil (CL)
 6 (0x06)Write Single Holding Register (HR)
16 (0x10)Write Multiple Holding Registers (HR) (max. 2 registers)

Supported HR/IR Formats

The test server provides several data formats for Holding Registers (HR) and Input Registers (IR). They differ in data type and byte/word order (A - most significant). Each Slave provides data in its own format:

SlaveFormatDescription
1UINT16 Unsigned 16-bit integer, byte order: A B
Registers: 1,2,3,…,1024 (1 register per value, 2 bytes)
2UINT32_ABCD Unsigned 32-bit integer, byte order: A B C D
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
3UINT32_CDAB Unsigned 32-bit integer, byte order: C D A B
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
4UINT32_BADC Unsigned 32-bit integer, byte order: B A D C
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
5UINT32_DCBA Unsigned 32-bit integer, byte order: D C B A
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
6FLOAT_ABCD 32-bit floating point number, byte order: A B C D
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
7FLOAT_CDAB 32-bit floating point number, byte order: C D A B
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
8FLOAT_BADC 32-bit floating point number, byte order: B A D C
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
9FLOAT_DCBA 32-bit floating point number, byte order: D C B A
Registers: 1,3,5,…,1023 (2 registers per value, 4 bytes)
10UINT16 Unsigned 16-bit integer, byte order: A B
IR Registers: 1,2,3,…,268 (1 register per value, 2 bytes)
IR Registers: 300,301 (2 registers per value, 4 bytes)

This slave contains only IR registers with current time metrics for different time zones. Registers for different zones are spaced with an offset of 10:

1 + 10 x Z - Year
2 + 10 x Z - Month
3 + 10 x Z - Day of month
4 + 10 x Z - Hour
5 + 10 x Z - Minute
6 + 10 x Z - Second
7 + 10 x Z - Day of week
8 + 10 x Z - Time zone (in hours from UTC)

where Z is the time zone index, from 0 to 26

Zones with index 0 to 14 correspond to time zones east of Greenwich (Z==0: UTC+00:00, Z==14: UTC+14:00)
Zones with index 15 to 26 correspond to time zones west of Greenwich in reverse order (Z==15: UTC-01:00, Z==26: UTC-12:00)

Example of calculating the register address for Greenwich:
Zone UTC+00:00, hence Z = 0
Hour register address = 4 + 10 x 0 = 4

Example of calculating the register address for Moscow time zone:
Zone UTC+03:00, hence Z = 3
Hour register address = 4 + 10 x 3 = 34

IR Register 300: Unix Timestamp (UINT32_ABCD)
Data is provided with an accuracy of ±0.5 seconds.

Values (for slaves 1 - 9)

Software for Polling Registers

To work with the Modbus server, you can use the PultModbusTester utility.
The screenshot shows an example of obtaining time metrics: