Project 2 - Rankine cycle Simulator
RANKINE CYCLE SIMULATOR
AIM: Create a Rankine Cycle Simulator using OCTAVE/MATLAB.
OBJECTIVE:
- Create a Rankine Cycle Simulator using OCTAVE/MATLAB.
- Your code should calculate the state points of the Rankine Cycle (any type of your choice) based on user inputs.
- Then, plot the corresponding T-s and h-s plots for the given set of inputs. Title and axes labels are a must, while legends could be used if necessary.
- The presentation of your code will be taken into consideration while grading. Labeling sections of your code using comments is appreciated.
- Attach a report explaining the working of a Rankine cycle simulator and also the research was done by you.
THEORY:
The Rankine cycle is a model used to predict the performance of steam turbine systems. It was also used to study the performance of reciprocating steam engines. The Rankine cycle is an idealized Thermodynamic Cycle of a heat engine that converts heat into mechanical work while undergoing a phase change. It is an idealized cycle in which friction losses in each of the four components are neglected. The heat is supplied externally to a closed loop, which usually uses water as the working fluid.

Source: from the above theory
There are four processes in the Rankine cycle. The states are identified by numbers (in brown) in the T-s diagram.
- Process 1–2: The working fluid is pumped from low to high pressure. As the fluid is a liquid at this stage, the pump requires little input energy.
In other words Process, 1-2 is [Isentropic compression]
- Process 2–3: The high-pressure liquid enters a boiler, where it is heated at constant pressure by an external heat source to become a dry saturated vapor. The input energy required can be easily calculated graphically, using an enthalpy-entropy chat (h-s chat, or Mollier diagram), or numerically, using the steam table.
In other words Process, 2-3 is [Constant pressure heat addition in boiler]
- Process 3–4: The dry saturated vapor expands through a turbine, generating power. This decreases the temperature and pressure of the vapor, and some condensation may occur. The output in this process can be easily calculated using the chart or tables noted above.
In other words Process, 3-4 is [Isentropic expansion]
- Process 4–1: The wet vapor then enters a condenser, where it is condensed at a constant pressure to become a saturated liquid.
In other words Process, 4-1 is [Constant pressure heat rejection in condenser]
EXPLANATION OF CODE:
- We start the program by reading about the Rankine cycle and the given data of the XSteam.
- First, we need input data of pressure at turbine inlet, the temperature at turbine inlet, the pressure at condenser inlets.
- Now we return the pressure and the temperature, by using the above-given data and XSteam.
- With this, we further simplify using the same data and the study over the Rankine cycle.
- By all the study we calculate saturated liquid and saturated vapor through the plots.
- Then we calculate the total work, work done on the turbine, and work done on the pump.
- We also calculate the efficiency and the specific steam consumption.
- After the 4th stage of variation, we observe the plot by extracting the temperature enthalpy and entropy.
- Plotting graph of temperature vs enthalpy and enthalpy vs entropy while giving them line color and linewidth
- As the input changes the graph change.
- And the results will be displayed on the window command.
close all
clear all
clc
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');
pl = input('nvalue of pressure at turbine inlet in bar, P1 = ');
T1 = input('nvalue of temperature at turbine inlet in degree.C, T1 = ');
p2 = input('nvalue of pressure at condenser inletin bar, P2 = ');
% At State 1
h1 = XSteam('h_pT', pl, T1);
s1 = XSteam('s_pT',pl, T1);
%0 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 3
p3 = p2;
s3 = XSteam('sL_p', p3);
h3 = XSteam('hL_p', p3);
% At State 4
s4 = s3;
p4 = pl;
% 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;
%Network
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 = mass flow rate/power
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', pl);
s5 = XSteam('sL_p', pl);
s6 = XSteam('sV_p', pl);
h5 = XSteam('hL_p', pl);
h6 = XSteam('hv_p', pl);
T5 = T6;
%Plotting the saturation 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],'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, 1000);
for l = 1: length(sc1)
Tc1(l) = XSteam('T_ps', pl, 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', pl, 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', pl, 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/kg)')
ylabel('Enthalpy, H (KJ/kg)')
legend('Saturation curve', 'location', 'northwest')
% Displaying the Results in the Command Window:
disp('Results');
pl = pl;
T1 = T1;
p2 = p2;
disp('At stage point 1')
n1 = sprintf('P1 is %.3f bar',pl);
disp(n1);
n2 = sprintf('T1 is %.3f C',T1);
disp(n2);
n3 = sprintf('h1 is %.3f kJ/kg',h1);
disp(n3);
n4 = sprintf('s1 is %.3f k3/kgK', s1);
disp(n4);
disp('At stage point 2');
n11 = sprintf('P2 is %.3f bar',p2);
disp(12);
n21 = sprintf('T2 is %.3f C',T2);
disp(n21);
n31 = sprintf('h2 is %.3f k3/kg',h2);
disp(n31);
n41 = sprintf('s2 is %.3f kJ/kgk', s2);
disp(n41);
disp('At stage point 3');
n12 = sprintf('P3 is %.3f bar', p3);
disp(n12);
n22 = sprintf('T3 is %.3f C', T3);
disp(n22);
n32 = sprintf('h3 is %.3f kJ/kg',h3);
disp(n32)
n42 = sprintf('s3 is %.3f k/kgK', s3);
disp(n42);
disp('At stage point 4');
n13 = sprintf('P4 is %.3f bar',p4);
disp(n13);
n23 = sprintf('T4 is %.3f C', T4);
disp(n23);
n33 = sprintf('h4 is %.3f k3/kg',h4);
disp(n33);
n43 = sprintf('s4 is %.3f kJ/kgK',s4);
disp(n43);
n14 = sprintf('Wt is %.3f k3/kg',Wt);
disp(n14);
n15 = sprintf('Wp is %.3f kJ/kg',Wp);
disp(n15);
n16 = sprintf('Wnet is %.3f k3/kg',Wnet);
disp(n16);
n17 = sprintf('Thermal efficiency is %.2f Percent', thermal_eff);
disp(n17);
n18 = sprintf('SSC is %.2f kg/kWh',SSC);
disp(n18);
n19 = sprintf('Back work ratio is %.3f',BW);
disp(n19);
ERRORS:
Typing mistake| Corrected by rechecking

RESULTS:
By inputting the 3 required data we get the assumed result:-


We get the following plot for the inputs
