Project 2 - Rankine cycle Simulator
Rankine Cycle Simulator
Aim:
To create Rankine cycle simulator from a given input and reading the data from a standard thermodynamic library of steam table and to draw TS & HS Diagram.
Theory
The Rankine cycle is the fundamental operating cycle of all power plants where an operating fluid is continuously evaporated and condensed. The selection of operating fluid depends mainly on the available temperature range. Figure below shows ideal Rankine cycle.
The pressure-enthalpy (p-h) and temperature-entropy (T-s) diagrams of this cycle are given below. The Rankine cycle operates in the following steps:
-
1-2-3 Isobaric Heat Transfer. High pressure liquid enters the boiler from the feed pump (1) and is heated to the saturation temperature (2). Further addition of energy causes evaporation of the liquid until it is fully converted to saturated steam (3).
-
3-4 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%.
-
4-5 Isobaric Heat Rejection. The vapor-liquid mixture leaving the turbine (4) 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.
-
5-1 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.
- Rankine cycle.
TS & PH diagrams
MATLAB CODE
clear all
close all
clc
% Rankine cycle consists of 4 process
disp(' RANKINE CYCLE SIMULATOR');
disp('1-2 is Constant pressure heat addition in the boiler');
disp('2-3 is Isentropic Expansion in the Turbine');
disp('3-4 is Constant pressure heat removal in the Condenser');
disp('4-1 is Isentropic compression in the pump');
p1 = input('Value of pressure at turbine inlet, p1(in bar) = ');
T1 = input('Value of temperature at turbine inlet, T1(in degree.C) = ');
p2 = input('Value of pressure at condenser inlet, p2(in bar) = ');
% At State 1
%xsteam commmand is used to get critical entropy and enthalpy values at
%state points
% Extracting Enthalpy at state pt 1
h1 = XSteam('h_pT', p1, T1);
% Extracting Entropy at state pt 2
s1 = XSteam('s_pT', p1, T1);
% At State 2
s2 = s1; % Isentropic Expansion
% Saturated Liquid Entropy
sf2= XSteam('sL_p', p2);
% Saturated Vapour Entropy
sg2 = XSteam('sV_p', p2);
%dryness fraction
x2 = (s2-sf2)/(sg2-sf2);
hf2 = XSteam('hL_p', p2); % Saturated Liquid Enthalpy
hg2 = XSteam('hV_p', p2); % Saturated Vapour Enthalpy
%calculating enthalpy
h2 = hf2 + (x2*(hg2-hf2));
% At State 3
p3 = p2; % Constant pressure Heat rejection in Condenser
s3= XSteam('sL_p', p3);
h3 = XSteam('hL_p', p3);
% At State 4
s4 = s3;
p4 = p1;
% Work done by turbine
Wt = h1 - h2;
% Work done to run pump
v3 = XSteam('vL_p', p3);
Wp = v3*(p4 - p3)*100;
h4 = h3 + Wp;
%Net work
Wnet = Wt - Wp;
%Heat into the system
Qin = h1 - h4;
%Heat out of the system
Qout = h2 - h3;
%Thermal efficiency
thermal_eff = (Wnet/Qin)*100;
%Specific Steam Consumption
SSC = (3600/Wnet);
% Back Work ratio
BW = (Wp/Wt)
% Calculation of Temperatures at the state points
T3 = XSteam('Tsat_p', p3);
T2 = T3;
Cp4 = XSteam('Cp_ps', p4, s4);
Cv4 = XSteam('Cv_ps', p4, s4);
k = Cp4/Cv4;
T4 = T3/((p3/p4)^((k-1)/k));
%Calculating Temperature, Entropy and Enthalpy at the vapour and liquid line for plotting
T6 = XSteam('Tsat_p', p1);
s5 = XSteam('sL_p', p1);
s6 = XSteam('sV_p', p1);
h5 = XSteam('hL_p', p1);
h6 = XSteam('hV_p', p1);
T5 = T6;
%Plotting the saturation curve
T = linspace(1,375,500);
for i = 1:length(T)
sf(i) = XSteam('sL_T', T(i));
sg(i) = XSteam('sV_T', T(i));
hf(i) = XSteam('hL_T', T(i));
hg(i) = XSteam('hV_T', T(i));
end
%Plotting T-s diagram
figure(1)
hold on
plot(sf, T, 'r','linewidth',1)
plot(sg, T, 'r','linewidth',1)
plot([s1 s2], [T1 T2], 'b', 'linewidth', 2)
plot([s2 s3], [T2 T3] ,'b', 'linewidth', 2)
plot([s3 s4], [T3 T4], 'b', 'linewidth', 2)
plot([s4 s5], [T4 T5], 'b', 'linewidth', 2)
plot([s5 s6], [T5 T6], 'b', 'linewidth', 2)
sc1 = linspace(s6, s1, 500);
for l = 1:length(sc1)
Tc1(l) = XSteam('T_ps', p1, sc1(l));
end
plot(sc1, Tc1, 'b', 'linewidth', 2)
text(s1+0.1, T1, '1')
text(s2+0.1, T2, '2')
text(s3, T3-20, '3')
text(s4, T4+20, '4')
title('Temp vs Entropy plot')
xlabel('Entropy ,S (Kj/kgk')
ylabel('Temperature (degree C) ')
legend('Saturation curve')
%Plotting h-s diagram
figure(2)
hold on
plot(sf, hf, 'k', 'linewidth', 1)
plot(sg, hg, 'k', 'linewidth', 1)
plot([s1 s2], [h1 h2], 'r', 'linewidth', 2)
plot([s2 s3], [h2 h3], 'r', 'linewidth', 2)
plot([s3 s4], [h3 h4], 'r', 'linewidth', 2)
hc = linspace(h4, h5, 100);
for r = 1:length(hc)
sch(r) = XSteam('s_ph', p1, hc(r));
end
plot(sch,hc, 'r', 'linewidth', 2)
plot([s5 s6], [h5 h6], 'r', 'linewidth', 2)
for m = 1:length(sc1)
hc1(m) = XSteam('h_ps', p1, sc1(m));
end
plot(sc1, hc1, 'r', 'linewidth', 2)
text(s1+0.1, h1, '1')
text(s2+0.1, h2, '2')
text(s3, h3-100, '3')
text(s4, h4 +200, '4')
title('Enthalpy vs Entropy plot')
xlabel('Entropy , S (KJ/kgk) ')
ylabel('Enthalpy , H (KJ/kg)')
% Displaying the Results in the Command Window:
disp('Results');
p1 = p1;
T1 = T1;
p2 = p2;
disp('At stage point 1');
n1 = sprintf('P1 = %.3f bar',p1);
disp(n1);
n2 = sprintf('T1 = %.3f deg. C',T1);
disp(n2);
n3 = sprintf('h1 = %.3f kJ/kg',h1);
disp(n3);
n4 = sprintf('s1 = %.3f kJ/kgK',s1);
disp(n4);
disp('At stage point 2');
n11 = sprintf('P2 = %.3f bar',p2);
disp(n11);
n21 = sprintf('T2 = %.3f deg. C',T2);
disp(n21);
n31 = sprintf('h2 = %.3f kJ/kg',h2);
disp(n31);
n41 = sprintf('s2 = %.3f kJ/kgK',s2);
disp(n41);
disp('At stage point 3');
n12 = sprintf('P3 = %.3f bar',p3);
disp(n12);
n22 = sprintf('T3 = %.3f deg. C',T3);
disp(n22);
n32 = sprintf('h3 = %.3f kJ/kg',h3);
disp(n32);
n42 = sprintf('s3 = %.3f kJ/kgK',s3);
disp(n42);
disp('At stage point 4');
n13 = sprintf('P4 = %.3f bar',p4);
disp(n13);
n23 = sprintf('T4 = %.3f deg. C',T4);
disp(n23);
n33 = sprintf('h4 = %.3f kJ/kg',h4);
disp(n33);
n43 = sprintf('s4 = %.3f kJ/kgK',s4);
disp(n43);
n14 = sprintf('Wt = %.3f kJ/kg',Wt);
disp(n14);
n15 = sprintf('Wp =%.3f kJ/kg',Wp);
disp(n15);
n16 = sprintf('Wnet = %.3f kJ/kg',Wnet);
disp(n16);
n17 = sprintf('Thermal_efficiency = %.2f %',thermal_eff);
disp(n17);
n18 = sprintf('SSC = %.2f kg/kWh',SSC);
disp(n18);
n19 = sprintf('Back work ratio = %.3f ',BW);
disp(n19);
%Input data
Explanation:
- The Rankine cycle process is displayed in the command window and then inputs are entered which are inlet pressure for the turbine, the temperature at the turbine inlet, and pressure at the condenser.
- Turbine Inlet temperature = 400° C
-
Turbine Inlet Pressure = 30 bars
Turbine Outlet Pressure = 0.05 bars = Condenser Inlet Pressure
- XSteam function file is used to read the state point. First, the value of enthalpy and entropy at state point 1 is extracted.
- As process from 1-2 is isentropic compression the entropy at point 1 is equal to point 2. The term ‘(s_pT, p1, T1)’ refers to entropy at pressure and temperature point 1.
- The term ‘sg’ and ‘sf’ are referred to saturated liquid and saturated vapor entropy respectively. This value is used to calculate other functions according to mathematical relations.
- Similarly, other points are taken from XSteam function file which are necessary to calculate other parameters. After that work done in the turbine and pump are calculated.
- After calculation of the net work done the efficiency of the Rankine cycle is calculated along with specific steam consumption ..
- The temperature at each point of the cycle is calculated using input taken from start of the program and data taken from XSteam file. For given temperature range from lower to higher entropy points are calculated to create the T-S plot. Similarly, another loop is used to create the saturation curve in each plot.
- Then plotting is done respectively for T-s and H-s graph in Rankine cycle and each state point value has been put in a command window.
- Plot of T vs s and h vs s is created from all the points obtained.
- Results are displayed in the command window by using the sprint command

