logoup_v

Modbus - Protocolo de Comunicación, funcionalidad (Videos)– Kryon Ingenieria

Modbus Protocolo de Comunicación

Modbus Protocolo de comunicación

Para entender un poco mas el protocolo MODBUS y sus funciones, haremos un pequeño repaso de como fué su desarrollo.

Este protocolo de comunicación, lo desarrolló MODICON para la comunicación entre sus PLCs (Programmable Logic Controllers), en estos PLCs se definió para su configuración lo siguiente:

Las entradas digitales del PLC, (Inputs) se denominarían 1x, esto quiere decir que las entradas digitales se almacenarían en posiciones de memoria que irían en las direcciones 10001 en adelante. Como ejemplo, la Entrada 1 tendría su representación en la dirección de memoria 10001, la Entrada 2 tendría su representación en la dirección de memoria 10002 y así sucesivamente.

Las salidas digitales del PLC, (Coils) se denominarían 0x, esto quiere decir que las salidas digitales se almacenarían en posiciones de memoria que irían en las direcciones 00001 en adelante. Como ejemplo, la Salida 1 tendría su representación en la dirección de memoria 00001, la Salida 2 tendría su representación en la dirección de memoria 00002 y así sucesivamente.

Los registros de Lectura / Escritura del PLC, (Holding Registers) se denominarían 4x, esto quiere decir que existe un área de memoria donde se puede almacenar información en forma de registros de 16 bits, área que comienza a partir de la dirección 40001. Como ejemplo, la información contenida en el primer registro tendría su representación en la dirección de memoria 40001, la información contenida en el segundo registro tendría su representación en la dirección de memoria 40002 y así sucesivamente.

Los registros de configuración de los módulos análogos de Entrada / Salida del PLC, (Input Registers) de sólo lectura, se denominarían 3x, lo que quiere decir que existe un área de memoria donde el PLC almacena información referente a la configuración de dichos módulos, esta información es guardada en forma de registros de 16 bits, área que comienza a partir de la dirección 30001. Como ejemplo, la información contenida en el primer registro tendría su representación en la dirección de memoria 30001, la información contenida en el segundo registro tendría su representación en la dirección de memoria 30002 y así sucesivamente.

Teniendo en cuenta esta información, para la definición del protocolo, se definió que si se quería leer el estado de las entradas digitales o lo que es lo mismo, saber si una entrada en particular o varias entradas en particular se encontraban activadas o no, se utilizaría la función MODBUS referenciada así: Función 02 Read Input Staus.

Para poder leer el estado de las salidas digitales del PLC (Coils), saber si determinadas salidas se encontraban activadas o no, la función MODBUS a utilizar sería: Función 01 Read Coils.

Si quisiésemos escribir en las direcciones de memoria de las salidas digitales, o mejor dicho si quisiéramos activar o desactivar una determinada salida en particular, la función MODBUS a utilizar sería: Función 05 Write Single Coil. Para el caso que quisiéramos activar o desactivar varias salidas simultáneamente, la función MODBUS a utilizar sería: Función 15 Write Múltiple Coils.

Para leer los registros del tipo 4x (uno o varios registros), la función MODBUS a utilizar sería: Función 03 Read Holding Register. Para el caso de querer escribir tan solo un único registro, la función MODBUS a utilizar sería:Función 06 Write Single Register, y en el caso de querer escribir múltiples registros, la función MODBUS a utilizar sería: Función 16 Write Múltiple Register.

En el caso de los registros 3x, registros de sólo lectura, para leer un solo registro o leer múltiples registros, la función MODBUS a utilizar sería: Función 04 Read Input Register.

El protocolo Modbus es del tipo MAESTRO / ESCLAVO, (MAESTRO el que pregunta, ESCLAVO el que responde) esto quiere decir que en una red de equipos, tan sólo uno de ellos puede ser el MAESTRO, los demás deben de ser ESCALVOS, el dispositivo MAESTRO es el único que puede preguntar, y los dispositivos ESCLAVOS tan solo pueden responder a las peticiones del MAESTRO, los dispositivos ESCLAVOS, están identificados por un número comprendido entre el 1 y el 255, nigún dispositivo en la red debe de tener el mismo número de identificación, así el MAESTRO sabe con que dispositivo comunicarse, y a la vez, cada dispositivo ESCLAVO, sabe cuando le están preguntando.

En la Figura “FUNCIONES MODBUS”  se encuentra un resumen de las diferentes funciones modbus, el significadao de cada una de ellas y el código de función correspondiente.

MODBUS FUNCIONES

Modbus

Como vemos, dentro del protocolo existen muchas funciones,  pero las más  relevantes son las siguientes :

  • 02 Read Input Status
  • 01 Read Coils
  • 05 Write Single Coil
  • 15 Write Multiple Coils
  • 04 Read Input Register
  • 03 Read Holding Register
  • 06 Write Single Register
  • 16 Write Multiple Registers

No trataremos la Función 8 Diagnostic, dado que sólo algunos equipos (Esclavos) la requieren para iniciar cualquier tipo de conversación, es decir, si un dispositivo Maestro, intenta comunicacrse con un dispositivo Esclavo, y este requiere de la función 8 para establecer la comunicación, el dispositivo maestro antes de realizar cualquier petición o función modbus (como la función 02,03,04,05,06 etc.) debe primero ejecutar la función 8, de lo contrario el dispositivo esclavo nunca le respondera.

