Trstab.m
上传用户:eighthdate
上传日期:2014-05-24
资源大小:270k
文件大小:5k
源码类别:

其他行业

开发平台:

Matlab

  1. % TRANSIENT STABILITY ANALYSIS OF A MULTIMACHINE POWER SYSTEM NETWORK
  2. %
  3. % Program ``trstab'' must be used in conjuntion with the power flow
  4. % program. Any of the power flow programs ``lfgauss'', ``lfnewton'',
  5. % ``decoupled'' or ``perturb'' can be used prior to ``trstab'' program.
  6. % Power flow program provide the power, voltage magnitude and phase
  7. % angle for each bus. Also, the load admittances are returned in a
  8. % matrix named ``yload''.  In addition to the required power flow data,
  9. % Transient reactance, and inertia constant of each machine must be
  10. % specified.  This is defined in a matrix named ``gendata'', Each row
  11. % contain the bus No. to which a generator is connected, armature
  12. % resistance, transient reactance, and the machine inertia constant.
  13. % Program ``trstab'' obtains the prefault bus admittance matrix including
  14. % the load admittances. Voltage behind transient reactances are obtained.
  15. % The reduced admittance matrix before, during and after fault are found.
  16. % Machine equations are expressed in state variable form and the MATLAB
  17. % ode23 is used to solve the multimachine equations. The phase angle
  18. % difference of each machine with respect to the slack bus are plotted.
  19. % The simulation can be repeated for a different fault clearing time, or
  20. % a different fault location.
  21. %
  22. % Copyright (c) 1998 by H. Saadat
  23. %
  24. global Pm f H E  Y th ngg
  25. f=60;
  26. %zdd=gendata(:,2)+j*gendata(:,3);
  27. ngr=gendata(:,1);
  28. %H=gendata(:,4);
  29. ngg=length(gendata(:,1));
  30. %%
  31. for k=1:ngg
  32. zdd(ngr(k))=gendata(k, 2)+j*gendata(k,3);
  33. %H(ngr(k))=gendata(k, 4);
  34. H(k)=gendata(k,4);   % new
  35. end
  36. %%
  37. for k=1:ngg
  38. I=conj(S(ngr(k)))/conj(V(ngr(k)));
  39. %Ep(ngr(k)) = V(ngr(k))+zdd(ngr(k))*I;
  40. %Pm(ngr(k))=real(S(ngr(k)));
  41. Ep(k) = V(ngr(k))+zdd(ngr(k))*I;  % new
  42. Pm(k)=real(S(ngr(k)));            % new
  43. end
  44. E=abs(Ep); d0=angle(Ep);
  45. for k=1:ngg
  46. nl(nbr+k) = nbus+k;
  47. nr(nbr+k) = gendata(k, 1);
  48. %R(nbr+k)  = gendata(k, 2);
  49. %X(nbr+k)  = gendata(k, 3);
  50. R(nbr+k)  = real(zdd(ngr(k)));
  51. X(nbr+k)  = imag(zdd(ngr(k)));
  52. Bc(nbr+k)  = 0;
  53. a(nbr+k) = 1.0;
  54. yload(nbus+k)=0;
  55. end
  56. nbr1=nbr; nbus1=nbus;
  57. nbrt=nbr+ngg;
  58. nbust=nbus+ngg;
  59. linedata=[nl, nr, R, X, -j*Bc, a];
  60. [Ybus, Ybf]=ybusbf(linedata, yload, nbus1,nbust);
  61. fprintf('nPrefault reduced bus admittance matrix n')
  62. Ybf
  63. Y=abs(Ybf); th=angle(Ybf);
  64. Pm=zeros(1, ngg);
  65. disp(['      G(i)    E''(i)     d0(i)      Pm(i)'])
  66. for ii = 1:ngg
  67. for jj = 1:ngg
  68. Pm(ii) = Pm(ii) + E(ii)*E(jj)*Y(ii, jj)*cos(th(ii, jj)-d0(ii)+d0(jj));
  69. end,
  70. fprintf('       %g', ngr(ii)), fprintf('   %8.4f',E(ii)), fprintf('   %8.4f', 180/pi*d0(ii))
  71. fprintf('  %8.4f n',Pm(ii))
  72. end
  73. respfl='y';
  74. while respfl =='y' | respfl=='Y'
  75. nf=input('Enter faulted bus No. -> ');
  76. fprintf('nFaulted reduced bus admittance matrixn')
  77. Ydf=ybusdf(Ybus, nbus1, nbust, nf)
  78. %Fault cleared
  79. [Yaf]=ybusaf(linedata, yload, nbus1,nbust, nbrt);
  80. fprintf('nPostfault reduced bus admittance matrixn')
  81. Yaf
  82. resptc='y';
  83. while resptc =='y' | resptc=='Y'
  84. tc=input('Enter clearing time of fault in sec. tc = ');
  85. tf=input('Enter final simulation time in sec.  tf = ');
  86. clear t  x  del
  87. t0 = 0;
  88. w0=zeros(1, length(d0));
  89. x0 = [d0,  w0];
  90. tol=0.0001;
  91. Y=abs(Ydf); th=angle(Ydf);
  92. %[t1, xf] =ode23('dfpek', t0, tc, x0, tol);  % Solution during fault (use with MATLAB 4)
  93. tspan=[t0, tc];                                        %use with MATAB 5
  94. [t1, xf] =ode23('dfpek', tspan, x0);  % Solution during fault (use with MATLAB 5)
  95. x0c =xf(length(xf), :);
  96. Y=abs(Yaf); th=angle(Yaf);
  97. %[t2,xc] =ode23('afpek', tc, tf, x0c, tol); % Postfault solution (use with MATLAB 4)
  98. tspan = [tc, tf];                           % use with MATLAB 5
  99. [t2,xc] =ode23('afpek', tspan, x0c);        % Postfault solution (use with MATLAB 5)
  100. t =[t1; t2]; x = [xf; xc];
  101. fprintf('nFault is cleared at %4.3f Sec. n', tc)
  102. for k=1:nbus
  103.     if kb(k)==1
  104.     ms=k; else, end
  105. end
  106. fprintf('nPhase angle difference of each machine n')
  107. fprintf('with respect to the slack in degree.n')
  108. fprintf('   t - sec')
  109. kk=0;
  110. for k=1:ngg
  111.     if k~=ms
  112.     kk=kk+1;
  113.     del(:,kk)=180/pi*(x(:,k)-x(:,ms));
  114.     fprintf('    d(%g,',ngr(k)), fprintf('%g)', ngr(ms))
  115.     else, end
  116. end
  117. fprintf(' n')
  118. disp([t, del])
  119. h=figure; figure(h)
  120. plot(t, del)
  121. title(['Phase angle difference (fault cleared at ', num2str(tc),'s)'])
  122. xlabel('t, sec'), ylabel('Delta, degree'), grid
  123.    resp=0;
  124.    while strcmp(resp, 'n')~=1 & strcmp(resp, 'N')~=1 & strcmp(resp, 'y')~=1 & strcmp(resp, 'Y')~=1
  125.    resp=input('Another clearing time of fault? Enter ''y'' or ''n'' within quotes -> ');
  126.    if strcmp(resp, 'n')~=1 & strcmp(resp, 'N')~=1 & strcmp(resp, 'y')~=1 & strcmp(resp, 'Y')~=1
  127.    fprintf('n Incorrect reply, try again nn'), end
  128.    end
  129. resptc=resp;
  130. end
  131.     resp2=0;
  132.     while strcmp(resp2, 'n')~=1 & strcmp(resp2, 'N')~=1 & strcmp(resp2, 'y')~=1 & strcmp(resp2, 'Y')~=1
  133.     resp2=input('Another fault location: Enter ''y'' or ''n'' within quotes -> ');
  134.     if strcmp(resp2, 'n')~=1 & strcmp(resp2, 'N')~=1 & strcmp(resp2, 'y')~=1 & strcmp(resp2, 'Y')~=1
  135.     fprintf('n Incorrect reply, try again nn'), end
  136.     respf1=resp2;
  137.     end
  138.     if respf1=='n' | respf1=='N', return, else, end
  139. end