Rankine Cycle Simulation
AIM - To simulate the Rankine Cycle using MATLAB .
Theory - A rankine cycle is a model which is used to give different properties of a steam turbine systems, such as efficiency, point wise properties at different locations of the model, etc. By using rankine cycle, approximate analysis can be done on an steam turbine systems.
Rankine cycle mainly consists of four processes:
- Isentropic compression (1-2)
- Constant pressure heat addition (2-3)
- Isentropic expansion (3-4)
- Constant pressure heat rejection (4-1)
1-2 Isentropic Expansion. The vapor is expanded in the turbine, thus producing work which may be converted to electricity. In practice, the expansion is limited by the temperature of the cooling medium and by the erosion of the turbine blades by liquid entrainment in the vapor stream as the process moves further into the two-phase region. Exit vapor qualities should be greater than 90%.
2-3 Isobaric Heat Rejection. The vapor-liquid mixture leaving the turbine is condensed at low pressure, usually in a surface condenser using cooling water. In well designed and maintained condensers, the pressure of the vapor is well below atmospheric pressure, approaching the saturation pressure of the operating fluid at the cooling water temperature.
3-4 Isentropic Compression. The pressure of the condensate is raised in the feed pump. Because of the low specific volume of liquids, the pump work is relatively small and often neglected in thermodynamic calculations.
4-1 Isobaric Heat Transfer. High pressure liquid enters the boiler from the feed pump and is heated to the saturation temperature. Further addition of energy causes evaporation of the liquid until it is fully converted to saturated steam.
Governing Equations -
Formula procedure used -
- The user inputs are taken.
- Properties such as temperature 'T' (celcius), Pressure 'p' (bar), enthalpy 'h' (kJ/kg) and entropy 's' (kJ/kg C) is found out at each points of the cycle using some relations and XSteam library in matlab.
- As process 2-3 is isobaric so p2=p3.
- As process 4-1 is also isobaric so p4=p1.
- As process 3-4 is isentropic so s3=s4.
- As process 1-2 is also isentropic so s1=s2.
- In steam table if the point is in between liquid and vapour saturation lines then s(n)=sL(n)+XsV(n)
- Here, 'n' is the point number
- 's' is entropy but we can use for any property
- sL(n) is liquid saturation entropy at point 'n'
- sV(n) is the vapour saturation entropy at point 'n' and 'X' is quality of steam at point 'n'.
- Similarly the method can be also used for enthalpy 'h'.
- Then we calculate the required output properties.
- Wnet(Net work output)=Wturbine-Wpump
- Wturbine= h3-h4.
- Wpump= Vf(p1-p2) ,Vf= Specific volume of fluid at pt.1
- Qh (heat added to boiler)= h3-hf2
- Efficiency= (Wnet/Qh)*100
- B.W.R (Back work ratio)= Wpump/Wturbine
- After calculating required outputs, the results are displayed.
- Then T-s and h-s plots are plotted using plot function.
OBJECTIVE -
- Calculating the state points variables of the Rankine Cycle.
- Plotting T-s and h-s Diagrams.
Given details -
Turbine Inlet temperature = 400° C
Turbine Inlet Pressure = 30 bars
Turbine Outlet Pressure = 0.05 bars = Condenser Inlet Pressure
Procedure -
Main Program -
clear all
close all
clc
% Creating Rankine Cycle Simulator
disp('RANKINE CYCLE SIMULATOR')
disp('1-2 : Isentropic Expansion in the Turbine')
disp('2-3 : Isobaric Heat Rejection by the Condenser')
disp('3-4 : Isentropic Compression in the Pump')
disp('4-1 : Isobaric Heat Addition by the Boiler')
disp(' ')
t = linspace(0,373.15,300);
% Inputs to be specified
P1 = input('Enter the Turbine Inlet Pressure (in bar): ');
T1 = input('Enter the Turbine Inlet Temperature (in Degree Celsius): ');
P2 = input('Enter the Condenser pressure (in bar): ');
disp(' ')
% State Variables 1
h1 = XSteam('h_pT',P1,T1);
s1 = XSteam('s_pT',P1,T1);
h_l1 = XSteam('hL_p',P1);
h_g1 = XSteam('hV_p',P1);
s_l1 = XSteam('sL_p',P1);
s_g1 = XSteam('sV_p',P1);
T_sat1 = XSteam('Tsat_p',P1);
% State Variables 2
s2 = s1;
s_l2 = XSteam('sL_p',P2);
s_g2 = XSteam('sV_p',P2);
% Dryness Fraction
x = (s2 - s_l2)/(s_g2 - s_l2);
h_l2 = XSteam('hL_p',P2);
h_g2 = XSteam('hV_p',P2);
h2 = h_l2 + x*(h_g2 - h_l2);
T2 = XSteam('T_ph',P2,h2);
T_sat2 = XSteam('Tsat_p',P2);
% State Variables 3
h3 = h_l2;
s3 = s_l2;
P3 = P2;
T3 = T2;
% State Variables 4
s4 = s3;
P4 = P1;
h4 = XSteam('h_ps',P4,s4);
T4 = XSteam('T_ps',P4,s4);
% Plotting
% T-s Diagram
figure(1), clf
hold on
% Saturation curve
for i = 1:length(t)
plot(XSteam('sL_T',t(i)),t(i),'b.')
plot(XSteam('sV_T',t(i)),t(i),'b.')
end
% Rankine Cycle
plot([s1 s2],[T1 T2],'linewidth',2,'color','r')
text(s1,T1,'1','FontSize',15)
% Beyond saturation curve
if x > 1
T3 = T_sat2;
plot([s2 s_g2 s3 s4],[T2 T_sat2 T3 T4],'linewidth',2,'color','r')
text(s1,T2,'2','FontSize',15)
text(s3,T3,'3','FontSize',15,'HorizontalAlignment','left','VerticalAlignment','top')
% Beneath saturation curve
else
plot([s2 s3 s4],[T2 T3 T4],'linewidth',2,'color','r')
text(s1,T2,'2','FontSize',15)
text(s3,T3,'3','FontSize',15,'HorizontalAlignment','left','VerticalAlignment','top')
end
n = linspace(T1,T2,500);
for i = 1:length(n)
plot(XSteam('s_pT',P1,n(i)),n(i),'.','linewidth',2,'color','r')
end
plot([s_l1 s_g1],[T_sat1 T_sat1],'linewidth',2,'color','r')
text(s_l1,T_sat1,'4','FontSize',15,'VerticalAlignment','bottom')
xlabel('Entropy(kJ/kg-K)')
ylabel('Temperature(k)')
title('T-s Diagram')
% h-s Diagram
figure(2), clf
hold on
% Saturation curve
for i = 1:length(t)
plot(XSteam('sL_T',t(i)),XSteam('hL_T',t(i)),'b.')
plot(XSteam('sV_T',t(i)),XSteam('hV_T',t(i)),'b.')
end
% Rankine Cycle
plot([s1 s2 s3 s4 s1],[h1 h2 h3 h4 h1],'linewidth',2,'color','r')
text(s1,h1,'1','FontSize',15)
text(s2,h2,'2','FontSize',15)
text(s3,h3,'3','FontSize',15)
text(s4,h4+90,'4','FontSize',15)
xlabel('Entropy(kJ/kg-K)')
ylabel('Enthalpy(kJ/kg)')
title('h-s Diagram')
% Calculation of desired quantities
% Work done by turbine
W_t = h1 - h2;
% Work done by pump
W_p = h4 - h3;
% Net work done
W_net = W_t - W_p;
% Thermal efficiency
n_thermal = (1 - ((h2 - h3)/(h1 - h4)))*100;
% Back work ratio
BWR = W_p/W_t;
% Specific Steam Conductivity
SSC = 3600/W_t;
% Displaying results in command window
disp('RESULTS:')
disp('At state point 1: ')
fprintf('P1 = %.2f barn',P1)
fprintf(['T1 = %.2f' char(176) 'Cn'],T1)
fprintf('h1 = %.2f kJ/kgn',h1)
fprintf('s1 = %.2f kJ/kgKn',s1)
disp(' ')
disp('At state point 2: ')
fprintf('P2 = %.2f barn',P2)
fprintf(['T2 = %.2f' char(176) 'Cn'],T2)
fprintf('h2 = %.2f kJ/kgn',h2)
fprintf('s2 = %.2f kJ/kgKn',s2)
disp(' ')
disp('At state point 3: ')
fprintf('P3 = %.2f barn',P3)
fprintf(['T3 = %.2f' char(176) 'Cn'],T3)
fprintf('h3 = %.2f kJ/kgn',h3)
fprintf('s3 = %.2f kJ/kgKn',s3)
disp(' ')
disp('At state point 4: ')
fprintf('P4 = %.2f barn',P4)
fprintf(['T4 = %.2f' char(176) 'Cn'],T4)
fprintf('h4 = %.2f kJ/kgn',h4)
fprintf('s4 = %.2f kJ/kgKn',s4)
disp(' ')
fprintf('Work done by turbine = %.2f kJ/kgn', W_t)
fprintf('Work done by pump = %.2f kJ/kgn', W_p)
fprintf('Net work done = %.2f kJ/kgn', W_net)
fprintf('Thermal efficiency = %.2f %%n', n_thermal)
fprintf('Back-work ratio = %fn', BWR)
fprintf('Specific Steam Conductivity = %.2f kg/kWhn', SSC)
Results -
command window -
Plots -
Workspace -
Conclusion -
The Rankine cycle simulated with appropriate graphs.