第三章机械设计编程基础 2.1编程和图表处理的基本方法 、编制机械设计计算程序的基本方法 (1)设计数据 (2)表格、线图及标准规范 (3)算法设计 式中,T为转矩 h为键高度 为键的工作长度 [op为轮毂的许用挤压应力 图1平键联接的受力情况 表1平键(摘自GB1096-90) 开始 轴径%m mm mm 输入T,d,l,YBP 自6~8 根据d检索出h >8~10 3 BP=4T/(dlh) >12~1 >17~22 BP≤YBP? 输出 输出 黄足强度条件 不满足强度条 12 >44~50 结束
第三章 机械设计编程基础 2.1 编程和图表处理的基本方法 一、编制机械设计计算程序的基本方法 (1) 设计数据 (2) 表格、线图及标准规范 (3) 算法设计 p p dlh T = 4 式中,T 为转矩; h 为键高度; l 为键的工作长度; [σp]为轮毂的许用挤压应力。 图 1 平键联接的受力情况 b ≈h/2 h L b dd l 表 1 平键(摘自 GB1096-90) 轴径 mm d mm b mm h 自 6~8 2 2 >8 ~10 3 3 >10~12 4 4 >12~17 5 5 >17~22 6 6 >22~30 8 7 >30~38 10 8 >38~44 12 8 >44~50 14 9 d T 开始 输入: T, d,l,YBP 根据 d 检索出 h BP = 4T /(dlh) BP YBP ? 输出: 满足强度条件 输出: 不满足强度条 件 结束
二、设计图表处理的基本方法 1.表格(手册中的)分为两类: 数表:表格中的数据之间没有任何联系 列表函数:表格中的数据之间存在着某种联系 2.表格处理的基本方法: (1)表格的程序化:将数表中的数据以数组形式存储和检索,直接编 在解题的程序中。 (2)表格的公式化:对于列表函数,可用曲线拟合的方法形成数学表 达式并直接编于程序中。 2-2设计数表的处理 表格的程序化 数表 维(元)数表:所查取的数据只与一个变量有关的数表; 二维(元)数表:所查取的数据与两个变量有关的数表 它们均可用一维和二维数组的形式存入计算机,以备程序使用。 一维(元)数表程序化 示例1 int l: 表2材料的密度 float GAMA[]气{7877.85830,775} print(“1.工业纯铁\n”); 材料密度/(g.cm3) print(“1.钢材\n”); 工业纯铁 钢材 printf((“2.高速钢n”); 高速钢 不锈钢 print(“3.不锈钢n”); 7。75 printf((“选择材料类型:”); scanf(“%d,&) printf((“3.不锈钢n”); printi(“材料的密度:%升n”,GAMA[-1]);
二、设计图表处理的基本方法 1.表格(手册中的)分为两类: : .. : ; 列表函数 表格中的数据之间存在着某种联系 数表 表格中的数据之间没有任何联系 2.表格处理的基本方法: (1)表格的程序化:将数表中的数据以数组形式存储和检索,直接编 在解题的程序中。 (2)表格的公式化:对于列表函数,可用曲线拟合的方法形成数学表 达式并直接编于程序中。 2-2 设计数表的处理 一、表格的程序化 1. 数表 一维(元)数表:所查取的数据只与一个变量有关的数表; 二维(元)数表:所查取的数据与两个变量有关的数表; 它们均可用一维和二维数组的形式存入计算机,以备程序使用。 一维(元)数表程序化 示例 1 : int I; float GAMA[ ] ={ 7.87,7.85,8.30,7.75}; printf( “1. 工业纯铁\ n”); printf( “1. 钢材\ n”); printf( “2. 高速钢\ n”); printf( “3. 不锈钢\ n”); printf( “选择材料类型:”); scanf( “ % d”,&I); printf( “3. 不锈钢\ n”); printf( “材料的密度:% f\ n”,GAMA[I-1]); 表 2 材料的密度 材 料 密度 / (g.。cm-3 ) 工业纯铁 7。87 钢 材 7。85 高 速 钢 8。30 不 锈 钢 7。75
示例2 表2轴的常用材料及其机械性能 拉伸强度拉伸屈弯曲疲剪切疲 极限服极限|劳极限劳极限 序热处毛坯直径 硬度 MPa SGMBI SGMS叫 SGMII TAUI 正火 ≤241 610 360 260150 正火 ≤100 170-217 600 30 00 275 140 45 回火>100-300162-217 580 290 270 135 调质 ≤200 217-255 0 360 300 155 1000 50 280 456789 周质 ≤100 241-286 750 350 200 >100-300241-286 700 185 300-320 1000 485 280 40CrNi调质 100 270-300 900 750 470 渗碳 850 550 1020Cr|淬火 表面 56-62HRC 400 280 11 60 650 400 上表为4种材料,12种热处理规格,而每一种规格包含4种机械性能指标ε σa,σs,σκ1。若给每一种机械性能确定一个标识符,则该表可由以下4个 一维数组表示: B[] =0,1,2,…,11 SGMASII Ⅰ=01.2..11 1 -SGML =0,1,2,…,11 =0,1,2,…,11 二维(元)数表程序化 示例1: 表3齿轮传动的工作情况系数K 原动机工作情况I 工作机工作情况J 平稳载荷J=1 中等冲击J=2 严重冲击J=3 工作平稳1=1 1.75 轻度冲击I=2 1.25 中等冲击I=3 1.75 ≥2.25
示例 2 : 表 2 轴的常用材料及其机械性能 序 号 材料牌号 热处 理 毛坯直径 mm 硬度 HB 拉伸强度 极限 B 拉伸屈 服极限 S 弯曲疲 劳极限 −1 剪切疲 劳极限 −1 MPa SGMB[I] SGMS[I] SGM[I] TAU[I] 0 45 正火 25 241 610 360 260 150 1 正火 100 170 − 217 600 300 275 140 2 回火 100 −300 162 − 217 580 290 270 135 3 调质 200 217 − 255 650 360 300 155 4 40Cr 调质 25 1000 800 500 280 5 100 241− 286 750 550 350 200 6 100 −300 241− 286 700 500 340 185 7 40CrNi 调质 25 300 −320 1000 800 485 280 8 100 270 −300 900 750 470 280 9 20Cr 渗碳 15 表面 56 −62HRC 850 550 375 215 10 淬火 30 650 400 280 160 11 回火 60 650 400 280 160 上表为 4 种材料,12 种热处理规格,而每一种规格包含 4 种机械性能指标: 1 1 , , , − − B S 。若给每一种机械性能确定一个标识符,则该表可由以下 4 个 一维数组表示: 0,1,2, ,11 0,1,2, ,11 0,1,2, ,11 0,1,2, ,11 1 1 − − − − − − = − − − − − − = − − − − − = − − − − − = − − TAU I I SGM I I SGMAS I I SGMAB I I S B 二维(元)数表程序化 示例 1: 表 3 齿轮传动的工作情况系数 KA 原动机工作情况 I 工作机工作情况 J 平稳载荷 J=1 中等冲击 J=2 严重冲击 J=3 工作平稳 I=1 1 1.25 1.75 轻度冲击 I=2 1.25 1.5 ≥2 中等冲击 I=3 1.5 1.75 ≥2.25
由表可见,原动机工况和工作机工况都有多个“去向”。 用条件语句编制程序就会显得冗长,故可采用3×3的数组W[3][3]。有关 程序如下 Intl.J Float WK[]3]={1,1.25,1.75,1.25,1.5,2,15,1.75225} Printf(“原动机工作情况:\n”); Printf 1.工作平稳ln”); Printf(“ 2.轻度冲击n”) Printf 3.中度冲击n”) Printf 请选择序号:Ⅶn”); Scanf(“%d”,&); Printf(“工作机工作情况:n"”); Printf(“ 1.平稳载荷n”); Printf 2.中等冲击n”) Printf(“ 3.严重冲击n”); Printf(“ 请选择序号:\n”) Scanf(“%d”,&aJ); Printf(“工况系数:%升n,WK[-们[-1]); 2.列表函数 使用这类列表函数时,需要用插值的方法来检索数据。列表函数如下 表4蜗杆传动的相对滑动速度v与当量摩擦系数山之间的关系 0.010.050.100.250.501.01.5 0.1100.0900.0800.0650.0550.0450.040 Vs 2.02.53.04.05.08.010.0 ,0.0350.0300.0280.0240.0220.0180.016 线性插值公式: y-y y=) DX
由表可见,原动机工况和工作机工况都有多个“去向”。 用条件语句编制程序就会显得冗长,故可采用 3×3 的数组 WK[3][3]。有关 程序如下: Int I,J Float WK[ ] [3] = {1,1.25,1.75,1.25,1.5,2,1.5,1.75,2.25}; Printf ( “ 原动机工作情况:\n”) ; Printf ( “ 1. 工作平稳\ n”) ; Printf ( “ 2. 轻度冲击\ n”) ; Printf ( “ 3. 中度冲击\ n”) ; Printf ( “ 请选择序号:\n”) ; Scanf (“ % d”, &I); Printf ( “ 工作机工作情况:\n”) ; Printf ( “ 1. 平稳载荷\ n”) ; Printf ( “ 2. 中等冲击\ n”) ; Printf ( “ 3. 严重冲击\ n”) ; Printf ( “ 请选择序号:\n”) ; Scanf (“ % d”, &J); Printf ( “ 工况系数:% f\ n”, WK [I-1] [j-1]) ; 2. 列表函数 使用这类列表函数时,需要用插值的方法来检索数据。列表函数如下: 表 4 蜗杆传动的相对滑动速度 s v 与当量摩擦系数 v 之间的关系 s v m/s 0.01 0.05 0.10 0.25 0.50 1.0 1.5 v 0.110 0.090 0.080 0.065 0.055 0.045 0.040 s v m/s 2.0 2.5 3.0 4.0 5.0 8.0 10.0 v 0.035 0.030 0.028 0.024 0.022 0.018 0.016 线性插值公式: ( )i i i i i i x x x x y y y y − − − = + − − 1 1
分段线性插值的算法框图: 检索表4当量摩擦系数的程序段: Intn=14 开始 float vs[]={0.01,0.05,0.10, 输入:列表函数两组数 据x和y的插值点x 0.25,0.50,1.0,15,20,253.0,4.0 I=1 508.0,10.0} floaty my[]={0.110,0090, x≤x 0.080,0.065,0.0550.045,0.040,0 l=+1 035,0.030.0.028,0.024,0.022,0. -n- 018,0016} floatY S M v. y=y x1-x-1 float lineinsert( float *sx, float 'sy, intn, float inp); 结束 vs=1.24 m_v= lineinsert(x_VS,Y_Mv n,v_s) 有关线性分段插值的程序为 float lineinsert float *sx, float *sy, int n, float inp ) float outp for(1=1; i<n-1; i++ )if( inp<sx [i]break outp=sy[]+( sy[]-sy[i-1])*(inp-sx[ i])/(sx[ i]-sy[ 1-1]); return(outp)
有关线性分段插值的程序为 分段线性插值的算法框图: Y N 检索表 4 当量摩擦系数的程序段: Int n=14 float x_vs [ ] = { 0.01,0.05,0.10, 0. 25,0.50,1.0,1.5,2.0,2.5,3.0,4.0 ,5.0,8.0,10.0 }; float Y_Mv [ ] = { 0.110,0.090, 0.080,0.065,0.055,0.045,0.040,0 .035,0.030,0.028,0.024,0.022,0. 018,0.016 }; float v_s,M_v ; float lineinsert ( float *sx,float *sy,int n, float inp); v_s = 1.24; m_V = lineinsert ( x_VS,Y_Mv, n,v_s ); float lineinsert ( float *sx, float *sy, int n, float inp ); { int i; float outp; for ( I=1;i<n-1;i++ ) if ( inp<sx [ i ] break; outp = sy[ i ] + ( sy[ i ] - sy[ i-1] ) * (inp – sx[ i ] ) / (sx[ i ] - sy[ I-1 ] ); return ( outp ) ; } 开始 输入:列表函数两组数 据 i i x 和y 的插值点 x I=1 ?i x x I=I+1 I=n-1 ( )i i i i i i x x x x y y y y − − − = + − − 1 1 结束