DPsim
Loading...
Searching...
No Matches
ExciterST1Simp.cpp
1// SPDX-FileCopyrightText: 2025 Institute for Automation of Complex Power Systems, EONERC, RWTH Aachen University
2// SPDX-License-Identifier: MPL-2.0
3
4#include <dpsim-models/Signal/ExciterST1Simp.h>
5
6using namespace CPS;
7
9 CPS::Logger::Level logLevel)
10 : SimSignalComp(name, name, logLevel) {}
11
13 std::shared_ptr<Base::ExciterParameters> parameters) {
14
15 if (auto params =
16 std::dynamic_pointer_cast<Signal::ExciterST1Parameters>(parameters)) {
17 mParameters = params;
18
19 if (mParameters->Tr == 0) {
20 SPDLOG_LOGGER_ERROR(mSLog, "ExciterST1Simp: Tr must be non-zero (used as "
21 "divisor in voltage transducer)");
23 }
24 if (mParameters->Ka == 0) {
25 SPDLOG_LOGGER_ERROR(
26 mSLog, "ExciterST1Simp: Ka must be non-zero (used as divisor "
27 "when computing initial voltage reference)");
29 }
30
31 SPDLOG_LOGGER_INFO(mSLog,
32 "Exciter ST1Simp parameters:"
33 "\nTr: {:e}"
34 "\nKa: {:e}\n",
35 mParameters->Tr, mParameters->Ka);
36 } else {
37 SPDLOG_LOGGER_ERROR(
38 mSLog, "Type of parameters class of {} has to be ExciterST1Simp!",
39 this->name());
40 throw CPS::TypeException();
41 }
42}
43
44void Signal::ExciterST1Simp::initializeStates(Real Vh_init, Real Ef_init) {
45
46 mVh = Vh_init;
47 mEf = Ef_init;
48
49 SPDLOG_LOGGER_INFO(mSLog,
50 "Initially set excitation system initial values:"
51 "\ninit Vh: {:e}"
52 "\ninit Ef: {:e}",
53 mVh, mEf);
54
56 mVr = mVh;
57
59 mVref = mVr - mEf / mParameters->Ka;
60
61 SPDLOG_LOGGER_INFO(mSLog,
62 "Actually applied excitation system initial values:"
63 "\nVref : {:e}"
64 "\ninit Vr: {:e}",
65 mVref, mVr);
66 mSLog->flush();
67}
68
69Real Signal::ExciterST1Simp::step(Real Vd, Real Vq, Real dt, Real Vpss) {
70 // Voltage magnitude calculation
71 mVh = sqrt(pow(Vd, 2.) + pow(Vq, 2.));
72
73 // update state variables at time k-1
74 mVr_prev = mVr;
75
76 // compute state variables at time k using euler forward
77
78 // Voltage Transducer
79 mVr = mVr_prev + dt / mParameters->Tr * (mVh - mVr_prev);
80
81 // Exciter output
82 mEf = (mVr + Vpss - mVref) * mParameters->Ka;
83
84 return mEf;
85}
void initializeStates(Real Vh_init, Real Vf_init) final
Initializes exciter variables.
Real step(Real Vd, Real Vq, Real dt, Real Vpss=0) final
Performs an step to update field voltage value.
ExciterST1Simp(const String &name, Logger::Level logLevel=Logger::Level::info)
Constructor.
void setParameters(std::shared_ptr< Base::ExciterParameters > parameters) final
Initializes exciter parameters.
Logger::Log mSLog
Component logger.