利用VBA自动提取CAD图纸明细表并进行数据库治理.docx
《利用VBA自动提取CAD图纸明细表并进行数据库治理.docx》由会员分享,可在线阅读,更多相关《利用VBA自动提取CAD图纸明细表并进行数据库治理.docx(15页珍藏版)》请在冰豆网上搜索。
利用VBA自动提取CAD图纸明细表并进行数据库治理
自动提取CAD图纸明细表及数据库管理的研究与实践
本文TAG:
2008-10-21
作者:
尹胜安 出处:
e-works 阅读:
1582 推荐:
0
本文详细介绍了如何开发应用AutoCAD来自动提取CAD图纸明细表及管理数据库,其切切实实的为设计工作节约了大量的时间。
制造企业工程技术人员在利用CAD进行产品设计时产生大量的DWG文件,每一个DWG文件中包括一张或数张图纸,设计的基础资料如:
工程项目、图号、设备(物料)名称、型号规格、材质、数量、重量、备注等等文本信息都记录在图纸题目栏明细表中。
设计工作完成后,工艺编制、本钱预算、物料消耗、物流采购、打算调度、车间生产等项治理业务都将依据图纸进行操作。
在通常的治理中,各业务部门往往通过人工的方式从CAD图纸或纸质图纸明细表中获取技术文件数据,再利用WORD或EXCEL进行手工二次录入,编制各自需要的明细表、通过汇总,生成相应的报表,并在此基础上产生工艺技术文件通俗简称为(工单),按不同的用途也有的称之为物料消耗单、物料清单BOM等。
这种单页面的文本制作方式尽管利用了电脑操作,但并未能摆脱繁重的手工录入和编辑工作,不能进行数据的自动处置,存在图纸与制表数据不一致、过失率高、工作量大、编制周期长、效率低下、查询繁琐、数据不能共享等多种短处。
因此,采纳自动提取CAD明细表与进行数据库治理的方式是克服以上短处提高企业设计、技术、治理效率和工作质量的有效途径。
AutoCAD是AutoDesk公司开发的通用CAD工作平台,在机械、造船、电子、汽车、测绘、建筑等许多行业中得到广泛的应用,其完善的图形绘制和编辑功能,多种接口文件,较强的数据交换能力,特别是开放的二次开发功能给用户提供了有力的技术支撑。
MicrosoftVBA(VisualBasicforApplication)是一个面向对象的可视化编程环境,它是由VisualBasic派生而来,AutoCAD内嵌的VBA提供了与VisualBasic相似的丰富的开发能力。
AutoCAD从R14版开始增加了作为ActiveXAutomation服务器应用程序的功能,这是一个功能强大的接口,它提供了一系列开放的对象,通过这些对象,VBA应用程序便可以对AutoCAD进行编程控制。
AutoCAD2000及以后版本其功能进一步扩充,强化了AutoCAD与数据库的通讯能力,能够使AutoCAD与其它应用程序(例如MicrosoftExcel、Word、Access)直接共享数据。
它是对AutoCAD进行二次开发的一种强有力的手段。
笔者以AutoCAD2004为背景,应用VBA开发工具和Access数据库技术成功地实现了自动提取CAD图纸明细表与进行数据库管理的研究目标并取得较好的实用效果。
一、自动提取AUTOCAD图纸明细表 工程技术图纸的右下角区域一般都布置着标题明细栏,记载着图形总体和明细的特征信息和基本技术要数,它是所有派生技术文件的信息源头和依据,CAD图纸继承了这个惯例。
我国国家技术标准GB/~2-1989对图纸标题明细栏的形式、内容、尺寸都作了具体规定。
虽然各企业图纸标题明细栏样式不尽相同,但大同小异,基本结构一致。
标题栏记载着图形的外部信息,明细栏记载着图形内在的详细要素和彼此的关联。
(图一)
明细栏由假设干明细行组成,明细行那么由各栏目组合。
自动提取AUTOCAD图纸明细表的信息其实质确实是针对明细行对各栏目进行提取数据的操作。
提取明细行数据的方式归纳起来,通常有坐标定位法和块行取值法两种:
1.坐标定位法:
即先点选起始明细行左下角坐标与末尾明细行右上角坐标所在的位置,确信提取数据的区域范围,对该区域范围内的所有实体对象进行一一扫描,读出文字对象(TEXT、MTEXT)的(X、Y)坐标属性和字符串属性。
通过文字对应坐标值的分析确信该文字在明细表中的位置,实现自动提取数据的操作。
这种方式对单图的DWG文件成效较好,但对多图的DWG文件和不规那么的题目明细栏操作起来就很复杂且取数的精度也较难操纵,有效成效不够理想,这种方式对以往题目栏未作标准要求的老图纸其作用显而易见。
2.块行取值法:
即利用AutoCAD块行属性特征来提取明细栏的信息。
在AutoCAD内部对象模型(AutoCADObjectModel)以层次结构组织起来,顶层可编程的Application对象启动AutoCAD应用程序的一个实例,通过Application对象定位到其它对象;第2层是Document和Preference对象,Document对象代表当前在AutoCAD应用程序窗口中打开并操作的一个AutoCAD图形文件,Preference对象对应于Preference对话框包括AutoCAD当前的配置信息;第3层是Document的集合对象,如ModelSpace,PaperSpace,Blocks对象等等,通过集合对象咱们就能够够访问当前图形中的所有实体。
块行取值法主要使用集合中Attribute和Block两个对象。
具体设计明细行时,没有格式限制,唯一要求就是必须使一个Attribute对象对应明细行中的一个栏目项,将对应明细行中所有栏目的Attribute对象组合在一起放入Block对象中,该Block对象就是用户定义的块行(明细行)。
将定义好的块行依次插入(复制)到图纸标题栏上方,组成图纸明细栏。
其操作如下:
·画图→块→概念属性(图二、图三) ·修改→对象→属性→块属性治理器(图四、图五)
图二
图三
图四
图五
图六
Attribute对象是具有交互功能的一种标签,含有3个配置项:
Tag,Value和Prompt。
Tag项是该Attribute对象的标志符,即Attribute对象的名字。
例如Tag设置为"件号",表示该Attribute对应明细栏中的"件号"栏目。
Value项表示Attribute中包括的真实数值,如某个具体的件号值为"001"。
在概念Attribute对象时,由于初始明细栏目中的具体内容不确信,那么该属性一样暂不输入数据。
待块行成立后其输入的数据就存储在Attribute对象中,如此通进程序访问Attribute对象的Value属性就能够够获取其中的数据。
Prompt项表示Attribute的提示信息,引导用户完成数据输入操作。
Block对象是一个容器对象,该Block包括多个Attribute对象。
在AutoCAD图形中插入明细行后,只要点击该行系统就会提示用户输入相应的值,并显示在图形题目明细栏中。
在开发中要注意区分Block和BlockRef(块引用对象)、Attribute和AttributeRef(属性引用对象)对象。
在AutoCAD图形中概念Block时,该Block对应Block对象。
将概念好的Block插入到另一个图形中,确实是基于Block的概念生成一个实例,该实例确实是BlockRef对象;一样,在AutoCAD图形中概念Attribute时,该Attribute对应Attribute对象。
将包括在Block中Attribute插入到另一个图形中,确实是基于Attribute的概念生成实例,实例对应的确实是AttributeRef对象。
因此在从AutoCAD图形的明细栏中自动提取治理信息时,涉及到的两种对象是BlockRef和AttributeRef对象. 将按上述方式概念好的标准明细栏插入到AutoCAD图形中后,通过ActiveXAutomation技术就能够将明细栏中的信息提掏出来。
在Document的集合对象中Modelspace对象是一个特殊最大的BLOCK,包括图纸中所有实体(图形对象),由于BLOCK、Attribute许诺嵌套,因此为搜索当前实体中的属性信息提供了方便。
大体算法上利用了递归挪用扫描当前图纸中的所有实体,通过实体的EntityType属性判定该实体是不是是BlockRef对象,若是是,那么判定该BlockRef对象中是不是包括AttributeRef对象。
若是包括那么获取AttributeRef对象的列表。
然后扫描此列表,通过TagString和TextString属性获取每一个AttributeRef对象中的数据,并同步写入ACCESS数据库;当扫描终止时,明细栏中所有AttributeRef对象中包括的信息都被提掏出来,自动在ACCESS数据库中即可形成初步的明细数据表。
在AUTOCAD中自动提取明细表数据解决方案思路如(图七)所示:
图七
二、VBA编程自动提取CAD图纸明细表及进行数据库治理的要点 本研究采纳AutoCAD2004设计图纸明细表,Access2003数据库进行治理。
系统设计可分为AutoCAD2004二次开发和数据库治理两个组成部份,利用VBA编程工具开发系统。
(一)AutoCAD2004二次开发 1.建立自定义菜单:
启动CAD→工具→自概念→编辑自概念文件→当前菜单→进入ACAD记事本→编辑→查找POP11→修改→保留 自定义菜单修改内容:
***POP11 **vba应用 ID_vba应用 [&vba应用] ID_提取图纸明细表 [->&提取图纸明细表] ID_保存为Excel表 [&保存为Excel表]^C^C_-vbarun ID_保存为Access表 [&保存为Access数据库]^C^C_-vbarun ***POP12
注释:
***POP11----第11项 **vba应用----别名 ID_vba应用[&vba应用]----显示"vba应用"菜单项 ID_提取图纸明细表[->&提取图纸明细表]----->表示有下级子菜单显示"提取图纸明细表" ID_保留为Excel表[&保留到Excel表]^C^C_-vbarun ----显示"保留到Excel表",并运行ACAD工程中的模块m_excel中的宏(进程)dtexcel (打开图纸时操作菜单自动提取明细表到指定的Excel表)。
ID_保留为Access表[&保留为Access数据库]^C^C_-vbarun ----显示"保存到Access表",并运行ACAD工程中的模块m_access中的宏(过程)dtaccess (打开图纸时操作菜单自动提取明细表到指定的Access表)。
将编辑后的文件COPY到C:
\Programfiles\autocad2004\support\目录中。
2.编制VBA提取图纸明细表数据程序:
(1)提取数据到Excel表的程序要点
2)提取数据到Access表的程序要点
(二)成立ACCESS数据库治理信息系统 1.建立数据库MDB应用文件:
为了统一、集中、有效地管理数据,便于系统调试、更新和升级,将程序和数据分别存放在两个MDB文件中,本例自动提取的CAD明细表数据存放在D:
\产品数据库。
2.设计信息治理系统:
本系统在ACCESS2003环境下应用VBA编程技术开发。
设计信息治理系统时要着重考虑以下问题:
⑴明细表序号(件号)编码的设计 明细表序号一方面反映图纸的顺序和相互关系,另一方面也是数据库管理中进行排序、分类、汇总的依据,因此序号的编码设计和处理尤为重要。
在一般通常情况下图纸明细表中的序号(件号)常采用1-999……数字逐一递增的顺序编码。
这种自然编码的优点是符合人的思维习惯、容易记忆、维护方便,但存在不能自动排序的缺点。
例如:
1、、2、、10、、99、100按升序排列,其结果是:
1、、10、、100、2、、99这是因为在计算机内上述数字是按ASCII值排序的。
这种不定长的编码方式给计算机查询、排序、分类、汇总等操作和制作报表带来很大麻烦,往往需要用手工的办法人为的加以调整,十分不便,工作效率也很低。
因此系统采用了新的编码方法,即三位定长编码。
图纸明细表序号(件号)采用三位编码逐级递增的方式。
例如:
装配图 001…002…010…099…100…999 一级序号 组部件图001001…002001…101001…101099 二级序号 零件图 001001001…002001001…1 三级序号 上述编码在实际操作中并无需记忆,只需在原来序号上加零即可。
实践证明这种定长逐级递增的编码方式对提取明细表的数据进行排序、分类、汇总操作和制作报表时带来极大的方便,不但大幅度提高系统自动化的能力,而且为应用数据库技术打下良好坚实的基础。
通过程序可将图纸明细表中的三位编码自动转换还原成报表上习惯常用的编码。
例如:
装配图 001…002…010…099…100…999 转换为 1…2…10…99…100…999 组部件图 001001…002001…101001…101099 转换为 1-1…2-1…101-1…101-99 零件图 001001001…002001001…1 转换为 1-1-1…2-1-1…101-99-1 ⑵自动修改数据库表结构 从AUTOCAD图纸明细表提取的数据保存在数据库表中只是解决了数据库数据源的问题,系统要完成数据逻辑的自动处理和满足功能模块运行、实现系统目标的需要还必须增加一些辅助字段,用以提高数据库管理信息系统的自动化程度。
因此系统设计时要解决自动修改数据库表结构增加字段的技术性问题。
例如:
本系统需要在数据库表中自动增加"消耗用量"、"物料分类"等字段。
如以下程序所示:
⑶理顺和标准CAD图纸明细表数据格式 传统CAD图纸明细表内的数据在大多数情况下反映了设计者个人的理解和自定义,应用数据库管理时就存在一个规范数据格式的问题,否则计算机无法正常处理提取的数据。
因此开发人员要设计一个规范的CAD图纸标题栏明细表,对表头各栏目给予明确的定义并对输入的格式提出具体的规定和要求,设计人员应统一引用图纸规范标题明细栏。
图纸标准题目明细栏=题目栏+明细栏 其中:
标题栏的格式内容与传统的格式内容一样,填写方法仍然采用单行文本方式;明细栏增加了型号规格一栏,将传统名称栏中的型号规格内容填写到此栏中。
明细栏的填写方法如前所述采用增强属性编辑器(图六)输入。
cad制图时必需标准、正确地填写明细栏各栏的内容。
例如:
A.件号栏:
采纳三位编码逐级递增的方式即:
装配图 001…010…099..100…999 一级件号 组部件图001001…002001…101001…101099 二级件号 零件图 001001001…002001001…1 三级件号 系统具有编码识别转换功能,在明细栏制作和汇总时系统会自动将上述代码转换成习惯编码。
例如:
1 板材 3 标准紧固件 1-1钢板δ=2 3-1螺栓M10×90 1-2钢板δ=3 3-2螺栓M10×100 2 型材 2-1扁钢50×16 ※件号栏必需按图纸的层次逻辑关系编制代码,不许诺空拦。
B.图号或标准号栏:
应准确使用图号,注意装配图、部件图、零件图之间的层次逻辑关系;按技术条件准确合理的选用技术标准。
※此栏能够是空栏。
C.名称栏:
仅填写物料的名称,此栏中不再填写物料的型号规格。
原则上必须保证一种物料对应一个名称,属于原材料或标准件、基础件的物料其名称按对应技术标准中的名称填写。
例:
钢板、无缝钢管、扁钢、槽钢、等边角钢、不等边角钢、工字钢、平垫圈、弹簧垫圈、螺栓、螺母等 以便于物料分类和查询,改变过去同一物料名称五花八门的混乱现象。
系统具备自动识别功能,输入名称更新后系统会自动定义物料分类字段:
例如:
名称:
钢板物料分类:
板材 名称:
扁钢物料分类:
型材 名称:
螺栓物料分类:
标准紧固件 名称:
法兰物料分类:
管道件 名称栏不允许空拦。
D.型号规格栏:
应正确表达物料型号规格的含义,标准书写型号规格的格式。
例如钢材形象符在实际使用中受中西文及取字方式的影响比较混乱,所有在图纸明细表中不再使用,但必须在名称栏内按设计手册的材料名称填写清楚。
例如:
名称:
钢板 型号规格:
δ=10(希腊小写字母δ及等号与数字连用,表示板材厚度) 名称:
槽钢 型号规格:
25b 名称:
螺栓 型号规格:
M16×60 名称:
扁钢 型号规格:
50×16(宽、数学乘号、厚)。
名称:
槽钢 型号规格:
25b(槽钢型号)表示,不要用形象字符如:
【[等。
名称:
不等边角钢型号规格:
50×32×4(长边×短边×边厚)表示,不要用形象字符例:
L、∠等。
名称:
无缝钢管 型号规格:
φ38×5(希腊小写字母φ、外径、数学乘号、壁厚)。
名称:
工字钢型号规格:
25b(工字钢型号)表示,不要用形象字符例:
Ι等。
名称:
圆钢 型号规格:
φ40(希腊小写字母φ、外径)表示。
名称:
螺栓 型号规格:
M20×100(大写M、外径、数学乘号、长度) 名称:
活接螺栓 型号规格:
M20×100(大写M、外径、数学乘号、长度) 名称:
细牙螺栓 型号规格:
M10×1(大写M、外径、数学乘号、螺距)长度L=××在备注栏填写。
※原那么上按技术标准书写,型号规格栏许诺空拦。
E.数量栏:
整数用阿拉伯数字表示,小数用阿拉伯数字加英文状态下"."表示。
例:
名称:
钢板型号规格:
δ=8 数量:
101.8KG
名称:
扁钢型号规格:
50×16数量:
10件
名称:
圆钢型号规格:
φ40 数量:
100KG ※数量栏数据必需唯一,不许诺显现两个以上数据,不许诺有非计算字符存在(如:
/*()等),数量栏不许诺空拦。
例:
以下数量的表述格式是错误的 名称:
钢板型号规格:
δ=8 数量:
109.8KG 名称:
扁钢型号规格:
50×16数量:
各10件 名称:
圆钢型号规格:
φ40 数量:
(100)KG F.材料栏:
保留过去图纸材料栏的书写方式。
本栏反映了物料结构性质、材质、性能级别、热处理、特殊工艺等。
例:
结构性质:
部装、部件、组件 材质:
Q235-A、Q235-B、65Mn 性能级别:
级、级、200HV等 ※系统已作了部份标准,有待进一步完善和扩充,操作者也可在技术标准中自行选用,材料栏许诺空拦。
G.单重栏:
整数用阿拉伯数字表示,小数用阿拉伯数字加英文状态下"."表示。
例:
名称:
钢板型号规格:
δ=8 单重:
101.8KG 名称:
扁钢型号规格:
50×16单重:
10 KG 名称:
圆钢型号规格:
φ40 单重:
100 KG ※单重栏数据必需唯一,不许诺显现两个以上数据,不许诺有非计算字符存在,单重栏许诺空拦。
例:
以下单重的表述格式是错误的 名称:
钢板型号规格:
δ=8 单重:
109.8KG 名称:
扁钢型号规格:
50×16单重:
各10 KG 名称:
圆钢型号规格:
φ40 单重:
(100) KG H.总重栏:
整数用阿拉伯数字表示,小数用阿拉伯数字加英文状态下"."表示。
例:
名称:
钢板型号规格:
δ=8 总重:
KG 名称:
扁钢型号规格:
50×16总重:
100 KG 名称:
圆钢型号规格:
φ40 总重:
2000 KG
※总重栏数据必需唯一,不许诺显现两个以上数据,不许诺有非计算字符存在,总重栏许诺空拦。
例:
以下总重的表述格式是错误的。
名称:
钢板型号规格:
δ=8 总重:
109.8KG 名称:
扁钢型号规格:
50×16总重:
各10 KG 名称:
圆钢型号规格:
φ40 总重:
(100) KG 名称:
组件型号规格:
总重:
/ I.备注栏:
在此栏中表达需要简单说明的事项或在其他栏无法表达的内容。
例:
名称:
钢板型号规格:
δ=16 总重:
955 KG 备注:
上板按2000板宽 名称:
扁钢型号规格:
50×16 总重:
100 KG 备注:
L=5688PCS 名称:
圆钢型号规格:
φ40 总重:
52 KG 备注:
拉杆L=29218PCS 名称:
钢管型号规格:
φ32×3 总重:
2 KG 备注:
接管L=1802PCS 名称:
钢管型号规格:
φ299×10 总重:
20.7KG 备注:
内筒体L=200 备注:
外协(配套标准件) ※备注栏许诺空拦。
开发人员在程序设计中要注意用空格处理空拦的NULL值,否则会引起取数程序中断,造成取数不完全的结果。
⑷采纳人性化的设计思路和方式技术 数据库管理功能模块应简明实用,采用人性化的设计思路尽可能的把需要记忆和重复操作的事情交给计算机去做。
系统的输入、查询、编辑应有联想功能,既考虑计算机程序的结构化又设法尊重人的工作习惯,两者巧妙地结合,在程序设计的技巧上采取一些有效措施,完全可以做到小软件解决大问题。
例如在系统中内嵌输入联动、指定位置插入、习惯编码转换、金属材料重量随机计算器、结构树、数据库自动压缩等程序。
⑸优化和标准CAD图纸明细表取数及工艺文件(简称工单)的业务流程
CAD图纸明细表取数及工艺文件制作涉及各项业务和多个部门,因此设计开发时必需从系统的角度全面的考虑问题,以最短的途径、最完善的功能、最可行的布局来安排业务流程。
参考例证如下:
三、终止语 笔者已经成功的完成了自动提取CAD明细表与数据库管理信息系统的研究与实践。
从CAD提取明细表后其数据一方面进入EXCEL,使用EXCEL手工制作工艺文件;另一方面可自动进入数据库系统按照程序制作工艺文件。
经测试:
在CPU内存1G的电脑上提取一套有350项明细表的图纸数据进入数据库只需5-8秒,整理数据8秒,从提取CAD数据到形成工艺明细编辑表及汇总表同步自动生成,前后总共不到半分钟(不含工艺制作时刻)。
估量加上