13 std::shared_ptr<Base::ExciterParameters> parameters) {
15 if (
auto params = std::dynamic_pointer_cast<Signal::ExciterStaticParameters>(
19 if (mParameters->Tb == 0) {
20 SPDLOG_LOGGER_ERROR(
mSLog,
"ExciterStatic: Tb must be non-zero (used as "
21 "divisor in lead-lag block)");
24 if (mParameters->Te == 0) {
25 SPDLOG_LOGGER_ERROR(
mSLog,
"ExciterStatic: Te must be non-zero (used as "
26 "divisor in exciter output)");
30 if (mParameters->Ta == mParameters->Tb) {
33 "ExciterStatic: Ta == Tb; lead-lag block reduces to unity gain "
34 "(Cb=0, Xb has no effect on output). Simulation proceeds normally.");
37 SPDLOG_LOGGER_INFO(
mSLog,
38 "\nExciteStatic parameters:"
47 mParameters->Tr, mParameters->Ta, mParameters->Tb,
48 mParameters->Te, mParameters->Ka, mParameters->MaxEfd,
49 mParameters->MinEfd, mParameters->Kbc);
52 mSLog,
"Type of parameters class of {} has to be ExciterStatic!",
64 if ((Ef_init > mParameters->MaxEfd) || (Ef_init < mParameters->MinEfd)) {
65 SPDLOG_LOGGER_ERROR(
mSLog,
66 "\nERROR: The initialisation is bad, Ef_init out of "
67 "allowed band ({}<Ef_init<{}).",
68 mParameters->MinEfd, mParameters->MaxEfd);
73 mCa = mParameters->Ta / mParameters->Tb;
74 mCb = (mParameters->Tb - mParameters->Ta) / mParameters->Tb;
81 mVe = mEfd / mParameters->Ka;
84 mVin = mVe / (mCa + mCb);
93 SPDLOG_LOGGER_INFO(
mSLog,
94 "\nExciter Initialization"
95 "\nExciter type: ExciterStatic"
96 "\nInitially set excitation system initial values:"
99 "\nCalculated set poit and auxilary state variables:"
103 mVh, mEfd, mVref, mXb, mVin);
110 mVh = sqrt(pow(mVd, 2.) + pow(mVq, 2.));
117 if (mParameters->Tr > 0)
118 mVr = mVr_prev + dt / mParameters->Tr * (mVh - mVr_prev);
123 mVin = mVref - mVr + Vpss;
126 mXb = mXb_prev + (mVin - mXb_prev) * dt / mParameters->Tb;
129 mVe = mVin * mCa + mXb_prev * mCb - mParameters->Kbc * (mEfd - mEfdLim);
130 mEfd = mEfd + (dt / mParameters->Te) * (mParameters->Ka * mVe - mEfd);
131 if (mEfd > mParameters->MaxEfd)
132 mEfdLim = mParameters->MaxEfd;
133 else if (mEfd < mParameters->MinEfd)
134 mEfdLim = mParameters->MinEfd;