发布企业信息

齿轮轮齿渐开线、螺栓、弹簧autolsp源程序

作者:  信息来源:模具  2006-9-11

字体大小:  网友评论  进入论坛  

25a(/pi9)ra(/(*(+z(+haha))m)2)rf(/(*(-z(+(+haha)c))m)2)r(/(*mz)2)rb(*r(cosa))rirbang0g(polarp0angrb))(command“circle“p0ra)(command“circle“p0rf)(command“circle“p0r)(command“line“g)(while(rira)(setqang(+ang(/pi360))ri(/rb(cosang))cta(-(/(sinang)(cosang))ang)g(polarp0ctari))(commandg))(command)...

(defunc:gear(/)
(
setq
p0(getpoint"输入齿轮中心p0:")
m(getreal"输入齿轮模数M:")
z(getint"输入齿轮齿数Z:")
ha1
c0.25
a(/pi9)
ra(/(*(+z(+haha))m)2)
rf(/(*(-z(+(+haha)c))m)2)
r(/(*mz)2)
rb(*r(cosa))
rirb
ang0
g(polarp0angrb)
)
(command"circle"p0ra)
(command"circle"p0rf)
(command"circle"p0r)
(command"line"g)

(while(<rira)
(setq
ang(+ang(/pi360))
ri(/rb(cosang))
cta(-(/(sinang)(cosang))ang)
g(polarp0ctari)
)

(commandg)
)
(command)
)


二、螺旋源程序

(defunerrMsg(s)
(if(/=s"functioncancelled")(princ(strcat"\nError:"s)))
;当命令执行时出现错误
(setvar"cmdecho"ocmdold);例如用户按下了CTRL+C
(setvar"osmode"osmold)
(setq*error*olderr);恢复旧的错误处理
(princ)
)

(defunc:3Dthread(/radouterthreadpitchthreadlengththreadangle
ptStartinnerdiafactorradmidradinnerocmdoldosmold4H5H6Hh6g6)
;-------------------------------------------------------------------
;获取公制外径大小、螺距总长
;然后计算一系列几何点
;并且关闭对象捕捉、命令回显
;-------------------------------------------------------------------
(setq4H(list0.00150.0020.0020.00250.0030.00350.0040.0050.0060.0070.0080.0090.010))
(setq5H(list0.0020.00250.0030.0040.00450.00550.00650.00750.0090.0100.01150.01250.0135))
(setq6H(list0.0030.0040.00450.00550.00650.0080.00950.0110.01250.01450.0160.0180.020))
(setqh6(list-0.003-0.004-0.0045-0.0055-0.0065-0.008-0.0095-0.011-0.0125-0.0145-0.016-0.018-0.020))
(setqg6(list-0.005-0.008-0.0095-0.0115-0.0135-0.017-0.0195-0.023-0.0265-0.0295-0.033-0.036-0.0515))

(setqosmold(getvar"osmode"));保存调用前的osmode系统变量值
(setqocmdold(getvar"cmdecho"));保存调用前的cmdecho系统变量值
(setvar"osmode"0);关闭对象捕捉
(setvar"cmdecho"0);关闭命令的回显

(setqinnerdiafactor1.5);设置内径系数
(initget7);radmid必须非零、非空、非负
(setqradmid(getdist"\n公制外径:"))
(initget7);threadpitch必须非零、非空、非负
(setqthreadpitch(getreal"\n螺距:"))
(initget1);ptStart必须非空
(setqptStart(getpoint"\n起始点:"))
(initget3);threadlength必须非零、非空、非负
(setqthreadlength(getdist"\n螺纹总长(Y方向):"))

;对公制外径添加公差
(if(<=radmid3)(setqorder0);根据公制外径确定公差带中位置
(if(<=radmid6)(setqorder1)
(if(<=radmid10)(setqorder2)
(if(<=radmid18)(setqorder3)
(if(<=radmid30)(setqorder4)
(if(<=radmid50)(setqorder5)
(if(<=radmid80)(setqorder6)
(if(<=radmid120)(setqorder7)
(if(<=radmid180)(setqorder8)
(if(<=radmid250)(setqorder9)
(if(<=radmid315)(setqorder10)
(if(<=radmid400)(setqorder11)
(if(<=radmid500)(setqorder12)
)))))))))))))

(if(<threadpitch0.25)(setqradmid(+radmid(nthorder4H)));根据螺距确定公差带
(if(<threadpitch0.35)(setqradmid(+radmid(nthorder5H)))
(if(>=threadpitch0.35)(setqradmid(+radmid(nthorder6H)))
)))

(setqh(*0.866025threadpitch));计算齿高
(setqradouter(+radmid(/h4)));计算外径
(setqradinner(-radouter(*hinnerdiafactor)));计算内径
(setqthreadangle(+300));计算齿顶角

(auxithreadradouterradmidradinnerthreadpitchthreadlengththreadangleptStart);
调用绘制三维螺纹的子函数

(princ"\n三维螺纹创建完成")
(setvar"osmode"osmold);恢复调用前的osmode系统变量值
(setvar"cmdecho"ocmdold);恢复调用前的cmdecho系统变量值
(princ)
)

