You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
powersas.m/EMT/generator_states.m

48 lines
2.2 KiB

function [Vt,dta,Id, Iq, Edp, Eqp, Edpp, Eqpp, Pm, Efd, Sys, omg, V1, efd, P1, P2, Epp] = generator_states(mpc, Sys, Base);
%GENERATOR_STATES calculates generator states for a given power system
%% generator inside states
Vtx = mpc.bus(:,8).*cos(mpc.bus(:,9)*pi/180);
Vty = mpc.bus(:,8).*sin(mpc.bus(:,9)*pi/180);
Vt = Vtx + 1i*Vty; % terminal voltage phasor value
Vt_gen = Vt(Sys.GenIdx,:); % terminal voltage of generator bus
GenPQ = (mpc.gen(:,2)+1i*mpc.gen(:,3))./Base;
It_gen = conj(GenPQ./Vt_gen); % current injection
Zbranch = mpc.branch(1,3)+1i*mpc.branch(1,4);
Ibr=(Vt(1,:)-Vt(5,:))/Zbranch;
EQ = Vt_gen + (Sys.Ra+1i*Sys.Xq).*It_gen;
dta = angle(EQ); % rotor angle, angle of Eq, not angle of E''
omg = zeros(length(Sys.GenIdx),1); % rotor speed
% next step, because the past calculation starts from Vt It, which are grid reference based
% thus the E' E'' are also grid state, we need to change it to d,q state
% from grid to d,q, multiply exp(-j(delta-pi/2))
Vt_gen = Vt_gen.*exp(1i*(pi/2-dta)); % d-q based
It_gen = It_gen.*exp(1i*(pi/2-dta));
Id = real(It_gen);
Iq = imag(It_gen);
% Ed''= real(E''), Eq''=imag(E'')
Ep = Vt_gen + Sys.Ra.*It_gen -Sys.Xqp.*Iq+1i*Sys.Xdp.*Id; % d-q based
Edp = real(Ep); % real of E' , d-q based
Eqp = imag(Ep); % imag of E' , d-q based
Epp = Vt_gen + Sys.Ra.*It_gen -Sys.Xqpp.*Iq+1i*Sys.Xdpp.*Id; % d-q based
Edpp = real(Epp); % real of E''
Eqpp = imag(Epp); % imag of E''
Pe = real(GenPQ) + (abs(It_gen).^2).*Sys.Ra; % electrical power
Pm = Pe + Sys.D.*omg./Sys.w0; % mechanical power
% exciter field voltage from 6th-order equation, derivative=0
Efd = (Sys.Xd-Sys.Xdpp)./(Sys.Xdp-Sys.Xdpp).*Eqp - (Sys.Xd-Sys.Xdp)./(Sys.Xdp-Sys.Xdpp).*Eqpp;
efd = Efd.*Sys.Rfd./Sys.Lad; % transfer to efd
% set Vref for exciter equation
% from transfer equation, steady state Vref-Et-V1=0
Sys.Vref = abs(Epp)+ abs(Efd)./Sys.Ek; % abs(Vt_gen) changed to abs(Epp)
V1 = abs(Efd)./Sys.Ek; % V1 is a mid-term in exciter
% from transfer equation,steady state Pref=P1*Gr; P1=P2; Pm=P2;
Sys.Pref = Pm.*Sys.Gr;
P1 = Pm;
P2 = Pm;