Sunteți pe pagina 1din 9

Redes de automatizacin y control

El protocolo MODBUS
Introduccin
El protocolo de comunicaciones industriales MODBUS fue desarrollado en 1979 por la empresa norteamericana MODICON y debido a que es pblico, relativamente sencillo de implementar y flexible se ha convertido en uno de los protocolos de comunicaciones ms populares en sistemas de automatizacin y control. A parte de que muchos fabricantes utilizan este protocolo en sus dispositivos, existen tambin versiones con pequeas modificaciones o adaptadas para otros entornos ( como p.ej JBUS o MODBUS II ) MODBUS especifica el procedimiento que el controlador y el esclavo utilizan para intercambiar datos, el formato de estos datos, y como se tratan los errores. No especifica estrictamente el el tipo de red de comunicaciones a utilizar, por lo que se puede implementar sobre redes basadas en Ethernet , RS-485, RS-232 etc. Este documento explica la especificacin MODBUS de forma general, sin entrar en mucho detalle en algunas de sus particularidades, no obstante su contenido ha de ser ms que suficiente para aquellos que deseen comprender el funcionamiento general de este estndar. Por otro lado, quien desee realizar una implementacin precisa de MODBUS deber recurrir a la documentacin oficial de MODICON o a la documentacin especifica del fabricante de los equipos con los que va a comunicar.

Redes de automatizacin y control

Contenido
Introduccin .............................................................................................................................. 1 Descripcin general ................................................................................................................... 3 Campos de las tramas MODBUS ............................................................................................... 4 Descripcin de los cdigos de operacin o funcin ms frecuentes ........................................ 9

Redes de automatizacin y control

Descripcin general
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 (@1d a @247d ) . Los esclavos ( servidores ) se limitan a retornar los datos solicitados o a ejecutar la accin indicada por el maestro. La comunicacin del maestro hacia los esclavos puede ser de dos tipos: - peer to peer: en que se establece comunicacin maestro - esclavo , el maestro solicita informacin y el esclavo responde ( se enva el comando a un dispositivo comprendido entre las direcciones 1d i 247d ). -broadcast: en que se establece comunicacin maestro - todos los esclavos , el maestro enva un comando a todos los esclavos de la red sin esperar respuesta ( se enva a la direccin @0d ). Como se puede ver, la secuencia bsica en las comunicaciones MODBUS consiste siempre en una trama de pregunta, seguida de su correspondiente trama de respuesta: - Pregunta: con el cdigo de funcin que indica al esclavo que operacin ha de realizar, y los bytes necesarios ( datos, comprobacin ) para su ejecucin. - Respuesta: con la confirmacin o datos resultantes de la ejecucin de la funcin. Existe algn caso concreto, en que hay ms de una trama de respuesta para una trama de pregunta, como p.ej. cuando el maestro enva una operacin cuya respuesta puede llevar al esclavo un tiempo elaborar. En estas situaciones el esclavo enva una primera respuesta indicando que an no tiene los datos y tardar un tiempo en disponer de ellos, y otra segunda con los datos o confirmacin de la operacin. Adems las comunicaciones MODBUS se pueden realizar en modo ASCII o en modo RTU. En modo ASCII los bytes se envan codificados en ASCII, es decir, que por cada byte a transmitir se envian dos caracteres ASCII ( 2 bytes ) con su representacin hexadecimal ( esto permite leer las tramas con un simple editor de texto ). En modo RTU se envan en binario, tal cual. En el modo ASCII las tramas comienzan por 3AH (carcter ':'), y terminan en 0DH-0AH (CR LF Carrier Return Line Feed) y cada byte se enva como dos caracteres ASCII. En modo RTU no se utiliza indicador de inicio y final de trama.

Redes de automatizacin y control

Modo ASCII Carcteres Comprob. Error Inicio de trama Final de trama Distancia max. entre caracteres Bit de inicio Bits de datos Paridad Bits de parada ASCII 09,A.F LRC Longitudinal Redundancy check Carater : Character CR/CL 1 seg 1 7 Par / Impar / Ninguna 1 si hay paridad 2 si ninguna