(defunauxithread(radouterradmidradinnerthreadpitchthreadlengththreadangleptStart
/ttalpt1zangpt1apt1azpt3apt1bpt1bzpt3bpttmp1pttmp2pttmp3pttmp
4pttmp5pttmp6pttmp7pttmp8pttmp9pttmp10pttmp11pttmp12tstmpstartconeendcone)

;(command"undo""begin");开始undo步骤

(setqttal(+(fix(/(absthreadlength)threadpitch))3)
pttmp1(list(-(carptStart)(/radouter2.0))(cadrptStart)(caddrptStart))
pt1z(list(-(carptStart)(/radouter2.0))(cadrptStart)(+(caddrpttmp1)1.0))
pttmp2(polarpttmp1(/(*threadanglepi)180.0)1)
pttmp3(list(+(carpttmp1)radouter)(+(cadrpttmp1)(/threadpitch2.0))(caddrptStart))
ang(anglepttmp1pttmp3)
pt1a(polarpttmp1(+ang(/pi2.0))threadpitch)
pt1az(list(carpt1a)(cadrpt1a)(+(caddrpt1a)1.0))
pt3a(polarpt1aangradouter)
pt1b(polarpttmp1(-ang(/pi2.0))threadpitch)
pt1bz(list(carpt1b)(cadrpt1b)(+(caddrpt1b)1.0))
pt3b(polarpt1bangradouter)
pttmp4(polarpttmp3(/(*(-180threadangle)pi)180.0)1)
pttmp5(interspttmp1pttmp2pttmp3pttmp4nil)
pttmp6(list(carpttmp5)(cadrptStart)(caddrptStart))
pttmp7(polarpttmp1(/(*(-360threadangle)pi)180.0)1)
pttmp8(polarpttmp3(/(*(+180threadangle)pi)180.0)1)
pttmp9(interspttmp1pttmp7pttmp3pttmp8nil)
pttmp10(list(carpttmp9)(cadrpttmp3)(caddrpttmp3))
pttmp11(polarptStart(/pi2.0)threadpitch)
pttmp12(polarpttmp11(/pi2.0)(absthreadlength))
)

;-------------------------------------------------------------------
;绘制两个倒置的并偏移1/2螺距的圆锥
;这两个圆锥都以中剖面剖分
;进行并集运算
;-------------------------------------------------------------------

(SETQstartcone"order")
(SETQendcone"Y")
(command"zoom""w"(list(carpt1a)(+(cadrpt1a)(absthreadlength))(caddrpt1a))pt3b)

(princ"\n正在绘制三维螺纹,请等待")
(command"pline"pttmp1pttmp5pttmp6"c")
(command"revolve""l"""pttmp5pttmp6"")
(command"slice""l"""pttmp1pttmp3pt1zpttmp5)
(command"slice""l"""pt1apt3apt1azpttmp3)
(setqtstmp(ssadd(entlast)))
(command"pline"pttmp3pttmp9pttmp10"c")
(command"revolve""l"""pttmp9pttmp10"")
(command"slice""l"""pttmp1pttmp3pt1zpttmp9)
(command"slice""l"""pt1bpt3bpt1bzpttmp3)
(setqtstmp(ssadd(entlast)tstmp))
(command"union"tstmp"")

;-------------------------------------------------------------------
;上面的实体被剖切成两份,然后进行镜像以获得螺旋线的螺旋
;单线的高度实际上等于两倍螺距,但是超出或者是在内部或者是
;在最后一步被切除
;-------------------------------------------------------------------

(command"slice"tstmp"""xy"ptStart"b")
(setqtstmp(ssadd(entlast)tstmp))
(command"mirror""l"""pttmp1"@10<0""y")
(command"union"tstmp"")

;-------------------------------------------------------------------
;螺旋进行阵列操作,然后再作并集(可能会耗费一定时间)
;得到的实体再切除到指定的螺旋高度
;-------------------------------------------------------------------

(setqe(entlast))
(command"array"tstmp"""r"ttal1threadpitch)
(repeat(1-ttal)
(setqe(entnexte)
tstmp(ssaddetstmp)
)
)
(command"union"tstmp"")

;若开始创建45度的圆锥
(if(/=startcone"order")
(progn(setqe(entlast))
(command"cone"(list(carptStart)(+(cadrptStart)threadpitch)
(caddrptStart))"d"radmid"a"(list(carptStart)(+(+(cadrptStart)(/radmid2))
threadpitch)(caddrptStart)))
(command"union""l"e"")
)
)

(command"slice""l""""zx"pttmp11pttmp12)
(command"slice""l""""zx"pttmp12pttmp11)
(command"move""l"""ptStart(list(carptStart)(-(cadrptStart)threadpitch)(caddrptStart)))

;创建最小直径的圆柱体,然后与螺旋作交集
(setqe(entlast))
(command"cylinder"ptStart"d"radinner"c"(list(carptStart)
(+(cadrptStart)(absthreadlength))(caddrptStart)))
(command"union""l"e"")
(setqtstmp(entlast))

;创建中空的圆柱体
(command"cylinder"ptStart"d"radmid"c"(list(carptStart)(+(cadrptStart)
(absthreadlength))(caddrptStart)));minordia
(setqe(entlast))

;若最后创建45度的圆锥
(if(/=endcone"order")
(progn(command"move""l"""ptStart(list(carptStart)(-(cadrptStart)(/(-radmidradinner)2))
(caddrptStart)))
(command"cone"ptStart"d"radmid"a"(list(carptStart)(+(cadrptStart)(/radmid2))
(caddrptStart)))
(command"move""l"""ptStart(list(carptStart)(-(+(cadrptStart)(absthreadlength))
(/(-radmidradinner)2))(caddrptStart)))
(command"union""l"e"")
(setqe(entlast))
)
)

;从大圆柱中减去小直径圆柱
(command"cylinder"ptStart"d"(*radmid1.5)"c"(list(carptStart)(+(cadrptStart)(absthreadlength))(caddrptStart)))
(command"subtract""l"""e"")
(setqe(entlast))

;从螺旋中减去圆柱
(command"subtract"tstmp""e"")

;如果螺旋长度为负然后镜像
(setqe(entlast))
(if(<threadlength0)(mirror3de"zx"ptStart"y"))

(command"zoom""p")
;(command"undo""end");结束undo步骤
)

