▷ Practica 5 #PlcLab: Modulo PZEM016 protocolo Modbus-RTU

 

Repositorio:

Materiales:

  • 1 PLC-LAB
  • 1 Sensor PZEM016 (Link)

Requisitos previos:

Modbus:

Modbus es un protocolo de comunicación abierto, utilizado para transmitir información a través de redes en serie entre dispositivos electrónicos. El dispositivo que solicita la información se llama maestro Modbus y los dispositivos que suministran la información son los esclavos Modbus.


Este protocolo es uno de los mas utilizado en muchas areas industriales, con diferentes tipos de dipositivos, sean PLC, actuadores y sensores. 




Modulo PZEM016:

El módulo se utiliza principalmente para medir el voltaje de CA, corriente, potencia activa, frecuencia, factor de potencia y energía activa. Este modulo utiliza modbus sobre un capa física de RS485. En este sensor podemos medir los siguientes rangos:


1. rango de medición Voltaje: 80 ~ 260V.
2. actual rango de medición: 0 ~ 100A
3. activo rango de medición de potencia: 0 ~ 23KW
4. El factor de potencia rango de medición: 0.00 ~ 1.00
5. Frecuencia rango de medición: 45Hz ~ 65Hz
6. rango de medición de energía activa: 0 ~ 9999.99kwh






Codigo Principal:
/*
Autor: Vidal Bazurto (avbazurt@espol.edu.ec)
GitHub: https://github.com/avbazurt/CURSO-PLC-LAB
Practica #5: PZEM-014/016 AC Energy Meter
*/
//Librerias necesarias
#include <ModbusMaster.h>
/*
Pines Dedicados modulo PLC-LAB
*/
#define RS485_SERIAL Serial2
#define MAX485_DE GPIO_NUM_27 // Define DE Pin to Arduino pin. Connect DE Pin of Max485 converter module
#define MAX485_RE GPIO_NUM_26 // Define RE Pin to Arduino pin. Connect RE Pin of Max485 converter module
#define RS485_SERIAL_RX GPIO_NUM_25
#define RS485_SERIAL_TX GPIO_NUM_14
/*
Configuracion RS485
*/
#define PZEM014_MODBUS_ADDR 0x01
#define PZEM014_MODBUS_BAUD 9600
//Estructura datos Electricos Sensor
struct PZEM {
float voltaje = 0;
float corriente = 0;
float potencia = 0;
float energia = 0;
float frecuencia = 0;
float FP = 0;
};
//Definimos la estructura
PZEM Sensor;
//Clase Modbus necesaria
ModbusMaster mbus_sensor;
void setup()
{
//Iniciamos el Serial
Serial.begin(115200);
//Habilitamos los pines como salida
pinMode(MAX485_DE, OUTPUT);
pinMode(MAX485_RE, OUTPUT);
//Iniciamos con los pines en bajo
RS485_switch2RX();
//Configuramos el Serial para RS485
RS485_SERIAL.begin(9600, SERIAL_8N1, RS485_SERIAL_RX, RS485_SERIAL_TX);
//Iniciamos el ModbusMaster
mbus_sensor.begin(PZEM014_MODBUS_ADDR, RS485_SERIAL);
//Agregmos los callback para pre y pos Transmision
mbus_sensor.preTransmission(RS485_switch2TX);
mbus_sensor.postTransmission(RS485_switch2RX);
}
void loop()
{
uint8_t res;
// La trama MODBUS mostrada en el folleto se traduce en esta petición de
// biblioteca:
res = mbus_sensor.readInputRegisters(0x0000, 9);
uint32_t tempdouble = 0x00000000;
Sensor.voltaje = mbus_sensor.getResponseBuffer(0x0000) / 10.0;
tempdouble = mbus_sensor.getResponseBuffer(0x0002) + mbus_sensor.getResponseBuffer(0x0001);
Sensor.corriente = tempdouble / 1000.00;
tempdouble = mbus_sensor.getResponseBuffer(0x0004) + mbus_sensor.getResponseBuffer(0x0003);
Sensor.potencia = tempdouble / 10.0;
tempdouble = mbus_sensor.getResponseBuffer(0x0006) + mbus_sensor.getResponseBuffer(0x0005);
Sensor.energia = tempdouble;
Sensor.frecuencia = mbus_sensor.getResponseBuffer(0x0007) / 10.0;
Sensor.FP = mbus_sensor.getResponseBuffer(0x0008) / 100.00;
//Mostramos por pantalla los resultados
Serial.print(Sensor.voltaje, 1);
Serial.print("V ");
Serial.print(Sensor.frecuencia, 1);
Serial.print("Hz ");
Serial.print(Sensor.corriente, 3);
Serial.print("A ");
Serial.print(Sensor.potencia, 1);
Serial.print("W ");
Serial.print(Sensor.FP, 2);
Serial.print("pf ");
Serial.print(Sensor.energia, 0);
Serial.print("Wh ");
Serial.println();
}
void RS485_switch2TX(void)
{
digitalWrite(MAX485_DE, HIGH);
digitalWrite(MAX485_RE, HIGH);
}
void RS485_switch2RX(void)
{
digitalWrite(MAX485_DE, LOW);
digitalWrite(MAX485_RE, LOW);
}
view raw PLC-LAB-P5.ino hosted with ❤ by GitHub





Capturas:




    Comments

    Popular posts from this blog

    ▷ Practica 7 #PlcLab: WebServer PZEM-014/016 AC Energy Meter

    ▷ Practica 8 #PlcLab: WebServer PZEM-014/016 AC Energy Meter

    ▷ Practica 10 #PlcLab: MQTT PZEM-014/016 AC Energy Meter