summaryrefslogtreecommitdiffstats
path: root/Project/IndMotor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/IndMotor.cpp')
-rw-r--r--Project/IndMotor.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/Project/IndMotor.cpp b/Project/IndMotor.cpp
index cace164..4df2bb1 100644
--- a/Project/IndMotor.cpp
+++ b/Project/IndMotor.cpp
@@ -263,3 +263,64 @@ bool IndMotor::GetPlotData(ElementPlotData& plotData, PlotStudy study)
plotData.AddData(m_electricalData.slipVector, _("Slip"));
return true;
}
+
+void IndMotor::InitPowerFlowMotor(double systemPowerBase, int busNumber)
+{
+ double k = 1.0; // Power base change factor.
+ if(m_electricalData.useMachinePowerAsBase) {
+ double oldBase = GetValueFromUnit(m_electricalData.ratedPower, m_electricalData.ratedPowerUnit);
+ k = systemPowerBase / oldBase;
+ }
+ // Calculate the induction machine transient constants at the machine base
+ m_electricalData.r1t = m_electricalData.r1 * k;
+ m_electricalData.r2t = m_electricalData.r2 * k;
+ m_electricalData.x1t = m_electricalData.x1 * k;
+ m_electricalData.x2t = m_electricalData.x2 * k;
+ m_electricalData.xmt = m_electricalData.xm * k;
+
+ m_electricalData.xt = m_electricalData.x1t +
+ (m_electricalData.x2t * m_electricalData.xmt) / (m_electricalData.x2t + m_electricalData.xmt);
+ m_electricalData.x0 = m_electricalData.x1t + m_electricalData.xmt;
+
+ double r1 = m_electricalData.r1t;
+ double r2 = m_electricalData.r2t;
+ if(m_electricalData.useKf) r2 *= (1.0 + m_electricalData.kf * m_electricalData.r2t);
+ double x1 = m_electricalData.x1t;
+ double x2 = m_electricalData.x2t;
+ double xm = m_electricalData.xmt;
+ m_electricalData.k1 = x2 + xm;
+ m_electricalData.k2 = -x1 * m_electricalData.k1 - x2 * xm;
+ m_electricalData.k3 = xm + x1;
+ m_electricalData.k4 = r1 * m_electricalData.k1;
+
+ auto puData = GetPUElectricalData(systemPowerBase);
+ m_electricalData.p0 = puData.activePower;
+ m_electricalData.busNum = busNumber;
+}
+
+bool IndMotor::CalculateReactivePower(double voltage)
+{
+ double a = m_electricalData.p0 *
+ (m_electricalData.r1t * m_electricalData.r1t + m_electricalData.k3 * m_electricalData.k3) -
+ voltage * voltage * m_electricalData.r1t;
+ double b = 2.0 * m_electricalData.p0 *
+ (m_electricalData.r1t * m_electricalData.k2 + m_electricalData.k3 * m_electricalData.k4) -
+ voltage * voltage * (m_electricalData.k2 + m_electricalData.k1 * m_electricalData.k3);
+ double c =
+ m_electricalData.p0 * (m_electricalData.k2 * m_electricalData.k2 + m_electricalData.k4 * m_electricalData.k4) -
+ voltage * voltage * m_electricalData.k1 * m_electricalData.k4;
+ double d = (b * b - 4.0 * a * c);
+ if(d < 0.0) return false;
+ double r2_s = (-b + std::sqrt(d)) / (2.0 * a);
+
+ double qa = m_electricalData.k1 * (r2_s * m_electricalData.r1t - m_electricalData.x1t * m_electricalData.k1 -
+ m_electricalData.x2t * m_electricalData.xmt);
+ double qb =
+ r2_s * (r2_s * (m_electricalData.xmt + m_electricalData.x1t) + m_electricalData.r1t * m_electricalData.k1);
+ double qc = r2_s * m_electricalData.r1t - m_electricalData.x1t * m_electricalData.k1 -
+ m_electricalData.x2t * m_electricalData.xmt;
+ double qd = r2_s * (m_electricalData.xmt + m_electricalData.x1t) + m_electricalData.r1t * m_electricalData.k1;
+ m_electricalData.qValue = (-voltage * voltage * (qa - qb)) / (qc * qc + qd * qd);
+
+ return true;
+}