Funciones de Modbus
Descripción general
El protocolo Modbus ofrece varias funciones que se utilizan para leer o escribir datos a través de 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 servidor |
43 (0x2B) |
15 (0x0F) |
Obtener fecha y hora |
Leer la fecha y hora del servidor |
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 servidor Modbus es 47 = 0x2F.
Solicitud del cliente |
Respuesta del servidor |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del servidor Modbus |
0x2F |
Dirección del servidor 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 en fase 1 (I1) eficaz es de 555 A.
Ejemplo de obtención de fecha y hora
En la tabla siguiente se muestra cómo obtener la fecha y la hora de un servidor Modbus. La dirección Modbus del servidor Modbus es 47 = 0x2F.
Solicitud del cliente |
Respuesta del servidor |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del servidor Modbus |
0x2F |
Dirección del servidor 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 tabla siguiente se muestra cómo establecer la fecha y la hora de un servidor Modbus. La dirección Modbus del servidor Modbus es 47 = 0x2F, la nueva fecha es el 2 de octubre de 2014 y la nueva hora las 2:32:03:500 p.m.
Solicitud del cliente |
Respuesta del servidor |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del servidor Modbus |
0x2F |
Dirección del servidor 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 utilizado |
0x00 |
No utilizado |
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 s 500 ms |
0x0DAC |
3 s 502 ms |
0x0DAE |
La respuesta normal es un eco de la solicitud, devuelto después de que la fecha-hora ha sido actualizada en el dispositivo a distancia. Si el contenido de la estructura de fecha-hora no es coherente con la fecha-hora verdaderas (esto es, una fecha-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 servidores Modbus sin batería dejará de actualizarse. Por lo tanto, es obligatorio fijar la fecha y la hora para todos los servidores Modbus después de recuperar la fuente de alimentación de 24 V CC.
Además, debido a la deriva del reloj de cada servidor Modbus, se debe ajustar periódicamente la fecha y hora de todos los servidores Modbus. El periodo recomendado es de 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 solo 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
En la tabla siguiente se muestra cómo leer las direcciones del registro 664 (dirección 0x0297) y del registro 666 (dirección 0x0299) de un servidor Modbus. La dirección Modbus del servidor Modbus es 47 = 0x2F.
Solicitud del cliente |
Respuesta del servidor |
||
---|---|---|---|
Nombre del campo |
Ejemplo |
Nombre del campo |
Ejemplo |
Dirección del servidor Modbus |
0x2F |
Dirección del servidor 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 cliente proporciona el número de transmisión en la solicitud. El servidor 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) |
– |
Preajustar un único registro |
Escribir 1 registro |
16 (0x10) |
– |
Preajustar varios registros |
Escribir n registros |
43 (0x2B) |
16 (0x10) |
Ajustar fecha y hora |
Escribir la fecha y hora del servidor |
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 servidor |
8 (0x08) |
12 (0x0C) |
Devolver contador de errores de comunicación del bus |
Lee el contador de mensajes de bus incorrectos gestionados por el servidor |
8 (0x08) |
13 (0x0D) |
Devolver contador de errores de excepciones del bus |
Lee el contador de respuestas de excepción gestionadas por el servidor |
8 (0x08) |
14 (0x0E) |
Devolver contador de mensajes del servidor |
Lee el contador de mensajes enviados al servidor |
8 (0x08) |
15 (0x0F) |
Devolver contador de ausencias de respuesta del servidor |
Lee el contador de mensajes de difusión |
8 (0x08) |
16 (0x10) |
Devolver contador de confirmaciones negativas del servidor |
Lee el contador de mensajes enviados al servidor pero no respondidos debido al código de excepción 07 de confirmación negativa |
8 (0x08) |
17 (0x11) |
Devolver contador de servidor ocupado |
Lee el contador de mensajes enviados al servidor pero no respondidos debido al código de excepción 06 de dispositivo servidor 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 sucesos de comunicación |
Leer el contador de sucesos 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 mediante 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 sucesos 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 servidor |
2 |
Contador de errores de comunicación del bus |
Contador de mensajes incorrectos del bus gestionados por el servidor |
3 |
Contador de errores de excepción del servidor |
Contador de respuestas de excepción gestionadas por el servidor y mensajes de difusión incorrectos |
4 |
Contador de mensajes del servidor |
Contador de mensajes enviados al servidor |
5 |
Contador de ausencias de respuesta del servidor |
Contador de mensajes de difusión |
6 |
Contador de confirmaciones negativas del servidor |
Contador de mensajes enviados al servidor pero no respondidos debido al código de excepción 07 de confirmación negativa |
7 |
Contador de servidor ocupado |
Contador de mensajes enviados al servidor pero no respondidos debido al código de excepción 06 de dispositivo servidor ocupado |
8 |
Contador de rebasamiento de caracteres del bus |
Contador de mensajes del bus incorrectos debido a errores de rebasamiento |
9 |
Contador de sucesos de comunicación |
Contador de sucesos de Modbus (este contador se lee con el código de función 11) |
Restablecimiento de contadores
Los contadores de diagnóstico se ponen a 0 cuando:
-
se alcanza el valor máximo 65535.
-
un comando Modbus los restablece (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.