Challenge

Project 2 - Rankine cycle Simulator

Aim: To simulate the Rankine Cycle and plot the corresponding T-S and H-S plots using MATLAB.

Objective:

  • Calculate the state points of the Rankine Cycle based on given inputs.
  • Plot the corresponding T-S and H-S plots for the given set of inputs.

Given Input Values:

  • Turbine Inlet temperature = 400° C
  • Turbine Inlet Pressure = 30 bars
  • Turbine Outlet Pressure = 0.05 bars = Condenser Inlet Pressure

Required Output Values:

  • Net work output
  • Back work ratio

Introduction:

  • Rankine cycle converts thermal energy to mechanical energy.
  • On-road vehicles, which convert around one-third of the fuel energy into useful mechanical energy for propulsion, are moving energy conversion systems that generate considerable waste heat.
  • It is found from prior research that the Rankine Cycle has great potential in automobile waste heat harvesting applications which can, in turn, be connected to the combustion engine which will result in better-wasted heat consumption and increasing the performance of the vehicle and helping the environment.
  • Rankine cycle is the most basic thermodynamic cycle for any steam powerplant. It starts with the heating of water in the boiler at constant pressure to produce steam. The steam produced is then isentropically expanded in the turbine to produce work. After the turbine, the steam goes into the condenser where it is cooled and converted into the water at constant pressure. The water is then again pumped back to the boiler by a pump and the cycle continues.
  • The ideal Rankine cycle consists of the following four processes:
    1. 1-2: Isentropic compression in a pump
    2. 2-3: Constant pressure heat addition in a boiler
    3. 3-4: Isentropic expansion in a turbine
    4. 4-1: Constant pressure heat rejection in a condenser

Main Code

 % A program for simulating Rankine cycle and plot required graphs.
close all
clear all
clc

% Subscript for different state points
% 1 = Turbine inlet or Boiler outlet, 2 = Condenser inlet or Turbine outlet,
% 3 = Pump inlet or Condenser outlet, 4 = Boiler inlet or Pump outlet
%% Input parameters -
% p1 = Turbine inlet pressure (bar),   
% T1 = Temperature at turbine inlet(deg C), 
% p2 = Turbine outlet pressure (bar),
% Description about four process,
fprintf('Process (1-2) - Isentropic Expansion in the Turbine\n')
fprintf('Process (2-3) - Isobaric Heat Rejection by the Condenser\n')
fprintf('Process (3-2) - Isentropic Compression in the Pump\n')
fprintf('Process (4-1) - Isobaric Heat Addition by the Boiler\n')

% For Inputting state variables at point 1,
p1 = input('Enter the Pressure at the Turbine Inlet (in bar): ');
t1 = input('Enter the Temperature at the Turbine inlet (in Degree celsius): ');
p2 = input('Enter the Pressure at the Turbine Outlet (in bar): ');
%% State variable at state point 1(i.e Turbine Inlet ) 
h1 = XSteam('h_pT',p1,t1); % Enthalpy in [kJ/kg]
s1 = XSteam('s_pT',p1,t1); % Specific entropy  in [kJ/kg K]
v1 = XSteam('v_pT',p1,t1); % Specific volume in [m3/kg]

%% State variable at state point 2(i.e Conderser Inlet)
s2 = s1;                                            % Specific entropy  in [kJ/kg K]
h2 = XSteam('h_px',p2,XSteam('x_ps',p2,s2));        % Enthalpy in [kJ/kg]
t2 = XSteam('T_ps',p2,s2);                          % Temperature in [degree C]
v2 = XSteam('v_ps',p2,s2);                          % Specific volume in [m3/kg]

%% State variable at state point 3 (i.e Pump Inlet)
p3 = p2;                                            % Pressure in [bar]
t3 = XSteam('Tsat_p',p3);                           % Temperature in [degree C]
h3 = XSteam('hL_p',p3);                             % Enthalpy in [kJ/kg]
s3 = XSteam('sL_p',p3);                             % Specific entropy  in [kJ/kg K]
v3 = XSteam('vL_p',p3);                             % Inlet Specific volume in [m3/kg]

