基于Solidworks的产品BOM生成系统开发_第1页
基于Solidworks的产品BOM生成系统开发_第2页
基于Solidworks的产品BOM生成系统开发_第3页
基于Solidworks的产品BOM生成系统开发_第4页
基于Solidworks的产品BOM生成系统开发_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南阳理工学院本科生毕业设计(论文)学院(系):机电工程系专业:机械设计制造及其自动化学生:xxxx指导教师:xxxxxxx完成日期2011年5月南阳理工学院本科生毕业设计(论文)基于Solidworks的产品BOM生成系统开发DevelopmentofProduct’sBOMGeneratingSystemBasedonSolidworks总计:31页表格:2个插图:32幅南阳理工学院本科毕业设计(论文)基于Solidworks的产品BOM生成系统开发DevelopmentofProduct’sBOMGeneratingSystemBasedonSolidworks学院(系):机电工程系专业:机械设计及其自动化学生姓名:xxxxxx学号:94107024指导教师(职称):陈永辉(讲师)评阅教师:王志奎(教授)完成日期:2011年5月南阳理工学院NanyangInstituteofTechnology基于Solidworks的产品BOM生成系统开发机械设计制造及其自动化专业马倩【摘要】产品物料明细(BOM)整理和生成是产品研发的重要环节之一,是企业物料采购、生产计划和成本核算的基础。目前,多数企业对图纸BOM的生成仍处于手工操作模式,效率底,容易遗漏出错。而对于复杂产品BOM的生成通常需要设计人员花费大量的时间和精力才能完成,严重影响了新产品研发的效率。本课题以VB为开发平台语言,以Access为数据库存储平台,结合ADO数据库接口技术和VBA技术。针对Solidworks三维设计软件的二次开发技术进行研究,通过配置符合企业标准的工程图图框、标题栏和明细栏格式,通过调用Solidworks支持的API函数,实现对SolidWorks工程图纸信息的快速准确提取,能够自动构建产品装配结构及其明细。同时也能为企业后期的PDM和ERP系统集成提供数据接口。软件实现的功能符合设计任务书预期要求,运行结果达到预期目的。【关键词】Solidworks;数据库;产品明细;应用程序接口DevelopmentofProduct’sBOMGeneratingSystemBasedonSolidworksMechanicalDesign,ManufacturingandAutomationMajorMaQianAbstract:CollectingandgeneratingBOMofproductisanimportantpartinproductdevelopment.Atthesametime,itisthebaseofmaterialspurchasing,productplanningandcostaccounting.Atpresent,thegenerationofdrawingsBOMisstillbyhandinmostenterprises,whichnotonlyhaslowefficiency,butalsoiseasytomakeerrors.ForthegenerationofcomplexproductBOM,designersoftenneedtospendalotoftimeandefforttofinishit,whichhasseriouslyaffectedtheefficiencyofnewproductdevelopment.ThispaperadaptsVBasthedevelopmentplatformlanguage,usesAccessasthedatabasestorageplatform,combinesADOdatabaseinterfacetechnologyandVBAtechnology.BymeansofstudyingthesecondarydevelopmenttechnologyofSolidworks,settingthetemplateofSolidworksdrawingsframe,titlepanelandBOM,andcallingtheAPIfunctionssupportedbySolidworks,thissoftwarecanachieveextractionofSolidWorksdrawinginformationfastlyandaccurateandalsobeabletoautomaticallybuildtheproductassemblyBOM.Instead,ItcanprovidebasicdatafortheintegrationofPDMandERPinfuture.Thefunctionachievedthesystemcanmeetexceptedrequirementofdesignassignmentanditsrunningresultsrealizeintendedpurpose.Keywords:Solidworks;database;BOM;API目录1研究背景和意义 12课题研究内容及要求 23课题研究关键技术 23.1Solidworks的API接口 23.2课题采用VisualBasic为开发语言 43.3系统采用ADO数据库连接技术 53.4产品BOM导出采用Excel格式 74系统需求分析与总体设计 74.1需求分析 74.2总体设计 84.3结构设计 94.4功能模块设计 104.5数据库设计 124.5.1建立Access数据库 124.5.2在VB中添加ADO引用 154.6软件界面设计 164.6.1创建主窗体 164.6.2创建功能子窗体 175软件运行环境 205.1硬件需求 205.2软件需求 205.3软件安装步骤 206软件运行情况 206.1用户登录模块 206.2读取工程图BOM 216.2.1设置零部件的自定义属性 226.2.2读取零部件的自定义属性 226.2.3生成明细栏 236.2.4提取工程图中的文字信息 236.3产品BOM管理模块 276.4自动生成产品明细表模块 27结束语 29参考文献 30致谢 311研究背景和意义Solidworks是一套基于Windows的CAD/CAE/CAM/PD桌面集成系统,是由美国Solidworks公司在总结和继承了大型机械CAD软件的基础上,在Windows环境下实现的第一个机械三维CAD软件,于1995年11月研制成功。它集成了设计、分析、加工和数据管理的整个过程,所获得的分析和加工模拟成果成为产品模型的属性,在Solidworks的特征管理器中清晰地列出了详细的数据信息。它还可以动态模拟装配过程,进行静态干涉检查、计算质量特征,如质心、惯性矩等。它将2D绘图与3D造型技术融为一体,能自动地生成零部件尺寸、材料明细表(BOM)、具有指引线的零部件编号等技术资料,从而简化了工程图样的生成过程。同时有中英文两种界面可供选择,其先进的特征树结构使操作更加简便和直观。具有较好的开发性接口和功能扩广性。能轻松实现各种CAD软件之间的数据转换传送。Solidworks是一种非常优秀的三维机械软件,其易学易用、全中文界面等特点使广大工程技术人员爱不释手。目前Solidworks是市场分额增长最快、技术发展最快、市场前景最好、性能价格比最优的软件。在全球的销量已经达20万套,排名处于3DCAD软件销售榜首,遥遥领先于其他同类产品。但是Solidworks也并不是十全十美的,不可能完全满足特定企业的特殊要求。例如,由于该软件是外国人写的,不适合中国的国际(如标题栏、明细表、放大图的标注、剖视图的标注、装配图的序号、标题栏等),也没有适合我国国际的标准件库。因此,为了合适特定企业的特殊需求,形成企业自己的特色,使Solidworks在我国的企业中有效地发挥作用,并使常用的或重复的任务自动化,提高效率,就必须对其进行本体化和专业化的二次开发工作。为了方便用户进行二次开发,Solidworks提供了几百个API(ApplicationProgramInterfce,应用程序接口)函数,这些API函数是Solidworks的OLE(ObjectLinkingandEmbedding,对象的嵌入与链接)或COM(ComponentObjectModel,组件对象模型)接口,用户可以使用VB\VBA\VC\Delpin等高级语言对Solidworks进行二次开发,建立适合用户需要的,专用的Solidworks功能模块【1】。目前针对Solidworks软件,国内外企业面临着一个关键的问题,现在企业使用Solidworks软件出完工程图后,编制系统明细表(手工编制)是一项很复杂而麻烦的工作。因此,研究如何将结构设计人员从该项任务中解脱出来是一项非常有价值的工作。另外,随着企业信息化工程的实施,如果能够将Solidworks所产生的相关信息自动提取出来,导入到企业信息化系统中,实现无缝集成,将为企业的采购、生产、计划等相关的子系统提供有价值的信息,为实现全部信息无纸化办公铺平道路。2课题研究内容及要求采用VisualBasic对SolidWorks进行二次开发,实现了在SolidWorks工程图环境下明细栏的自动添加与调整,并能够将Solidworks所产生的相关信息自动提取出来,导入到企业信息化系统中。以陆德公司的产品级配斗为实例,对于在参数化驱动之后重新生成的装配模型及工程图中,实现了根据零部件名称及数量等参数自动生成相对应的明细栏,并进行了一系列的优化与调整,解决了添加明细栏时工作繁琐,速度慢,出错多及难以用程序控制的缺点。添加完明细栏后,生成国家标准工程图。接着读取工程图中的自定义属性信息,然后采用ADO技术将读取的信息保存到Access数据库中。具体提取方式主要采用了选择和遍历技术,逐个遍历工程图中零件自定义属性并进行统计后导入到相应的数据表中。本课题在充分利用Solidworks的API函数基础上,以VB语言为开发平台,以Access为数据库,以excel报表模板,采用基于三层结构的C/S开发模式和ADO数据库访问技术开发出Solidworks明细表生成软件,实现了自动分析并提取由SolidWorks软件所设计的产品结构信息,自动构建正确的产品结构树,并能够导出为符合金蝶/K3ERP导入格式要求的电子表格文件。软件实现功能:1.自动读取SolidWorks设计信息并生成产品BOM;2.自动分析SolidWorks零部件装配关系;3.能够导出产品综合明细和分类明细;4.导出符合企业格式要求的Excel文件。3课题研究关键技术3.1Solidworks的API接口编制明细表所需要的信息全部存储于Solidworks三维图及相关的工程图中,如果利用开发工具能够调用Solidworks的API函数,直接就能够获得Solidworks明细表全部原始信息。Solidworks本身也为用户进行二次开发提供全方位的接口函数。为了方便用户进行二次开发,Solidworks提供了几百个API(ApplicationProgramInterfce,应用程序接口)函数,这些API函数是Solidworks的OLE(ObjectLinkingandEmbedding,对象的嵌入与链接)或COM(ComponentObjectModel,组件对象模型)接口。接口是一个COM的术语,它包含了Solidworks中使用到的类。Solidworks是使用面向对象技术设计的,在Solidworks之下是表示软件各个方面的对象模型。为了将API暴露给使用其他编程语言的开发者,COM编程允许Solidworks将实际的Solidworks对象的函数功能暴露给外部世界。COM编程已经超出了本书的涵盖范围,但是读者应该理解API是由一组接口组成的,这些接口被组织为接口对象模型(interfaceobjectmodel)。一般来说将接口看作一个对象(object),这些词语意思相同[2]。Solidworks支持OLE标准,完全实现了OLE自动化。作为一个OLE服务器,Solidworks提供了大量的OLE对象,以及这些对象所拥有的方法、属性和事件,用户通过在应用程序中对这些OLE对象及其方法和属性的操作,可以在自己开发的应用软件中实现诸如生成直线、构造实体、检查曲面表面参数等几乎所有的Solidworks软件的功能。SolidworksAPI对象模型如图3-1所示。SldworksSldworks模板零件图装配图工程图零件部件装配单元图纸视图布局注解配置特征设计树特性草图模板参数模型属性选择图3-1SolidworksAPI对象模型使用SolidworksAPI进行开发时,每个对象中必须包含Solidworks2009Constanttypelibrary。这个类型库包含了SolidworksAPI方法使用的所有常量定义。实际运行中,传递给方法的是常量定义而不是他们所代表的实际数值。这能保证程序在安装了新版本的Solidworks之后仍然能正常运行。实际使用的数值可能因为版本不同而不同,但是常量定义是相同的,不会改变,只会添加。使用VBA在Solidworks中录制宏时,会自动添加这个库。要验证这一点,编辑任何一个在Solidworks2009中录制的宏,并从菜单中选择【工具】/【引用】。弹出的【引用】对话框中显示了课题中已包含的类型库,如图3-2所示。图3-2Solidworks2009ConstantTypeLibrary用户可以使用VB\VBA\VC\Delpin等高级语言对Solidworks进行二次开发,建立适合用户需要的,专用的Solidworks功能模块。3.2课题采用VisualBasic为开发语言任何支持OLE和COM的编程语言都可以作为Solidworks的开发工具。Solidworks二次开发有两种,一种是基于自动化技术的,另一种开发方式是基于COM的。COM技术可以使用更多的SolidworksAPI,并可控制Solidworks运行的方式,生成*.dll格式的文件,也就是Solidworks的插件[3]。现在开发工具比较多,比如VB、VC、C++、C#、Delphi等。最最简单的二次开发工具是VBA,在涉及Excel时用VBA最为方便。VBA常用于录制宏,得到基本程序框架。易学易用的高级开发语言是VB,但功能有限。功能强大的语言是VC,但是入门难。Delphi集中了VB和VC两者的优点,学习过程中很容易上手,而且功能也非常强大,尤其在界面设计、数据库编程和网络编程方面更是独到之处。遗憾的是Solidworks常常不支持Delphi+OLE[4]。开发工具的选择主要考虑以下几个因素:对API函数接口的集成支持[5]。利用数据库存储因素。报表的实现。综合考虑以上因素,选择VB语言作为开发工具,它在以上因素上都占有优势,尤其是充分发挥它在开发数据库的专长和完全控制Excel报表的灵活性上,是其他工具无法比拟的。VisualBasic6.0是美国微软公司推出的Windows应用程序开发平台家族中的一员,它沿用了早期Basic语言的一些语法格式,是一个功能强大的应用程序开发工具[6]。VisualBasic6.0是一种面向对象(ObjectOrientedProgramming,OOP)的程序设计方法,它强调直接以问题域(即现实世界)中的事物为中心来考虑和认识问题,并按照这些事物的本质特征把它们抽象为对象,作为软件系统的基础。在OOP方法中,将对象作为系统中最基本的运行实体,对象中封装了描述该对象的特殊属性(数据)和行为方式(方法)。整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过一定的方式相互作用[7]。VisualBasic6.0易学易用、功能强大的特点使其得到了广泛的应用。其强大的可视化用户界面设计,是程序员从复杂的界面设计中解脱出来,是编程成为一种享受。VisualBasic6.0不但可以开发小型单机数据库管理系统,而且也可以开发集多种应用程序于一体的网络数据库系统。因此使得它成为目前使用最广泛的编程语言之一。3.3系统采用ADO数据库连接技术当计算机从早期的计算工具逐步变化成现在的信息处理和管理工具时,它就和数据库建立了密切的关系。在当今信息爆炸的时代,只有通过数据库并结合计算机的高速计算能力才可能实现对大量信息的及时处理和分析。数据库技术作为当前一项衡量国家信息化程度的标准被大力推行,尤其在我国信息化刚刚起步的阶段,数据库更是被大力发展。目前在我国从事信息事业的人员中有70%的人员从事着与数据库相关的工作。由此可见数据库在我国的发展前景。数据库系统主要有三大部分组成:数据库管理系统(DBMS,专门负责组织和管理数据信息的程序)、数据库应用程序(它使我们能够获取、显示和更新由DBMS存储的数据)、数据库(按一定结构组织在一起的相关数据的集合)[8]。随着DBMS技术的发展,目前的数据库系统正向着客户机/服务器模式发展。客户机/服务器数据库将DBMS和数据库应用程序分开,从而提高了数据库系统的处理能力。数据库应用程序运行在一个或多个用户工作站(客户机)上,并通过网络与运行在其它计算机上(服务器)的一个或多个DBMS进行通信。常见的访问数据库的方法有使用ADO、DAO、RDO控件等。目前,由于ADO具有灵活而又有效的访问数据库的方式,故成为比较常用的访问数据库的方法和手段[9]。ADO(ActiveDataObject,活动数据对象)是一种基于COM(组件对象模型)的自动化接口(Idispatch)技术,是一个与编程语言无关的COM组件系统。并以OLEDB(对象联接和镶入的数据库)为基础,经过OLEDB精心包装后的数据库访问技术,是数据访问对象DAO、远程数据对象RDO和开放数据库互联ODBC三种方式的扩展,利用它可以快速地创建数据应用程序。ADO提供了一组非常简单并将一般通用的数据访问细节进行封装的对象,主要有三个对象成员:Connection、Command和Recordset,以及几个集合对象:parameters、Fields和Errors等,ADO对象模型如图3-3所示[10]。ADO对象及集合ADO对象及集合Connection对象Command对象Recordset对象Record对象Stream对象ErrorstPropertiesParametersPropertiesFieldsPropertiesFields图3-3ADO的对象模型3.4产品BOM导出采用Excel格式明细表有相应的国家标准,其报表的选择非常重要,所得到的报表结果将直接关系到软件最后使用的成败,所以选择得到广泛使用的Excel作为信息输出的格式。采用Excel作为报表的输出工具,用户可以在已经定义好的模板基础上,使系统能直接在相关的地方插入信息。这样的好处是:Excel是最常用的办公软件,一般是装机必备工具;用户可以自定义模板;可以充分利用Excel强大的表格处理功能;可以允许用户调整输出的报表信息;以后可随时调出所生成的报表直接使用。以陆德公司的产品级配斗为实例,通过使用Excel电子表格能够将Solidworks所产生的相关信息(各零部件之间相互关系及其代号(标准件号)、名称、数量、材料等属性信息)自动提取出来,导入到企业信息化系统中,实现无缝集成,将为企业的采购、生产、计划等相关的子系统提供有价值的信息,为实现全部信息无纸化办公铺平道路。同时为企业的工作人员带来了快捷、高效的解决方案,解决了添加明细栏时工作繁琐,速度慢,出错多及难以用程序控制的缺点。为此,对于本课题,我们设计了一个电子表格,此表格清晰地反映了零件的相关属性,如序号、代号、名称、材料、数量、单重、总重等信息。电子表格界面如图3-4所示。图3-4电子表格界面4系统需求分析与总体设计4.1需求分析需求分析是指通过详细调查现实世界要处理的对象,明确用户的各种需求,达到确定新系统的功能的目的。需求分析是数据库结构设计的第一阶段,也是非常重要的一个阶段。在这个阶段主要是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。信息要求是指用户需要从数据库中获得信息的内容与性质。由用户的信息要求可以导出数据要求,即在数据库中需要存储哪些数据。处理要求是指用户要求完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理,得到系统所要处理数据的流程图。系统的功能必须能够满足用户的信息要求、处理要求、安全性与完整性要求。需求分析首先调查清楚用户的实际需求并进行初步分析,与用户达成共识后,再进一步分析与表达这些需求。需求分析可分为问题分析、需求描述及需求评审三个阶段。问题分析阶段,分析人员通过对问题及环境的理解、分析和综合,清除用户需求的模糊性、歧义性和不一致性。需求描述阶段的任务是生成需求规格说明书和初步的用户手册。需求评审阶段的任务是工作人员在用户和软件设计人员的配合下对生成的需求规格说明和用户手册进行复核,以确保软件需求的全面性、精确性和一致性。对企业来说,构建产品结构树(明细)、进行图纸审核和生成产品综合明细及分类明细是产品研发的最后一环,也是多数企业信息化最薄弱的环节(均以手工完成),速度慢,效率低,容易出错,极大的影响了新产品研发的效率。本课题实现了自动分析并提取由SolidWorks软件所设计的产品结构信息,自动构建正确的产品结构树,并能够导出为符合金蝶/K3ERP导入格式要求的电子表格文件。4.2总体设计利用SolidWorks出工程图,由于软件本身没有自带符合国标的工程图模板,给我们出工程图带来了不少的麻烦。而且装配图上的明细栏的信息必须手动才可以输入到工程图中,这样给企业带来很多的麻烦。我们采用VB程序编程自动生成符合我国标准的工程图。从图4-1中可以看出,生成国际标准工程图和提取零件工程图自定义属性是整个设计过程的重要组成部分。在提取BOM之前,需要把装配图中的相关信息转换到工程图中,形成国家标准的工程图。在工程图中生成明细栏时,每个零件的相关属性都是要能与材料明细栏所对应的列进行自动链接的,目的是能够通过链接自动在明细栏对应位置写入相关属性。为此,必须在零部件建模时设置其相关属性,其中与明细栏相关的属性包括重量、材料、序号、代号、名称、数量、比例等。在读取零部件的自定义属性时,具体读取方式主要采用了选择和遍历技术,逐个遍历装配体模型中零件树的种类与个数并进行统计后写人文件。需要注意的是,装配完成之后应该把装配模型中零件树的顺序按照明细栏的最后要求进行重新排列,目的是能够保证写入文件时记录的数据是按照明细栏的顺序排列的,减少排列出错的可能性。在生成国际标准工程图的过程中,采用先根据企业的需求建立明细栏模板,再通过程序进行添加的方法来实现工程图中明细栏的添加。由于它是在新的装配体零部件更名完成后进行这一系列的操作,因此就不会出现明细栏无法识别的情况;同时在模型参数化驱动完成后,通过相关程序统计部件中的零件数目,并存储在专门的文件或程序控件中,这样在通过程序初步添加明细栏以后写人相应零部件的数量、名称、材料、质量等属性,最后就可以在最终工程图中完成符合企业要求的明细栏的添加过程。图4-1设计系统流程图4.3结构设计使用Windows操作系统、开发维护系统即VisualBasic软件系统、一套数据库系统Access2003即可。它们之间的关系如图所示。数据库数据库数据库应用程序用户用户用户开发人员图4-2简单的应用系统4.4功能模块设计根据以上对陆德公司的企业现状和基于Solidworks的产品BOM生成系统的需求分析及目标设计,设计好数据库系统,然后开发应用程序可以考虑的窗体的系统,每一个窗体实现不同的功能,可以设计下面的几个模块。(1)登录模块:用来实现用户的登录等操作。(2)用户账号密码修改模块:用来实现用户密码的修改等操作。(3)读取BOM模块:用来读取级配斗工程图中自定义属性的信息等操作。(4)产品BOM管理模块:用来实现建立产品结构树,并把零件的信息读取到Listview中,最后导出产品明细,生成明细表等操作。(5)帮助窗口模块:用来提供河南陆德筑机有限公司的版本、设计人员及指导老师等信息的查询。系统的功能模块结构图如图4-3所示。基于Solidworks的产品BOM生成系统开发基于Solidworks的产品BOM生成系统开发文件读取BOMBOM管理窗口帮助登录修改密码帮助主题关于本程序图4-3系统的功能模块结构图本课题根据功能模块图设计规划出的实体有登录实体、用户账号密码修改实体、读取BOM实体、BOM管理实体、帮助窗口实体。各个实体具体的描述E-R图如下。登录实体E-R图如图4-4所示。用户账号用户账号密码登录图4-4登录实体E-R图用户账号密码修改实体E-R图如图4-5所示。账号账号密码用户账号密码修改确认密码图4-5用户账号密码修改实体E-R图读取BOM实体E-R图如图4-6所示。批量读取Solidworks工程图纸信息批量读取Solidworks工程图纸信息待整理文件用时工作路径读取BOMBOM管理图4-6读取BOM实体E-R图产品BOM管理实体E-R图如图4-7所示。Solidworks产品BOM管理Solidworks产品BOM管理产品BOM表产品结构树导出明细表用时图4-7产品BOM管理实体E-R图帮助窗口实体E-R图如图4-8所示。版本版本设计关于本应用程序指导老师图4-8帮助窗口实体E-R图4.5数据库设计4.5.1建立Access数据库本课题数据库采用Access2003,采用ADO数据库连接接口。使用Access设计器建立系统需要的数据表如下。BOM表,如图4-10所示。BOMDetail表,如图4-11所示。ManUser表,如图4-12所示。PathTmp表,如图4-13所示。图4-9建立数据库data.mdb图4-10BOM表图4-11BOMDetail表图4-12ManUser表图4-13PathTmp表4.5.2在VB中添加ADO引用在VisualBasic环境下,选择【工程】∕【引用】命令,在随后出现的对话框中,选择“MicrosoftActiveDataObject2.8Library”,然后单击“确定”按钮,如图4-14所示。图4-14引用ADO连接数据库在程序设计的公共模块中,先定义ADO连接对象。语句如下:PublicConnStrAsString'连接本地数据库PublicConnAsNewADODB.Connection'连接本地数据库然后在子程序中,用如下的语句即可打开数据库。ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;PersistSecurityInfo=true;JetOLEDB:DatabasePassword=;PersistSecurityInfo=True;DataSource="&App.Path&"\data\data.mdb"Conn.CursorLocation=adUseClientIfConn.State=0ThenConn.OpenConnStrIfConn.State=0ThenMsgBox"连接本地数据库失败,系统自动退出。",vbOKOnly,"信息提示":UnloadMe:End4.6软件界面设计设计好的界面如图4-15所示。这是一个多文档界面(MDI)应用程序,可以同时显示多个文档,每个文档显示在各自的窗体中。MDI应用程序中常有包含子菜单的“窗体”选项,用于在窗体或文档之间切换。菜单应用程序中,有5个菜单选项,每个选项对应着E-R图中的一个子课题。图4-15基于Solidworks的产品BOM生成系统界面4.6.1创建主窗体首先创建一个工程,命名为基于Solidworks的产品BOM生成系统,选择【工程】∕【添加MDI窗体】命令,则在课题中添加了主窗体。在主窗体中的工具栏中,选择菜单编辑器,创建如图4-16所示的菜单结构。图4-16菜单编辑4.6.2创建功能子窗体选择【工程】∕【添加窗体】命令,添加子窗体。在新建的VisualBasic工程自带的窗体中,将其属性MIDChild改为True。则这个窗体成为MID窗体的子窗体。下面分别给出这些子窗体。登录子窗体如图4-17所示。图4-17登录子窗体用户账户密码修改子窗体如图4-18所示。图4-18用户账户登录修改子窗体批量读取Solidworks工程图纸信息子窗体如图4-19所示。图4-19批量读取Solidworks工程图纸信息子窗体Solidworks产品BOM管理子窗体如图4-20所示。图4-20Solidworks产品BOM管理子窗体关于本应用程序子窗体如图4-21所示。图4-21关于本应用程序子窗体5软件运行环境5.1硬件需求(1)PIII以上处理器(2)1024MB(至少512MB)RAM(3)250MB以上可用硬盘空间5.2软件需求(1)Windows2000、XP及以上操作系统(2)VisualBasic6.0或以上(2)MicrosoftExcel2003或以上版本(3)Solidworks2009或以上版本5.3软件安装步骤(1)确保当前操作系统为Windows2000或以上版本;(2)在当前操作系统上安装Office2003办公软件;(3)在当前操作系统上安装Solidworks绘图软件并进行注册;(4)按照常规安装方法安装本软件。本软件正确安装之后,会自动在桌面建立一个快捷启动图标,可直接双击该图标运行本软件。6软件运行情况6.1用户登录模块单击系统桌面上的“登录”图标,进入软件系统前需要首先进行身份认证,弹出“用户登录”窗口,如图6-1所示。图6-1用户登录窗口单击“确定”按钮进入系统主界面,如图6-2所示。图6-2系统主界面6.2读取工程图BOM在图6-2中单击系统主菜单中的“读取BOM”,或单击标准工具栏中的“读取BOM”按钮,系统调出“批量读取Solidworks工程图纸信息”窗口,如图6-3所示。图6-3批量读取Solidworks工程图纸信息在6-3中浏览工作路径中显示的信息,点击“提取BOM”按钮,读取工程图中的自定义信息,然后采用ADO技术将读取的信息保存到Access数据库中。6.2.1设置零部件的自定义属性在提取BOM之前,需要把装配图中的相关信息转换到工程图中,形成国家标准的工程图。在工程图中生成明细栏时,每个零件的相关属性都是要能与材料明细栏所对应的列进行自动链接的,目的是能够通过链接自动在明细栏对应位置写入相关属性。为此,必须在零部件建模时设置其相关属性,图6-4为级配带DD的自定义属性,其中与明细栏相关的属性包括序号、代号、名称、重量、数量、材料、比例等。 图6-4级配带DD的自定义属性6.2.2读取零部件的自定义属性在读取零部件的自定义属性时,具体读取方式主要采用了选择和遍历技术,逐个遍历装配体模型中零件树的种类与个数并进行统计后写人文件。需要注意的是,装配完成之后应该把装配模型中零件树的顺序按照明细栏的最后要求进行重新排列,目的是能够保证写入文件时记录的数据是按照明细栏的顺序排列的,减少排列出错的可能性。数据读取的流程如图6-5所示:图6-5数据读取流程图6.2.3生成明细栏生成明细栏是比较重要的一步,通过调用API函数InsertBomTable2,插人预先设置好的明细栏模板。接下来,通过零件序号信息访问对应的零件,读取零件建模时输入的自定义属性值,并以填入或更新TableAnn的Text属性值的方式依次写入到相应的位置。6.2.4提取工程图中的文字信息读取工程图中的自定义信息,然后采用ADO技术将读取的信息保存到Access数据库中。具体提取方式主要采用了选择和遍历技术,逐个遍历工程图中零件自定义属性并进行统计后导入到相应的数据表中。导入BOM表中的信息如表6-6所示。表6-6BOM表导入BOMDetail表中的信息如表6-7所示。表6-7BOMDetail表读取工程图信息的主要源代码如下:IfMe.List1.ListCount<1ThenMsgBox"请首先选择要提取的Solidworks工程图。",vbOKOnly,"操作提示":ExitSubIfNotConSolidWorksThenExitSubSetswModel=swApp.ActiveDocConn.Execute"DeleteFromBOM"Conn.Execute"DeleteFromBOMDetail"Fori=0ToMe.List1.ListCount-1Me.List1.ListIndex=iGetCurrDRWBOMMe.List1.TextNext'确定BOM表各项装配关系Ifrs.StateThenrs.Closers.Open"SelectID,代号,父代号FromBOM",Conn,adOpenDynamic,adLockOptimisticWhileNotrs.EOFIfrst.StateThenrst.Closesql="SelectBOM单FromBOMDetailWhere代号='"&rs("代号")&"'"rst.Opensql,Conn,adOpenForwardOnly,adLockReadOnly'如果找到代号,则相应BOM单对应BOM表中的代号即为其父代号IfNotrst.EOFTheni=rst("BOM单")rst.Closerst.Open"select代号FromBOMWhereBOM单="&i,Conn,adOpenForwardOnly,adLockReadOnlyIfNotrst.EOFThenrs("父代号")=rst("代号")rs.UpdateEndIfEndIfrs.MoveNextWend在此程序中,首先连接Solidworks三维软件,通过遍历所有工程图中的自定义信息,然后把提取的信息通过数据库导到数据表中,并确定BOM表中各项的装配关系。最后对于BOM表,把“代号”的数值赋值给“父代号”。若提取图纸BOM信息结束,则会弹出对话框,提示“批量提取图纸BOM完成”。以下为调用的子程序。调用“连接Solidworks”的主要源代码如下:IfswAppIsNothingThenSetswApp=GetObject(,"SldWorks.Application")IfErrThenErr.ClearSetswApp=CreateObject("SldWorks.Application")IfErrThenMsgBoxErr.DescriptionExitFunctionEndIfEndIfEndIf此程序中主要采用了调用Solidworks的API函数。调用“GetCurrDRWBOM”的主要源代码如下:SetswModel=swApp.NewDocument(FileName,0,0,0)SetswDraw=swModelGetCurrDRWBOM=FalseHaveMXL=False'获取当前工程图自定义属性信息'BTL.TCode=Trim(swModel.CustomInfo("图样代号"))IfAscW(Right(BTL.TCode,2))=13ThenBTL.TCode=Left(BTL.TCode,Len(BTL.TCode)-2)EndIfBTL.TName=swModel.CustomInfo("图样名称")BTL.TDesigner=swModel.CustomInfo("设计")BTL.TMaterial=swModel.CustomInfo("材料")BTL.TNum=swModel.CustomInfo("数量")BTL.TWeight=swModel.CustomInfo("重量")BTL.TScale=swModel.CustomInfo("比例")'写入数据库BOM表sql="InsertIntoBOM(代号,名称,材料,数量,重量,设计,比例)Values('"&BTL.TCode&"','"&BTL.TName&_"','"&BTL.TMaterial&"','"&BTL.TNum&"','"&BTL.TWeight&"','"&BTL.TDesigner&"','"&BTL.TScale&"')"Conn.ExecutesqlFori=0To500DoEventsNextIfrs.StateThenrs.Closers.Open"Selecttop1IDFromBOMOrderByIDDESC",Conn,adOpenForwardOnly,adLockReadOnlyIfrs.EOFThenExitFunctionsql="UpdateBOMSetBOM单="&rs("ID")&"WhereID="&rs("ID")Conn.ExecutesqlCurrBOMNum=rs("ID")'SetswFeat=swModel.FirstFeatureFori=1ToswModel.GetFeatureCountIf"BomFeat"=swFeat.GetTypeNameThenSetswBomFeat=swFeat.GetSpecificFeature2ProcessBomFeatureswBomFeat,CurrBOMNumHaveMXL=TrueEndIfSetswFeat=swFeat.GetNextFeatureNextIfNotHaveMXLThenConn.Execute"DeleteFromBOMWhereID="&CurrBOMNumGetCurrDRWBOM=TrueExitFunction此程序中主要采用了遍历技术,获取要遍历的工程图自定义属性信息。6.3产品BOM管理模块在图6-3中单击“BOM管理”按钮,系统调出“Solidworks产品BOM管理”窗口,如图6-8所示。图6-8Solidworks产品BOM管理窗口6.4自动生成产品明细表模块在图6-8中单击“导出产品明细”按钮,系统生成了明细表,并保存到“model.xls”中,在生成的明细表中,系统清晰地列出了装配体及级配单元中零件的序号、代号、名称、材料、数量、单重、总重、备注等相关信息。这样的明细表就可以直接提供给计划、采购、生产、质量等部门和对应的管理信息系统中直接使用。这样,整个企业在信息共享方面可以做到无缝集成,不需要在企业信息化子系统的相关地方再次输入,杜绝错误的产生。生成的明细表如图6-9所示。图6-9产品明细表结束语从去年的11月份选题到现在的写毕业设计,忙碌了几个月,我的毕业设计课题也终将告一段落(说实话,我并不想结束,我很享受这个过程)。点击运行,也基本达到预期的效果。但由于能力和时间的关系,总是觉得有很多不尽人意的地方,譬如功能不全、外观粗糙、底层代码的不合理……数不胜数。以下为本课题的一些总结。1.课题以VisualBasic为前台开发语言,以Access为数据库平台,结合Solidworks和OfficeVBA编程技术,采用基于三层结构的C/S开发模式和ADO数据库访问技术开发出Solidworks明细表生成软件,实现了自动分析并提取由SolidWorks软件所设计的产品结构信息,自动构建正确的产品结构树,并能够导出为符合金蝶/K3ERP导入格式要求的电子表格文件。2.所有的信息都是围绕Access数据库而展开的,在信息处理完毕且经过相关人员确认后,就可以将Solidworks信息传入到服务器中,相关的信息就可以直接提供给计划、采购、生产、质量等部门和对应的管理信息系统中直接使用。这样,整个企业在信息共享方面可以做到无缝集成,不需要在企业信息化子系统的相关地方再次输入,杜绝错误的产生。3.采用Excel作为报表的输出工具,用户可以在已经定义好的模板基础上,系统能直接在相关的地方插入信息,这样的好处是:Excel是最常用的办公软件,一般是装机必备工具;用户可以自定义模板;可以充分利用Excel强大的表格处理功能;可以允许用户调整输出的报表信息;以后可随时调出所生成的报表直接使用。4.课题由企业提出,具有很强的实用性,能够极大的提高设计人员在生产计划、采购、生产、质量等部门的工作效率。5.课题软件能为企业生产采购部门提供了快速准确的基础数据,课题所研究的内容涉及到企业信息化集成的部分关键技术,具有一定的参考价值。6.课题所形成的专业软件具有一定的创新性,软件所解决的问题正是目前多数使用Solidworks三维软件的企业需要解决的问题。软件具有很好的安全性、稳定性和通用性,通过简单的系统参数配置,即可移植到其他企业安装使用,具有很好的市场推广前景。参考文献[1]江洪.Solidworks二次开发实例解析机械工业出版社2004.2.12(45)

