Funciones de Modbus
Descripción general
El protocolo Modbus ofrece varias funciones que se utilizan para leer o escribir datos sobre la red Modbus. El protocolo Modbus también ofrece funciones de diagnóstico y de gestión de red.
En esta sección sólo se describen las funciones Modbus gestionadas por el interruptor automático.
Funciones de lectura
Están disponibles las siguientes funciones de lectura:
Código de función |
Código de subfunción |
Nombre |
Descripción |
---|---|---|---|
3 (0x03) |
– |
Leer registros de mantenimiento |
Leer n registros de salida o internos |
4 (0x04) |
– |
Leer registros de entrada |
Leer n registros de entrada |
43 (0x2B) |
14 (0x0E) |
Leer identificación del dispositivo |
Leer los datos de identificación del esclavo |
43 (0x2B) |
15 (0x0F) |
Obtener fecha y hora |
Leer la fecha y hora del esclavo |
Ejemplo de lectura de registro
En la tabla siguiente se muestra cómo leer la corriente en fase 1 (I1) eficaz en el registro 1016. La dirección del registro 1016 es 1016 - 1 = 1015 = 0x03F7. La dirección Modbus del esclavo Modbus es 47 = 0x2F.
Solicitud del maestro |
Respuesta del esclavo |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del esclavo Modbus |
0x2F |
Dirección del esclavo Modbus |
0x2F |
Código de función |
0x03 |
Código de función |
0x03 |
Dirección del registro a leer (MSB) |
0x03 |
Longitud de datos en bytes |
0x02 |
Dirección del registro a leer (LSB) |
0xF7 |
Valor del registro (MSB) |
0x02 |
Número de registros (MSB) |
0x00 |
Valor del registro (LSB) |
0x2B |
Número de registros (LSB) |
0x01 |
CRC (MSB) |
0xXX |
CRC (MSB) |
0xXX |
CRC (LSB) |
0xXX |
CRC (LSB) |
0xXX |
– |
El contenido del registro 1016 (dirección 0x03F7) es 0x022B = 555. Por lo tanto, la corriente de fase 1 (I1) eficaz es 555 A.
Ejemplo de obtención de fecha y hora
La siguiente tabla muestra cómo obtener la fecha y hora de un esclavo Modbus. La dirección Modbus del esclavo Modbus es 47 = 0x2F.
Solicitud del maestro |
Respuesta del esclavo |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del esclavo Modbus |
0x2F |
Dirección del esclavo Modbus |
0x2F |
Código de función |
0x2B |
Código de función |
0x2B |
Código de subfunción |
0x0F |
Código de subfunción |
0x0F |
Reservado |
0x00 |
Reservado |
0x00 |
– |
– |
Fecha y hora |
Consulte el tipo de datos DATETIME |
Ejemplo de ajuste de fecha y hora
En la siguiente tabla se muestra cómo ajustar la fecha y hora de un esclavo Modbus. La dirección Modbus del esclavo Modbus es 47 = 0x2F, la nueva fecha es Octubre 2, 2014, y la nueva hora es 2:32:03:500 p.m.
Solicitud del maestro |
Respuesta del esclavo |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del esclavo Modbus |
0x2F |
Dirección del esclavo Modbus |
0x2F |
Código de función |
0x2B |
Código de función |
0x2B |
Código de subfunción |
0x10 |
Código de subfunción |
0x10 |
Reservado 1 |
0x00 |
Reservado 1 |
0x00 |
No se utiliza |
0x00 |
No se utiliza |
0x00 |
Año = 2014 |
0x0E |
Año = 2014 |
0x0E |
Mes = Octubre |
0x0A |
Mes = Octubre |
0x0A |
Día del mes = 2 |
0x02 |
Día del mes = 2 |
0x02 |
Hora = 14 |
0x0E |
Hora = 14 |
0x0E |
Minutos = 32 |
0x20 |
Minutos = 32 |
0x20 |
3 seg. 500 ms |
0x0DAC |
3 seg. 502 ms |
0x0DAE |
La respuesta normal es un eco de la solicitud, devuelto después de que se hayan actualizado la fecha y la hora en el dispositivo a distancia. Si el contenido de la estructura de fecha y hora no es coherente con la fecha y hora verdaderas (esto es, una fecha y hora no válida), el dispositivo ajusta a 0 el valor retornado en el campo de Fecha-Hora.
En caso de pérdida de alimentación eléctrica de 24 V CC, la fecha y hora de los esclavos Modbus sin batería dejará de actualizarse. Por lo tanto es obligatorio ajustar fecha y hora de todos los esclavos Modbus después de recuperar la fuente de alimentación de 24 V CC.
Además, debido a la deriva del reloj de cada esclavo Modbus, se debe ajustar periódicamente la fecha y hora de todos los esclavos Modbus. El periodo recomendado es al menos cada 15 minutos.
Función de lectura de registro de mantenimiento disperso
Está disponible la función de lectura de registro de mantenimiento disperso:
Código de función |
Código de subfunción |
Nombre |
Descripción |
---|---|---|---|
100 (0x64) |
4 (0x04) |
Leer registro de mantenimiento disperso |
Leer n registros no contiguos |
El valor máximo para n es 100, pero cuando se usa una unidad de control MasterPact MicroLogic A o E, es recomendable que n sea menor o igual que 21.
La función de lectura del registro de mantenimiento disperso permite al usuario lo siguiente:
-
evitar leer un gran bloque de registros contiguos cuando sólo se necesitan pocos registros
-
evitar la utilización múltiple de las funciones 3 y 4 para leer registros no contiguos
Ejemplo de lectura de registro de mantenimiento disperso
La siguiente tabla muestra cómo leer las direcciones del registro 664 (dirección 0x0297) y del registro 666 (dirección 0x0299) de un esclavo Modbus. La dirección Modbus del esclavo Modbus es 47 = 0x2F.
Solicitud del maestro |
Respuesta del esclavo |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del esclavo Modbus |
0x2F |
Dirección del esclavo Modbus |
0x2F |
Código de función |
0x64 |
Código de función |
0x64 |
Longitud de datos en bytes |
0x06 |
Longitud de datos en bytes |
0x06 |
Código de subfunción |
0x04 |
Código de subfunción |
0x04 |
Número de transmisión(1) |
0xXX |
Número de transmisión(1) |
0xXX |
Dirección del primer registro a leer (MSB) |
0x02 |
Valor del primer registro leído (MSB) |
0x12 |
Dirección del primer registro a leer (LSB) |
0x97 |
Valor del primer registro leído (LSB) |
0x0A |
Dirección del segundo registro a leer (MSB) |
0x02 |
Valor del segundo registro leído (MSB) |
0x74 |
Dirección del segundo registro a leer (LSB) |
0x99 |
Valor del segundo registro leído (LSB) |
0x0C |
CRC (MSB) |
0xXX |
CRC (MSB) |
0xXX |
CRC (LSB) |
0xXX |
CRC (LSB) |
0xXX |
(1) El maestro proporciona el número de transmisión en la solicitud. El esclavo devuelve el mismo número en la respuesta. |
Funciones de escritura
Están disponibles las siguientes funciones de escritura:
Código de función |
Código de subfunción |
Nombre |
Descripción |
---|---|---|---|
6 (0x06) |
– |
Preestablecer un único registro |
Escribir 1 registro |
16 (0x10) |
– |
Preestablecer varios registros |
Escribir n registros |
43 (0x2B) |
16 (0x10) |
Ajustar fecha y hora |
Escribir la fecha y hora del esclavo |
Funciones de diagnóstico
Están disponibles las siguientes funciones de diagnóstico:
Código de función |
Código de subfunción |
Nombre |
Descripción |
---|---|---|---|
8 (0x08) |
– |
Diagnóstico |
Gestiona contadores de diagnóstico |
8 (0x08) |
10 (0x0A) |
Limpiar contadores y registro de diagnóstico |
Pone a cero todos los contadores de diagnóstico |
8 (0x08) |
11 (0x0B) |
Devolver contador de mensajes del bus |
Lee el contador de mensajes correctos del bus gestionados por el esclavo |
8 (0x08) |
12 (0x0C) |
Devolver contador de errores de comunicaciones del bus |
Lee el contador de mensajes incorrectos del bus gestionados por el esclavo |
8 (0x08) |
13 (0x0D) |
Devolver contador de errores de excepciones del bus |
Lee el contador de respuestas de excepción gestionadas por el esclavo |
8 (0x08) |
14 (0x0E) |
Devolver contador de mensajes del esclavo |
Lee el contador de mensajes enviados al esclavo |
8 (0x08) |
15 (0x0F) |
Devolver contador de esclavos sin respuesta |
Lee el contador de mensajes de difusión |
8 (0x08) |
16 (0x10) |
Devolver contador de confirmaciones de esclavo negativas |
Lee el contador de mensajes enviados al esclavo pero no respondidos debido al código de excepción 07 de acuse negativo |
8 (0x08) |
17 (0x11) |
Devolver contador de esclavos ocupados |
Lee el contador de mensajes enviados al esclavo pero no respondidos debido al código de excepción 06 de dispositivo esclavo ocupado |
8 (0x08) |
18 (0x12) |
Devolver contador de rebasamiento del bus |
Lee el contador de mensajes del bus incorrectos debido a errores de rebasamiento |
11 (0x0B) |
– |
Obtener contador de eventos de comunicación |
Leer el contador de eventos de Modbus |
Contadores de diagnóstico
Modbus utiliza contadores de diagnóstico para permitir la gestión de errores y del rendimiento. Se puede acceder a los contadores usando las funciones de diagnóstico Modbus (códigos de función 8 y 11). Los contadores de diagnóstico de Modbus y el contador de eventos de Modbus se describen en la siguiente tabla:
Número de contador |
Nombre del contador |
Descripción |
---|---|---|
1 |
Contador de mensajes del bus |
Contador de mensajes correctos del bus gestionados por el esclavo |
2 |
Contador de errores de comunicación del bus |
Contador de mensajes incorrectos del bus gestionados por el esclavo |
3 |
Contador de errores de excepción del esclavo |
Contador de respuestas de excepción gestionadas por el esclavo y mensajes de difusión incorrectos |
4 |
Contador de mensajes del esclavo |
Contador de mensajes enviados al esclavo |
5 |
Contador de ausencia de respuesta de esclavo |
Contador de mensajes de difusión |
6 |
Contador de acuses negativos del esclavo |
Contador de mensajes enviados al esclavo pero no respondidos debido al código de excepción 07 de acuse negativo |
7 |
Recuento de esclavos ocupados |
Contador de mensajes enviados al esclavo pero no respondidos debido al código de excepción 06 de dispositivo esclavo ocupado |
8 |
Contador de rebasamiento de caracteres del bus |
Contador de mensajes del bus incorrectos debido a errores de rebasamiento |
9 |
Contador de eventos de comunicación |
Contador de eventos de Modbus (este contador se lee con el código de función 11) |
Puesta a cero de contadores
Los contadores de diagnóstico se ponen a 0 cuando:
-
se alcanza el valor máximo 65535,
-
son reiniciados por un comando Modbus (código de función 8, código de subfunción 10),
-
se ha perdido la fuente de alimentación,
-
se modifican los parámetros de comunicación.