Modo RTU Binario 0255 CRC Cyclic Redundancy Check 3.5 veces t de carcter 3.5 veces t de carcter 1.5 veces t de carcter 1 8 Par / Impar / Ninguna 1 si hay paridad 2 si ninguna

Campos de las tramas MODBUS


El nmero de campos de las tramas MODBUS vara ligeramente dependiendo de si utilizamos la codificacin ASCII o RTU: Codificacin ASCII ( formato texto ): -Inicio de trama: 2 caracteres ASCII ( que representan 1 byte ) codificando el caracter : (0x3A) -NEsclavo: 2 caracteres ASCII ( que representan 1 byte ) codificando la direccin del esclavo destino ( o origen ) de la trama -Cdigo Operacin: 2 caracteres ASCII ( que representan 1 byte ) con el cdigo de operacin -Direccin, datos y subfunciones Datos: con los parmetros necesarios para realizar la operacin. -LRC(16): H L -Final de trama: 4 caracteres ASCII ( que representan 2 bytes ) con los caracteres CR (0x0D) LF (0x0A) Codificacin RTU (en el formato binario, el inicio de trama debera ser tras 3.5 tiempo de carcter): -NEsclavo: 1 byte con la direccin del esclavo destino ( o origen ) de la trama -Cdigo Operacin: 1 byte con el cdigo de operacin -Subfunciones Datos: con los parmetros necesarios para realizar la operacin. -CRC(16): H L

Redes de automatizacin y control

Descripcin de los campos de las tramas MODBUS


- Nmero de Esclavo (1byte): En el caso de las tramas enviadas por el mster, el campo de nmero de esclavo indica la direccin del destinatario de esta trama. Permite direccionar hasta 247 esclavos, con las direcciones de 1d a 247d (0x00 a 0xF7). El 0x00 es para los mensajes de Broadcast, as el primer esclavo comienza con la direccin 1 ( de 1 a 247 ). En el caso de las tramas enviadas por los esclavos, este byte sirve para indicar al mster a quin pertenece la respuesta. Es decir, cada vez que un esclavo responde, sita su propia direccin en el byte de direccin lo que permite saber al maestro a que equipo corresponde cada respuesta. Las tramas broadcast, no tienen asociada respuesta, y algunas implementaciones de MODBUS no admiten la trama de broadcast. - Cdigo de Operacin o Funcin ( 1byte): Indica el tipo de operacin que queremos realizar sobre el esclavo. Las operaciones se pueden clasificar en dos tipos: - De lectura / escritura en memoria: para consultar o modificar el estado de los registros del mapa de memoria del esclavo. - Ordenes de control del esclavo: para realizar alguna actuacin sobre el esclavo. El cdigo de operacin puede tomar cualquier valor comprendido entre el 0 y el 127 ( el bit de ms peso se reserva para indicar error ). Cada cdigo se corresponde con una determinada operacin. Algunos de estos cdigos se consideran estndar y son aceptados e interpretados por igual por todos los dispositivos que dicen ser compatibles con MODBUS, mientras que otros cdigos son implementaciones propias de cada fabricante. Es decir que algunos fabricantes realizan implementaciones propias de estos cdigos no estndar. Es tambin mediante el cdigo de funcin que el esclavo confirma si la operacin se ha ejecutado correctamente o no. Si ha ido bien responde con el mismo cdigo de operacin que se le ha enviado, mientras que si se ha producido algn error, responde tambin con el mismo cdigo de operacin pero con su bit de ms peso a 1 ( 0x80 ) y un byte en el campo de datos indicando el cdigo de error que ha tenido lugar. - Direccin, datos y subfunciones (n bytes): Este campo contiene la informacin necesaria para realizar la operacin indicada en el cdigo de operacin. Cada operacin necesitar de unos parmetros u otros, por lo que el nmero de bytes de este campo variar segn la operacin a realizar. En el caso del esclavo, este puede responder con tramas con o sin campo de datos dependiendo de la operacin. En los casos en que se produzca algn error es posible que el esclavo responda con un byte extra para especificar el cdigo de error. Al establecer la direccin de una variable u otro elemento en el mapa de direcciones MODBUS, direccionamos con 1 unidad menos a la del registro al que queremos acceder, de manera que si p.ej. quisiramos acceder al rel @ 127d, lo haramos situando el valor 126d en el byte del campo de direccin. Otros ejemplos: - El rel nmero 1 de un controlador se direccionara con el valor 0000 en el campo de direccin de un mensaje MODBUS. - El rel 0x007F (127d ) de un controlador se direccionara con el valor 0x007E ( 126d ) en el