[2]陈超祥.Solidworks高级编程:二次开发与API机械工业出版社2009.1.23[3]刘爱琴.VisualBasic程序设计教程航空工业出版社2003.6.21(34)

[4]求是科技.VisualBasic6.0数据库开发技术与工程实践人民邮电出版社2002.12.5[5]杨富国.VisualBasic程序开发案例解析清华大学出版社2003.2.12[6]刘文涛.VisualBasic+Access数据库开发与实例清华大学出版社2006.7.16[7]曾强聪.VisualBasic程序设计基础教程清华大学出版社2004.5.18[8]解圣庆.Access2003数据库教程清华大学出版社2007.4.24

[9]郑小玲.Access2003中文版实用教程清华大学出版社2008.12.23[10]卢湘鸿.Access数据库与程序设计电子工业出版社2006.8.10致谢大学生活即将结束,这次的毕业设计也将迎来尾声,在此,再次表示我的感谢。感谢大学四年,各位老师对我的教诲,感谢南阳理工学院机械系,感谢大家有缘能在生命中重要的四年,出现在彼此的生活中,感谢上天。几年的大学读书生活在这个季节即将划上一个句号,而于我的人生却只是一个逗号,我将面对又一次征程的开始。几年的求学生涯在师长、亲友的大力支持下,走得辛苦却也收获满囊,在论文即将付梓之际,思绪万千,心情久久不能平静。伟人、名人为我所崇拜,可是我更急切地要把我的敬意和赞美献给一位平凡的人,我的导师。我不是您最出色的学生,而您却是我最尊敬的老师。您治学严谨,学识渊博,思想深邃,视野雄阔,为我营造了一种良好的精神氛围。授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式,从论文题目的选定到论文写作的指导,经由您悉心的点拨,再经思考后的领悟,常常让我有“山重水复疑无路,柳暗花明又一村”的感触。同时还要感谢一起选陈老师课题的同学,是大家营造了良好的学习环境。在做设计的过程中大家互相帮助,是大家把从图书馆借来的资料和从网上下载的资料共同分享,是大家把遇到的问题集中起来共同探讨、共同解决、共同进步,是大家在学习和操作中共同交流、共同传授绘图技巧和经验,共同提高。在生活上,大家相互照顾。在精神上,大家相互鼓励,也正是这样,让我体会到了我们这个小家庭的温馨和温暖。感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以为报,你们永远健康快乐是我最大的心愿。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚谢意!感谢与我共同走过大学的朋友们、同学们,每个在我脆弱、困难的时候,扶过我一把的你,我都记得。感谢上天,感谢命运,能有机会在彼此的生命中出现,并共同走过一个春天。感谢所有帮助过我的老师、同学、朋友,感谢你们,希望你们在以后的日子里,开心、快乐,希望你们过得比我好!感谢学院为我们提供良好的做毕业设计的环境。我要感谢,非常感谢自己。在论文的写作过程中,自己总是积极主动的,主动与老师同学们沟通,不耻下问。通过写作论文,我更加深刻理解了“态度决定一切”这句话。最后,我要感谢,非常感谢四年的大学生活,感谢我的家人和那些永远也不能忘记的朋友,他们的支持与情感,是我永远的财富。最后再一次感谢所有在毕业设计中曾经帮助过我的良师益友以及亲爱的同学们,和在设计中被我引用或参考的论著的作者。不管怎样,陈老师那为我们忙碌的身影已深深地印到我的脑海里,时时感动着我!激励着我,做毕业设计的这段岁月值得我一生珍藏!附录资料:不需要的可以自行删除C语言的常用库函数函数1。absread()读磁盘绝对扇区函数

