Beruflich Dokumente
Kultur Dokumente
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.
Contenido
Introduccin .............................................................................................................................. 1 Descripcin general ................................................................................................................... 3 Campos de las tramas MODBUS ............................................................................................... 4 Descripcin de los cdigos de operacin o funcin ms frecuentes ........................................ 9
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.
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
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:
Codigo Nombre 01 ILLEGAL FUNCTION ILEGAL DATA ADRESS ILLEGAL DATA VALUE SLAVE DEVICE FAILURE
02
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
- 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
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