Professional Documents
Culture Documents
Load Flow Analysis of A Five-Bus Power System
Load Flow Analysis of A Five-Bus Power System
Load Flow Analysis of A Five-Bus Power System
System
Introduction
This application analyzes this five-bus power system, and calculates the voltages and real and reactive
powers at each bus.
Generators inject power (distribution substations) and loads remove power. The power flow equations
are derived from nodal power balances at each bus i using Kirchoff's Current Law
where
voltage magnitude, Vi
i
real power, Pi
reactive power, Qi
These variables are known for each bus (where the suffix G and D stand for generation and demand
respectively).
Bus type Unknown variable Known variable
Larger power systems (for example, those modeling real-life distribution systems) can consist of tens of
thousands of buses; the number of nonlinear equations needed to model these systems is similarly
large. For these, power systems engineers use dedicated tools with specialized solvers.
Smaller systems can be modeled and studied in Maple, perhaps to experiment with or optimize
different topologies, investigate numerical techniques, or reinforce the underlying theory.
This Maple application demonstrates two approaches to numerically solving the load flow equations.
The symbolic real and reactive load flow equations are generated, and solved with fsolve (a
powerful numerical equation solver). This is quick to set up, but may be slower for larger
systems.
The system Jacobian is constructed, and solved with Newton-Raphson iteration (this method
requires more initial setup, but may be faster for larger systems)
> restart:
Properties
Column Data
1 Sending end bus
2 Receiving end bus
3 Series impedance in pu
4 Shunt admittance in pu
Shunt elements may represent reactive power compensation at certain system buses. In this case, the
reactance of the corresponding compensation device (capacitor or inductor) is calculated and its
admittance is entered in the above array. If lines are compensated by series capacitors, the reactance
of the capacitor is subtracted from the line series reactance and the net reactance is included in the
array Series.
> Shunt := Matrix([1, 0]):
Bus data
Bus number
> Bus := Vector([1, 2, 3, 4, 5]):
Magnitude of the bus voltage (per unit). This is fixed for the slack (first value) and PV buses (third
value), and is the initial guess for PQ buses.
> V := Vector([1.04, 0.961, 1.02, 0.92, 0.968]):
Voltage phase angle in radians. This is normally 0 for the slack bus (the first value). The remaining
values are the initial guess of the bus voltage phase angles for the other buses
> delta := Vector([0, 0, 0, 0, 0]):
Bus type (0 for the slack bus, 1 for PV bus, 2 for PQ-bus)
> bus_type := Vector(["slack", "PQ", "PV", "PQ", "PQ"]):
Initialization
Number of buses. series elements and shunt elements
> N_bus := numelems(Bus):
N_ser := numelems(Series[.., 1]):
N_sh := numelems(Shunt[.., 1]):
(3.1)
(3.2)
(4.2)
(4.2)
v[1], d[1] and v[3] are known values (slack bus and PV-buses) and are substituted into the equation
system
> sys := eval({real_power_eq, reactive_power_eq}, {v[1] = 1.04, d[1]
= 0, v[3] = 1.02})
(6.3)
end do:
end do:
> for k from 2 to N_bus do
for n from 2 to N_bus do
end do:
end do:
(7.1.1)
(7.1.2)
Iterative Solution
Corrections of voltage and phase angle for the new iteration step
> Delta_V := (l, V, delta) -> add(Jinv[l + N_bus - 2, k - 1] * (Pb
[k] - P(k, V, delta)), k = 2..N_bus) + add(Jinv[l + N_bus - 2, k +
N_bus - 2] * ifelse(bus_type[k] = "PV", 0, Qb[k] - Q(k, V, delta)
),k = 2..N_bus)
Warning, (in Delta_V) `k` is implicitly declared local
(7.2.1)
(7.2.2)
Warning, (in Delta_delta) `k` is implicitly declared local
(7.2.2)
Acceleration coefficient
> lambda := 1:
> for Iter from 1 to Max_it do
for m from 2 to N_bus do
V[m] := V[m] + Delta_V(m, V, delta) * lambda:
delta[m] := delta[m] + Delta_delta(m, V, delta) * lambda:
end do:
end do:
(7.2.3)
Analysis of Results
Power mismatch
> epsilon := add((Pb[m] - P(m, V, delta))^2 + ifelse(bus_type[m] =
"PV", 0, (Qb[m] - Q(m, V, delta))^2), m = 2..N_bus)^0.5
(8.1)
(8.2)
Line losses for the second line are calculated as follows
> m := 2:
i := Is[m]:
j := Js[m]:
ys := 1/Series[m, 3];
ysh := Series[m, 4];
(8.3)
(8.3)
Power flow from sending to receiving terminal
> Pij := -V[i] * V[j] * abs(ys) * cos(argument(ys) + delta[j] -
delta[i]) + V[i]^2 * abs(ys) * cos(argument(ys)) + (V[i])^2 * abs
(ysh) * cos(argument(ysh))
(8.4)
Power from receiving to sending terminal
> Pji := -V[j] * V[i] * abs(ys) * cos(argument(ys) + delta[i] -
delta[j]) + V[j]^2 * abs(ys) * cos(argument(ys)) + V[j]^2 * abs
(ysh) * cos(argument(ysh))
(8.5)
Real power losses in the second line
> Ploss := Pij + Pji
(8.6)
Reactive power flow from sending to receiving terminal
> Qij := V[i] * V[j] * abs(ys) * sin(argument(ys) + delta[j] - delta
[i]) - V[i]^2 * abs(ys) * sin(argument(ys)) + (V[i])^2 * abs(ysh)
* sin(argument(ysh))
(8.7)
Reactive power flow from receiving to sending terminal
> Qji := V[i] * V[j] * abs(ys) * sin(argument(ys) + delta[i] - delta
[j]) - V[j]^2 * abs(ys) * sin(argument(ys)) + (V[j])^2 * abs(ysh)
* sin(argument(ysh))
(8.8)
Reactive power losses in the second line
> Qloss := Qij + Qji
(8.9)