原形:intabsread(intdrive,intnum,intsectnum,void*buf)

功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。

参数:drive=0对应A盘,drive=1对应B盘。

返回值:0:成功;-1:失败。

头文件:dos.h

函数2。abswrite()写磁盘绝对扇区函数

原形:intabswrite(intdrive,intnsects,intlsect,void*buffer)

drive=0(A驱动器)、1(B驱动器)、

nsects=要写的扇区数(最多64K个);

lsect=起始逻辑扇区号;

buffer=要写入数据的内存起始地址。

功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。

返回值:0:成功;-1:失败。

头文件:dos.h

函数3。atof()将字符串转换成浮点数的函数

原形:doubleatof(constchar*s)

功能:把s所指向的字符串转换成double类型。

s格式为:符号数字.数字E符号数字

返回值:字符串的转换值。

头文件:math.h、stdlib.h

函数4。atoi()将字符串转换成整型数的函数

原形:intatoi(constchar*s)

功能:把s所指向的字符串转换成int类型。

s格式为:符号数字

返回值:字符串的转换值。若出错则返回0。

头文件:stdlib.h

函数5。atol()将字符串转换成长整型数的函数

原形:longatol(constchar*s)

功能:把s所指向的字符串转换成longint类型。

s格式为:符号数字

返回值:字符串的转换值。若出错则返回0。

