三维数据模型分层图形传递与中间层项目设计方案

上传人:奇异 文档编号:52088309 上传时间:2022-02-07 格式:DOCX 页数:53 大小:741.37KB
收藏 版权申诉 举报 下载
三维数据模型分层图形传递与中间层项目设计方案_第1页
第1页 / 共53页
三维数据模型分层图形传递与中间层项目设计方案_第2页
第2页 / 共53页
三维数据模型分层图形传递与中间层项目设计方案_第3页
第3页 / 共53页
资源描述:

《三维数据模型分层图形传递与中间层项目设计方案》由会员分享,可在线阅读,更多相关《三维数据模型分层图形传递与中间层项目设计方案(53页珍藏版)》请在装配图网上搜索。

1、三维数据模型分层图形传递及中间层项目设计方案1. 前言1.1 课题研究的背景和意义快速成型(RapidPrototyping,简称RP技术是20世纪80年代后期发展起来的一种先进制造技术。二十几年来,该技术在国得到了迅速的发展,应用领域不断扩大。此技术已广泛应用在机械、汽车、航空空天、电子等行业中,取得了显著的效果。快速成型技术采用离散堆积的工艺原理,该技术非常适用于形状复杂的不规则零件的制造,使得零件的复杂程度与制造成本基本无关,成功的实现了设计与制造的一体化,解决了CAD三维造型“看得见,摸不着”的问题。快速成型的方法很多,典型的有:SL(光固化法)法、LOM(层迭法)法、SLS(选择烧结

2、法)法、FDM(融堆法)法、SGC(层固化法)法等。这些方法各有优缺点,然而这些方法有一个共同的缺点:成型时间长,而且成本高,一般的中小型企业难以承受。近年来,国外又推出了一种新的快速成型方法:3DP(三维打印法)法。而采用了3DP方法的快速成型设备被形象地称为3D打印机。3DP法成型速度比其他技术快510倍,其他快速成型设备两三天才能成型的零件,3D打印机几个小时之就可以完成。3D打印机成本低廉、设备占用空间小,可以成为设计师办公室的办公用品。更重要的是,由于以上的优点,三维打印法能够普及性的改变传统的零件设计模式。传统的零件设计都是二维的三视图,以致现在的一些优秀的设计软件(如UGPro/

3、ENGINEER等)虽然能够给设计者立体视图,但是还是没有实现真正的模型设计,客户还是摸不着,而只是概念设计。而3DP法将会使得实体(模型)设计成为可能。用通用的软件,如Pro/ENGINEER设计的零件,只需利用3D打印机分层软件进行切片处理,然后通过数控系统指挥打印机一层层打印。不用多长时间,真实的三维立体模型就会出现在设计者和用户面前。这样就可以大大节省开支,减少不必要的浪费。而且还可以加快产品的开发,迅速占领市场1。1.2 3D打印技术介绍3D打印技术,是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。3D打印机则出现在上世纪90年代中期

4、,即一种利用光固化和纸层叠等技术的快速成型装置。它与普通打印机工作原理基本相同,打印机装有液体或粉末等“印材料”,与电脑连接后,通过电脑控制把“打印材料”一层层叠加起来,最终把计算机上的蓝图变成实物。如今这一技术在多个领域得到应用,人们用它来制造服装、建筑模型、汽车、巧克力甜品等。1.3 3D打印技术的原理3D打印是添加剂制造技术的一种形式,在添加剂制造技术中三维对象是通过连续的物理层创建出来的。3D打印是断层扫描的逆过程,断层扫描是把某个东西“切割”成无数叠加的片,3D打印就是一片一片地打印,然后叠加到一起,成为一个立体物体。每一层的打印过程分为两步,首先在需要成型的区域喷洒一层特殊胶水,胶

5、水液滴本身很小,且不易扩散;然后是喷洒一层均匀的粉末,粉末遇到胶水会迅速固化黏结,而没有胶水的区域仍然保持松散状态。这样在一层胶水一层粉末的交替下,实体模型将会被“打印”成型,打印完毕后只要扫除松散的粉末即可“刨”出模型,而剩余粉末还可循环利用2。专业.专注图1-13D打印机1.4 3D打印技术发展前景以及应用近年来,3D打印技术持续发展,成本的大幅降低使其已经从研发的小众空间向主流市场进军,发展势头不可阻挡,已经成为社会广泛关注、民用市场迅速崛起的新领域。3D打印制作的模型、礼品、纪念品乃至工艺品的应用,极大吸引了社会关注和投入,发展加速,市场开始呈现量与质的双飞跃。据预测,2020年3D打

6、印成品将占产品生产总量的50%随着3D打印技术的不断突破,新材料的日益改善,3D打印的速度、尺寸在不断提高,其技术在不断优化,应用领域在不断扩展,特别是图形艺术领域的潜力,三维的概念模型能更好地传达制作者的想法或解决方案,一图可以胜过几百甚至上千个文字的描述。专业人士坚信个性化或定制化的3D打印可以将一个所想象的三维模型即时摆在眼前,能够快速改进产品,增长幅度将超过想象,将会改变社会各种应用的未来。3D打印技术将淘汰传统生产线,缩短制作周期,大大减少生产废料,所需原材料用量将减少到原来的几分之一。3D打印不仅节约成本,提高制作精度,也将弥补传统制造的不足,并将在民用市场迅速崛起,从而开启制造业

7、的新纪元,为印刷工业带来新的机遇3。3D打印的应用领域越来越广泛,目前主要应用于工业、医疗、建筑、航天、机械制造等行业的模型制作,包括精密的医疗器械和工艺品等。在建筑领域,3D打印机能够为曲面异型建筑的重要精密构件快速制作精确模型,实现传统建筑模型制作无法达到的工艺水平,甚至可以“打印”出一栋完整的建筑。在地理空间领域,3D打印机可以轻松将GIS数据转化为三维地形及城市景观模型或沙盘。在教育领域,3D打印机能够将抽象概念带入现实世界,将学生的构思转变为他们可以捧在手中的真实立体彩色模型,令教学更为生动。在娱乐艺术领域,3D打印机可以根据电子游戏、三维动画以及其他创作产生的三维数据轻松制作自定义

8、头像和雕像4。专业.专注2. 需求分析2.1 Solidworks三维建模软件介绍Solidworks三维建模软件是将计算机技术与工程设计结合起来的数字化、智能化的设计平台。目前在各企业中深入广泛的应用三维设计技术,相比传统的手法,更大程度地提高了设计质量和缩短了工程周期。Solidworks软禁具有全面的零件实体建模,是一款功能强大、方便快捷的三维设计软件。它大致可以划分为以下几个板块:草图绘制、三维建模、钣金设计、焊接件的生成、模具设计工具、装配体、工程出图等众多模块。2.2 可行性分析2.2.1 技术可行性通过Solidworks三维建模软件设计出的模型,能够对立体图形进行分层,按照一个

9、方向(如Z方向即立体图形的高度)我们从图2-1中直观地看出立体图形每一层的层面信息,三维软件最后会导出该立体图形每一层面的每个坐标点的信息数值。另一方面,下位机需要接收的数值格式是由我们自己定义的,例如字符表示开始读取坐标值,$字符表示读取每一行数据后停止,即读每一个坐标点后停止。因此,鉴于Solidworks三维建模软件最后导出的图形坐标数据在运动轨迹重复性和时间长问题,我们可以用C语言设计程序来实现数据的转换,已达到大大降低成型时间的目的。图2-1三维立体模型图2.2.2 经济可行性设计一款产品,我们还需要看它能否给我们带来经济效益。这个主要是由成本、性能、售价决定。越低的成本、更高的性价

10、比决定了这款产品的市场位置。我们设计这款数据转换算法程序需要的成本非常低廉,还可以免费提供给用户使用。因此,我们确信无论在技术上还是在经济可行性上都可以俘虏用户的心。2.3 软件需求分析我们设计一款产品前,首先需要先对其技术可行性、经济可行性进行一定的客观分析,另外,一款产品被设计出来,有需求才有市场。产品在市场能够建立起根据地主要由两个因素决定:需求和竞争。尽管3D打印技术在国的发展处在一个起步和研究阶段,但是结合3D打印技术的发展前景和应用领域,我们可以看到三维打印需求量是非常充足的。在如此竞争激烈的市场环境下,用户会优先选择高性能、高性价比、高速率的产品,因此我们这个项目设计能够提高产品

11、的生产效率以及节省生产时间,无疑对3D打印技术的发展起到促进的作用,有创新才有进步。2.4 QT和QTCreater介绍Qt是一个跨平台应用程序和UI开发框架。使用Qt您只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。QtCreater是全新的跨平台QtIDE(集成开发环境),可单独使用,也可以与Qt库和开发工具组成一套完整的SDK(SoftwareDevelopmentKit,即软件开发工具包)。其中包括:高级C+弋码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。直观的C+谈库:*K块化QtC+铁库提供一

12、套丰富的应用程序生成块(b1。ck),包含了构建高级跨平台应用程序所需的全部功能。具有直观,易学,易用,生成好理解、易维护的代码等特点。跨桌面和嵌入式操作系统的移植性:使用Qt,您只需一次性开发应用程序,就可跨不同桌面和嵌入式操作系统进行部署,而无需重新编写源代码,可以说Qt无处不在(QtEverywhere)。使用单一的源代码库定位多个操作系统;通过重新利用代码可将代码跨设备进行部署;无需考虑平台,可重新分配开发资源;代码不受担忧平台更改影响的长远考虑;使开发人员专注于构建软件的核心价值,而不是维护API。具有跨平台IDE的集成开发工具:QtCreator是专为满足Qt开发人员需求而量身定制

13、的跨平台集成开发环境(IDE)。QtCreator可在windows、Linux/X11和MacOSX桌面操作系统上运行,供开发人员针对多个桌面和移动设备平台创建应用程序。专业.专注3. 系统总体设计3.1 功能分析STL模型的分层处理在3D打印机快速成型中起着非常重要的作用。通过分层数据,客户不仅可以了解快速成型的制作原理和过程,而且可以对CAD真型的错误进行快速成型任务提交前的检验。指导CAD真型数据白修正。STL模型的分层处理就是根据用户输入的分层方向和分层厚度,求取一系列切平面与STL模型中三角面片的交线,并将首尾相连的线段组成一个个轮廓,同时还要判断轮廓是否封闭。STL模型是用小三角

14、形面片对原CAD真型的一种离散逼近,一个STL模型少则包含成百三千,多则有数十万个三角形面片,所以分层算法效率的高低就成为影响系统适用性的重要因素。分层处理一般包含两个步骤:即平面求交和线段轮廓归并。所以影响分层速度的因数主要有两个:一个因素是在求取每一层的轮廓线段时,都要判断每个三角形面片与切平面的位置关系,若相交则求交线。与某一切平面相交的知识少数三角面片,而大多数的三角面片与该切平面是不相交的,因此大多数判断属于无效判断,浪费计算时间。另一因素是完成三角面片和切平面求交运算后,要对所得交线进行排序,以生成封闭轮廓线。当一个STL模型包含大量三角面片时,用一般算法进行交线排序,其处理速度将

15、非常慢,必须研究特殊的快速分层算法,如先对STL模型数据做一些预处理再进行切片处理,以提高切片效率。另外,我们还可以对STL数据的每个切片的打点轨迹进行优化,以提高二维打印的效率5。正是基于STL模型分层算法的繁杂性和耗时性分析,我们很有必要设计一款能够简便性与耗时短的程序,在STL模型分层算法的基础上进行改良优化,以此来提高三维模型快速成型的速率与效率,因此,我们运用数学建模的思想、换位思考思想以及算法效率方法对我们的STL模型数据进行转化,尝试转换成下位机能够识别接收和驱动的数据。根据展换后的数据的喷火的运幼轨迹根据隹换前的麦咖的3D打印机唉女送5轨迹图3-1数据转换前后喷头运动轨迹示意图

16、从图3-1数据转换前后喷头运动轨迹示意图中,我们知道这主要是粗略说明转换后的数据的3D打印机喷头的运动轨迹要比转换前的运动轨迹要短。我们根据科学的事实知道三角形两边要大于第三边以及直线距离最短的常识,由图中我们发现,每两个三角形之间都会有重叠的边,这样喷头在某一层面上从起点开始到回到起点的这个封闭的轮廓线的过程中,已经远远重复走过已走过的轨迹。而我们就是要考虑把这些重复的线和坐标点删除掉,剩下的就是各自独立的坐标点了,然后将这些坐标点连起来就形成了一条有向的直线了。另外第二个要实现的功能是通过串口从PC终端中发送已经优化处理过的数据到单片机以实现传递分层图形数据的功能。那么我们就需要对串口进行

17、设置,以及显示发送的进度。结合以上数据转换程序以及传递分层图形数据的两个功能,我们可以使用QT强大的功能来完成这个软件的设计,不仅美观,简便,还能使各功能模块结合起来。下图3-2为软件功能结构图:图3-2软件功能结构图3.2 设计分析明确了3D打印机中间层软件的功能需求后,就需要进行方案的论证和系统的设计。软件的设计是以一定的方法为基础的,对于3D打印机中间层软件这样一种相对复杂的软件开发任务,设计中根据软件设计的模型,从用户需求和系统要实现的任务功能出发,主要遵循了以下几个原则:易用性。程序要尽可能简洁而又满足需要,要有良好的防错和容错性,同时具有良好的接口,便于将来升级时,其他开发者能很容

18、易的掌握和运用;高性能。要在保证程序正常运行的情况下,要尽量减少程序所占用的存空间,提高程序的运行速度。这与程序中数据结构的设计有关,同时与简洁、优化的程序代码有关;模块化。把整个软件划分为较小的模块。设计中各个模块之间的逻辑结构相对独立,这种模块化设计使得各个子系统之间相对独立,更加便于系统的调试,提高了系统的稳定性,同时也为软件升级大大提供了方便。3.3 软件功能模块化设计分析3D打印机中间层软件采用结构化、模块化设计。模块化是将系统总功能分解为若干个功能单位,各个功能单位被设计成为相对独立的模块,通过相互转移调用的约定(即接口)方法,把它们连接起来。这种设计方法的优点是:系统设计简单、结

19、构紧凑、整体性强、开销小、效率高。在软件设计模块化的同时,每个模块同时使用层次化结构,各层之间是单向依赖关系,不构成循环。这种层次结构的显著优点是:在设计低层软件时,可不考虑高层软件的实现方法,各层间独立性强;高层软件的错误不会影响到低层软件中,从而方便软件的调试、维护、修改和扩充;软件不会产生递归调用,避免了死锁的发生,提高了系统的可靠性。整个软件分为三大模块:数据转换模块、数据显示模块、数据传输模块。图3-3是数据转换模块框图:专业.专注图3-3数据转换模块结构图3D打印机快速成型可以分为离散和堆积两个过程,如图 3-4所示。r层片加工控制信息物理实现过程(堆税过程)实体模型图3-4 3D

20、打印快速成型的基本过程专业.专注离散过程将CAD真型沿某一方向(如Z方向)离散为一系列的二维层面(称为分层或切片),得到一系列的二维平面信息(截面信息);分层后的数据进行进一步处理,根据不同工艺的要求将这些信息与3D打印机数控成型技术相结合,生成代码在微机控制下,数控系统以平面加工方式,有序地连续加工出每个薄层,并使它们自动粘结而成型,从而构成一个与模型与模型相对应的三维实体模型,这就是堆积的过程。从图3-4可以看出,整个过程可以分为数据处理和物理实现两大步骤,其中数据处理主要完成三维模型的离散功能,而物理实现则根据离散的层片信息完成实体的制造。3D打印机数据处理技术可以接受和处理任何一个CA

21、D系统输出的三维模型信息(如STL文件格式),对CAD真型进行分层,最后处理成层片文件格式送入3D打印机中。3D打印机接收经数据处理技术处理后的层片文件进行快速成型制造6。快速成型数据处理是RP技术的第一道环节,也是最重要的一个环节。快速成型数据处理的方法及精度直接影响成型件的质量。RP数据处理由软件系统负责完成,因此分层软件作为CADEijRP的数据转换和处理的接口,是3D打印机的灵魂。各大3D打印机生产商一般都开发自己的分层软件。由于CADWRP接口软件开发的困难性和相对独立性,国外涌现了很多作为CAMRP系统之间桥梁的第三方软件。这些软件一般都以常用的数据文件格式作为输入输出接口(如ST

22、L文件),而输出的数据文件一般为CLI。比较著名的一些第三方接口软件有美国SolidConCept公司的BridgeWorks、SolidView,比利时Materialise公司的Magics,美国POG公司的STLManager,美国Imageware公司的Surface-RPM等7。3.4 STL文件的读入与分析由于STL格式具有易于转换、表示围广、分层算法简单等特点,为大多数商用快速成型系统所采用,现已成为快速成型行业的工业标准。STL文件存在ASCII和二进制两种格式,在读取和分析STL文件时需要对文件类型进行判断。完整的STL文件读取和分析流程如图3-5所示。ASCII文跺吼ASC

23、II方式 打开STLi#蠲取文本文样第一疗字特率分析是百品打开的STL文件班二进旬方式富步打开寸TL文件关闭以59C口方式读取文件头和三角蹄献片教.是或二避词方式施我和分蜘层片数邦以文本方式选取和分析层片蛀搭关隔啜ASCI工方式 打开的STL文件美用以二进制方式打井曲STL文伴图3-5STL文件的读取和分析三维建模软件生成的STL文件最终会输出为G代码,G代码里面的数据包括建模时各种参数的设置,以及构成三维建模的各个三维空间坐标,而每一行代表的一个三维空间坐标的坐标值。以下为G代码的部分数据容:;generatedbySlic3r0.9.9-devon2014-03-06at10:52:03;

24、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;perimetersextrusionwidth=0.53mm;infillextrusionwidth=0.53mm;solidinfillextrusionwidth=0.53mm;topi

25、nfillextrusionwidth=0.53mm参数设置使用毫米作为打印的单位 不启动风扇 设置挤出机的温度移动到原点升起挤出机;firstlayerextrusionwidth=0.70mm/G21;setunitstomillimeters/M107/M104S200;settemperature/G28;homeallaxes/G1Z5F5000;liftnozzle/M109S200;waitfortemperaturetobereached/等待机器温度达到设置值G90;useabsolutecoordinates/设置成绝对坐标(即与机器原始位置相对)G92E0/设置位置M82

26、;useabsolutedistancesforextrusion/设置挤出机使用坐标模式G1F1800.000E-1.00000G92E0G1Z0.350F7800.000/z方向的厚度为0.350G1X79.960Y60.960/该x,y值设置为原始位置点坐标G1F1800.000E1.00000/初始设置挤出机的速度及挤出原料的长度(F:加工速度;E:挤出长度)G1X80.550Y60.220F540.000E1.03079/(从上一坐标点移动到该点,并降低加工速度为540mm/min在行程过程中挤出1.03079mm勺打印材料G1X81.320Y59.470E1.06576/(再从上一

27、点移动到该点,并以F的速度在行进过程中挤出1.0947mm的打印材料G1 X82.080 Y58.860 E1.09747/以此类推我们很明确地知道我们只需要将G代码里面的XYZfi坐标值帅筛选出来就可以了,因此我们可以忽略掉出现三维坐标值(X,Y,Z)前的各种参数设置以及数据中出现的空格字符“我们细心就会发现,G代码数据参数设置前都有一个分号“;”,利用while循环语句和if条件判断语句遇到空格字符就跳过,以及遇到分号“;”就不处理这一行的方法实现。3.5 下位机需要获取的文件分析5OZ)10010$|=960*耳585。0*350工加口工口$131320X|S947OY|35OZ|0U1

28、0S1B&2OeDX|se8&OY|35OZ|DlF10531s2S40X|3841OY(Si|33OZ(Si|dU(310$4cls3390Xi|5a23O|35OZ|0U105SS41d0XS782OY|35O2|0U10$50Xj|5753OY(ffl|35OZ(|0U(ffl10$8337昌口X|157aZOY|35OZ|口U工0$gI&G4SOX国,57M60Y013soz9口U1g图3-6下位机能够接收的数据形式已知图3-6为下位机驱动模块能够接受的坐标值数据形式,我们首先要对该数据形式进行分析,包括各个字符、数字以及文件的类型,详细了解该数据中定专业.专注义的字符和数字表示的意思

29、,才能确定软件设计程序各功能的总构架图,以实现将STL文件导出的坐标值转换成下位机驱动模块能够读取坐标值的另一种格式文本文件的功能通过图3-6中对数据颜色鲜明的标注,我们可以容易地分清楚该数据格式的构成。我们在设计特定功能程序前,了解分析源数据和目标数据的构成是很重要的,才能制定功各部分功能和运用所需要的函数。下位机能够接收的数据格式为:+X坐标值位数+X坐标值数值+Y坐标值位数+Y坐标值数值+Z坐标值位数+Z坐标值数值+U值位数+U值数值+10$下面对这个数据格式进行说明解释。当下位机从左到右顺序读到字符的时候就开始读写其后的X数值、Y数值和Z数值。U表示的是打印的延时时间。我们在程序中设置

30、了当读到$字符的时候,每一行的坐标值读取程序就结束。然后开始下一行坐标值的读取,也就是下一个坐标点的读取。:程序开始读取这个字符后面的对应坐标值X、Y、Z;X:每个点的X坐标;Y:每个点的Y坐标;Z:每个点的Z坐标;U:打印延长时间,也就是两个坐标点打印所需要的间隔时间;$:读取每一行数据后停止,即读每一个坐标点后停止;为了简要说明以上目标文件每一行数据对应的坐标值的转换方法,特意连续选取这三行数据做一个基本的转换说明。例子:10小%5000210皿$(0,0,5000)1。40%350210次$坐标值(0,0,350)579960#60960%350|10口$坐标值(79960,60960,

31、350)3.6 G代码转换成下位机格式数据的过程分析由以上3.4STL文件的读入与分析和3.5下位机需要获取的文件分析中我们明确了我们程序开发的目标是要将两种数据格式进行提纯转换输出。数据转换算法这里涉及到三个方面的容:判断XYZ标字符并读取坐标值;对坐标值进行优化处理;以固定格式输出文件。判断XYZ标字符并读取坐标值在这里为了判断XYZ字符我们使用switch多分支选择语句进行判断,同时在正确判断到XYZ字符时,我们还使用atof()函数将字符串转化为浮点数。以下图3-7为switch语句判断XYZ坐标流程图,相对应的程序代码为4.2.2数据读取模块这部分。专业.专注即四舍图3-8五人取 的

32、程序 标值数图3-7switch语句判断XYZ坐标流程图对坐标值进行优化处理由于下位机能够接收到的数据需要以整数的形式出现,我们还需要将浮点数转化整数,并且在取整的过程中我们要保证输出的数据位数控制在5位以,以提高喷头运动轨迹的准确性和缩小误差围。因此我们必须要对坐标值做优化处理,否四舍最后一&M强是否大于等于5五入取整。以下为坐标值四舍整流程图,对应代码为4.2.3坐据转换模块。图3-8坐标值四舍五入取整流程图以固定格式输出文件由3.5下位机需要获取的文件分析我们知道下位机能够接收的数据格式为:+X坐标值位数+X坐标值数值+Y坐标值位数+Y坐标值数值+Z坐标值位数+Z坐标值数值+U值位数+U

33、值数值+10$,特别注意的是还要求取XYZ坐标值得位数,对应的程序代码为4.2.4格式化输出坐标模块。4. 软件的模块化设计4.1 文本文件操作相关概念数据流:指程序与数据的交互是以流的形式进行的。进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。缓冲区:指在程序执行时,所提供的额外存,可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为存的存取速度比磁盘驱动器快得多。C语言的文件处理功能依据系统是否设置“缓冲区”分为两种:一种是设置缓冲区,另一种是不设置缓冲区。由于不设置缓冲区的文件处理方式必须使用叫低级的I/O函数(

34、包含在头文件io.h和fcntl.h)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是C的标准函数,跨平台操作时容易出现问题8。因此,我们使用设置缓冲区的文件处理方式。当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区,然后程序再从缓冲区中读取所需数据。当写入文件时,并不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘。如下图4-1所示:专业.专注从笔冲区读取数写入文件打开文件读取数据图4-1文件的打开、写入文

35、件美用文件读写、关闭过程示意图4.2数据转换模块4.2.1初始化模块ConvConeitInitJtCorvConext*cxtrchar*argaE(chsr3ZutFile256=0;/定义一公致组用采存兼效据妙505152S34Sf.5P753596061263E4655S6r6869TO717273ext-fplnNCLL;cxr-tp-Out-MJLL;cxt-cujrd.a=0.D;cxrCQsrd.i-O.OrCJCtcQord.z-D.10;cjetlaatacod.e=0.Of;ext1astccnrd.y=0.Of;cxt-la5t_ccord.z=0.Uf;ifJarcj

36、3rOl=NULLlReportEzrorL参数错误);return-1;sticpiJsstXitFile,args0);street(azGutBlle,.xz);cwtfpTut-fapen(jiOut-Eil:wr,);if(cxlpCutNULL)(ReuortEmcrb打开输出文件错误J;retarn-2:/初始比坐标蟆00/戋写的方式打开专业.专注/,以隶的万式打开Z=foferarg30f*rF|.if(cxt-fElr.NULl(Jfeportlrrox(打开输入文件错误?return-i;return0;图4-2初始化模块程序代码图4-2这个模块是用来初始化X、Y、Z的坐标

37、伯:,使用fopen()函数打开文件,并且判断输入输出文件打开是否成功,失败则返回错误信息。如果打开成功,我们将给文件添加后缀.xyz,当所有的数据都读取出来后,生成的存放转换后数据的文件的后缀就是.xyz了。4.2.2 数据读写模块124mecLri2_&c1,tcextintazgechar*afge12&(mt工int1:127ahariacrhar*ssValue-129dobloifValue;130nlifliFpr?fiJEfiytc151Xcr1工=;Karg-x+)132曰1133.*g=*gs;1J?口”白xBy-TIP0,sw1tern(pref1x3yceJ.wi:cr

38、:金与f承3聿kJY.rZ13Et3!1137::SAD1K1ruaciaaa1Xt3iit14011fValui-occf忆工7dlMm.1叮羊尸r工片LX:节市S1cok工-KocEd.jt=rvalu#;1/S3-ii)144:break:工电5j:ctase1y1;1-56case1;工”h:l18-;=;3七炉uluu=fli工q+1:二弓争Vu.iiw=as工iivalaftj:7型工咚声一质学点,ISOCKtcoczd.y-fValae;131IIH2trmlLl1S3Ca3E士:IM色&号。hZ!1553!:i1943:7alueBrg*;1STVolui-c=fszValue

39、J:/三手芒串莠史无产门董15BG:-CCEdi.3-15?-1MJ160breax;1:-iIdr)图4-3遍历文件读取X、Y、Z坐标值图4-3代码使用了for循环语句和Switch语句来遍历整个G代码文件数据,通过switch语句来判断遇到大小写X、Y、Z字符时,使用atof()函数将字符用转化为浮点数,把转化后的数值输出到目标文件。这样就完成了对G代码中的数据的读取了。1C2S3 的65 号6 87 SB 39 SO Si 32 5395 5657 ?a100 101 02 103 LQ44.2.3 坐标值数据转换模块/*将浮点坐标转生为整数,整数存在扣下接揖:保备3拉有效小整工如,A3

40、4-转化后为3Lt3S转我后力;1E4-MintCooxdToOatStrir.g(GhciT*bufjintjwxlcnfdoiiblcintd,二。Ltn1BlIohqLTerj:langIValuc;“首先寝淳点转史为整款,并先保翌因拉小赎数字lTsitp=(1U11LJ)如1”二*工0。卬,;盘洌费=一也小效*01f(lTemp%lCi=5).(jLValue=SIGN(lTCTV*(lTenp/10+l;)alcB(!lValue=SIGNaTtn*tllMBD/10);,二安:三.一百寸三.L七台白(工Va二UEPBUr_!:returnstrlen(bjf):图4-4对浮点型数据

41、进行四舍五入处理如图4-4所示,我们考虑到下位机能够接收的数据位数需要控制在5位以,以及方便数据的读取,我们在程序中将浮点坐标转化为整数并且保留三位有效小数,如数值为0.1234的原始坐标经过转换后,我们处理为123,而1.1235则转化为1124,这通过对原始数值放大10000倍来实现。4.2.4 格式化输出坐标模块:3二。二二?二,成也就麒我姓毅师nid Mhtat 湎at|:Mat嗦 *x M 则卿。叱叱d)IIdur i str nl|32 j rti 皿国1131r 叫R;iot 二f 口二? if:把 i二;记 i1婀由 X!血 To世如叫也 立 用自咂巾 口钳1)仍已况力;B把1

42、口匣)/:匚盅工间匕nr叫riwofq K Till/:作用力;3日山闻:足r注刁I 3:r U1,簿BJi;臂:W: . l门工一次.1a 不H/ k谶鼬眦尤c础叫G上匠曰.二,埴毗滥郭二J:通西小二门二一二1ifJE.n比二31,1st电力睥制vj37叫naitsz.i-:iial!图4-5格式化输出代码我们在分析了下位机能够接收的数据格式的基础上(即格式为:+X坐标值位数+X坐标值数值+Y坐标值位数+Y坐标值数值+Z坐标值位数+Z坐标值数值+U值位数+U值数值+10$),设计了程序中的格式化输出函数输出的格式为上述格式。同时,调用Coord_To_OutString()函数实现读取坐标值

43、XYZ的数值位数,最后按照以上格式输入坐标值位数与数值o4.2.5 去重坐标模块产(cx-coo(EdT!=cxt-Lasccoord.*ff判既褥个坐标值亳芸,玲君II-(ext-cccrdy!=cx;-139_33ord.y)|III-(ext-cocrd.eXcxc-Laa:_eoord.z)!i一(/fpriziHt匕JJf,IfT.n*jdt-GCZTd.JCr:-3GCFQ.yrcztcj?Drd.z);CoEc二血二厂型二(尔.,inegpi14cxz-1扪二一二匚二工r占二同二-Xjo!,sizeof(ext-co:):I-reLBta0:图4-6去重坐标代码如图4-6去重坐标

44、代码中所示,通过if条件判断语句当X、Y、Z中任何一个坐标不相同的时候可以覆盖原有的坐标值。4.3数据显示模块4.3.1源文件界面显示源文件文件效据优化优i民果物出文件通抵文件选择:源文件:我力醺耻生dbySliclr0.99-devon201l-03-06it10.52.03:lscrerji图4-7源文件显示模块如图4-7源文件显示模块界面包含了 “文件选择”“源文件”等label标签控件、”文件选择“按钮以及文本显示模块。利用信号与槽函数,当我们点击“文 件选择”按钮的时候,会触发槽函数OnUserChooseFile(),即用户选择文件函数。同时判断当前数据源是否改变和用户选择的文件是

45、否有效两个值来决定我们 是否更新数据源,有效则选择我们指定格式的文件进行打开,输出后缀格式为,做1H:, i IT加JXwm i 卜”】L A-Sl:_CTS5SE*inji4 (jf._j? =L1-钻i!t m?电二,,1,:;.*二二x: 南岫莉醺J陛药葭i .-.1;g工1 阴t;/flit! ; 13箫li工SQMWG”用户利版曼髅11建uxe JiDqKy )渊IKKtfl XFlUtlKT丙!r oE:d厚:e%wxhidi+=0.4;pTiib4t4!rz-3st&;_stiLid_Layer5-3:bottixnsolidelayers=3:fill_density=0.4p

46、qtimat*r_cp&od.=30,ikiLl_3ipecd-E0:trLVil_pMd-130,n&zl*_dimeter=0.5:m*t*r=3fiHtFJIsitijlicr营I,*缸哥5extrxisionviith谷Q.Smi:iiiiiUextrusiQiUwidth=015311nlisolidinfilleximiQnvifth=3.53hiirto-piinfillaxtrcEion.vi3th-0.三3rwifljstLayeiejilxtis.1.vu.Widllis0.TlDbirn伊I*uni+5e-pUiIthl5j;8n口际|1aleCc弓K衽二生*二日LML:

47、IJAE二3TlM&e工循个3?jle:O);couBotfthi3,SIGlUL(SXGJtaSourzeChazaed(GStEinut)Ltbi3rSLXXt(refre?hScurK(i);1J* tar4iijet_cri;er:191delete葭三2* JSzrinjrjFLLc;:gec7i1ci;oisrccPathIiA-2:二二jE3tiriie52UTce;2723)W9二口/TzidzcJzWidgetSzcFz.1*;:Ttfrah3u;rce(QS3-riugfistrSow)lr2dcir;2j-eirriiyarrFI=;rilestrSource);tl-i

48、l.-e.3p=n2Fz.Lz:tidCnly);dif(hlznie381azrFle-ile.rtaiLlliI;ji.i.(a-Ftlg-oaimtI)、二i於t二二的itrTiaarrxle;m-MbSr*orit*JaZBI口UVI”人岫11白眠州啊弓白仃四*|斯耳。m,ouwioflBIDEBTDKVS5BI3DHI333DX9IJHIDfribUTEI口工妙如:iijifeJ3EDZri.iDij1i.aiBOIIQgElMEM也UlTEgS口杷IDUI咐gki白心:口X骷弓心知笳知会i仙OfREIF73DKff5595.7nYI335.DZlDlUtl0】agh口鸡口口口ama

49、aaEDZdiolx叫PEII974DWt?5n77n!fa33FDZBI口皿1McoiEdmusmmm如nan口舌ei口u?iHBalD3DHiKB-1MISHE-I讪倒”IQIEmt:nxr5G219nTI315DZVIDIJitloiV1I图4-9文件数据优化显示界面由图4-9文件数据优化显示界面所示,我们可以直观地看到源文件坐标数据经过优化处理后的数据,而优化处理后的数据正是数据转换模块实现的结果,这个数据转换的程序就像一个黑匣子,我们看不到里面工作的过程,但是可以看到这个程序的结果。以下图4-10为目标文件文本显示代码,这与源文件数据显示模块一样,定义了一个tbSrcContext对

50、象,调用setText()函数显示文本信息。J七二日tabWidgetDst.File:slefreshreiQStzingweuzce)boolbljQEytaArrayaTrFile;21QFi.lefilein&wSource);bl=frle.皿立修/QF工工e:s士威企五工3;工岑工工(bl=XUC)i27Ia2rrFile.-file.readAll);之二ifIarzFilecaunt030fQStzingatrText|exzFi.le;ui.-tbSxcCentcxt-ctTcxt(atxlcxt;图4-10优化数据后显示模块代码4.4数据传输模块三iaiK事M应分M的淞情调

51、疑中向氏浜蜿【盼。片文,宜神州樨比优_优化毡*国出牢匚曰近;年Cis称:*ll.球力军I-3.文中g却IK小B讨三益it:hr*Tan图4-11数据传输模块界面如图4-11所示,这个软件还包括数据传输模块,用户可以通过用口将优化后的数据发送到单片机用来驱动电机走动。我们需要在QT中设置串口的名称和波特率,在点击“打开”按钮后,我们可以点击“发送数据”按钮,这时会显示文件信息,包括文件的大小和已发送的字节数还有一个进度显示条可以显示发送的状态以及进度。tatwi3getSe-rzaicmc:ceBWldget:5eTlalDu.t-Wi3gec*parent|:QSiidaet(pazsutr)

52、1PILJtlx(n.BfJi:StafeXldgetE电Ei,巨工Outi1(thin);ux-mtn-stEnabd(r*守标):”事件connect(kii-bLn3ejuiH3IG17xL(1.cked()卜*。k-j*SLOT(0neial5end()0;rnect(ui-brpei:f3TCir.L(zllokcd()i,下|:二,SLOT(OnScrialCpe(j)j*碑走统可用用口口活(int1;QStxngstrVal,?QLisl-13t3cxial&匚与u二上ciLE口匚七二nf口;aval1atL=Earts(1;dt(i-D;ilatSerial.courLt;i.

53、44Z5ba2erLelilaTLe:-m3eEiE,Ie(i.Ist3eiial.ae|x).potMfiii():;13L)W|Lia1aud*QUeialPoxLlnfo;:jlarkdaxdfflaudRates|1;3:for(1=:1工日tBsa曰.uumtt;i十)i344strVal=525tring|11_arj|IstEa,orj.at(1);ul-cbc5eric13aUi-1nserIten:11,5cr*/al,QVarlancf18匚Bud己:(1)l-z二)jif|JL-abeSexiallJajM-coimEI04ai-cboSpti.1Masw-i*tCutI

54、ndew|0)耳二工ifli-cbaScTislBQud-Gountl043JL-cbeSeri=ISar-in-5setCurrent:Inaa|;#&.bWidgiietnS6x,i.*ic:bQ5ria1Ne5nc-gurxcjitTcxt()rband(itituii-ocba5elalBa!d-eDxren&it-ii).七白Hat(3/FIS口工作柔宴盅affpa工电Maj&eJuflilJEfuy|J工三匚一1:j七二JifjPcm.二mgen门9(70m_Porr.close);71)1273/J配置博口参数74mPort*sst?ortJTar:e:poxtNime);75m

55、_Port,BttBajdRate:baud1;76m_Port,setDa.aSits;Q5eriBlFort:Data8);77mPort,setFlowControl(QSerialPortiiNoFlwCoctroi);7Sm_Port.setParizy;Q5erialFcrt:iNofarity:7grrPort,BttSDflpSits:QSeriJlEcrt:CneStop)eobl=m_P3r-.3pn(QSerialPczt:WriteCnlv)一jifblfalsJ2(03QMessajeSoxnsgEox;E4msifBox.setTextnL打开串口失败);G5sgB

56、:xsetjtandazdButbcns(sagejK;;3ki;6setDeTaultBjtton(Kessage3ox::?ki;7cr;sffB3xsetIconOMesaageDox:Critical);88inagBox.ejce(J;S3ui-tSend-setEzabled(izil?e;;90ret;urn;91二二Jelse93(94ui-totnSend3etEnabLed(tru);959697198,ozdtabWidget_SerialOut;:seDest5o-UEce(QStriniytdest)1001101801El;102rr.strDe315ource=dest;103GFilefile(n3trDestSource);10bi=cxie.openiQm&:;Readonlyiqflis;:rexz);IOSui-tniGpen-SractEnabled(bl);106ui-btnSend-BetEnabled(m_Port.isOpenO);1071081Z0111112113114115Ll117XIS11912112212312-1125LEE127129130131132133.135J13713fl139JM

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!