Comunicación Modbus RTU entre un Arduino esclavo y LabVIEW maestro
Objetivos
Implementar un sistema de comunicación Modbus RTU entre un Arduino como esclavo y
LabVIEW como maestro, configurando correctamente los registros para leer y escribir datos.
Comprender el protocolo Modbus RTU, su estructura de mensajes y su implementación en
aplicaciones de monitoreo y control industrial.
Información sobre Modbus ASCII y Modbus RTU
Modbus: Definición y Tipos
Modbus es un protocolo de comunicación desarrollado en 1979 por Modicon (ahora Schneider
Electric) para aplicaciones industriales. Es un protocolo maestro/esclavo ampliamente utilizado
para comunicar dispositivos como controladores lógicos programables (PLC), sensores y
actuadores [1].
Existen varios modos de Modbus, pero los más comunes son Modbus ASCII y Modbus RTU [2].
Modbus ASCII
Modbus ASCII utiliza caracteres legibles (ASCII) para transmitir mensajes. Es más fácil de
interpretar por humanos, pero menos eficiente en términos de transmisión [2].
• Características principales:
1. Usa caracteres ASCII (0-9, A-F) para codificar datos [2].
2. Cada mensaje comienza con : (dos puntos) y termina con CR+LF (retorno de
carro + salto de línea) [2].
3. Requiere más ancho de banda que Modbus RTU debido a su formato de
caracteres [1].
• Ventajas:
o Fácil de depurar manualmente [2].
o Más tolerante a errores en transmisiones largas [1].
• Desventajas:
o Menor velocidad y eficiencia [2].
• Estructura de un mensaje ASCII:
: [Dirección] [Código de Función] [Datos] [LRC] CR LF
Donde:
o Dirección: Dirección del esclavo Modbus.
o Código de Función: Especifica la operación (lectura, escritura, etc.).
o Datos: Información enviada o solicitada.
o LRC: Longitudinal Redundancy Check para verificar la integridad [1], [2].
Modbus RTU
Modbus RTU (Remote Terminal Unit) es la variante más utilizada en aplicaciones industriales.
Utiliza un formato binario más compacto que Modbus ASCII, lo que lo hace más eficiente para
transmisión de datos [1], [2].
• Características principales:
1. Usa formato binario, lo que permite transmitir más datos en menos tiempo [1].
2. Cada mensaje incluye un CRC (Cyclic Redundancy Check) para verificar la integridad de
los datos [2].
3. Los mensajes no tienen caracteres delimitadores, sino un intervalo de silencio entre
mensajes para identificar el inicio y fin de los mismos [1], [2].
• Ventajas:
• Alta eficiencia en la transmisión [1], [2].
• Compatible con dispositivos industriales [2].
• Desventajas:
• Más difícil de depurar manualmente debido a su formato binario [1].
• Estructura de un mensaje RTU:
[Dirección] [Código de Función] [Datos] [CRC]
Donde:
o Dirección: Dirección del esclavo Modbus.
o Código de Función: Especifica la operación (lectura, escritura, etc.).
o Datos: Información enviada o solicitada.
o CRC: Cyclic Redundancy Check para verificar la integridad [2].
Comparación entre ASCII y RTU
Característica Modbus ASCII Modbus RTU
Formato ASCII (legible) Binario (compacto)
Eficiencia Baja Alta
Facilidad de depuración Alta Baja
Uso típico Aplicaciones simples Industria y automatización
Procedimiento
Materiales
1. Arduino UNO
2. Convertidor USB a RS-485 o cable USB estándar (si usas solo comunicación serial).
3. LabVIEW instalado en una PC con la biblioteca Modbus configurada.
4. Software Arduino IDE.
5. Potenciómetro, cables y resistencias según el circuito.
Conexión del Circuito
1. Conexión del potenciómetro:
o Conecta un extremo del potenciómetro a 5V y el otro a GND.
o Conecta el pin central del potenciómetro al pin A0 del Arduino.
2. Conexión de botones:
o Conecta botones a los pines digitales 2, 3, y 4, con resistencias pull-up internas
activadas.
3. Conexión al PC:
o Si usas RS-485, conecta el convertidor USB-RS485 y configura los pines A y B
correctamente.
o Si usas USB, conecta el cable directamente al Arduino.
Direcciones Modbus y Funciones
Direcciones Configuradas
Tipo Dirección Modbus Descripción
Holding Register 0x3000 Frecuencia PWM (escritura).
Input Register 0x2000 Valor del potenciómetro (lectura).
Coil 0x0000 Estado de inicio del motor (true/false).
Coil 0x0001 Dirección del motor (true: derecha, false: izquierda).
Coil 0x0002 Parada del motor (true/false).
Funciones Modbus
Función Código Descripción
Read Coils 0x01 Lee el estado de salidas digitales (Coils).
Write Single Coil 0x05 Escribe el estado de una salida digital.
Read Input Registers 0x04 Lee valores analógicos de solo lectura.
Write Single Register 0x06 Escribe un valor en un registro de retención.
Configuración del Maestro (LabVIEW)
1. Conexión:
o Configura el puerto serial en LabVIEW usando el VI VISA Configure Serial Port.
o Parámetros:
▪ Baud Rate: 9600.
▪ Parity: None.
▪ Stop Bits: 1.
▪ Data Bits: 8.
2. Acceso a datos:
o Usa Read Input Registers para leer 0x2000 (potenciómetro).
o Usa Write Single Register para escribir en 0x3000 (PWM).
o Usa Write Single Coil para activar/desactivar las Coils (0x0000, 0x0001, 0x0002).
Referencias
1. J. A. Stenerson, "Industrial automation and control," 2nd ed., Upper Saddle River, NJ,
USA: Prentice Hall, 2003, pp. 234–238.
2. Modbus Organization, "Modbus Protocol Specification," Modbus.org, 2006. [Online].
Available: https://modbus.org.