|
#include "math.h"
0 J( d' o% N2 f/ t* m9 v, S#include "stdio.h": b( [$ k' }2 g1 I* `& R
#define PI 3.1415926
& k O* {0 Q8 z9 R& d8 U5 N
" k2 T0 a/ B' O4 D; Ydouble D,S,L,ge,n,Ne,gnum,ysb,Hu,Lo,M,R,P_SC,T_SC;
! P! d' |5 I9 X; I t/*缸徑、行程、連桿長、比油耗、轉速、功率、氣缸數、壓縮比、低熱值、理論空燃比、Weibe函數常數m、氣體常數、進氣門關閉時壓力和溫度 */
* {$ A7 M7 N# g2 U5 T0 U double m_T[720],m_P[720],m_a[720];
6 B$ f3 N! n5 N% [4 D/*氣缸溫度、壓力、瞬時過量空氣系數 */- {% A+ F1 s- _
int m_CA[720],A_SC,A_CB,A_CE,A_EO,A_SO,A_EC;- ?/ `+ P! A6 ^3 A' v0 [
double Pa,Ta,hs,P,V,T,CA,m,mf,nmd,Pe,mBo,mL,dXY;
5 m' s& J, g% ^* F$ } I! s" C" p double Cv();6 W, M$ e1 s7 o4 e4 r) i4 e. I+ f$ j
double dV_dCA();4 U- L9 @. F/ [% y4 B
double dQw_dCA();* X, l/ _9 G) O4 p7 u e9 T
double dQB_dCA();0 Q% y7 Q: P3 j. J7 q
double U();% N# o, q: p2 c1 \7 i* c( L% r
double V_CA();
) A% n! B0 z; T$ a. K double dU_dnmd();
8 ^* Q" I4 X* O% F; T- e double dT_Ys_dCA();5 \' r4 k- C6 W8 P) v
double dT_Pz_dCA();
# X) b/ E- E; Z7 G" ` double dT_Rs_dCA();
' Q w z ^ C$ H' [6 l double dT_Hq_dCA();5 |3 y# ^9 t s$ a
double dT_dCA(double an);4 d" Z! J' n* V- E" a( K+ d/ x* ?
void Calculate();
! g$ A+ _ _3 h8 c, T; `8 L, N; J
, }) ^) ]$ m9 \1 T/* A編寫各子函數程序*/' p. b' m5 a2 \! e
double Cv() /*求定容比熱*/
" q" J8 ^* ~0 F/ d, I{' U+ R* Y- ]# i% Z
) U3 K% i# O2 b& z}5 D& W j: V$ P/ {
4 ~, \5 @+ O2 Y
/ W: b# Q' G: P4 c% i9 ` U/ odouble dV_dCA() /*求dv/dφ*/7 _4 z k9 x8 {( |0 t4 X- v
{$ p0 T& S* D: L# ], [
: D1 H, L# ]' ~. t
}3 }, e) U; _) D p
% `/ O ^/ H1 L! m. y* {$ t; y; l' _' t
double V_CA() /*求氣缸容積*/
; u3 T8 Z( w- K{8 k8 E4 A" l; z1 H
. N! }& @6 K4 v$ a ~. V
}
) o" u+ x# V2 F1 Y4 M9 c
0 s: K8 j" M9 T7 K3 ?( a0 U& Q( x j4 o% r B; R+ t7 C
double dQw_dCA() /*求dQw/dφ*/, V3 k0 z$ ?$ N P) n
{
% W* j1 r* _& I' r
# }9 C2 g) A& m% _6 _: E}$ f! C+ V5 \+ c" }
4 w7 s3 V3 ?) q, `
' A u( X, v1 e3 I) z7 ]double dQB_dCA() /*求dQB/dφ*/) Q# q( @# _) a, Q5 s
{* Y: V, q, @2 e: @2 K" j) i
5 i9 u1 {7 r7 C2 e
}( X6 [8 B# p' g* |* G/ i6 J; F( b
5 h# p5 ?6 j/ d y: Q: w6 h, R3 `
1 U9 H/ c) m# T' k8 S% R) L
double U() /*求u*/
: m2 j! F3 i4 k% M0 S( d$ _{
5 U# b7 h$ N+ w3 L$ v5 A
" W+ n* R) a1 C: Q}
' F5 y" C" @/ A, }5 w; d# s
( _# Q3 J6 a5 ]' t$ G. R
. @( i4 h! k3 H- c. O5 N# @. Pdouble dU_dnmd() /*求du/dλ*/
; ?7 {! S7 p" X" G; Q, F# U{
- O$ z5 A( h& m5 T, u0 B/ A( S) `% ^" H3 s' H6 B' s$ [/ R
}
5 p) U6 m) ]5 |; z. b5 I; s$ Z s, n' r" @, N6 V
double dT_Ys_dCA() /*壓縮期*/
H" s& h; c2 E% y4 }( r{
c: v6 ^# s- N9 V6 A' k+ G* m4 Z0 L6 F/ x* ^" B$ X
}
( ^8 I, g6 y' `- x( V7 `) a
0 [5 x, u+ A+ P% `4 J) N7 J) L% B0 F& b7 n0 }/ [. X: w
double dT_Pz_dCA() /*膨脹期*/
+ o ?; A' a8 ? O{+ s. S Z! Z3 h" C& q! q
4 z5 T* b V, F% c
}
?8 m; g0 F4 I2 |3 J+ l& n# v0 M/ s+ y: M
4 G0 ~) x" I7 l. D3 v1 |! X
double dT_Rs_dCA() /*燃燒期*/( j* t+ J$ f4 A7 S" \
{
/ ?* {0 i# e1 L, `, j8 M
9 J6 [1 B1 x7 Y# o6 m& }8 c: g( N}% W0 g0 N z- l6 t
* N3 x3 N# q2 G9 V
0 y5 S5 _! J) O+ K6 Zdouble dT_dCA(double an) /*求dT/dφ*/
: w* C3 R3 e \& l, D! u{
# B8 F; g# p) }) K" u0 d0 |/ O8 { CA=an*PI/180;) a5 n! ]6 O- L: E
V=V_CA();
( G+ u4 B: K4 c5 c if(A_SC<an && an<A_CB) return dT_Ys_dCA();
0 Z* i* C5 [. @' k1 I if(A_CB<=an && an<=A_CE) return dT_Rs_dCA();* h2 x' r% s; }. O# R
if(A_CE<an && an<=A_EO) return dT_Pz_dCA();+ }" _. w) Z( Z0 j
if(A_EO<an && an<=A_SO) /*換氣過程不計算,線性賦值,避免零值 */
7 n$ s8 h. j4 S3 j- R% \6 f& y7 P" Y P=110000+(m_P[(int)A_EO]-110000)*(A_SO-an)/(A_SO-A_EO);- ?1 P4 ]6 v! l- B/ t" a
if(A_SO<an || an<A_EC)
0 H8 A2 j% D4 ~9 e" u P=110000-20000*(an>A_SO?an-A_SO:an-A_SO+720)/(A_EC-A_SO+720);
' T9 D: O. m ?/ @" r9 y if(A_EC<=an && an<=A_SC) P=90000;( c, g! H+ O# N% k" K
return 0;
S" d3 p: c( c! W$ y, Q7 H! U}5 Z1 q( @7 a; H! e5 A8 S. T8 F
* w# u3 C0 G$ x# r% d
void Calculate(void)( N3 a! A- p5 }7 n
{
* _" c+ x& w( p double Tpre,K1,K2,an;( k) y7 |- v; U: \# l2 a/ ~; l
int index;3 \( V( b7 y: m$ ?4 {1 J
Pe=30*4.0*Ne/(gnum*100000*n*S*PI*D*D/4); /*平均有效壓力bar*/. P2 g$ I: ^5 X# a) U
mBo=Ne*ge/(30000000*n*gnum); /*單缸循環供油量kg */
# i- E' I0 h2 y5 C8 ^5 H3 ? CA=A_SC*PI/180; /*進氣關閉時的角度轉弧度*/2 a( |" D2 k- Z: H
V=V_CA();/*進氣關閉時角度下的氣缸容積*/! W" x% `) y1 g" B5 n5 N
P=P_SC;
- j; N4 D' s G) b* _ T=T_SC;
& {+ j. }3 J+ I- z# Q; r index=(int)A_SC;
$ Z' G& W: O+ l! N/ c1 \+ A! O7 Q m_T[index]=T;
, F4 q2 u! V7 } m_P[index]=P;
# ], I# ~( J7 j4 L. K6 Z5 ^ m=P*V/(R*T);/*進氣關閉時角度下的氣缸內工質質量*/3 b. H. Q9 ]1 [4 _
mL=m-0.01*mBo;/*進氣關閉時角度下的氣缸內空氣質量*/" A8 T9 V& F3 V. p% z
mf=m-mL;" x! D& x9 u; l
Tpre=T;9 ]( ]4 L2 s% Q5 E6 Y4 x: {, L
an=A_SC+1;3 c+ U& b. C! n& `' d
* Z& g3 [' [ n' m do{
h V( E/ ^. u6 v0 g2 A, e, P* d3 R+ O( B
/*B 編寫歐拉法求解常微分方程程序 */1 \ f8 U% h; w) F
( H1 m' W" k U: P. L8 k
}while(an!=A_SC+1);$ I1 X. ~1 J% H/ T; {
}
4 `( `& V+ a P4 T R: X
- @; S1 p& [' {2 q4 T7 M. Ovoid main(void)7 E) {4 w: l0 V2 Q, [# C. ?' ]2 f
{
z6 C% v; {) n) }+ { int i;
8 H3 ^1 ~( ^" h& c FILE *fp;
# G$ d) @2 |8 R' j& S D=0.11; /*發動機數據按各自的任務書輸入 */
- E5 k& c2 k" ?; J. C S=0.13;" z% L u9 C- e: ^% V
L=0.21;6 B% r+ O+ l* m, e$ p4 Z; o, x" n
ge=236.0;2 R: U, D; q, u3 k+ O
n=2400;( Z+ L! f6 X% ^, q0 F* k, T$ }
Ne=101568; T$ D" v9 _( V4 u! m& m
gnum=6; ysb=17; M=0.7;
; m+ U% U+ ~7 Q% W/ P" t Hu=41868000;: M+ h4 ]/ F5 @' U1 G
R=287.08;* P8 v# W1 `- V8 P( O/ N
Pa=101000; /*大氣壓力*/) b5 G3 w5 [ K: K* W/ \0 D
Ta=300; /*大氣溫度*/! P5 t+ k3 Y( u
hs=(735.0+R)*Ta; /*大氣焓值*/
3 c/ |3 B% c! k' P/ T$ | P_SC=90000;; H' L. r3 _) [# k
T_SC=313;
2 C5 N! a' r2 z3 w5 w6 Y; Q6 _+ ^ E7 F# t0 N
A_SC=216; /*進氣門關閉*/3 B$ K2 ?8 ?6 ~+ [8 b' o
A_CB=350; /*燃燒開始*/
* f# x. p7 {- E: N+ A2 X: s% O A_CE=410; /*燃燒結束*/
' R+ }: \7 I& l' [ A_EO=484; /*排氣門開啟*/
7 _! K2 Q8 L) i5 m4 g; ? A_SO=705; /*進氣門開啟*/+ R- Y* W9 o0 M, h1 y6 {$ d
A_EC=15; /*排氣門關閉*/; P- U2 W V4 I) Q" s, Y: a1 ]
$ T# l: {1 @. I9 Q3 d Lo=14.4;/ b- F! F; M; K
. x$ \% O" e& ?3 u
for(i=0;i<720;i++) G D+ @4 J: Q$ M
{2 W6 S3 J/ U6 G% i# \0 G- ~9 _0 P
m_P[i]=0;
) i5 m" L; R1 M4 D7 E m_CA[i]=i;
3 G7 k& X3 B! k% j7 F* k% | m_T[i]=0;
9 E" p4 i5 n& b) B4 T }
; v8 R5 V. d% W1 k: W
% t9 M: u3 l) G2 g$ Z; ^$ F& l Calculate();2 O) t4 A, \7 \- Y
) O# Z/ z. Q. p% {4 Z6 W$ q
/*C編寫數據輸出程序,計算結束后按順序輸出0-720轉角的“缸壓,溫度”數據到outdata.txt文件 */
+ N8 V, y5 Q6 E1 E. M$ G
; i3 @ Q( b0 w+ V}8 b* R4 I8 ?2 U4 w$ a% s Q
3 [8 a) O, b1 x- a
% k: ?& d! g) R* `% I |
|