Opracowanie: Bartosz Zajaczkowski (bartosz.zajaczkowski@pwr.edu.pl )
Politechnika Wrocławska, Wydział Mechaniczno-Energetyczny Katedra Termodynamiki, Teorii Maszyn i Urządzeń Cieplnych
Wyb. Wyspiańskiego 27, 50-370 Wrocław, T: +48 71 320 3505, W: http://fluid.itcmp.pwr.edu.pl/~zajaczkowski
Uaktualnione: 1.03.2018
Przedstawiony poniżej algorytm umożliwia dobór sprężarki dla dowolnego czynnika chłodniczego przez przeliczenie parametrów pracy czynnika chłodniczego wskazanego przez producenta, na parametry pracy dla dowolnego innego czynnika.
%pylab inline
import CoolProp.CoolProp as CP
Populating the interactive namespace from numpy and matplotlib
Sprężarkę zawsze dobiera się dla wstępnie znanych/zakładanych parametrów obiegu chłodniczego/pompy ciepła.
Odpowiednio:
Wg EN-12900, w obliczeniu obiegu nie bierze się pod uwagę dochłodzenia.
# wydajność systemu chłodniczego
Q_0 = 10000 # [kW]
# temperatura wrzenia czynnika chłodniczego
T_0 = 0 + 273.15 # [K]
# założone przegrzanie par czynnika (efekt działania termostatycznego zaworu dławiącego, itp.)
dT_sup = 20 # [°C] - wg. EN 12900
#temperatura skraplania czynnika chłodniczego
T_k = 40 + 273.15 # [K]
W pierwszej kolejności należy przeprowadzić identyfikację obiegu chłodniczego dla czynnika referencyjnego, w taki sam sposób jak czynnika docelowego. Celem jest ustalenie strumienia przepływu masy referencyjnego czynnika chłodniczego oraz wyznaczenie objętości właściwej par czynnika na wlocie do sprężarki.
Dla rozróżnienia, wszystkie parametry refencyjnego czynnika chłodniczego oznaczone są indeksem ref.
Katalogi udostępniane przez producentów sprężarek zwykle podają charakterystyki pracy urządzeń dla czynnika referencyjnego, np. R22 lub R134a. Aby wykorzystać dane urządzenie z naszym docelowym czynnikiem chłodniczym, z katalogu należy dobrać sprężarkę dla założonych parametrów pracy, ale dla referencyjnego czynnika chłodniczego, a następnie dokonać przeliczenia parametrów pracy dla czynnika docelowego.
# czynnik referencyjny do doboru sprężarki
refrigerant_ref = "R134a"
Następnie wyznacza się ciśnienia pracy dla założonych temperatur parowania i skraplania, po czym oblicza się wartości entalpii w punktach charakterystycznych obiegu. Znajomość entalpii pozwala obliczyć właściwe ciepło parowania, skraplania oraz właściwą pracę sprężania.
Ciepło właściwe parowania: $$q_0 = h_1 - h_4$$ Ciepło właściwe skraplania: $$q_k = h_2 - h_3$$ Właściwa praca obiegu: $$l_{ob} = h_2 - h_1$$
W następnej kolejności można obliczyć strumień masy czynnika chłodniczego, teoretyczną wydajność cieplną skraplacza oraz teoretyczną moc sprężarki.
Strumień masy czynnika chłodniczego: $$m_0 = \frac{Q_0}{q_0}$$
Teoretyczna wydajność cieplna skraplacza: $$Q_k = m_0 \cdot q_k$$
Teoretyczna moc sprężarki: $$L = m_0 \cdot l_{ob}$$
# ciśnienia pracy w obiegu referencyjnym
p_0_ref = CP.PropsSI('P','Q',1,'T',T_0,refrigerant_ref)
p_k_ref = CP.PropsSI('P','Q',1,'T',T_k,refrigerant_ref)
# wartości entalpii oraz entropii w punktach składających się na obieg referencyjny
if dT_sup > 0: h1_ref = CP.PropsSI('H','P',p_0_ref,'T',T_0+dT_sup,refrigerant_ref)
else: h1_ref = CP.PropsSI('H','Q',1,'T',T_0,refrigerant_ref)
s1_ref = CP.PropsSI('S','H',h1_ref,'P',p_0_ref,refrigerant_ref)
h2_ref = CP.PropsSI('H','S',s1_ref,'P',p_k_ref,refrigerant_ref)
h3_ref = CP.PropsSI('H','Q',0,'T',T_k,refrigerant_ref)
h4_ref = h3_ref
# właściwa wydajność chłodnicza parownika oraz praca sprężarki
q_0_ref = h1_ref - h4_ref
q_k_ref = h2_ref - h3_ref
l_ob_ref = h2_ref - h1_ref
# strumień masy czynnika referencyjnego dla znanej wydajności chłodniczej
m_0_ref = Q_0 / q_0_ref
print ("* Strumień masy czynnika chłodniczego: %.3f [kg/s]" % m_0_ref)
# objętość właściwa par czynnika referencyjnego na wlocie do sprężarki
v1_ref = 1 / CP.PropsSI('D','H',h1_ref,'P',p_0_ref,refrigerant_ref)
print ("* Objętość właściwa par czynnika referencyjnego na wlocie do sprężarki: %.3f [m3/kg]" % v1_ref)
* Strumień masy czynnika chłodniczego: 0.063 [kg/s] * Objętość właściwa par czynnika referencyjnego na wlocie do sprężarki: 0.076 [m3/kg]
# strumień objętości pary czynnika referencyjnego przetłaczanej przez sprężarkę
V_sk_ref = (m_0_ref * v1_ref) * 3600
print ("* Strumień objętości pary przetłaczany przez sprężarkę: %.3f [m3/h]" % (V_sk_ref))
# właściwa objętościowa wydajność chłodnicza obliczona dla czynnika referencyjnego
q_v_ref = q_0_ref / v1_ref
print ("* Właściwa objętościowa wydajność chłodnicza: %.0f [J/m3]" % (q_v_ref))
* Strumień objętości pary przetłaczany przez sprężarkę: 17.151 [m3/h] * Właściwa objętościowa wydajność chłodnicza: 2098949 [J/m3]
Teoretyczna wydajność ziębienia oraz moc sprężarki obliczone dla czynnika referencyjnego.
Q0_t_ref = V_sk_ref * q_v_ref / (3600)
print ("* Teoretyczna wydajność chłodnicza sprężarki: %.0f [W]" % (Q0_t_ref))
L_t_ref = m_0_ref * l_ob_ref
print ("* Teoretyczna moc sprężarki: %.0f [W]" % (L_t_ref))
* Teoretyczna wydajność chłodnicza sprężarki: 10000 [W] * Teoretyczna moc sprężarki: 1791 [W]
Posługując się kartą katalogową lub programem komputerowym, należy ustalić wartości trzech parametrów pracy urządzenia. Parametrów które zostaną następnie wykorzystane do przeliczenia wydajności ziębniczej i mocy sprężarki na wartości osiągane przy zastosowaniu czynnika docelowego . Są to odpowiednio:
Jeżeli w katalogu producenta nie ma podanej pojemności skokowej m3/h to trzeba ją wyliczyć. Należy odczytać w tym celu pojemność cylindra wyrażoną zwykle w cm3 i przeliczyć ją na m3 mnożąc razy 10-6. Następnie uzyskaną wartość pomnożyć przez podane przez producenta obroty silnika (pamiętając o przeliczeniu ich z min-1 na h-1).
# odczytana z katalogu pojemność skokowa
V_th = 24.9
print ("* Pojemność skokowa: %.3f [m3/h]" % (V_th))
# odczytana z katalogu rzeczywista wydajność sprężarki
Q0_rz_ref = 13110 # [W] - przykładowa wartość wprowadzona na podstawie katalogu
print ("* Wydajność ziębnicza: %.3f [W]" % (Q0_rz_ref))
# odczytana z katalogu rzeczywista moc sprężarki
L_rz_ref = 3880 # [W] - przykładowa wartość wprowadzona na podstawie katalogu
print ("* Moc sprężarki: %.3f [W]" % (L_rz_ref))
* Pojemność skokowa: 24.900 [m3/h] * Wydajność ziębnicza: 13110.000 [W] * Moc sprężarki: 3880.000 [W]
Przystępując do identyfikacji w pierwszej kolejności należy wskazać czynnik chłodniczy, który docelowo ma funkcjonować w projektowanym obiegu.
refrigerant = "R1234yf"
A następnie przeprowadzić obliczenia obiegu w sposób analogiczny jak dla czynnika referencyjnego.
# ciśnienia pracy w obiegu docelowym
p_0 = CP.PropsSI('P','Q',1,'T',T_0,refrigerant)
p_k = CP.PropsSI('P','Q',1,'T',T_k,refrigerant)
# wartości entalpii oraz entropii w punktach składających się na obieg docelowy
if dT_sup > 0: h1 = CP.PropsSI('H','P',p_0,'T',T_0+dT_sup,refrigerant)
else: h1 = CP.PropsSI('H','Q',1,'T',T_0,refrigerant)
s1 = CP.PropsSI('S','H',h1,'P',p_0,refrigerant)
h2 = CP.PropsSI('H','S',s1,'P',p_k,refrigerant)
h3 = CP.PropsSI('H','Q',0,'T',T_k,refrigerant)
h4 = h3
# właściwa wydajność chłodnicza parownika oraz praca sprężarki
q_0 = h1 - h4
q_k = h2 - h3
l_ob = h2 - h1
# strumień masy czynnika docelowego dla znanej wydajności chłodniczej (projektowanej)
m_0 = Q_0 / q_0
print ("* Strumień masy czynnika chłodniczego: %.3f [kg/s]" % m_0)
# objętość właściwa par czynnika docelowego na wlocie do sprężarki
v1 = 1 / CP.PropsSI('D','H',h1,'P',p_0,refrigerant)
v2 = 1 / CP.PropsSI('D','H',h2,'P',p_0,refrigerant)
print ("* Objętość właściwa par czynnika docelowego na wlocie do sprężarki: %.3f [m3/kg]" % v1)
* Strumień masy czynnika chłodniczego: 0.079 [kg/s] * Objętość właściwa par czynnika docelowego na wlocie do sprężarki: 0.062 [m3/kg]
# strumień objętości pary czynnika docelowego przetłaczanej przez sprężarkę
V_sk = (m_0 * v1) * 3600
print ("* Strumień objętości pary przetłaczany przez sprężarkę: %.3f [m3/h]" % (V_sk))
# właściwa objętościowa wydajność chłodnicza obliczona dla czynnika docelowego
q_v = q_0_ref / v1_ref
print ("* Właściwa objętościowa wydajność chłodnicza: %.0f [J/m3]" % (q_v))
* Strumień objętości pary przetłaczany przez sprężarkę: 17.706 [m3/h] * Właściwa objętościowa wydajność chłodnicza: 2098949 [J/m3]
Teoretyczna wydajność ziębienia oraz moc sprężarki obliczone dla docelowego czynnika chłodniczego.
Q0_t = V_th * q_v / (3600)
print ("* Teoretyczna wydajność chłodnicza sprężarki: %.0f [W]" % (Q0_t))
L_t = m_0 * l_ob
print ("* Teoretyczna moc sprężarki: %.0f [W]" % (L_t))
* Teoretyczna wydajność chłodnicza sprężarki: 14518 [W] * Teoretyczna moc sprężarki: 1831 [W]
Przed przystąpieniem do dalszych obliczeń należy przyjrzeć się jaki spręż jest niezbędny do realizacji sprężania obu analizowanych czynników. Generalnie stopień dostarczania sprężarki jest zależny (przede wszystkim) od wartości sprężu, dlatego należy sprawdzić czy dla analizowanych czynników wartości sprężu nie będą się znacząco od siebie nie różnić. $$\Pi = \frac{p_0}{p_k}$$
Na potrzeby obliczeń projektowych powinno się przyjąć, że różnica nie powinna przekraczać kilku procent (nie jest to sztywna reguła). Jeśli różnica jest zbyt duża należy założyć, że konkretny rozpatrywany model sprężarki nie będzie sie nadawać do zastosowania z docelowym, planowanym w projekcie czynnikiem roboczym. Trzeba wtedy wybrać inny model sprężarki lub rozważyć zmianę czynnika.
print ("Stopień sprężania %s: %.3f" % (refrigerant_ref,p_k_ref/p_0_ref))
print ("Stopień sprężania %s: %.3f" % (refrigerant,p_k/p_0))
print ("Różnica: %.1f%%" % ((1-(p_k_ref/p_0_ref)/(p_k/p_0))*100))
Stopień sprężania R134a: 3.472 Stopień sprężania R1234yf: 3.225 Różnica: -7.7%
Stopień dostarczania (nazywany również współczynnikiem przetłaczania lub sprawnością objętościową sprężarki) jest to stosunek ilościowy pary przetłaczanej przez sprężarkę $\dot{V_{sk}}$ do jej teoretycznej wydajności skokowej $\dot{V_{th}}$.
$$\lambda_{sp} = \frac{\dot{V_{sk}}}{\dot{V_{th}}}$$Współczynnik ten odzwierciedla wszystkie straty występujące w sprężarce rzeczywistej.
$$\lambda_{sp} = \lambda_V \lambda_T \lambda_D \lambda_N$$gdzie poszczególne składowe iloczynu to odpowiednio:
Dla sprężarek napełnianych czynnikami syntetycznymi wartości stopnia dostarczania wahają sie w granicach od 0.6 do 0.9.
Wskaźnik przestrzeni szkodliwej $\lambda_V$ oblicza się z zależności:
$$\lambda_V = 1 + C - C \cdot \left( \frac{p_k}{p_0} \right)^\frac{1}{\gamma}$$Współczynnik przestrzeni szkodliwej $C$ jest to stosunek pojemności skokowej do objętości przestrzeni szkodliwej.
$$C = \frac{\dot{V_{sp}}}{\dot{V_{szk}}}$$Jego wartość zwykle nie przekracza 0.05 i tyle należy przyjąć na potrzeby niniejszych obliczeń.
Wykładnik politropy dla sprężania izentropowego $\gamma$:
$$\gamma = \frac{c_p}{c_v}$$# współczynnik przestrzeni szkodliwej
C = 0.05
# wykładnik politropy
γ = CP.PropsSI('C','H',h1,'P',p_0,refrigerant) / CP.PropsSI('O','H',h1,'P',p_0,refrigerant)
# wskaźnik przestrzeni szkodliwej
λ_V = 1 + C - C * pow(p_k/p_0,1/γ)
print ("* Wskaźnik przestrzeni szkodliwej λ_V: %.3f [-]" % (λ_V))
* Wskaźnik przestrzeni szkodliwej λ_V: 0.909 [-]
Przybliżoną wartość współczynnika oddziaływania termicznego można obliczyć na podstawie stosunku temperatur. $$\lambda_T = \frac{T_0}{T_k}$$
# wskaźnik oddziaływania termicznego
λ_T = T_0/T_k
print ("* Wskaźnik oddziaływania termicznego λ_T: %.3f [-]" % (λ_T))
* Wskaźnik oddziaływania termicznego λ_T: 0.872 [-]
Można założyć wskaźnik strat nieszczelności $\lambda_N = 0.98$. Wartość typowa dla nowych sprężarek to ponad 0.99, natomiast dla sprężarek częściowo wyeksplowatowanych 0.95-0.98.
# wskaźnik strat dławienia
λ_D = 0.95
print ("* Wskaźnik strat dławienia λ_D: %.3f [-]" % (λ_D))
# wskaźnik strat nieszczelności
λ_N = 0.98
print ("* Wskaźnik strat nieszczelności λ_N: %.3f [-]" % (λ_N))
* Wskaźnik strat dławienia λ_D: 0.950 [-] * Wskaźnik strat nieszczelności λ_N: 0.980 [-]
λ_sp = λ_V * λ_D * λ_T * λ_N
print ("* Stopień dostarczania λ: %.3f [-]" % (λ_sp))
* Stopień dostarczania λ: 0.738 [-]
Przyjmując założenie, że stopień dostarczania pozostaje taki sam bez względu na zastosowany czynnik (przy założeniu, że spręże dla obu czynników nie odbiegają od siebie zbytnio), można teraz obliczyć:
Jeżeli obliczona wydajność ziębienia jest większa lub równa projektowanej, oznacza to że sprężarka została dobrana prawidłowo. Jeśli nie, to należy dobrać większą sprężarkę. Najlepiej zrobić to wybierając kolejny model z tego samego typoszeregu sprężarek.
# strumień masy czynnika docelowego przy założeniu, że stopień dostarczania pozostaje taki sam
# jak dla czynnika referencyjnego
m_0 = λ_sp * V_th / (3600 * v1)
print ("* Strumień masy czynnika docelowego przetłaczany przez sprężarkę: %.3f [kg/s]" % (m_0))
Q_0_sp = m_0 * q_0
print ("* Wydajność ziębienia przy docelowym czynniku: %.3f [kW]" % (Q_0_sp/1000))
if Q_0_sp > Q_0: print ("DOBRZE! Sprężarka wygląda na dobraną prawidłowo!")
else: print ("ŻLE! Sprężarka dobrana nieprawidłowo!")
L_sp = m_0 * l_ob
print ("* Moc sprężarki (teoretyczna): %.3f [kW]" % (L_sp/1000))
print ("* Moc sprężarki podana przez producenta dla czynnika referencyjnego: %.3f [W]" % (L_rz_ref))
* Strumień masy czynnika docelowego przetłaczany przez sprężarkę: 0.082 [kg/s] * Wydajność ziębienia przy docelowym czynniku: 10.381 [kW] DOBRZE! Sprężarka wygląda na dobraną prawidłowo! * Moc sprężarki (teoretyczna): 1.900 [kW] * Moc sprężarki podana przez producenta dla czynnika referencyjnego: 3880.000 [W]
Sprawność izentropową urządzenia oblicza się porównując teoretyczną moc sprężarki dla czynnika referencyjnego $L_{t,ref}$ do mocy podanej przez producenta dla zadanych warunków pracy dla czynnika referencyjnego $L_{rz,ref}$. Tak obliczona sprawność izentropowa zostanie potem wykorzystana do obliczenia parametrów pracy sprężarki po zastosowaniu czynnika docelowego. Przyjmujemy założenie, że wartość sprawności izentropowej dla czynnika docelowego będzie taka sama jak dla referencyjnego.
n_sp_ref = L_t_ref / L_rz_ref
print ("* Współczynnik sprawności izentropowej n: %.3f [-]" % (n_sp_ref))
print ("* Moc sprężarki (przy założeniu stałej wartości sprawności izentropowej): %.3f [W]" % (L_sp/n_sp_ref))
* Współczynnik sprawności izentropowej n: 0.461 [-] * Moc sprężarki (przy założeniu stałej wartości sprawności izentropowej): 4118.106 [W]
W pierwszej kolejności należy obliczyć wartość entalpii na końcu procesu sprężania z uwzględnieniem sprawności izentropowej $n$, proporcjonalnie za pomocą wrozu:
$$h_{2^\prime} = h_1 + \frac{h_2 - h_1}{n}$$Obliczenie korekcyjne wykonuje się dla położenia punktu 2 na wykresie dla czynnika docelowego oraz referencyjnego użytego do doboru sprężakrki.
# czynnik referencyjny
h2b_ref = h1_ref + (h2_ref - h1_ref) / n_sp_ref
# czynnik docelowy
h2b = h1 + (h2 - h1) / n_sp_ref
Wyznaczenie linii nasycenia cieczy i pary obu czynników.
steps = 60
pres = ones(steps)
satl = zeros(steps)
satv = zeros(steps)
pres_ref = ones(steps)
satl_ref = zeros(steps)
satv_ref = zeros(steps)
p_min = p_0 - 50000
p_crit = CP.PropsSI(refrigerant,'pcrit')
p_step = (p_crit - p_min)/(steps-1)
for i in range(0,steps):
pres[i] = p_min + i * p_step
satl[i] = CP.PropsSI('H','Q',0,'P',pres[i],refrigerant)
satv[i] = CP.PropsSI('H','Q',1,'P',pres[i],refrigerant)
print ("* Ciśnienie krytyczne %s: %.0f [Pa]" % (refrigerant, p_crit))
p_min_ref = p_0 - 50000
p_crit_ref = CP.PropsSI(refrigerant_ref,'pcrit')
p_step_ref = (p_crit_ref - p_min_ref)/(steps-1)
for i in range(0,steps):
pres_ref[i] = p_min_ref + i * p_step_ref
satl_ref[i] = CP.PropsSI('H','Q',0,'P',pres_ref[i],refrigerant_ref)
satv_ref[i] = CP.PropsSI('H','Q',1,'P',pres_ref[i],refrigerant_ref)
print ("* Ciśnienie krytyczne %s: %.0f [Pa]" % (refrigerant_ref, p_crit_ref))
* Ciśnienie krytyczne R1234yf: 3382200 [Pa] * Ciśnienie krytyczne R134a: 4059280 [Pa]
# plot results
plt.figure()
# grid and axes
plt.axes([0.025, 0.025, 0.95, 0.95])
plt.grid(which='major', axis='x', linewidth=0.25, linestyle='-', color='0.65')
plt.grid(which='minor', axis='x', linewidth=0.25, linestyle='-', color='0.65')
plt.grid(which='major', axis='y', linewidth=0.25, linestyle='-', color='0.65')
plt.grid(which='minor', axis='y', linewidth=0.25, linestyle='-', color='0.65')
# data
plt.plot([h4,h1], [p_0,p_0], 'b-', linewidth=0.75)
plt.plot([h1,h2b], [p_0,p_k], 'b-', linewidth=0.75)
plt.plot([h2b,h3], [p_k,p_k], 'b-', linewidth=0.75)
plt.plot([h3,h4], [p_k,p_0], 'b-', linewidth=0.75)
plt.semilogy(satl, pres, 'b--', linewidth=0.75)
plt.semilogy(satv, pres, 'b--', linewidth=0.75)
# data (ref)
plt.plot([h4_ref,h1_ref], [p_0_ref,p_0_ref], 'r-', linewidth=0.75)
plt.plot([h1_ref,h2b_ref], [p_0_ref,p_k_ref], 'r-', linewidth=0.75)
plt.plot([h2b_ref,h3_ref], [p_k_ref,p_k_ref], 'r-', linewidth=0.75)
plt.plot([h3_ref,h4_ref], [p_k_ref,p_0_ref], 'r-', linewidth=0.75)
plt.semilogy(satl_ref, pres_ref, 'r--', linewidth=0.75)
plt.semilogy(satv_ref, pres_ref, 'r--', linewidth=0.75)
# opis punktów
plt.annotate(refrigerant,
xy=(satl[round(0.6 * steps)],pres[round(0.6 * steps)]), xytext=(satl[round(0.9 * steps)]-160000,pres[round(0.9 * steps)]), bbox=dict(boxstyle="square", fc="w"),
arrowprops=dict(facecolor='red', arrowstyle="->"), horizontalalignment='center',
verticalalignment='top', fontsize=10)
plt.annotate(refrigerant_ref,
xy=(satl_ref[round(0.6 * steps)],pres_ref[round(0.6 * steps)]), xytext=(satl_ref[round(0.9 * steps)]-80000,pres_ref[round(0.9 * steps)]), bbox=dict(boxstyle="square", fc="w"),
arrowprops=dict(facecolor='red', arrowstyle="->"), horizontalalignment='center',
verticalalignment='top', fontsize=10)
plt.xlabel('Entalpia [J/kg]',fontsize=9)
plt.ylabel('Cisnienie [Pa]',fontsize=9)
Text(0,0.5,'Cisnienie [Pa]')