程泽明,唐露露,秦 凯,姚 礼,符纯华
(四川理工学院机械工程学院,四川自贡 643000)
AutoCAD功能强大,在机械制造、船舶、汽车、航空航天等行业应用的非常广泛,给设计带来很大的方便。但其交互绘图命令绘图仍然绘图效率不高。针对具体成熟产品的CAD二次开发是CAD应用取得实效的关键环节[1]。
在绘制装配图中,明细表是必不可少的内容,同时也是报表统计、汇总输出等工作的基本依据。明细表的本质就是图号(零件)清单。在CAD图纸中,装配图明细表一般是在图纸绘制结束后,根据装配图所包含零件的各项内容,按顺序逐行手工填入明细表中。在AutoCAD软件中,如果直接使用AutoCAD绘图命令来绘制明细表并填写明细表的内容,则相当繁琐,且效率极低。虽然也有不少对明细表填写的开发文章,但对成套产品开发的机械明细表却不适用,原因是必须先构造明细表所有详尽具体内容的文本或EX⁃CELL文件。由于产品不同,导致装配图内容不同,也导致了机械明细表内容的不确定性。使用命令手工填入输入时极易出错,效率低,也不能保证数据的统一性,导致汇总处理的难度就更大了。由于二次开发是CAD应用取得实效的关键环节,因此本文提出自动填写机械明细表的参数化设计,以提高程序设计质量与产品开发效率。
一般来讲,产品图纸由装配图、部件图和零件图组成。装配图包括图形、技术要求、标题栏、明细栏等几大部分。明细栏依次列出零件序号、代号、名称、数量、材料、备注等内容,在实际产品的开发中,明细表往往由GB件、非标件组成,按照传统的填写方式已不能满足产品开发的要求。设计开发思路是:自动构造明细表列表[2]后,循环逐个取出表中的元素填写明细表。关键技术是构造明细表列表,其构造方法如图1所示。
对标准件如螺母、螺栓、垫圈等明细表的填写,先建立数据库,通过的国标代号(例"GB/T6170-2000")和螺母直径(d)为查询条件,并读取标准件相关数据,主要是单重。总重根据数量自动计算。
对于非标准件,先将非标件标题栏相关数据写入数据库[3],作为读取数据的数据源。如图2所示。然后通过图样代号和数量,到数据库中找到符合条件的记录并读取非标准件相关数据(如材料、重量等)构造非标件明细表列表。这是本工具的关键技术之一,其函数如下。运行本函数需要先连接数据库,VLISP[4]与数据库连接本文不再赘述。
图2 非标件相关数据存入数据库的截图
;=================================
;函数功能:提供图样代号和数量构造非标件的明细表列表。
;参数说明:secq——明细栏序
;tcode——图纸代号,如 5DB.075.002
;num----------数量
;demo----------备注
;使用方法:
;(GetBomList"3""5DB.750.002""8""demos")
;=================================
图1 生成明细表内容的方法
(defun GetBomList(secq tcode num demo/rValue rList sql weightAll)
(if (setq connObject(ado_connect))
(progn
(setq sql(strcat"select
partname,material,weight from SheetTitle where
tcode='"tcode"'")
);setq构造查询用SQL语句
(setq rList(ado_dosql connObject sql))
(ado_disconnect connObject)
;关闭数据库
);progn
);if
(if(>(length rList)1)
(progn
(setq rList(nth 1 rList))
(if(not(wcmatch num"*.*,*@*"))
;只为数字时计算
(setq weightAll(rtos(*(atoi num)
(atof(nth 2 rList)))))
(setq weightAll"")
);if
(setq rValue(list secq tcode
(nth 0 rList)
num(nth 1 rList)(nth 2 rList)
weightAll demo))
);progn
(setq rValue(list secq tcode""
num""""""demo))
);if
rValue
);defun
对给定图幅,标题栏位置确定(每幅图以(0,0)为左下角点),因此定义一个全局变量(pt_base_titlebar)为程序绘制明细表格作为基点即可。填写明细表填写流程图如图3所示。
通过构造如下程序所示bom表,运行函数
图3 填写明细表流程图
(write_list_DF bom),得到图4所示明细表内容。
(setq bom(list
(GetBomList"1"
(strcat"8DB.070."
MainPostCode".1")"1""")
(GetNutBom"2""GB/T6170-2000"
"螺母M20""20""16""")
(list"3"""(strcat"拉带绝缘1.5X160X"
(rtos L_LD 2 0))"4""绝缘纸板
100/00"(rtos weight_8 2 3)
(rtos(*weight_8 4)2 3)"")
(GetBomList"4"(strcat"5DB.023."
MainPostCode)"5"""))
);setq
自动填写明细表工具,经实际使用并结合用户习惯修改,使用效果良好,能较大幅度地提高绘图效率。尤其是对成套产品进行二次开发的明细表填写,只需局部修改构造明细表的列表即可,因而绘图效率更高。另外,本实用程序通用性强,可作为绘制装配图的一个模块,也可作为整套产品CAD的一个模块,也可作为单独的实用工具使用,具有较好的实际使用价值和推广意义。
[1]柳博,杨明忠,国顺生.基于关系型数据库的BOM设计查询策略[J].现代制造工程,2004(2):28-30.
[2]张志利.AutoCAD 2000定制与开发手册[M].武汉:华中理工大学出版社,1999.
[3]王宇虹,朱亦文,陈格,等.Access数据库系统开发从基础到实践[M].北京:电子工业出版社,2006.
[4]吴永进,林美樱.AutoCAD完全应用指南[M].北京:科学出版社,2009.