使用 Python 建模奥托循环和狄塞尔循环

pythonserver side programmingprogramming更新于 2023/8/31 21:15:00

奥托循环

一种称为奥托循环的空气标准循环用于火花点火 (SI) 发动机。它由两个可逆绝热过程和两个等容过程(恒定体积)组成,共四个过程。当在可逆绝热过程中发生功相互作用时,热量增加(2-3)和热量排出(4-1)以等容方式发生(3-4 和 1-2)。奥托循环的示意图如下图所示。

要在 Python 中对循环进行建模,需要考虑的输入变量包括最大压力 $\mathrm{(P_{max})}$、最小压力 $\mathrm{(P_{min})}$、最大体积 $\mathrm{(V_{max})}$、压缩比 (r) 和绝热指数 $\mathrm{(\gamma)}$。表 2 解释了奥托循环中涉及的不同过程的热力学计算 −

过程 1-2

$$\mathrm{p_{1} \: = \: p_{min}}$$

$$\mathrm{v_{1} \: = \: v_{max}}$$

使用压缩比 (𝑟),首先将根据点 1 处的体积评估点 2 处的体积,如下所示 −

$$\mathrm{v_{2} \: = \: \frac{v_{1}}{r}}$$

然后,过程 1-2 的绝热常数评估为−

$$\mathrm{c_{1} \: = \: p_{1} \: \times \: v_{1}^{\gamma}}$$

一旦知道 $\mathrm{c_{1}}$,沿线 1-2 的压力变化将被评估为 −

$$\mathrm{p \: = \: \frac{c_{1}}{v^{\gamma}}}$$

过程 2-3

$$\mathrm{p_{3} \: = \: p_{max}}$$

由于该过程是等容的,因此体积保持不变,因此−

$$\mathrm{v_{3} \: = \: v_{2}}$$

因此,点 2 处的压力可计算为 −

$$\mathrm{p_{2} \: = \: \frac{c_{1}}{v^{\gamma}_{2}}}$$

过程 3-4

设 $\mathrm{c_{2}}$ 为线 3-4 上的常数。由于点 3 处的压力和温度已知,因此可逆绝热线上的常数可以计算为 −

$$\mathrm{c_{2} \: = \: p_{3} \: \times \: v_{3}^{\gamma}}$$

又由于 $\mathrm{v_{4} \: = \: v_{1}}$,因此 3-4 线上的压力可以计算为 −

$$\mathrm{p \: = \: \frac{c_{2}}{v^{\gamma}}}$$

过程 4-1

$\mathrm{c_{2}}$ 和$\mathrm{c_{4}}$ 已经已知,因此 $\mathrm{p_{4}}$ 可以计算为

$$\mathrm{p_{4} \: = \: \frac{c_{4}}{v^{\gamma}_{4}}}$$

Otto 循环的 Python 程序

Otto 循环的 Python 函数如下 −

from pylab import *
from pandas import *
def otto(p_min,p_max,v_max,r,gma):
font = {'family' : 'Times New Roman','size' : 39}
figure(figsize=(20,15))
rc('font', **font)
'''This function prints Otto cycle
arguments are as follows:
_min: minimum pressure
p_max: Maximum pressure
v_max: Maximum volume
r: compression ratio
gma: Adiabatic exponent
The order of arguments is:
p_min,p_max,v_max,r,gma
'''

#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 1-2
#~~~~~~~~~~~~~~~~~~~~~~~~~
   p1=p_min
   v1=v_max
   v2=v1/r
   c1=p1*v1**gma
   v=linspace(v2,v1,100)
   p=c1/v**gma
   plot(v,p/1000,'b',linewidth=3)
   
#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 2-3
#~~~~~~~~~~~~~~~~~~~~~~~~~
   p3=p_max
   v3=v2
   p2=c1/v2**gma
   p=linspace(p2,p3,100)
   v=100*[v3]
   plot(v,p/1000,'r',linewidth=3)
   
#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 3-4
#~~~~~~~~~~~~~~~~~~~~~~~~~
   c2=p3*v3**gma
   v4=v1
   v=linspace(v3,v4,100)
   p=c2/v**gma
   plot(v,p/1000,'g',linewidth=3)
   
