Commit d859c457 authored by Jan Dinkelbach's avatar Jan Dinkelbach
Browse files

remove PLL quantities from PowerControllerVSI and adapt parametrization of example

parent b8934189
......@@ -26,7 +26,7 @@ int main(int argc, char* argv[]) {
Examples::SGIB::ScenarioConfig scenario;
// Real finalTime = 0.003;
Real finalTime = 2;
Real finalTime = 10;
Real timeStep = 0.001;
CommandLineArgs args(argc, argv);
if (argc > 1) {
......@@ -103,7 +103,7 @@ int main(int argc, char* argv[]) {
pv->setControllerParameters(scenario.KpPLL, scenario.KiPLL, scenario.KpPowerCtrl, scenario.KiPowerCtrl, scenario.KpCurrCtrl, scenario.KiCurrCtrl, scenario.OmegaCutoff);
pv->setFilterParameters(scenario.Lf, scenario.Cf, scenario.Rf, scenario.Rc);
pv->setTransformerParameters(scenario.systemNominalVoltage, scenario.pvNominalVoltage, scenario.transformerNominalPower, scenario.systemNominalVoltage/scenario.pvNominalVoltage, 0, 0, scenario.transformerInductance, scenario.systemOmega);
pv->setInitialStateValues(0, 0, scenario.pvNominalActivePower, scenario.pvNominalReactivePower, 0, 0, 0, 0);
pv->setInitialStateValues(scenario.pvNominalActivePower, scenario.pvNominalReactivePower, scenario.phi_dInit, scenario.phi_qInit, scenario.gamma_dInit, scenario.gamma_qInit);
// Topology
extnetDP->connect({ n1DP });
......@@ -127,7 +127,7 @@ int main(int argc, char* argv[]) {
loggerDP->addAttribute("pv_pll_output", pv->attribute("pll_output"));
// load step sized in absolute terms
// std::shared_ptr<SwitchEvent> loadStepEvent = Examples::createEventAddPowerConsumption("n2", 1-timeStepDP, 1000.0e3, systemDP, Domain::DP);
std::shared_ptr<SwitchEvent> loadStepEvent = Examples::createEventAddPowerConsumption("n2", 1-timeStepDP, 100.0e3, systemDP, Domain::DP, loggerDP);
// Simulation
Simulation sim(simNameDP, Logger::Level::debug);
......@@ -135,7 +135,7 @@ int main(int argc, char* argv[]) {
sim.setTimeStep(timeStepDP);
sim.setFinalTime(finalTimeDP);
sim.setDomain(Domain::DP);
// sim.addEvent(loadStepEvent);
sim.addEvent(loadStepEvent);
sim.doPowerFlowInit(false);
sim.addLogger(loggerDP);
sim.run();
......
......@@ -22,19 +22,28 @@ namespace SGIB {
Real systemFrequency = 50;
Real systemNominalVoltage = 20e3;
// Line paramerters
Real lineResistance = 0.05;
// Line parameters (R/X = 1)
Real lineResistance = 31.4;
Real lineInductance = 0.1;
// PV controller parameters
Real KpPLL = 0.25;
Real KiPLL = 2;
Real KpPowerCtrl = 0.001;
Real KiPowerCtrl = 0.08;
Real KpCurrCtrl = 0.3;
Real KiCurrCtrl = 10;
Real scaling_P = 10.0;
Real scaling_I = 1000.0;
Real KpPLL = 0.25/scaling_P;
Real KiPLL = 2/scaling_I;
Real KpPowerCtrl = 0.001/scaling_P;
Real KiPowerCtrl = 0.08/scaling_I;
Real KpCurrCtrl = 0.3/scaling_P;
Real KiCurrCtrl = 10/scaling_I;
Real OmegaCutoff = 2 * PI * systemFrequency;
// Initial state values
Real phi_dInit = 823.721*scaling_I;
Real phi_qInit = -411.861*scaling_I;
Real gamma_dInit = 131.401*scaling_I;
Real gamma_qInit = 7.31206*scaling_I;
// Nominal generated power values of PV
Real pvNominalVoltage = 1500.;
Real pvNominalActivePower = 100e3;
......@@ -130,7 +139,7 @@ namespace CIGREMV {
pv->setControllerParameters(scenario.KpPLL, scenario.KiPLL, scenario.KpPowerCtrl, scenario.KiPowerCtrl, scenario.KpCurrCtrl, scenario.KiCurrCtrl, scenario.OmegaCutoff);
pv->setFilterParameters(scenario.Lf, scenario.Cf, scenario.Rf, scenario.Rc);
pv->setTransformerParameters(scenario.systemNominalVoltage, scenario.pvUnitNominalVoltage, scenario.transformerNominalPower, scenario.systemNominalVoltage/scenario.pvUnitNominalVoltage, 0, 0, scenario.transformerInductance, scenario.systemOmega);
pv->setInitialStateValues(scenario.thetaPLLInit, scenario.phiPLLInit, scenario.pInit, scenario.qInit, scenario.phi_dInit, scenario.phi_qInit, scenario.gamma_dInit, scenario.gamma_qInit);
pv->setInitialStateValues(scenario.pInit, scenario.qInit, scenario.phi_dInit, scenario.phi_qInit, scenario.gamma_dInit, scenario.gamma_qInit);
system.addComponent(pv);
system.connectComponentToNodes<Complex>(pv, { connectionNode });
} else if (domain == Domain::EMT) {
......@@ -149,8 +158,6 @@ namespace CIGREMV {
void logPVAttributes(DPsim::DataLogger::Ptr logger, CPS::TopologicalPowerComp::Ptr pv) {
// state variables
logger->addAttribute(pv->name() + "_state_" + "theta", pv->attribute("theta"));
logger->addAttribute(pv->name() + "_state_" + "phipll", pv->attribute("phipll"));
logger->addAttribute(pv->name() + "_state_" + "p", pv->attribute("p"));
logger->addAttribute(pv->name() + "_state_" + "q", pv->attribute("q"));
logger->addAttribute(pv->name() + "_state_" + "phid", pv->attribute("phid"));
......@@ -171,7 +178,7 @@ namespace CIGREMV {
}
}
std::shared_ptr<DPsim::SwitchEvent> createEventAddPowerConsumption(String nodeName, Real eventTime, Real additionalActivePower, SystemTopology& system, Domain domain) {
std::shared_ptr<DPsim::SwitchEvent> createEventAddPowerConsumption(String nodeName, Real eventTime, Real additionalActivePower, SystemTopology& system, Domain domain, DPsim::DataLogger::Ptr logger) {
// TODO: use base classes ph1
if (domain == CPS::Domain::DP) {
......@@ -182,6 +189,7 @@ namespace CIGREMV {
loadSwitch->open();
system.addComponent(loadSwitch);
system.connectComponentToNodes<Complex>(loadSwitch, { CPS::SimNode<Complex>::GND, connectionNode});
logger->addAttribute("pv_switchedload_i", loadSwitch->attribute("i_intf"));
return DPsim::SwitchEvent::make(eventTime, loadSwitch, true);
} else {
return nullptr;
......
......@@ -111,7 +111,7 @@ namespace Ph1 {
/// Setter for parameters of filter
void setFilterParameters(Real Lf, Real Cf, Real Rf, Real Rc);
/// Setter for initial values applied in controllers
void setInitialStateValues(Real thetaPLLInit, Real phiPLLInit, Real pInit, Real qInit,
void setInitialStateValues(Real pInit, Real qInit,
Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit);
// #### MNA section ####
......
......@@ -21,36 +21,27 @@ namespace Signal {
public SharedFactory<PowerControllerVSI> {
protected:
/// Simulation time step
Real mTimeStep;
/// Complex nominal voltage [V]
Real mVnom;
/// Power parameters
// Power parameters
Real mPref;
Real mQref;
/// PLL
Real mOmegaN;
Real mKiPLL;
Real mKpPLL;
/// Power controller
// Power controller
Real mOmegaCutoff;
Real mKiPowerCtrld;
Real mKiPowerCtrlq;
Real mKpPowerCtrld;
Real mKpPowerCtrlq;
/// Current controller
// Current controller
Real mKiCurrCtrld;
Real mKiCurrCtrlq;
Real mKpCurrCtrld;
Real mKpCurrCtrlq;
/// states
Real mThetaPLL = 0;
Real mPhiPLL;
// states
Real mP;
Real mQ;
Real mPhi_d;
......@@ -59,8 +50,6 @@ namespace Signal {
Real mGamma_q;
/// initial values for states
Real mThetaPLLInit = 0;
Real mPhiPLLInit = 0;
Real mPInit = 0;
Real mQInit = 0;
Real mPhi_dInit = 0;
......@@ -69,27 +58,26 @@ namespace Signal {
Real mGamma_qInit = 0;
/// state space matrices
Matrix mA = Matrix::Zero(8, 8);
Matrix mB = Matrix::Zero(8, 7);
Matrix mC = Matrix::Zero(2, 8);
Matrix mD = Matrix::Zero(2, 7);
Matrix mA = Matrix::Zero(6, 6);
Matrix mB = Matrix::Zero(6, 6);
Matrix mC = Matrix::Zero(2, 6);
Matrix mD = Matrix::Zero(2, 6);
/// state vector
Matrix mStates = Matrix::Zero(8, 1);
Matrix mStates = Matrix::Zero(6, 1);
/// input vector
Matrix mU = Matrix::Zero(7, 1);
Matrix mU = Matrix::Zero(6, 1);
public:
PowerControllerVSI(String name, Logger::Level logLevel = Logger::Level::off);
/// Setter for general parameters
void setParameters(Real sysOmega, Real sysVoltNom, Real Pref, Real Qref);
void setParameters(Real Pref, Real Qref);
/// Setter for parameters of control loops
void setControllerParameters(Real Kp_pll, Real Ki_pll, Real Kp_powerCtrl, Real Ki_powerCtrl, Real Kp_currCtrl, Real Ki_currCtrl, Real Omega_cutoff);
void setControllerParameters(Real Kp_powerCtrl, Real Ki_powerCtrl, Real Kp_currCtrl, Real Ki_currCtrl, Real Omega_cutoff);
/// Setter for initial state values
void setInitialStateValues(Real thetaPLLInit, Real phiPLLInit, Real pInit, Real qInit,
Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit);
void setInitialStateValues(Real pInit, Real qInit, Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit);
///
void initializeStateSpaceModel(Real omega, Real timeStep, Attribute<Matrix>::Ptr leftVector);
......
......@@ -47,8 +47,6 @@ DP::Ph1::AvVoltageSourceInverterDQ::AvVoltageSourceInverterDQ(String uid, String
addAttribute<MatrixComp>("Vsref", &mVsref, Flags::read | Flags::write);
// state variables
addAttribute<Real>("theta", Flags::read | Flags::write);
addAttribute<Real>("phipll", Flags::read | Flags::write);
addAttribute<Real>("p", Flags::read | Flags::write);
addAttribute<Real>("q", Flags::read | Flags::write);
addAttribute<Real>("phid", Flags::read | Flags::write);
......@@ -84,8 +82,6 @@ DP::Ph1::AvVoltageSourceInverterDQ::AvVoltageSourceInverterDQ(String uid, String
mPowerControllerVSI->setAttributeRef("Irc_q", attribute<Real>("Irc_q"));
mPowerControllerVSI->setAttributeRef("Vs_d", attribute<Real>("Vs_d"));
mPowerControllerVSI->setAttributeRef("Vs_q", attribute<Real>("Vs_q"));
setAttributeRef("theta", mPowerControllerVSI->attribute<Real>("theta"));
setAttributeRef("phipll", mPowerControllerVSI->attribute<Real>("phipll"));
setAttributeRef("p", mPowerControllerVSI->attribute<Real>("p"));
setAttributeRef("q", mPowerControllerVSI->attribute<Real>("q"));
setAttributeRef("phid", mPowerControllerVSI->attribute<Real>("phid"));
......@@ -101,7 +97,7 @@ void DP::Ph1::AvVoltageSourceInverterDQ::setParameters(Real sysOmega, Real sysVo
mSLog->info("Nominal Voltage={} [V] Nominal Omega={} [1/s]", sysVoltNom, sysOmega);
mSLog->info("Active Power={} [W] Reactive Power={} [VAr]", Pref, Qref);
mPowerControllerVSI->setParameters(sysOmega, sysVoltNom, Pref, Qref);
mPowerControllerVSI->setParameters(Pref, Qref);
mOmegaN = sysOmega;
mVnom = sysVoltNom;
......@@ -135,7 +131,7 @@ void DP::Ph1::AvVoltageSourceInverterDQ::setControllerParameters(Real Kp_pll, Re
// TODO: add and use Omega_nominal instead of Omega_cutoff
mPLL->setParameters(Kp_pll, Ki_pll, Omega_cutoff);
mPLL->composeStateSpaceMatrices();
mPowerControllerVSI->setControllerParameters(Kp_pll, Ki_pll, Kp_powerCtrl, Ki_powerCtrl, Kp_currCtrl, Ki_currCtrl, Omega_cutoff);
mPowerControllerVSI->setControllerParameters(Kp_powerCtrl, Ki_powerCtrl, Kp_currCtrl, Ki_currCtrl, Omega_cutoff);
}
void DP::Ph1::AvVoltageSourceInverterDQ::setFilterParameters(Real Lf, Real Cf, Real Rf, Real Rc) {
......@@ -151,17 +147,15 @@ void DP::Ph1::AvVoltageSourceInverterDQ::setFilterParameters(Real Lf, Real Cf, R
mSubCapacitorF->setParameters(mCf);
}
void DP::Ph1::AvVoltageSourceInverterDQ::setInitialStateValues(Real thetaPLLInit, Real phiPLLInit, Real pInit, Real qInit,
void DP::Ph1::AvVoltageSourceInverterDQ::setInitialStateValues(Real pInit, Real qInit,
Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit) {
mSLog->info("Initial State Value Parameters:");
mSLog->info("ThetaPLLInit = {}, PhiPLLInit = {}", thetaPLLInit, phiPLLInit);
mSLog->info("PInit = {}, QInit = {}", pInit, qInit);
mSLog->info("Phi_dInit = {}, Phi_qInit = {}", phi_dInit, phi_qInit);
mSLog->info("Gamma_dInit = {}, Gamma_qInit = {}", gamma_dInit, gamma_qInit);
mPowerControllerVSI->setInitialStateValues(thetaPLLInit, phiPLLInit, pInit, qInit,
phi_dInit, phi_qInit, gamma_dInit, gamma_qInit);
mPowerControllerVSI->setInitialStateValues(pInit, qInit, phi_dInit, phi_qInit, gamma_dInit, gamma_qInit);
}
void DP::Ph1::AvVoltageSourceInverterDQ::initialize(Matrix frequencies) {
......
......@@ -14,8 +14,6 @@ using namespace CPS::Signal;
PowerControllerVSI::PowerControllerVSI(String name, Logger::Level logLevel) :
SimSignalComp(name, name, logLevel) {
addAttribute<Real>("theta", &mThetaPLL, Flags::read | Flags::write);
addAttribute<Real>("phipll", &mPhiPLL, Flags::read | Flags::write);
addAttribute<Real>("p", &mP, Flags::read | Flags::write);
addAttribute<Real>("q", &mQ, Flags::read | Flags::write);
addAttribute<Real>("phid", &mPhi_d, Flags::read | Flags::write);
......@@ -31,24 +29,18 @@ PowerControllerVSI::PowerControllerVSI(String name, Logger::Level logLevel) :
addAttribute<Real>("Vs_q", Flags::read | Flags::write);
}
void PowerControllerVSI::setParameters(Real sysOmega, Real sysVoltNom, Real Pref, Real Qref) {
void PowerControllerVSI::setParameters(Real Pref, Real Qref) {
mPref = Pref;
mQref = Qref;
mVnom = sysVoltNom;
mOmegaN = sysOmega;
// use Pref and Qref as init values for states P and Q
// init values for other states remain zero (if not changed using setInitialStateValues)
mPInit = Pref;
mQInit = Qref;
}
void PowerControllerVSI::setControllerParameters(Real Kp_pll, Real Ki_pll,
Real Kp_powerCtrl, Real Ki_powerCtrl, Real Kp_currCtrl, Real Ki_currCtrl, Real Omega_cutoff) {
void PowerControllerVSI::setControllerParameters(Real Kp_powerCtrl, Real Ki_powerCtrl, Real Kp_currCtrl, Real Ki_currCtrl, Real Omega_cutoff) {
mKpPLL = Kp_pll;
mKiPLL = Ki_pll;
mKiPowerCtrld = Ki_powerCtrl;
mKiPowerCtrlq = Ki_powerCtrl;
mKpPowerCtrld = Kp_powerCtrl;
......@@ -61,39 +53,33 @@ void PowerControllerVSI::setControllerParameters(Real Kp_pll, Real Ki_pll,
// Set state space matrices using controller parameters
mA <<
0, mKiPLL, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -mOmegaCutoff, 0, 0, 0, 0, 0,
0, 0, 0, -mOmegaCutoff, 0, 0, 0, 0,
0, 0, -1, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0,
0, 0, -mKpPowerCtrld, 0, mKiPowerCtrld, 0, 0, 0,
0, 0, 0, mKpPowerCtrlq, 0, mKiPowerCtrlq, 0, 0;
-mOmegaCutoff, 0, 0, 0, 0, 0,
0, -mOmegaCutoff, 0, 0, 0, 0,
-1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0,
-mKpPowerCtrld, 0, mKiPowerCtrld, 0, 0, 0,
0, mKpPowerCtrlq, 0, mKiPowerCtrlq, 0, 0;
mB <<
1, 0, 0, 0, mKpPLL, 0, 0,
0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0,
0, 0, -1, 0, 0, 0, 0,
0, mKpPowerCtrld, 0, 0, 0, -1, 0,
0, 0, -mKpPowerCtrlq, 0, 0, 0, -1;
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0,
mKpPowerCtrld, 0, 0, 0, -1, 0,
0, -mKpPowerCtrlq, 0, 0, 0, -1;
mC <<
0, 0, -mKpPowerCtrld * mKpCurrCtrld, 0, mKpCurrCtrld * mKiPowerCtrld, 0, mKiCurrCtrld, 0,
0, 0, 0, mKpPowerCtrlq * mKpCurrCtrlq, 0, mKpCurrCtrlq*mKiPowerCtrlq, 0, mKiCurrCtrlq;
-mKpPowerCtrld * mKpCurrCtrld, 0, mKpCurrCtrld * mKiPowerCtrld, 0, mKiCurrCtrld, 0,
0, mKpPowerCtrlq * mKpCurrCtrlq, 0, mKpCurrCtrlq*mKiPowerCtrlq, 0, mKiCurrCtrlq;
mD <<
0, mKpCurrCtrld*mKpPowerCtrld, 0, 0, 0, -mKpCurrCtrld, 0,
0, 0, -mKpCurrCtrlq * mKpPowerCtrlq, 0, 0, 0, -mKpCurrCtrlq;
mKpCurrCtrld*mKpPowerCtrld, 0, 0, 0, -mKpCurrCtrld, 0,
0, -mKpCurrCtrlq * mKpPowerCtrlq, 0, 0, 0, -mKpCurrCtrlq;
}
void PowerControllerVSI::setInitialStateValues(Real thetaPLLInit, Real phiPLLInit, Real pInit, Real qInit,
void PowerControllerVSI::setInitialStateValues(Real pInit, Real qInit,
Real phi_dInit, Real phi_qInit, Real gamma_dInit, Real gamma_qInit) {
mThetaPLLInit = thetaPLLInit;
mPhiPLLInit = phiPLLInit;
mPInit = pInit;
mQInit = qInit;
mPhi_dInit = phi_dInit;
......@@ -104,27 +90,24 @@ void PowerControllerVSI::setInitialStateValues(Real thetaPLLInit, Real phiPLLIni
void PowerControllerVSI::initializeStateSpaceModel(Real omega, Real timeStep, Attribute<Matrix>::Ptr leftVector) {
mTimeStep = timeStep;
mOmegaN = omega;
mOmegaCutoff = omega;
// update B matrix due to its dependence on Irc
updateBMatrixStateSpaceModel();
// initialization of input
mU << mOmegaN, mPref, mQref, attribute<Real>("Vc_d")->get(), attribute<Real>("Vc_q")->get(), attribute<Real>("Irc_d")->get(), attribute<Real>("Irc_q")->get();
mU << mPref, mQref, attribute<Real>("Vc_d")->get(), attribute<Real>("Vc_q")->get(), attribute<Real>("Irc_d")->get(), attribute<Real>("Irc_q")->get();
mSLog->info("Initialization of input: \n" + Logger::matrixToString(mU));
// initialization of states
mThetaPLL = mThetaPLLInit;
// mThetaPLL = std::arg(mVirtualNodes[4]->initialSingleVoltage());
mPhiPLL = mPhiPLLInit;
mP = mPInit;
mQ = mQInit;
mPhi_d = mPhi_dInit;
mPhi_q = mPhi_qInit;
mGamma_d = mGamma_dInit;
mGamma_q = mGamma_qInit;
mStates << mThetaPLL, mPhiPLL, mP, mQ, mPhi_d, mPhi_q, mGamma_d, mGamma_q;
mStates << mP, mQ, mPhi_d, mPhi_q, mGamma_d, mGamma_q;
mSLog->info("Initialization of states: \n" + Logger::matrixToString(mStates));
// initialization of output
......@@ -136,24 +119,28 @@ void PowerControllerVSI::initializeStateSpaceModel(Real omega, Real timeStep, At
}
void PowerControllerVSI::signalStep(Real time, Int timeStepCount) {
Matrix newStates = Matrix::Zero(8, 1);
Matrix newU = Matrix::Zero(7, 1);
Matrix newStates = Matrix::Zero(6, 1);
Matrix newU = Matrix::Zero(6, 1);
newU << mPref, mQref, attribute<Real>("Vc_d")->get(), attribute<Real>("Vc_q")->get(), attribute<Real>("Irc_d")->get(), attribute<Real>("Irc_q")->get();
newU << mOmegaN, mPref, mQref, attribute<Real>("Vc_d")->get(), attribute<Real>("Vc_q")->get(), attribute<Real>("Irc_d")->get(), attribute<Real>("Irc_q")->get();
mSLog->info("Time {}:", time);
mSLog->info("Input values: inputCurr = \n{}\n , inputPrev = \n{}\n , statePrev = \n{}", newU, mU, mStates);
newStates = Math::StateSpaceTrapezoidal(mStates, mA, mB, mTimeStep, newU, mU);
// update states
mThetaPLL = newStates(0, 0);
mPhiPLL = newStates(1, 0);
mP = newStates(2, 0);
mQ = newStates(3, 0);
mPhi_d = newStates(4, 0);
mPhi_q = newStates(5, 0);
mGamma_d = newStates(6, 0);
mGamma_q = newStates(7, 0);
mP = newStates(0, 0);
mQ = newStates(1, 0);
mPhi_d = newStates(2, 0);
mPhi_q = newStates(3, 0);
mGamma_d = newStates(4, 0);
mGamma_q = newStates(5, 0);
mStates = newStates;
mSLog->info("State values: stateCurr = \n {}", mStates);
mU = newU;
// new output
......@@ -161,13 +148,15 @@ void PowerControllerVSI::signalStep(Real time, Int timeStepCount) {
vsdq = mC * mStates + mD * mU;
attribute<Real>("Vs_d")->set(vsdq(0,0));
attribute<Real>("Vs_q")->set(vsdq(1,0));
mSLog->info("Output values: outputCurr = \n{}", vsdq);
}
void PowerControllerVSI::updateBMatrixStateSpaceModel() {
mB.coeffRef(2, 3) = mOmegaCutoff * attribute<Real>("Irc_d")->get();
mB.coeffRef(2, 4) = mOmegaCutoff * attribute<Real>("Irc_q")->get();
mB.coeffRef(3, 3) = -mOmegaCutoff * attribute<Real>("Irc_q")->get();
mB.coeffRef(3, 4) = mOmegaCutoff * attribute<Real>("Irc_d")->get();
mB.coeffRef(0, 2) = mOmegaCutoff * attribute<Real>("Irc_d")->get();
mB.coeffRef(0, 3) = mOmegaCutoff * attribute<Real>("Irc_q")->get();
mB.coeffRef(1, 2) = -mOmegaCutoff * attribute<Real>("Irc_q")->get();
mB.coeffRef(1, 3) = mOmegaCutoff * attribute<Real>("Irc_d")->get();
}
Task::List PowerControllerVSI::getTasks() {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment