UNIVERSIDAD TECNOLOGICA DE PANAMA
Facultad de Ingeniería Eléctrica
Ingeniería Electromecánica
PROTOCOLO MODBUS Y APLICACIONES
Trabajo Grupal #3
Estudiantes:
Jonathan Tuñón 8-995-1488
Edgaris González 9-764-1464
Edier Guardia 8-1004-1881
Jeremi Quiel 8-1009-1007
Profesor:
Alfredo Collado
Curso:
Tópicos Especiales de Electrónica
Salón:
1IE253
Fecha:
2 de julio de 2026
Índice
1. Introducción
2. Historia y origen
3. Modos de comunicación
4. Aplicaciones
5. Ventajas y limitaciones
6. Implementación práctica
7. Conclusiones
Anexo A. Código del esclavo
Anexo B. Código del maestro
1. Introducción
Modbus es uno de los protocolos de comunicación industrial más utilizados para
integrar sensores, actuadores, PLC, sistemas SCADA y equipos de instrumentación.
Su simplicidad, interoperabilidad y bajo costo han permitido su adopción en una
gran variedad de procesos industriales. El objetivo de este trabajo es investigar el
protocolo Modbus y demostrar su funcionamiento mediante una implementación
práctica con Arduino.
2. Historia y origen
El protocolo Modbus es un estándar de comunicación industrial muy común. Fue
desarrollado en 1979 por la empresa Modicon (actualmente incorporada en
Schneider Electric) con el objetivo de simplificar la comunicación entre los PLC y
otros dispositivos industriales de una forma sencilla, confiable y abierta.
Antes del uso del protocolo los fabricantes tenían protocolos propietarios lo que
dificultaba la integración de equipos de marcas distintas dentro de una solo
instalación. Con la llegada de Modbus surgió la oportunidad de estandarizar la
comunicación entre dispositivos electrónicos industriales. El éxito inicial del
protocolo se debió su simplicidad, bajo costo y adaptabilidad.
Al pasar los años el protocolo evolucionó para adaptarse a enlaces seriales y redes
ethernet de forma que aún es un protocolo vigente en aplicaciones industriales
vigentes.
Ahora, Modbus es administrado por la Modbus Organization que mantiene el
protocolo actualizado y abierto.
3. Modos de comunicación
3.1 Modbus RTU
El RTU (remote terminal unit) es la versión del modbus que usa comunicación
serial. Mediante los convertidores RS-232 o RS-485 se permite interconectar
información a largos alcances y múltiples dispositivos.
Este modo transmite información en cadenas de bits. Estas contienen la dirección
esclavo, un código funcional, los datos transmitidos y datos de seguridad.
3.2 Modbus ASCII
El método ASCII también funciona por comunicación serial, pero envía sus datos en
caracteres escritos en ASCII. Sus Bytes de información son convertidos en
información legible por operadores, pero es de mucho menor eficiencia pues la
densidad de formación se reduce al no enviar datos en binario.
3.3 Modbus TCP/IP
Es una adaptación el protocolo Modbus que deja de funcionar por puertos seriales.
Ahora funciona enviando datos por redes Ethernet con el protocolo TCP/IP. Esto
permite conectar dispositivos industriales mediante switches, routers y redes LAN.
El método es de muy alta velocidad, se puede supervisar mediante conexiones de
internet e intranet, y por el formato se puede integrar con sistemas SCADA,
servidores y computacionales.
4. Aplicaciones
Gracias a su simplicidad y compatibilidad con equipos de diferentes fabricantes,
Modbus tiene una amplia variedad de aplicaciones dentro de la industria
electromecánica.
4.1 Comunicación con PLC
Los PLC utilizan Modbus para intercambiar información con sensores, actuadores,
módulos de entradas y salidas, pantallas HMI y otros controladores. Por ejemplo, un
PLC puede leer la temperatura de un sensor, controlar una bomba de agua y enviar
la información a un sistema de supervisión utilizando Modbus.
4.2 Variadores de velocidad
Los variadores de frecuencia emplean Modbus para recibir órdenes desde un PLC o
un sistema SCADA. El protocolo permite hacer cosas como: iniciar o detener el
motor, cambiar su velocidad de giro, leer su consumo, obtener la frecuencia, y
detectar fallos.
4.3 Sistemas SCADA
Los sistemas SCADA (Supervisory Control and Data Acquisition) utilizan Modbus
para recopilar información proveniente de equipos distribuidos en una planta
industrial. Así se pueden leer registros de sensores, estados de sistemas y generar
reportes e históricos de la función del sistema industrial.
4.4 Instrumentación industrial
Numerosos instrumentos electrónicos incorporan Modbus como interfaz de
comunicación, entre ellos:
Sensores de presión.
Sensores de temperatura.
Medidores de energía eléctrica.
Transmisores de nivel.
Caudalímetros.
Analizadores de calidad de energía.
Controladores PID.
Gracias a ello es posible integrar fácilmente todos estos equipos dentro de un mismo
sistema de automatización.
5. Ventajas y Limitaciones
Una de las principales ventajas de Modbus es que se trata de un protocolo abierto
cuya implementación no requiere el pago de licencias, lo que ha favorecido su
adopción por parte de fabricantes de todo el mundo. Su estructura de comunicación
es relativamente sencilla, por lo que puede implementarse tanto en dispositivos de
bajo costo como en sistemas industriales complejos. Además, presenta una elevada
compatibilidad entre equipos de diferentes fabricantes y dispone de abundante
documentación técnica. Otra ventaja importante es su flexibilidad para operar tanto
en redes seriales como en redes Ethernet, lo que permite su utilización en
instalaciones industriales tradicionales y modernas.
No obstante, Modbus también presenta ciertas limitaciones. Una de las más
importantes es la ausencia de mecanismos de seguridad informática, ya que el
protocolo no incorpora funciones de autenticación, cifrado ni protección frente a
accesos no autorizados. Además, en su versión serial solamente puede existir un
maestro controlando la comunicación en un mismo segmento de red, lo que limita la
flexibilidad en esquemas de automatización. Igualmente, el tamaño de los mensajes
es relativamente reducido y la velocidad de transmisión depende del medio físico
utilizado. Finalmente, aunque continúa siendo ampliamente utilizado, existen
protocolos industriales más modernos, como PROFINET y EtherCAT.
6. Implementación práctica
Se implementó una red Modbus RTU con un Arduino Uno como maestro y un
Arduino Nano como esclavo, comunicados mediante RS-485. El Nano lee un
potenciómetro, convierte la lectura a un rango de 0 a 100 y la publica en un Holding
Register. El Uno consulta periódicamente el registro mediante la función Read
Holding Registers (03) y muestra el valor recibido en una pantalla OLED.
Originalmente se buscaba que el Arduino Nano use un sensor de presión para la
medición. Sin embargo, durante el proceso de soldadura del sensor la electrónica de
este sufrió daños en su medición de temperatura. Que a su vez inhabilitaron todo el
sensor.
7. Conclusiones
Modbus continúa siendo uno de los protocolos de comunicación industrial más
utilizados gracias a su simplicidad, confiabilidad y amplia compatibilidad con
equipos de automatización. La práctica permitió comprender el funcionamiento de
Modbus RTU y validar la comunicación maestro-esclavo sobre RS-485, reforzando
los conceptos teóricos estudiados y su aplicación en sistemas de control industrial.
Anexo A. Código del Arduino Nano (Esclavo)
/*
NANO - Esclavo Modbus RTU
Lee el potenciómetro y lo expone como holding register (0-100)
Comunicación por SoftwareSerial en D2(RX) / D3(TX)
*/
#include <SoftwareSerial.h>
#include <ModbusRTUSlave.h>
#define RX_PIN 2
#define TX_PIN 3
SoftwareSerial modbusSerial(RX_PIN, TX_PIN); // RX, TX
ModbusRTUSlave modbus(modbusSerial);
const int potPin = A0;
const uint8_t SLAVE_ID = 1;
uint16_t holdingRegisters[1]; // registro 0: valor del potenciómetro (0-100)
void setup() {
[Link](9600); // Monitor serial de depuración (USB)
[Link](9600); // Comunicación Modbus hacia el Uno
[Link](holdingRegisters, 1);
[Link](SLAVE_ID, 9600);
[Link](F("Nano listo como esclavo Modbus"));
}
void loop() {
int lectura = analogRead(potPin);
int valor = map(lectura, 0, 1023, 0, 100);
holdingRegisters[0] = valor;
[Link](); // atiende las peticiones del UNO
// Debug opcional por USB
// [Link]("Valor enviado: ");
// [Link](valor);
}
Anexo B. Código del Arduino Uno (Maestro)
/*
UNO - Maestro Modbus RTU + Display
Pregunta al Nano por el valor del potenciómetro y lo muestra en pantalla
Comunicación por SoftwareSerial en D2(RX) / D3(TX)
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>
#include <ModbusMaster.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define RX_PIN 2
#define TX_PIN 3
SoftwareSerial modbusSerial(RX_PIN, TX_PIN); // RX, TX
ModbusMaster node;
const uint8_t SLAVE_ID = 1;
unsigned long lastPoll = 0;
const unsigned long POLL_INTERVAL = 700; // ms, "más lento por que el UNO es weon"
int valorActual = 0;
void setup() {
[Link](9600); // Monitor serial de depuración (USB)
[Link](9600); // Comunicación Modbus hacia el Nano
if () {
[Link](F("No se encontró OLED"));
for (;;);
}
[Link]();
[Link]();
[Link](SLAVE_ID, modbusSerial);
}
void loop() {
if (millis() - lastPoll >= POLL_INTERVAL) {
lastPoll = millis();
leerValorNano();
mostrarEnPantalla();
}
}
void leerValorNano() {
uint8_t resultado = [Link](0, 1); // registro 0, 1 registro
if (resultado == node.ku8MBSuccess) {
valorActual = [Link](0);
[Link](F("Valor recibido del Nano: "));
[Link](valorActual);
} else {
[Link](F("Error Modbus, código: "));
[Link](resultado, HEX);
}
}
void mostrarEnPantalla() {
[Link]();
[Link](2);
[Link](SSD1306_WHITE);
[Link](0, 0);
[Link]("R:");
[Link](0, 30);
[Link](valorActual);
[Link]();
}