Challenge

Project 2 - Rankine cycle Simulator

AIM OF THE PROJECT

To create a MATLAB code to simulate the Rankine Cycle by extracting data from XSteam library and creating the required graphical representation

RANKINE CYCLE

The Rankine cycle or Rankine Vapor Cycle is the process widely used by power plants such as coal-fired power plants or nuclear reactors. In this mechanism, a fuel is used to produce heat within a boiler, converting water into steam which then expands through a turbine producing useful work. This is a thermodynamic cycle which converts heat into mechanical energy—which usually gets transformed to other usable forms.

Process involved in Rankine Cycle

1-2 Isentropic Expansion in Turbine
2-3 Constant pressure heat removal
3-4 Isentropic Compression in Pump
4-1 Constant pressure Heat addition in Boiler

From the state points the following results can be concluded

Work done by turbine

Wt=h1-h2

Work done in pump

Wp=h3-h4

Net Work done

Wnet=Wt-Wp

Heat addition

Qin= h1-h4

Effeciency of cycle

n = (Wnet/Qin)*100 %

Specific heat consumption

ss=3600/Wnet

Explanation of Code

Step 0 - Download the XSteam.m file from resource centre
Place it in the MATLAB library folder or same folder containing your Main file.
About XSteam- XSteam is digital version of the steam table it contains the various values like enthalpy,
entropy ,CP CV , Saturaion temperature etc. of water at various pressure and temperature.
It needs to be placed in the same folder containing the main code.
A certain syntax need to be followed to access the various data points from the library.
Example-
We need enthalpy at temperature 'T' and pressure 'P'
syntax for this -
h=XSteam('h_pT', p, T);
Note the variable list is available in the X steam file and perticularly those only can be used.
Step 1- Take the initial conditions as the input in the program, these are required to start the calculations for successive thermodynamic points.
Provided initial conditions - turbine inlet pressure and temperature and turbine exit pressure
Step 2- Extract the enthalpy and entropy value from the Xsteam and save it in respective variables.
Step 3- Since the expansion process is a isoentropic process the entropy remains the same, but during expansion the steam expands from superheated to lower zone dryness fraction comes into existance. Using the values from XSteam calculate the dryness fraction . Using the same dryness fraction calculate enthalpy at point 2
Step 4- The outlet pressure of the turbine is the inlet pressure of the compressor extract enthalpy and entropy at this state
Step 5- After getting the state point values, use them to find the vital results like work done, effeciency,specific steam consumption etc.
Step 6- Plot the saturation curves on both T vs S and H vs S curve and label it with different curve
Step 7- Plot the state points with simple line and plot the closed plot , add the labels and marking on the points , use a different colour for line plots.
Step 8- Display the results on the command window with proper formatting and correct sequence
CODE
%Rankine cycle simulator
clear all
close all
clc
fprintf(' Rankine Cycle\n ')
fprintf('1-2 is Isentropic Expansion in Turbine\n')
fprintf(' 2-3 is constant pressure heat removal\n')
fprintf(' 3-4 is Isentropic Compression in Pump \n')
fprintf(' 4-1 Constant pressure Heat addition in Boiler\n')

% Entering the provided input
propmt1=('Enter the turbine inlet pressure')
x=input(propmt1);
p1 = x;        %turbine intel pressure

propmt2=('Enter the turbine inlet temperature')
y=input(propmt2);
T1 = y;       %turbine inlet temperature

propmt3=('Enter the turbine exit pressure')
z=input(propmt3);
p2 = z;      %turbine outlet pressure

% extracting point 1 variables 
h1 = XSteam('h_pT', p1, T1);        % Enthaply at pressure and Temp 1
s1 = XSteam('s_pT', p1, T1);        % Entropy at pressure and Temp 1

% extracting point 2 variables
s2 = s1;                            % Isentropic Expansion
sf2 = XSteam('sL_p', p2);           % Saturated liquid entropy at pressure 2
sg2 = XSteam('sV_p', p2);           % Saturated vapour entropy at pressure 2
x2 = (s2-sf2)/(sg2-sf2);            % Vapour Fraction at state point 2
hf2 = XSteam('hL_p', p2);           % Saturated liquid Enthalpy at pressure 2
hg2 = XSteam('hV_p', p2);           % Saturated vapour Enthalpy at pressure 2
h2 = hf2 + (x2*(hg2-hf2));          % Enthalpy at state point 2

% extracting point 3 variables
p3 = p2;                            % Constant Pressure heat removal process
s3 = XSteam('sL_p', p3);            % Saturated liquid entropy at Pressure 3
h3 = XSteam('hL_p', p3);            % Saturated liquid Enthalpy at Pressure 3

% extracting point 4 variables
s4 = s3;                            % Isentropic Compression process
p4 = p1;                            % Constant Pressure heat rejection

% Work done in Turbine for the rankine cycle
W_T = h1-h2;

% pump work
v3 = XSteam('vL_p',p3);             % Saturated Liquid Vapour at pressure 3
W_P = v3*(p4-p3)*100;               % Work done for pump
h4 = h3 - W_P;                      % Enthalpy at State point 4

% Net work done for Rankine Cycle
W_net = W_T - W_P;

% Heat Addition to System
Q_in = h1-h4;

% Heat Rejection from System
Q_out = h2-h3;

% Thermal Efficiency of Rankine Cycle
T_eff = (W_net/Q_in)*100;

%specific steam consumption  = (Mass flow rate / Net work done)
Sp_S = (3600/W_net);