头文件:stdlib.h

函数6。bcd()把一个数转换成对应的BCD码的函数

原形:bcdbcd(intx)

bcdbcd(doublex)

bcdbcd(doublex,intdecimals)

注意:BCD码的精度可达17位。参数decimals是可选的,用来指定转换后小数点后的位数。

头文件:bcd.h

函数7。bdos()

原形∶intbdos(intfnum,unsigneddx,unsignedal)

其中fnum是系统调用号;dx是传给寄存器DX的值;al是传给寄存器AL的值;

功能∶DOS系统调用(INT21H)

返回值∶AX中的值

函数8。biosdisk()调用BIOS磁盘驱动程序函数

原形:charbiosdisk(intcmd,intdrive,inthead,inttrack,intsector,intnsects,void*buffer)

功能:使用中断0x13,直接调用BIOS进行磁盘操作

参数:(1)cmd:

2-数据以每扇区512字节的格式读入buffer,起始扇区由head、track和sector定,扇区数由nsects定。

3-将buffer中的数据按每扇区512字节写入磁盘。

4-对扇区进行数据校验。

6-格式化一个磁盘并对化扇区设置化标志。

8-返回当前驱动器参数在buffer的前4个字节中。

10-长读,每扇区读入512字节加上额外的4个字节。

11-长写,每扇区写入512字节加上额外的4个字节。

