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 16-bit register address in hexadecimal. The address is 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.
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 |
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 |
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 |
DATETIME |
Date and time in the IEC 60870-5 format Data Type: DATETIME |
– |
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.
INT32, INT32U, INT64, and INT64U variables are made of INT16U variables.
The formulas to calculate the decimal value of these variables are:
-
INT32: (0-bit31)x231 + bit30x230 + bit29x229 + ...bit1x21 + bit0x20
-
INT32U: bit31x231 + bit30x230 + bit29x229 + ...bit1x21 + bit0x20
-
INT64: (0-bit63)x263 + bit62x262 + bit61x261 + ...bit1x21 + bit0x20
-
INT64U: bit63x263 + bit62x262 + bit61x261 + ...bit1x21 + bit0x20
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 0x248 + 0x232 + 23x216 + 38546x20 = 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 (0-1)x231 + 32754x216 + 43374x20 = -874130 kVARh.
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: 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 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 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
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 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 |
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 |