明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3134|回复: 10

[基础] 请教各位大侠,lisp 出现 错误:要绑定的对象不正确:T

[复制链接]
发表于 2011-7-19 19:57:55 | 显示全部楼层 |阅读模式
程序如下:
;/main program/
(defun C:GEAR( / z m alpha cx ha xi f f1 Ra Rf L
pd pu pd1x pd1y pd1 pu1x pu1y pu1 a Rb h hh hc tga
p0 p1 p2 p3 p4 p5 z0 dt t tr dl pp )
(command "erase" "all" " ")
(setq z (getint "\n[渐开线齿轮的范成演示]\n输入齿数: "))
  ;输入齿轮基本参数:齿数、模数、分度圆压力角、齿顶高系数、径向间隙系数。
(while (or (< z 3) (= z nil))
(setq z (getint "\n 输入齿数:"))
)
(setq m (getreal "\n 输入模数:"))
(setq alpha (getreal "\n 输入分度圆压力角(度):"))
(setq cx (getstring "\n 输入‘常’/‘短’齿形(N/S):"))
(if (or (= cx "S") (= cx "s"))
(setq ha 0.8 C0 0.30)
(setq ha 1.0 C0 0.25)
)
(if (< m 1) (setq C0 0.35))
(setq xi (getreal "\n 输入变位系数:"))
;输入变位系数。
(setq r (/ (* m z) 2.0));计算分度圆半径。
(setq r1 (+ r (* xi m)))
(setq Ra (+ r (* m ha))) ;计算齿顶圆半径。
(setq Rf (* (- r (* (+ ha C0) m))))
(setq L (+ (* 2 pi r1) r1)) ;计算齿条长度。
(setq pd (list (- L) (- (* 3 (/ L 4.0)))))
;估算图幅大小。
(setq pu (list L (/ L 4.0)))
(command "limits" pd pu) ;设定图幅。
(command "zoom" "a")
(setq pd1x (- (+ Ra m)))
(setq pd1y pd1x)
(setq pd1 (list pd1x pd1y))
(setq pu1x (+ Ra m))
(setq pu1y pu1x)
(setq pu1 (list pu1x pu1y))
(setq a (* (/ alpha 180.0) pi))
;将分度圆压力角化成弧度。
(setq Rb (* r (cos a)))  ;计算基圆半径。
(setq h (* ha m)) ;画齿条单元形。
(setq hh (* 2 h))
(setq hc (* C0 m))
(setq p0 (list (- r) (+ r1 h)))
(setq tga (/ (sin a) (cos a)))
(setq p1 (list(+ (car p0) (* tga (+ hh hc)))(- (cadr p0) (+ hh hc))))
(setq p2 (list(+ (car p1) (- (/ (* pi m) 2) (* 2 (+ h hc) tga)))(cadr p1)))
(setq p3 (list(+ (car p2) (* (+ hh (* 2 hc)) tga))(+(cadr p0) hc)))
(setq p4 (list(+ (car p3) (- (car p2) (car p1)))(cadr p3)))
(setq p5 (list(+ (car p4) (* hc tga)) (cadr p0)))
(command "pline" p0 p1 p2 p3 p4 p5 " ")
(command "fillet" "r" (/ hc 2))
(command "fillet" "p" p0)
(setq z0 (+ 2 (fix (/ L (* pi m)))))
(command "array" p0 " " "r" "1" z0 (-(car p5) (car p0)))  ;生成标准齿条。
(command "pedit" p0 "j" "all" " " " ")
(setq dt (getreal "\n  输入范成精度:"))
(setq t 0) ;范成过程。
(while (<= t 360)
(command "copy" (entnext)  " "  p0 p0)
(setq t (+ t dt))
(setq tr (* (/ t 180.0) pi))
(setq dl (* r tr))
(setq pp (list (- (car p0) dl) (cadr p0)))
(command "move"  (entlast) " " p0 pp)
(command "rotate" (entlast) " " "0,0" (- t))
)
(command "zoom" "w"  pd1 pu1)
(command "circle" "0,0" Ra)
;绘制齿顶圆。
(command "boundary"  "0,0 " " ")
;形成齿轮边界
(command "erase" "all" "r" (entlast) " ")
)

