4#include <dpsim-models/Signal/SteamTurbineGovernor.h>
7using namespace CPS::Signal;
9Signal::SteamTurbineGovernor::SteamTurbineGovernor(
const String &name,
10 CPS::Logger::Level logLevel)
12 mDelOm(mAttributes->create<Real>(
"DelOm")),
13 mP1(mAttributes->create<Real>(
"P1")), mP(mAttributes->create<Real>(
"P")),
14 mPgvLim(mAttributes->create<Real>(
"PgvLim")),
15 mPgv(mAttributes->create<Real>(
"Pgv")) {}
17void SteamTurbineGovernor::setParameters(
18 std::shared_ptr<Base::GovernorParameters> parameters) {
20 std::dynamic_pointer_cast<Signal::SteamGovernorParameters>(parameters);
24 "Type of parameters class of {} has to be SteamGovernorParameters!",
26 throw CPS::TypeException();
28 if (params->T3 <= 0) {
29 SPDLOG_LOGGER_ERROR(
mSLog,
"T3 must be positive for {}", this->name());
30 throw CPS::InvalidArgumentException();
33 SPDLOG_LOGGER_ERROR(
mSLog,
"R must be positive for {}", this->name());
34 throw CPS::InvalidArgumentException();
38 SPDLOG_LOGGER_INFO(
mSLog,
39 "\nSteam Governor parameters:"
50 mParameters->OmRef, mParameters->R, mParameters->T1,
51 mParameters->T2, mParameters->T3, mParameters->dPmax,
52 mParameters->dPmin, mParameters->Pmax, mParameters->Pmin,
58 if (Pref < 0 || Pref > 1) {
59 SPDLOG_LOGGER_ERROR(
mSLog,
"Pref of steam governor {} must be in [0, 1] pu",
74 if (mParameters->T1 == 0) {
78 mCa = mParameters->T2 / mParameters->T1;
79 mCb = (mParameters->T1 - mParameters->T2) / mParameters->T1;
82 SPDLOG_LOGGER_INFO(
mSLog,
83 "\nSteam Governor initial values:"
88 mPref, **mDelOm, mDerPgv, **mPgv);
94 mDelOm_2prev = mDelOm_prev;
95 mDelOm_prev = **mDelOm;
99 **mDelOm = mParameters->OmRef - Omega;
102 if (mParameters->T1 == 0) {
104 (1.0 / mParameters->R) *
105 (mDelOm_prev + (mParameters->T2 / dt) * (mDelOm_prev - mDelOm_2prev));
107 **mP1 = mP1_prev + (dt / mParameters->T1) * (mDelOm_prev * mCb - mP1_prev);
108 **mP = (1.0 / mParameters->R) * (mP1_prev + mDelOm_prev * mCa);
112 mDerPgv = (1.0 / mParameters->T3) * (mPref + **mP - **mPgv);
113 if (mDerPgv < mParameters->dPmin)
114 mDerPgv = mParameters->dPmin;
115 if (mDerPgv > mParameters->dPmax)
116 mDerPgv = mParameters->dPmax;
117 mDerPgv = mDerPgv - mParameters->Kbc * (**mPgvLim - **mPgv);
119 **mPgvLim = **mPgvLim + dt * mDerPgv;
122 if (**mPgvLim < mParameters->Pmin)
123 **mPgv = mParameters->Pmin;
124 else if (**mPgvLim > mParameters->Pmax)
125 **mPgv = mParameters->Pmax;
void initializeStates(Real Pref) final
Set steady-state initial values (call after setParameters, before first step)
Real step(Real Omega, Real dt) final
Step the governor and return the valve/gate opening signal Pgv.
Logger::Log mSLog
Component logger.