DPsim
Loading...
Searching...
No Matches
TurbineGovernorType1.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Institute for Automation of Complex Power Systems, EONERC, RWTH Aachen University
2// SPDX-License-Identifier: MPL-2.0
3
6
7using namespace CPS;
8using namespace CPS::Signal;
9
11 CPS::Logger::Level logLevel)
12 : SimSignalComp(name, name, logLevel),
13 mXg1(mAttributes->create<Real>("Xg1")),
14 mXg2(mAttributes->create<Real>("Xg2")),
15 mXg3(mAttributes->create<Real>("Xg3")),
16 mTm(mAttributes->create<Real>("Tm")) {}
17
19 Real Ts, Real R, Real Tmin, Real Tmax,
20 Real OmRef) {
21 if (Ts == 0) {
22 SPDLOG_LOGGER_ERROR(mSLog, "Ts must not be zero for {}", this->name());
24 }
25 if (Tc == 0) {
26 SPDLOG_LOGGER_ERROR(mSLog, "Tc must not be zero for {}", this->name());
28 }
29 if (T5 == 0) {
30 SPDLOG_LOGGER_ERROR(mSLog, "T5 must not be zero for {}", this->name());
32 }
33 if (R == 0) {
34 SPDLOG_LOGGER_ERROR(mSLog, "R must not be zero for {}", this->name());
36 }
37 mT3 = T3;
38 mT4 = T4;
39 mT5 = T5;
40 mTc = Tc;
41 mTs = Ts;
42 mR = R;
43 mTmin = Tmin;
44 mTmax = Tmax;
45 mOmRef = OmRef;
46
47 SPDLOG_LOGGER_INFO(mSLog,
48 "TurbineGovernorType1 parameters: "
49 "\nT3: {:e}"
50 "\nT4: {:e}"
51 "\nT5: {:e}"
52 "\nTc: {:e}"
53 "\nTs: {:e}"
54 "\nR: {:e}"
55 "\nTmin: {:e}"
56 "\nTmax: {:e}"
57 "\nOmRef: {:e}",
58 mT3, mT4, mT5, mTc, mTs, mR, mTmin, mTmax, mOmRef);
59}
60
62 mTmRef = TmRef;
63 **mXg1 = TmRef;
64 **mXg2 = (1 - mT3 / mTc) * **mXg1;
65 **mXg3 = (1 - mT4 / mT5) * (**mXg2 + mT3 / mTc * **mXg1);
66 **mTm = **mXg3 + mT4 / mT5 * (**mXg2 + mT3 / mTc * **mXg1);
67
68 mXg1_prev = **mXg1;
69 mXg2_prev = **mXg2;
70 mXg3_prev = **mXg3;
71
72 SPDLOG_LOGGER_INFO(mSLog,
73 "Governor initial values: \n"
74 "\nTorder: {:f}"
75 "\nXg1: {:f}"
76 "\nXg2: {:f}"
77 "\nXg3: {:f}"
78 "\nTm: {:f}",
79 mTmRef, **mXg1, **mXg2, **mXg3, **mTm);
80}
81
83
85 mXg1_prev = **mXg1;
86 mXg2_prev = **mXg2;
87 mXg3_prev = **mXg3;
88
90 Real Tin = mTmRef + (mOmRef - Omega) / mR;
91 if (Tin > mTmax)
92 Tin = mTmax;
93 if (Tin < mTmin)
94 Tin = mTmin;
95
97 **mXg1 = Math::StateSpaceEuler(mXg1_prev, -1 / mTs, 1 / mTs, dt, Tin);
98
100 **mXg2 = Math::StateSpaceEuler(mXg2_prev, -1 / mTc, (1 - mT3 / mTc) / mTc, dt,
101 mXg1_prev);
102
104 **mXg3 = Math::StateSpaceEuler(mXg3_prev, -1 / mT5, (1 - mT4 / mT5) / mT5, dt,
105 (mXg2_prev + mT3 / mTc * mXg1_prev));
106
108 **mTm = **mXg3 + mT4 / mT5 * (**mXg2 + mT3 / mTc * **mXg1);
109
110 return **mTm;
111}
AttributeList::Ptr mAttributes
Attribute List.
spdlog::level::level_enum Level
Definition Logger.h:33
static Matrix StateSpaceEuler(Matrix states, Matrix A, Matrix B, Real dt, Matrix u)
void setParameters(Real T3, Real T4, Real T5, Real Tc, Real Ts, Real R, Real Tmin, Real Tmax, Real OmRef)
Initializes exciter parameters.
TurbineGovernorType1(const String &name, Logger::Level logLevel=Logger::Level::off)
Real step(Real Omega, Real dt)
Performs an step to update field voltage value.
SimSignalComp(String uid, String name, Logger::Level logLevel=Logger::Level::off)
Logger::Log mSLog
Component logger.
std::string String
Definition Definitions.h:65
double Real
Definition Definitions.h:62