12 std::shared_ptr<Base::ExciterParameters> parameters) {
15 std::dynamic_pointer_cast<Signal::ExciterDC1Parameters>(parameters)) {
18 if (mParameters->Tr == 0) {
19 SPDLOG_LOGGER_ERROR(
mSLog,
"ExciterDC1: Tr must be non-zero (used as "
20 "divisor in voltage transducer)");
23 if (mParameters->Tb == 0) {
24 SPDLOG_LOGGER_ERROR(
mSLog,
"ExciterDC1: Tb must be non-zero (used as "
25 "divisor in regulator lead-lag block)");
28 if (mParameters->Ta == 0) {
31 "ExciterDC1: Ta must be non-zero (used as divisor in amplifier)");
34 if (mParameters->Tf == 0) {
35 SPDLOG_LOGGER_ERROR(
mSLog,
36 "ExciterDC1: Tf must be non-zero (used as divisor in "
37 "stabilizing feedback)");
40 if (mParameters->Tef == 0) {
41 SPDLOG_LOGGER_ERROR(
mSLog,
"ExciterDC1: Tef must be non-zero (used as "
42 "divisor in exciter output)");
45 if (mParameters->Ka == 0) {
47 mSLog,
"ExciterDC1: Ka must be non-zero (used as divisor when "
48 "computing initial amplifier input)");
52 SPDLOG_LOGGER_INFO(
mSLog,
53 "\nExciterDC1 parameters:"
66 "\nMaximum amplifier Voltage: {:e}"
67 "\nMinimum amplifier Voltage: {:e}\n",
68 mParameters->Tr, mParameters->Ta, mParameters->Ka,
69 mParameters->Tb, mParameters->Tc, mParameters->Tef,
70 mParameters->Kef, mParameters->Tf, mParameters->Kf,
71 mParameters->Aef, mParameters->Bef, mParameters->MaxVa,
75 mSLog,
"Type of parameters class of {} has to be ExciterDC1Parameters!",
86 SPDLOG_LOGGER_INFO(
mSLog,
87 "Initially set excitation system initial values:"
99 mVsat = mParameters->Aef * exp(mParameters->Bef * abs(mEf));
102 mVa = mParameters->Kef * mEf + mVsat * mEf;
103 if (mVa > mParameters->MaxVa)
104 mVa = mParameters->MaxVa;
105 if (mVa < mParameters->MinVa)
106 mVa = mParameters->MinVa;
109 mVin = mVa / mParameters->Ka;
118 if (std::abs(mEf - mVa / (mVsat + mParameters->Kef)) > DOUBLE_EPSILON)
119 SPDLOG_LOGGER_WARN(
mSLog,
"\nInitial conditions are not consistent!!!");
121 SPDLOG_LOGGER_INFO(
mSLog,
122 "Actually applied excitation system initial values:"
129 mVref, mVr, mVf, mVb, mVin, mVa);
135 mVh = sqrt(pow(Vd, 2.) + pow(Vq, 2.));
148 mVsat = mParameters->Aef * exp(mParameters->Bef * abs(mEf_prev));
151 mVr = mVr_prev + dt / mParameters->Tr * (mVh - mVr_prev);
154 mVb = mVb_prev * (1 - dt / mParameters->Tb) +
155 dt / mParameters->Tb * (mVref + Vpss - mVr_prev - mVf_prev);
156 mVin = dt * (mParameters->Tc / mParameters->Tb) *
157 (mVref + Vpss - mVr_prev - mVf_prev - mVb_prev) +
162 dt / mParameters->Ta * (mVin_prev * mParameters->Ka - mVa_prev);
163 if (mVa > mParameters->MaxVa)
164 mVa = mParameters->MaxVa;
165 if (mVa < mParameters->MinVa)
166 mVa = mParameters->MinVa;
169 mVf = (1. - dt / mParameters->Tf) * mVf_prev +
170 dt * mParameters->Kf / (mParameters->Tf * mParameters->Tef) *
171 (mVa_prev - (mVsat + mParameters->Kef) * mEf_prev);
174 mEf = mEf_prev + dt / mParameters->Tef *
175 (mVa_prev - (mVsat + mParameters->Kef) * mEf_prev);