资源描述
xxxxxxx 本科生毕业设计(论文) 学院(系): 机电工程系 专 业: 机械设计制造及其自动化 学 生: xxxxx 指导教师: xxxxx 完成日期 2011 年 5 月 xxxxxxxx(论文)陆德公司电气图纸BOM校对软件开发Development of Proofreading Electric Drawing BOM Software for Roady Road Inc.总 计: 35 页插 图: 16 幅xxxxxxxxx(论文)陆德公司电气图纸BOM校对软件开发 Development of Proofreading Electric Drawing BOM Software for Roady Road Inc.学 院(系): 机电工程系 专 业: 机械设计制造及其自动化 学 生 姓 名: xxxx 学 号: xxxx 指 导 教 师: xxxxxxx 评 阅 教 师: xxxxxxxx 完 成 日 期: 2011年5月 xxxxxxxNanyang Institute of Technology 陆德公司电气图纸BOM校对软件开发机械设计制造及其自动化 xxxx【摘 要】图纸校对是企业在产品研发后期的重要环节之一,是产品在生产制造过程中不出差错顺利进行的基础保障。图纸校对完成后生成BOM也是产品生产采购、车间领料和成本核算的基础数据。本课题软件能够较好解决陆德公司在电气图纸BOM命名不规范、不一致等技术问题。通过本软件可实现对电气图纸BOM的批量读取、自动校对和产品BOM的格式化导出,完全取代人工整理产品BOM和逐一校对的工作模式,大大提高了工作效率,减少了错误和遗漏。【关键字】图纸校对;数据库;BOM;CAD二次开发Development of Proofreading Electric Drawing BOM Software for Roady Road Inc.Machine Design, Manufacturing and Automation Major SUN Guang-linAbstract: Drawings proofreading is one of an important part of later period during product research and development in enterprise. It is also the basic guarantee for product manufacturing smoothly with no mistakes. The generation product BOM after proofreading is also the basic data for production purchasing,material restrictions in workshop and cost accounting in future.This software can solve some technical problems well, such as non-standard and in consistent naming in electrical drawings BOM. The software can realize batch read BOM of electrical drawings, proofread and export report of product BOM automatically, which replace the manual operation mode completely. By this software, enterprise can improve efficiency greatly, reduce proofreading errors and missings.Key words: DrawingProofreading; Database; BOM; Secondary Development of CAD目 录1 引 言11.1 概述11.2 图纸校对的现状分析11.3 图纸校对的目的及意义11.4 课题研究内容和目标22 陆德公司电气图纸BOM校对开发相关技术22.1 计算机编程技术22.2 数据库接口技术22.2.1 在VB中使用ADO访问数据库32.2.2 使用ADO技术访问数据库的基本流程32.3 AutoCAD的ActiveX Automation技术42.3.1 ActiveX Automation 技术简介42.3.2 在VB中操纵AutoCAD对象的方法52.4 Excel VBA技术62.4.1 在VB中操纵Excel对象的方法63 基于AutoCAD的电气图纸校对的研究与实现83.1 系统总体设计83.2 系统主要功能模块的实现83.3 软件的设计93.3.1 利用Visual Basic获取AutoCAD控制句柄93.3.2 电气图纸信息自动校对的实现94 软件的设计与实现104.1 系统软硬件需求114.1.1 硬件需求114.1.2 软件需求114.2系统功能的模块化设计及实现114.3 软件操作流程114.4 各流程操作介绍124.4.1 用户登录124.4.2 图纸提取134.4.3 图纸信息自动校对164.4.4 查看校对错误明细174.4.5 生成电气总明细18结束语21参考文献21附录22致谢30编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第31页 共36页1 引 言1.1 概述电气图纸校对是离散型制造企业产品研发后期的必需环节, 主要完成对产品全部设计图纸内文字信息输入规范性和一致性的核对。目前绝大多数企业对图纸的后期校对仍然处于人工手动逐一审查模式,不仅效率低下, 而且容易出现遗漏等错误, 存在大量重复性劳动, 还需要有一定经验的设计人员来进行校对图纸, 劳神费力, 严重影响了新产品开发效率,对于生产复杂结构产品的企业尤为明显。本文阐述了进行电气图纸校对的内容和步骤, 以及如何根据图纸信息正确构建产品结构明细, 进行图纸标题栏及明细栏信息的计算机辅助校对, 同时能够快速生成符合企业格式化要求的产品综合明细、分类明细和汇总明细等。1.2 图纸校对的现状分析通过文献检索,发现有如何读取AutoCAD图纸信息的文章,但仅阐述了一种普通思路,多数以遍历全部图纸图形元素的方法检索图纸文字信息,此类方法不仅效率低下,而且容易出错。本作品综合分析了企业图纸的一般特点,通过对企业图纸图幅大小、绘图比例的概率分析,得出适合企业的框选方法,能够快速的找到所有图纸信息,根据测试对90%的图纸可一次性选定所要信息,如此可极大的提高软件的读图效率。通过网上检索,也存在极少数的自动读图构建产品BOM软件,但其通用性不强,无法真正应用到企业,并且读取速度慢,容易出错,不能按照企业的个性需求导出产品BOM。本作品软件适用于企业图纸标题栏和明细表为带有属性的图块,系统提供了简单的读图参数配置,只要企业产品图纸采用AutoCAD绘图软件绘制,即可使用本软件。 通过对目前市面上的PDM系统进行分析,发现少部分的PDM系统已经具有图纸自动校对功能,但通常比较简单,无法进行具体功能定制。根据实际调查,发现内地80%的中小企业还没有实施PDM系统,也预示着此类企业的图纸校对仍处于手工处理阶段。本作品软件能够实现对图纸信息的自动校对,并将校对结果以报表的形式提交给用户,同时根据企业实际需求进行定制,为企业的ERP系统提供数据接口,从一定程度上实现了ERP与设计资源的有效集成。1.3 图纸校对的目的及意义图纸校对是企业在产品研发后期的重要环节之一,在产品的设计与开发后期需要完成对产品各级明细及其零部件标题栏信息的一致性、输入规范性等进行一一校对。目前多数企业均由人工逐一校对,工作量大,通常完成一套大型复杂产品的校对需要3天时间,不但工作效率低,而且容易遗漏、出错。陆德公司的产品主要有机械设计部分和电气控制部分组成,其电气控制图纸均由AutoCAD进行绘制,但其绘图规范和机械部分图纸不一致,而且图纸明细栏中有很多的电气元器件,如果输入错误,则在生产装配中就会出现问题,因此专门开发一套针对陆德公司电气控制图纸的校对软件显得很有必要,不但可以极大地提高工作效率,而且避免了校对错误、遗漏等现象的出现。1.4 课题研究内容和目标研究内容:分析基于AutoCAD绘图软件绘制的DWG图形文件的结构及格式,结合AutoCAD VBA开发语言和ActiveX Automation技术,如何正确、快速读取产品图纸基本信息。研究目标:自动读取产品电气图纸信息并构建产品BOM,自动提取图纸里的内容和信息,校对产品图纸输入信息的正确性,根据物料分类自动汇总并导出各类BOM,避免人工审图的繁琐、易出错等弊端,提高产品研发工作效率,避免重复性劳动。2 陆德公司电气图纸BOM校对开发相关技术本课题利用计算机编程技术、数据库技术、AutoCAD的ActiveX Automation技术和Office VBA编程技术,结合企业实际需求进行开发。因目前市场内最流行、应用最广泛的绘图设计软件是AutoCAD系统,而AutoCAD绘图系统内嵌有功能强大的VBA开发语言,能够与Visual Basic开发平台进行紧密集成,故本软件系统前台开发语言采用Visual Basic。2.1 计算机编程技术本课题采用Visual Basic 6.0开发语言。Visual Basic作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充等特点。因此它越来越多地用作大型公司数据库和客户机-服务器程序的前台开发工具,与后端Access等数据库相结合,提供一个高性能的客户机服务器系统解决方案1。2.2 数据库接口技术VB作为一种强大的开发工具,可以很方便地访问数据库2。VB可用的数据访问接口有3种,即ADO、RDO和DAO。而ADO则是DAO和RDO的后继产物,正在逐渐代替其他数据访且容易使用的高效的数据访问接口,在这种接口中,提供了两种数据库访问方式:一种是使用ADO数据控件,通过对数据控件的绑定来访问数据库中数据;另一种则是使用ADO对象模型,通过对Connection、Command、Parameter、Error、Recordset、Field和Property等7个对象的定义和编写代码来实现对数据的访问。这些技术各有特点,它们提供了简单、灵活、访问速度快、可扩展性好的开发技术。数据访问接口是一个对象模型,它代表了访问数据的全过程。使用Visual Basic,可以在任何应用程序中通过编程控制连接、语句生成器和供使用的返回数据。2.2.1 在VB中使用ADO访问数据库在VB中可以使用ADO Data控件来快速建立数据绑定控件和数据提供者之间的连接。数据绑定控件是任何具有数据源属性的控件,数据提供者则是任何符合OLEDB规范的数据源。在实现数据访问机制时,我们一般只需设定好ADO数据控件与数据相关的属性、方法和事件,无需编写任何程序代码就可以实现数据访问操作。通常先将Connection String属性设置为一个有效的连接字符串,然后将Record Source属性设置为一个适合于数据库管理者的语句来创建一个连接。也可以将Connection String属性设置为定义连接的文件名。该文件是由“数据链接”对话框产生的,该对话框可以通过单击“属性”窗口中的Connection String,然后单击“生成”或者选择时打开。再将数据绑定控件如Data Grid、Data Combo或Data List控件的Data Source属性设置的ADO Data控件,把ADO Data控件连接到该数据绑定控件3。2.2.2 使用ADO技术访问数据库的基本流程首先利用Access建立一个数据库data.mdb,并分别建立图纸信息表,BOM表,Material(材料表)等数据表。1通过ADO Data控件非编程来访问数据库(1)在工具箱中添加ADO Data控件。操作为:“工程”“部件” “Microsoft ADO Data Control”。(2)在窗体上放置一个ADO Data控件,名称默认为Adodb。(3) 设置Adodb.ConnectionString属性值为“DSN=data”。其中“data”为指向data.mdb数据库的数据源名称,可通过控制面版预先设定。(4)设置Adodb.RecordSource项,选择命令类型为“2-adCmdTable”,并在表名项中选择“jsb”。(5) 将ADO Data控件与Text文本框绑定。放置文本框控件于窗体,将其Data Source属性值设置Adodb,Data Field属性值设为表中一字段。运行程序,可用ADO Data控件的方向箭头来浏览。除了应用上述引入一组数据绑定控件显示数据内容之外,还可以使用数据网格控件Data Grid来显示多个字段内容。步骤为:(1) 先通过“工程” “部件” “Microsoft Data Grid Control”引入数据网格控件并在窗体中绘制一个Data Grid控件。(2) 把Data Grid绑定到ADO数据控件上。设置Data Source属性值为:Adodb。(3) 把数据库字段加入到Data Grid控件上。鼠标右击Data Grid控件,选择检索字段,则当前数据表的字段全部导入到数据网格控件上。2. 用ADO对象库进行编程访问(1)引用ADO对象库。操作为:“工程” “引用” “Microsoft ActiveX Data Objects 2.1 Library”。(2)用代码打开数据源,建立记录集,将记录集中的记录内容打印出来。Dim conn As Connection Dim rs As Recordset Dim sql As StringSet conn = CreateObject(adodb.connection)conn.Open provider=msdasql;database=jxgl;data source=jxgldsn 打开数据源sql = select * from BOMInfoSet rs = conn.Execute(sql) 建立记录集Do While Not rs.EOF For i = 0 To rs.Fields.Count = 1 Print rs.Fields(i) 输出BOM表中各字段 Next irs.MoveNextPrintLoop2.3 AutoCAD的ActiveX Automation技术随着Microsoft公司在AutoCAD 2000以上版本中将ActivcX技术融入开发工具中,利用AutoCAD ActiveX技术可直接实现对AutoCAD绘图软件的控制、及自动计算、校核程序与绘图程序的紧密结合,不必再经过中间数据文件进行连接。使用ActiveX技术的连接模式。这种方式不但运行速度快,使用方便,而且自动化程度较高4。AutoCAD作为一种具有高度开放结构的CAD平台软件,它提供了强大的二次开发环境。从AutoCAD R14版开始,AutoCAD引入了ActiveX Automation技术。由于ActiveX技术是一种完全面向对象的技术,所以许多面向对象化编程的语言和应用程序,可以通过ActiveX与AutoCAD进行通信,并操纵AutoCAD的许多功能5。2.3.1 ActiveX Automation 技术简介ActiveX Automation 是Microsoft 制定的一套开放性标准,它为应用程序与外界之间提供一种接口,该接口由一组对象构成,这些对象封装了应用程序的所有功能,利用对象固有的属性和方法,几乎所有面向对象的编程语言都能访问或操控相应应用程序。AutoCAD 中的ActiveX Automation 是微软公司ActiveX 规范的具体应用。它通过基于ActiveX 的自动化对象,为其他应用程序提供了访问AutoCAD 内部功能的方法,是AutoCAD 最新的开发接口。在运行时应用程序通过对AutoCAD 提供的各级对象操作并控制AutoCAD 完成指定工作。理解AutoCAD 的对象模型是对其编程的基础。它是一种树型结构模型,是由一系列的对象,按一定层次组成的一种对象结构,每一个对象代表AutoCAD 中的一个功能,这些对象以方法和属性的方式封装到ActiveX 对象中,通过调用方法可以实现相应。2.3.2 在VB中操纵AutoCAD对象的方法使用ActiveX控件提供的对象与操作其它对象的方法相似,即首先将一个对象引用赋值给变量,然后编写使用对象的方法、属性和事件的代码。AutoCAD对象在AutoCAD ActiveX中是开放的,在VB中可以直接操纵,具体方法如下6: 在VB工程中引用AutoCAD类型库:在工程(Project)菜单中选择引用(References)选项,打开引用对话框,然后从中选择“AutoCAD 2007 Type Library”类型库,如图1所示。 图1 在工程中引用AutoCAD类型库在程序代码中设置AutoCAD程序对象和文档对象。 通过AutoCAD ActiveX对象、属性和方法,在AutoCAD图形文件中对对象进行处理。在Visual Basic内新建一个模块,在模块窗口插入如下代码:Public acadApp As AcadApplicationPublic Function ConCAD() As Boolean 用于打开AutoCADOn Error Resume NextConCAD = False:Err.Clear如果目前系统中已经打开AutoCAD绘图软件,则直接获取控制句柄Set acadApp2k = GetObject(, AutoCAD.Application)If Err Then Err.Clear Set acadApp = CreateObject(AutoCAD.Application)End IfIf acadApp Is Nothing Then MsgBox 启动AutoCAD失败。, vbOKOnly, 错误提示 ConCAD = FalseElse acadApp.Visible = True 请务必将物件Visible属性设为true ConCAD = TrueEnd IfEnd Function通过调用ConCAD函数可获得AutoCAD绘图软件的控制句柄。2.4 Excel VBA技术本课题研究软件利用Excel VBA技术将各类产品BOM数据按照企业规范标准进行导出,为后续的文件分发提供给出数据。2.4.1 在VB中操纵Excel对象的方法使用ActiveX控件提供的对象与操作其它对象的方法相似,即首先将Excel对象引用赋值给变量,然后编写使用对象的方法、属性和事件的代码。具体方法如下: 首先在VB工程中引用Excel类型库:在VB的“工程”菜单中选择“引用”选项,打开引用对话框,然后从中选择“Microsoft Excel 11.0 Object Library”类型库,如图2所示。 图2 在工程中引用Excel类型库在Visual Basic内打开公共模块,在程序代码中设置Excel程序对象,在模块窗口插入如下代码:Public excelApp As Excel.ApplicationPublic Function ConExcel() As BooleanOn Error Resume NextIf excelApp Is Nothing Then Set excelApp = GetObject(, ConExcelStr) If Err Then Err.Clear Set excelApp = New Excel.Application If Err Then MsgBox Err.Description Exit Function End If End IfEnd IfIf excelApp Is Nothing Then ConExcel = False MsgBox 连接Excel失败。, vbOKOnly, 错误提示Else excelApp.WindowState = 2 excelApp.Visible = False ConExcel = TrueEnd IfEnd Function通过调用ConExcel函数可获得Excel软件的控制句柄。3 基于AutoCAD的电气图纸校对的研究与实现图纸校对是离散型制造企业产品研发后期的必需环节, 主要完成对产品全部设计图纸内文字信息输入规范性和一致性的核对。目前绝大多数企业对图纸的后期校对仍然处于人工手动逐一审查模式,不仅效率低下, 而且容易出现遗漏等错误, 存在大量重复性劳动, 还需要有一定经验的设计人员来进行校对图纸, 劳神费力, 严重影响了新产品开发效率,对于生产复杂结构产品的企业尤为明显。本文阐述了进行图纸校对的内容和步骤, 以及如何根据图纸信息正确构建产品结构明细, 进行图纸标题栏及明细栏信息的计算机辅助校对, 同时能够快速生成符合企业格式化要求的产品综合明细、分类明细和汇总明细。3.1 系统总体设计在图纸校对之前, 首先需要将图纸内文字信息自动读取出来并写入数据库, 根据图纸标题栏图纸代号为明细栏内各零部件父图号的装配关系, 可正确建立产品明细结构树。然后建立企业标注件库、外购件库、通用件库和材料库, 并以此为进行图纸校对的参照标准, 根据进行校对零部件的不同分类, 通过代号、名称、材料等关键字到相应库中进行检索,如果检索到记录则判定为标准, 否则判定当前明细项输入有误, 并将校对错误信息写入数据库。对产品全部图纸校对完成之后, 系统自动生成校对错误明细表, 查看各项错误详细信息, 用户可便捷的查到产生错误的装配图或子图信息。如果图纸校对后没有发现错误, 系统根据各明细项分类关键字自动生成产品综合明细、分类明细和汇总明细, 并以电子表格的形式进行格式化导出。3.2 系统主要功能模块的实现本软件系统主要分7个功能模块, 首先由软件自动批量读取产品图纸信息, 并正确构建产品结构明细同时将图纸明细信息写入数据库。然后通过产品图纸代号以递归算法由上至下对各产品明细项进行逐一校对, 根据校对错误结果修改产品错误的图纸内容。待图纸校对全部无误后, 自动生成产品综合明细及分类明细表, 并以电子表格的形式进行格式化导出。同时, 为了增加软件的通用性, 软件具有校对信息参照库管理的功能, 分别对各类参照库及材料库进行便捷的管理; 另外软件还有系统参数配置功能, 通过参数配置, 可将软件方便地移植到其他企业使用, 增加软件的通用性7。3.3 软件的设计采用Visual Basic6.0 为前台开发语言, 融合数据库技术、AutoCAD 的ActiveX Automation 技术和Office VBA 编程技术;数据库为SQL Server2000, 采用ADO数据库连接技术。深入分析基于AutoCAD绘图软件绘制的DWG 图形文件的结构特点, 结合AutoCAD VBA 开发语言, 实现对图纸信息的自动提取和校对8。3.3.1 利用Visual Basic获取AutoCAD控制句柄 要在VB前台控制AutoCAD 绘图软件, 首先要在VB 工程中添加对AutoCAD对象库的引用。选择VB主菜单“工程引用”, 调出“引用”对话框,在应用列表中选择 AutoCAD2000 Object Library。然后在VB 中声明一个全局变量acadApp, 程序代码如下:Public acadApp As AutoCAD. AcadApplicationPublic Function ConCAD2K( ) As BooleanOn Error Resume NextErr. ClearSet acadApp = GetObject(AutoCAD. Application)If ErrThen Err.Clear: SetacadApp = CreateObject(AutoCAD.Application)If acadApp IsNothing ThenMsgBox 启动AutoCAD错误,vbOKOnly, 错误提示:ConCAD2K = False ElseConCAD2K = True : acadApp. Visible =True显示AutoCAD 窗口End IfEnd Function3.3.2 电气图纸信息自动校对的实现根据图纸信息自动校对流程图, 以及产品代号, 采用递归算法遍历产品全部明细项。根据各明细项分类分别到相应标准参照库内进行检索, 若检索失败, 说明当前明细项输入不规范, 并记录校对错误信息。关键代码如下:Private Sub SheHe(UpCode as String)Dim rs as New New ADODB. Recordsetsql =Select ID , 代号, 名称, 数量, 材料, 单重, 总重, 备注, 类型, 错误From CADBOM Where 父图号= & UpCode & rs.Open sql Conn, adOpenDynamic, adLockOptimisticFor i = 1 To rs. RecordCountIf rs( 类型! ) = 1 Then 为自制件, 校对明细项内容和相应零件图标题栏内容一致性sql =”Select代号, 图名, 材料, 数量, 重量From DWG Info Where 代号= & rs( 代号! ) & If rst.State Then rst.Closerst.Open sql Conn,adOpenDynamic,adLockOptimisticIf Not rst.EOF Then 比较名称、材料、数量、单重、总重If rs( 名称! ) rst( 图名! ) ThenErrMsg = ErrMsg & 名称与标题栏内名称 & rst( 图名! ) & 不一致End IfElseIf rs( 类型! ) = 2 Then为标准件sql = Select ID From 标准件where 代号= & rs( 代号) # and名称= & rs( 名称) & and 材料= & rs( 材料) & If rst State Then rst Close: rst Open sql Conn,adOpenForw ardOnly, adLockReadOnlyIf rst EOF ThenErrMsg = ErrMsg & 当前代号+名称+材料在标准件库内找不到!End IfElseIf rs( 类型! ) = 5 Then为通用件End IfIf rs( 部装! ) then call SheHe( rs( 代号! ) )rs. MoveNextNextEnd Sub4 软件的设计与实现软件实现了自动读取产品图纸并构建产品BOM,自动校对产品图纸信息,自动汇总各类BOM,决了企业产品研发中存在的半自动化现状,提高了新产品的研发效率。软件可应用于制造业等与图纸有关的企业使用。4.1 系统软硬件需求4.1.1 硬件需求 (1)PIII以上处理器(2)256MB(至少128MB)RAM(3)50MB以上可用硬盘空间4.1.2 软件需求 (1)Windows2000、XP、win7等操作系统(2)Microsoft Excel 2003或以上版本(3)AutoCAD R14或以上版本4.2系统功能的模块化设计及实现陆德公司BOM图通过企业材料库、标准件库、外购件库和通用件库实现对产品图纸文字信息的自动校对,科技图纸各零部件分类,可将产品全部零部件安不同分类进行导出,同时导出产品综合明细,系统功能框图如图3所示。 图3 系统功能框图4.3 软件操作流程首先登录软件,若密码错误则不能登录。进入程序后提取CAD电气图纸导入软件中,因CAD版本不高,故应提前打开CAD软件;其次读取图纸标题栏信息和明细栏的基本信息,并将其存入数据库,然后对CAD电气图中的信息进行校对。如果发现错误则及时提醒用户进行图纸修改。第三,对提取修改后的BOM进行汇总和当前汇总。第四,导出产品综合明细,根据产品零部件分类情况,分别导出产品综合明细和各分类明细。另外软件还提供了系统参数配置和参照库管理功能,通过简单的系统参数配置和参照库管理,可将该软件移植到其他企业进行使用。软件操作流程图如图4所示。图4 软件操作流程4.4 各流程操作介绍4.4.1 用户登录打开程序会出现用户登录对话框,没有正确的账号密码是不能登录程序的,如登陆成功则可修改用户的账号密码。如图5所示。图5 登录窗口4.4.2 图纸提取进入程序后会出现程序主界面,单击浏览找到CAD电气图纸的位置然后把电气图纸导入到软件中。如图6所示。图6 程序主界面产品信息选项卡如图7所示,因为电气图纸通常没有生成图纸,故系统无法获取当前产品的基本信息,如产品名称,产品图号等,而此类信息在导出产品BOM是需要引用,故需要进行人工输入或确认。图7 产品信息选项卡参数配置选项卡如图8所示,因为电气图纸明细栏图块属性与机械图纸明细栏图块属性参数配置不一致,故在此界面可进行参数配置。图8参数配置选项卡提取电气图纸的标题栏和明细栏,如图9所示,而图10为电气图纸的提取信息。图9 CAD电气图纸图10 图纸提取信息软件提取CAD电气图纸后的信息如图11所示。图11 电气图纸标题栏明细栏信息4.4.3 图纸信息自动校对将产品图纸标题栏和明细栏信息读取到数据库后, 首先进行标题栏的校对, 主要校对图纸标题栏中材料、数量、重量、绘图比例、设计、日期、校对等是否填写及正确性, 材料输入是否规范等。标题栏校对完成后, 可查看校对结果, 并将校对错误信息以报表的形式返回设计人员。标题栏校对完成后即可进行明细栏的校对, 校对流程如图12所示9。图12 图纸信息校对流程图4.4.4 查看校对错误明细单击主菜单的“构建BOM”“文件校对”菜单项调出“文件校对”窗体,校对结果如图13所示,在该窗体内可随时查看进行图纸校对过程中发生的错误信息,可对错误信息项进行删除或清除全部错误信息,也可将错误信息导出为电子表格文档。如图14所示。图13 错误报告 图14 电气元件库4.4.5 生成电气总明细在明细栏信息校对完成后,并且确定没有错误发生,可单击“生成总明细”,生成总明细窗口,如图15所示。图15 生成总明细窗口总明细的导出如图16所示,导出内容如下: 综合明细:根据产品总成及各级部装顺序,导出各级BOM信息.图16 产品电气综合明细结束语本文分析了陆德公司产品电气图纸进行自动校对的基本思路及实现方法, 并对如何提取带有属性的图块信息进行了详细阐述。根据企业对图纸进行校对的基本步骤和内容, 提出了采用计算机辅助校对图纸的实现方案和程序控制流程。该软件已在河南陆德筑机公司成功实施, 通过该软件的应用, 各设计人员完成对产品图纸的设计后即可采用该软件对其设计图纸进行校对, 无误后提交项目经理, 省去了项目经理对设计人员提交大量图纸的校对环节。另外其产品综合明细及分类明细的格式化导出功能完全取代了原来人工重复性复制、粘贴明细项的工作, 极大的提高了工作效率。参考文献 1 王为光. 三维机械模型和其对应工程图纸的智能化校对方法 J . 计算机程,2004( 11) :159- 161.2 杨燕. 图样标准化审查中的常见问题综述 J. 铁道技术监督, 2006( 3) : 7- 9.3 刘雪梅. AutoCAD 中非图形数据的处理方法 J. 机械设计与制造, 2001( 1): 27- 28.4 费维周. AutoCAD 的产品图纸文本信息采集系统设计. 铁路计算机与应用, 2005( 8) : 4- 6.5 杨兆忠. 如何搞好图纸审查工作 J . 甘肃科技, 2002( 6): 53- 54.6 Visual Basic程序开发案例解析 杨富国主编 清华大学出版社.7 AutoCAD VBA 从入门到精通 考汀汉姆著 电子工业出版社.8 Access 2003数据库教程 解圣庆编著 清华大学出版社.9 Excel VBA应用开发从基础到实践 马维峰 编著电子工业出版社.附录导入电子表格“完成”程序:根据导入模式进行导入Private Sub Cmd_Finish_Click()On Error GoTo Err_Cmd_Finish_ClickDim sql As StringDim rs As New ADODB.RecordsetDim i As IntegerDim AddNum As IntegerIf Me.ListvMaterial.ListItems.count 1 Then MsgBox 当前没有数据信息可以导入。, vbOKOnly, 数据导入: Exit Sub判断要导入的各列标题是否正确If Me.ListvMaterial.ColumnHeaders(1).Text 分类号 Then MsgBox 要导入的电子表格第1行第1列必须为“分类号”: Exit SubIf Me.ListvMaterial.ColumnHeaders(2).Text 型号规格 Then MsgBox 要导入的电子表格第1行第2列必须为“型号规格”: Exit SubIf Me.ListvMaterial.ColumnHeaders(3).Text 牌号 Then MsgBox 要导入的电子表格第1行第3列必须为“牌号”: Exit SubIf Me.ListvMaterial.ColumnHeaders(4).Text 规格 Then MsgBox 要导入的电子表格第1行第4列必须为“规格”: Exit SubIf Me.ListvMaterial.ColumnHeaders(5).Text 理论重量 Then MsgBox 要导入的电子表格第1行第5列必须为“理论重量”: Exit SubIf Me.ListvMaterial.ColumnHeaders(6).Text 备注 Then MsgBox 要导入的电子表格第1行第6列必须为“备注”: Exit SubAddNum = 0PBar1.Visible = TruePBar1.Max = Me.ListvMaterial.ListItems.countPBar1.Value = 0If Not Me.Option1.Value Then 覆盖方式 If MsgBox(覆盖方式将首先删除原材料库内全部记录,然后追加当前电子表格内材料到材料库。 & vbCrLf & 您确定要用覆盖方式追加材料吗?, vbYesNo + vbCritical + vbDefaultButton2, 特别提醒) = vbNo Then Exit Sub Conn.Execute Delete From 材料表 For i = 1 To Me.ListvMaterial.ListItems.count sql = Insert into 材料表(分类ID,型号规格,牌号,规格,理论重量,备注) values( sql = sql & Val(Me.ListvMaterial.ListItems(i).Text) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(1) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(2) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(3) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(4) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(5) & ) Conn.Execute sql AddNum = AddNum + 1 PBar1.Value = AddNum NextElse 追加方式 For i = 1 To Me.ListvMaterial.ListItems.count 查找是否已经存在 sql = Select * from 材料表 where 型号规格 like & Me.ListvMaterial.ListItems(i).SubItems(1) & If rs.State Then rs.Close rs.Open sql, Conn, adOpenForwardOnly, adLockReadOnly If rs.EOF Then sql = Insert into 材料表(分类ID,型号规格,牌号,规格,理论重量,备注) values( sql = sql & Val(Me.ListvMaterial.ListItems(i).Text) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(1) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(2) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(3) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(4) & , sql = sql & Me.ListvMaterial.ListItems(i).SubItems(5) & ) Conn.Execute sql AddNum = AddNum + 1 PBar1.Value = AddNum End If NextEnd IfPBar1.Visible = FalseMsgBox 数据导入完成。 & 成功导入记录: & AddNum & 条。, vbOKOnly, 信息导入Unload MeUnload Frm_InputExcelHelp2Exit SubErr_Cmd_Finish_Click: MsgBox Err.DescriptionEnd Sub提取“BOM汇总”程序:Private Sub Cmd_Sum1_Click()On Error GoTo Err_Cmd_Sum1_ClickDim rs As New ADODB.RecordsetDim CurrFuHao As StringDim CurrDanWei As StringDim CurrMemo As StringDim sql As StringDim Array1() As StringDim i As IntegerIf MsgBox(您确定要删除当前BOM汇总并对当前提取BOM进行汇总吗?, vbYesNo + vbQuestion, 汇总确认) = vbNo Then Exit Sub对电气BOM进行汇总(根据名称和规格型号),汇总数量Conn.Execute Delete From 电气BOM汇总DoEventsSleep 200sql = SELECT 名称, 规格型号, sum(数量) FROM 电气BOM GROUP BY 名称, 规格型号sql = Insert into 电气BOM汇总(名称, 规格型号,数量) & sqlConn.Execute sqlFor i = 1 To 20 DoEventsNextsql = SELECT ID,符号,名称,规格型号,单位,数量,备注 FROM 电气BOM汇总 order by 名称,规格型号,符号If rs.State Then rs.Closers.Open sql, Conn, adOpenForwardOnly, adLockReadOnlyWhile Not rs.EOF 提取每条汇总项对应的符号组合、单位、备注 If rst.State Then rst.Close sql = Select 符号,单位,备注 From 电气BOM where 名称= & rs(名称) & and 规格型号= & rs(规格型号) & rst.Open sql, Conn, adOpenForwardOnly, adLockReadOnly CurrFuHao = : CurrDanWei = : CurrMemo = While Not rst.EOF CurrFuHao = CurrFuHao & , & rst(符号) If rst(单位) Then CurrDanWei = rst(单位) If rst(备注) Then CurrMemo = rst(备注) rst.MoveNext Wend CurrFuHao = Right(CurrFuHao, Len(CurrFuHao) - 1) 更新数据库 CurrFuHao = Replace(CurrFuHao, , , 1, , vbTextCompare) CurrFuHao = Replace(CurrFuHao, ,, , 1, , vbTextCompare) 如果CurrFuHao内存在多个内容,则需进行排序 If InStr(1, CurrFuHao, , vbTextCompare) 0 Then Conn.Execute Delete from Temp For i = 1 To 20 DoEvents Next Array1 = Split(CurrFuHao, , , vbTextCompare) For i = LBound(Array1) To UBound(Array1) Conn.Execute Insert Into Temp values( & Array1(i) & ) Next i If rst.State Then rst.Close rst.Open Select KeyName From Temp where KeyName Order by KeyName sql = rst(KeyName): rst.MoveNext While Not rst.EOF sql
展开阅读全文