(2)drive:0-第一个软驱;1-第二个软驱;0x80-第一个硬驱

(3)head:磁头

(4)track:磁道

(5)sector:扇区

(6)nsects:扇区数

(7)buffer:数据缓冲区,定义为unsignedcharbuffer[];

返回值:0x00-操作成功

0x01-错误命令

0x03-企图写具有写保护的磁盘

0x07-驱动器参数设置错误

0x10-磁盘读/CRC/ECC错误

头文件:bios.h

注:对于硬盘主引导记录扇区head=0,track=0,sector=1

函数9。biosprint()调用BIOS打印机I/O接口的函数

原形:intbiosprint(intcmd,intabyte,intport)

功能:通过BIOS中断0x17在由参数port指定的打印机上完成各种打印机功能。

port=0(LPT1)

=1(LPT2);

cmd=0(打印字符abyte)

1(初始化打印机端口)

2(读打印机状态);

abyte=0-255;

返回值:打印机状态

位0(设备超时);位3(I/O出错);位4(打印机已选择);位5(没纸);位6(打印机确认);位7(不忙)

头文件:bios.h

函数10。calloc()分配内存函数

原形:void*calloc(size_tnitems,size_tsize)

功能:在堆中分配一块内存,将该内存的内容全部清0。

返回值:返回指向新分配内存的指针。空间不够则返回NULL。