% Calculation of Temperature at All state Point 2, 3 and 4
T3 = XSteam('Tsat_p',p3);           % Saturation Temperature at Pressure 3
T2 = T3;                            % Becuase of Constant Pressure Heat addition
Cp4 = XSteam('Cp_ps',p4,s4);        % Specific isobaric heat capacity
Cv4 = XSteam('Cv_ps',p4,s4);        % Specific isochoric heat capacity
k = Cp4/Cv4;
T4 = T3/((p3/p4)^((k-1)/k));        % Temperature at State point 4

% Calculation of Other constant for saturated liquid and Vapour
T6 = XSteam('Tsat_p', p1);          % Saturated Temperature at Pressure 1
s5 = XSteam('sL_p', p1);            % Saturated Liquid entropy at pressure 1
s6 = XSteam('sV_p', p1);            % Saturated Vapour entropy at Pressure 1
h5 = XSteam('hL_p', p1);            % Saturated Liquid Enthalpy at Pressure 1
h6 = XSteam('hV_p', p1);            % Saturated Vapour Enthalpy at pressure 1
T5 = T6;

%Plotting for Saturation Line
T = linspace(1,700,1000);
for i = 1:length(T)
    sf(i) = XSteam('sL_T' ,T(i));   % Saturated Liquid Entropy
    sg(i) = XSteam('sV_T' ,T(i));   % Saturated Vapour Entropy
    hf(i) = XSteam('hL_T' ,T(i));   % Saturated Liquid Enthalpy
    hg(i) = XSteam('hV_T' ,T(i));   % Saturated Vapour Enthalpy
    
end

% Plotting T-S Diagram for Rankine Cycle-0
figure(1)
hold on
plot(sf,T,'color','b','linewidth',2)
plot(sg,T,'color','b','linewidth',2)
plot([s1 s2],[T1 T2], 'color', 'r', 'linewidth',3)
plot([s2 s3],[T2 T3], 'color', 'r', 'linewidth',3)
plot([s3 s4],[T3 T4], 'color', 'r', 'linewidth',3)
plot([s4 s5],[T4 T5], 'color', 'r', 'linewidth',3)
plot([s5 s6],[T5 T6], 'color', 'r', 'linewidth',3)
s_1 = linspace(s6,s1,1000);
for j = 1:length(s_1)
    Tc(j) = XSteam('T_ps',p1,s_1(j));
end
plot(s_1,Tc,'color','r','linewidth',3)
text(s1+0.1, T1, '1')
text(s2+0.1, T2, '2')
text(s3, T3-20, '3')
text(s4, T4+20, '4')
title('Temperature Vs Entropy')
xlabel('Entropy (Kj/kg-k)')
ylabel('Temeperature (Deg. Celcius)')
legend('Saturation Curve')

% Plotting H-S Diagram for Rankine Cycle
figure(2)
hold on
plot(sf,hf,'color','b','linewidth',2)
plot(sg,hg,'color','b','linewidth',2)
plot([s1 s2],[h1 h2],'color','r','linewidth',3)
plot([s2 s3],[h2 h3],'color','r','linewidth',3)
plot([s3 s4],[h3 h4],'color','r','linewidth',3)
hc = linspace(h4,h5,100);
for k = 1:length(hc)
    s_c(k) = XSteam('s_ph',p1,hc(k));
end
plot(s_c,hc,'color','r','linewidth',3)
plot([s5 s6],[h5 h6],'color','r','linewidth',3)
for l = 1:length(s_1)
    h_c(l) = XSteam('h_ps',p1,s_1(l));
end
plot(s_1,h_c,'color','r','linewidth',3)
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')
xlabel('Entropy (Kj/kg-k)')
ylabel('Enthalpy (KJ/Kg)')
legend('Saturation Curve')

% final results
disp('Results of Rankine Cycle')
fprintf('At state point 1\t\t\t\t\t')
fprintf('At state Point 2\n')
fprintf('P1 = %10f in Bar\t\t\t\t',p1);
fprintf('P2 = %10f in Bar\n',p2);
fprintf('T1 = %11f in Deg.Celcius\t\t',T1);
fprintf('T2 = %11f in Deg.Celcius\n',T2);
fprintf('H1 = %12f in KJ/Kg\t\t\t',h1);
fprintf('H2 = %12f in KJ/Kg\n',h2);
fprintf('S1 = %9f in KJ/Kg-k\t\t\t',s1);
fprintf('S2 = %9f in KJ/Kg-k\n',s2);
fprintf('\n')
fprintf('At state point 3\t\t\t\t\t')
fprintf('At state Point 4\n')
fprintf('P3 = %10f in Bar\t\t\t\t',p3);
fprintf('P4 = %10f in Bar\n',p4);
fprintf('T3 = %11f in Deg.Celcius\t\t',T3);
fprintf('T4 = %11f in Deg.Celcius\n',T4);
fprintf('H3 = %12f in KJ/Kg\t\t\t',h3);
fprintf('H4 = %12f in KJ/Kg\n',h4);
fprintf('S3 = %9f in KJ/Kg-k\t\t\t',s3);
fprintf('S4 = %9f in KJ/Kg-k\n',s4);
fprintf('\n')
fprintf('Turbine Work Done = %14f in KJ/Kg\n',W_T)
fprintf('Pump Work Done = %15f in KJ/Kg\n',W_P)
fprintf('Net Work Done  = %17f in KJ/Kg\n',W_net)
fprintf('Thermal Efficiency = %13f in percent\n',T_eff)
fprintf('Sp. Steam Consumption = %f in KJ/Kw\n',Sp_S)
RESULTS
Error Faced
- Syntax errors while accessing XSteam functions
- Formatting error in final output
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.