找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 641|回复: 7

[求助] [求助]:请大家帮我看看这个程序为什么不稳定

[复制链接]
发表于 2005-7-23 18:40:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我初学lisp,还不太熟悉,我编的程序单步运行好用,可一整体运行几次就出现错误,
错误: 参数太多
错误: 参数类型错误: stringp nil
程序如下:
(defun 阀门3 (/ save dpath dname file1 filename dcl_id jlname dn br1 br2 bname
             block g1x g2x yy g1y g2y gy1 gy2 gd1 gd2 gd3 gd4 gd5 gd6 gd7 gd8 gd9 gd10 gd11 gd12 gd13
              gd14 wz1 z1 z4 xx gx1 gx2 se1 tyname tyjbl tyjb ljname ljunit ljxh gx t1 tt tx
              ty t2 c1 c1q c2 c2q sp fx fxx sp1 sp2 spx spy sp3 sp4 sp5 sc dc c1x c1y c2x c2y spd
              )
             
  (setq save (getvar "DWGTITLED"))
  (if (= save 0)
    (progn
      (alert "还没有存盘,请保存图形文件!")
      (exit)
    )
  )
  (setq        dpath (getvar "dwgprefix")
        dname (getvar "dwgname")
  )
  (setvar "orthomode" 0)
  (setvar "osmode" 0)
  (setq        filename (strcat dpath
                         (substr dname 1 (- (strlen dname) 4))
                         "_明细表预备表.txt"
                 )
  )
  (setq file1 (open filename "a"))
  (setq dcl_id (load_dialog "g:/我的程序/阀门3.dcl"))
  (if (not (new_dialog "阀门3" dcl_id))
    (exit)
  )
  (action_tile "et1" "(setq xuhao $value)")
  (action_tile "accept" "(fbcanshu)")
  (start_dialog)
  (unload_dialog dcl_id)
  (princ)
  (cond
    (
     (= xuhao "0")
     (setq jlname "防爆电磁阀")
    )
    (
     (= xuhao "1")
     (setq jlname "电磁阀")
    )
      )
                                ;(setq gg "DN100")
  (setq dn (substr gg 3))
  (setq dn (atof dn))
  (管线件的定位尺寸)
  (if (= c1x c2x)
    (progn
      ;(setq dc (list c1x spd))
      (setq
        br1 (list c1x (+ spd (* (* dn 2) (sin (/ (* 60 pi) 180))) 40))
      )
      (setq
        br2 (list c1x (- spd (* (* dn 2) (sin (/ (* 60 pi) 180))) 40))
      )
      (command "break" br1 br2)
    )
  )
  (if (= c1y c2y)
    (progn
      ;(setq dc (list spd c1y))
      (setq
        br1 (list (- spd (* (* dn 2) (sin (/ (* 60 pi) 180))) 40) c1y)
      )
      (setq
        br2 (list (+ spd (* (* dn 2) (sin (/ (* 60 pi) 180))) 40) c1y)
      )
      (command "break" br1 br2)
    )
  )
  (setq bname (strcat jlname "a" gg))
  (setq block (tblsearch "block" bname))
  (if (= block nil)
    (progn
      (command "layer"          "m"             "阀门"           "c"
               2          "阀门"                "lw"           "0.15"
               ""          ""
              )
      (if (= c1x c2x)
        (progn
          (setq g1x (- c1x dn))
          (setq g2x (+ c1x dn))
          (setq yy (* (* dn 2) (sin (/ (* 60 pi) 180))))
          (setq g1y (+ spd yy))
          (setq g2y (- spd yy))
          (setq gy1 (+ g1y 40))
          (setq gy2 (- g2y 40))
          (setq gd1 (list g1x g1y))
          (setq gd2 (list g2x g1y))
          (setq gd3 (list g1x g2y))
          (setq gd4 (list g2x g2y))
          (setq gd5 (list g1x gy1))
          (setq gd6 (list g2x gy1))
          (setq gd7 (list g1x gy2))
          (setq gd8 (list g2x gy2))
          (setq gd9 (list g1x ty))
          (setq gd10 (list g2x ty))
          (command "line" gd1 gd2 "")
          (command "line" gd1 gd4 "")
          (command "line" gd2 gd3 "")
          (command "line" gd3 gd4 "")
          (command "line" gd5 gd6 "")
          (command "line" gd7 gd8 "")
          (command "line" gd9 gd10 "")
          (setq gd11 (list (+ c1x 200) spd))
          (setq gd12 (list (+ c1x 340) (- spd 70)))
          (setq gd13 (list (+ c1x 200) (+ spd 70)))
          (command "line" dc gd11 "")
          (command "rectang" gd12 gd13)
          (setq gd14 (list (+ c1x 270) spd))
          (setq wz1 "M")
          (command "-style" "mm" "宋体" 70 1 90 "N" "N")
          (command "text" "s" "mm" "j" "m" gd14 0 wz1)
          (setq z1 (list g1x gy1))
          (setq z4 (list (+ c1x 340) gy2))
        )
      )
      (if (= c1y c2y)
        (progn
          (setq g1y (+ c1y dn))
          (setq g2y (- c1y dn))
          (setq xx (* (* dn 2) (sin (/ (* 60 pi) 180))))
          (setq g1x (- spd xx))
          (setq g2x (+ spd xx))
          (setq gx1 (- g1x 40))
          (setq gx2 (+ g2x 40))
          (setq gd1 (list g1x g1y))
          (setq gd2 (list g2x g1y))
          (setq gd3 (list g1x g2y))
          (setq gd4 (list g2x g2y))
          (setq gd5 (list gx1 g1y))
          (setq gd6 (list gx2 g1y))
          (setq gd7 (list gx1 g2y))
          (setq gd8 (list gx2 g2y))
          (setq gd9 (list spd g1y))
          (setq gd10 (list spd g2y))
          (command "line" gd1 gd3 "")
          (command "line" gd1 gd4 "")
          (command "line" gd2 gd3 "")
          (command "line" gd2 gd4 "")
          (command "line" gd5 gd7 "")
          (command "line" gd6 gd8 "")
          (command "line" gd9 gd10 "")
          (setq gd11 (list spd (+ c1y 200)))
          (setq gd12 (list (- spd 70) (+ c1y 340)))
          (setq gd13 (list (+ spd 70) (+ c1y 200)))
          (command "line" dc gd11 "")
          (command "rectang" gd12 gd13)
          (setq gd14 (list spd (+ c1y 270)))
          (setq wz1 "M")
          (command "-style" "mm" "宋体" 70 1 0 "N" "N")
          (command "text" "s" "mm" "j" "m" gd14 0 wz1)
          (setq z1 (list gx1 (+ c1y 340)))
          (setq z4 (list gx2 g2y))
        )
      )
      (setq se1 (ssget "c" z1 z4 '((8 . "阀门"))))
      (setq bname (strcat jlname "a" gg))
      (command "-block" bname dc se1 "")
    )
  )
  (command "-insert" bname dc "" "" "")
  (setq tyname (entget (entlast)))
  (setq tyjbl (assoc 5 tyname))
  (setq tyjb (cdr tyjbl))
  (setq ljname jlname)
  (setq ljunit "个")
  (setq ljxh (strcat xh ghg gg))
  (setq ljname1 (strcat ljname " " ljxh))
  (setq mxb1 '())
  (setq mxb1 (append mxb1 (list tyjb)))
  (setq mxb1 (append mxb1 (list ljname1)))
  (setq mxb1 (append mxb1 (list ljunit)))
                                        ;(setq mxb1 (vl-princ-to-string mxb1))
  (setq mxb2 (StrUnParse mxb1 ","))
  (write-line mxb2 file1)
)
(defun fbcanshu        ()
  (setq xh (get_tile "ed1"))
  (setq ghg (get_tile "ed2"))
  (setq gg (get_tile "ed3"))
)
(defun 管线件的定位尺寸        ()
                         
  (setq gx (entsel "请选择所在的管线\n"))
  (setq t1 (car gx))
  (setq tt (cadr gx))
  (setq tx (car tt))
  (setq ty (cadr tt))
  (setq t2 (entget t1))
  (setq c1 (assoc 10 t2))
  (setq c1q (cdr c1))
  (setq c1x (car c1q))
  (setq c1y (cadr c1q))
  (setq c2 (assoc 11 t2))
  (setq c2q (cdr c2))
  (setq c2x (car c2q))
  (setq c2y (cadr c2q))
  (if (= c1y c2y)
    (progn
      (setq sp (entsel "请选择水平方向的定位基准线\n"))
      (setq fx (getpoint "请选择在所选直线的哪一侧"))
      (setq fxx (car fx))
      (setq sp1 (car sp))
      (setq sp2 (cadr sp))
      (setq spx (car sp2))
      (setq spy (cadr sp2))
      (setq sp3 (entget sp1))
      (setq sp4 (assoc 10 sp3))
      (setq sp5 (car (cdr sp4)))
      (setq sc (getint "请输入水平距离\n"))
      (cond
        ((> fxx spx) (setq spd (+ sp5 sc)))
        ((< fxx spx) (setq spd (- sp5 sc)))
      )
      (setq dc (list spd c1y))
    )
  )
  (if (= c1x c2x)
    (progn
      (setq sp (entsel "请选择竖直方向的定位基准线\n"))
      (setq fx (getpoint "请选择在所选直线的哪一侧"))
      (setq fxx (cadr fx))
      (setq sp1 (car sp))
      (setq sp2 (cadr sp))
      (setq spx (car sp2))
      (setq spy (cadr sp2))
      (setq sp3 (entget sp1))
      (setq sp4 (assoc 10 sp3))
      (setq sp5 (cadr (cdr sp4)))
      (setq sc (getint "请输入竖直距离\n"))
      (cond
        ((> fxx spy) (setq spd (+ sp5 sc)))
        ((< fxx spy) (setq spd (- sp5 sc)))
      )
      (setq dc (list c1x spd))
    )
  )
)
(defun StrUnParse (Lst Delimiter / return)
  (setq return "")
  (foreach str Lst
    (setq return (strcat return Delimiter str))
  ) ;_ end of foreach
  (substr return 2)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-7-23 21:14:34 | 显示全部楼层
我是初学,冒昧提垫建议,你可把程序在LISP管理器调试,然后用管理器检测工具检测出错点,这样改比较方便!(我觉得!因我就这样该的!)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-24 09:06:46 | 显示全部楼层
怎么在管理器中调试呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 208个

财富等级: 日进斗金

发表于 2005-7-24 09:46:03 | 显示全部楼层
初学就写这么复杂的lsp程序。不简单。楼主也是学水的?同行。有机会交流交流。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-24 09:49:37 | 显示全部楼层
抱歉,没有程序中所需的dcl文件,没办法调试,只好靠你自己了
在程序中设置断点,然后再cad中运行此程序,一步步调试可以找出问题所在
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-24 09:58:48 | 显示全部楼层
谢谢大家,我的程序有时能够正常运行,可运行一段时间后就出问题了,设置断点运行,又是好用的,可整体一运行又出错了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-25 21:59:29 | 显示全部楼层
初学写这么多不容易了,不过这个程序确实可以减肥的,阅读调试都方便。
可以到VisualLisp里面调试。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-26 00:11:49 | 显示全部楼层
应说明程序功能并上载dcl文件!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 11:07 , Processed in 0.237626 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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