85 lines
2.4 KiB
C#
85 lines
2.4 KiB
C#
using static System.Math;
|
|
|
|
namespace InnovEnergy.Lib.Units.Composite;
|
|
|
|
public record AcPower
|
|
{
|
|
protected AcPower(){}
|
|
|
|
public ApparentPower Apparent { get; protected init; }
|
|
public ActivePower Active { get; protected init; }
|
|
public ReactivePower Reactive { get; protected init; }
|
|
public Angle Phi { get; protected init; }
|
|
public Double CosPhi { get; protected init; }
|
|
|
|
public static AcPower FromActiveReactiveApparent(ActivePower activePower, ReactivePower reactivePower, ApparentPower apparentPower)
|
|
{
|
|
var q = reactivePower.Value;
|
|
var p = activePower.Value;
|
|
var s = apparentPower.Value;
|
|
var phi = Atan2(q, p);
|
|
|
|
return new AcPower
|
|
{
|
|
Active = p,
|
|
Reactive = q,
|
|
Apparent = s,
|
|
Phi = phi,
|
|
CosPhi = Cos(phi),
|
|
};
|
|
}
|
|
|
|
public static AcPower FromActiveReactive(ActivePower activePower, ReactivePower reactivePower)
|
|
{
|
|
var q = reactivePower.Value;
|
|
var p = activePower.Value;
|
|
var s = Sqrt(p * p + q * q);
|
|
var phi = Atan2(q, p);
|
|
|
|
return new AcPower
|
|
{
|
|
Active = p,
|
|
Reactive = q,
|
|
Apparent = s,
|
|
Phi = phi,
|
|
CosPhi = p/s,
|
|
};
|
|
}
|
|
|
|
public static AcPower FromVoltageCurrentPhi(Voltage voltageRms, Current currentRms, Angle phi)
|
|
{
|
|
if (voltageRms < 0) throw new ArgumentException("RMS value cannot be negative", nameof(voltageRms));
|
|
if (currentRms < 0) throw new ArgumentException("RMS value cannot be negative", nameof(currentRms));
|
|
|
|
var cosPhi = Cos(phi.Value);
|
|
var apparent = voltageRms.Value * currentRms.Value;
|
|
|
|
return new AcPower
|
|
{
|
|
Apparent = apparent,
|
|
Active = apparent * cosPhi,
|
|
Reactive = apparent * Sin(phi.Value),
|
|
Phi = phi,
|
|
CosPhi = cosPhi
|
|
};
|
|
}
|
|
|
|
|
|
public static AcPower SumOf(params AcPower[] phases)
|
|
{
|
|
var p = phases.Sum(l => l.Active.Value);
|
|
var q = phases.Sum(l => l.Reactive.Value);
|
|
var s = Sqrt(p * p + q * q);
|
|
|
|
Angle phi = Atan2(q, p);
|
|
|
|
return new AcPower
|
|
{
|
|
Apparent = s,
|
|
Active = p,
|
|
Reactive = q,
|
|
Phi = phi,
|
|
CosPhi = Cos(phi.Value)
|
|
};
|
|
}
|
|
} |