Teniendo estas funciones como base, vamos a ver un ejemplo de como se crea una lectura de un equipo que tiene configurado como dirección física el valor de 1 y tiene configurado los valores 675 en la dirección de memoria 17 y el valor 994 en la dirección de memoria 18, si representáramos los valores 675 y 994  en formato Hexadecimal tendríamos los valores 02A3 y 03E2 respectivamente.

Si el equipo que interroga utiliza la función Modbus 03 Read Holding Register para leer 2 registros comenzando en  la dirección 17, este equipo debe configurar un FRAME como el mostrado en la TABLA 1 y enviarlo al equipo con el que se quiere comunicar y esperar la respuesta. Los valores mostrados en el FRAME se encuentran en formato Hexadecimal.

En la TABLA 1A, se encuentra el FRAME que responde el equipo al ser interrogado. Los valores mostrados en el FRAME se encuentran en formato Hexadecimal.

 MODBUS FUNCIÓN 03 PreguntaModbus

MODBUS FUNCIÓN 03 RespuestaModbus

En la TABLA 2, encontramos la función modbus 05, como vemos el frame de pregunta es el mismo frame de respuesta (TABLA 2A). En caso de querer  colocar la misma coil (33) en posición OFF, el frame de pregunra seria: 01 05 00 20 00 00 cc 00, y el frame de respuesta seria exactamente igual; para colocar cualquier otra coil en posición ON o en posición OFF, sólo cambiaria en el frame la dirección de memoria y por ende el CRC.

MODBUS FUNCIÓN 05 PreguntaModbus

MODBUS FUNCIÓN 05 RespuestaModbus

En la TABLA 3, encontramos la función modbus 03 Read Colils, en este ejemplo se van a leer 16 Coils comenzando con la número 1, (El valor almacenado de Coils  en el dispositivo del que se quiere leer es: 0100001000001101) cuyo valor de la parte baja del registro o los primeros 8 bits en decimal es 13 o su equivalente en hexadecimal 0D, el valor de la parte alta del registro o los bits del 9 al 16 es de 66 en decimal o de 42 en su equivalente hexadecimal).  En la respuesta, “TABLA 3A”, se tiene que como la cantidad de Coils es de 16,  entonces se requieren 2 BYTEs (Número de Bytes en la Respuesta) de información en la respuesta, y en la parte del frame (Cantidad de Coils (Bits) a leer) se tiene el número 10 en hexadecimal, que equivale a 16 en decimal. El valor del estado de los primeros 8 bits es (oD hexadecimal) o “00001101” en binario, y el valor de los bits del 9 al 16 es (42 hexadecimal) o “01000010” en binario.

MODBUS FUNCIÓN 01 PreguntaModbus

MODBUS FUNCIÓN 01 RespuestaModbus

En la “TABLA 4”, encontramos la función modbus 06 Write Single Register, en este ejemplo se va a colocar el valor 9876 en decimal al registro 5 del dispositivo al que se le quiere escribir, si colocamos el valor 9876 en formato hexadecimal tendriamos el valor 2694, que es el valor referenciado el la casilla “Valor Registro a Escribir”. En la “TABLA 4A” vemos que el frame de respuesta es el mismo que el de la pregunta.

MODBUS FUNCIÓN 06 PreguntaModbus

MODBUS FUNCIÓN 06 RespuestaModbus

En la “TABLA 5”, encontramos la función modbus 16 Write Multiple Register, con la cual vamos a escribir 2 registros a partir de la dirección de memoria 6 del equipo receptor, estos dos valores son en decimal 4106 y 8213 con su correspondiente en hexadecimal “100A y 2015” respectivamente, como se aprecia en la tabla (Valor primer Registro y Valor segundo Registro), se aprecia también la cantidad de registros a leer (2) y la cantidad de Bytes a leer (4).  En la respuesta “TABLA 5A”, en el frame se aprecia el número de registros escritos, que para este caso son 2.

MODBUS FUNCIÓN 16 PreguntaModbus

MODBUS FUNCIÓN 16 RespuestaModbus

En el siguiente Link puedes descargar un programa ejecutable (Windows) que te permite hallar el “Chequeo de Error CRC” de un Frame Modbus,  cuando lo ejecutes te va a aparecer un campo denominado “Código al cual se le debe hallar el CRC”, para el ejemplo de la TABLA 1  se debe de llenar con los valores 010300100002 y oprimir “Ejecutar” seguido del cual en el Campo denominado “Resultado” debe de aparecer el código del Chequeo de Error CRC “CEC5”  que es el código del Chequeo de Erroor CRC del Frame mostrado en la TABLA 1 de forma invertida.

Para el caso de la TABLA 1A se debe de colocar el código 01030402A303E2, y en el Resultado debe de aparecer el código CRC “108B” que es el CRC de la TABLA 1A mostrado de manera invertida.

Con este programa, si conoces el código del Frame que quieres transmitir, puedes hallar el CRC, esto es funcional cuando necesitas enviar una información en particular a un dispositivo desde un simulador o analizador de protocolo que te permita generar el código (Frame).

Cálculo CRC Protocolo Modbus (Windows)

 

MODBUS CRC

El siguiente ejemplo en Excel, muestra la conversión de un valor Binario, registro de 32 bits segun norma IEEE 754 Precisión Simple a un valor en punto Flotante y de Punto Flotante a Binario.

Conv. Binario a Flotante y Flotante a Binario - Excel

Video Protocolo Modbus Parte 1

Video Protocolo Modbus Parte 2

Video Protocolo Modbus Parte 3

Video Protocolo Modbus Parte 4

KRYON: No intentes ser lo que ya eres, por que nunca lo conseguiras. Modbus

Comments are closed.

Post Navigation