diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2017-09-21 21:48:21 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2017-09-21 21:48:21 -0300 |
commit | 748b7c8a73c4bc48ff11469e990532e9e673de0e (patch) | |
tree | a2b2983d6fa1164f44d34a4b56b1461e721c5cef | |
parent | 4a72b22d12c0fc71aba4b4df0e5f057a17b8cdf6 (diff) | |
download | PSP.git-748b7c8a73c4bc48ff11469e990532e9e673de0e.tar.gz PSP.git-748b7c8a73c4bc48ff11469e990532e9e673de0e.tar.xz PSP.git-748b7c8a73c4bc48ff11469e990532e9e673de0e.zip |
Saturation initialization fixed
-rw-r--r-- | Project/Electromechanical.cpp | 38 | ||||
-rw-r--r-- | Project/Project.mk | 2 | ||||
-rw-r--r-- | Project/SyncGenerator.h | 4 |
3 files changed, 23 insertions, 21 deletions
diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 7f93b6d..aff509b 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -475,10 +475,11 @@ bool Electromechanical::InitializeDynamicElements() double sd = 1.0; double sq = 1.0; - double xp = data.potierReactance; + double satF = 1.0; + double xp = data.potierReactance * k; bool hasSaturation = false; if(data.satFactor != 0.0) { // Have saturation. - sd = data.satFactor; + satF = (data.satFactor - 1.2) / std::pow(1.2, 7); if(xp == 0.0) xp = 0.8 * (data.transXd * k); hasSaturation = true; } @@ -487,12 +488,7 @@ bool Electromechanical::InitializeDynamicElements() std::complex<double> eq0 = data.terminalVoltage + std::complex<double>(ra, xq) * ia; double delta = std::arg(eq0); - double fi0 = std::arg(ia); double id0, iq0, vd0, vq0; - // iq and id - // iq0 = std::abs(ia) * std::cos(delta - fi0); - // id0 = -std::abs(ia) * std::sin(delta - fi0); - // WRONG!!!! Review!! ABCtoDQ0(ia, delta, id0, iq0); ABCtoDQ0(data.terminalVoltage, delta, vd0, vq0); @@ -502,7 +498,7 @@ bool Electromechanical::InitializeDynamicElements() if(hasSaturation) { double oldDelta = 0; bool exit = false; - int it = 0; + int numIt = 0; while(!exit) { oldDelta = delta; @@ -510,42 +506,44 @@ bool Electromechanical::InitializeDynamicElements() ABCtoDQ0(data.terminalVoltage, delta, vd0, vq0); // Direct-axis Potier voltage. - double epd = vd0 + ra * id0 - xp * iq0; + double epd = vd0 + ra * id0 + xp * iq0; - sq = 1.0 + data.satFactor * (xq / xd) * std::pow(epd, 6); + sq = 1.0 + satF * (xq / xd) * std::pow(epd, 6); xqs = (xq - xp) / sq + xp; eq0 = data.terminalVoltage + std::complex<double>(ra, xqs) * ia; delta = std::arg(eq0); if(std::abs(delta - oldDelta) < m_tolerance) { exit = true; - } else if(it >= m_maxIterations) { + } else if(numIt >= m_maxIterations) { m_errorMsg = _("Error on initializate the saturation values of \"") + data.name + _("\"."); return false; } - it++; + numIt++; } // Quadrature-axis Potier voltage. double epq = vq0 + ra * iq0 - xp * id0; - sd = 1.0 + data.satFactor * std::pow(epq, 6); + sd = 1.0 + satF * std::pow(epq, 6); xds = (xd - xp) / sd + xp; } - double ef0 = vq0 + ra * iq0 + xds * id0; + double ef0 = vq0 + ra * iq0 - xds * id0; - // data.initialFieldVoltage = std::abs(eq0) - (xd - xq) * id0; data.initialFieldVoltage = ef0 * sd; data.fieldVoltage = data.initialFieldVoltage; data.pm = std::real((data.terminalVoltage * std::conj(ia)) + (std::abs(ia) * std::abs(ia) * ra)); data.speed = 2.0 * M_PI * m_systemFreq; - data.delta = delta; data.pe = data.pm; data.electricalPower = std::complex<double>(dataPU.activePower, dataPU.reactivePower); + data.sd = sd; + data.sq = sq; // Variables to extrapolate. data.oldIq = iq0; data.oldId = id0; data.oldPe = data.pe; + data.oldSd = sd; + data.oldSq = sq; switch(data.model) { case Machines::SM_MODEL_1: { @@ -561,7 +559,7 @@ bool Electromechanical::InitializeDynamicElements() case Machines::SM_MODEL_2: { double tranXd = data.transXd * k; - data.tranEq = data.initialFieldVoltage + (xd - tranXd) * (id0 / sd); + data.tranEq = ef0 + (xd - tranXd) * (id0 / sd); data.tranEd = 0.0; data.subEd = 0.0; data.subEq = 0.0; @@ -571,7 +569,7 @@ bool Electromechanical::InitializeDynamicElements() double tranXq = data.transXq * k; if(tranXq == 0.0) tranXq = tranXd; - data.tranEq = data.initialFieldVoltage + (xd - tranXd) * (id0 / sd); + data.tranEq = ef0 + (xd - tranXd) * (id0 / sd); data.tranEd = -(xq - tranXq) * (iq0 / sq); data.subEd = 0.0; @@ -584,7 +582,7 @@ bool Electromechanical::InitializeDynamicElements() if(subXd == 0.0) subXd = subXq; if(subXq == 0.0) subXq = subXd; - data.tranEq = data.initialFieldVoltage + (xd - tranXd) * (id0 / sd); + data.tranEq = ef0 + (xd - tranXd) * (id0 / sd); data.tranEd = 0.0; data.subEq = data.tranEq + (tranXd - subXd) * (id0 / sd); data.subEd = -(xq - subXq) * (iq0 / sq); @@ -597,7 +595,7 @@ bool Electromechanical::InitializeDynamicElements() if(subXd == 0.0) subXd = subXq; if(subXq == 0.0) subXq = subXd; - data.tranEq = data.initialFieldVoltage + (xd - tranXd) * (id0 / sd); + data.tranEq = ef0 + (xd - tranXd) * (id0 / sd); data.tranEd = -(xq - tranXq) * (iq0 / sq); data.subEq = data.tranEq + (tranXd - subXd) * (id0 / sd); data.subEd = data.tranEd - (tranXq - subXq) * (iq0 / sq); diff --git a/Project/Project.mk b/Project/Project.mk index f3bd51d..66f5669 100644 --- a/Project/Project.mk +++ b/Project/Project.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=NDSE-69 -Date :=20/09/2017 +Date :=21/09/2017 CodeLitePath :="C:/Program Files/CodeLite" LinkerName :=C:/TDM-GCC-64/bin/g++.exe SharedObjectLinkerName :=C:/TDM-GCC-64/bin/g++.exe -shared -fPIC diff --git a/Project/SyncGenerator.h b/Project/SyncGenerator.h index 23ab87d..aba3c8f 100644 --- a/Project/SyncGenerator.h +++ b/Project/SyncGenerator.h @@ -82,11 +82,15 @@ struct SyncGeneratorElectricalData { double subEq; double subEd; double pe; + double sd; + double sq; // Variables to extrapolate double oldId; double oldIq; double oldPe; + double oldSd; + double oldSq; // Integration constants IntegrationConstant icSpeed; |