v带传动的c语言设计流程
新鄉学院
题目:V 带传动的c 语言设计
院系:机电工程学院 班级:机自专升本二班 姓名:卢 晓 盟 学号:[1**********] 指导老师:梁 炜
一、程序框图
二、V 带设计程序
#include #include #include #define PAI 3.14
int TYPE_TO_NUM(char type); /*将输入的字符(不论大小写)转换为数字方便使用*/ float Select_Ki(float i); /*查表选择Ki 的程序*/ float Select_KA(float H,int GZJ,int YDJ); /*查表选择KA 的程序*/ float Select_KL(float Ld,int TYPE); /*查表选择KL 的程序*/ float Select_M(int TYPE); /*查表选择m 的程序*/ float Select_dd1(int TYPE); /*查表选择小轮基准直径dd1的程序*/ float Select_dd2(int dd1,float i); /*查表选择大轮直径dd2的程序*/ float Compute_P0(float V,int TYPE,float dd1); /*计算P0的程序*/
float Compute_DIFP0(int TYPE,float Ki,int n1); /*计算DIFP0的程序*/ float Compute_VMAX(int TYPE); /*计算VMAX 的程序*/ float Compute_KALF(float ALF1); /*计算KALF 的程序*/ float Compute_B(int TYPE,int z); /*计算带宽B 的程序*/
float* Compute_LAK(float dd1,float dd2,int TYPE); /*计算Ld ,a ,KL 的程序*/ main() { float
P,H,i,n1,KA,Ki,dd1,dd2,V ,P0,DIFP0,Pd,VMAX,*LAK,m,Ld,KALF,a,KL,z,F0,ALF1,Q,B; int YDJ,GZJ,TYPE,ANS; char type,ans; printf(" V 带传动设计程序\n"); printf(" 设计者 卢晓盟 [1**********]\n"); START: printf("请输入原始参数:\n"); printf("传递功率P(KW):"); scanf("%f",&P); printf("小带轮转速n1(r/min):"); scanf("%f",&n1); printf("传动比i:"); scanf("%f",&i); printf("每天工作时间H(h):"); scanf("%f",&H); printf("原动机类型(1或2):"); scanf("%d",&YDJ); printf("工作机载荷类型:\n1,载荷平稳\n2,载荷变动较小\n3,载荷变动较大\n4,载荷变动很大\n"); scanf("%d",&GZJ); DX: printf("带型:"); scanf(" %c",&type); TYPE=TYPE_TO_NUM(type); KA= Select_KA(H,GZJ,YDJ);
Pd=KA*P; VMAX=Compute_VMAX(TYPE); DD1:dd1=Select_dd1(TYPE); V=PAI*dd1*n1/60000; while(V>VMAX) { printf("所选小轮基准直径过小! 请重新选择!\n"); dd1=Select_dd1(TYPE); V=PAI*dd1*n1/60000; } dd2=Select_dd2(dd1,i); P0=Compute_P0(V,TYPE,dd1); Ki=Select_Ki(i); DIFP0=Compute_DIFP0(TYPE,Ki,n1); LAK=Compute_LAK(dd1,dd2,TYPE); Ld=LAK[0]; a=LAK[1]; KL=LAK[2]; ALF1=180-57.3*(dd2-dd1)/a; KALF=Compute_KALF(ALF1); z=ceil(Pd/(KALF*KL*(P0+DIFP0))); if(z>=10) goto DX; m=Select_M(TYPE); F0=500*Pd*(2.5-KALF)/(z*V*KALF)+m*V*V; Q=2*z*F0*sin(ALF1*PAI/360); B= Compute_B(TYPE,z); printf(" 计算结果\n");
printf("小轮直径:%f mm\n大轮直径:%f mm\n中心距:%f mm\n带长:%f mm\n带宽:%f mm\n带的根数:%f\n初拉力:%f N\n轴压力:%f N\n",dd1,dd2,a,Ld,B,z,F0,Q); X: printf("计算下一组带轮直径按'Y', 重新开始按'S', 结束按'N':"); scanf(" %c",&ans); ANS=TYPE_TO_NUM(ans); if(ANS==6) goto DD1; else if(ANS==7) goto START; else if(ANS==8) printf("程序结束"); else { printf("输入错误,请重新输入"); goto X;
} }
float Select_KA(float H,int GZJ,int YDJ) { float ka1[4][3]={{1.0,1.1,1.2},{1.1,1.2,1.3},{1.2,1.3,1.4},{1.3,1.4,1.5}}; float ka2[4][3]={{1.1,1.2,1.3},{1.2,1.3,1.4},{1.4,1.5,1.6},{1.5,1.6,1.8}}; float KA; if(YDJ==1) { if(H16) KA=ka1[GZJ-1][2]; else KA=ka1[GZJ-1][1]; } if(YDJ==2) { if(H16) KA=ka2[GZJ-1][2]; else KA=ka2[GZJ-1][1]; } return KA; }
float Select_Ki(float i) { float m; float Ki[10]={1.0000,1.0136,1.0276,1.0419,1.0567,1.0719,1.0875,1.1036,1.1202,1.1373}; float I[10]={1.00,1.02,1.05,1.09,1.13,1.19,1.25,1.35,1.52,2.00}; int j=9; for(j=9;j>=0;j--) { m=i-I[j]; if(m>=0) break; } return Ki[j]; }
int TYPE_TO_NUM(char type)
{ int x; if(type
float Compute_P0(float V,int TYPE,float dd1) { float P0; float K1[6]={0.246,0.449,0.794,1.48,3.15,4.57}; float K2[6]={7.44,19.02,50.6,143.2,507.3,951.5}; float K3[6]={0.441e-4,0.765e-4,1.31e-4,2.34e-4,4.77e-4,7.06e-4}; P0=(K1[TYPE]*pow(V,-0.09)-K2[TYPE]/dd1-K3[TYPE]*V*V)*V;
return P0; }
float Compute_DIFP0(int TYPE,float Ki,int n1) { float Kb,DIFP0; float KB[6]={0.2925e-3,0.7725e-3,1.9875e-3,5.625e-3,19.95e-3,37.35e-3}; Kb=KB[TYPE]; DIFP0=Kb*n1*(1-1/Ki); return DIFP0; }
float Select_dd1(int TYPE) { int i; float dd1; float DD1[6][4]={{50,63,71,80},{75,90,100,125},{125,140,160,180}, {200,250,315,400},{355,400,450,500},{500,560,630,710}}; printf("该带型推荐的小带轮基准直径有(mm):\n"); for(i=0;i
float Select_dd2(int dd1,float i) { float DD2[]={50,56,63,71,80,90,100,112,125,140,150,160,180,200,224, 250,280,315,355,400,425,450,500,560,600,630,710,800}; float dd2,temp,t; int j=0; temp=i*dd1; for(j=0;j
float* Compute_LAK(float dd1,float dd2,int TYPE) { int j=0; float a1,a2,a0,Ld0,temp,KALF,Ld,a,KL; float LAK[3]; float kl[23][6]={{400,0.87},{450,0.89},{500,0.91}, {560,0.94},{630,0.96,0.81},{710,0.99,0.83},{800,1.00,0.85,0.82},{900,1.03,0.87,0.84,0.83},{1000,1.06,0.89,0.86,0.86,0.83}, {1120,1.08,0.91,0.88,0.88,0.86},{1250,1.10,0.93,0.90,0.91,0.89},{1400,1.14,0.96,0.92,0.93,0.91},{1600,1.16,0.99,0.95,0.95,0.93}, {1800,1.18,1.01,0.98,0.97,0.96},{2000,0,1.03,1.00,0.99,0.98},{2240,0,1.06,1.03,1.02,1.00},{2500,0,1.09,1.05,1.04,1.03}, {2800,0,1.11,1.07,1.07,1.06},{3150,0,1.13,1.09,1.09,1.08},{3550,0,1.17,1.13,1.12,1.11},{4000,0,1.19,1.15,1.15,1.14},{4500,0,0,1.18,1.18,1.17},{5000,0,0,0,1.21,1.20}}; a1=0.7*(dd1+dd2); a2=2*(dd1+dd2); printf("请输入初估中心距a0(范围为%.2fmm~%.2fmm):",a1,a2); scanf("%f",&a0); Ld0=2*a0+(dd1+dd2)*PAI/2+(dd2-dd1)*(dd2-dd1)/a0/4; for(j=0;j(kl[j][0]-Ld0)) { Ld=kl[j][0]; KL=kl[j][TYPE+1]; } else { Ld=kl[j-1][0]; KL=kl[j-1][TYPE+1]; } a=a0+(Ld-Ld0)/2; LAK[0]=Ld; LAK[1]=a; LAK[2]=KL; return LAK; }
float Compute_VMAX(int TYPE) { float VMAX; switch(TYPE) {
case 0: case 1: case 2: case 3: VMAX=25; break; case 4: case 5: VMAX=30; break; } return VMAX; }
float Select_M(int TYPE) { float m; float M[6]={0.06,0.1,0.17,0.3,0.6,0.9}; m=M[TYPE]; return m; }
float Compute_B(int TYPE,int z) { float f[6]={8,10,12.5,17,23,29}; float e[6]={12,15,19,25.5,37,44.5}; float B; B=(z-1)*e[TYPE]+2*f[TYPE]; return B; }
float Compute_KALF(float ALF1) { float
kalf[2][14]={220,210,200,190,180,170,160,150,140,130,120,110,100,90,1.20,1.15,1.10,1.05,1.00,0.98,0.95,0.92, 0.89,0.86,0.82,0.78,0.73,0.68},KALF; int i; for(i=0;ikalf[0][i+1]) {
KALF=kalf[1][i]+(kalf[1][i]-kalf[1][i+1])*(ALF1-kalf[0][i])/10; break; } } return KALF;
}
三、程序运行截图