Documentos de Académico
Documentos de Profesional
Documentos de Cultura
COMUNICACIÓN DE DATOS
PROTOCOLO MODBUS
Estructura de la red
Medio Físico
El medio físico de conexión puede ser un bus semi-duplex (half duplex) (RS-485 o fibra óptica) o
dúplex (full duplex) (RS-422 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.
Acceso al Medio
La estructura lógica es siempre del tipo maestro-esclavo, con acceso al medio controlado por el
maestro, 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.
Los intercambios de mensajes pueden ser de dos tipos:
• Intercambios punto a punto (peer to peer), que conforma siempre dos mensajes: una demanda
del maestro y una respuesta del esclavo (puede ser simplemente un reconocimiento
(«acknowledge»). El Maestro envía el comando a un dispositivo comprendido entre las direcciones
1d i 247d.
• 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
Protocolo MODBUS 1
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
para mandar datos comunes de configuración, reset, etc. El maestro envía el comando a la
dirección @0d
Protocolo
La codificación de datos dentro de la trama puede hacerse en modo ASCII o puramente binario,
según el estándar RTU (Remote Transmission Unit).
En modo ASCII los bytes se envían codificados en ASCII, es decir, que por cada byte a transmitir
se envían 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 cualquiera de los dos casos, cada mensaje obedece a una trama que contiene cuatro campos
principales, según se muestra en la figura 1. La única diferencia se encuentra en que la trama
ASCII incluye un carácter de encabezamiento («:»=3AH) y los caracteres CR LF (CR LF Carrier
Return Line Feed) al final del mensaje terminan en 0DH-0AH. En modo RTU no se utiliza indicador
de inicio y final de trama.
Pueden existir también diferencias en la forma de calcular el CRC, puesto que el formato RTU
emplea una fórmula polinómica en vez de la simple suma en módulo 16.
Protocolo MODBUS 2
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
Codificación RTU (en el formato binario, el inicio de trama debería ser tras 3.5 tiempo de
carácter):
- Número de Esclavo (1byte): En el caso de las tramas enviadas por el maestro, 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 maestro 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”.
Protocolo MODBUS 3
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
- 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.
@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).
@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
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).
Protocolo MODBUS 4
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
@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).
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. La siguiente
es una implementación en C de la función de cálculo del CRC (modo RTU):
Protocolo MODBUS 5
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
“…
#definePOLY0xA001
unsignedcrc16(char*buf,intlen)
{
char i;
unsigned crc;
for(crc=0xFFFF;len!=0;len--){
crc^=*buf++;
for(i=0;i<8;i++){
if(crc&0x0001){
crc=(crc>>1)^POLY;
}else{
crc>>=1;
}
}
}
return(crc);
}
…”
En C#:
“…
uint crc16(byte [ ] buf , uint len)
{
uint POLY=0xA001;
int crc;
uint i;
uint j;
j = 0;
for (crc = 0xFFFF; len != 0; len --){
crc ^= buf[j];
j++;
for (i = 0; i < 8; i ++){
if ((crc & 0x0001)>0){
crc = (crc >> 1) ^ POLY;
}else{
crc >>= 1;
}
}
}
return (crc);
}
…”
Protocolo MODBUS 6
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
-PETICION de 3 datos:
Nombre del campo Ejemplo ( HEX ) Caracteres ASCII 8bits modo RTU
Cabecera : Ninguno
Dirección esclavo 06 “06” 0000 0110
Función 03 “03” 0000 0011
Dirección inicio Hi 00 “00” 0000 0000
Dirección inicio Lo 6B “6B” 0110 1011
Num de Registros Hi 00 “00” 0000 0000
Num de Registros Lo 03 “03” 0000 0011
Error Check LRC ( 2 caracteres ) CRC (16 bits)
Fin de trama CR LF Ninguno
Total: 17 bytes 8 bytes
Protocolo MODBUS 7
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
MODBUS TCP/IP
MODBUS TCP/IP es una variante o extensión del protocolo MODBUS que permite utilizarlo sobre
la capa de transporte TCP/IP. De este modo, MODBUS-TCP se puede utilizar en Internet, de
hecho, este fue uno de los objetivos que motivó su desarrollo (la especificación del protocolo se ha
remitido a la IETF=Internet Engineering Task Force).
Si bien es algo no aceptado por la seguridad informática que requieren ciertos procesos
industriales, en la práctica, un dispositivo instalado en America podría ser direccionado desde
Europa o cualquier otra parte del mundo.
HMI (MODBUS TCP MAESTRO)
INTERNET
ETH
TUNEL VPN
MODBUS TCP
MODBUS SERIE
Firewal
PLC HMI
(MODBUS (MODBUS
MAESTRO- MAESTRO)
ESCLAVO)
ETH
ETH ETH
Switch
ESCLAVO 3
ESCLAVO 1 ESCLAVO 2
PULSOS
Protocolo MODBUS 8
DEPARTAMENTO DE CIENCIA Y TECNOLOGÍA
UNIVERSIDAD NACIONAL DE QUILMES
Roque Sáenz Peña 352 – (B1876BXD) Bernal – Buenos Aires – Argentina
• Realizar reparaciones o mantenimiento remoto desde la oficina utilizando un PC, reduciendo así
los costes y mejorando el servicio al cliente.
La combinación de una red física versátil y escalable como Ethernet con el estándar
universal de interredes TCP/IP y una representación de datos independiente de fabricante,
como MODBUS, proporciona una red abierta y accesible para el intercambio de datos de
proceso.
MODBUS/TCP simplemente encapsula una trama MODBUS (ASCII O RTU) en un segmento TCP,
y TCP proporciona un servicio orientado a conexión fiable, lo que significa que toda consulta
espera una respuesta.
Protocolo MODBUS 9