资源描述
东北大学机械原理课程设计 码头吊车机构的设计及分析
目录
目录 0
一.题目说明 1
二.求连架杆O3C的摆动范围 2
三.分析K点的运动状态 2
1.拆分杆组 3
2.列出形参和实参的表格 3
3.编写主程序并运行 3
四.设计曲柄摇杆机构O1ABO3 6
五.求K点水平方向的位移、速度和加速度线图 7
1.拆分杆组 7
2.列出形参和实参的表格 7
3.编写主程序并运行 8
六.对机构进行动态静力分析 11
1.拆分杆组 11
2.列出形参和实参的表格 12
3.编写主程序并运行 13
七.主要收获和建议 18
八.主要参考文献 19
一.题目说明
图示为某码头吊车机构简图,它是由曲柄摇杆机构与双摇杆机构串联成的。
已知:lo1x=2.86m, lo1y=4m, lo4x=5.6m, lo4y=8.1m, l3=4m, l3'=28.525m, a3'=25°, l3´´=8.5m, a3´´=7°, l4=3.625m, l4´=8.35m, a4'=184°, l4´´=1m, a4´´=95°, l5=25.15m, l5'=2.5m, a5'=24°。图中S3、S4、S5为构件3、4、5的质心,构件质量分别为:m3=3500kg, m4=3600kg, m5=5500kg,其余构件质量不计。K点向左运动时载重Q为50kN,向右运动时载重为零,曲柄01A的转速n1=1.06r/min.
机构运动简图:
二.求连架杆O3C的摆动范围
对四杆机构O3CDO4进行分析,可得O3C的摆动范围为92.57°到136.88°。
三.分析K点的运动状态
对双摇杆机构O3CDO4进行运动分析,以O3C为主动件,取步长为1°计算K点位置,根据K点的近似水平运动要求,依据其纵坐标值决定O3C的实际摆动范围。
1.拆分杆组
2.列出形参和实参的表格
⑴.对主动件①进行运动分析。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
4
5
0
3
r45
0.0
0.0
t
w
e
p
vp
ap
⑵.对由②、③构件组成的RRR杆组进行运动分析。
形式参数
m
n1
n2
n3
k1
k2
r1
r2
t
w
e
p
vp
ap
实值
1
5
7
6
4
5
r56
r67
t
w
e
p
vp
ap
⑶.调用bark函数,求10点的竖直运动参数。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
5
0
10
5
0.0
r510
gam1
t
w
e
p
vp
ap
3.编写主程序并运行
⑴主程序:
#include "subk.c"
#include "draw.c"
main()
{
static double p[20][2],vp[20][2],ap[20][2],del;
static double t[10],w[10],e[10],pdraw[370],vpdraw[370],apdraw[370];
static int ic;
double r45,r56,r67,r510,gam1;
double pi ,dr;
double r2,vr2,ar2;
int i;
FILE*fp;
char *m[]={"p","vp","ap"};
r45=28.525,r56=3.625,r67=25.15,gam1=176.0,r510=8.35;w[3]=15.0;del=1.0;pi=4.0*atan(1.0);dr=pi/180.0;
p[4][1]=0.0;
p[4][2]=0.0;
p[7][1]=5.6;
p[7][2]=8.1;
gam1=gam1*dr;
printf("\n The Kinematic Parameters of Point 5\n");
printf("No THETA1 s10 v10 a10\n");
printf(" deg m m/s m/s/s\n");
if((fp=fopen("filel20092170.txt","w"))==NULL)
{
printf("Can't open this file.\n");
exit(0);
}
fprintf(fp,"\n The kinematic parameters of point 10\n");
fprintf(fp,"No THETA1 S10 V10 A10\n");
fprintf(fp," deg m m/s m/s/s");
ic=(int)(360.0/del);
for(i=0;i<=ic;i++)
{
t[3]=(i)*del*dr;
bark(4,5,0,3,r45,0.0,0.0,t,w,e,p,vp,ap);
rrrk(1,5,7,6,4,5,r56,r67,t,w,e,p,vp,ap);
bark(5,0,10,4,0.0,r510,gam1,t,w,e,p,vp,ap);
printf("\n%2d %12.3f %12.3f %12.3f %12.3f",i+1,t[3]/dr,p[10][1],p[10][2],vp[10][1],vp[10][2],ap[10][1],ap[10][2]);
fprintf(fp,"\n%2d%12.3f%12.3f%12.3f%12.3f",i+1,t[3]/dr,p[10][1],p[10][2],vp[10][1],vp[10][2],ap[10][1],ap[10][2]);
pdraw[i]=p[10][2];
vpdraw[i]=vp[10][2];
apdraw[i]=ap[10][2];
if((i%16)==0){getch();};
}
fclose(fp);
getch();
draw1(del,pdraw,vpdraw,apdraw,ic,m);
}
⑵运行结果:
程序运行结果会在屏幕上显示10点铅直方向的位置、速度、加速度数值如下:
The kinematic parameters of point 10
No THETA1 S10 V10 A10
deg m m/s m/s/s
1 0.000 30.580 8.093 -464.378
2 15.000 20.847 12.357 -584.674
3 30.000 17.997 19.237 -687.870
4 45.000 13.464 25.145 -776.485
5 60.000 7.556 29.678 -844.483
6 75.000 0.676 32.528 -887.228
7 90.000 -6.706 33.500 -901.807
8 105.000 -12.172 20.713 -600.278
9 120.000 -21.464 20.478 -476.328
10 135.000 -28.467 21.109 -229.348
11 150.000 -33.000 15.201 -140.732
12 165.000 -35.850 8.322 -37.537
13 180.000 -36.822 0.939 73.205
14 195.000 -35.850 -6.444 183.947
15 210.000 -33.000 -13.324 287.143
16 225.000 -28.467 -19.231 375.758
17 240.000 -22.560 -23.764 443.756
18 255.000 -15.680 -26.614 486.501
19 270.000 -8.297 -27.586 501.080
20 285.000 -0.914 -26.614 486.501
21 300.000 5.965 -23.764 443.756
22 315.000 11.873 -19.231 375.758
23 330.000 16.406 -13.324 287.143
24 345.000 35.442 -4.646 -51.894
25 360.000 30.580 8.093 -464.378
⑶K点纵坐标位置图线
四.设计曲柄摇杆机构O1ABO3
根据K点的近似水平运动要求,依据其纵坐标值确定O3C的实际摆动范围。由数据分析可知,O3C在95°至135°之间摆动时为K点近似水平运动,所以O3C的摆角范围是95°至135°,所以O3B的摆角范围为70°至110°.
按O3C的摆动范围设计曲柄摇杆机构O1ABO3,使摇杆O3B的两个极限位置对应于选定是K点轨迹范围。如图:
由已知条件, , ;
∴ , ;
∴ ; ;
;
∴ ,
五.求K点水平方向的位移、速度和加速度线图
1.拆分杆组
2.列出形参和实参的表格
⑴对主动件①进行运动分析。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
1
2
0
1
r12
0.0
0.0
t
w
e
p
vp
ap
⑵对②③组成的RRR杆组进行运动分析。
形式参数
m
n1
n2
n3
k1
k2
r1
r2
t
w
e
p
vp
ap
实值
1
4
2
3
3
2
r34
r23
t
w
e
p
vp
ap
⑶调用bark函数,求5点运动参数。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
4
0
5
3
0.0
r45
25.0*dr
t
w
e
p
vp
ap
⑷对④⑤组成的RRR杆组进行运动分析。
形式参数
m
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
1
5
7
6
4
5
r56
r67
t
w
e
p
vp
ap
⑸调用bark函数,求8,9,10,11。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
5
0
10
4
0.0
r510
176.0*dr
t
w
e
p
vp
ap
实值
4
0
11
3
0.0
r411
18.0*dr
t
w
e
p
vp
ap
实值
5
0
9
4
0.0
r59
95.0*dr
t
w
e
p
vp
ap
实值
7
0
8
5
0.0
r78
-156.0*dr
t
w
e
p
vp
ap
3.编写主程序并运行
⑴主程序:
#include "subk.c"
#include "draw.c"
main()
{
static double p[20][2],vp[20][2],ap[20][2],del;
static double t[10],w[10],e[10],pdraw[370],vpdraw[370],apdraw[370];
static int ic;
double r56,r67,r510,gam1,gam2,r12,r34,r45,r23,r710,r59,r48;
double pi ,dr;
double r2,vr2,ar2;
int i;
FILE*fp;
char *m[]={"p","vp","ap"};
r56=3.625,r67=25.15,gam1=176.0,r510=8.35,gam2=25.0,r12=1.36,r34=4.0,r23=2.78,r45=28.525;
w[1]=0.1;del=1.0;pi=4.0*atan(1.0);dr=pi/180.0;e[1]=0.0,r48=8.5,r59=1.0,r710=2.5;
p[1][1]=2.86;
p[1][2]=4.0;
p[4][1]=0.0;
p[4][2]=0.0;
p[7][1]=5.6;
p[7][2]=8.1;
gam1=gam1*dr;
gam2=gam2*dr;
printf("\n The Kinematic Parameters of Point 10\n");
printf("No THETA1 s10 v10 a10\n");
printf(" deg m m/s m/s/s\n");
if((fp=fopen("20092170.txt","w"))==NULL)
{
printf("Can't open this file.\n");
exit(0);
}
fprintf(fp,"\n The kinematic parameters of point 10\n");
fprintf(fp,"No THETA1 S10 V10 A10\n");
fprintf(fp," deg m m/s m/s/s\n");
ic=(int)(360.0/del);
for(i=0;i<=ic;i++)
{
t[1]=i*del*dr;
bark(1,2,0,1,r12,0.0,0.0,t,w,e,p,vp,ap);
rrrk(1,4,2,3,3,2,r34,r23,t,w,e,p,vp,ap);
bark(4,0,5,3,0.0,r45,25.0*dr,t,w,e,p,vp,ap);
rrrk(1,5,7,6,4,5,r56,r67,t,w,e,p,vp,ap);
bark(5,0,10,4,0.0,r510,176.0*dr,t,w,e,p,vp,ap);
bark(4,0,11,3,0.0,r411,18.0*dr,t,w,e,p,vp,ap);
bark(5,0,9,4,0.0,r59,95.0*dr,t,w,e,p,vp,ap);
bark(7,0,8,5,0.0,r78,-156.0*dr,t,w,e,p,vp,ap);
printf("\n%2d %12.3f %12.3f %12.3f %12.3f",i+1,t[1]/dr,p[10][2],vp[10][2],ap[10][2]);
fprintf(fp,"\n%2d%12.3f%12.3f%12.3f%12.3f",i+1,t[1]/dr,p[10][2],vp[10][2],ap[10][2]);
pdraw[i]=p[10][1];
vpdraw[i]=vp[10][1];
apdraw[i]=ap[10][1];
if((i%16)==0){getch();};
}
fclose(fp);
getch();
draw1(del,pdraw,vpdraw,apdraw,ic,m);
}
⑵运行结果:
The kinematic parameters of point 10
No THETA1 S10 V10 A10
deg m m/s m/s/s
1 0.000 20.122 -0.001 0.005
16 15.000 20.123 -0.001 -0.001
31 30.000 20.133 0.017 0.016
46 45.000 20.241 0.065 0.017
61 60.000 20.453 0.090 0.000
76 75.000 20.665 0.064 -0.019
91 90.000 20.756 0.003 -0.026
106 105.000 20.680 -0.057 -0.018
121 120.000 20.487 -0.081 0.001
136 135.000 20.305 -0.048 0.024
151 150.000 20.279 0.034 0.035
166 165.000 20.473 0.102 0.007
181 180.000 20.688 0.031 -0.059
195 194.000 20.587 -0.10 -0.028
211 210.000 20.312 -0.065 0.041
226 225.000 20.288 0.044 0.033
241 240.000 20.480 0.087 -0.000
256 255.000 20.680 0.057 -0.020
271 270.000 20.756 0.002 -0.020
286 285.000 20.701 -0.040 -0.012
301 300.000 20.564 -0.061 -0.004
316 315.000 20.398 -0.062 0.003
331 330.000 20.250 -0.049 0.008
346 345.000 20.152 -0.024 0.010
361 360.000 20.122 -0.001 0.005
⑶K点水平方向的位移、速度和加速度线图
六.对机构进行动态静力分析
1.拆分杆组
2.列出形参和实参的表格
⑴对主动件①进行运动分析。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
1
2
0
1
r12
0.0
0.0
t
w
e
p
vp
ap
⑵对②③组成的RRR杆组进行运动分析。
形式参数
m
n1
n2
n3
k1
k2
r1
r2
t
w
e
p
vp
ap
实值
1
4
2
3
3
2
r34
r23
t
w
e
p
vp
ap
⑶调用bark函数,求5点运动参数。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
4
0
5
3
0.0
r45
25.0*dr
t
w
e
p
vp
ap
⑷对④⑤组成的RRR杆组进行运动分析。
形式参数
m
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
1
5
7
6
4
5
r56
r67
t
w
e
p
vp
ap
⑸调用bark函数,求8,9,10,11点的运动参数。
形式参数
n1
n2
n3
k
r1
r2
gam
t
w
e
p
vp
ap
实值
4
0
11
3
0.0
r411
18.0*dr
t
w
e
p
vp
ap
实值
5
0
9
4
0.0
r59
95.0*dr
t
w
e
p
vp
ap
实值
7
0
8
5
0.0
r78
-156.0*dr
t
w
e
p
vp
ap
实值
5
0
10
4
0.0
r510
176.0*dr
t
w
e
p
vp
ap
⑹对④⑤组成的RRR杆组调用rrrf进行动态静力分析。
形式参数
n1
n2
n3
ns1
ns2
nn1
nn2
nexf
k1
k2
p
vp
ap
实值
5
7
6
9
8
10
0
10
4
5
p
vp
ap
⑺②③组成的RRR杆组动态静力分析。
形式参数
n1
n2
n3
ns1
ns2
nn1
nn2
nexf
k1
k2
p
vp
ap
实值
4
2
3
11
0
5
0
0
3
2
p
vp
ap
⑻调用barf函数,求1点的运动副反力和平衡力矩。
形式参数
n1
ns1
nn1
k1
p
vp
ap
e
fr
tb
实值
1
0
2
1
p
vp
ap
e
fr
tb
3.编写主程序并运行
⑴主程序:
#include"stdio.h"
#include "graphics.h"
#include"subk.c"
#include"subf.c"
#include"draw.c"
main()
{
static double p[20][2],vp[20][2],ap[20][2],del;
static double t[10],w[10],e[10],tbdraw[370],tb1draw[370];
static double sita1[370],fr1draw[370],sita2[370],fr2draw[370],sita3[370],fr3draw[370];
static double fr[20][2],fe[20][2],tb,tb1,fr1,bt1,fr4,bt4,fr7,bt7,we1,we2,we3,we4,we5;
static int ic;
double r12,r23,r34,r45,r56,r67,r59,r78,r510,r411;
double pi,dr;
int i;
FILE *fp;
char *m[]={"tb","tb1","fr1","fr4","fr7"};
sm[1]=0.0;sm[2]=0.0;sm[3]=3500;sm[4]=3600;sm[5]=5500;
sj[1]=0.0;sj[2]=0.0;sj[3]=0.0;sj[4]=0.0;sj[5]=0.0;
r12=1.36;r23=2.87;r34=4.0;r45=28.525;r56=3.625;r67=25.15;r510=8.35;r78=2.5;r59=1.0;r411=8.5;
w[1]=0.11;e[1]=0.0;del=15.0;
pi=4.0*atan(1.0);
dr=pi/180.0;
p[1][1]=2.86;
p[1][2]=4.0;
p[4][1]=0.0;
p[4][2]=0.00;
p[7][1]=5.6;
p[7][2]=8.1;
printf("\n The Kinet0-static Analysis of a six-bar Linkase.\n");
printf("No HETA1 fr1 sita1 fr4 sita4 fr7 sita7 tb tb1\n");
printf(" deg N radian N radian N radian N.m N.m\n");
if((fp=fopen("20092170.txt","w"))==NULL)
{
printf("Can't open this file.\n");
exit(0);
}
fprintf(fp,"\n The Kinet0-static Analysis of a six-bar Linkase.\n");
fprintf(fp,"No HETA1 fr1 sita1 fr4 sita2 fr7 sita3 tb tb1\n");
fprintf(fp," deg N radian N radian N radian N.m N.m\n");
ic=(int)(360.0/del);
for(i=0;i<=ic;i++)
{
t[1]=(i*del)*dr;
bark(1,2,0,1,r12,0.0,0.0,t,w,e,p,vp,ap);
rrrk(1,4,2,3,3,2,r34,r23,t,w,e,p,vp,ap);
bark(4,0,5,3,0.0,r45,25.0*dr,t,w,e,p,vp,ap);
rrrk(1,5,7,6,4,5,r56,r67,t,w,e,p,vp,ap);
bark(5,0,10,4,0.0,r510,176.0*dr,t,w,e,p,vp,ap);
bark(4,0,11,3,0.0,r411,18.0*dr,t,w,e,p,vp,ap);
bark(5,0,9,4,0.0,r59,95.0*dr,t,w,e,p,vp,ap);
bark(7,0,8,5,0.0,r78,-156.0*dr,t,w,e,p,vp,ap);
rrrf(5,7,6,9,8,10,0,10,4,5,p,vp,ap,t,w,e,fr);
rrrf(4,2,3,11,0,5,0,0,3,2,p,vp,ap,t,w,e,fr);
barf(1,0,2,1,p,ap,e,fr,&tb);
fr1=sqrt(fr[1][1]*fr[1][1]+fr[1][2]*fr[1][2]);
bt1=atan2(fr[1][2],fr[1][1]);
fr4=sqrt(fr[4][1]*fr[4][1]+fr[4][2]*fr[4][2]);
bt4=atan2(fr[4][2],fr[4][1]);
fr7=sqrt(fr[7][1]*fr[7][1]+fr[7][2]*fr[7][2]);
bt7=atan2(fr[7][2],fr[7][1]);
we3=-(ap[11][1]*vp[11][1]+(ap[11][2]+9.81)*vp[11][2])*sm[3]-e[3]*w[3]*sj[3];
we5=-(ap[8][1]*vp[8][1]+(ap[8][2]+9.81)*vp[8][2])*sm[5]-e[5]*w[5]*sj[5];
extf(p,vp,ap,t,w,e,11,fe);
we4=-(ap[9][1]*vp[9][1]+(ap[9][2]+9.81)*vp[9][2])*sm[4]+fe[10][2]*vp[10][2];
tb1=-(we3+we4+we5)/w[1];
printf("\n%2d %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f",i+1,t[1]/dr,fr1,bt1/dr,fr4,bt4/dr,fr7/dr,bt7/dr,tb,tb1);
fprintf(fp,"\n%2d %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f %10.3f",i+1,t[1]/dr,fr1,bt1/dr,fr4,bt4/dr,fr7/dr,bt7/dr,tb,tb1);
tbdraw[i]=tb;
tb1draw[i]=tb1;
fr1draw[i]=fr1;
sita1[i]=bt1;
fr2draw[i]=fr4;
sita2[i]=bt4;
fr3draw[i]=fr7;
sita3[i]=bt7;
if((i%10)==0){getch();}
}
fclose(fp);
getch();
draw2(del,tbdraw,tb1draw,ic,m);
draw3(del,sita1,fr1draw,sita2,fr2draw,sita3,fr3draw,ic,m);
}
extf(p,vp,ap,t,w,e,nexf,fe)
double p[20][2],vp[20][2],ap[20][2],t[10],w[10],e[10],fe[20][2];
int nexf;
{
fe[nexf][1]=0.0;
if(vp[nexf][1]<0){
fe[nexf][2]=-50000.0;}
else{
fe[nexf][2]=0.0;}
}
⑵运行结果:
The Kinet0-static Analysis of a six-bar Linkase.
No HETA1 fr1 sita1 fr4 sita2 fr7 sita3 tb tb1
deg N radian N radian N radian N.m N.m
1 0.000 35180.939 -175.238 90588.841 73.045 2335780.649 78.160 -3972.137 -3972.137
2 15.000 91927.224 -168.091 209160.870 71.472 1365857.212 -13.861 6740.749 6740.749
3 30.000 95695.822 -161.689 224377.434 73.183 1594981.757 -23.497 26367.791 26367.791
4 45.000 80262.215 -156.543 226968.505 78.916 1959572.048 -30.235 40082.960 40082.960
5 60.000 37385.670 -153.065 211008.830 90.522 2318920.780 -30.563 27740.475 27740.475
6 75.000 22153.927 28.604 19435
展开阅读全文