Redes de automatizacin y control campo de direccin de un mensaje MODBUS. - El Holding Register 40001 se accedera situando el valor 0000 en el campo de direccin del mensaje. Como se puede ver el cdigo de funcin de acceso a los Holding Registers lleva implcito el acceso a la direccin 4XXXX. - El Holding Register 40108 es accedido leiendo de la direccin 0x006B ( 107d ) Generalmente en MODBUS cada tipo de dato se mapea en un rango de memoria concreto: @1-10000 (DOs - digital outputs): 1 bit por direccin para indicar el estado de una salida, mando o rel ( 0 desactivado, 1 activado ). Las direcciones de este rango se suelen acceder mediante las funciones 1 (lectura), 5 (escritura), 15 (escritura mltiple). @10001-20000 (DIs - digital inputs): 1 bit por direccin para leer el estado de una entrada digital ( 0 desactivada, 1 activada ) tambin denominadas DIs ( Digital Inputs ). Las direcciones de este rango se suelen acceder con la funcin 2 (lectura) y llevan implcita la direccin 10001 como direccin base ( para acceder a una direccin bastar con especificar la distancia entre esta y la direccin base ). @20001-30000: el protocolo MODBUS estndar no hace uso de este rango de direcciones. @30001-40000 (AIs - analog inputs): 16 bits por direccin con el estado de las medidas o entradas analgicas tambin denominadas AIs ( Analog Inputs ). Dependiendo del dispositivo este puede hacer uso de ms de un registro para almacenar la informacin de la medida, as con 2 registros consecutivos podramos almacenar medidas de 32 bits. Las direcciones de este rango se acceden mediante la funcin 4 (lectura) y llevan implcita la direccin 30001 como direccin base ( para acceder a una direccin bastar con especificar la distancia entre esta y la direccin base ). @40001-50000 (AOs - analog outputs): 16 bits con los registros de salidas analgicas o de propsito general ( Output Registers Holding Registers). Se acceden con las funciones 3 ( lectura ), 6 ( escritura ) o 16 ( escritura mltiple ) y llevan implcita la direccin 40001 como direccin base ( para acceder a una direccin bastar con especificar la distancia entre esta y la direccin base ). Algunos fabricantes expresan la direccin de forma compuesta, separando la direccin de palabra y la direccin de bit: p.ej word 0x30 bit 1 Como se cita en el apartado de Cdigo de Operacin o Funcin, cuando se produce un error en la ejecucin de un comando en el esclavo, este responde poniendo a 1 el bit de ms peso del codigo de funcin ( 0x80 ). Con este bit el maestro sabe que se ha producido un error, pero para obtener mas detalle sobre el tipo de error, ha de comprobar el campo de datos:

Redes de automatizacin y control

Codigo Nombre 01 ILLEGAL FUNCTION ILEGAL DATA ADRESS ILLEGAL DATA VALUE SLAVE DEVICE FAILURE

Significado El cdigo de funcin recibido no se corresponde a ningn comando disponible en el esclavo

02

La direccin indicada en la trama no se corresponde a ninguna direccin vlida del esclavo

03

El valor enviado al esclavo no es vlido El esclavo ha recibido la trama y la ha comenzado a procesar, pero se ha producido algn error y no ha podido termina la tarea.

04

05

