Modbus Registers Tables
General Description
The following chapters describe the Modbus registers of the ETV trip system and the Modbus registers of the modules connected to it. These registers provide information that can be read, like electrical measures, protection configuration, and monitoring information. The command interface enables the user to modify these registers in a controlled way.
The presentation rules of the Modbus registers are as follows:
-
For each module, the registers are grouped in tables of logically related information, according to the module they relate to:
-
ETV trip system (refer to ETV Trip System Registers)
-
BCM ULP module (refer to BCM ULP Module Registers)
-
IO module (refer to IO Module Registers)
-
IFM interface (refer to IFM Interface Registers)
-
-
For BCM ULP module, the files are described separately (refer to BCM ULP Module Files).
-
For each module, the commands are described separately:
-
ETV trip system (refer to ETV Trip System Commands)
-
IO module (refer to IO Module Commands)
-
IFM interface (refer to IFM Interface Commands)
-
To find a register, use the ordered list of the registers with a cross reference to the page where these registers are described (refer to Appendix A: Cross References to Modbus Registers).
Table Format
Register tables have the following columns:
Address |
Register |
RW |
X |
Unit |
Type |
Range |
Description |
---|---|---|---|---|---|---|---|
-
Address: a 16-bit register address in hexadecimal. The address is the data used in the Modbus frame.
-
Register: a 16-bit register number in decimal (register = address + 1).
-
RW: register read-write status
-
R: the register can be read by using Modbus functions W: the register can be written by using Modbus functions
-
RW: the register can be read and written by using Modbus functions
-
RC: the register can be read by using the command interface
-
WC: the register can be written by using the command interface
-
-
X: the scale factor. A scale of 10 means that the register contains the value multiplied by 10. So, the real value is the value in the register divided by 10. For example, register 1028 contains the I1 current unbalance (refer to Current Unbalance). The unit is % and the scale factor is 10. If the register returns 38, this means that I1 current unbalance is 38/10 = 3.8 %.
-
Unit: the unit the information is expressed in.
-
Type: the encoding data type (see data type description below).
-
Range: the permitted values for this variable, usually a subset of what the format allows.
-
Description: provides information about the register and restrictions that apply.
Data Types
Data Types |
Description |
Range |
---|---|---|
INT16U |
16-bit unsigned integer |
0 to 65535 |
INT16 |
16-bit signed integer |
-32768 to +32767 |
INT32U |
32-bit unsigned integer |
0 to 4 294 967 295 |
INT32 |
32-bit signed integer |
-2 147 483 648 to +2 147 483 647 |
INT64U |
64-bit unsigned integer |
0 to 18 446 744 073 709 600 000 |
INT64 |
64-bit signed integer |
-9 223 372 036 854 775 808 to +9 223 372 036 854 775 807 |
FLOAT32 |
32-bit signed integer with a floating point |
2-126 (1.0) to 2127 (2 - 2-23) |
OCTET STRING |
Text string |
1 byte per character |
MOD10000 |
Modulo operation (refer to Data Type: MOD10000) |
– |
DATE |
Date and time (refer to Data Types: DATE and XDATE) |
– |
XDATE |
Same as DATE with a fourth INT16U register for milliseconds information (refer to Data Types: DATE and XDATE) |
– |
DATETIME |
Date and time in the IEC 60870-5 format (refer to Data Type: DATETIME) |
– |
ULP DATE |
Date and time in ULP DATE format (refer to Data Type: ULP DATE) |
– |
Big-Endian Format
INT32, INT32U, INT64, and INT64U variables are stored in big-endian format: the most significant register is transmitted first, the least significant register is transmitted at last place.
Example
The total active energy is an INT64 variable coded in registers 32096 to 32099.
If
-
register 32096 = 0
-
register 32097 = 0
-
register 32098 = 70 (0x0046)
-
register 32099 = 2105 (0x0839)
then the total active energy is equal to 4 589 625 Wh = 0x248 + 0x232 + 70x216 + 2105x20
Data Type: FLOAT32
Data type FLOAT32 is represented in the single precision IEEE 754 (IEEE standard for floating-point arithmetic). A value N is calculated as indicated below:
N = (-1)S x 2E-127 x (1+M)
Coefficient |
Stands for |
Description |
Number of Bits |
---|---|---|---|
S |
Sign |
Defines the sign of the value: 0 = positive 1 = negative |
1 bit |
E |
Exponent |
Excess 127 binary integer added. When 0 < E < 255, the actual exponent is: e = E - 127. |
8 bits |
M |
Mantissa |
Magnitude, normalized binary significant |
23 bits |
Example:
0 = 0 00000000 00000000000000000000000
-1.5 = 1 01111111 10000000000000000000000
with:
-
S = 1
-
E = 01111111 = 127
-
M = 10000000000000000000000 = 1x2-1 + 0x2-2 +...+ 0x2-23 = 0.5
-
N = (-1) x 20 x (1+0.5) = -1.5
Data Type: MOD10000
MOD10000 corresponds to n + 1 registers in the INT16 format. Each register contains an integer from - 9999 to 9999. A value V representing n + 1 registers in MOD10000 format is calculated as indicated below:
V = sum(R[x] + R[x+1] x 10000 +...+ R[x+n] x 10000n), where R[x] is the value of the register number x.
For example, to calculate the active energy Ep coded in 4 registers:
-
register 2000 = 123 so R[x = 2000] = 123
-
register 2001 = 4567
-
register 2002 = 89
-
register 2003 = 0
So Ep = R[2000] + R[2001] x 100001 + R[2002] x 100002 + R[2003] x 100003
= 123 + 4567 x 10000 + 89 x 100002 + 0
= 8 945 670 123 kWh
Data Types: DATE and XDATE
This table presents DATE (registers 1 to 3) and XDATE (registers 1 to 4) data types:
Register |
Type |
Bit |
Range |
Description |
---|---|---|---|---|
1 |
INT16U |
0–7 |
0x01–0x1F |
Day |
8–14 |
0x01–0x0C |
Month |
||
15 |
0–1 |
Quality of the date and time If the bit 15 is set, the date and time may be incorrect. There are two possibilities:
|
||
2 |
INT16U |
0–7 |
0x00–0x17 |
Hours |
8–15 |
0x50–0xC7 |
Year
For example, 0x70 (112) corresponds to year 2012. |
||
3 |
INT16U |
0–7 |
0x00–0x3B |
Seconds |
8–15 |
0x00–0x3B |
Minutes |
||
4 |
INT16U |
0–15 |
0x0000–0x03E7 |
Complement in milliseconds (available only for XDATE format) |
For example, if the current date of BCM ULP coded in four registers is:
-
register 679 = 0x0513
-
register 680 = 0x700A
-
register 681 = 0x222E
-
register 682 = 0x0358
Then the current date and time of the BCM ULP is 19/05/2012 (May 19, 2012) at 10 hours, 34 minutes, 46 seconds, and 856 milliseconds.
Because:
-
0x0513
-
0x05 = 5 (months)
-
0x13 = 19 (days)
-
-
0x700A
-
0x70 = 112 (years)
-
0x0A = 10 (hours)
-
-
0x222E
-
0x22 = 34 (minutes)
-
0x2E = 46 (seconds)
-
-
0x0358 = 856 (milliseconds)
Data Type: DATETIME
DATETIME is a data type used to code date and time defined by the IEC 60870-5 standard.
Register |
Type |
Bit |
Range |
Description |
---|---|---|---|---|
1 |
INT16U |
0–6 |
0x00–0x7F |
Year: 0x00 (00) to 0x7F (127) correspond to years 2000 to 2127 For example, 0x0D (13) corresponds to year 2013. |
7–15 |
– |
Reserved |
||
2 |
INT16U |
0–4 |
0x01–0x1F |
Day |
5–7 |
– |
Reserved |
||
8–11 |
0x00–0x0C |
Month |
||
12–15 |
– |
Reserved |
||
3 |
INT16U |
0–5 |
0x00–0x3B |
Minutes |
6–7 |
– |
Reserved |
||
8–12 |
0x00–0x17 |
Hours |
||
13–15 |
– |
Reserved |
||
4 |
INT16U |
0–15 |
0x0000–0xEA5F |
Milliseconds |
Quality of DATETIME Time-Stamps
The quality of time-stamps coded with the DATETIME data type can be indicated in the register following the 4 registers of the time-stamp.
In this case, the time-stamp quality is coded as follows:
Bit |
Description |
---|---|
0–11 |
Reserved |
12 |
Externally synchronized:
|
13 |
Synchronized:
|
14 |
Date and time is set:
|
15 |
Reserved |
Quality of Bits in Registers
The quality of each bit of a register coded as INT16U data type as an enumeration of bits can be indicated in the register preceding the register.
Example:
The quality of each bit of the register 32001, circuit breaker status, is given in the preceding register, 32000.
The quality of the data corresponding to the bit 0 of register 32001, OF status indication contact, is given in the bit 0 of register 32000:
-
bit 0 of register 32000 = quality of OF status indication
-
bit 0 of register 32001 = OF status indication contact
If |
Then |
---|---|
If bit 0 of register 32000 = 1 AND bit 0 of register 32001 = 0 |
The OF contact indicates that the device is open |
If bit 0 of register 32000 = 1 AND bit 0 of register 32001 = 1 |
The OF contact indicates that the device is closed |
If bit 0 of register 32000 = 0 |
The OF contact indication is invalid |
Data Type: ULP DATE
ULP DATE is a data type used to code date and time. This table presents the ULP DATE data type.
Register |
Type |
Bit |
Range |
Description |
---|---|---|---|---|
1–2 |
INT32U |
– |
0x00000000–0xFFFFFFFF |
Number of seconds since January 1, 2000 |
3 |
INT16U |
– |
– |
Complement in milliseconds |
0–9 |
– |
Encodes the milliseconds |
||
10–11 |
– |
Not used |
||
12 |
0–1 |
IFM communication interface external synchronization status 0 = The communication interface has not been externally synchronized within the last 2 hours. 1 = The communication interface has been externally synchronized within the last 2 hours. |
||
13 |
0–1 |
ULP module internal synchronization status 0 = The ULP module has not been internally synchronized 1 = The ULP module has been internally synchronized |
||
14 |
0–1 |
Absolute date is set since last power on 0 = No 1 = Yes |
||
15 |
– |
Reserved |
ULP Date Counter
The date in ULP DATE format is counted in number of seconds since January 1, 2000.
In case of a power loss for an IMU module, the time counter is reset and will restart at January 1, 2000.
If an external synchronization occurs after a power loss, the time counter is updated and converts the synchronization date to the corresponding number of seconds since January 1, 2000.
ULP Date Conversion Principle
To convert the date from number of seconds since January 1, 2000, to current date, the following rules apply:
-
1 non-leap year = 365 days
-
1 leap year = 366 days
Years 2000, 2004, 2008, 2012,...(multiple of 4) are leap years (except year 2100).
-
1 day = 86,400 seconds
-
1 hour = 3,600 seconds
-
1 minute = 60 seconds
Follow the steps in the below table to convert the date from number of seconds since January 1, 2000, to current date:
Step |
Action |
---|---|
1 |
Calculate the number of seconds since January 1, 2000: S = (content of register 1 x 65536) + (content of register 2) |
2 |
Calculate the number of days since January 1, 2000: D = integer value of the quotient of S / 86,400 Calculate the remaining number of seconds: s = S - (D x 86,400) |
3 |
Calculate the number of days elapsed for the current year: d = D - (NL x 365) - (L x 366) with NL = number of non-leap years since year 2000 and L = number of leap years since year 2000 |
4 |
Calculate the number of hours: h = integer value of the quotient of s / 3600 Calculate the remaining number of seconds: s’ = s - (h x 3600) |
5 |
Calculate the number of minutes: m = integer value of the quotient of s’ / 60 Calculate the remaining number of seconds: s’’ = s’ - (m x 60) |
6 |
Calculate the number of milliseconds: ms = (content of register 3) AND 0x03FF Result:
|
ULP Date Conversion Example
Registers 2900 and 2901 return the date in number of seconds since January 1, 2000. Register 2902 returns the complement in ms with the quality of the date.
Notes
-
The type column tells how many registers to read to get the variable. For instance INT16U requires reading one register, whereas INT32 requires reading two registers.
-
Some variables must be read as a block of multiple registers, like the energy measurements. Reading the block partially results in an error.
-
Reading from an undocumented register results in a Modbus exception (refer to Modbus Exception Codes).
-
Numerical values are given in decimal. When it is useful to have the corresponding value in hexadecimal, it is shown as a C language type constant: 0xdddd. For example, the decimal value 123 is represented in hexadecimal as: 0x007B.
-
For measures that depend on the presence of neutral as identified by register 3314 (refer to System Type), reading the value returns 32768 (0x8000) if not applicable. For each table where it occurs, it is explained in a footnote.
-
Out of order and not applicable values depend on the data type.
Data Type |
Out of Order and Not Applicable Values |
---|---|
INT16U |
65535 (0xFFFF) |
INT16 |
-32768 (0x8000) |
INT32U |
4294967295 (0xFFFFFFFF) |
INT32 |
0x80000000 |
INT64U |
0xFFFFFFFFFFFFFFFF |
INT64 |
0x8000000000000000 |
FLOAT32 |
0xFFC00000 |