#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 4-1
#~~~~~~~~~~~~~~~~~~~~~~~~~
   v4=v1
   p4=c2/v4**gma
   p=linspace(p1,p4,100)
   v=100*[v1]
   plot(v,p/1000,'r',linewidth=3)
   title('Otto Cycle',size='xx-large',color='k')
   xlabel('Volume ($m^3$)')
   ylabel('Pressure (kPa)')
   text(v1,p1/1000-30,'1')
   text(v2,p2/1000-200,'2')
   text(v3+0.01,p3/1000-20,'3')
   text(v4,p4/1000+10,'4')
   data={'p':[p1,p2,p3,p4],
      'v':[v1,v2,v3,v4],
      'c':[c1,'' ,c2,'' ],
      'State': [1,2,3,4]}
   df=DataFrame(data)
   savefig('Otto_final.jpg')
   return df.set_index('State')
   oc=otto(2*10**5,35*10**5,0.5,5,1.4)
   show()
   oc

对于 $\mathrm{p_{min} \: = \: 2 \: \times \: 10^{5} \: Pa \: , \: p_{max} \: = \: 35 \: \times \: 10^{5} \: Pa \: , \: v_{max} \: = \: 0.5 \: m^{3} \: , \: r \: = \: 5 \: and \: \gamma \: = \: 1.4 \: ,}$ 程序生成的奥托循环图如下−

从代码中获得的不同点的压力和体积如下 −

状态

p

v

1

2.000000e+05

0.5

2

1.903654e+06

0.1

3

3.500000e+06

0.1

4

3.677139e+05

0.5

狄塞尔循环

狄塞尔循环是压燃 (CI) 发动机中使用的空气标准循环。该循环由四个过程组成 - 两个可逆绝热过程、一个等压过程(恒定压力)和两个等容过程(恒定体积)。热量增加发生在过程 2-3 中,而热量排出发生在过程 4-1 中。过程 1-2 和 3-4 分别是循环中做功和做功相互作用发生的地方。下图显示了狄塞尔循环图。

要对循环进行建模,需要考虑的输入变量包括最大压力 $\mathrm{(p_{max})}$、最小压力 $\mathrm{(p_{min})}$、最大体积 $\mathrm{(v_{max})}$、截止比 $\mathrm{(r_{c})}$ 和绝热指数 \mathrm{(\gamma)}。下面解释了狄塞尔循环中涉及的不同过程的热力学计算 −

过程 1-2

$$\mathrm{p_{1} \: = \: p_{min}}$$

$$\mathrm{v_{1} \: = \: v_{max}}$$

$$\mathrm{p_{2} \: = \: p_{max}}$$

由于 1-2 是绝热过程,因此 $\mathrm{pv^{\gamma} \: = \: const \: ;}$ 令常数为 $\mathrm{(c_{1})}$。点 2 处的体积可计算为 −

$$\mathrm{v_{2} \: = \: v_{1} \: \times (\frac{p_{1}}{p_{2}})^{\frac{1}{\gamma}}}$$

因此 $\mathrm{c_{1} \: = \: p_{1} \: \times \: v_{1}^{\gamma}}$

然后,过程 1-2 中的绝热常数可计算为 −

$$\mathrm{c_{1} \: = \: p_{1} \: \times \: v_{1}^{\gamma}}$$

一旦知道 $\mathrm{c_{1}}$,沿线 1-2 的压力变化可计算为 −

$$\mathrm{p \: = \: \frac{c_{1}}{v^{\gamma}}}$$

过程 2-3

由于该过程是等压的,因此压力保持不变,因此 −

$$\mathrm{p_{3} \: = \: p_{2}}$$

点 3 处的体积可计算为 −

$$\mathrm{v_{3} \: = \: r_{c} \: \times \: v_{2}}$$

因此,体积 $\mathrm{v_{2}}$ 和 $\mathrm{v_{3}}$ 之间的压力变化很容易知道。

过程 3-4

让 $\mathrm{c_{2}}$ 成为沿线 3-4 的常数。由于点 3 处的压力和温度已知,因此可逆绝热线上的常数可以计算为 −