El esclavo ha recibido la trama y la est procesando pero esto le llevar un periodo un poco largo. Mediante esta respuesta se evita que el mster considere un error de timeout. El ACKNOWLEDGE mster podr enviar ms tarde una trama una trama de tipo Poll Program Complete para verificar si ha completado el comando El esclavo est ocupado realizando otra tarea y no puede atender a esa peticin en ese instante por lo que el mster tendr que reintentarlo ms adelante.

06

SLAVE DEVICE BUSY

- Control de errores LRC o CRC: Se utiliza un sistema de deteccin de errores diferente dependiendo del tipo de codificacin utilizado ( ASCII o RTU ) . En el caso de la codificacin ASCII es el checksum ( o Longitud Redundancy Check LRC ) en mdulo 16 expresado en ASCII ( 2 caracteres representan 1 byte ), sin considerar el ":" ni el CR LF de la trama. En la codificacin RTU se utiliza el mtodo de CRC ( Cyclical Redundancy Check ) codificado en 2 bytes (16 bits). Para calcular el CRC se carga un registro de 16 bits todo con '1's , se hace OR con cada uno de los caracteres de 8 bits con el contenido de cada byte y el resultado se desplaza una bit a la izquierda insertando un 0 en la posicin de menos peso ( la de la derecha ). El de la izquierda se extrae y se examina: si es 1 se vuelve a hacer OR con un valor prefijado, si es 0 no se hace ninguna OR... y el proceso se repite hasta que se han hecho los 8 shifts del byte.

Redes de automatizacin y control El siguiente es un ejemplo en modo ASCII y RTU de peticin de lectura de 3 registros del esclavo y la correspondiente respuesta :
-PETICION de 3 datos:
Nombre del campo Cabecera Direccin esclavo Funcin Direccion inicio Hi Direccion inicio Lo Num de Registros Hi Num de Registros Lo Error Check Fin de trama Total: 06 03 00 6B 00 03 Ejemplo ( HEX ) Caracteres ASCII : 06 03 00 6B 00 03 LRC ( 2 caracteres ) CR LF 17 bytes 8bits modo RTU Ninguno 0000 0110 0000 0011 0000 0000 0110 1011 0000 0000 0000 0011 CRC (16 bits) Ninguno 8 bytes

-RESPUESTA con los 3 datos:


Nombre del campo Cabecera Direccin esclavo Funcin 06 03 Ejemplo (HEX) Caracteres ASCII : 06 03 06 02 2B 00 00 00 63 8bits modo RTU Ninguno 0000 0110 0000 0011 0000 0110 0000 0010 0010 1011 0000 0000 0000 0000 0000 0000 0110 0011

Numero de bytes de datos 06 Dato 0 Hi Dato 0 Lo Dato 1 Hi Dato 1 Lo Dato 2 Hi Dato 2 Lo Error Check Fin de trama Total: 02 2B 00 00 00 63

LRC (2 caracteres ) CRC (16 bits) CR LF 23 bytes ninguno 11 bytes

Redes de automatizacin y control

Descripcin de los cdigos de operacin o funcin ms frecuentes


Los siguientes cdigos son algunos de los cdigos de funcin MODBUS ms extendidos, soportados por todos los dispositivos que cumplen con las especificaciones del estndar ( controladores de MODICON ): - Funcin 1 Read Coil Status - Funcin 2 Read Input Status - Funcin 3 Read Holding Registers - Funcin 4 Read Input Registers - Funcin 5 Force Single Coil - Funcin 6 Preset Single Register - Funcin 7 Read Exception Status - Funcin 8 Diagnostics - Funcin 9 Program 484 - Funcin 10 Poll 484 - Funcin 11 Fetch Communication Event Counter - Funcin 12 Fetch Communication Event Log - Funcin 13 Program Controller - Funcin 14 Poll Controller - Funcin 15 Force Multiple Coils - Funcin 16 Preset Multiple Registers - Funcin 17 Report Slave ID - Funcin 18 Program 884/M84 - Funcin 19 Reset Comm. Link - Funcin 20 Read General Reference - Funcin 21 Write General Reference - Funcin 22 Mask Write 4X Register - Funcin 23 Read/Write 4X Registers - Funcin 24 Read FIFO Queue

S-ar putea să vă placă și