但最后出现 错误:要绑定的对象不正确:T
是怎么回事啊?
发表于 2011-7-19 20:21:43 | 显示全部楼层
(defun C:GEAR( / z m alpha cx ha xi f f1 Ra Rf L
pd pu pd1x pd1y pd1 pu1x pu1y pu1 a Rb h hh hc tga
p0 p1 p2 p3 p4 p5 z0 dt  t tr dl pp ); t是函数是不能放要这里的(command "erase" "all" " ");此处多一空格" "
发表于 2011-7-19 21:21:59 | 显示全部楼层
正确的说法是:T是保留字,其含义是“真”的意思。不要用T做变量。
 楼主| 发表于 2011-7-19 21:40:52 | 显示全部楼层
本帖最后由 安鹏 于 2011-7-19 22:24 编辑

回复 祥子 的帖子

谢谢这位大虾的帮助,但是程序改过后:
;/main program/
(defun C:GEAR( / z m alpha cx ha xi f f1 Ra Rf L
pd pu pd1x pd1y pd1 pu1x pu1y pu1 a Rb h hh hc tga
p0 p1 p2 p3 p4 p5 z0 dt t1 tr dl pp )
(command "erase" "all" " ")
(setq z (getint "\n[渐开线齿轮的范成演示]\n 输入齿数:"))
  ;输入齿轮基本参数:齿数、模数、分度圆压力角、齿顶高系数、径向间隙系数。
(while (or (< z 3) (= z nil))
(setq z (getint "\n 输入齿数:"))
)
(setq m (getreal "\n 输入模数:"))
(setq alpha (getreal "\n 输入分度圆压力角(度):"))
(setq cx (getstring "\n 输入‘常’/‘短’齿形(N/S):"))
(if (or (= cx "S") (= cx "s"))
(setq ha 0.8 C0 0.30)
(setq ha 1.0 C0 0.25)
)
(if (< m 1) (setq C0 0.35))
(setq xi (getreal "\n 输入变位系数:"))
;输入变位系数。
(setq r (/ (* m z) 2.0)) ;计算分度圆半径。
(setq r1 (+ r (* xi m)))
(setq Ra (+ r (* m ha))) ;计算齿顶圆半径。
(setq Rf (* (- r (* (+ ha C0) m))))
(setq L (+ (* 2 pi r1) r1)) ;计算齿条长度。
(setq pd (list (- L) (- (* 3 (/ L 4.0)))))
;估算图幅大小。
(setq pu (list L (/ L 4.0)))
(command "limits" pd pu) ;设定图幅。
(command "zoom" "a")
(setq pd1x (- (+ Ra m)))
(setq pd1y pd1x)
(setq pd1 (list pd1x pd1y))
(setq pu1x (+ Ra m))
(setq pu1y pu1x)
(setq pu1 (list pu1x pu1y))
(setq a (* (/ alpha 180.0) pi))
;将分度圆压力角化成弧度。
(setq Rb (* r (cos a))) ;计算基圆半径。
(setq h (* ha m)) ;画齿条单元形。
(setq hh (* 2 h))
(setq hc (* C0 m))
(setq p0 (list (- r) (+ r1 h)))
(setq tga (/ (sin a) (cos a)))
(setq p1 (list(+ (car p0) (* tga (+ hh hc)))(- (cadr p0) (+ hh hc))))
(setq p2 (list(+ (car p1) (- (/ (* pi m) 2) (* 2 (+ h hc) tga)))(cadr p1)))
(setq p3 (list(+ (car p2) (* (+ hh (* 2 hc)) tga))(+(cadr p0) hc)))
(setq p4 (list(+ (car p3) (- (car p2) (car p1)))(cadr p3)))
(setq p5 (list(+ (car p4) (* hc tga)) (cadr p0)))
(command "pline" p0 p1 p2 p3 p4 p5 " ")
(command "fillet" "r" (/ hc 2))
(command "fillet" "p" p0)
(setq z0 (+ 2 (fix (/ L (* pi m)))))
(command "array" p0 " " "r" "1" z0 (-(car p5) (car p0))) ;生成标准齿条。
(command "pedit" p0 "j" "all" " " " ")
(setq dt (getreal "\n 输入范成精度:"))
(setq t1 0) ;范成过程。
(while (<= t1 360)
(command "copy" (entnext) " " p0 p0)
(setq t1 (+ t1 dt))
(setq tr (* (/ t1 180.0) pi))
(setq dl (* r tr))
(setq pp (list (- (car p0) dl) (cadr p0)))
(command "move"  (entlast) " " p0 pp)
(command "rotate" (entlast) " " "0,0" (- t1))
)
(command "zoom" "w"  pd1 pu1)
(command "circle" "0,0" Ra)
;绘制齿顶圆。
(command "boundary" "0,0" " ")
;形成齿轮边界
(command "erase" "all" " " "r" (entlast) " ")
)
其控制窗口提示:
;错误:函数被取消,又是什么意思呢?我是在2007版本下运行的。
发表于 2011-7-19 23:00:30 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2011-7-19 23:02 编辑

这是照书抄的吧。错误百出。
游客,本帖隐藏的内容需要发帖数高于 2 才可浏览,你当前发帖数只有 0
发表于 2011-7-19 23:04:42 | 显示全部楼层
所有的 "  "中间不要有空格应该是"".
发表于 2011-7-19 23:26:00 | 显示全部楼层
所有的全角分号和冒号都要换成半角。
 楼主| 发表于 2011-7-20 10:26:10 | 显示全部楼层
回复 ZZXXQQ 的帖子

这位大大说的对,哈。我是抄别人论文里的程序,然后再把此程序的思想用在我自己的新结构滚刀上来范成齿轮的。首先谢谢您帮我纠正错误,但是刚才运行的时候,感觉与实际不符。
就运行4-48行来说,控制台中显示的p0,p1,p2,p3,p4,p5的坐标都正确,但是其在AutoCAD窗口显示出来的齿条形状却不正确,不知是怎么回事啊?
发表于 2011-7-20 11:08:58 | 显示全部楼层
关了捕捉。在画图前加一句(setvar "OSNAP" 0)
 楼主| 发表于 2011-7-20 14:33:04 | 显示全部楼层
回复 ZZXXQQ 的帖子

谢谢这位大大热心的帮我答疑解惑。也谢谢所有ls帮助我的。令我受益匪浅。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-24 05:34 , Processed in 0.176371 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表