;;;---------------------------------------------------------------------------------------------------------------------;
(arxload"geom3d"nil)
(princ"\n3DThread已加载。")
(princ)

三、弹簧源程序

(defunerrMsg(s);当命令执行时出现错误
;例如用户按下了CTRL+C
(if(/=s"Functioncancelled")
(princ(strcat"\nError:"s))
)
(setvar"cmdecho"cmdch);恢复调用前的cmdecho系统变量值
(setvar"blipmode"blpmd);恢复调用前的blipmode系统变量值
(setq*error*olderror);恢复旧的错误处理
(princ)
)

(defunspring(nRepeatcntPointbhfaclrstradbvfac
/angledistnctpaGrwdhGrwdvGrwPi2dv)

(setvar"blipmode"0);关闭blipmode
(setvar"cmdecho"0);关闭cmdecho
(setqPi2(*3.141592652))
(setqaGrw(/Pi2lr))
(setqdhGrw(/bhfaclr))
(ifbvfac(setqdvGrw(/bvfaclr)))
(setqangle0.0)
(ifbvfac
(setqdistncstraddv0.0)
(setqdistnc0.0)
)
(ifbvfac
(command"3dpoly");开始绘制弹簧
(command"pline"cntPoint);从基点开始绘制弹簧
)
(repeatnRepeat
(repeatlr
(setqtp(polarcntPoint(setqangle(+angleaGrw))
(setqdistnc(+distncdhGrw))
)
)
(ifbvfac
(setqtp(list(cartp)(cadrtp)(+dv(caddrtp)))
dv(+dvdvGrw)
)
)
(commandtp);继续输入下一点
)
)
(command"");输入结束
(princ)
)

;;;
;;;生成三维弹簧函数调用接口
;;;

(defunC:3DSPRING(/olderrorcmdchblpmdcntPtRottCnthoriGrwvertGrwbgnRdtnptCntPerCircle)
(setqcmdch(getvar"cmdecho"));获取cmdecho值,以便调用结束后恢复
(setqblpmd(getvar"blipmode"));获取blipmode值,以便调用结束后恢复
(setvar"cmdecho"0);关闭cmdecho
(initget1);cntPt必须非空
(setqcntPt(getpoint"\n请输入底部中心点:"))
(initget7);RottCnt必须非零、非空,不可忽略
(setqRottCnt(getint"\n旋转的圈数:"))
(initget7);bgnRdtn必须非零、非空,不可忽略
(setqbgnRdtn(getdistcntPt"\n起始半径:"))
(initget1);cf必须非零、非空
(setqhoriGrw(getdist"\n每一圈的水平增长距离:"))
(initget3);cf必须非零、非空
(setqvertGrw(getdist"\n每一圈的垂直增长距离:"))
(initget6);ptCntPerCircle必须非零、不可忽略
(setqptCntPerCircle(getint"\n每一圈的插值点数<35>:"))
(cond((nullptCntPerCircle)(setqptCntPerCircle35)))
(springRottCntcntPthoriGrwptCntPerCirclebgnRdtnvertGrw)
(setvar"cmdecho"cmdch);恢复调用前的cmdecho系统变量值
(setvar"blipmode"blpmd);恢复调用前的blipmode系统变量值
(setq*error*olderror);Restoreold*error*handler
(princ)

)

          
分页:
Google


推荐图文

广告

机械热点图文

  • 数控车床加工编程典型实例分析2
  • 内螺纹车削加工——数控车床编程实例42
  • 子程序编程方法-数控车床编程实例36
  • 塑料模具动画演示

机械风云人物

Copyright © 2004 51base.com Inc. All rights reserved.

无忧基地 版权所有│粤ICP备06098418号│XHTML | CSS

客服:+86-755-2212 2202 工作时间:周1~5 10点~16点

感谢中国网络提供带宽支持

《网络营销技巧》