EE573/873 Advanced Power System Analysis and Protection Lab Report

Verified

Added on  2022/08/31

|20
|3894
|15
Practical Assignment
AI Summary
This document presents a comprehensive analysis of power system concepts, specifically focusing on power flow, optimal power flow (OPF), and unit commitment. The first part of the assignment utilizes PowerWorld software to investigate load flow and OPF scenarios. The student examines the impact of load variations on bus voltage angles, line flows, and the role of the slack bus in maintaining power balance. The analysis includes the effects of changes in load on bus voltage angles and line flows. The second part delves into unit commitment using Fico Xpress, contrasting it with economic dispatch. The program's structure is explained, including the objective function, constraints, and the effects of no-load and start-up costs on the optimization process. The report explores the differences between unit commitment and economic dispatch, illustrating how unit commitment determines which generators to start or shut down, while economic dispatch schedules individual power outputs. The analysis includes practical results and observations, demonstrating the influence of various parameters on the optimization outcomes. The report also shows how the no-load costs and start-up costs influence the optimization choices.
Document Page
1ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
Advanced Power System Analysis and Protection
EE573/873
[Instructor]
[Institutional Affiliation]
[City, State]
[Date]
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
2ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
Part 1: Power Flow and Optimal Power Flow using Powerworld software
Line parameters shall assumed to be 0.03+j0.05, Bus 2 V=1.06+j0, bus 3 shall be V=1.03+j0
The slack bus generator rating also adjusts itself by the same magnitude as the load, that is by
50MW. Slack bus, which is sometimes called the swing bus, it balances the active power and
the reactive power (P and Q respectively) in a power system. The loses of the system are
provided for when it emits or absorbs active and/or reactive power to a system and from it.
Document Page
3ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
The slack bus generator increased in rating, this time also, there was increase in the line
rating, the active and reactive power rating increased. Bus 2 (A), had a decrease in the phase
angle from -3.86o to -6.97o, as the load on bus 2(A) increased. Line flow pie chart, indicating
the percentage current flow, also increased as the load was increased. The slack bus had to
increase to match the power requirement of the load on bus 2 (A), and since this was through
the line, the power (both active and reactive powers) of the line had to increase. The same
reason as before that the slack nus is used to balance the power requirement of a load.
The difference is visible, in that, in the first instance, there was a change in the rating of the
load on the same slack bus, bus 1 (B). This had no effect on the neither the transmission line
nor the second bus, bus 2 (A). Therefore, the slack bus only changed to cater for the
adjustments on the load at the same bus. On the other hand, there was a change in the load of
the second bus, again, the slack bus had to change to cater for the adjustment of that load, and
in the process, everything connecting the bus that had the load had to change. The line rating,
the bus phase angle, the current rating of the line, and the power rating of the line (reactive
and active power ratings). But we note that the other generator rating didn’t change, because
it is not influenced by the change of the load, since it is the function of the slack bus
generator to deal with the changes, that balances the active and the reactive power
accordingly. So, the difference is the location of the load being adjusted, and the slack bus.
Document Page
4ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
Powerworld software has an option of using or determining the optimal power flow (OPF)
when Primal linear programming (LP) is selected. This option gets us the optimal solution
when the standard power flow and the optimal solution are iterated, and the solution is
obtained using linear programming in removing the limit violations or changing the controls
of the system. This system is also called linear optimization. On the first instance, there’s no
increment or reduction the price, this mean the incremental price will be the same
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
5ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
Part 2: Unit commitment using Fico Xpress
2.5.1 differences between an economic dispatch (ED) and a Unit Commitment
The program is as follows:
model "Unit commitment"
!==========================================================================
! UC laboratory
!==========================================================================
! program that solves for a unit commitment by minimizing generation costs
! subject to:
! * power balance
! * generation limits
! * start-up costs
! * min up & down time
! note: a generation cost curve is linearized
!==========================================================================
! © Dr. Ivana Kockar
!==========================================================================
uses "mmxprs", "mmive"
parameters
!file with input data for generators
Input_data ="input_data/exercise1.dat"
!file where to write results
Out_File = "results/Output_ex1a.txt"
!flag for unit names
Unit_name_flag = 1 ! indicates if unit name is
defined within the input file
! 0 - no; 1 - yes
!parameters for the number of segments for the cost curve
and model of the start-up costs
cost_segments_equal = 0 !indicates how cost curve
is modeled
! 0 - segments are not equal and data for elbows
! incremental costs etc. are read form input
file
! 1 - segments are equal and elbows, incremental costs,
etc.
! are calculated from input data
N_cost_segments = 1 !# of segments in a
piece-wise linear cost function
Document Page
6ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
!-------- flags ---------------
STC_flag = 0 !indicates if
start-up costs are modelled
Fixed_start_up = 0 !indicates if
the start-up costs are modelled as
! 0 - fixed or
! 1 - two states: Cold/Hot, depending on a time a unit
has been off
MinUpDown_flag =0 !indicates if min-up
& -down time is considered
MustRun_flag=0 !indicates if must-
run constraints are considered
end-parameters
!---- declarations for general test parameters
declarations
N_gen: integer !# of
generators
T_horizon: integer !# of periods
in a time horizon
end-declarations
fopen(Input_data, F_INPUT)
fskipline("!")
fskipline("\n")
readln(N_gen, T_horizon)
! ==================== declarations of variables
===================
! ---- declarations for input data
declarations
! ******* generator parameters
unit_number: array(1..N_gen) of real !
unit number
unit_name: array(1..N_gen) of string !
name of the unit
Pg_min: array(1..N_gen) of real
!min generation output
Pg_max: array(1..N_gen) of real
!max generation output
minup_time: array(1..N_gen) of real !
min time a unit must be on, once started
mindown_time: array(1..N_gen) of real !
min time a unit must be off, once shut down
Pg_ramp_up: array(1..N_gen) of real !
ramp-up rate
Pg_ramp_down: array(1..N_gen) of real !
ramp-down rate
! - start-up costs
!if start-up costs are fixed beta_i=0 & tau_i=0
!if start-up costs are Cold/hot alpha_i=hot, beta_i=cold
& tau_i=time
Document Page
7ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
start_up_alpha: array(1..N_gen) of real !
alpha_i coefficients
start_up_beta: array (1..N_gen) of real !
beta_i coefficients
start_up_tau: array(1..N_gen) of real !
tau_i coefficients
initial_unitcom: array(1..N_gen) of integer !
inital status (on/off) of generators
initial_status: array(1..N_gen) of integer !
inital conditions of generators -time it was on or off
init_stat_set: set of integer
! dummu variable
size_start_up_mat: integer
!system data
time_periods: array(1..T_horizon) of real !# of
time periods
Pd_tot: array(1..T_horizon) of real !
total system demand at each period
system_reserve: array(1..T_horizon) of real !
required system reserve at each period
end-declarations
!declarations for variables
declarations
!======== main decision variables ========
! generation outputs - 3D - for each gen for each time
period and for each cost segment
Pg_segm: array(1..N_gen, 1..T_horizon,1..N_cost_segments)
of mpvar
! unit commitment variable - binary: 0-off; 1-on
unitcom: array(1..N_gen, 1..T_horizon) of mpvar
!total output for each generator at time t
Pg: array(1..N_gen, 1..T_horizon) of mpvar
!======= auxiliary decison variables =====
!values of start up costs for gen i at period t
start_up_cost: array(1..N_gen,1..T_horizon) of mpvar
!======= non-decision variables =============
! ----- variables for the cost function
noload_cost: array(1..N_gen) of real
!noload cost in a linear cost function
inc_cost: array(1..N_gen, 1..N_cost_segments) of real !
incremental costs in a cost function
elbows: array(1..N_gen, 0..N_cost_segments) of real
! matrix of elbow points on the cost curve
! note: in column 0 elements are Pg_min_i
! in the last column elements are
Pg_max_i
! ==== constraints
Power_lowlim_segm_constr: array(1..N_gen, 1..T_horizon,
1..N_cost_segments) of linctr
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
8ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
end-declarations
! ===== reading input data
case cost_segments_equal of
0: do
! read "ready made" data for already defined piece-wise linear
cost curve
forall(j in 1..N_gen)do
fskipline("!")
fskipline("\n")
read(unit_number(j))
if Unit_name_flag=1 then
read(unit_name(j))
else
unit_name(j):="U"+string(j)
end-if
!read(Pg_min(j))
forall (k in 0..N_cost_segments) read
(elbows(j,k))
!Pg_max(j)
read(noload_cost(j))
forall (k in 1..N_cost_segments)
read(inc_cost(j,k))
read(start_up_alpha(j),
start_up_beta(j),start_up_tau(j))
read(minup_time(j), mindown_time(j),
initial_status(j))
end-do
readln
forall(j in 1..T_horizon) do
fskipline("!")
fskipline("\n")
read(time_periods(j),Pd_tot(j),
system_reserve(j))
end-do
fclose(F_INPUT)
forall(j in 1..N_gen) do
Pg_min(j):=elbows(j,0)
Pg_max(j):=elbows(j,N_cost_segments)
end-do
end-do
end-case
!====== misc calculations
!calculating sizes of some matrices for start-up costs
case Fixed_start_up of
0:
! constant start-up costs
size_start_up_mat:=1
1:
! Col/Hot start-up costs
size_start_up_mat:=T_horizon!max(k in {1..N_gen})
integer(start_up_tau(k))
end-case
Document Page
9ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
!define a vector of the inital UC status
forall(i in 1..N_gen) do
if(initial_status(i)<0) then
initial_unitcom(i):=0
else
initial_unitcom(i):=1
end-if
end-do
declarations
!====additional declaration for start-up costs
!number of start-up cost segments considered for each
generator
N_start_up_segments: array(1..N_gen) of integer
!values of start up cost segments for each generator i
! considered at time t and depending on the previous
states
start_up_cost_segment:
array(1..N_gen,1..T_horizon,1..size_start_up_mat) of real
!sumation of the previous commitment states for each
generator i
! at each period up to a start-up cost segment
previous_unitcom:
array(1..N_gen,1..T_horizon,1..size_start_up_mat) of real
end-declarations
!
===================================================================
! ========== calculations for the objective function and
constraints
!=========== objective function part ============
!----- objective function
! sum Cgi(Pgi(t)) = unitcom(i,t)*noload_cost(i) +
sum(inc_cost(i,t,j).*Pg(i,t,j))+Si(t)
Costs:=sum(i1 in 1..N_gen, t1 in 1..T_horizon)
unitcom(i1,t1)*noload_cost(i1) +
sum(i in 1..N_gen, t in 1..T_horizon, j
in 1..N_cost_segments) inc_cost(i,j)*Pg_segm(i,t,j)+
sum(i2 in 1..N_gen, t2 in 1..T_horizon)
(STC_flag)*start_up_cost(i2,t2)
! =========== constraints ============
!----- specify bianry variables ----------------------------
forall (i in 1..N_gen, t in 1..T_horizon) unitcom(i,t)
is_binary
!----- start-up costs ---------------------------------------
Document Page
10ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
include "start_up_costs.mos"
!----- for each generator summation of Pg segments equlals
total Pg
forall (t in 1..T_horizon,i in 1..N_gen)
pg_constr(i,t):=
Pg(i,t)-sum(j in 1..N_cost_segments)
Pg_segm(i,t,j)=0.0
!----- power balance constraints ------------------------------
forall (t in 1..T_horizon)
Power_bal_constr(t):=
Pd_tot(t)- sum(i in 1..N_gen) Pg(i,t)=0.0
!----- limits on generation outputs
----------------------------
include "generation_limits.mos"
!---- min up & down constraints
----------------------------------
include "min_up_down_time.mos"
! ------ must run constraints
include "must_run.mos"
! =========================================================
!setparam("XPRS_MIPTOL",1.0E-10)
setparam("XPRS_MIPRELSTOP",0.001)
minimize(Costs)
! ==========================================================
!
! results
! ------ print results --------------------
include "print_results.mos"
end-model
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
11ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
When the part [MustRun_flag=0], it means that must run constraints are not considered, the
following are the results
The first result is for unit commitment and the second result is for economic dispatch, the
difference between the unit commitment and the economic dispatch are visible.
Document Page
12ADVANCED POWER SYSTEM ANALYSIS AND PROTECTION
The simplex objective variation which shows the objective, iteration against time, where
there’s a difference in the unit commitment and the economic dispatch. The first result is the
unit commitment and the second is the economic dispatch. The result shows that the economic
dispatch has a faster change than the unit commitment, when the objective is 10000 and the
iteration is 0.7. The iteration changes faster in unit commitment than the economic dispatch.
chevron_up_icon
1 out of 20
circle_padding
hide_on_mobile
zoom_out_icon
[object Object]