皇上快溜 发表于 2016-7-22 18:04:45

参数类型错误: numberp: (-3015.24 5208.54)

程序单独保存为一个.lsp文件时,每个程序都能稳定运行。将多个程序,约数十个,保存在一个.lsp文件内之后,部分程序运行失败。请问各位老大,这是什么原因造成的?
编辑时,是逐个将程序代码复制粘贴到记事本上面,先保存为.TXT,然后再改后缀为.lsp

http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 皇上快溜的微博

自贡黄明儒 发表于 2016-7-22 19:06:39

多半是没有设置好局部变量,冲突了

皇上快溜 发表于 2016-7-22 21:46:52

自贡黄明儒 发表于 2016-7-22 19:06 static/image/common/back.gif
多半是没有设置好局部变量,冲突了

你好,谢谢你的回复。请问,具体来讲,哪些细节容易引发冲突?
,,,非常奇怪,出过问题的某个程序,二次开机之后,又能如常运行,不知它什么时候,又会出状况

maiko 发表于 2016-7-22 21:55:20

肯定是多个程序共用一个变量,你看看这个程序能运行,那个程序肯定又不能运行了

皇上快溜 发表于 2016-7-22 22:12:27

maiko 发表于 2016-7-22 21:55 static/image/common/back.gif
肯定是多个程序共用一个变量,你看看这个程序能运行,那个程序肯定又不能运行了

谢谢,我一个个排查,有问题再向你请教

皇上快溜 发表于 2016-7-25 23:51:45

自贡黄明儒 发表于 2016-7-22 19:06 static/image/common/back.gif
多半是没有设置好局部变量,冲突了

你好,请教你一个问题。
好几个程序, 都是每每运行到 command "text"时,就报:出现异常0xc0000005错误(访问冲突),CAD崩溃,被迫退出。
这几个程序,单独一个程序存一个lsp文件时都能正常运行,和别的几十个程序共存一个lsp文件时,就出现上面的问题,搞了好久都没办法弄好

皇上快溜 发表于 2016-7-26 00:06:55

(command "text" p0 (getvar "dimtxt") "0" (strcat "重量: "(rtos ss 2 4)" (kg)"))
----------------------------------------------------------------------------------------------------
(command "text" "c" p1 h "0" (rtos (* 0.000000001 md (* AA (* pi 2 dist))) 2 1) "")
----------------------------------------------------------------------------------------------------------
(command "text" pt 2.5 0 (strcat "使用率=" (rtos user 2) "%"))
----------------------------------------------------------------------------------------------------
   (prompt "文本写入点:")
   (setq p0 (getpoint))
        (setq dz 1)

   (if(/= xim "")
             (progn
        (command "text" (polar p0 (* pi 1.5) (* dz(+ (* (getvar "dimtxt") 0.8) (getvar "dimtxt")))) (getvar "dimtxt") "0" xim)
        (setq dz (1+ dz))
             )
   )
   (if(/= (strcat "单价:"(rtos UNIPRS)" 元") "")
             (progn
        (command "text" (polar p0 (* pi 1.5) (* dz(+ (* (getvar "dimtxt") 0.8) (getvar "dimtxt")))) (getvar "dimtxt") "0" (strcat "单价:"(rtos UNIPRS)" 元"))
        (setq dz (1+ dz))
             )
   )
   (if(/= (strcat "厚度:"(rtos thick)" mm") "")
             (progn
        (command "text" (polar p0 (* pi 1.5) (* dz(+ (* (getvar "dimtxt") 0.8) (getvar "dimtxt")))) (getvar "dimtxt") "0" (strcat "厚度:"(rtos thick)" mm"))
        (setq dz (1+ dz))
             )
   )
-----------------------------------------------------------------------------
请大家帮我看看,上面是四个程序(command "text"部分。出故障,每每运行到 command "text"时,就报:出现异常0xc0000005错误(访问冲突),CAD崩溃,被迫退出。

皇上快溜 发表于 2016-7-26 14:19:42

问题已找出,程序将"text"命令指向text层,而图形文件未建立text层,以致出错,谢谢楼上二位关心

llsheng_73 发表于 2016-7-30 16:26:38

参数类型错误: numberp: (-3015.24 5208.54)是说程序运行到某个时候,需要一个数值型参数,但给定的参数值却是一个坐标点
你可以试着把所有用到的变量(参数除外)全部设为局部变量,一般说来问题就能解决
当然,全部设为局部变量后,可能会出现参数类型错误: xxxxxx:nil,也就是需要值的地方,参数为nil,那么需要把这个变量作为参数进行值传递。。。
程序算法是决定程序能否满足要求的关键,良好的书写习惯可能使程序稳定性增加和维护代价降低,就你所说的问题而言,明显是程序稳定性不够,主要原因是不同程序用到了部分同名全局变量(cad的lisp里边,全局变量至少在全图范围有效而不仅仅是指某个程序文件),使得程序互相干扰
简单来说,程序设计不只是算法设计,变量设计也同样重要。
当然,一般小程序开发过程中,基本不会着重进行变量设计,我也是随时需要一个变量随兴起个变量名,但是否真正需要另起变量名,我一般会看下前边某个变量是不是没必要存在了,如果是,那么直接用这个变量名,这样就不至于每进行一步计算出现一个变量名而导致最后变量名一大堆
同时,计算过程涉及到公式之类的,最好直接按公式写完,如非必要一般不要对公式进行步骤分解,那样会造成检查困难
经上纯属个人观点和个人习惯

皇上快溜 发表于 2016-7-30 17:23:53

llsheng_73 发表于 2016-7-30 16:26 static/image/common/back.gif
参数类型错误: numberp: (-3015.24 5208.54)是说程序运行到某个时候,需要一个数值型参数,但给定的参数值却 ...

谢谢llsheng_73,码这么多字,真是难为你了。涉及的技术概念,好些我多还没法理解,惭愧,备案下来日后借鉴,希望以后还能得到你的指教,谢谢你
页: [1]
查看完整版本: 参数类型错误: numberp: (-3015.24 5208.54)