6 MODBUS
Introducción
El protocolo de comunicaciones industriales MODBUS fue desarrollado en 1979
por la empresa norteamericana MODICON y debido a que es público,
relativamente sencillo de implementar y flexible se ha convertido en uno de los
protocolos de comunicaciones más populares en sistemas de automatización y
control.
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 tipo de red de comunicaciones a utilizar, por lo que se
puede implementar sobre redes basadas en Ethernet , RS-485, RS-232 etc.
Descripción 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. 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 @0d ).
Como se puede ver, la secuencia básica en las comunicaciones MODBUS
consiste siempre en una trama de pregunta, seguida de su correspondiente trama
de respuesta:
- Pregunta: con el código de función que indica al esclavo que operación ha de
realizar, y los bytes necesarios ( datos, comprobación … ) para su ejecución.
- Respuesta: con la confirmación o datos resultantes de la ejecución de la función.
Existe algún caso concreto, en que hay más de una trama de respuesta para una
110
trama de pregunta, como [Link]. cuando el maestro envía una operación cuya
respuesta puede llevar al esclavo un tiempo elaborar. En estas situaciones el
esclavo envía una primera respuesta indicando que aún no tiene los datos y
tardará un tiempo en disponer de ellos, y otra segunda con los datos o
confirmación de la operación.
Además las comunicaciones MODBUS se pueden realizar en modo ASCII o en
modo RTU. En modo ASCII los bytes se envían codificados en ASCII, es decir,
que por cada byte a transmitir se envian dos caracteres ASCII ( 2 bytes ) con su
representación hexadecimal ( esto permite leer las tramas con un simple editor de
texto ). En modo RTU se envían en binario, tal cual. En el modo ASCII las tramas
comienzan por 3AH (carácter ':'), y terminan en 0DH-0AH (CR LF Carrier Return
Line Feed) y cada byte se envía como dos caracteres ASCII. En modo RTU no se
utiliza indicador de inicio y final de trama.
Modo ASCII Modo RTU
Carácteres ASCII ‘0’…’9’,’A’….’F’ Binario 0…255
LRC Longitudinal Redundancy CRC Cyclic Redundancy
Comprob. Error
check Check
Inicio de trama Carater ‘:’ 3.5 veces t de carácter
Final de trama Character CR/CL 3.5 veces t de carácter
Distancia max. entre
1 seg 1.5 veces t de carácter
caracteres
Bit de inicio 1 1
Bits de datos 7 8
Paridad Par / Impar / Ninguna Par / Impar / Ninguna
Bits de parada 1 si hay paridad 2 si ninguna 1 si hay paridad 2 si ninguna
Campos de las tramas MODBUS
El número de campos de las tramas MODBUS varía ligeramente dependiendo de
si utilizamos la codificación ASCII o RTU:
Codificación ASCII ( formato texto ):
-Inicio de trama: 2 caracteres ASCII ( que representan 1 byte ) codificando el
caracter “:” (0x3A)
-NºEsclavo: 2 caracteres ASCII ( que representan 1 byte ) codificando la dirección
del esclavo destino ( o origen ) de la trama
-Código Operación: 2 caracteres ASCII ( que representan 1 byte ) con el código de
operación
-Dirección, datos y subfunciones Datos: con los parámetros necesarios para
realizar la operación.
111
-LRC(16): H L
-Final de trama: 4 caracteres ASCII ( que representan 2 bytes ) con los caracteres
CR (0x0D) - LF (0x0A)
Codificación RTU (en el formato binario, el inicio de trama debería ser
tras 3.5 tiempo de carácter):
-NºEsclavo: 1 byte con la dirección del esclavo destino ( o origen ) de la trama
-Código Operación: 1 byte con el código de operación
-Subfunciones Datos: con los parámetros necesarios para realizar la operación.
-CRC(16): H L.
Descripción de los campos de las tramas MODBUS
- Número de Esclavo (1byte): En el caso de las tramas enviadas por el máster, el
campo de número de esclavo indica la dirección 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 dirección 1
( de 1 a 247 ). En el caso de las tramas enviadas por los esclavos, este byte sirve para
indicar al máster a quién pertenece la respuesta. Es decir, cada vez que un esclavo
responde, sitúa su propia dirección en el byte de dirección 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.
- Código de Operación o Función ( 1byte): Indica el tipo de operación 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 actuación sobre el esclavo.
El código de operación puede tomar cualquier valor comprendido entre el 0 y el 127 ( el
bit de más peso se reserva para indicar error ). Cada código se corresponde con una
determinada operación. Algunos de estos códigos se consideran estándar y son
aceptados e interpretados por igual por todos los dispositivos que dicen ser compatibles
con MODBUS, mientras que otros códigos son implementaciones propias de cada
fabricante. Es decir que algunos fabricantes realizan implementaciones propias de estos
códigos “no estándar”.
Es también mediante el código de función que el esclavo confirma si la operación se ha
ejecutado correctamente o no. Si ha ido bien responde con el mismo código de operación
que se le ha enviado, mientras que si se ha producido algún error, responde también con
el mismo código de operación pero con su bit de más peso a 1 ( 0x80 ) y un byte en el
112
campo de datos indicando el código de error que ha tenido lugar.
- Dirección, datos y subfunciones (n bytes): Este campo contiene la información
necesaria para realizar la operación indicada en el código de operación. Cada operación
necesitará de unos parámetros u otros, por lo que el número de bytes de este campo
variará según la operación a realizar. En el caso del esclavo, este puede responder con
tramas con o sin campo de datos dependiendo de la operación. En los casos en que se
produzca algún error es posible que el esclavo responda con un byte extra para
especificar el código de error.
Al establecer la dirección 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 [Link]. quisiéramos acceder al relé @ 127d, lo haríamos situando el valor
126d en el byte del campo de dirección. Otros ejemplos:
- El relé número 1 de un controlador se direccionaría con el valor 0000 en el campo de
dirección de un mensaje MODBUS.
- El relé 0x007F (127d ) de un controlador se direccionaría con el valor 0x007E ( 126d )
en el campo de dirección de un mensaje MODBUS.
- El Holding Register 40001 se accedería situando el valor 0000 en el campo de dirección
del mensaje. Como se puede ver el código de función de acceso a los Holding Registers
lleva implícito el acceso a la dirección ‘4XXXX’.
- El Holding Register 40108 es accedido leiendo de la dirección 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 dirección 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 múltiple).
@10001-20000 (DIs - digital inputs): 1 bit por dirección para leer el estado de una
entrada digital ( 0 desactivada, 1 activada ) también denominadas DIs ( Digital Inputs ).
Las direcciones de este rango se suelen acceder con la función 2 (lectura) y llevan
implícita la dirección 10001 como dirección base ( para acceder a una dirección bastará
con especificar la distancia entre esta y la dirección base ).
20001-30000: el protocolo MODBUS estándar no hace uso de este rango de
direcciones.
@30001-40000 (AIs - analog inputs): 16 bits por dirección con el estado de
las medidas o entradas analógicas también denominadas AIs ( Analog Inputs ).
Dependiendo del dispositivo este puede hacer uso de más de un registro para
almacenar la información de la medida, así con 2 registros consecutivos
podríamos almacenar medidas de 32 bits. Las direcciones de este rango se
113
acceden mediante la función 4 (lectura) y llevan implícita la dirección 30001
como dirección base ( para acceder a una dirección bastará con especificar la
distancia entre esta y la dirección base ).
@40001-50000 (AOs - analog outputs): 16 bits con los registros de salidas
analógicas o de propósito general ( Output Registers – Holding Registers). Se
acceden con las funciones 3 ( lectura ), 6 ( escritura ) o 16 ( escritura múltiple )
y llevan implícita la dirección 40001 como dirección base ( para acceder a una
dirección bastará con especificar la distancia entre esta y la dirección base ).
Algunos fabricantes expresan la dirección de forma compuesta, separando la
dirección de palabra y la dirección de bit: [Link] word 0x30 bit 1
Como se cita en el apartado de “Código de Operación o Función”, cuando se
produce un error en la ejecución de un comando en el esclavo, este responde
poniendo a 1 el bit de más peso del codigo de función ( 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 Significado
ILLEGAL El código de función recibido no se corresponde a ningún comando
01
FUNCTION disponible en el esclavo
ILEGAL DATA La dirección indicada en la trama no se corresponde a ninguna
02
ADRESS dirección válida del esclavo
ILLEGAL DATA
03 El valor enviado al esclavo no es válido
VALUE
SLAVE DEVICE El esclavo ha recibido la trama y la ha comenzado a procesar, pero
04
FAILURE se ha producido algún error y no ha podido termina la tarea.
El esclavo ha recibido la trama y la está procesando pero esto le
llevará un periodo un poco largo. Mediante esta respuesta se evita
05 ACKNOWLEDGE que el máster considere un error de timeout. El máster podrá enviar
más 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
SLAVE DEVICE
06 esa petición en ese instante por lo que el máster tendrá que
BUSY
reintentarlo más adelante.
Control de errores LRC o CRC: Se utiliza un sistema de detección de
errores diferente dependiendo del tipo de codificación utilizado ( ASCII o
RTU ) . En el caso de la codificación ASCII es el checksum ( o Longitud
Redundancy Check LRC ) en módulo 16 expresado en ASCII ( 2 caracteres
representan 1 byte ), sin considerar el ":" ni el “CR LF” de la trama. En la
114
codificación RTU se utiliza el método 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
posición 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.
Descripción del sistema de cableado e identificación de los
componentes
115
116
Topologías, velocidades, mecanismo de transmisión
Velocidades
117
Estructura de la red
Medio Físico
El medio físico de conexión puede ser un bus semidúplex (half
duplex) (RS-485 o fibra óptica) o dúplex (full duplex) (RS-422, BC 0-
20mA o fibra óptica).
La comunicación es asíncrona y las velocidades de transmisión
previstas van desde los 75 baudios a 19.200 baudios. La máxima
distancia entre estaciones depende del nivel físico, pudiendo
alcanzar hasta 1200 m sin repetidores.
Mecanismo de transmisión
Acceso al Medio
La estructura lógica es del tipo maestro-esclavo, con acceso al medio
controlado por el maestro. El número máximo de estaciones previsto
es de 63 esclavos más una estación maestra.
Los intercambios de mensajes pueden ser de dos tipos:
• Intercambios punto a punto, que comportan siempre dos mensajes:
una demanda del maestro y una respuesta del esclavo.
• Mensajes difundidos. Estos consisten en una comunicación
unidireccional del maestro a todos los esclavos. Este tipo de
mensajes no tiene respuesta por parte de los esclavos y se suelen
emplear para mandar datos comunes de configuración, reset, etc.
Servicios y aplicaciones de la red Modbus
118
Los dispositivos se comunican entre sí mediante módems. El supervisor es
el maestro Modbus mientras que los PLC X e Y son esclavos.
El objetivo del ejemplo es escribir los valores del área de datos del PLC X
en el PLC Y.
Para esto, el PLC X debe convertirse en maestro Modbus. Cada día, el
supervisor se comunica con los PLC para recuperar información. Si hay una
alarma en el PLC X, se cambia a la modalidad de maestro Modbus y
envía datos al PLC Y. Para simplificar la programación, los módems se han
inicializado con los parámetros correctos mediante un terminal de
programación. Estos parámetros están almacenados en una memoria no
volátil.
119
Práctica y diagnóstico
120