首页 三维数据模型分层图形传递及中间层的研究

三维数据模型分层图形传递及中间层的研究

举报
开通vip

三维数据模型分层图形传递及中间层的研究广州大学华软软件学院 本科毕业论文 论文题目  三维数据模型分层图形传递      和中间层的研究与实现         专    业    电子信息工程(嵌入式软件开发) 班    级          10嵌入式软件开发1        姓    名                陈 存                学    号          1040907108              指导教师          张芒、叶小艳              广州大学华软软件学院电子系 20...

三维数据模型分层图形传递及中间层的研究
广州大学华软软件学院 本科毕业 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 论文题目  三维数据模型分层图形传递      和中间层的研究与实现         专    业    电子信息工程(嵌入式软件开发) 班    级          10嵌入式软件开发1        姓    名                陈 存                学    号          1040907108              指导教师          张芒、叶小艳              广州大学华软软件学院电子系 2014年 4 月 摘要  3D打印机中间层软件作为CAD到RP的数据转换和处理接口,是3D打印机的灵魂。各大3D打印机生产商一般都开发有自己的分层软件,国外也涌现了很多作为CAD与RP系统之间桥梁的第三方分层软件。但是,这些分层软件价格昂贵,并且无 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 化,软件的二次开发困难。针对此现状,我们设计和开发了一种基于STL文件 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 的具有快速分层能力的分层软件,以满足自行研发的3D打印机的需要。本文详细介绍了这种3D打印机分层软件的设计与实现。 文章首先介绍了快速成型技术的发展,结合自行设计的3D打印机分析了系统的功能需求,设计了3D打印机分层软件的总体 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,并根据总体的设计方案逐步展开。本文中软件采用了模块化和层次化的设计方法,根据软件工程的模型,进行了软件的模块划分并确定了各部分的功能,对软件的详细设计进行了重点描述。 最后,对本文的工作做了一个总结,并对后续的开发工作指出了方向,对3D打印机分层软件的研发做了相关展望。 关键词  3D打印机;STL;分层;算法;RP;软件设计;模块 ABSTRACT  As the interface of data conversion and data processing from CAD to RP ,Slicing software is the soul of 3D printer.Major 3D printer manufacturers generally have developed their own slicing software. There are also a lot of third-part software as the bridge between CAD and RP abroad.However,these slicing software are very expensive and have no standardization,and they are difficult for secondary development.Against the status quo,we design and develop a quick slicing software which is based on STL file format to meet the needs of self-designed 3D printer.The paper introduces the design and realization of slicing software of 3D printer in detail. Firstly,the paper introduces the development of rapid prototyping technology.The paper unfolds gradually according to the overall project plan.slicing software is partly based on the modular and hierarchical design method,according to the model of software engineering,the paper describes software modules and corresponding functions,and especially the detail design of the software. Finally,a brief summarize is described and the following research work is discussed. KEY WORDS  3D Printer;STL;Slicing;Algorithm;Rapid Prototyping;Software design,Modular 目 录 1.前言    1 1.1 课题研究的背景和意义    1 1.2 3D打印技术介绍    1 1.3 3D打印技术的原理    2 1.4 3D打印技术发展前景以及应用    2 2.需求分析    4 2.1 Solidworks三维建模软件介绍    4 2.2 可行性分析    4 2.2.1技术可行性    4 2.2.2经济可行性    5 2.3软件需求分析    5 2.4 QT和QT Creater 介绍    6 3.系统总体设计    7 3.1功能分析    7 3.2设计分析    9 3.3软件功能模块化设计分析    9 3.4 STL文件的读入与分析    11 3.5下位机需要获取的文件分析    14 3.6 G代码转换成下位机格式数据的过程分析    15 4.软件的模块化设计    18 4.1文本文件操作相关概念    18 4.2 数据转换模块    19 4.2.1初始化模块    19 4.2.2数据读写模块    20 4.2.3坐标值数据转换模块    22 4.2.4格式化输出坐标模块    22 4.2.5去重坐标模块    23 4.3 数据显示模块    24 4.3.1源文件界面显示    24 4.3.2目标文件显示    26 4.4数据传输模块    27 5.程序的编译与运行    32 5.1程序的编译、连接和运行    32 5.2测试结果并分析结论    33 5.2.1测试结果    33 5.2.2数据分析    37 6.总 结    40 参考文献    42 附录    43 附录1:STL模型生成的G代码数据test.gcode    43 附录2:分层程序处理后的目标数据test.txt.xyz    44 致 谢    48 1.前言 1.1 课题研究的背景和意义 快速成型(Rapid Prototyping,简称RP)技术是20世纪80年代后期发展起来的一种先进制造技术。二十几年来,该技术在国内得到了迅速的发展,应用领域不断扩大。此技术已广泛应用在机械、汽车、航空空天、电子等行业中,取得了显著的效果。 快速成型技术采用离散堆积的工艺原理,该技术非常适用于形状复杂的不规则零件的制造,使得零件的复杂程度与制造成本基本无关,成功的实现了设计与制造的一体化,解决了CAD中三维造型“看得见,摸不着”的问题。 快速成型的方法很多,典型的有:SL(光固化法)法、LOM(层迭法)法、SLS(选择烧结法)法、FDM(融堆法)法、SGC(层固化法)法等。这些方法各有优缺点,然而这些方法有一个共同的缺点:成型时间长,而且成本高,一般的中小型企业难以承受。近年来,国外又推出了一种新的快速成型方法:3DP(三维打印法)法。而采用了3DP方法的快速成型设备被形象地称为3D打印机。3DP法成型速度比其他技术快5~10倍,其他快速成型设备两三天才能成型的零件,3D打印机几个小时之内就可以完成。 3D打印机成本低廉、设备占用空间小,可以成为设计师办公室的办公用品。更重要的是,由于以上的优点,三维打印法能够普及性的改变传统的零件设计模式。传统的零件设计都是二维的三视图,以致现在的一些优秀的设计软件(如UG、Pro/ENGINEER等)虽然能够给设计者立体视图,但是还是没有实现真正的模型设计,客户还是摸不着,而只是概念设计。而3DP法将会使得实体(模型)设计成为可能。用通用的软件,如Pro/ENGINEER,设计的零件,只需利用3D打印机分层软件进行切片处理,然后通过数控系统指挥打印机一层层打印。不用多长时间,真实的三维立体模型就会出现在设计者和用户面前。这样就可以大大节省开支,减少不必要的浪费。而且还可以加快产品的开发,迅速占领市场[1]。 1.2 3D打印技术介绍 3D打印技术,是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。3D打印机则出现在上世纪90年代中期,即一种利用光固化和纸层叠等技术的快速成型装置。它与普通打印机工作原理基本相同,打印机内装有液体或粉末等“印材料”,与电脑连接后,通过电脑控制把“打印材料”一层层叠加起来,最终把计算机上的蓝图变成实物。如今这一技术在多个领域得到应用,人们用它来制造服装、建筑模型、汽车、巧克力甜品等。 1.3 3D打印技术的原理 3D打印是添加剂制造技术的一种形式,在添加剂制造技术中三维对象是通过连续的物理层创建出来的。3D打印是断层扫描的逆过程,断层扫描是把某个东西“切割”成无数叠加的片,3D打印就是一片一片地打印,然后叠加到一起,成为一个立体物体。每一层的打印过程分为两步,首先在需要成型的区域喷洒一层特殊胶水,胶水液滴本身很小,且不易扩散;然后是喷洒一层均匀的粉末,粉末遇到胶水会迅速固化黏结,而没有胶水的区域仍然保持松散状态。这样在一层胶水一层粉末的交替下,实体模型将会被“打印”成型,打印完毕后只要扫除松散的粉末即可“刨”出模型,而剩余粉末还可循环利用[2]。 图1-1 3D打印机 1.4 3D打印技术发展前景以及应用 近年来,3D打印技术持续发展,成本的大幅降低使其已经从研发的小众空间向主流市场进军,发展势头不可阻挡,已经成为社会广泛关注、民用市场迅速崛起的新领域。3D打印制作的模型、礼品、纪念品乃至工艺品的应用,极大吸引了社会关注和投入,发展加速,市场开始呈现量与质的双飞跃。据预测,2020年3D打印成品将占产品生产总量的50%。 随着3D打印技术的不断突破,新材料的日益改善,3D打印的速度、尺寸在不断提高,其技术在不断优化,应用领域在不断扩展,特别是图形艺术领域的潜力,三维的概念模型能更好地传达制作者的想法或解决方案,一张图可以胜过几百甚至上千个文字的描述。专业人士坚信个性化或定制化的3D打印可以将一个所想象的三维模型即时摆在眼前,能够快速改进产品,增长幅度将超过想象,将会改变社会各种应用的未来。 3D打印技术将淘汰传统生产线,缩短制作周期,大大减少生产废料,所需原材料用量将减少到原来的几分之一。3D打印不仅节约成本,提高制作精度,也将弥补传统制造的不足,并将在民用市场迅速崛起,从而开启制造业的新纪元,为印刷工业带来新的机遇[3]。 3D打印的应用领域越来越广泛,目前主要应用于工业、医疗、建筑、航天、机械制造等行业的模型制作,包括精密的医疗器械和工艺品等。在建筑领域,3D打印机能够为曲面异型建筑的重要精密构件快速制作精确模型,实现传统建筑模型制作无法达到的工艺水平,甚至可以“打印”出一栋完整的建筑。在地理空间领域,3D打印机可以轻松将GIS数据转化为三维地形及城市景观模型或沙盘。在教育领域,3D打印机能够将抽象概念带入现实世界,将学生的构思转变为他们可以捧在手中的真实立体彩色模型,令教学更为生动。在娱乐艺术领域,3D打印机可以根据电子游戏、三维动画以及其他创作产生的三维数据轻松制作自定义头像和雕像[4]。 2.需求分析 2.1 Solidworks三维建模软件介绍 Solidworks三维建模软件是将计算机技术与工程设计结合起来的数字化、智能化的设计平台。目前在各企业中深入广泛的应用三维设计技术,相比传统的手法,更大程度地提高了设计质量和缩短了工程周期。Solidworks软禁具有全面的零件实体建模,是一款功能强大、方便快捷的三维设计软件。它大致可以划分为以下几个板块:草图绘制、三维建模、钣金设计、焊接件的生成、模具设计工具、装配体、工程出图等众多模块。 2.2 可行性分析 2.2.1技术可行性 通过Solidworks三维建模软件设计出的模型,能够对立体图形进行分层,按照一个方向(如Z方向即立体图形的高度)我们从图2-1中直观地看出立体图形每一层的层面信息,三维软件最后会导出该立体图形每一层面的每个坐标点的信息数值。 另一方面,下位机需要接收的数值格式是由我们自己定义的,例如@字符表示开始读取坐标值,$字符表示读取每一行数据后停止,即读每一个坐标点后停止。因此,鉴于Solidworks三维建模软件最后导出的图形坐标数据在运动轨迹重复性和时间长问题,我们可以用C语言设计程序来实现数据的转换,已达到大大降低成型时间的目的。 图2-1 三维立体模型图 2.2.2经济可行性 设计一款产品,我们还需要看它能否给我们带来经济效益。这个主要是由成本、性能、售价决定。越低的成本、更高的性价比决定了这款产品的市场位置。我们设计这款数据转换算法程序需要的成本非常低廉,还可以免费提供给用户使用。因此,我们确信无论在技术上还是在经济可行性上都可以俘虏用户的心。 2.3软件需求分析 我们设计一款产品前,首先需要先对其技术可行性、经济可行性进行一定的客观分析,另外,一款产品被设计出来,有需求才有市场。产品在市场能够建立起根据地主要由两个因素决定:需求和竞争。尽管3D打印技术在国内的发展处在一个起步和研究阶段,但是结合3D打印技术的发展前景和应用领域,我们可以看到三维打印需求量是非常充足的。在如此竞争激烈的市场环境下,用户会优先选择高性能、高性价比、高速率的产品,因此我们这个项目设计能够提高产品的生产效率以及节省生产时间,无疑对3D打印技术的发展起到促进的作用,有创新才有进步。 2.4 QT和QT Creater 介绍 Qt是一个跨平台应用程序和UI开发框架。使用Qt您只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。 Qt Creater是全新的跨平台Qt IDE(集成开发环境),可单独使用,也可以与Qt库和开发工具组成一套完整的SDK(Software Development Kit,即软件开发工具包)。其中包括:高级C++代码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。 直观的C++类库:模块化Qt C++类库提供一套丰富的应用程序生成块(block),包含了构建高级跨平台应用程序所需的全部功能。具有直观,易学,易用,生成好理解、易维护的代码等特点。 跨桌面和嵌入式操作系统的移植性:使用Qt,您只需一次性开发应用程序,就可跨不同桌面和嵌入式操作系统进行部署,而无需重新编写源代码,可以说Qt无处不在(Qt Everywhere)。 ● 使用单一的源代码库定位多个操作系统; ● 通过重新利用代码可将代码跨设备进行部署; ● 无需考虑平台,可重新分配开发资源; ● 代码不受担忧平台更改影响的长远考虑;    ● 使开发人员专注于构建软件的核心价值,而不是维护API。 具有跨平台IDE 的集成开发工具:Qt Creator 是专为满足Qt开发人员需求而量身定制的跨平台集成开发环境(IDE)。Qt Creator 可在windows、Linux/X11和Mac OS X 桌面操作系统上运行,供开发人员针对多个桌面和移动设备平台创建应用程序。 3.系统总体设计 3.1功能分析 STL模型的分层处理在3D打印机快速成型中起着非常重要的作用。通过分层数据,客户不仅可以了解快速成型的制作原理和过程,而且可以对CAD模型的错误进行快速成型任务提交前的检验。指导CAD模型数据的修正。STL模型的分层处理就是根据用户输入的分层方向和分层厚度,求取一系列切平面与STL模型中三角面片的交线,并将首尾相连的线段组成一个个轮廓,同时还要判断轮廓是否封闭。 STL模型是用小三角形面片对原CAD模型的一种离散逼近,一个STL模型少则包含成百三千,多则有数十万个三角形面片,所以分层算法效率的高低就成为影响系统适用性的重要因素。分层处理一般包含两个步骤:即平面求交和线段轮廓归并。所以影响分层速度的因数主要有两个:一个因素是在求取每一层的轮廓线段时,都要判断每个三角形面片与切平面的位置关系,若相交则求交线。与某一切平面相交的知识少数三角面片,而大多数的三角面片与该切平面是不相交的,因此大多数判断属于无效判断,浪费计算时间。另一因素是完成三角面片和切平面求交运算后,要对所得交线进行排序,以生成封闭轮廓线。当一个STL模型包含大量三角面片时,用一般算法进行交线排序,其处理速度将非常慢,必须研究特殊的快速分层算法,如先对STL模型数据做一些预处理再进行切片处理,以提高切片效率。另外,我们还可以对STL数据的每个切片的打点轨迹进行优化,以提高二维打印的效率[5]。 正是基于STL模型分层算法的繁杂性和耗时性分析,我们很有必要设计一款能够简便性与耗时短的程序,在STL模型分层算法的基础上进行改良优化,以此来提高三维模型快速成型的速率与效率,因此,我们运用数学建模的思想、换位思考思想以及算法效率方法对我们的STL模型数据进行转化,尝试转换成下位机能够识别接收和驱动的数据。 图3-1 数据转换前后喷头运动轨迹示意图 从图3-1数据转换前后喷头运动轨迹示意图中,我们知道这主要是粗略说明转换后的数据的3D打印机喷头的运动轨迹要比转换前的运动轨迹要短。我们根据科学的事实知道三角形两边要大于第三边以及直线距离最短的常识,由图中我们发现,每两个三角形之间都会有重叠的边,这样喷头在某一层面上从起点开始到回到起点的这个封闭的轮廓线的过程中,已经远远重复走过已走过的轨迹。而我们就是要考虑把这些重复的线和坐标点删除掉,剩下的就是各自独立的坐标点了,然后将这些坐标点连起来就形成了一条有向的直线了。 另外第二个要实现的功能是通过串口从PC终端中发送已经优化处理过的数据到单片机以实现传递分层图形数据的功能。那么我们就需要对串口进行设置,以及显示发送的进度。结合以上数据转换程序以及传递分层图形数据的两个功能,我们可以使用QT强大的功能来完成这个软件的设计,不仅美观,简便,还能使各功能模块结合起来。下图3-2为软件功能结构图: 图3-2 软件功能结构图 3.2设计分析 明确了3D打印机中间层软件的功能需求后,就需要进行方案的论证和系统的设计。软件的设计是以一定的方法为基础的,对于3D打印机中间层软件这样一种相对复杂的软件开发任务,设计中根据软件设计的模型,从用户需求和系统要实现的任务功能出发,主要遵循了以下几个原则: 易用性。程序要尽可能简洁而又满足需要,要有良好的防错和容错性,同时具有良好的接口,便于将来升级时,其他开发者能很容易的掌握和运用; 高性能。要在保证程序正常运行的情况下,要尽量减少程序所占用的内存空间,提高程序的运行速度。这与程序中数据结构的设计有关,同时与简洁、优化的程序代码有关; 模块化。把整个软件划分为较小的模块。设计中各个模块之间的逻辑结构相对独立,这种模块化设计使得各个子系统之间相对独立,更加便于系统的调试,提高了系统的稳定性,同时也为软件升级大大提供了方便。 3.3软件功能模块化设计分析 3D打印机中间层软件采用结构化、模块化设计。模块化是将系统总功能分解为若干个功能单位,各个功能单位被设计成为相对独立的模块,通过相互转移调用的约定(即接口)方法,把它们连接起来。这种设计方法的优点是:系统设计简单、结构紧凑、整体性强、开销小、效率高。在软件设计模块化的同时,每个模块同时使用层次化结构,各层之间是单向依赖关系,不构成循环。这种层次结构的显著优点是: ● 在设计低层软件时,可不考虑高层软件的实现方法,各层间独立性强; ● 高层软件的错误不会影响到低层软件中,从而方便软件的调试、维护、修改和扩充; ● 软件不会产生递归调用,避免了死锁的发生,提高了系统的可靠性。 ● 整个软件分为三大模块:数据转换模块、数据显示模块、数据传输模块。图3-3是数据转换模块框图: 图3-3 数据转换模块结构图 3D打印机快速成型可以分为离散和堆积两个过程,如图3-4所示。 图3-4 3D打印快速成型的基本过程 离散过程将CAD模型沿某一方向(如Z方向)离散为一系列的二维层面(称为分层或切片),得到一系列的二维平面信息(截面信息);分层后的数据进行进一步处理,根据不同工艺的 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 将这些信息与3D打印机数控成型技术相结合,生成代码在微机控制下,数控系统以平面加工方式,有序地连续加工出每个薄层,并使它们自动粘结而成型,从而构成一个与模型与模型相对应的三维实体模型,这就是堆积的过程。 从图3-4可以看出,整个过程可以分为数据处理和物理实现两大步骤,其中数据处理主要完成三维模型的离散功能,而物理实现则根据离散的层片信息完成实体的制造。3D打印机数据处理技术可以接受和处理任何一个CAD系统输出的三维模型信息(如STL文件格式),对CAD模型进行分层,最后处理成层片文件格式送入3D打印机中。3D打印机接收经数据处理技术处理后的层片文件进行快速成型制造[6]。 快速成型数据处理是RP技术的第一道环节,也是最重要的一个环节。快速成型数据处理的方法及精度直接影响成型件的质量。RP数据处理由软件系统负责完成,因此分层软件作为CAD到RP的数据转换和处理的接口,是3D打印机的灵魂。各大3D打印机生产商一般都开发自己的分层软件。由于CAD与RP接口软件开发的困难性和相对独立性,国外涌现了很多作为CAD与RP系统之间桥梁的第三方软件。这些软件一般都以常用的数据文件格式作为输入输出接口(如STL文件),而输出的数据文件一般为CLI。比较著名的一些第三方接口软件有美国Solid ConCept 公司的BridgeWorks、SolidView,比利时Materialise公司的Magics,美国POGO公司的STL Manager,美国Imageware公司的Surface-RPM等[7]。 3.4 STL文件的读入与分析 由于STL格式具有易于转换、表示范围广、分层算法简单等特点,为大多数商用快速成型系统所采用,现已成为快速成型行业的工业标准。 STL文件存在ASCII和二进制两种格式,在读取和分析STL文件时需要对文件类型进行判断。完整的STL文件读取和分析流程如图3-5所示。 图3-5 STL文件的读取和分析 三维建模软件生成的STL文件最终会输出为G代码,G代码里面的数据包括建模时各种参数的设置,以及构成三维建模的各个三维空间坐标,而每一行代表的一个三维空间坐标的坐标值。以下为G代码的部分数据内容: ; generated by Slic3r 0.9.9-dev on 2014-03-06 at 10:52:03 ; layer_height = 0.4 ; perimeters = 3 ; top_solid_layers = 3 ; bottom_solid_layers = 3 ; fill_density = 0.4 ; perimeter_speed = 30 ; infill_speed = 60 ; travel_speed = 130 ; nozzle_diameter = 0.5 ; filament_diameter = 3 ; extrusion_multiplier = 1 ; perimeters extrusion width = 0.53mm ; infill extrusion width = 0.53mm ; solid infill extrusion width = 0.53mm ; top infill extrusion width = 0.53mm ; first layer extrusion width = 0.70mm    //--------参数设置 G21 ; set units to millimeters          //使用毫米作为打印的单位 M107                                    //不启动风扇 M104 S200 ; set temperature              //设置挤出机的温度 G28 ; home all axes                    //移动到原点 G1 Z5 F5000 ; lift nozzle              //升起挤出机 M109 S200 ; wait for temperature to be reached  //等待机器温度达到设置值 G90 ; use absolute coordinates  //设置成绝对坐标(即与机器原始位置相对) G92 E0                                  //设置位置 M82 ; use absolute distances for extrusion  //设置挤出机使用坐标模式 G1 F1800.000 E-1.00000 G92 E0              G1 Z0.350 F7800.000                    //z方向的厚度为0.350  G1 X79.960 Y60.960                      //该x,y值设置为原始位置点坐标 G1 F1800.000 E1.00000  //初始设置挤出机的速度及挤出原料的长度(F:加工速度;E:挤出长度) G1 X80.550 Y60.220 F540.000 E1.03079    //(从上一坐标点移动到该点,并降低加工速度为540mm/min,在行程过程中挤出1.03079mm的打印材料  G1 X81.320 Y59.470 E1.06576    //(再从上一点移动到该点,并以F的速度,在行进过程中挤出1.0947mm的打印材料 G1 X82.080 Y58.860 E1.09747            //以此类推 我们很明确地知道我们只需要将G代码里面的XYZ值坐标值帅筛选出来就可以了,因此我们可以忽略掉出现三维坐标值(X,Y,Z)前的各种参数设置以及数据中出现的空格字符“ ”。我们细心就会发现,G代码数据参数设置前都有一个分号“;”,利用while循环语句和if条件判断语句遇到空格字符就跳过,以及遇到分号“;”就不处理这一行的方法实现。 3.5下位机需要获取的文件分析 图3-6 下位机能够接收的数据形式 已知图3-6为下位机驱动模块能够接受的坐标值数据形式,我们首先要对该数据形式进行分析,包括各个字符、数字以及文件的类型,详细了解该数据中定义的字符和数字表示的意思,才能确定软件设计程序各功能的总构架图,以实现将STL文件导出的坐标值转换成下位机驱动模块能够读取坐标值的另一种格式文本文件的功能。 通过图3-6中对数据颜色鲜明的标注,我们可以容易地分清楚该数据格式的构成。我们在设计特定功能程序前,了解分析源数据和目标数据的构成是很重要的,才能制定功各部分功能和运用所需要的函数。 下位机能够接收的数据格式为: @+X坐标值位数+X坐标值数值+@+Y坐标值位数+Y坐标值数值+@+Z坐标值位数+Z坐标值数值@+U值位数+U值数值+@10$ 下面对这个数据格式进行说明解释。当下位机从左到右顺序读到字符@的时候就开始读写其后的X数值、Y数值和Z数值。U表示的是打印的延时时间。我们在程序中设置了当读到$字符的时候,每一行的坐标值读取程序就结束。然后开始下一行坐标值的读取,也就是下一个坐标点的读取。 @:程序开始读取这个@字符后面的对应坐标值X、Y、Z; X: 每个点的X坐标; Y:每个点的Y坐标; Z:每个点的Z坐标; U:打印延长时间,也就是两个坐标点打印所需要的间隔时间; $:读取每一行数据后停止,即读每一个坐标点后停止; 为了简要说明以上目标文件每一行数据对应的坐标值的转换方法,特意连续选取这三行数据做一个基本的转换说明。例子: @10X@10Y@45000Z@10U@10$              坐标值(0,0,5000) @10X@10Y@3350Z@10U@10$              坐标值(0,0,350) @579960X@560960Y@3350Z@10U@10$      坐标值(79960,60960,350) 3.6 G代码转换成下位机格式数据的过程分析 由以上3.4STL文件的读入与分析和3.5下位机需要获取的文件分析中我们明确了我们程序开发的目标是要将两种数据格式进行提纯转换输出。数据转换算法这里涉及到三个方面的内容: 判断XYZ坐标字符并读取坐标值; 对坐标值进行优化处理; 以固定格式输出文件。 判断XYZ坐标字符并读取坐标值 在这里为了判断XYZ字符我们使用switch多分支选择语句进行判断,同时在正确判断到XYZ字符时,我们还使用atof()函数将字符串转化为浮点数。以下图3-7为switch语句判断XYZ坐标流程图,相对应的程序代码为4.2.2数据读取模块这部分。 图3-7 switch语句判断XYZ坐标流程图 对坐标值进行优化处理 由于下位机能够接收到的数据需要以整数的形式出现,我们还需要将浮点数转化整数,并且在取整的过程中我们要保证输出的数据位数控制在5位以内,以提高喷头运动轨迹的准确性和缩小误差范围。因此我们必须要对坐标值做优化处理,即四舍五入取整。以下图3-8为坐标值四舍五入取整流程图,对应的程序代码为4.2.3坐标值数据转换模块。 图3-8 坐标值四舍五入取整流程图 以固定格式输出文件 由3.5下位机需要获取的文件分析我们知道下位机能够接收的数据格式为: @+X坐标值位数+X坐标值数值+@+Y坐标值位数+Y坐标值数值+@+Z坐标值位数+Z坐标值数值@+U值位数+U值数值+@10$,特别注意的是还要求取XYZ坐标值得位数,对应的程序代码为4.2.4格式化输出坐标模块。 4.软件的模块化设计 4.1文本文件操作相关概念 数据流:指程序与数据的交互是以流的形式进行的。进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。 缓冲区:指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多。 C语言的文件处理功能依据系统是否设置“缓冲区”分为两种:一种是设置缓冲区,另一种是不设置缓冲区。由于不设置缓冲区的文件处理方式必须使用叫低级的I/O函数(包含在头文件io.h和fcntl.h)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是C的标准函数,跨平台操作时容易出现问题[8]。 因此,我们使用设置缓冲区的文件处理方式。当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据。当写入文件时,并不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘。如下图4-1所示: 图4-1 文件的打开、读写、关闭过程示意图 4.2 数据转换模块 4.2.1初始化模块 图4-2 初始化模块程序代码 图4-2这个模块是用来初始化X、Y、Z的坐标值,使用fopen()函数打开文件,并且判断输入输出文件打开是否成功,失败则返回错误信息。如果打开成功,我们将给文件添加后缀.xyz,当所有的数据都读取出来后,生成的存放转换后数据的文件的后缀就是.xyz了。 4.2.2数据读写模块 图4-3 遍历文件读取X、Y、Z坐标值 图4-3代码使用了for循环语句和Switch语句来遍历整个G代码文件数据,通过switch语句来判断遇到大小写X、Y、Z字符时,使用atof()函数将字符串转化为浮点数,把转化后的数值输出到目标文件。这样就完成了对G代码中的数据的读取了。 4.2.3坐标值数据转换模块 图4-4 对浮点型数据进行四舍五入处理 如图4-4所示,我们考虑到下位机能够接收的数据位数需要控制在5位以内,以及方便数据的读取,我们在程序中将浮点坐标转化为整数并且保留三位有效小数,如数值为0.1234的原始坐标经过转换后,我们处理为123,而1.1235则转化为1124,这通过对原始数值放大10000倍来实现。 4.2.4格式化输出坐标模块 图4-5 格式化输出代码 我们在分析了下位机能够接收的数据格式的基础上(即格式为:@+X坐标值位数+X坐标值数值+@+Y坐标值位数+Y坐标值数值+@+Z坐标值位数+Z坐标值数值@+U值位数+U值数值+@10$),设计了程序中的格式化输出函数输出的格式为上述格式。同时,调用Coord_To_OutString()函数实现读取坐标值XYZ的数值位数,最后按照以上格式输入坐标值位数与数值。 4.2.5去重坐标模块 图4-6 去重坐标代码 如图4-6 去重坐标代码中所示,通过if条件判断语句当X、Y、Z中任何一个坐标不相同的时候可以覆盖原有的坐标值。 4.3 数据显示模块 4.3.1源文件界面显示 图4-7 源文件显示模块 如图4-7源文件显示模块界面包含了“文件选择”“源文件”等label标签控件、“文件选择“按钮以及文本显示模块。利用信号与槽函数,当我们点击“文件选择”按钮的时候,会触发槽函数OnUserChooseFile(),即用户选择文件函数。同时判断当前数据源是否改变和用户选择的文件是否有效两个值来决定我们是否更新数据源,有效则选择我们指定格式的文件进行打开,输出后缀格式为*.gcode的源文件数据到对象为tbSrcContext的文本框中进行显示。 图4-8 源文件显示界面模块代码 4.3.2目标文件显示 图4-9 文件数据优化显示界面 由图4-9文件数据优化显示界面所示,我们可以直观地看到源文件坐标数据经过优化处理后的数据,而优化处理后的数据正是数据转换模块实现的结果,这个数据转换的程序就像一个黑匣子,我们看不到里面工作的过程,但是可以看到这个程序的结果。以下图4-10为目标文件文本显示代码,这与源文件数据显示模块一样,定义了一个tbSrcContext对象,调用setText()函数显示文本信息。 图4-10 优化数据后显示模块代码 4.4数据传输模块 图4-11 数据传输模块界面 如图4-11所示,这个软件还包括数据传输模块,用户可以通过串口将优化后的数据发送到单片机用来驱动电机走动。我们需要在QT中设置串口的名称和波特率,在点击“打开”按钮后,我们可以点击“发送数据”按钮,这时会显示文件信息,包括文件的大小和已发送的字节数。还有一个进度显示条可以显示发送的状态以及进度。 图4-12 数据传输模块代码 5.程序的编译与运行 5.1程序的编译、连接和运行 编译:将源程序文件翻译成目标代码文件。 C/C++程序按编译单元(即源程序文件)分割单独编译,每个源程序文件分割编译后生成对应的目标代码文件(扩展名为.o)。 图5-1所示为编译当前正在编辑的单个源程序文件(系统不编译头文件,头文件是在编译之前,通过包含文件这个“编译预处理指令”将头文件的内容插入到源程序文件中。) 图5-1 编译一个源程序文件 连接:将目标代码文件、库文件连成可执行文件。 连接程序的主要功能是将一个程序的所有目标代码文件(扩展名为.o)和系统提供的标准库文件,进行连接以生成可执行文件(扩展名为.exe)。图5-2所示为编译所有的源程序文件并连接生成可执行文件(系统在连接时,已不需要源程序文件了)。 图5-2 编译并连接 运行:将可执行文件装载至计算机内存,依指令流、数据流执行程序。 可执行文件是指可以在操作系统下直接运行的程序,它由指令和数据的机器机器码构成(运行程序时已经不需要源程序文件、目标代码文件)。运行程序时,也不需要IDE。图5-3所示为编译所有的源程序文件、并连接生成可执行文件、最后启动可执行程序运行。 图5-3 编译连接并运行程序 5.2测试结果并分析结论 5.2.1测试结果 图5-4 运行程序界面 图5-5 打开源文件界面 图5-6 源文件数据显示界面 当我们编译好程序后,运行程序出现如图5-4界面,这时我们还没有选择源文件,因此在文本框中没有数据显示。我们点击“文件选择”按钮,就会出现如图5-5所示打开源文件界面,这里设置了我们要转换的源文件格式必须是*.gcode格式的,选择其中的test.gcode文件,就会出现如图5-6所示界面,文本框中显示了该文件中的数据。 图5-7 文件数据优化显示界面 然后我们切换到文件数据优化选项,程序就会以我们事先设计好的转换算法进行转换,转换后的数据显示在文本框中。如图5-7 文件数据优化显示界面。 图5-8 文件发送确认 图5-8显示的是当我们点击“发送数据”按钮时,弹出是否发送对话框。 图5-9 发送数据状态 图5-9表示当数据在发送到下位机时,进度显示条会显示目前正在发送的进度。 图5-10 发送数据完毕 图5-10所示数据已经发送完毕,数据通过串口传输到了下位机,下位机同时也接收到了优化后的数据。接着下位机开始沿着优化后数据坐标的轨迹进行打印。 5.2.2数据分析 在图5-11程序生成文件数据示意图中,为了方便大家观看和了解数据内容,我们对数据进行了标示颜色并显示数据对应的坐标值,这里只列出部分数据作为例子。从图中我们会发现这些数据的Z值坐标都是350,Z值代表的是三维图形的高度,而X和Y值的数值不同,这说明了这些坐标点是在同一个层面上的。 我们知道,三维立体图形可以无限地分成许许多多的层面,当Z值不同的时候,就代表坐标点处在不同的层面。因此,我们需要对某一层的数据进行分析的时候,结合以小见大的方法,局部决定整体的思想来分析我们设计的程序算法对3D打印机的工作效率的具体作用,究竟是效率提高还是降低了,我们拭目以待。 图5-11 程序生成文件数据 图5-12 改进前后直线插补结果 由上图5-7 中的图2和图3数据我们可以直观看到改进后ABC三点的在网格中的走势要比改进前ABC三点的走势要更趋近于直线,因此我们由此从数据中分析我们设计的程序能够实现优化3D打印机喷头的走动轨迹,使喷头能够沿着最短距离和利用最短时间来达到完成三维图形模型的打印的结果。 6.总 结 在本次研究中,我们首先对3D打印机的技术原理以及目前的发展状况作了简要的说明,并且从技术可能性和经济可行性以及用户需求分析中,我们深知3D打印技术具有不可限量的市场潜力,日后用户需求量会剧增以及3D打印机在市场的地位会越来越重要。因此,3D打印机的打印效率就成为当今选择产品首要考虑因素。我们在这样的背景和需求下,主要解决3D打印机中数据处理的环节,将三维建模的STL文件输出的G代码进行优化简化以提高下位机读取速率以及转化为下位机能识别的数据。通过对G代码的数据分析和下位机接收数据格式的分析,分析得出中间转换环节程序的实现方法。在设计这一款优化程序后,并测试运行程序后,我们将对下位机运行的轨迹数据进行分析,以图表的形式展示论证这个优化后的数据能够提高喷头打印的效率,减少重复走动的路线,节省打印的时间。 该项目之所以有无限的前景,其优势在于以下三点: 1、数据处理效率高。数据处理模块我们使用C语言编程,我们知道C语言的优点有简介紧凑,灵活方便,数据结构丰富,使用范围大,可移植性好,因此具有很强的绘图能力。另外,我们针对上位机和下位机的数据特点研究了该算法,实现了提高喷头打印的效率和节省打印时间。 2、方便进行算法修改。在处理数据环节中,结合上位机和下位机所需数据需求形式进行相应的修改,就能够设计出满足用户需求功能的算法,不仅方便更加具有实用性。 3、美观实用,操作方便。我们使用了QT开发软件包装算法,这才基本完成一个软件的特点,具有美观的界面和实用的程序。而且操作也方便,我们只需要选择自己喜欢的3D模型数据,点击一下,就能随心所欲转换数据,最终优化了数据并提供给下位机打印。 在研究这个项目过程中,还出现一些不足的情况。 1、沟通不足。我们3D打印机这个大项目总共分为三个小项目,分别是三维建模、数据优化处理、下位机驱动打印。我负责的正是中间部分的数据优化处理。彼此之间项目都是有联系的,可是数据的交流分享较少,因此缺少沟通导致项目的进度缓慢。 2、数据处理后出现误差。由于在数据的优化处理中,因为下位机暂时能处理的是整数,我们将三维建模的STL输出G代码坐标数据的浮点值是采用四舍五入的方法强制转换成整数的,这样不免出现数据的误差。我们只能进行这样的取整处理。 针对在项目开发研究中的不足以及自己的想法,我有信心这个中间数据处理部分能够设计得更加好。以下我对这个小项目的改进与展望: 1、基于数据处理后出现的误差,我们在以后需要更加精确地使用浮点数作 为下位机的运动轨迹的数据,以使打印出来的层面和立体图像更加逼真。 2、比较目前以设计实现的3D打印机,还需要图像显示模块来展示喷头在每个层面上运动的轨迹。例如可以用QT软件开发来实现这一个功能并且传输到下位机。 3、这次的项目分为三部分,完整的3D的打印机需要一次性连续操作完成从三维建模到数据优化再到驱动打印的过程,因此,这将是我们以后需要完善这个项目的目标。 参考文献 [1] 黄国光. 3D打印_数字化制造技术[J]. 数字化技术,2013.6-9. [2] 孙维峰. 快速成型_RP_的原理方法及应用[J]. 机电技术.2008年第3期.9-11. [3] 王雪莹. 3D打印技术与产业的发展及前景分析[J]. 中国高新技术企业,2012.4-10. [4] 古丽萍. 蓄势待发的3D打印机及其发展[Z],2011(10) [5] 赵保军,汪苏,陈五一等编著. STL数据模型的快速切片算法[J]. 北京航空航天大学学报,2004年04期 [6] 赵辰. 3D打印机分层软件的设计与实现[D]. 江苏:东南大学,2009.2-20. [7] 维杨. 三维数据模型及数据分层算法的研究与实现[D].2014.5-10. [8] 谭浩强.  C程序设计(第三版)[M]. 北京:清华大学出版社,2005.37-347. 附录 附录1:STL模型生成的G代码数据test.gcode ; generated by Slic3r 0.9.9-dev on 2014-03-06 at 10:52:03 ; layer_height = 0.4 ; perimeters = 3 ; top_solid_layers = 3 ; bottom_solid_layers = 3 ; fill_density = 0.4 ; perimeter_speed = 30 ; infill_speed = 60 ; travel_speed = 130 ; nozzle_diameter = 0.5 ; filament_diameter = 3 ; extrusion_multiplier = 1 ; perimeters extrusion width = 0.53mm ; infill extrusion width = 0.53mm ; solid infill extrusion width = 0.53mm ; top infill extrusion width = 0.53mm ; first layer extrusion width = 0.70mm        //--------参数设置 G21 ; set units to millimeters            //使用毫米作为打印的单位 M107                                          //不启动风扇 M104 S200 ; set temperature                    //设置挤出机的温度 G28 ; home all axes                            //移动到原点 G1 Z5 F5000 ; lift nozzle                      //升起挤出机 M109 S200 ; wait for temperature to be reached  //等待机器温度达到设置值 G90 ; use absolute coordinates  //设置成绝对坐标(即与机器原始位置相对) G92 E0                                      //设置位置 M82 ; use absolute distances for extrusion  //设置挤出机使用坐标模式 G1 F1800.000 E-1.00000 G92 E0              G1 Z0.350 F7800.000                    //z方向的厚度为0.350  G1 X79.960 Y60.960                    //该x,y值设置为原始位置点坐标 G1 F1800.000 E1.00000                  //初始设置挤出机的速度及挤出原料的长度(F:加工速度;E:挤出长度) G1 X80.550 Y60.220 F540.000 E1.03079    //(从上一坐标点移动到该点,并降低加工速度为540mm/min,在行程过程中挤出1.03079mm的打印材料  G1 X81.320 Y59.470 E1.06576            //(再从上一点移动到该点,并以F的速度,在在行进过程中挤出1.0947mm的打印材料 G1 X82.080 Y58.860 E1.09747            //以此类推 ……… 备注:由于三维模型的数据较多,这里只列出部分数据用于参考以及与程序生成的目标数据进行对比分析。 附录2:分层程序处理后的目标数据test.txt.xyz @10X@10Y@45000Z@10U@10$ @10X@10Y@3350Z@10U@10$ @579960X@560960Y@3350Z@10U@10$ @580550X@560220Y@3350Z@10U@10$ @581320X@559470Y@3350Z@10U@10$ @582080X@558860Y@3350Z@10U@10$ @582840X@558410Y@3350Z@10U@10$ @583190X@558230Y@3350Z@10U@10$ @584180X@557820Y@3350Z@10U@10$ @585150X@557530Y@3350Z@10U@10$ @585780X@557420Y@3350Z@10U@10$ @586480X@557360Y@3350Z@10U@10$ @586990X@557340Y@3350Z@10U@10$ @6112990X@557340Y@3350Z@10U@10$ @6113490X@557360Y@3350Z@10U@10$ @6114200X@557420Y@3350Z@10U@10$ @6114830X@557530Y@3350Z@10U@10$ @6115810X@557820Y@3350Z@10U@10$ @6116460X@558070Y@3350Z@10U@10$ @6116870X@558250Y@3350Z@10U@10$ @6117510X@558610Y@3350Z@10U@10$ @6118030X@558960Y@3350Z@10U@10$ @6118420X@559250Y@3350Z@10U@10$ @6118790X@559570Y@3350Z@10U@10$ @6119250X@560020Y@3350Z@10U@10$ @6119740X@560570Y@3350Z@10U@10$ @6120020X@560930Y@3350Z@10U@10$ @6120320X@561370Y@3350Z@10U@10$ @6120760X@562190Y@3350Z@10U@10$ @6121170X@563180Y@3350Z@10U@10$ @6121440X@564100Y@3350Z@10U@10$ @6121550X@564650Y@3350Z@10U@10$ @6121620X@565340Y@3350Z@10U@10$ @6121660X@566000Y@3350Z@10U@10$ @6121650X@592190Y@3350Z@10U@10$ @6121630X@592730Y@3350Z@10U@10$ @6121510X@593530Y@3350Z@10U@10$ @6121310X@594420Y@3350Z@10U@10$ @6121150X@594900Y@3350Z@10U@10$ @6120900X@595500Y@3350Z@10U@10$ @6120670X@596000Y@3350Z@10U@10$ @6120400X@596480Y@3350Z@10U@10$ @6120030X@597030Y@3350Z@10U@10$ @6119440X@597770Y@3350Z@10U@10$ @6118670X@598520Y@3350Z@10U@10$ @6118140X@598960Y@3350Z@10U@10$ @6117910X@599130Y@3350Z@10U@10$ @6117410X@599440Y@3350Z@10U@10$ @6116800X@599760Y@3350Z@10U@10$ @6115810X@6100170Y@3350Z@10U@10$ @6114890X@6100440Y@3350Z@10U@10$ @6114340X@6100550Y@3350Z@10U@10$ @6113650X@6100620Y@3350Z@10U@10$ @6112990X@6100660Y@3350Z@10U@10$ @587000X@6100660Y@3350Z@10U@10$ @586340X@6100620Y@3350Z@10U@10$ @585650X@6100550Y@3350Z@10U@10$ @584820X@6100370Y@3350Z@10U@10$ @584180X@6100170Y@3350Z@10U@10$ @583190X@599760Y@3350Z@10U@10$ @582580X@599440Y@3350Z@10U@10$ @582080X@599130Y@3350Z@10U@10$ @581140X@598370Y@3350Z@10U@10$ @580620X@597850Y@3350Z@10U@10$ @580030X@597140Y@3350Z@10U@10$ @579860X@596910Y@3350Z@10U@10$ @579550X@596410Y@3350Z@10U@10$ @579230X@595800Y@3350Z@10U@10$ @578820X@594810Y@3350Z@10U@10$ ………… 备注:由于三维模型的G代码数据较多,转换后的数据也很多,这里只列出部分数据用于参考以及与G代码源数据进行对比分析。 致 谢 本课题在选题及研究过程中得到张芒老师、叶小艳的悉心指导。张芒老师和叶小艳老师为了解决我们研究过程中需要用到的资料包括ARM开发板、部分数据资料,都无私地提供给我们用作项目的研究开发。张芒老师和叶小艳老师对于项目的分工职责以及研究方向和思路十分清晰,遇到问题时为我指点迷津,帮助我开拓研究思路,精心点拨、热枕鼓励。张芒老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,风趣幽默的教学方式,不仅授我以文,而且教我做人。张芒老师和叶小艳老师就是我航海中的指明灯,在我最困难和困惑的时候为我指明方向。对张芒老师和叶小艳老师的感激之情是无法用语言表达的。 感谢张芒老师、叶小艳老师、罗家兵老师、王淑晓老师等老师对我的教育培养。他们细心指导我的学习与研究,在此,我要向诸位老师深深地鞠躬。 感谢我的同学徐文静、邵帮柱、袁巍、彭杰、林翊、江耿亮等同学四年来对我的学习、生活的关心和帮助。 最后,向我的父亲、母亲致谢,感谢他们对我的理解与支持。
本文档为【三维数据模型分层图形传递及中间层的研究】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_965371
暂无简介~
格式:doc
大小:154KB
软件:Word
页数:51
分类:
上传时间:2019-02-04
浏览量:33