Tablas de registros Modbus
Descripción general
En los capítulos siguientes se describen los registros Modbus de la unidad de control MicroLogic y los registros Modbus de los módulos conectados a ella. Estos registros proporcionan información que se puede leer, como medidas eléctricas, sobre la configuración de protección y la supervisión. La interfaz de comandos permite al usuario modificar estos registros de forma controlada.
Las normas de presentación de los registros Modbus son:
-
Los registros están agrupados de acuerdo con el módulo con el que están relacionados:
-
Para cada módulo, los registros están agrupados en tablas de información relacionada lógicamente. Las tablas se presentan ordenando las direcciones de menor a mayor.
-
Para cada módulo, se describen los comandos por separado:
Formato de tabla
Las tablas de registro tienen estas columnas:
Dirección |
Registro |
L/E |
X |
Unidad |
Tipo |
Rango |
A/E |
Descripción |
---|---|---|---|---|---|---|---|---|
-
Dirección: una dirección de registro de 16 bits en formato hexadecimal. La dirección responde a los datos utilizados en la trama Modbus.
-
Registro: un número de registro de 16 bits en formato decimal (registro = dirección + 1).
-
LE: estado del registro de lectura-escritura
-
L: el registro puede leerse mediante las funciones Modbus
-
E: puede escribirse en el registro mediante las funciones Modbus
-
LE: el registro puede leerse y puede escribirse en él mediante las funciones Modbus
-
LC: el registro puede leerse por medio de la interfaz de comandos
-
EC: puede escribirse en el registro por medio de la interfaz de comandos
-
-
X: el factor de escala. Una escala de 10 significa que el registro contiene el valor multiplicado por 10. Por lo tanto, el valor real es el valor del registro dividido por 10.
Ejemplo:
El registro 1054 contiene la frecuencia del sistema. La unidad es Hz y el factor de escala es 10.
Si el registro devuelve 503, esto significa que la frecuencia del sistema es
503/10 = 50,3 Hz.
-
Unidad: la unidad en la que se expresa la información.
-
Tipo: tipo de datos de codificación (consulte la descripción de los tipos de datos a continuación).
-
Rango: los valores permitidos para esta variable, normalmente un subconjunto de lo que permite el formato.
-
A/E: tipo de medida de la unidad de control MicroLogic.
-
Tipo A (Amperímetro): medidas de corriente
-
Tipo E (Energía): medidas de corriente, tensión, alimentación y energía
-
-
Descripción: proporciona información sobre el registro y las restricciones que se aplican.
Tipos de datos
Tipos de datos |
Descripción |
Rango |
---|---|---|
INT16U |
Entero sin signo de 16 bits |
Entre 0 y 65535 |
INT16 |
Entero con signo de 16 bits |
Entre -32768 y +32767 |
INT32U |
Entero sin signo de 32 bits |
De 0 a 4 294 967 295 |
INT32 |
Entero con signo de 32 bits |
Entre –2 147 483 648 y +2 147 483 647 |
INT64 |
Entero con signo de 64 bits |
Entre -9 223 372 036 854 775 808 y +9 223 372 036 854 775 807 |
FLOAT32 |
Entero con signo de 32 bits con un punto flotante |
Entre 2-126 (1.0) y 2127 (2 - 2-23) |
CADENA DE BYTES |
Cadena de texto |
1 byte por carácter |
DATETIME |
Fecha y hora en formato IEC 60870-5 Tipo de datos: DATETIME |
– |
ULP DATE |
– |
Formato Big-Endian
Las variables INT32, INT32U, INT64 e INT64U se almacenan en formato big-endian: el registro más significativo se transmite en primer lugar y el menos significativo en último lugar.
Las variables INT32, INT32U, INT64 e INT64U están formadas por variables INT16U.
Las fórmulas para calcular el valor decimal de estas variables son:
-
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
Ejemplo 1:
La energía activa total del conjunto de datos estándar es una variable INT64 codificada en los registros 32096 a 32099.
Si los valores de los registros son:
-
Registro 32096 = 0
-
Registro 32097 = 0
-
Registro 32098 = 0x0017 o 23
-
Registro 32099 = 0x9692 o 38546 como variable INT16U y -26990 como variable INT16 (use el valor INT16U para calcular el valor de la energía activa total).
Entonces, la energía activa total es igual a 0x248 + 0x232 + 23x216 + 38546x20 = 1545874 Wh.
Ejemplo 2:
La energía reactiva del conjunto de datos heredado es una variable INT32 codificada en los registros 12052 a 12053.
Si los valores de los registros son:
-
registro 12052 = 0xFFF2 = 0x8000 + 0x7FF2 o 32754
-
registro 12053 = 0xA96E o 43374 como variable INT16U y -10606 como variable INT16 (use el valor INT16U para calcular el valor de la energía reactiva).
Entonces, la energía reactiva es igual a (0-1)x231 + 32754x216 + 43374x20 = -874130 kVARh.
Tipo de datos: FLOAT32
El tipo de datos FLOAT32 se representa en la precisión única IEEE 754 (estándar IEEE para la aritmética de coma flotante). Un valor N se calcula como se muestra a continuación:
N = (-1)S x 2E-127 x (1+M)
Coeficiente |
Significa |
Descripción |
Número de bits |
---|---|---|---|
S |
Señal |
Define la señal del valor: 0 = positivo 1 = negativo |
1 bit |
E |
Exponente |
Entero binario 127 de exceso añadido. Si 0 < E < 255, el exponente real es: e = E - 127. |
8 bits |
M |
Mantisa |
Significante binario normalizado de magnitud |
23 bits |
Ejemplo:
0 = 0 00000000 00000000000000000000000
-1.5 = 1 01111111 10000000000000000000000
con:
-
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
Tipo de datos: DATETIME
DATETIME es un tipo de datos que permite codificar la fecha y hora definidas según el estándar IEC 60870-5.
Registro |
Tipo |
Bit |
Rango |
Descripción |
---|---|---|---|---|
1 |
INT16U |
0-6 |
0x00–0x7F |
Año: Entre 0x00 (00) y 0x7F (127) corresponde a los años entre 2000 y 2127 Por ejemplo, 0x0D (13) corresponde al año 2013. |
7-15 |
– |
Reservado |
||
2 |
INT16U |
0-4 |
0x01–0x1F |
Día |
5-7 |
– |
Reservado |
||
8-11 |
0x00–0x0C |
Mes |
||
12-15 |
– |
Reservado |
||
3 |
INT16U |
0-5 |
0x00–0x3B |
Minutos |
6-7 |
– |
Reservado |
||
8-12 |
0x00–0x17 |
Horas |
||
13-15 |
– |
Reservado |
||
4 |
INT16U |
0-15 |
0x0000–0xEA5F |
Milisegundos |
Calidad de marcas de tiempo DATETIME
La calidad de las marcas de tiempo codificadas con el tipo de datos DATETIME puede indicarse en el registro que sigue a los 4 registros de la marca de tiempo. En este caso, la calidad de la marca de tiempo se codifica de la siguiente forma:
Bit |
Descripción |
---|---|
0-11 |
Reservado |
12 |
Sincronización externa:
|
13 |
Sincronización:
|
14 |
Fecha y hora configuradas:
|
15 |
Reservado |
Calidad de bits en registros
La calidad de cada bit de un registro codificado con el tipo de datos INT16U como una enumeración de bits puede indicarse en el registro precedente al registro en cuestión.
Ejemplo:
La calidad de cada bit del registro 32001, el estado del interruptor automático, se proporciona en el registro precedente, el 32000.
La calidad de los datos correspondientes al bit 0 del registro 32001, el contacto de señalización de estado OF, se proporciona en el bit 0 del registro 32000:
-
bit 0 del registro 32000 = calidad de la indicación de estado OF
-
bit 0 del registro 32001 = contacto de indicación de estado OF
Si |
Entonces |
---|---|
Si el bit 0 del registro 32000 = 1 Y el bit 0 del registro 32001 = 0 |
El contacto OF indica que el dispositivo está abierto. |
Si el bit 0 del registro 32000 = 1 Y el bit 0 del registro 32001 = 1 |
El contacto OF indica que el dispositivo está cerrado. |
Si el bit 0 del registro 32000 = 0 |
La indicación del contacto OF no es válida. |
Tipo de datos: ULP DATE
ULP DATE es un tipo de datos utilizado para codificar fechas y horas. En esta tabla se presenta el tipo de datos ULP DATE.
Registro |
Tipo |
Bit |
Rango |
Descripción |
---|---|---|---|---|
1 2 |
INT32U |
– |
0x00000000-0xFFFFFFFF |
Número de segundos desde el 1 de enero de 2000 |
3 |
INT16U |
– |
– |
Complemento en milisegundos |
0-9 |
– |
Codifica los milisegundos |
||
10-11 |
– |
No se utiliza |
||
12 |
0–1 |
Estado de sincronización externa de la interfaz de comunicación IFM o IFE 0 = La interfaz de comunicación no se ha sincronizado externamente en las últimas 2 horas. 1 = La interfaz de comunicación se ha sincronizado externamente en las últimas 2 horas. |
||
13 |
0–1 |
Estado de sincronización interna del módulo ULP 0 = El módulo ULP no se ha sincronizado internamente. 1 = El módulo ULP se ha sincronizado internamente. |
||
14 |
0–1 |
La fecha absoluta se establece desde el último encendido. 0 = No 1 = Sí |
||
15 |
– |
Reservado |
Contador de fecha ULP
La fecha en formato ULP DATE se cuenta en número de segundos desde el 1 de enero de 2000.
En caso de interrupción de la alimentación de un módulo IMU, el contador de hora se restablece y se iniciará el 1 de enero de 2000.
Si se produce una sincronización externa después de una interrupción de la alimentación, el contador de hora se actualiza y convierte la fecha de sincronización al número correspondiente de segundos desde el 1 de enero de 2000.
Principio de conversión de fecha ULP
Para convertir la fecha de número de segundos desde el 1 de enero de 2000 a la fecha actual, se aplican estas normas:
-
1 año no bisiesto = 365 días
-
1 año bisiesto = 366 días
Los años 2000, 2004, 2008, 2012... (múltiplos de 4) son años bisiestos (excepto el año 2100).
-
1 día = 86 400 segundos
-
1 hora = 3600 segundos
-
1 minuto = 60 segundos
En la tabla siguiente se describen los pasos que se deben seguir para convertir la fecha a partir del número de segundos desde el 1 de enero de 2000 a la fecha actual:
Paso |
Acción |
---|---|
1 |
Calcule el número de segundos desde el 1 de enero de 2000: S = (contenido del registro 1 x 65536) + (contenido del registro 2) |
2 |
Calcule el número de días desde el 1 de enero de 2000: D = valor entero del cociente de S / 86 400 Calcular el número restante de segundos: s = S - (D x 86 400) |
3 |
Calcular el número de días transcurridos del presente año: d = D - (NL x 365) - (L x 366) con NL = número de años no bisiestos desde el año 2000 y L = número de años bisiestos desde el año 2000 |
4 |
Calcular el número de horas: h = valor entero del cociente de s / 3600 Calcular el número restante de segundos: s’ = s - (h x 3600) |
5 |
Calcular el número de minutos: m = valor entero del cociente de s’ / 60 Calcular el número restante de segundos: s’’ = s’ - (m x 60) |
6 |
Calcular el número de milisegundos: ms = (contenido del registro 3) Y 0x03FF |
7 |
Resultado:
|
Ejemplo de conversión de fecha ULP
Notas
-
La columna Tipo indica cuántos registros se deben leer para obtener la variable. Por ejemplo, INT16U requiere la lectura de un registro, mientras que INT32 requiere la lectura de 2 registros.
-
Algunas variables deben leerse como un bloque de múltiples registros, como las medidas de energía. Si se lee el bloque parcialmente, se producirá un error.
-
Si se lee desde un registro no documentado, da como resultado una excepción de Modbus .
-
Los valores numéricos se indican en decimales. Cuando resulte útil tener el valor correspondiente en formato hexadecimal, se mostrará como una constante de tipo de lenguaje C: 0xdddd. Por ejemplo, el valor decimal 123 se representa en formato hexadecimal como: 0x007B.
-
Para medidas que dependen de la presencia de neutros tal como se identifica con el registro 3314, la lectura del valor devolverá 32768 (0x8000) si no es aplicable. Para cada tabla donde sucede, se explica en una nota de pie de página.
-
Los valores no aplicables y fuera de servicio dependen del tipo de datos.
NOTA: En función de la implementación de registros heredados, es posible que algunos registros muestren valores diferentes y desordenados que no se corresponden. Por ejemplo, los registros INT16U podrían devolver 32768 (0x8000) e INT32U podría mostrar 0x80000000.
Tipo de datos |
Valores no aplicables y fuera de servicio |
---|---|
INT16U |
65535 (0xFFFF) |
INT16 |
-32768 (0x8000) |
INT32U |
4294967295 (0xFFFFFFFF) |
INT32 |
0x80000000 |
INT64U |
0xFFFFFFFFFFFFFFFF |
INT64 |
0x8000000000000000 |
FLOAT32 |
0xFFC00000 |