$$\mathrm{c_{2} \: = \: p_{3} \: \times \: v_{3}^{\gamma}}$$

并且由于 $\mathrm{v_{4} \: = \: v_{1}}$,因此 3-4 处的压力变化可以计算为 −

$$\mathrm{p \: = \: \frac{c_{2}}{v^{\gamma}}}$$

过程 4-1

$\mathrm{c_{2}}$ 和$\mathrm{v_{4}}$ 已知,因此 $\mathrm{p_{4}}$ 可计算为

$$\mathrm{p_{4} \: = \: \frac{c_{4}}{v^{\gamma}_{4}}}$$

用于对狄塞尔循环进行建模的 Python 程序

用于对狄塞尔循环进行建模的 Python 函数如下 −

#~~~~~~~~~~~~~~~~~~~
# Diesel Cycle
#~~~~~~~~~~~~~~~~~~~
   def diesel(p_min,p_max,v_max,r_c,gma):
   font = {'family' : 'Times New Roman','size' : 39}
   figure(figsize=(20,15))
   title('Rankine Cycle with Feed water heating (T-s Diagram)',color='b')
   rc('font', **font)
   '''This function prints Diesel cycle
   arguments are as follows:
   p_min: minimum pressure
   p_max: Maximum pressure
   v_max: Maximum volume
   rc: Cut-Off ratio
   gma: Adiabatic exponent
   The order of arguments is:
   p_min,p_max,v_max,rc,gma
   '''

#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 1-2
#~~~~~~~~~~~~~~~~~~~~~~~~~
   p1=p_min
   v1=v_max
   p2=p_max
   v2=v1*(p1/p2)**(1/gma)
   c1=p1*v1**gma
   v=linspace(v2,v1,100)
   p=c1/v**gma
   plot(v,p/1000,'b',linewidth=3)
   
#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 2-3
#~~~~~~~~~~~~~~~~~~~~~~~~~
   p3=p2
   p=zeros(100)
   p=p+p2
   v3=r_c*v2
   v=linspace(v2,v3,100)
   plot(v,p/1000.,'r',linewidth=3)
   
#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 3-4
#~~~~~~~~~~~~~~~~~~~~~~~~~
   v4=v1
   c2=p3*v3**gma
   v=linspace(v3,v4,100)
   p=c2/v**gma
   plot(v,p/1000,'g',linewidth=3)
   
#~~~~~~~~~~~~~~~~~~~~~~~~~
# Process 4-1
#~~~~~~~~~~~~~~~~~~~~~~~~~
   v4=v1
   v=100*[v4]
   p4=c2/v4**gma
   p=linspace(p1,p4,100)
   plot(v,p/1000.,'m',linewidth=3)
   title('Diesel Cycle',size='xx-large',color='b')
   xlabel('Volume ($m^3$)')
   ylabel('Pressure (kPa)')
   text(v1,p1/1000-30,'1')
   text(v2-0.01,p2/1000,'2')
   text(v3+0.01,p3/1000-20,'3')
   text(v4,p4/1000+10,'4')
   data={'p':[p1,p2,p3,p4],
      'v':[v1,v2,v3,v4],
      'c':[c1,'' ,c2,'' ],
      'State': [1,2,3,4]}
   df=DataFrame(data)
   savefig('Diesel_final.jpg')
   return df.set_index('State')
   dc=diesel(2*10**5,20*10**5,0.5,2,1.4)
   show()
   dc

对于 $\mathrm{p_{min} \: = \: 2 \: \times \: 10^{5} \: Pa \: , \: p_{max} \: = \: 20 \: \times \: 10^{5} \: Pa \: , \: v_{max} \: = \: 0.5 \: m^{3} \: , \: r_{c} \: = \: 2 \: 和 \: \gamma \: = \: 1.4 \: ,}$ 得到的结果如下图所示以下

状态

p

v

1

2.000000e+05

0.500000

2

2.000000e+06

0.096535

3

2.000000e+06

0.193070

4

5.278032e+05

0.500000

结论

在本教程中,借助 Python 编程对奥托和狄塞尔循环进行建模。对狄塞尔和奥托循环的功能进行了编程和测试。该功能能够根据输入数据绘制循环。


相关文章