Modbus Registers Tables
General Description
The following chapters describe the Modbus registers of the MicroLogic trip unit 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:

The registers are grouped according to the module they relate to:

For each module, the registers are grouped in tables of logically related information. The tables are presented in increasing address.

For each module, the commands are described separately:
Table Format
Register tables have the following columns:
Address 
Register 
RW 
X 
Unit 
Type 
Range 
A/E 
Description 


Address: a 16bit register address in hexadecimal. The address is data used in the Modbus frame.

Register: a 16bit register number in decimal (register = address + 1).

RW: register readwrite 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.
Example:
Register 1054 contains the system frequency. The unit is Hz and the scale factor is 10.
If the register returns 503, this means that the system frequency is
503/10 = 50.3 Hz.

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.

A/E: the metering type of the MicroLogic trip unit.

type A (Ammeter): current measurements

type E (Energy): current, voltage, power, and energy measurements


Description: provides information about the register and restrictions that apply.
Data Types
Data Types 
Description 
Range 

INT16U 
16bit unsigned integer 
0 to 65535 
INT16 
16bit signed integer 
32768 to +32767 
INT32U 
32bit unsigned integer 
0 to 4 294 967 295 
INT32 
32bit signed integer 
2 147 483 648 to +2 147 483 647 
INT64 
64bit signed integer 
9 223 372 036 854 775 808 to +9 223 372 036 854 775 807 
FLOAT32 
32bit signed integer with a floating point 
2^{126} (1.0) to 2^{127} (2  2^{23}) 
OCTET STRING 
Text string 
1 byte per character 
DATETIME 
Date and time in the IEC 608705 format Data Type: DATETIME 
– 
ULP DATE 
– 
BigEndian Format
INT32, INT32U, INT64, and INT64U variables are stored in bigendian format: the most significant register is transmitted first, the least significant register is transmitted at last place.
INT32, INT32U, INT64, and INT64U variables are made of INT16U variables.
The formulas to calculate the decimal value of these variables are:

INT32: (0bit31)x2^{31} + bit30x2^{30} + bit29x2^{29} + ...bit1x2^{1} + bit0x2^{0}

INT32U: bit31x2^{31} + bit30x2^{30} + bit29x2^{29} + ...bit1x2^{1} + bit0x2^{0}

INT64: (0bit63)x2^{63} + bit62x2^{62} + bit61x2^{61} + ...bit1x2^{1} + bit0x2^{0}

INT64U: bit63x2^{63} + bit62x2^{62} + bit61x2^{61} + ...bit1x2^{1} + bit0x2^{0}
Example 1:
The total active energy in the standard dataset is an INT64 variable coded in registers 32096 to 32099.
If the values in the registers are:

register 32096 = 0

register 32097 = 0

register 32098 = 0x0017 or 23

register 32099 = 0x9692 or 38546 as INT16U variable and 26990 as INT16 variable (use the INT16U value to calculate the value of the total active energy).
Then the total active energy is equal to 0x2^{48} + 0x2^{32} + 23x2^{16} + 38546x2^{0} = 1545874 Wh.
Example 2:
The reactive energy in the legacy dataset is an INT32 variable coded in registers 12052 to 12053.
If the values in the registers are:

register 12052 = 0xFFF2 = 0x8000 + 0x7FF2 or 32754

register 12053 = 0xA96E or 43374 as INT16U variable and 10606 as INT16 variable (use the INT16U value to calculate the value of the reactive energy).
Then the reactive energy is equal to (01)x2^{31} + 32754x2^{16} + 43374x2^{0} = 874130 kVARh.
Data Type: FLOAT32
Data type FLOAT32 is represented in the single precision IEEE 754 (IEEE standard for floatingpoint arithmetic). A value N is calculated as indicated below:
N = (1)^{S} x 2^{E127} 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 2^{0} x (1+0.5) = 1.5
Data Type: DATETIME
DATETIME is a data type used to code date and time defined by the IEC 608705 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 Timestamps
The quality of timestamps coded with the DATETIME data type can be indicated in the register following the 4 registers of the timestamp. In this case, the timestamp 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 or IFE 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 nonleap 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
The following table describes the steps to follow 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 nonleap 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 
7 
Result:

ULP Date Conversion Example
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 2 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.

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, 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.
NOTE: As per legacy register implementation, some registers may display different out of order and not applicable values. For example, INT16U registers may return 32768 (0x8000) and INT32U may display 0x80000000.
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 