Bevezetés
Az ESP32 PLC 14 a Powermeter bővíthető modullal valós idejű monitoringot biztosít egy háromfázisú rendszer elektromos paramétereinek mérésére. A beállítás három fázisvezetéket (L1, L2 és L3) és egy nullavezetéket (N) tartalmaz, így alkalmas háromfázisú elektromos terhelések monitorozására és vezérlésére.
A Powermeter kulcsszerepet játszik a kulcsfontosságú paraméterek, például a feszültség, az áram, a teljesítménytényező, az energiafogyasztás és egyéb elektromos mutatók mérésében mindhárom fázisvezetéken a nullához viszonyítva. Ezeket a paramétereket a PLC-n keresztül lehet monitorozni, ami lehetővé teszi a hatékony automatizálást, a hibák észlelését és az energiafelhasználás kezelését a rendszerben.
Ez az integráció lehetővé teszi a valós idejű adatgyűjtést és -elemzést, így a beállítás ideális ipari automatizálási, energiaelosztási monitoring vagy bármely olyan környezetben történő alkalmazásokhoz, ahol az energiafelhasználás és a rendszerteljesítmény pontos mérése kritikus fontosságú.
Kommunikációs protokoll
A Powermeter modul az MSP430F6779IPEU SoC-n alapul. Ez a chip felelős az összes intézkedés leolvasásáért és az utána leolvasandó regisztereinek frissítéséért. Ezek leolvasásához 2 kommunikációs protokollt lehet használni: I2C vagy RS-232. Ezek használatához módosítsa a kódot a kívánt protokolltól függően:
PowerMeterCommunication com = PLC;
selectCom(com);
|
PowerMeterCommunication com = RS232;
selectCom(com);
|
Az üzemmódtól függően az elérhető kommunikáció az I2C vagy az RS-232.
Használható a belső ESP32 CPU I2C busz, vagy akár egy külső is a PLC oldalán található I2C pinek segítségével. Az RS-232-höz használja az ESP32 PLC 14 tetején található DB9 csatlakozót.
Az Industrial Shields kifejlesztett egy I2C könyvtárat a Powermeter modullal való egyszerű kommunikációhoz, de nem minden elérhető eszköz van benne. Az Energy Measurement Design Center (EMDC) kommunikációs protokolljának teljes megértéséhez, amely a chip által használt protokoll, olvassa el a Kommunikációs Protokoll Specifikációját.
Szoftveres megközelítés
A Powermeter modul használatához le kell töltenie a következő fájlokat és a projekt kódjával megegyező könyvtárba kell mentenie őket, vagy az Arduino/libraries/Powermeter könyvtárba.
PowerMeter.h
PowerMeter.cpp
A példakód a következő:
#include "PowerMeter.h"
PowerMeterCommunication com = PLC;
PowerMeterChannel channelA = CHA;
PowerMeterChannel channelB = CHB;
PowerMeterChannel channelC = CHC;
void setup() {
// Initialize serial communication at 115200 baud rate
Serial.begin(115200);
Wire.begin();
// Start communication with the Power Meter (assuming PLC is the mode)
delay(1000);
for (int i = 0; i < 27; i++) {
Serial.println("A");
delay(10);
}
delay(1000);
Serial.println(" 33[28A");
selectCom(com);
}
void loop() {
// VRMS results
Serial.print("VRMS A: ");
Serial.print((float)get_VRMS(channelA) / 1000.0, 3);
Serial.println(" V");
Serial.print("VRMS B: ");
Serial.print((float)get_VRMS(channelB) / 1000.0, 3);
Serial.println(" V");
Serial.print("VRMS C: ");
Serial.print((float)get_VRMS(channelC) / 1000.0, 3);
Serial.println(" V");
// IRMS results
Serial.print("IRMS A: ");
Serial.print((float)get_IRMS(channelA) / 1000000.0, 3);
Serial.println(" A");
Serial.print("IRMS B: ");
Serial.print((float)get_IRMS(channelB) / 1000000.0, 3);
Serial.println(" A");
Serial.print("IRMS C: ");
Serial.print((float)get_IRMS(channelC) / 1000000.0, 3);
Serial.println(" A");
// VPEAK results
Serial.print("VPEAK A: ");
Serial.print((float)get_VPEAK(channelA) / 1000.0, 3);
Serial.println(" V");
Serial.print("VPEAK B: ");
Serial.print((float)get_VPEAK(channelB) / 1000.0, 3);
Serial.println(" V");
Serial.print("VPEAK C: ");
Serial.print((float)get_VPEAK(channelC) / 1000.0, 3);
Serial.println(" V");
// IPEAK results
Serial.print("IPEAK A: ");
Serial.print((float)get_IPEAK(channelA) / 1000000.0, 3);
Serial.println(" A");
Serial.print("IPEAK B: ");
Serial.print((float)get_IPEAK(channelB) / 1000000.0, 3);
Serial.println(" A");
Serial.print("IPEAK C: ");
Serial.print((float)get_IPEAK(channelC) / 1000000.0, 3);
Serial.println(" A");
// Power factor results
Serial.print("Power factor A: ");
Serial.print((float)get_PowerFactor(channelA) / 10000.0, 3);
Serial.println();
Serial.print("Power factor B: ");
Serial.print((float)get_PowerFactor(channelB) / 10000.0, 3);
Serial.println();
Serial.print("Power factor C: ");
Serial.print((float)get_PowerFactor(channelC) / 10000.0, 3);
Serial.println();
// Frequency results
Serial.print("Frequency A: ");
Serial.print((float)get_Frequency(channelA) / 100.0, 3);
Serial.println(" Hz");
Serial.print("Frequency B: ");
Serial.print((float)get_Frequency(channelB) / 100.0, 3);
Serial.println(" Hz");
Serial.print("Frequency C: ");
Serial.print((float)get_Frequency(channelC) / 100.0, 3);
Serial.println(" Hz");
// Active power results
Serial.print("Active power A: ");
Serial.print((float)get_ActivePower(channelA) / 1000000.0, 3);
Serial.println(" W");
Serial.print("Active power B: ");
Serial.print((float)get_ActivePower(channelB) / 1000000.0, 3);
Serial.println(" W");
Serial.print("Active power C: ");
Serial.print((float)get_ActivePower(channelC) / 1000000.0, 3);
Serial.println(" W");
// Reactive power results
Serial.print("Reactive power A: ");
Serial.print((float)get_ReactivePower(channelA) / 1000000.0, 3);
Serial.println(" VAr");
Serial.print("Reactive power B: ");
Serial.print((float)get_ReactivePower(channelB) / 1000000.0, 3);
Serial.println(" VAr");
Serial.print("Reactive power C: ");
Serial.print((float)get_ReactivePower(channelC) / 1000000.0, 3);
Serial.println(" VAr");
// Apparent power results
Serial.print("Apparent power A: ");
Serial.print((float)get_ApparentPower(channelA) / 1000000.0, 3);
Serial.println(" VA");
Serial.print("Apparent power B: ");
Serial.print((float)get_ApparentPower(channelB) / 1000000.0, 3);
Serial.println(" VA");
Serial.print("Apparent power C: ");
Serial.print((float)get_ApparentPower(channelC) / 1000000.0, 3);
Serial.println(" VA");
delay(10);
Serial.println(" 33[28A");
}
|
A kód a következőket teszi:
-
Elindítja a soros portot és az I2C-t.
-
Összesen 27 "A" -t nyomtatunk, majd a kurzort 28 sorral feljebb mozgatjuk. ez lehetővé teszi, hogy a már kinyomtatott karakterek tetejére írjunk, és ez nagyon hasznos lesz az összes olvasott adat nyomtatásakor.
-
Az inicializálás után elkezdjük olvasni az I2C buszról a paramétereket az összes csatornáról (A, B, C), amelyek a PLC 3 élő sora. Miután mindent kinyomtattunk, ismét visszavisszük a kurzort a tetejére, hogy újra kinyomtassuk.
Ahogy a fenti képeken látható, a bal oldali képen semmi sincs csatlakoztatva a fázisvezetékekhez, így minden releváns érték 0. Amikor az A csatorna csatlakoztatva van (jobb oldali kép), jól látható, hogy a VRMS A 243,071 V-ra van állítva, és az A csatornára vonatkozó összes paraméternek megvan a megfelelő értéke.