Project 2 - Rankine cycle Simulator
Objective:-
To simulate a Rankine Cycle using MATLAB.
Extracting steam and water properties from XSteam data(IAPWS IF - 97 standard)
Calculating all the state points of cycle based on user inputs.
Plotting the T vs s and H vs s plot for given input.
Rankine Cycle:-
Rankine cycle is a idealized thermodynamic cycle or heat engine in which a fuel is used to produce heat within a boiler, converting water into steam which then expands through a turbine producing useful work. This process was developed in 1859 by a scottish engineer 'William J.M Rankine'. It is a cycle which converts heat into mechanical energy which usually is converted into electrical energy.
In this project an idealised cycle is simulated. Hence neglecting losses.

Rankine cycle is derived out of carnot cycle. Its power depends on the temperature difference between the heat source and a cold source. The more the difference the more mechanical power can be efficiently extracted out of heat energy.
Since ideal cycles are only in theory, Efficiency of rankine cycle is limited by high heat of vapourization of the working fluid, friction losses etc.
Water is usually the fluid of choice due to its favorable properties, such as its non-toxic and unreactive chemistry, abundance, and low cost, as well a its thermodynamic properties. By condensing the working steam vapour to a liquid the turbine outlet is lowered and the energy required by the feed pump consumes only 1% to 3% of the turbine output power and these factors contribute to a higher efficiency for the cycle. The benefit of this is offset by the low temperatures of steam admitted to the turbine.
Processes and Working:
There are four processes in the rankine cycle(order maybe varied):
1. Process 1-2 : Isentropic Expansion in the turbine
2. Process 2-3 : Constant pressure Heat rejection in condenser
3. Process 3-4 : Isentropic compression in the pump
4. Process 4-1 : Constant pressure heat addition in the boiler
Working of the rankine cycle simulator:
In process 1-2, The dry saturated vapour expands through a turbine, generating power. This decreases the temperature and pressure of the vapour and some condensation may occur.
In process 2-3, The vapour-liquid mixture leaving the turbine(2) is condensed at low pressure, usually in a surface condensers using cooling water. In well designed and maintained condenser, the pressure of the vapour is well below atmospheric pressure,approaching the saturation pressure of the operating fluid at the cooling water temperature.
In process 3-4, 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.
In process 4-1, High pressure liquid enters the boiler from the feed pump(4) and is heated to the saturation temperature(on the saturation curve). Further addition of energy causes evaporation of the liquid until it is fully converted to saturated steam(1) or superheated(1).
As the water condenses in the condenser,waste heat is given off in the form of water vapour which can seen billowing from a plant's cooling towers. This waste heat is necessary in any thermodynamic cycle. Due to this condensation step, the pressure at the turbine outlet is lowered. This means the pump requires less work to compress the water-resulting in higher overall efficiencies.
Main Program:-
clear all
close all
clc
% Displaying steps in rankine cycle
disp(' Rankine Cycle ')
disp('1-2 Isentropic Expansion In The Turbine')
disp('2-3 Constant Pressure Heat Rejection By Condenser')
disp('3-4 Isentropic Compression In The Pump')
disp('4-1 Constant Pressure Heat Addition By Boiler')
% Obtaining inputs
p1 = input('\nValue of pressure at turbine inlet, p1 (in bar) = ')
T1 = input('\nValue of temperature at turbine inlet, T1 (in degree) = ')
p2 = input('\nValue of temperature at condenser inlet, p2 (in bar) = ')
% State 1
h1 = XSteam('h_pT',p1,T1);
s1 = XSteam('s_pT',p1,T1);
% At State 2
s2 = s1;
sf2 = XSteam('sL_p',p2);
sg2 = XSteam('sV_p',p2);
x2 = (s2-sf2)/(sg2-sf2);
hf2 = XSteam('hL_p',p2);
hg2 = XSteam('hV_p',p2);
h2 = hf2 + (x2*(hg2-hf2));
% At state point 3
p3 = p2;
s3 = XSteam('sL_p',p3);
h3 = XSteam('hL_p',p3);
% At state point 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 done
Wnet = Wt + wp;
% Heat into the system
Qin = h1 - h4;
% Heat out of the system
Qout = h2 - h3;
% Thermal efficiency
eff = (Wnet/Qin)*100;
% Specific steam consumption
% SSC = mass flow rate/power
SSC = (3600/Wnet);
% Calculating 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 temperture, entropy and enthalpy at the vapour and liquid for
% plot
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 curve
T = linspace(1,375,1000);
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],'k','LineWidth',2)
plot([s2 s3],[T2 T3],'k','LineWidth',2)
plot([s3 s4],[T3 T4],'k','LineWidth',2)
plot([s4 s5],[T4 T5],'k','LineWidth',2)
plot([s5 s6],[T5 T6],'k','LineWidth',2)
sc1 = linspace(s6,s1,1000);
for l = 1:length(sc1)
Tc1(l) = XSteam('T_ps',p1,sc1(l));
end
plot(sc1,Tc1,'k','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,'r','LineWidth',1)
plot(sg,hg,'r','LineWidth',1)
plot([s1 s2],[h1 h2],'k','LineWidth',2)
plot([s2 s3],[h2 h3],'k','LineWidth',2)
plot([s3 s4],[h3 h4],'k','LineWidth',2)
hc = linspace(h4,h5,100);
for k = 1:length(hc)
sch(k) = XSteam('s_ph',p1,hc(k));
end
plot(sch,hc,'k','LineWidth',2)
plot([s5 s6],[h5 h6],'k','LineWidth',2)
for m = 1:length(sc1)
hc1(m) = XSteam('h_ps',p1,sc1(m));
end
plot(sc1,hc1,'k','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]')
legend('Saturation curve','Location','northwest')
% Displaying Results
disp('RESULTS')
fprintf('At State Point 1:\n');
fprintf('p1: %8.3f bar\n',p1);
fprintf('T1: %8.3f C\n',T1);
fprintf('h1: %8.3f KJ/kg\n',h1);
fprintf('s1: %8.3f KJ/kgk\n\n',s1);
fprintf('At State Point 2:\n');
fprintf('p2: %8.3f bar\n',p2);
fprintf('T2: %8.3f C\n',T2);
fprintf('h2: %8.3f KJ/kg\n',h2);
fprintf('s2: %8.3f KJ/kgk\n\n',s2);
fprintf('x2: %8.3f \n\n',x2);
fprintf('At State Point 3:\n');
fprintf('p3: %8.3f bar\n',p3);
fprintf('T3: %8.3f C\n',T3);
fprintf('h3: %8.3f KJ/kg\n',h3);
fprintf('s3: %8.3f KJ/kgk\n\n',s3);
fprintf('At State Point 4:\n');
fprintf('p4: %8.3f bar\n',p4);
fprintf('T4: %8.3f C\n',T4);
fprintf('h4: %8.3f KJ/kg\n',h4);
fprintf('s4: %8.3f KJ/kgk\n\n',s4);
fprintf('Turbine Work: %88.3f KJ/kg\n',Wt);
fprintf('Pump Work: %8.3 KJ/kg\n',wp);
fprintf('Wnet: %8.3f KJ/kg\n',Wnet);
fprintf('Efficiency: %8.3f Percent \n',eff);
fprintf('S.S.C: %8.3f KJ/kwh',SSC);
Output:-



Conclusion:-
Rankine cycle has been simulated and plot for 'T vs s' and H vs s' has been generated with MATLAB.