4#include <dpsim-models/Signal/HydroTurbineGovernor.h>
7using namespace CPS::Signal;
9Signal::HydroTurbineGovernor::HydroTurbineGovernor(
const String &name,
10 CPS::Logger::Level logLevel)
12 mDelOm(mAttributes->create<Real>(
"DelOm")),
13 mX1(mAttributes->create<Real>(
"X1")),
14 mX2(mAttributes->create<Real>(
"X2")),
15 mPgv(mAttributes->create<Real>(
"Pgv")) {}
17void HydroTurbineGovernor::setParameters(
18 std::shared_ptr<Base::GovernorParameters> parameters) {
20 std::dynamic_pointer_cast<Signal::HydroGovernorParameters>(parameters);
24 "Type of parameters class of {} has to be HydroGovernorParameters!",
26 throw CPS::TypeException();
29 SPDLOG_LOGGER_ERROR(
mSLog,
"R must be positive for {}", this->name());
30 throw CPS::InvalidArgumentException();
32 if (params->T1 <= 0) {
33 SPDLOG_LOGGER_ERROR(
mSLog,
"T1 must be positive for {}", this->name());
34 throw CPS::InvalidArgumentException();
36 if (params->T3 <= 0) {
37 SPDLOG_LOGGER_ERROR(
mSLog,
"T3 must be positive for {}", this->name());
38 throw CPS::InvalidArgumentException();
40 if (params->T1 == params->T3) {
41 SPDLOG_LOGGER_ERROR(
mSLog,
"T1 must not equal T3 for {}", this->name());
42 throw CPS::InvalidArgumentException();
46 SPDLOG_LOGGER_INFO(
mSLog,
47 "\nHydro Governor parameters:"
55 mParameters->OmRef, mParameters->R, mParameters->T1,
56 mParameters->T2, mParameters->T3, mParameters->Pmax,
62 if (Pref < mParameters->Pmin || Pref > mParameters->Pmax) {
65 "Pref of hydro governor {} must be in [Pmin, Pmax] = [{:f}, {:f}] pu",
66 this->name(), mParameters->Pmin, mParameters->Pmax);
79 (mParameters->T1 - mParameters->T2) / (mParameters->T1 - mParameters->T3);
81 (mParameters->T2 - mParameters->T3) / (mParameters->T1 - mParameters->T3);
83 SPDLOG_LOGGER_INFO(
mSLog,
84 "\nHydro Governor initial values:"
90 mPref, **mDelOm, **mX1, **mX2, **mPgv);
96 mDelOm_prev = **mDelOm;
101 **mDelOm = mParameters->OmRef - Omega;
104 **mX1 = mX1_prev + (dt / mParameters->T1) * (mDelOm_prev - mX1_prev);
105 **mX2 = mX2_prev + (dt / mParameters->T3) * (mDelOm_prev - mX2_prev);
108 Real Pgv_raw = mPref + (1.0 / mParameters->R) * (**mX1 * mCa + **mX2 * mCb);
111 if (Pgv_raw > mParameters->Pmax)
112 **mPgv = mParameters->Pmax;
113 else if (Pgv_raw < mParameters->Pmin)
114 **mPgv = mParameters->Pmin;
Real step(Real Omega, Real dt) final
Step the governor and return the valve/gate opening signal Pgv.
void initializeStates(Real Pref) final
Set steady-state initial values (call after setParameters, before first step)
Logger::Log mSLog
Component logger.