En esta oportunidad realizaremos pruebas y explicación de el protocolo Modbus RTU implementado en ESP32 solicitando datos al Medidor de consumo Monofasico PZEM-016.
La intensión de este tutorial es:
1. Explicar de una manera sencilla la creación y el funcionamiento de un protocolo industrial en este caso el protocolo Modbus RTU utilizado e implementado en gran cantidad de aplicaciones industriales.
2. Indicar las ventajas del modulo XY-K485 como convertidor de TTL a RS485.
- No requiere habilitación DE y RE, solo requiere Rx y Tx.
- Alimentación desde 3.3V a 30VDC.
- Aislamiento, fusibles térmico y protección (Diodo supresor transitorio bidireccional TVS) en la comunicación RS485.
- Leds de indicación de recepción Rx y transmisión Tx.
3. Esta implementacion en ESP32 es netamente explicativa, no aplicarla directamente a una aplicación real en la industrial, dado que se toma lo básico del protocolo Modbus RTU de manera didáctica.
Materiales y donde Comprarlos
- Modulo ESP32 (Base – socket tusistemita.com)
- Convertidor XY-K485 Aislado (TTL a RS485)
- Medidor PZEM-016 Esclavo Modbus.
Conexiones
Una gran ventaja del convertidor XY-K485 es que no requiere DE/ y RE habilitación de recepción, solo con Rx y Tx realizamos la comunicación RS485.
Convertidor XY-K485
Proximo Tutorial Recomendado: Convertidor TTL a RS485.
Conexiones Medidor
Medidor PZEM-016 Esclavo Modbus RTU (RS485)
Tutorial Recomendado: Revisión Inicial Medidor PZEM-016 Modbus RTU RS485 de PeaceFair
Registros Modbus del Medidor PZEM-016
Cuenta con 10 registros de Lectura y 2 registros de Escritura.
- Los 10 registros de lectura corresponden a Mediciones (Voltaje, Corriente, Potencia, Potencia Acumulada, Frecuencia y Factor de Potencia), cuenta con registro de alarma por limite máximo Potencia instantánea (Vatios).
- Los 2 registros de escritura corresponden a valor en (Vatios) de alarma y la dirección del Esclavo.
Nota: Aunque la potencia Acumulada se puede reiniciar, en la documentación no se menciona el registro especifico.
Montaje
Modbus RTU: Envió de trama Maestro
El ESP32 envía trama maestro, solicitando registros a medidor PZEM-016 por RS485.
Documentación:
Implementacion Real:
Modbus RTU: Recepcion de trama Esclavo
El medidor PZEM-016 esclavo Modbus RTU (RS485), respuesta del medidor.
Documentación:
Implementacion Real:
Prueba 1: Codigo ESP32 Modo Puente USB a Serial
Se creo un código para crear un puente USB a Serial utilizando el ESP32.
Prueba 2 : Simulador Modbus RTU
El ESP32 en modo puente direccionamiento tramas entre Serial a Serial2, funcionando equivalente a un FTDI.
El simulador modbus permite monitorizar las tramas de envió y recepción, permitiendo mayor facilidad.
Prueba 3: Software PZEM-014 Master de PeaceFair
El ESP32 en modo puente también permite comunicar el PZEM-016 con el Software de PeaceFair.
Otros Recomendados
Prueba Arduino IDE
Se creo una trama de envió el ESP32 en modo Modbus Maestro y procesamiento de recepción de Esclavo, este código realiza los siguiente.
- Envió de Trama Maestro.
- Recepción de Trama Esclavo.
- Conversión de Byte a Int.
- Normalizacion de Registros a Mediciones.
Nota: Importante, esta implementacion en Arduino IDE basica, no utilizamos los métodos de validación de CRC o Checksum.
Simplemente enviamos la trama de solicitud de 10 registros Modbus y el Medidor PZEM-016 responde con 20 Bytes equivalente 10 registros.
Nota: Descarga código y ejemplos al final del articulo.
Este ejemplo solo realiza lectura de registros, en próximos tutoriales explicaremos como funciona la escritura de registros modbus.
Depuración Serial
Para validar la correcta comunicación ESP32 y PZEM-016 se habilito el puerto serial para depuración de tramas HEX.
Videos: Basic Test Modbus RTU
Video explicativo y detallado.
Conclusiones
Como se menciona inicialmente este tutorial es simplemente una breve introducción o explicación de como funcionan los protocolos específicamente Modbus RTU sobre RS485.
Esta es una implementacion básica o didáctica sin tener en cuenta los métodos de validación del protocolo CRC o Checksum, dado que es una prueba sin finalidad industrial.
El medidor PZEM-016 cuenta con 5VDC para alimentar dispositivos, en este caso no lo utilice, pero debería permitir alimentar nuestro ESP32 y el XY-K485
Aunque estamos utilizando un ESP32 en esta oportunidad no utilizaremos FreeRTOS, para simplificar el tutorial, en próximas pruebas lo implementaremos.
Este ejemplo es el inicio de otra variedad de pruebas, con algunas modificaciones podríamos adicionar comunicación MQTT o HTTP/HTTPS con plataformas IoT.
Ventajas
Respecto al hardware específicamente el convertidor XY-K485 (TTL a RS485), no requiere habilitación para Envió y Recepción (RE & DE), facilita la implementacion en otros microcontroladores, sin control de flujo.