离散过程将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所示。
11
图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
12
; 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:加工
13
速度;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 下位机能够接收的数据形式
14
已知图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代码转换成下位机格式数据的过程分析
15