%% State variable at state point 4 (i.e Boiler Inlet)
s4 = s3;                                            % Specific entropy  in [kJ/kg K]
p4 = p1;                                            % Pressure in [bar]
h4 = XSteam('h_ps',p4,s4);                          % Enthalpy in [kJ/kg]
t4 = XSteam('T_ps',p4,s4);                          % Temperature in [degree C]
v4 = XSteam('v_ps',p4,s4);                          % Specific volume in [m3/kg]

%% After defining all the states now lets process each of these state and in between data variables

%% Ploting Graph for Ideal Rankine cycle in "T" vs "s".
figure(1)
hold on
plot([s1 s2],[t1 t2],'color','r','linewidth',5);
plot([s2 s3],[t2 t3],'color','k','linewidth',5);
plot([s3 s4],[t3 t4],'color','c','linewidth',5);
Trange = linspace(t4,t1,500);
for i = 1:length(Trange)
    s_range(i) = XSteam('s_pT',p1,Trange(i));
    h_range23(i) = XSteam('h_ps',p1,s_range(i));
    h_range41(i) = XSteam('h_ps',p2,s_range(i));
end
plot(s_range,Trange,'color','b','linewidth',5);
legend('ReversibleAdiabaticExpansion', 'ConstantPressureHeatRejection', 'ReversibleIsentropicCompression', 'ConstantPressureHeatAddtion');

%% Ploting Graph for Ideal Rankine cycle in 'h' vs 's'.
figure(2)
hold on
plot([s1 s2],[h1 h2],'color','r','linewidth',5);
plot(s_range,h_range23,'color','k','linewidth',5);
plot([s3 s4],[h3 h4],'color','c','linewidth',5);
plot(s_range,h_range41,'color','b','linewidth',5);
legend('ReversibleAdiabaticExpansion', 'ConstantPressureHeatRejection', 'ReversibleIsentropicCompression', 'ConstantPressureHeatAddtion');

%% Ploting graphs for 'T' vs 's' 
t_range = linspace(0,374.15,500);                   % Temperature from 0 to critical point of water in [degree C]
figure(1)
hold on
for i = 1:length(t_range)
    plot(XSteam('sL_t',t_range(i)),t_range(i),'.','color','g')
    plot(XSteam('sV_t',t_range(i)),t_range(i),'.','color','g')
end

%% Ploting graphs for  'h' vs 's' 
figure(2)
hold on
for i = 1:length(t_range)
    plot(XSteam('sL_t',t_range(i)),XSteam('hL_t',t_range(i)),'.','color','g')
    plot(XSteam('sV_t',t_range(i)),XSteam('hV_t',t_range(i)),'.','color','g')
end

%% Ploting Diagram for All state points for Ideal Rankine cycle in 'T' vs 's' 
figure(1)
hold on
plot(s1,t1,'ko')
plot(s2,t2,'ko')
plot(s3,t3,'ko')
plot(s4,t4,'ko')
grid on
title('T-s Diagram of RANKINE CYCLE')
xlabel('Temperature in [degree C]')
ylabel('Specific entropy  in [kJ/kg K]')

%% Ploting Diagram for All state points for Ideal Rankine cycle in 'h' vs 's' 
figure(2)
hold on
plot(s1,h1,'ko')
plot(s2,h2,'ko')
plot(s3,h3,'ko')
plot(s4,h4,'ko')
grid on
title('h-s Diagram of RANKINE CYCLE')
xlabel('Enthalpy in [kJ/kg]')
ylabel('Specific entropy  in [kJ/kg K]')


%% Finally Calculating Work and Efficiency
Work_turbine = h1 - h2;                              % work transferred from the working fluid (kJ/kg) 
Q_taken_out_condenser = h2 - h3;                           % heat rejected from the working fluid (kJ/kg) 
Work_pump = h4 - h3;                                 % work transferred into the working fluid (kJ/kg)
Q_given_boiler = h1 - h4;                               % heat transferred to the working fluid (kJ/kg) 
Back_Work_Ratio = Work_turbine / Work_pump;                          % Back Work Ratio
SSE = 3600/(Work_turbine - Work_pump);                   % Specific Steam Consumption [kg/kWh]
Work_net = Work_turbine - Work_pump;                         % Net work on the working fluid (kJ/kg) 
Effi_rankine = Work_net/Q_given_boiler;                       % Rankine Cycle Efficiency

clc
%% Printing Results to the USER GIVING input
fprintf('**********RANKINE CYCLE:IDEAL CYCLE FOR VAPOUR POWER CYCLE**********\n\n');

