Modbus 寄存器表
概述
以下章节将介绍 Modbus 脱扣单元的 MicroLogic 寄存器及其模块的 Modbus 寄存器。这些寄存器提供了可读信息,比如电气测量、保护配置以及监控信息。借助命令接口,用户可以通过可控方式更改这些寄存器。
Modbus 寄存器的方法介绍如下:
-
根据相关的模块为寄存器分组:
-
针对每个模块,寄存器在逻辑相关信息表格中分组列出。表格按照地址增加的顺序显示。
-
针对每个模块,都会单独介绍命令:
表格格式
寄存器表包含如下各栏:
地址 |
寄存器 |
RW |
X |
单位 |
类型 |
范围 |
A/E |
描述 |
---|---|---|---|---|---|---|---|---|
-
地址:一个十六进制的 16 位寄存器地址。地址为用于 Modbus 型的数据。
-
寄存器:一个十进制的 16 位寄存器号(寄存器 = 地址 + 1)。
-
RW:寄存器读写状态
-
R:寄存器可通过 Modbus 功能读取
-
W:寄存器可通过 Modbus 功能写入
-
RW:寄存器可通过 Modbus 功能读写
-
RC:寄存器可通过命令接口读取
-
WC:寄存器可通过命令接口写入
-
-
X:比例因数。如果比例因数为 10,则表示寄存器包含乘以 10 后得到的值。因此,实际值是寄存器中的值除以 10。
示例:
寄存器 1054 包含系统频率。单位是 Hz,比例因数是 10。
如果寄存器返回 503,这表示系统频率为
503/10 = 50.3 Hz。
-
单位:用来表示信息的单位。
-
类型:编码数据类型(参阅下文介绍的数据类型)。
-
范围 :这个变量的允许值,通常是格式允许的一个子集。
-
A/E:MicroLogic脱扣单元的计量类型。
-
A 类(电流表):电流测量
-
E 类(电量):电流、电压、功率和电量测量
-
-
说明:提供关于寄存器的信息以及相关的限制条件。
数据类型
数据类型 |
描述 |
范围 |
---|---|---|
INT16U |
16 位无符号整数 |
0 至 65535 |
INT16 |
16 位有符号整数 |
-32768 至 +32767 |
INT32U |
32 位无符号整数 |
0 至 4 294 967 295 |
INT32 |
32 位有符号整数 |
-2 147 483 648 至 +2 147 483 647 |
INT64 |
64 位有符号整数 |
-9 223 372 036 854 775 808 至 +9 223 372 036 854 775 807 |
FLOAT32 |
带有浮点的 32 位有符号整数 |
2-126 (1.0) 至 2127 (2 - 2-23) |
OCTET STRING |
文本串 |
每个字符占 1 个字节 |
DATETIME |
采用 IEC 60870-5 格式的日期和时间 数据类型:DATETIME |
– |
ULP DATE |
– |
Big-Endian 格式
INT32、INT32U、INT64 和 INT64U 变量以 big-endian 格式存储:最高有效寄存器首先传输,最低有效寄存器最后传输。
INT32、INT32U、INT64 和 INT64U 变量由 INT16U 变量组成。
这些变量的十进制值计算公式为:
-
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
示例 1:
标准数据集中的总有功电能为寄存器 32096 至 32099 中编码的 INT64 变量。
如果寄存器中的值为:
-
寄存器 32096 = 0
-
寄存器 32097 = 0
-
寄存器 32098 = 0x0017 或 23
-
寄存器 32099 = 0x9692 或 38546(作为 INT16U 变量)以及 -26990(作为 INT16 变量)(使用 INT16U 值计算总有功电能的值)。
则总有功电能等于 0x248 + 0x232 + 23x216 + 38546x20 = 1545874 Wh。
示例 2:
旧有数据集中的无功电能为寄存器 12052 至 12053 中编码的 INT32 变量。
如果寄存器中的值为:
-
寄存器 12052 = 0xFFF2 = 0x8000 + 0x7FF2 或 32754
-
寄存器 12053 = 0xA96E 或 43374(作为 INT16U 变量)以及 -10606(作为 INT16 变量)(使用 INT16U 值计算无功电能的值)。
则无功电能等于 (0-1)x231 + 32754x216 + 43374x20 = -874130 kVARh。
数据类型:FLOAT32
数据类型 FLOAT32 是用单精度 IEEE 754 表示的(用于浮点算法的 IEEE 标准)。按如下方式计算数值 N:
N = (-1)S x 2E-127 x (1+M)
系数 |
表示 |
描述 |
位数 |
---|---|---|---|
S |
有符号 |
定义数值符号: 0 = 正数 1 = 负数 |
1 位 |
E |
指数 |
添加的额外 127 二进制整数。 0 < E < 255 时,实际指数为:e = E - 127。 |
8 位 |
M |
尾数 |
幅值,标准化二进制(有意义) |
23 位 |
示例:
0 = 0 00000000 00000000000000000000000
-1.5 = 1 01111111 10000000000000000000000
具有:
-
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
数据类型:DATETIME
DATETIME 是用于对 IEC 60870-5 标准定义的日期和时间进行编码的数据类型。
寄存器 |
类型 |
位 |
范围 |
描述 |
---|---|---|---|---|
1 |
INT16U |
0-6 |
0x00–0x7F |
年: 0x00 (00) 至 0x7F (127) 对应年份 2000 至 2127 例如,0x0D (13) 对应年份 2013。 |
7-15 |
– |
保留 |
||
2 |
INT16U |
0-4 |
0x01–0x1F |
天 |
5-7 |
– |
保留 |
||
8-11 |
0x00–0x0C |
月 |
||
12-15 |
– |
保留 |
||
3 |
INT16U |
0-5 |
0x00–0x3B |
分 |
6-7 |
– |
保留 |
||
8-12 |
0x00–0x17 |
小时 |
||
13-15 |
– |
保留 |
||
4 |
INT16U |
0-15 |
0x0000–0xEA5F |
毫秒 |
DATETIME 时间戳的特性
以 DATETIME 数据类型编码的时间戳的特性在时间戳的 4 个寄存器之后的寄存器中予以指示。在这种情况下,时间戳特性的编码如下:
位 |
描述 |
---|---|
0-11 |
保留 |
12 |
外部同步:
|
13 |
已同步:
|
14 |
日期和时间设置:
|
15 |
保留 |
寄存器中位的特性
以 INT16U 数据类型编码的寄存器中作为位枚举的每个位的特性在该寄存器之前的寄存器中予以指示。
示例:
寄存器 32001(断路器状态)的每个位的特性在前一个寄存器 32000 中给出。
与寄存器 32001 的位 0(OF 状态指示触点)对应的数据的特性在寄存器 32000 的位 0 中给出:
-
寄存器 32000 的 位 0 = OF 状态指示的特性
-
寄存器 32001 的 位 0 = OF 状态指示触点
如果 |
则 |
---|---|
如果寄存器 32000 的 位 0 = 1 并且寄存器 32001 的 位 0 = 0 |
OF 触点指示设备已分闸 |
如果寄存器 32000 的 位 0 = 1 并且寄存器 32001 的 位 0 = 1 |
OF 触点指示设备已合闸 |
如果寄存器 32000 的 位 0 = 0 |
OF 触点指示无效 |
数据类型:ULP DATE
ULP DATE 是用于编码日期和时间的数据类型。本表介绍了 ULP DATE 数据类型。
寄存器 |
类型 |
位 |
范围 |
描述 |
---|---|---|---|---|
1 2 |
INT32U |
– |
0x00000000-0xFFFFFFFF |
自 2000 年 1 月 1 日起的秒数 |
3 |
INT16U |
– |
– |
补码(毫秒) |
0-9 |
– |
对毫秒数进行编码 |
||
10-11 |
– |
未使用 |
||
12 |
0–1 |
IFM或 IFE 通信接口外部同步状态 0 = 通信接口最后 2 小时内未进行外部同步化。 1 = 通信接口最后 2 小时内进行了外部同步化。 |
||
13 |
0–1 |
ULP 模块本地同步状态 0 = ULP 模块没有进行本地同步化。 1 = ULP 模块进行了本地同步化。 |
||
14 |
0–1 |
自上次通电后设置绝对日期 0 = 无 1 = 是 |
||
15 |
– |
保留 |
ULP 日期计数器
自 2000 年 1 月 1 日起,计数(秒)ULP DATE 格式的日期。
如果 IMU 模块出现断电,将复位时间计数器,并从 2000 年 1 月 1 日重新开始。
如果在断电后出现外部同步化,将更新时间计数器,并将同步日期转换为自 2000 年 1 月 1 日起的秒数。
ULP 日期转换原则
要将自 2000 年 1 月 1 日起的秒数日期转换为当前日期,使用以下规则:
-
1 平年 = 365 天
-
1 闰年 = 366 天
年份 2000、2004、2008、2012,...(4 的倍数)为闰年(2100 除外)。
-
1 天 = 86400 秒
-
1 小时 = 3600 秒
-
1 分钟 = 60 秒
下表描述了将自 2000 年 1 月 1 日起的秒数日期转换为当前日期的步骤:
步骤 |
操作 |
---|---|
1 |
计算自 2000 年 1 月 1 日起的秒数:S =(寄存器 1 的内容 x 65536)+(寄存器 2 的内容) |
2 |
计算自 2000 年 1 月 1 日起的天数:D = S / 86,400 的商的整数值 计算剩余秒数:s = S - (D x 86,400) |
3 |
计算当年过去的天数:d = D - (NL x 365) - (L x 366) 其中 NL = 自 2000 年起的平年数量,L = 自 2000 年起的闰年数 |
4 |
计算小时数:h = s / 3600 得数的整数值 计算剩余秒数:s’ = s - (h x 3600) |
5 |
计算分钟数:m = s’/ 60 得数的整数值 计算剩余秒数:s’’ = s’ - (m x 60) |
6 |
计算毫秒数:ms =(寄存器 3 的内容)加上 0x03FF |
7 |
结果:
|
ULP 日期转换示例
注
-
“类型”栏说明了获取变量所需读取的寄存器数。例如,INT16U 要求读取一个寄存器,而 INT32 需要读取 2 个寄存器。
-
某些变量必须作为多个寄存器块来读取,例如电量测量值。如果只读一部分数会导致错误。
-
数值采用十进制表示。如果需要使用十六进制来表示,那么该值将显示为 C 语言类型的常量:0xdddd。比如,十进制值 123 的十六进制表示方式为:0x007B。
-
假如测量值与由寄存器 3314 确定的中性线相关,那么读取数值将返回 32768 (0x8000)(如果不适用)。对于出现这种情况的每个寄存器表,都会分别在脚注中予以说明。
-
乱序和不相关数据取决于数据类型。
注: 如果使用旧有的寄存器实现方式,某些寄存器可能显示不同的乱序和不相关数值。比如,INT16U 寄存器可能返回 32768 (0x8000),INT32U 可能显示 0x80000000。
数据类型 |
乱序和不相关数值 |
---|---|
INT16U |
65535 (0xFFFF) |
INT16 |
-32768 (0x8000) |
INT32U |
4294967295 (0xFFFFFFFF) |
INT32 |
0x80000000 |
INT64U |
0xFFFFFFFFFFFFFFFF |
INT64 |
0x8000000000000000 |
FLOAT32 |
0xFFC00000 |