You are on page 1of 5

# Ladder Technique for Three Phase Power Flow

Exercise
1.1.1. Based on three-phase models
The system shown in Error: Reference source not found can be solved using three-phase
models where we can consider the effect of the mutual impedances of the transmission
line in abc components. As this is a transmission system with transposition the effect of
the mutual impedances will not have much influence on the solution of the steady-state
values, but in abc components, one will be able to consider unbalanced conditions for
further development. The modified ladder technique can be used to solve this kind of
problems.
The ladder technique1 is composed of two parts:
i.
ii.

Forward sweep
Backward sweep

The forward sweep computes the downstream voltages from the source. To start the
process, the load currents are assumed to be equal to zero and the load voltages are
computed. In the first iteration the load voltages will be the same as the source voltages.
The backward sweep computes the currents from the load back to the source using the
most recently computed voltages from the forward sweep. This algorithm is
implemented in MATLAB based on the three-phase matrix equations derived from the
(supporting files are phasor2rec.m, and rec2phasor.m)
clear all, close all, clc
%% This is the Driving file that contains
% the Modified Ladder Iterative Technique algorithm
% Given line model data (zabc), (yabc)
% Source voltage VLGabc.n
% Load at node m in terms of impedance
%% ZabcT
XT = 2*pi*60*70.16E-3;
ZabcT = diag((1j*XT)*ones(1,3));

## 1 W. H. Kersting, Distribution System Modeling and Analysis, Third Edition. CRC

Press, 2012.

%% Transmission Line
% Length
LineLength = 24.14; % km
% Calculate approximate Zabc from 012 sequence networks
r0 = 0.3167;
l0 = 3.222E-3;
c0 = 0.00787E-6;
z0 = r0 + 1j*2*pi*60*l0;
y0 = 1j*2*pi*60*c0;
r1
l1
c1
z1
y1

=
=
=
=
=

0.0243;
0.9238E-3;
0.0126E-6;
r1 + 1j*2*pi*60*l1;
1j*2*pi*60*c1;

zseq = [z0 0 0;
0 z1 0;
0 0 z1]; % ohms/km
yseq = [y0 0 0;
0 y1 0;
0 0 y1]; % Siemens/km
as = -1/2+1j*sqrt(3)/2;
As = [1 1 1;
1 as^2 as
1 as as^2];
% Obtain the approximate phase impedance matrix [ohms/km]
zapprox = As*zseq*As^-1;
% Obtain the approximate phase admittance matrix [Siemens/km]
yapprox = As*yseq*As^-1;
% The total impedance matrix [Zabc] in ohms is
Zabc = zapprox*LineLength; %ohms
% The total admittance matrix [Yabc] in Siemens is
Yabc = yapprox*LineLength; %ohms
%
U
a
b
c
d
A
B

## Compute the generalized matrices

= eye(3);
= U + (1/2)*Zabc*Yabc;
= Zabc;
= Yabc + (1/4)*Yabc*Zabc*Yabc;
= a;
= a^-1;
= A*b;

%% ZabcTh
RTh = 0.714;
XTh = 2*pi*60*70.68E-3;

ZabcTh = diag((RTh+1j*XTh)*ones(1,3));
%% Line-to-ground voltage of the source VLGabcn [V]
% Magnitude of the line-to-ground voltage at the source
VLG = 230/sqrt(3); % V
% Line-to-groung voltage matrix at the source
VLGabc.Thev = [phasor2rec(VLG, 0);
phasor2rec(VLG, -80);
phasor2rec(VLG, 120)]; % V
Start = [0; 0; 0];
Tol = 0.0001;
Niter = 200;
% Use as starting point the load current Iabc equal to 0
Iabc.Bus1 = Start;
Iabc.Bus12 = Start;
Iabc.Bus13 = Start;
Vold = [Start; Start];
for iter = 0:Niter
disp('----------------------------')
fprintf('Iteration %d\n', iter);
%% Forward Sweep Calculates voltages
% Voltages at Bus1
VLGabc.Bus1 = VLGabc.Thev - ZabcTh*Iabc.Bus1;
disp('VLGabc.Bus1')
rec2phasor(VLGabc.Bus1);
% Knowing the Iabc.Bus12 and the VLGabc.Bus1, calculate VLGabc.Bus12
VLGabc.Bus12 = A*VLGabc.Bus1 - B*Iabc.Bus12;
disp('VLGabc.Bus12')
rec2phasor(VLGabc.Bus12);
% Knowing the Iabc.Bus13 and the VLGabc.Bus12, calculate VLGabc.Bus13
VLGabc.Bus13 = VLGabc.Bus12 - ZabcT*Iabc.Bus13;
disp('VLGabc.Bus13')
rec2phasor(VLGabc.Bus13);
%% Backward Sweep Calculates current
% With the calculated VLGabc.Bus13, recalculate Iabc.Bus13
disp('Iabc.Bus13')
rec2phasor(Iabc.Bus13);
% Since Transformer and Load are in series connection
Iabc.Bus12 = Iabc.Bus13;
disp('Iabc.Bus12')
rec2phasor(Iabc.Bus12);
% Since there is a T/L
% Line current Iabc.Bus1
disp('Iabc.Bus1')
Iabc.Bus1 = c*VLGabc.Bus12 + d*Iabc.Bus12;

rec2phasor(Iabc.Bus1);
% Error calculation
Error = [abs(VLGabc.Bus12 - Vold(1:3))/(VLG);
abs(VLGabc.Bus13 - Vold(4:6))/(VLG)];
Errmax = max(Error);
if Errmax < Tol
fprintf('Error is less than the specified tolerance\n')
disp(' ')
break
elseif iter == Niter
disp('Maximum number of iterations reached!')
disp('Solution diverged')
end
Vold = [VLGabc.Bus12; VLGabc.Bus13];
end

Supporting files:
function num = phasor2rec(mag, theta)
%% phasor2rec.m converts phasor from polar to rectangular
num = mag*cosd(theta) + 1i*mag*sind(theta);

## function num = rec2phasor(rec)

%% rec2phasor.m converts phasor from rectangular to polar and displays it
magnitude = abs(rec);
angleDeg = angle(rec)*180/pi;
num = [magnitude angleDeg];
formatSpec = '%4.3f < %2.4f deg\n';
disp(' ')
fprintf(formatSpec, num.')
disp(' ')

Since this is an iterative technique a tolerance of Tol = 0.0001 is used, and after 7
iterations the solution is found and presented here:

----------------------------

Iteration 7
VLGabc.Bus1
127.225 < -4.6336 deg
127.054 < -84.7290 deg
127.466 < 115.2423 deg
VLGabc.Bus12
123.687 < -6.7327 deg
126.179 < -87.1626 deg
125.563 < 114.6727 deg
VLGabc.Bus13
119.435 < -11.9971 deg
121.840 < -92.4266 deg
121.245 < 109.4082 deg
Iabc.Bus13
0.452 < -30.1988 deg
0.461 < -110.6283 deg
0.459 < 91.2064 deg
Iabc.Bus12
0.452 < -30.1988 deg
0.461 < -110.6283 deg
0.459 < 91.2064 deg
Iabc.Bus1
0.446 < -28.6684 deg
0.456 < -108.9606 deg
0.452 < 92.9375 deg
Error is less than the specified tolerance