fprintf('Process 1-2: Reversible adiabatic expansion process in the steam turbine\n');
fprintf('Process 2-3: Constant pressure heat transfer process in the condenser\n');
fprintf('Process 3-4: Reversible adiabatic compression process in the pump\n');
fprintf('Process 4-1: Constant pressure heat transfer process in the boiler\n\n');

fprintf('----------State variable at state point 1----------\n');
fprintf('Turbine Inlet Temperature T1 = %.5f in [degree C]\n',t1);
fprintf('Turbine Inlet Pressure p1 = %.5f in [bar]\n',p1);
fprintf('Turbine Inlet Enthalpy h1 = %.5f in [kJ/kg]\n',h1);
fprintf('Turbine Inlet Specific entropy s1 = %.5f in [kJ/kg K]\n',s1);
fprintf('Turbine Inlet Specific volume v1 = %.5f in [m3/kg]\n\n',v1);

fprintf('----------State variable at state point 2----------\n');
fprintf('Conderser Inlet Temperature T1 = %.3f in [degree C]\n',t2);
fprintf('Conderser Inlet Pressure p1 = %.3f in [bar]\n',p2);
fprintf('Conderser Inlet Enthalpy h1 = %.3f in [kJ/kg]\n',h2);
fprintf('Conderser Inlet Specific entropy s1 = %.3f in [kJ/kg K]\n',s2);
fprintf('Conderser Inlet Specific volume v1 = %.3f in [m3/kg]\n \n',v2);

fprintf('----------State variable at state point 3----------\n');
fprintf('Pump Inlet Temperature T1 = %.3f in [degree C]\n',t3);
fprintf('Pump Inlet Pressure p1 = %.3f in [bar]\n',p3);
fprintf('Pump Inlet Enthalpy h1 = %.3f in [kJ/kg]\n',h3);
fprintf('Pump Inlet Specific entropy s1 = %.3f in [kJ/kg K]\n',s3);
fprintf('Pump Inlet Specific volume v1 = %.3f in [m3/kg]\n\n',v3);

fprintf('----------State variable at state point 4----------\n');
fprintf('Boiler Inlet Temperature T1 = %.4f in [degree C]\n',t4);
fprintf('Boiler Inlet Pressure p1 = %.4f in [bar]\n',p4);
fprintf('Boiler Inlet Enthalpy h1 = %.4f in [kJ/kg]\n',h4);
fprintf('Boiler Inlet Specific entropy s1 = %.4f in [kJ/kg K]\n',s4);
fprintf('Boiler Inlet Specific volume v1 = %.4f in [m3/kg]\n \n',v4);

fprintf('----------Work and Efficiency----------\n'); 
fprintf('Work transferred from the working fluid Wturbine = %.4f in [kJ/kg]\n',Work_turbine);
fprintf('Heat rejected from the working fluid Qcondenser = %.4f in [kJ/kg]\n',Q_taken_out_condenser);
fprintf('Work transferred into the working fluid Wpump = %.4f in [kJ/kg]\n',Work_pump);
fprintf('Heat transferred to the working fluid Qboiler = %.4f in [kJ/kg]\n \n',Q_given_boiler);

fprintf('Back Work Ratio BWR = %.4f \n',Back_Work_Ratio);
fprintf('Specific Steam Consumption SSE = %.4f in [kg/kWh] \n',SSE);
fprintf('Net work on the working fluid Wnet = %.4f in [kJ/kg] \n',Work_net);
fprintf('Rankine Cycle Efficiency ETArankine = %.4f %% \n\n',Effi_rankine*100);

fprintf(' \n ..................SUCESSFULLY DONE THE CALCULATIONS............... \n');
%% END

Steps:

1) Start the program with \'clear all\',\'close all\', and \'clc\' command.

2) As our task is to take user input, to facilitate users to continue or end the program, we have introduced a while statement at the start of the script. While statement, the first step is to make provision for MatLab to accept user input. \'input()\' is used to provide the user input. The user input includes temperature and pressure before entry to the turbine and pressure after exiting to the turbine.

