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

其他行业

开发平台:

Matlab

  1. % The program llfault is designed for the line-to-line
  2. % fault analysis of a power system network. The program requires
  3. % the positive- and negative-sequence bus impedance matrices,
  4. % Zbus1, and Zbus2.The bus impedances matrices may be defined
  5. % by the user, obtained by the inversion of Ybus or it may be
  6. % determined either from the function Zbus = zbuild(zdata)
  7. % or the function Zbus = zbuildpi(linedata, gendata, yload).
  8. % The program prompts the user to enter the faulted bus number
  9. % and the fault impedance Zf. The prefault bus voltages are
  10. % defined by the reserved Vector V. The array V may be defined or
  11. % it is returned from the power flow programs lfgauss, lfnewton,
  12. % decouple or perturb. If V does not exist the prefault bus voltages
  13. % are automatically set to 1.0 per unit. The program obtains the
  14. % total fault current, bus voltages and line currents during the fault.
  15. %
  16. % Copyright (C) 1998 Hadi Saadat
  17. function llfault(zdata1, Zbus1, zdata2, Zbus2, V)
  18. if exist('zdata2') ~= 1
  19. zdata2=zdata1;
  20. else, end
  21. if exist('Zbus2') ~= 1
  22. Zbus2=Zbus1;
  23. else, end
  24. nl = zdata1(:,1); nr = zdata1(:,2);
  25. R1 = zdata1(:,3); X1 = zdata1(:,4);
  26. R2 = zdata2(:,3); X2 = zdata2(:,4);
  27. ZB1 = R1 + j*X1;  ZB2 = R2 + j*X2;
  28. nbr=length(zdata1(:,1)); nbus = max(max(nl), max(nr));
  29. if exist('V') == 1
  30.     if length(V) == nbus
  31.     V0 = V;
  32.     else, end
  33. else,  V0 = ones(nbus, 1) + j*zeros(nbus, 1);
  34. end
  35. fprintf('nLine-to-line fault analysis n')
  36. ff = 999;
  37. while ff > 0
  38. nf = input('Enter Faulted Bus No. -> ');
  39. while nf <= 0 | nf > nbus
  40.      fprintf('Faulted bus No. must be between 1 & %g n', nbus)
  41.      nf = input('Enter Faulted Bus No. -> ');
  42.      end
  43. fprintf('nEnter Fault Impedance Zf = R + j*X in ')
  44. Zf = input('complex form (for bolted fault enter 0). Zf = ');
  45. fprintf('  n')
  46. fprintf('Line-to-line fault at bus No. %gn', nf)
  47. a =cos(2*pi/3)+j*sin(2*pi/3);
  48. sctm = [1   1   1; 1 a^2  a; 1 a  a^2];
  49. Ia0=0;
  50. Ia1 = V0(nf)/(Zbus1(nf,nf)+Zbus2(nf, nf)+Zf); Ia2=-Ia1;
  51. I012=[Ia0; Ia1; Ia2];
  52. Ifabc = sctm*I012;
  53. Ifabcm = abs(Ifabc);
  54. fprintf('Total fault current = %9.4f per unitnn', Ifabcm(2))
  55. fprintf('Bus Voltages during the fault in per unit nn')
  56. fprintf('     Bus    -------Voltage Magnitude-------  n')
  57. fprintf('     No.    Phase a     Phase b     Phase c  n')
  58. for n = 1:nbus
  59. Vf0(n)= 0;
  60. Vf1(n)= V0(n) - Zbus1(n, nf)*Ia1;
  61. Vf2(n)= 0 - Zbus2(n, nf)*Ia2;
  62. Vabc = sctm*[Vf0(n); Vf1(n); Vf2(n)];
  63. Va(n)=Vabc(1); Vb(n)=Vabc(2); Vc(n)=Vabc(3);
  64. fprintf(' %5g',n)
  65. fprintf(' %11.4f', abs(Va(n))),fprintf(' %11.4f', abs(Vb(n)))
  66. fprintf(' %11.4fn', abs(Vc(n)))
  67. end
  68. fprintf('  n')
  69. fprintf('Line currents for fault at bus No.  %gnn', nf)
  70. fprintf('     From      To      -----Line Current Magnitude----  n')
  71. fprintf('     Bus       Bus     Phase a     Phase b     Phase c  n')
  72. for n= 1:nbus
  73.    for I = 1:nbr
  74.       if nl(I) == n | nr(I) == n
  75.          if nl(I) ==n       k = nr(I);
  76.          elseif nr(I) == n  k = nl(I);
  77.          end
  78.             if k ~= 0
  79.             Ink0(n, k) = 0;
  80.             Ink1(n, k) = (Vf1(n) - Vf1(k))/ZB1(I);
  81.             Ink2(n, k) =  (Vf2(n) - Vf2(k))/ZB2(I);
  82.             Inkabc = sctm*[Ink0(n, k); Ink1(n, k); Ink2(n, k)];
  83.             Inkabcm = abs(Inkabc); th=angle(Inkabc);
  84.                  if real(Inkabc(2)) < 0
  85.                fprintf('%7g', n), fprintf('%10g', k),
  86.                 fprintf(' %11.4f', abs(Inkabc(1))),fprintf(' %11.4f', abs(Inkabc(2)))
  87.                 fprintf(' %11.4fn', abs(Inkabc(3)))
  88.                 elseif real(Inkabc(2)) ==0 & imag(Inkabc(2)) > 0
  89.                 fprintf('%7g', n), fprintf('%10g', k),
  90.                 fprintf(' %11.4f', abs(Inkabc(1))),fprintf(' %11.4f', abs(Inkabc(2)))
  91.                 fprintf(' %11.4fn', abs(Inkabc(3)))
  92.                 else, end
  93.              else, end
  94.       else, end
  95.    end
  96.    if n==nf
  97.    fprintf('%7g',n), fprintf('         F'),
  98.    fprintf(' %11.4f', Ifabcm(1)),fprintf(' %11.4f', Ifabcm(2))
  99.    fprintf(' %11.4fn', Ifabcm(3))
  100.    else, end
  101. end
  102. resp=0;
  103.    while strcmp(resp, 'n')~=1 & strcmp(resp, 'N')~=1 & strcmp(resp, 'y')~=1 & strcmp(resp, 'Y')~=1
  104.    resp = input('Another fault location? Enter ''y'' or ''n'' within single quote -> ');
  105.    if strcmp(resp, 'n')~=1 & strcmp(resp, 'N')~=1 & strcmp(resp, 'y')~=1 & strcmp(resp, 'Y')~=1
  106.    fprintf('n Incorrect reply, try again nn'), end
  107.    end
  108.    if resp == 'y' | resp == 'Y'
  109.    nf = 999;
  110.    else ff = 0; end
  111. end   % end for while