From 55048b3f99016ab58a974f68203a2afd6703d962 Mon Sep 17 00:00:00 2001 From: atef Date: Wed, 1 Mar 2023 13:35:33 +0100 Subject: [PATCH] lift EmuMeter to new StatusApi --- csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs | 106 +++++++++++------- csharp/Lib/Devices/EmuMeter/EmuMeterStatus.cs | 27 +---- 2 files changed, 72 insertions(+), 61 deletions(-) diff --git a/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs b/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs index e4a766d30..ef3ba19ec 100644 --- a/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs +++ b/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs @@ -1,3 +1,4 @@ +using DecimalMath; using InnovEnergy.Lib.Protocols.Modbus.Clients; using InnovEnergy.Lib.Protocols.Modbus.Connections; using InnovEnergy.Lib.StatusApi.Connections; @@ -29,7 +30,9 @@ public class EmuMeterDevice return null; } } - private static Decimal GetPhi(Decimal cosPhi) => cosPhi.Clamp(-1m, 1m).Apply(ACos); + + + //private static Decimal GetPhi(Decimal cosPhi) => cosPhi.Clamp(-1m, 1m).Apply(ACos); private EmuMeterStatus TryReadStatus() { @@ -75,45 +78,70 @@ public class EmuMeterDevice var energyImportL3 = energyPhases[80 / 4] / 1000.0m; var energyExportL3 = energyPhases[100 / 4] / 1000.0m; + // Ac: new Ac3Bus + // ( + // new AcPhase( + // voltageL1N, + // currentL1, + // GetPhi(powerFactorL1) + // ), + // + // new AcPhase( + // voltageL2N, + // currentL2, + // GetPhi(powerFactorL2) + // ), + // + // new AcPhase( + // voltageL3N, + // currentL3, + // GetPhi(powerFactorL3) + // ), + // frequency + // ), + // activePowerL123, + // reactivePowerL123, + // apparentPowerL123, + // currentL123, + // voltageL1L2, + // voltageL2L3, + // voltageL3L1, + // energyImportL123, + // energyImportL1, + // energyImportL2, + // energyImportL3, + // energyExportL123, + // energyExportL1, + // energyExportL2, + // energyExportL3 + // ); + return new EmuMeterStatus - ( - Ac: new Ac3Bus - ( - new AcPhase( - voltageL1N, - currentL1, - GetPhi(powerFactorL1) - ), - - new AcPhase( - voltageL2N, - currentL2, - GetPhi(powerFactorL2) - ), - - new AcPhase( - voltageL3N, - currentL3, - GetPhi(powerFactorL3) - ), - frequency - ), - activePowerL123, - reactivePowerL123, - apparentPowerL123, - currentL123, - voltageL1L2, - voltageL2L3, - voltageL3L1, - energyImportL123, - energyImportL1, - energyImportL2, - energyImportL3, - energyExportL123, - energyExportL1, - energyExportL2, - energyExportL3 - ); + { + Ac = new Ac3Bus + { + Frequency = frequency, + L1 = new AcPhase + { + Current = currentL1, + Voltage = voltageL1N, + Phi = ATan2(reactivePowerL1, activePowerL1) // TODO: check that this works + }, + L2 = new AcPhase + { + Current = currentL2, + Voltage = voltageL2N, + Phi = ATan2(reactivePowerL2, activePowerL2) + }, + L3 = new AcPhase + { + Current = currentL3, + Voltage = voltageL3N, + Phi = ATan2(reactivePowerL3, activePowerL3) + } + } + }; + } } \ No newline at end of file diff --git a/csharp/Lib/Devices/EmuMeter/EmuMeterStatus.cs b/csharp/Lib/Devices/EmuMeter/EmuMeterStatus.cs index 3e629c15a..c1c9eb26e 100644 --- a/csharp/Lib/Devices/EmuMeter/EmuMeterStatus.cs +++ b/csharp/Lib/Devices/EmuMeter/EmuMeterStatus.cs @@ -1,27 +1,10 @@ using InnovEnergy.Lib.StatusApi; -using InnovEnergy.Lib.StatusApi.Connections; -using InnovEnergy.Lib.Units.Composite; namespace InnovEnergy.Lib.Devices.EmuMeter; -public record EmuMeterStatus -( - Ac3Bus Ac, - Decimal ActivePowerL123, - Decimal ReactivePowerL123, - Decimal ApparentPowerL123, - Decimal CurrentL123, - Decimal VoltageL1L2, - Decimal VoltageL2L3, - Decimal VoltageL3L1, - Decimal EnergyImportL123, - Decimal EnergyImportL1, - Decimal EnergyImportL2, - Decimal EnergyImportL3, - Decimal EnergyExportL123, - Decimal EnergyExportL1, - Decimal EnergyExportL2, - Decimal EnergyExportL3 -):PowerMeterStatus(Ac) -{} +public record EmuMeterStatus : PowerMeterStatus +{ + // TODO add serial nb, (and other?) +} +