3) Now based on user inputs parameters at 4 state points are calculated. Thermodynamic parameters include enthalpy H, entropy S, temperature T, pressure P, and dryness factor X at state point 2. For calculating these parameters XSteam() i.e. steam table MatLab program is used. This program consists of functions for all thermodynamic properties. After calling these functions in the main script gives us thermodynamic properties based on other properties like temperature and pressure.

4) After calculating all parameters, the next objective is to calculate pump work, turbine work, net work output, back ratio, and thermal efficiency.

5) Now, we need to display all these results in the command window which is done by using command \'fprintf()\'.

6) The next objective is to plot the graph for H-S and T-S. The first step in plotting this graph is to plot the saturation curve which is calculated using \'for\' loop. Under \'for\' loop, values for entropy and enthalpy are calculated over a temperature range. Plotting these calculated values, the plot of a saturation curve can is obtained. Other processes are plotted by plotting respective values of H, S, T.

7) Now, when the program is run it asks the user to input Turbine Inlet temperature, Turbine Inlet Pressure, Turbine Outlet Pressure which is Condenser Inlet Pressure.

8) After the input parameters are given, all the results are displayed in the command window.

Results

First, the user has to input the given input parameters in the command window.

  • Turbine Inlet temperature = 400° C

  • Turbine Inlet Pressure = 30 bars

  • Turbine Outlet Pressure = 0.05 bars

**********RANKINE CYCLE:IDEAL CYCLE FOR VAPOUR POWER CYCLE**********

Process 1-2: Reversible adiabatic expansion process in the steam turbine
Process 2-3: Constant pressure heat transfer process in the condenser
Process 3-4: Reversible adiabatic compression process in the pump
Process 4-1: Constant pressure heat transfer process in the boiler

----------State variable at state point 1----------
Turbine Inlet Temperature T1 = 400.00000 in [degree C]
Turbine Inlet Pressure p1 = 30.00000 in [bar]
Turbine Inlet Enthalpy h1 = 3231.57103 in [kJ/kg]
Turbine Inlet Specific entropy s1 = 6.92326 in [kJ/kg K]
Turbine Inlet Specific volume v1 = 0.09938 in [m3/kg]

----------State variable at state point 2----------
Conderser Inlet Temperature T1 = 32.875 in [degree C]
Conderser Inlet Pressure p1 = 0.050 in [bar]
Conderser Inlet Enthalpy h1 = 2110.708 in [kJ/kg]
Conderser Inlet Specific entropy s1 = 6.923 in [kJ/kg K]
Conderser Inlet Specific volume v1 = 22.951 in [m3/kg]

----------State variable at state point 3----------
Pump Inlet Temperature T1 = 32.875 in [degree C]
Pump Inlet Pressure p1 = 0.050 in [bar]
Pump Inlet Enthalpy h1 = 137.765 in [kJ/kg]
Pump Inlet Specific entropy s1 = 0.476 in [kJ/kg K]
Pump Inlet Specific volume v1 = 0.001 in [m3/kg]

----------State variable at state point 4----------
Boiler Inlet Temperature T1 = 32.9452 in [degree C]
Boiler Inlet Pressure p1 = 30.0000 in [bar]
Boiler Inlet Enthalpy h1 = 140.7622 in [kJ/kg]
Boiler Inlet Specific entropy s1 = 0.4763 in [kJ/kg K]
Boiler Inlet Specific volume v1 = 0.0010 in [m3/kg]

----------Work and Efficiency----------
Work transferred from the working fluid Wturbine = 1120.8628 in [kJ/kg]
Heat rejected from the working fluid Qcondenser = 1972.9431 in [kJ/kg]
Work transferred into the working fluid Wpump = 2.9971 in [kJ/kg]
Heat transferred to the working fluid Qboiler = 3090.8088 in [kJ/kg]

Back Work Ratio BWR = 373.9816
Specific Steam Consumption SSE = 3.2204 in [kg/kWh]
Net work on the working fluid Wnet = 1117.8657 in [kJ/kg]
Rankine Cycle Efficiency ETArankine = 36.1674 %


..................SUCESSFULLY DONE THE CALCULATIONS...............

Conclusion:

  • Rankine cycle is the basic cycle for understanding about the steam turbine systems in thermodynamics.
  • The required output values are obtained for the given input parameters:
      • Net work output = 1117.8657 in [kJ/kg]
      • Back work ratio =373.9816
  • Thus, the Rankine cycle is successfully simulated using MATLAB.
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.