头文件:stdlib.h、calloc.h

函数11。ceil()

原形∶doubleceil(doublenum)

功能∶求不小于num的最小双精度整数

头文件∶math.h

函数12。cgets()读字符串函数

原形:char*cgets(char*str)

功能:从控制台读入一个字符串,并将该字符串(和字符串长度)存入有str所指向的地址中。

注意:在调用cgets之前,必须将要读入的字符串最大长度存入str[0]中,返回时str[1]被设置为实际读入的字符数。实际字符串内容从str[2]开始,以空字符(\0)结尾。

返回值:指向str[2]的指针。

头文件:conio.h

函数13。chdir()改变当前目录的函数

原形:intchdir(constchar*path)

功能:把由path指定的目录改为当前目录。path参数中可以指定驱动器号,如"a:\\ddd",但只是改变该驱动器上的当前目录,对当前活动驱动器上的当前目录无影响。

返回值:0(成功);-1(失败)

头文件:dir.h

函数14。_chmod()改变文件存取权限的函数

原形:int_chmod(constchar*path,intfunc[,intattrib])

功能:读取(func=0时)或设置(func=1时)DOS文件属性。

attrib=FA_RDONLY只读

attrib=FA_HIDDEN隐藏文件

attrib=FA_SYSTEM系统文件

