📄 fm_ssr.m
字号:
function fm_ssr(flag)% FM_SSR Model of the synchronous machine with shaft dynamics and compensated line%% FM_SSR(FLAG)% FLAG = 0 initializations% FLAG = 1 algebraic equations% FLAG = 2 algebraic Jacobians% FLAG = 3 differential equations% FLAG = 4 state matrix% FLAG = 5 non-windup limits%%Author: Federico Milano%Date: 11-Nov-2002%Version: 1.0.0%%E-mail: fmilano@thunderbox.uwaterloo.ca%Web-site: http://thunderbox.uwaterloo.ca/~fmilano%% Copyright (C) 2002-2006 Federico Milanoglobal SSR DAE Bus Settings PV jayid = DAE.x(SSR.Id);iq = DAE.x(SSR.Iq);If = DAE.x(SSR.If);ed = DAE.x(SSR.Edc);eq = DAE.x(SSR.Eqc);w1 = DAE.x(SSR.omega_HP);w2 = DAE.x(SSR.omega_IP);w3 = DAE.x(SSR.omega_LP);w4 = DAE.x(SSR.omega);w5 = DAE.x(SSR.omega_EX);t1 = DAE.x(SSR.delta_HP);t2 = DAE.x(SSR.delta_IP);t3 = DAE.x(SSR.delta_LP);t4 = DAE.x(SSR.delta);t5 = DAE.x(SSR.delta_EX);xd = SSR.con(:,5);xq = SSR.con(:,6);xad = SSR.con(:,8);xf = SSR.con(:,13);xl = SSR.con(:,10);xc = SSR.con(:,11);xeq = xad.*xad-xf.*(xd+xl);rf = SSR.con(:,12);ra = SSR.con(:,7);r = SSR.con(:,9);D1 = SSR.con(:,19);D2 = SSR.con(:,20);D3 = SSR.con(:,21);D4 = SSR.con(:,22);D5 = SSR.con(:,23);M1 = SSR.con(:,14);M2 = SSR.con(:,15);M3 = SSR.con(:,16);M4 = SSR.con(:,17);M5 = SSR.con(:,18);k12 = SSR.con(:,24);k23 = SSR.con(:,25);k34 = SSR.con(:,26);k45 = SSR.con(:,27);Tm = SSR.Tm;Efd = SSR.Efd;Wb = Settings.rad;V = DAE.V(SSR.bus);a = DAE.a(SSR.bus);cdt = cos(t4-a);sdt = sin(t4-a);switch flag case 0 % initialization VV = V.*exp(jay*a); S = Bus.Pg(SSR.bus) - jay*Bus.Qg(SSR.bus); I = S./conj(VV); delta = angle(VV + (ra+r + jay*(xq+xl-xc)).*I); cdt = cos(delta-a); sdt = sin(delta-a); Idq = I.*exp(-jay*(delta-pi/2)); Id = real(Idq); Iq = imag(Idq); If = (xl.*Id+(ra+r).*Iq+xd.*Id-xc.*Id+V.*cdt)./xad; Te = (xq-xd).*Id.*Iq+xad.*If.*Iq; delta_LP = Te./k34+delta; delta_IP = ((k23+k34).*delta_LP-k34.*delta)./k23; delta_HP = ((k12+k23).*delta_IP-k23.*delta_LP)./k12; B = (ra+r).*Id-xl.*Iq-xq.*Iq+xc.*Iq+V.*sdt; SSR.Tm = k12.*delta_HP-k12.*delta_IP; SSR.Efd = xf.*B./rf + xad.*If; DAE.x(SSR.Id) = Id; DAE.x(SSR.Iq) = Iq; DAE.x(SSR.If) = If; DAE.x(SSR.omega_HP) = 1; DAE.x(SSR.omega_IP) = 1; DAE.x(SSR.omega_LP) = 1; DAE.x(SSR.omega) = 1; DAE.x(SSR.omega_EX) = 1; DAE.x(SSR.Eqc) = -xc.*Id; DAE.x(SSR.Edc) = xc.*Iq; DAE.x(SSR.delta) = delta; DAE.x(SSR.delta_EX) = delta; DAE.x(SSR.delta_HP) = delta_HP; DAE.x(SSR.delta_IP) = delta_IP; DAE.x(SSR.delta_LP) = delta_LP; % find & delete static generators check = 1; for j = 1:SSR.n if ~fm_rmgen(SSR.bus(j)), check = 0; end end if ~check fm_disp('SSR models cannot be properly initialized.') else fm_disp('Initialization of SSR models completed.') end case 1 % algebraic equations DAE.gp = DAE.gp - sparse(SSR.bus,1,V.*sdt.*id+V.*cdt.*iq,Bus.n,1); DAE.gq = DAE.gq - sparse(SSR.bus,1,V.*cdt.*id-V.*sdt.*iq,Bus.n,1); case 2 % algebraic Jacobians DAE.J11 = DAE.J11 + sparse(SSR.bus,SSR.bus,V.*cdt.*id-V.*sdt.*iq,Bus.n,Bus.n); DAE.J12 = DAE.J12 - sparse(SSR.bus,SSR.bus,sdt.*id+cdt.*iq,Bus.n,Bus.n); DAE.J21 = DAE.J21 - sparse(SSR.bus,SSR.bus,V.*sdt.*id+V.*cdt.*iq,Bus.n,Bus.n); DAE.J22 = DAE.J22 + sparse(SSR.bus,SSR.bus,sdt.*iq-cdt.*id,Bus.n,Bus.n); case 3 % differential equations Te = ((xq-xd).*id+xad.*If).*iq; B = Wb*((ra+r).*id-(xl+w4.*xq).*iq+ed+V.*sdt); C = Wb*(rf.*Efd./xad-rf.*If); DAE.f(SSR.Id) = (xf.*B-xad.*C)./xeq; DAE.f(SSR.Iq) = -Wb*((xl+w4.*xd).*id+(ra+r).*iq-w4.*xad.*If+eq+V.*cdt)./(xq+xl); DAE.f(SSR.If) = (xad.*B-(xd+xl).*C)./xeq; DAE.f(SSR.Edc) = Wb*(xc.*id+eq); DAE.f(SSR.Eqc) = Wb*(xc.*iq-ed); DAE.f(SSR.omega_HP) = (Tm-D1.*(w1-1)+k12.*(t2-t1))./M1; DAE.f(SSR.omega_IP) = (-D2.*(w2-1)+k12.*(t1-t2)+k23.*(t3-t2))./M2; DAE.f(SSR.omega_LP) = (-D3.*(w3-1)+k23.*(t2-t3)+k34.*(t4-t3))./M3; DAE.f(SSR.omega) = (-Te-D4.*(w4-1)+k34.*(t3-t4)+k45.*(t5-t4))./M4; DAE.f(SSR.omega_EX) = (-D5.*(w5-1)+k45.*(t4-t5))./M5; DAE.f(SSR.delta_HP) = Wb*(w1-1); DAE.f(SSR.delta_IP) = Wb*(w2-1); DAE.f(SSR.delta_LP) = Wb*(w3-1); DAE.f(SSR.delta) = Wb*(w4-1); DAE.f(SSR.delta_EX) = Wb*(w5-1); case 4 % Jacobians of state variables DAE.Fx = DAE.Fx + sparse(SSR.delta_HP,SSR.omega_HP,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.delta_IP,SSR.omega_IP,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.delta_LP,SSR.omega_LP,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.delta,SSR.omega,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.delta_EX,SSR.omega_EX,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_HP,SSR.omega_HP,D1./M1,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_HP,SSR.delta_HP,k12./M1,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega_HP,SSR.delta_IP,k12./M1,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_IP,SSR.omega_IP,D2./M2,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega_IP,SSR.delta_HP,k12./M2,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_IP,SSR.delta_IP,(k12+k23)./M2,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega_IP,SSR.delta_LP,k23./M2,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_LP,SSR.omega_LP,D3./M3,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega_LP,SSR.delta_IP,k23/M3,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_LP,SSR.delta_LP,(k23+k34)./M3,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega_LP,SSR.delta,k34./M3,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_EX,SSR.omega_EX,D5./M5,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega_EX,SSR.delta,k45./M5,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega_EX,SSR.delta_EX,k45./M5,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega,SSR.delta_LP,k34./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega,SSR.delta,(k34+k45)./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.omega,SSR.delta_EX,k45./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega,SSR.omega,D4./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega,SSR.Id,(xq-xd).*iq./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega,SSR.Iq,((xq-xd).*id+xad.*If)./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.omega,SSR.If,xad.*iq./M4,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Edc,SSR.Id,Wb*xc,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Edc,SSR.Eqc,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Eqc,SSR.Iq,Wb*xc,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.Eqc,SSR.Edc,Wb,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Id,SSR.Id,Wb*xf.*(ra+r)./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.Id,SSR.Iq,Wb*xf.*(xl+w4.*xq)./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Id,SSR.If,Wb*xad.*rf./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Id,SSR.Edc,Wb*xf./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.Id,SSR.omega,Wb*xf.*iq.*xq./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Id,SSR.delta,Wb*V.*xf.*cdt./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.If,SSR.Id,Wb*xad.*(ra+r)./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.If,SSR.Iq,Wb*xad.*(xl+w4.*xq)./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.If,SSR.If,Wb*(xd+xl).*rf./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.If,SSR.Edc,Wb*xad./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.If,SSR.omega,Wb*xad.*iq.*xq./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.If,SSR.delta,Wb*xad.*V.*cdt./xeq,DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.Iq,SSR.Id,Wb*(xl+w4.*xd)./(xq+xl),DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.Iq,SSR.Iq,Wb*(ra+r)./(xq+xl),DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Iq,SSR.If,Wb*(w4.*xad)./(xq+xl),DAE.n,DAE.n); DAE.Fx = DAE.Fx - sparse(SSR.Iq,SSR.Eqc,Wb./(xq+xl),DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Iq,SSR.omega,Wb*(If.*xad-xd.*id)./(xq+xl),DAE.n,DAE.n); DAE.Fx = DAE.Fx + sparse(SSR.Iq,SSR.delta,Wb*V.*sdt./(xq+xl),DAE.n,DAE.n); DAE.Fy = DAE.Fy - sparse(SSR.Id,SSR.bus,Wb*V.*cdt.*xf./xeq,DAE.n,2*Bus.n); DAE.Fy = DAE.Fy + sparse(SSR.Id,SSR.bus+Bus.n,Wb*sdt.*xf./xeq,DAE.n,2*Bus.n); DAE.Fy = DAE.Fy - sparse(SSR.If,SSR.bus,Wb*V.*cdt.*xad./xeq,DAE.n,2*Bus.n); DAE.Fy = DAE.Fy + sparse(SSR.If,SSR.bus+Bus.n,Wb*sdt.*xad./xeq,DAE.n,2*Bus.n); DAE.Fy = DAE.Fy - sparse(SSR.Iq,SSR.bus,Wb*V.*sdt./(xq+xl),DAE.n,2*Bus.n); DAE.Fy = DAE.Fy - sparse(SSR.Iq,SSR.bus+Bus.n,Wb*cdt./(xq+xl),DAE.n,2*Bus.n); DAE.Gx = DAE.Gx - sparse(SSR.bus,SSR.Id,V.*sdt,2*Bus.n,DAE.n); DAE.Gx = DAE.Gx - sparse(SSR.bus+Bus.n,SSR.Id,V.*cdt,2*Bus.n,DAE.n); DAE.Gx = DAE.Gx - sparse(SSR.bus,SSR.Iq,V.*cdt,2*Bus.n,DAE.n); DAE.Gx = DAE.Gx + sparse(SSR.bus+Bus.n,SSR.Iq,V.*sdt,2*Bus.n,DAE.n); DAE.Gx = DAE.Gx + sparse(SSR.bus,SSR.delta,-V.*cdt.*id+V.*sdt.*iq,2*Bus.n,DAE.n); DAE.Gx = DAE.Gx + sparse(SSR.bus+Bus.n,SSR.delta,V.*sdt.*id+V.*cdt.*iq,2*Bus.n,DAE.n);end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -