|
#include "math.h"
+ ^" A4 w) U6 g, l7 |% o#include "stdio.h"' y( [& R+ B8 C! m, ?3 m* k6 o0 j2 s
#define PI 3.1415926! k3 {# b+ ^& [ c# Y
: U# D8 R5 \& g" n% S
double D,S,L,ge,n,Ne,gnum,ysb,Hu,Lo,M,R,P_SC,T_SC;
# x! |, f* j; i9 C9 v, t/*缸徑、行程、連桿長、比油耗、轉速、功率、氣缸數、壓縮比、低熱值、理論空燃比、Weibe函數常數m、氣體常數、進氣門關閉時壓力和溫度 */. V4 R+ n i$ n$ m$ [
double m_T[720],m_P[720],m_a[720];7 X5 ~: c: P3 o" s, X6 H& C7 R
/*氣缸溫度、壓力、瞬時過量空氣系數 */3 M/ A) }" e/ v" h8 @
int m_CA[720],A_SC,A_CB,A_CE,A_EO,A_SO,A_EC;+ \+ x4 H& C+ |) J) i
double Pa,Ta,hs,P,V,T,CA,m,mf,nmd,Pe,mBo,mL,dXY;
$ z& j- a' p. x9 H6 a8 Z' @ double Cv();2 P& z, @0 M+ N+ K. q
double dV_dCA();
/ Z' G9 ~8 G r" s8 E% N double dQw_dCA();+ H: u0 R: d, j9 u1 Z2 |0 q3 U
double dQB_dCA();& O( u% _/ B0 q! H+ f. j0 p
double U();% h, \' W8 s" Z, g
double V_CA();
) o) v0 R3 f5 K4 V' q double dU_dnmd();- K+ X; B2 i( `$ X0 v8 q
double dT_Ys_dCA();
8 k6 A: f3 V; @9 U, k! `% F: M double dT_Pz_dCA();9 n& B \# ?! q5 ~4 T
double dT_Rs_dCA();
6 C. }) m( K1 P double dT_Hq_dCA();( K6 B" p' |1 x3 s6 ~1 Q0 Z8 P) i1 h
double dT_dCA(double an);6 j, f. {# Y6 Z
void Calculate();
7 y1 B+ @# C5 p. T6 P
' J- f7 W8 `! J: M2 \/* A編寫各子函數程序*/) R: z8 B/ N5 b0 p8 S$ B
double Cv() /*求定容比熱*/
S; I, u- P# D6 Y0 p& _{; O2 B& X w/ Y( L) ~
2 }2 S& B) V- o/ o/ A2 _}
: ?( O& A6 I3 P! {; u% ~% n
' e1 _. }" S* i1 j0 g8 y8 A" |, r. H
( J% i: x* z( r9 c* M9 edouble dV_dCA() /*求dv/dφ*/7 v$ U- z5 N# v5 b( Z
{) G# q: x0 W7 O0 a
4 U2 h; v6 q$ y" g% [% W- F}( j2 I& K; s4 w# a* N2 `9 T( Q
% U8 d- `( z6 e4 ]4 K# H
* E/ w+ W# |2 Y( C7 Q( gdouble V_CA() /*求氣缸容積*/
. x$ W3 N r+ _3 @+ R5 f{
" l5 W: M& [! I4 n+ S+ P
' c6 Z. u. f: _' K4 l% X! U7 w} b7 q# p1 r, b2 Y
# \; v4 {" A, O
, T _. G& g- o( K" l5 F% H* x
double dQw_dCA() /*求dQw/dφ*/
$ |& O- E3 s0 M9 e! L$ n! v{
; v W, x2 i+ [+ L7 ?
4 p0 @' N' u! t}2 A1 ]( ^. {$ L6 I/ y
) F# C f' E) w G1 I F
0 k7 Z1 }" q# a" J0 A- B& \double dQB_dCA() /*求dQB/dφ*/! T+ D' X. _! G ]
{
: V0 I% e$ l" L9 P _1 f* k2 `8 L& S7 Z" L- s; m, J% e3 V
}! D5 n6 r$ J8 K- K$ \8 }
2 u9 p. m) \! s
& U P( l! O g1 D4 Y1 R
double U() /*求u*/* t* }$ L+ K1 Z3 q* A+ r
{+ t$ m6 B8 A% }9 s' Q
5 w- B, ?# [ ~ b+ @( Q
}
$ O2 W2 \5 H; ]# i% F4 i) j# W) P) Q0 H/ ~
- F% j8 ]% e: i/ C: |double dU_dnmd() /*求du/dλ*/ J1 b0 k/ ?3 ]
{' X: t6 m& E9 i0 p% Z' n
* {/ F' J) z) k" O1 E L}! V9 d3 I9 j: i4 ^
; P; _% I, j6 L( M( J/ ]9 i& x
double dT_Ys_dCA() /*壓縮期*/ ^' i# g0 c7 D0 W. F
{
' d9 Y' x% [; a1 B8 e4 a" x, h9 t# M! s1 V' m$ J' \/ q7 p
}2 r, V9 g1 L, ~6 W2 A$ l1 @
# F% S4 c- [& \6 C
% M( R* w1 r7 T: L4 b
double dT_Pz_dCA() /*膨脹期*/3 N9 `3 F8 [+ z" O3 Q
{/ Z: x" ?0 X( a1 M
. z+ V+ {* }! z+ C}( I6 ?% o: U! O: f# [
1 I X, A" x, B5 Q) `3 R4 Q
) M) k& U* l9 x, z, ^- [double dT_Rs_dCA() /*燃燒期*/
2 K. g4 _' B- h7 d: n; K{ a4 ~/ {4 H, O6 q I9 J
. B5 C: Q* f2 Y; B) g. b1 T2 C
}
$ `5 K) R+ K s7 t3 _* ]; e1 s' Z5 q* b/ ]
3 x/ s. M% x1 T7 v6 n
double dT_dCA(double an) /*求dT/dφ*/
6 g- C9 I, m" p5 _( z, I, M5 B( f{
) g& R+ ^0 F J CA=an*PI/180;% O: d! e8 F3 X _
V=V_CA();, E( C+ s; ^+ r
if(A_SC<an && an<A_CB) return dT_Ys_dCA();
7 \5 `1 ~5 {. C% x3 a if(A_CB<=an && an<=A_CE) return dT_Rs_dCA();
* e( r7 F r( X" j5 u8 C if(A_CE<an && an<=A_EO) return dT_Pz_dCA();
9 ]7 r! b6 B7 h# L if(A_EO<an && an<=A_SO) /*換氣過程不計算,線性賦值,避免零值 */6 S7 E+ b3 `5 C0 U' _6 s
P=110000+(m_P[(int)A_EO]-110000)*(A_SO-an)/(A_SO-A_EO);& j* q1 w/ v7 U- B3 I
if(A_SO<an || an<A_EC)
+ G7 ~0 C E6 Y5 Z6 P Q7 @ P=110000-20000*(an>A_SO?an-A_SO:an-A_SO+720)/(A_EC-A_SO+720);
/ o0 O* Z" M! ^. i! c a* W if(A_EC<=an && an<=A_SC) P=90000;8 O6 {- I8 t( ^
return 0;) [1 T) B/ n9 _0 }4 ~2 u7 f
}
: w- Q) S9 [, ]* z0 c; g9 D9 A6 T$ h% i* ]3 J
void Calculate(void)2 k \' w: Z' p9 T
{4 @2 A% _3 B: |! h% K- T* i( Z5 z
double Tpre,K1,K2,an;
1 n9 x/ g) x5 x- k int index;
* b/ T- K. N! k9 ^ Pe=30*4.0*Ne/(gnum*100000*n*S*PI*D*D/4); /*平均有效壓力bar*// c2 A8 l4 a( M( F N. f S! Y
mBo=Ne*ge/(30000000*n*gnum); /*單缸循環供油量kg */
o' K/ t* I) p$ [! \2 a8 x7 H CA=A_SC*PI/180; /*進氣關閉時的角度轉弧度*/
& X6 `& t6 S3 _* y V=V_CA();/*進氣關閉時角度下的氣缸容積*/
# n/ n* e# q( B$ o; o% M6 E P=P_SC;! |1 E# f, R1 A) D+ D: [. l
T=T_SC;- Q0 C% V; Q% d/ S
index=(int)A_SC;
+ ^# L2 n" b# r S) ?8 ] m_T[index]=T;
) S8 J6 H8 u T6 t$ e; ? m_P[index]=P;
: |4 z- Q" j0 f% I$ w3 p m=P*V/(R*T);/*進氣關閉時角度下的氣缸內工質質量*/" j' J$ I9 h1 A V
mL=m-0.01*mBo;/*進氣關閉時角度下的氣缸內空氣質量*/
. _ L, ?' r$ z6 w: R- y mf=m-mL;
+ ^. X) F, ^% Y2 a- {1 \3 a+ l Tpre=T;
! Z8 U( L9 F& T4 S an=A_SC+1;6 L, {: G# v4 W( X
: Y3 q: R7 Z1 r4 d8 R+ k) y2 N% t
do{
& k R y3 \: z+ p0 B4 R6 O' G) R9 j0 r) g @
/*B 編寫歐拉法求解常微分方程程序 */8 t0 H i( \0 b3 N/ F
1 k' W8 [8 R/ ^* \ }while(an!=A_SC+1);
4 w1 k( k' x. L5 o* Q9 A}
# S, E0 O4 G3 l% ^6 \$ D! c, h' i; k0 f8 z7 z
void main(void)
1 c; r& S2 e2 o/ P{
" D+ Z% ~2 D4 p int i;9 U' R9 m8 T, f, E) F: T* F2 R# M
FILE *fp;' d! T6 ^2 D% b9 s) r& ]9 R
D=0.11; /*發動機數據按各自的任務書輸入 */
5 [; J N& `. a/ n: s0 @2 b. @ S=0.13;! d3 b2 k4 b& u* L( w# `1 h
L=0.21;# q" m8 y0 x, i/ r) q
ge=236.0;2 d8 f5 I* B: g8 C3 E
n=2400; W7 ~) Y9 Z6 K# @$ e; d
Ne=101568;
) k" a1 e& L, C0 U% s gnum=6; ysb=17; M=0.7;8 U& O$ M. J3 ~( ~ w, O/ k
Hu=41868000;9 N6 A/ B3 l# w \$ l. V" L" ^
R=287.08;. f$ Q! E% O7 y ^8 d6 B# z
Pa=101000; /*大氣壓力*/
: w) t* v: J+ m1 \ Ta=300; /*大氣溫度*/, V& J1 U j% t7 m
hs=(735.0+R)*Ta; /*大氣焓值*/
! N+ |, L5 H4 ^ P_SC=90000;0 M, t; k: V8 ]) w5 G
T_SC=313;
4 T( q0 o+ \% m2 ~+ L, [! @
2 O+ ` }9 s, V2 M# _" c A_SC=216; /*進氣門關閉*/% Q+ E; E1 i1 G/ X0 T m& s2 I3 l" Q' L
A_CB=350; /*燃燒開始*/
* C; a; v( K) B) ^' h+ P7 `2 w A_CE=410; /*燃燒結束*/
0 T& a( X& o# D+ S A_EO=484; /*排氣門開啟*/. Y. G: E A+ x: w ~' Y1 g |* e
A_SO=705; /*進氣門開啟*/1 c6 u7 p4 W( w( T
A_EC=15; /*排氣門關閉*/
2 v! _& g( _0 c0 y' h
/ P5 P, P2 F- f, p Lo=14.4;
% Y% r1 |; g2 C- d6 w$ w9 T( ~" r/ x$ A6 u
for(i=0;i<720;i++)3 W5 t# P0 E( q" i
{1 N1 y4 [7 z s! G7 I' j1 i
m_P[i]=0;+ C; i' ^" x( h# z
m_CA[i]=i;
f3 |& j9 g" J: j6 Y* [! ] m_T[i]=0;
8 o$ s1 A0 F& X* p" O5 `5 R6 Z- b }
8 a v$ m1 I1 j9 }/ J
7 j( b9 C2 J: i Calculate();
) \+ C6 Y" I2 @1 f' K
: l5 W1 D6 s, k5 L% w/ b /*C編寫數據輸出程序,計算結束后按順序輸出0-720轉角的“缸壓,溫度”數據到outdata.txt文件 */; ?: o& q5 i# `3 F+ n% C
9 r+ I/ `4 b* c1 V& N( L}3 V- v; q: V' h. _6 f
- L* b3 f7 ?8 ~8 h7 R3 D$ A# i9 A' @
|
|