attrib=FA_LABLE卷标

attrib=FA_DIREC目录

attrib=FA_ARCH档案

返回值:失败时返回-1。成功时返回文件的属性字节,如果返回值&FA_RDONLY不等于0,则文件是只读文件;

头文件:io.h、dos.h

函数15。chmod()改变文件存取权限的函数

原形:intchmod(constchar*path,intamode)

功能:根据amode的值,设置由path所指文件的存取权限。

amode的值存取权限

S_IWRITE允许写

S_IREAD允许读(只读)

S_IREAD|S_IWRITE可读可写

返回值:0(成功);-1(失败)

头文件:io.h、sys\stat.h

函数16。clock()

原形∶longclock(void)

功能∶测得从程序开始到调用处处理机所用的时间

头文件∶time.h

函数17。close()关闭文件函数

原形:intclose(inthandle)

功能:关闭由文件句柄所指向的文件,句柄是调用_creat、creat、creatnew、creattemp、dup、dup2、_open或open时得到的。该函数并不在文件末尾写一个Ctrl-Z字符,如果想用该字符结束文件,必须显式地给出该字符。

返回值:0(成功);-1(失败)

头文件:io.h

函数18。closegraph()关闭图形函数

原形:voidfarclosegraph(void)

功能:释放图形系统分配的所有内存,将屏幕恢复到调用initgraph之前的模式。

头文件:graphics.h

函数19。cos()

原形∶doublecos(doublearg)

功能∶计算arg(弧度)的余弦值

头文件∶math.h

函数20。ctrlbrk()设置ctrl-break处理程序的函数

原形:voidctrlbrk(int(*handle)(void))

功能:修改中断向量0x23,使用新的ctrl-break中断处理函数。

用法:ctrlbrk(函数名);

先定义函数:int函数名(void){...}

头文件:dos.h

函数21。delay()暂停函数

原形:voiddelay(unsignedmilliseconds)

功能:暂停当前所执行的程序milliseconds毫秒。

头文件:dos.h

函数22。disable()屏蔽中断的宏

原形:voiddisble(void)

功能:屏蔽中断,只允许从外部设备来的不可屏蔽中断(NMI)。

头文件:dos.h

函数23。enable()开硬件中断的宏

原形:voidenable(void)

功能:开放中断,允许接受任何设备产生的中断。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论