domingo, 25 de octubre de 2015

Protocolo Modbus

Modbus fue introducido en 1979 por la compañía Modicon, que era líder en el mercado incipiente de controladores lógicos programables (PLC).



 Su objetivo era ser el protocolo interno de comunicación punto-a-punto, el intermedio entre los PLCs de Modicon y los paneles de programación que se usaban para programar controladores.

 Este protocolo sigue prosperando porque es de fácil comprensión, y por ello ha sido utilizado por muchos ingenieros para ejercitarse en protocolos. Además, es un sistema abierto y se puede utilizar sin pagar royalties. No se limita a la automatización industrial; de hecho se puede encontrar en numerosos sectores de automatización, incluyendo la de edificios.

MODBUS funciona siempre en modo maestro-esclavo (cliente - servidor), siendo el maestro (cliente) quien controla en todo momento las comunicaciones con los esclavos que pueden ser hasta 247 (Dirección 1 a 247) . Los esclavos (servidores) se limitan a retornar los datos solicitados o a ejecutar la acción indicada por el maestro. La comunicación del maestro hacia los esclavos puede ser de dos tipos.

-Peer to peer: en que se establece comunicación maestro - esclavo, el maestro solicita información y el esclavo responde. Se envía el comando a un dispositivo comprendido entre las direcciones 1 a 247. 
-Broadcast: en que se establece comunicación maestro - todos los esclavos, el maestro envía un comando a todos los esclavos de la red sin esperar respuesta, se envía a la dirección 0.


Se pueden establecer comunicaciones en redes estándar Modbus utilizando cualquiera de estos dos modos de transmisión: ASCII o RTU.
Los usuarios seleccionan el modo deseado, y los parámetros de comunicación del puerto serie (velocidad de transmisión en baudios, modo de paridad, etc.), durante la configuración de cada controlador.
El modo y los parámetros del puerto serie tienen que ser los mismos para todos dispositivos en una red Modbus.

La selección de modo ASCII o RTU es solamente para redes estándar Modbus.
Define los contenidos de los campos del mensaje serie transmitido por la red. Determina como estará empaquetada la información en los campos de código y mensaje.
En otras redes como MAP y Modbus Plus, los mensajes de Modbus están embebidos dentro de la trama y no están relacionados con la transmisión serie.

Modbus ASCII

Sistema de Codificación:
Hexadecimal, caracteres ASCII 0-9, A-F, 7 bits
Un carácter hexadecimal en cada carácter ASCII del mensaje.
Bits por Byte:
1 bit de comienzo
7 bits de datos, el bit menos significativo se envía primero
1 bit de paridad par/impar; o ninguno si no hay paridad
1 bit de fin si se usa control de paridad; ó 2 bits de fin si no
se usa control de paridad
Campo de Control de Error:
Control de Redundancia Longitudinal(LRC)

** La ventaja principal de este modo es que permite intervalos de tiempo de hasta un segundo entre caracteres sin causar error.


Modbus RTU

Sistema de Codificación:
8 bits binarios, binario 0 a 255
2 caracteres hexadecimales en cada campo de 8 bits del
mensaje.
Bits por Byte:
1 bit de inicio
8 bits de datos, el bit menos significativo se envía primero
1 bit de paridad par/impar; ó ninguno si no se usa paridad
1 bit de fin si se usa paridad; ó 2 bits de fin si no hay paridad
Campo de Control de Error:
Control de Redundancia Cíclica ( CRC )

** La ventaja principal de este modo es que su mayor densidad de caracteres permite una
mejor productividad de información que el modo ASCII para la misma velocidad. 
Cada mensaje se transmite conjuntamente sin interrupción.

ASCII V/S RTU


Transmisión de Caracteres Serie
Trama Modbus


¿Como se usa el código de operación?

El campo Código de Operación del formato de mensaje contiene dos caracteres (ASCII) u ocho bits (RTU). Los códigos válidos están en el rango de 1-255 decimal.
Cuando se envía un mensaje desde un maestro a un dispositivo esclavo el campo de Código de Operación dice al esclavo qué la clase de acción debe realizar.
Cuando el esclavo responde al maestro, utiliza el campo de código de operación para indicar que es una respuesta normal (libre de error) o que ha ocurrido algún tipo de error (respuesta de excepción).

Contenido del Campo de datos
El campo de información se construye utilizando conjuntos de dos dígitos hexadecimales, en el rango 00-FF hexadecimal. Estos pueden estar formados por un par de caracteres ASCII, o por un
carácter de RTU, de acuerdo con el modo de transmisión de la red.
El campo de información de mensajes enviados desde un maestro a sus dispositivos esclavos contienen información adicional que el esclavo necesita para ejecutar la acción definida en el Código de Función.
Estos pueden incluir detalles como direcciones de registros o discretas, la cantidad de registros a manejar, y el contador de bytes reales de información en el campo.

Por ejemplo, en la solicitud de un maestro a un esclavo para leer un grupo de registro internos (código de operación 03), el Campo de Datos especifica el registro inicial y cuantos registros se quieren leer.

Código de error en operación
Un mensaje de maestro a esclavo para leer un grupo de registros internos tendría el siguiente código de operación:
0000 0011 (Hexadecimal 03)
Si el dispositivo esclavo recibe la acción solicitada sin error, devuelve el mismo código
en su respuesta.
Si ocurre una excepción, devuelve :

10000011 (Hexadecimal 83)

Contenido del campo de datos: 
Direccionamiento de datos:
Contenidos del campo de comprobación de error.
En las redes estándar Modbus se utilizan dos clases de método de comprobación de error. Los contenidos de campo de comprobación de error dependen del método que se haya utilizado.

ASCII
Cuando se utiliza formato ASCII, el campo de comprobación de error contiene dos caracteres
ASCII. Los caracteres de control de error son el resultado de un cálculo de Redundancia Longitudinal (LRC) basado en el contenido del mensaje, excluyendo el carácter de inicio (: ) y los caracteres finales CR LF. (Retorno de carro + salto de linea)
Los caracteres de LRC se añaden al mensaje como último campo seguidos de los caracteres CRLF.

RTU
Cuando se utiliza formato RTU, el campo de comprobación de error contiene un valor de 16 bits formado por dos bytes de 8 bits. El valor de control de error es el resultado de un cálculo de Control de Redundancia Cíclica basado en el contenido del mensaje.

1 comentarios:

Excelente información sobre el protocolo modbus.

Publicar un comentario