基于虚拟仪器的3D打印系统的制作方法

文档序号:15591473发布日期:2018-10-02 19:00阅读:234来源:国知局

随着3d打印技术的快速发展,3d打印的应用领域和系统构成得到了长足的发展,在制造领域当中,虚拟仪器技术有着开发快、调试便利等优点,却鲜有3d打印系统的构建,针对这种不足设计了一种基于虚拟仪器的3d打印系统。本系统以矩形盒式结构为硬件基础,通过数据采集卡实现电机的控制完成打印任务,虚拟仪器技术采用labview构建控制终端完成3d文件的解读(分层切片、轮廓优化和层片数据处理)得到每层的坐标信息,通过软硬件的协同处理完成3d对象的打印。



背景技术:

3d打印技术是一种将机械、材料、软件和数控相结合的先进的多学科融合制造技术。作为一种快速成型技术,它以数字模型文件为数据基础通过材料(粉末、金属、光敏树脂等)的层层构建实现3d对象的打印输出。

3d打印技术始于70末80年代初,随着计算机控制、材料和相应的控制技术的发展3d打印技术也得到了长足的进步。迄今,3d打印已成功的应用于多个领域,如工业设计、机械制造、航空航天、建筑、医疗等。作为制造领域中迅速崛起的虚拟仪器技术在3d打印中的设计与研究却非常少。虚拟仪器是一种使用软件和模块化测量硬件来创建用户定义的测量和控制系统的技术,其优点是有灵活性强、成本低、开发速度快、解决方案简单等,特别是开发和调试周期短,效率高这使得虚拟仪器有着诸多制造生长技术不可比拟有优点。因此,借助虚拟仪器的优点开发3d打印系统对智能制造的快速性和扩展性有着积极的推动的作用。为此,我们设计了一种基于虚拟仪器的3d打印系统。



技术实现要素:

1、发明目的。

本发明提出了一种基于虚拟仪器的3d打印系统,能够解决现有技术中相应速度慢、可编辑性弱的问题。

2、本发明所采用的技术方案。

本发明提出了一种基于虚拟仪器的3d打印系统,具体包括如下步骤:

初始运行步骤,采用层叠式顺序结构完成系统初始运行,初始运行包括登录和前面板控件两个分支运行;

参数设置步骤,采用循环内嵌条件结构,对加热部件的热敏电阻进行上下限控制,在等待分支设置事件结构,通过事件结构编辑修改加热部件的热敏电阻进行上下限参数;

手动打印步骤,对设备进行预处理,包括对同时对系统进行预热和对喷头坐标进行调试与设定,采用并行结构同时运行电机、挤压电机工作和温度控制;

3d打印步骤,对应的3d对象数据进行分层切片、轮廓优化和层片数据处理等处理,得到相应的的坐标信息,最后通过坐标信息来控制三轴电机进行定点打印,通过逐层打印、叠加得到3d对象,具体步骤如下:

步骤1、通过文件路径输入控件读取stl文件;

步骤2、获取三角形坐标信息;通过三角形坐标获取子vi,获得此stl文件包含的所有三角形面片信息,根据stl文件一行含有一个顶点坐标信息的特点,选择以二维数组的形式打包成簇传递数据;

步骤3、二维数组的形式传递数据至三角形轮廓子vi,同时通过数据输入控件设定层高信息,筛选与此层面有交集的三角形;

步骤4、使用排序子vi对三角形按一定方向进行排序;

步骤5、最后利用切点子v计算出切面与三角形所有交点,即得到此切层包括的所有轮廓坐标信息;

步骤6、轮廓优化步骤,上述轮廓坐标信息经过去重、去共线点、曲率优化处理后利用数组插入函数生成一个优化后的坐标数组,通过输出数组实时监测;

步骤7、最后通过填充子vi计算出最佳打印路径并打印。

更进一步具体实施方式中,所述的手动打印步骤,采用并行结构同时运行电机、挤压电机工作和温度控制,运行电机和挤压电机工作通过脉冲信号开启打印步骤,脉冲信号产生时开启喷嘴,挤压电机开始工作,可实现正反两种状态运行;由计数器产生挤压电机的脉冲信号,通过脉冲的占空比和频率设定相应的值调整挤压电机按照所需要的速度运行;由数字量控制挤压电机正反两种状态;

在温度控制方式中包括了电压采集和数字输出两个部分,通过预设预热时间进行判断,超过预热时间则跳转到超时分支与预设值比较判断是否需要对加热部件加热,维持温度在一定范围内。

更进一步具体实施方式中,所述的步骤2中三角形面片信息即3d模型的切片选用stl格式的文件,stl文件读取后,对其切片进行定层厚拓扑处理,即求设定的等z平面与切片三角形之间的交点所构成的切片轮廓,具体步骤:

步骤2.1提取三角形面片的顶点坐标信息;

步骤2.2通过设定的层高移除无关三角形,即保留当前切层下相交三角形;

步骤2.3对保留的三角形索引排序并求其与z平面界面的交点;

步骤2.4顺序连接交点,构成当前层切片轮廓。

更进一步具体实施方式中,所述的步骤2中三角形面片信息即3d模型的切片选用stl格式的文件,利用stl文件ascii码格式,将无用信息剔除,获取坐标信息并打包,具体为:使用循环方式完成对每行的索引,循环的次数是固定的,只允许设定循环次数;首先导入stl文件,然后将此文本发明件转换为一维数组并传递到两个循环中,两个循环同时运行执行并行操作。

此步骤的stl文件的读取和层内坐标信息的获取是利用labview实现的未借助第三方工具,相比较现有技术中,大部分采用第三方将stl文件里的坐标信息提出来后再导入打印机开始打印,现有技术的导入方式会导致数据传输较慢,不易修改。

更进一步具体实施方式中,第一个循环:首先利用数组大小函数和初始化数组函数建立一个存放三角形坐标信息的二维数组,使用循环自动索引出一个字符串元素,利用搜索替换字符串函数搜索关键字,若此字符串元素中包含有关键字,则运行条件结构中标签1对应分支:利用截取字符串函数截取此字符串元素中有效坐标信息,然后使用三个拆分字符串函数和字符串至数值转换函数将此坐标信息转换为数值,将得到的三个数值利用创建数组函数打包成一维数组,最后使用替换数组子集函数将此一维数组替换到预先建立的二维数组中,至此,一个三角形顶点坐标信息采集完毕;

若此字符串元素中不包含关键字,则运行条件结构中标签0对应分支:进行下一次循环;

所有坐标信息采集完毕后使用删除数组元素函数将无效数组元素删除,然后对数组元素通过扩大十倍取整然后缩小十倍的方式取近似值,最终得到包含所有三角形坐标信息的二维数组;

第二个循环:首先自动索引出一个字符串元素,然后与字符串比较,若相等,则运行条件结构中真分支:数值加1;若不等,则运行假分支:对数值不进行改变,循环结束后将会得到此stl文件中包含的所有三角形面片的个数。

更进一步具体实施方式中,所述的步骤3,筛选与此层面有交集的三角形面片,按照如下步骤进行:

步骤3.1确定层高上下限,排除那些与此层面没有交集的三角形,保留剩下的三角形;

步骤3.2把与之有交集的三角形保留下来,把每个三角形的点打包成簇数组。

更进一步具体实施方式中,所述的步骤4、使用排序子vi对三角形按一定方向进行排序,按照如下方法进行:排除第一个三角形中与层高没有交点的一条边,选择另外两条边中的一条,以此找出和它有两个重合点的第二个三角形,按此方式依次找出第三第四...第n个三角形;

更进一步具体实施方式中,所述步骤5、最后利用切点子v计算出切面与三角形所有交点,即得到此切层包括的所有轮廓坐标信息,其特征在于按照如下步骤进行:

切平面与三角形共存在五种关系,切平面与三角形一边重合、与三角形一顶点一边相交,与三角形两边相交,与三角形一顶点重合,使用五个条件结构嵌套的结构;每个条件结构处理一种相交关系;

首先使用索引数组函数将一个簇元素取出,解除捆绑后传递到条件子vi,若满足,则运行相应条件结构中真分支;若不满足条件,则进行下一条件分支,直到匹配到相应条件,执行对应处理后,进入下次循环,所有元素索引完毕后,循环结束,得到轮廓坐标。

更进一步具体实施方式中,所述步骤6、轮廓优化步骤:

把所有交点连接起来会得到一个轮廓,轮廓的点与点之间会存在三种关系,共线关系、微小线段关系和小曲率关系;共线关系是指得到的轮廓连接点处于一条直线;微小线段关系是指轮廓点之间的距离极小;小曲率关系是指轮廓构成的线段中中间连接点与两端的连接点近似在一条直线上;其处理步骤如下:

步骤6.1计算相邻连接点斜率,通过查找斜率相同的线段通过区间判断的方式消除共线点;

步骤6.2计算相邻连接点距离,当线段间的距离小于设定阈值时判断该线段所对应的两个点是微小线段,删除任意一点;

步骤6.3计算连接点构成曲线曲率,当曲率小于设定阈值时删除该曲率对应点;

使用两个循环嵌套的结构去除所有重合的多余点,外循环每次循环取出一个元素传到内循环中,内循环完成将此元素和其他剩余元素比较的工作,在内循环中有相应条件结构响应比较结果;

去除共线点需先从坐标数组中取出相邻三点,若此三点共线,将中间点删除后,还需再从数组中取出一点,再次判断与之前剩余两点是否共线,直到三点不共线,重新从数组中取出相邻三点;

曲率优化只需按照数组中元素顺序依次取出三点计算曲率即可,使用一个循环,在循环中调用曲率子vi计算曲率。

更进一步具体实施方式中,步骤7、最后通过填充子vi计算出最佳打印路径,具体按照如下步骤进行:

对层面的轮廓进行填充,首先获得截平面的x/y方向的最大值与最小值,从而可以确定截面轮廓最小的外接矩形;

实现网格填充,首先需计算出x、y方向上最大值与最小值,根据此最大值和最小值得到最小外接矩形,填充时分行填充,采用两个循环嵌套的方式,外循环部分循环一次,y值增加预设量值,直到y值增加到最大值;内循环部分循环一次,x值增加预设量值,直到增加到x最大值,所有循环结束,即得到轮廓最小矩形的填充坐标数组;最后使用拆分一维数组函数将多余无效数组元素删除,得到最终填充轮廓数组;

在网格填充之后,通过点位于多边形内算法,筛选那些位于多边形轮廓和内部的点,排除多边形外的,就会得到该层面填充图,通过移位寄存器进行每次预设值的累加,当切层高度取整近似值与图形z轴的最大值相等时,切片完成,此时生成坐标信息的簇数组,根据坐标信息即可实现打印。

本发明由于采用elvisii控制板,由于步进电机是由脉冲驱动运行的,elvis平台中能产生高速脉冲的计数器只有两个,不能同时满足x/y/z轴三个电机的需求,因此需要其中两个电机共用一个计数器。考虑到3d打印都是逐层打印的,所以可知x/y轴电机不可以共用一个计数器。因此可以选择x/y中任意一个和z轴电机进行共用计数器。

3、本发明所产生的技术效果。

(1)本发明通过labview实现3d扫描打印,程序运行速度快,可视化编程易于调试,打印精确度高。

(2)本发明通过文件路径输入控件读取stl文件。传统的文本式编程语言一般用字符串实现,附加一些特殊格式来表示路径。相对传统编程工具路径控件的直观性和易操作性极大方便了文件和目录的选择操作。

(3)本发明设计了三角形坐标获取子vi获得此stl文件包含的所有三角形面片信息,根据stl文件一行含有一个顶点坐标信息的特点,选择以二维数组的形式传递数据,子vi可以单独调试的特性更快的完成各功能模块的开发,它与文本式编程语言相比,调试更加便捷、直观。

(4)本发明将得到的数据传递给三角形轮廓子vi,利用了数据流特性,即单点的数据可以流向多点,多点的数据也可以汇于单点,设计了一个数据输入控件完成对三个子vi参数设置,其直观性和类型的选择表示上都较于传统文本式编程语言方便、准确。

(5)本发明为了使后续排序、切点等功能实现更加便利,需要将之前二维数组即三角形顶点信息打包成簇,可以将几种不同的数据类型集中到一个单元中形成一个整体,通过对簇的使用,在程序框图中可以用一条数据线连接多个节点,也可以减少连接板上端口的数量,大大简化了程序编程的界面。通过“打包子vi”将每个三角形的顶点打包成簇数组,然后使用“排序子vi”对三角形按一定方向进行排序,排序后所有三角形会按照特定方向排列,因此计算出的切点也会有序排列,方便进行轮廓填充。

(6)本发明对轮廓坐标信息经过去重、去共线点、曲率优化处理后利用数组插入函数生成一个优化后的坐标数组,通过输出数组实时监测并通过填充子vi计算出最佳打印路径。

(7)本发明三角形面片信息采用两个循环同时运行执行并行操作,这种方式编程简单、快捷,两个循环同时运行执行并行操作以提高工作效率。

(8)本发明切平面与三角形共存在五种关系,切平面与三角形一边重合、与三角形一顶点一边相交,与三角形两边相交,与三角形一顶点重合,使用五个条件结构嵌套的结构;每个条件结构处理一种相交关系。

附图说明

图1为温度、加热板、加热管控制电路。

图2为x/z轴电机切换电路。

图3为电路板接口示意图。

图4为系统软件功能示意图。

图5为图系统运行流程图。

图6主程序框图。

图7登录程序流程图。

图8登录程序框图。

图9参数设置程序框图。

图10手动打印温度控制流程图。

图11温度控制程序框图。

图12电机控制示意图。

图13挤压机的控制程序框图。

图14三轴电机的控制程序框图。

图153d打印分层切片。

图163d模型的切片流程图。

图17三角形坐标获取。

图18三角形筛选流程图。

图19三角形筛选程序框图。

图20三角形面片筛选、打包程序框图。

图21三角形进行排序流程图。

图22三角形进行排序程序框图。

图23切平面与三角形的位置关系示意图。

图24切平面与三角形的位置关系流程图。

图25切平面与三角形的交点程序框图。

图26去重程序框图。

图27去共线点程序框图。

图28切片轮廓优化程序框图。

图29网格填充程序框图。

图30层面填充流程图。

图31获取填充程序框图。

图32坐标信息的获取流程图。

图33生产者结构程序框图。

图34消费者1结构程序框图。

图35消费者2结构程序框图。

图363d模式坐标获取程序框图。

图37喷嘴打印程序框图。

图38喷嘴程序框图。

图39二维打印的流程图。

图40图片预览程序框图。

图41提取图片信息程序框图。

图42图像处理程序框图。

图43登录界面。

图44模式选择界面。

图45对加热管温度编辑示意图。

图46手动打印操作板示意图。

图473d打印界面示意图。

图48打印成品示意图。

图493d模型数据导入示意图。

图50分层切片示意图。

图51路径规划示意图。

图52内容填充示意图。

图53笔罐模型示意图。

图54图像导入示意图。

图55坐标信息获取示意图。

图56控制打印示意图。

图57二维图像打印示意图。

具体实施方式

实施例1

1、打印机系统构建

本发明设计的3d打印机系统包括矩形盒式结构的机械打印主体、数据采集板和上位机(软件)3个主要部分组成。盒式机构的机械主体包括铝合金型材,步进电机,挤出机,加热面板、功能电路和一些配件,数据采集卡采用的是nielvisii,上位机软件为labview。

机械主体-矩形盒式结构。这种结构的特点是热床只做z轴方向上移动,喷头只做x/y轴方向上移动。这种构架方式可以减轻喷头重量,从而对提高打印速度和打印精度都有一定的提高;打印方向、打印长度以及打印材料由步进电机来控制;

控制电路。在该系统中,使用三极管、继电器、热敏电阻等元件构建温度测量电路、温度控制电路、电机切换电路,用来对温度的监控和电机的切换如图1所示。

1.1、电机切换电路

由于步进电机是由脉冲驱动运行的,而我们选择elvis平台中能产生高速脉冲的计数器只有两个。不能同时满足x/y/z轴三个电机的需求,因此需要其中两个电机共用一个计数器。考虑到3d打印都是逐层打印的,所以可知x/y轴电机不可以共用一个计数器。因此可以选择x/y中任意一个和z轴电机进行共用计数器。

本设计选择了x轴电机与z轴电机进行切换。该电路和温度控制电路的原理相同,同样是用继电器来做开关实现此切换功能。当三极管基极为高电平的时候z轴运动,当三极管的高电平转变为低电平时x轴开始运动。设计的电路图如图2所示。

1.2、电路板接口及元件

该系统用到的电路有温度测量电路、温度控制电路和电机切换电路。其需要的元件如下:两个阻值为100kω,材料参数b=3950的热敏电阻。用到的电阻为10kω*3个、150kω*2个。另外还有3个继电器和3个s8050(npn)三极管。加热板和加热管的供电是由220v转24v的开关电源提供的,如图3所示电路板接口设计示意图:

电机与同步带。选取步距为1.8°的步进电机与mxl型同步带进行x轴y轴的传动,选取大径为8mm,螺距1mm,导程1mm的丝管进行z轴的传动;在数据采集以及传感器监测方面通过elvis数据采集板卡完成相应的任务。

上位机功能是利用上位机上安装的labview软件对温度信号、速度信号进行采集显示和处理并完成数据模型分层切片、轮廓优化和层片数据处理。

1.3、系统软件设计方案

软件设计以工程应用为目标,功能实现上设计了用户登录功能、参数设置功能、手动控制(调试)、自动控制(3d打印)、二维打印(扩展)和退出。用户登录功能设计目的在于安全有效的使用所设计的打印系统;参数设置功能完成加热板(加热管热敏电阻、加热板热敏电阻)温度的上下限控制以便不同环境下3d对象的顺利打印;手动控制(调试)的功能设计旨在电机系统的调试,加热管(板)的温度预热控制,用来完成打印系统的功能调试便于开发人员的功能改进和错误修正;自动控制(3d打印)功能是完成3d文件读入并自动打印过程;二维扩展的设计是基于3d打印功能基础所设计,通过图像处理技术完成二维图像的相关处理,利用3d打印的功能实现二维(平面)图像的基本打印。如图4所示系统软件功能示意图,系统运行流程图如图5。

系统程序软件由g语言labview编写由前面板和程序框图组成,有别于传统的文本式编程语言,labview作为一种图形化语言有着其特有的优势:1)labview可以让工程师快速上手搭建测试或控制系统;2)labview具有较为完善的算法工具包,便于系统开发;3)图形化编程中各种数据流,函数类型等都有特定的设计,在程序开发中辨识度高,出错率低;4)labview专注于测试、测量、控制与仪器交互,针对这些领域设计各种控件、框图等方便在编写程序时候直接使用,增加各种模块工具包来把一些现成算法集成,方便工程师直接使用。5)图形化编程语言是数据流驱动的,从而可以并行执行任务。另外,labview的vi是模块式结构,每个vi模块都可以单独运行,模块之间不需要紧密的数据连接,非常有利于数据结构的封装。这些工作,使得使用labview编程更加流畅简单,因此用labview实现3d打印上位机控制系统的设计快捷便利。

在主程序框图设计阶段,由于有两个分支需要执行(登录和前面板控件),为了有效的利用程序框图空间同时确保子程序框图按顺序执行,因此选择层叠式顺序结构完成该部分功能设计。在功能上类似文本式编程语言的条件分支结构,但其顺序局部变量的使用和传递功能有别于传统的本式编程语言,体现了其条件分支执行和变量传递便利的良好特性。

主程序运行时,点击前面板控件程序就会进入相应的事件中,执行该事件结构中的子vi。程序运行的时候,首先执行用户登录程序,填入设定好的用户名和密码即可登陆成功。登陆成功后对图6所提到的5个功能控件进行选择。

(1)登录程序

当用户在使用本打印机的时候需要进行一个登录认证以增强系统使用的安全性,登录过程表现为:初始化、用户登录和退出,该流程的执行选择顺序结构较为合理,考虑到空间使用效率使用层叠式顺序结构执行该部分功能。该程序的层叠式顺序结构的0分支和2分支,分别对应程序初始化和关闭程序的功能,主要部分是1分支中对登录名和程序密码的设定。用户登录功能体现:考虑到程序对前面板事件的响应速度,使程序运行流畅快捷,采用“使用事件的顶层应用程序”设计模式:在while循环内嵌一个事件结构。此设计模式不需要在主循环中轮询控件的状态,因此效率较高。为了方便用户名与密码的配套存储,使用二维字符串数组存放预设用户名与密码。利用字符串输入控件进行用户名与密码的输入,进一步在事件结构中嵌入三个条件结构逐步判断登录信息是否准确,最终完成登录功能,其流程图如7:

如果登录错误达到3次的时候,程序就会自动退出。这时在前面板上就会自动跳出“3次错误,程序退出”的对话框提示登录自动退出。其程序框图如图8:

(2)参数设置

该系统需要完成加热板(加热管热敏电阻、加热板热敏电阻)温度的上下限控制,让其温度维持在一定的范围内。基于高效处理前面板事件的考虑设计了while循环内嵌条件结构的程序编写方式,在“初始化”条件下可以实现配置初始参数功能,在“编辑”条件下可以修改参数,其中在等待分支下设置了事件结构,这是由于事件结构对前面板事件响应更为快速,可以提高程序运行速度,因此选择事件结构完成该功能。其程序框图如图9:

(3)手动打印

打印系统在打印之前需要进行预处理,即对系统进行预热和对喷头坐标进行调试与设定,既便于开发人员的升级更新也便于错误等bug的修正,因此设计本功能。本设计要求电机运动、挤压机工作和温度控制同时进行,考虑到一个循环中难以同时实现这三个功能,因此选择并行结构让这三个功能可以同时运行,以节约大量的运行时间。

在温度控制程序中包括了电压采集和数字输出两个部分,当程序运行时通过激活预热功能,程序由事件结构中的预热跳转到超时,跳转到超时分支后,通过逻辑关系可判断加热板和加热管是否进行加热,采用这种方式可以提高加热系统安全性。通过测量热敏电阻两端的电压可通过转换函数转换成相对应的温度。当温度达到上下限时,通过逻辑判断对加热元件进行供电通断控制,从而保证温度维持在一定的范围内。其流程图如图10,对应程序框图如图11;

流程:将电压采集任务、数字输出任务、错误簇、加热管(板)、超时接线端打包成簇完成初始化任务,通过在循环中不断采集热敏电阻的电压信号并转换成与之对应的温度信息并与设定信息比较完成加热管(板)的加热与否任务的执行。

为了有效的利用和控制系统,编程采用的是并行结构,可以在预热的这段时间里对电机进行控制,通过控制电机将打印头移动至设定位置,并设定其为坐标原点。

系统设计中程序运行的时候不设计喷嘴开启按钮,所以挤压电机得到的脉冲端一直是f状态。当按照控制流程需要喷嘴开启时脉冲产生,挤压电机开始工作。挤压机的正反转状态通过数组和挤压机脉冲状态一起写入数据采集的数字量控件,这样就可以实现对挤压机的正反转进行控制。而使用数组可使编程更为方便,只需使用一个“daqmx写入”函数即可完成方向控制和脉冲控制。挤压机控制的整体流程为初始化相关参数,然后将相关数据传递到elvis数据采集板卡,再利用板卡直接控制电机工作。示意图如图12,程序框图如图13:

三轴电机的脉冲由elvis板卡中的计数器产生,电机的方向由数字量来控制。图14是三轴电机控制中的z轴电机控制的升部分,程序里面的层叠式顺序结构中的0分支是x/z轴电机切换的部分。当elvis数字量3接口写入为t时,此时是z轴电机工作。数字量2接口控制其正反转,也就是控制电机的上升与下降。若要使电机按照所需要的速度运行,需要给脉冲的占空比和频率设定相应的值,本设计给z轴电机的脉冲频率为80000占空比为0.5。

(4)3d打印

在3d打印模块中首先导入stl文件,然后通过labview编程对stl文件对应的3d对象数据进行分层切片、轮廓优化和层片数据处理等处理,得到相应的的坐标信息,最后通过坐标信息来控制三轴电机进行定点打印,通过逐层打印、叠加就可以得到我们想要的3d对象,其每一层的处理程序框图如图15所示:

首先通过文件路径输入控件读取stl文件。路径控件是labview提供的特定数据类型,专门用来表示文件或目录的路径。传统的文本式编程语言一般用字符串实现,附加一些特殊格式来表示路径。相对传统编程工具路径控件的直观性和易操作性极大方便了文件和目录的选择操作。

然后获取三角形坐标信息,设计了“三角形坐标获取子vi”获得此stl文件包含的所有三角形面片信息,根据stl文件一行含有一个顶点坐标信息的特点,选择以二维数组的形式传递数据。子vi相当于文本式编程语言中的子函数,利用labview中子vi可以单独调试的特性更快的完成各功能模块的开发,它与文本式编程语言相比,调试更加便捷、直观。

labview将得到的数据传递给“三角形轮廓子vi”,同时通过数据输入控件设定层高信息,筛选与此层面有交集的三角形。这里利用了labview的“数据流”特性,即单点的数据可以流向多点,多点的数据也可以汇于单点,设计了一个数据输入控件完成对三个子vi参数设置,其直观性和类型的选择表示上都较于传统文本式编程语言方便、准确。为了使后续排序、切点等功能实现更加便利,需要将之前二维数组即三角形顶点信息打包成簇。簇是labview中常见的复合数据类型,类似于c语言的结构体,簇可以将几种不同的数据类型集中到一个单元中形成一个整体,通过对簇的使用,在程序框图中可以用一条数据线连接多个节点,也可以减少连接板上端口的数量,大大简化了程序编程的界面。通过“打包子vi”将每个三角形的顶点打包成簇数组,然后使用“排序子vi”对三角形按一定方向进行排序,排序后所有三角形会按照特定方向排列,因此计算出的切点也会有序排列,方便进行轮廓填充。最后利用“切点子vi”计算出切面与三角形所有交点,即得到此切层包括的所有轮廓坐标信息。

此轮廓比较粗糙,会存在一些共线点、重合点和小曲率点。在进行3d打印时,这些关系所对应的连接点都会对打印产生影响尤其是速度影响,因此对这些关系对应的连接点看作冗余点需要进行删除处理。此轮廓坐标信息经过去重、去共线点、曲率优化处理后利用数组插入函数生成一个优化后的坐标数组,通过输出数组实时监测。最后通过“填充子vi”计算出最佳打印路径。

进一步详细的处理过程如下文所述。

3d模型的切片:对3d模型的切片是3d打印机的核心。stl文件是在计算机图形应用系统中,用于表示三角形网格的一种文件格式,它格式简单,应用广泛,是快速原型系统所应用的标准文件类型,用三角网格来表现3d模型。因此,本系统选用stl格式的文件。通过labview对其进行处理,获得轮廓的坐标使设备可以打印出相应的对象。

stl文件读取后,对其切片进行定层厚拓扑处理,即求设定的等z平面与切片三角形之间的交点所构成的切片轮廓。其算法如下:

step1提取三角形面片的顶点坐标信息;

step2通过设定的层高移除无关三角形,即保留当前切层下相交三角形;

step3对保留的三角形索引排序并求其与z平面界面的交点;

step4顺序连接交点,构成当前层切片轮廓。

由于stl文件是由三角形面片定义的文件,包含了三角形的坐标信息。因此为了对stl文件进行处理,必须提取出三角形点的坐标信息。利用stl文件ascii码格式,将无用信息剔除,获取坐标信息并打包,其流程图如图16,程序框图如图17所示。

stl文件特点:三角形顶点坐标包含在含有“vertex”的行内,并且每一行包含一个顶点信息。根据此特点,使用循环方式完成对每行的索引。本部分使用labview的for循环,其最大的特点是循环的次数是固定的,允许设定的元素只有一个:循环次数。在循环中,针对不同结果,使用条件结构来进行对应操作。这种方式编程简单、快捷。

首先导入stl文件,然后将此文本发明件转换为一维数组并传递到两个for循环中。利用labview“数据流”特性,数据同时输入两个循环,两个循环同时运行执行并行操作以提高工作效率,这点有别于传统的文本式编程语言。

第一个for循环:首先利用“数组大小函数”和“初始化数组函数”建立一个存放三角形坐标信息的二维数组,使用for循环自动索引出一个字符串元素,利用“搜索替换字符串函数”搜索关键字“vertex”,若此字符串元素中包含有“vertex”,则运行条件结构中标签“1”对应分支:利用“截取字符串函数”截取此字符串元素中有效坐标信息,然后使用三个“拆分字符串函数”和“字符串至数值转换函数”将此坐标信息转换为数值,将得到的三个数值利用“创建数组函数”打包成一维数组,最后使用“替换数组子集函数”将此一维数组替换到预先建立的二维数组中,至此,一个三角形顶点坐标信息采集完毕;若此字符串元素中不包含“vertex”,则运行条件结构中标签“0”对应分支:进行下一次循环。所有坐标信息采集完毕后使用“删除数组元素函数”将无效数组元素删除,然后对数组元素通过扩大十倍取整然后缩小十倍的方式取近似值,最终得到包含所有三角形坐标信息的二维数组。

第二个for循环:首先自动索引出一个字符串元素,然后与字符串“outerloop”比较,若相等,则运行条件结构中“真”分支:数值加1;若不等,则运行“假”分支:对数值不进行改变。循环结束后将会得到此stl文件中包含的所有三角形面片的个数。

获得三角形坐标后,下一步需要对三角形面片进行筛选。其步骤如下:

step1确定层高上下限,排除那些与此层面没有交集的三角形,保留剩下的三角形;

step2把与之有交集的三角形保留下来,把每个三角形的点打包成簇数组。

程序框图如图18-19所示,(a)三角形筛选,流程图如图18:

将三角形坐标信息分别传递到一个for循环和一个while循环中。for循环实现对z轴上最大值和最小值的监测;while循环完成三角形筛选工作。labview的while循环支持数据隧道和索引功能,其至少会执行一次,相当于c语言中的do-while循环。

for循环:首先自动索引出一个一维数组元素,然后使用“索引数组函数”取出此数组元素中包含的z轴坐标信息,最后使用“数组最大值与最小值函数”得出z轴上最大值和最小值,使用数值显示控件进行监测。

while循环:首先利用“索引数组”、“数组大小函数”和“初始化数组函数”建立一个二维数组,使用移位寄存器传递到while循环中。在一次while循环中,首先使用三个“索引数组函数”取出三个数组元素,即一个三角形面片的三个顶点坐标,然后再次使用“索引数组函数”取出z轴上坐标信息,将此三个数值与设定的层高参数比较,若有一个在层高区间内,则输出“真”运行条件结构中“真”分支:使用三个“替换数组子集函数”将此三个数组元素替换进预先建立的二维数组中;若全都不在层高区间内,则输出“假”,运行条件结构中“假”分支:进入下一次循环。当所有二维数组中元素索引完毕,循环停止。通过移位寄存器输出筛选后的三角形坐标数组,然后删除无效和多余数组元素,最终得到包含所有符合层高条件的三角形面片的二维数组。

(b)三角形数组打包如图20所示。

为了简洁化程序框图,同时方便后续操作,将二维数组中每三个相邻元素捆绑在一起形成簇,一个簇包含了一个三角形面片的三个顶点信息。使用while循环一次取出三个数组元素,捆绑后形成一个簇元素,使用移位寄存器输出。

与设定的层高有交集的三角形找到、打包之后,接下来要对三角形进行排序。排序的目的是确定路径,找出下一个三角形。排除第一个三角形中与层高没有交点的一条边,选择另外两条边中的一条,以此找出和它有两个重合点的第二个三角形。这样在确定了方向的情况下依次找出第三第四...第n个三角形,流程图如图21,程序框图如图22,所有的三角形都按照顺序找到排好了,需要考虑求出三角形与等z平面之间的交点坐标。通过位置关系的判断求出他们之间的交点,把交点连起来即成了一个需要的轮廓。三角形面片与切面有如图23所示的5种位置关系:设切平面z=h与三角形相交的交点为v(x,y,z),其中三角形的顶点为a(x1,y1,z1)、b(x2,y2,z2)和c(x3,y3,z3)。根据公式1求得交点v的坐标。将所有的交点连接起来就构成了物体的轮廓,完成了定层厚拓扑切片算法。

如图24切平面与三角形的位置关系流程图和图25求三角形与截面的交点程序框图。

如图25所示,切平面与三角形共存在五种关系,故使用五个条件结构嵌套的结构。每个条件结构处理一种相交关系。使用while循环将元素取出。程序包含五个条件判断子vi和与之对应五个处理子vi。

首先使用索引数组函数将一个簇元素取出,解除捆绑后传递到“条件1”子vi,若满足,则运行条件结构中“真”分支:将数据传入“处理1”;若不满足条件,则进行“条件2”,再次判断,直到匹配到相应条件,执行对应处理后,进入下次循环。所有元素索引完毕后,循环结束,得到轮廓坐标。

3d模型的轮廓优化,把所有交点连接起来会得到一个轮廓,但是得到的该轮廓是一个粗糙的轮廓。轮廓的点与点之间会存在三种关系,共线关系、微小线段关系和小曲率关系。共线关系是指得到的轮廓连接点处于一条直线;微小线段关系是指轮廓点之间的距离极小;小曲率关系是指轮廓构成的线段中中间连接点与两端的连接点近似在一条直线上。在进行3d打印时,这些关系所对应的连接点都会对打印产生影响尤其是速度影响,因此对这些关系对应的连接点看作冗余点需要进行删除处理。其处理步骤如下:

step1计算相邻连接点斜率,通过查找斜率相同的线段通过区间判断的方式消除共线点;

setp2计算相邻连接点距离,当线段间的距离小于设定阈值时判断该线段所对应的两个点是微小线段,删除任意一点;

step3计算连接点构成曲线曲率,当曲率小于设定阈值时删除该曲率对应点。

去重,程序框图如图26:为了去除所有重合的多余点,需要从第一个元素开始,将此元素和其后面的所有剩余元素一一比较,因此使用两个while循环嵌套的结构。外while循环每次循环取出一个元素传到内while循环中,内while循环完成将此元素和其他剩余元素比较的工作,在内while循环中有相应条件结构响应比较结果。

首先运行外while循环,利用索引数组从坐标数组中取出一个数组元素,然后通过解除捆绑函数解绑x、y坐标,利用循环隧道传递到内while循环中;同时,在外while循环中使用拆分一维数组函数将坐标数组中剩余元素传递到内while循环中。内while循环每次循环使用自动索引隧道从拆分后的坐标数组中取出一个数组元素,然后使用解除捆绑函数解绑x、y坐标,通过比较结点与外while循环传递过来的x、y值比较。若两点x、y值全部相等,则运行条件结构中“真”分支:使用删除数组元素将此元素从数组中删除,即去重;若x、y值不全相等,则运行条件结构中“假”分支:进入下次循环。所有拆分后的坐标数组元素索引完毕后,内while循环结束,进行下一次外while循环,直到所有数组元素索引完毕,去重优化完成。

如图27去共线点程序框图,去除共线点需先从坐标数组中取出相邻三点,若此三点共线,将中间点删除后,还需再从数组中取出一点,再次判断与之前剩余两点是否共线,直到三点不共线,重新从数组中取出相邻三点。选用两个while循环嵌套的结构,外while循环从数组中取出元素,内while循环判断是否共线,并使用条件结构响应相关结果。

首先内外while循环通过移位寄存器连接数组,然后在内while循环中使用索引数组函数取出三个相邻数组元素,每个元素即为一点的坐标信息。将此三个数组元素解除捆绑后使用“减”“除”函数计算每两点之间的斜率,若相等,即此三点共线,则运行条件结构“真”分支:使用删除数组元素函数将中间点的坐标信息从数组中删除,然后内while循环接着从坐标数组中取出下一点坐标信息,再次进行上述工作,直到三点不共线,则本次内while循环结束,回到外while循环中;若不等,即此三点不共线,结束本次内while循环,回到外while循环中。所有元素筛除完毕,通过移位寄存器输出优化后的坐标数组。

曲率优化只需按照数组中元素顺序依次取出三点计算曲率即可,因此使用一个while循环即可实现目标功能。在while循环中调用“曲率”子vi计算曲率。

首先使用初始化数组函数建立一个空数组,通过移位寄存器传递到while循环中。在一次while循环中,首先使用三个索引数组函数取出相邻三个坐标信息,解除捆绑后将数据传递给“曲率”子vi,使用“除”函数计算出曲率数据后与输入曲率参数比较,若小于参数值,则运行条件结构“真”分支:运行下次循环;若不小于参数值,则运行条件结构“真”分支:将中间位置点信息替换进预先生成的数组中。所有元素索引完毕,循环结束,得到曲率优化后的坐标数组。通过移位寄存器输出。

如图26-28所示的程序分别是去共线点、去微小线段和曲率判断冗余点。经过这三步骤的处理后可以使截平面轮廓得到优化,提高了打印的稳定性和和效率。

3d模型的数据处理:经处理得到的截平面只是一个轮廓,直接打印只能打印出一个物体的外轮廓。要想得到3d产品就要对其层面数据处理,也就是对层面的轮廓进行填充。首先获得截平面的x/y方向的最大值与最小值,从而可以确定截面轮廓最小的外接矩形。然后按照每行为0.4的间隔填充最小外接矩形。如图29所示。

实现网格填充,首先需计算出x、y方向上最大值与最小值,根据此最大值和最小值得到最小外接矩形。填充时分行填充,采用两个while循环嵌套的方式,外while循环部分循环一次,y值增加0.4,内while循环部分循环一次,x值增加0.4。

首先利用for循环自动索引出所有数组元素,然后解绑,分别输出x值数组和y值数组,利用数组最大值与最小值函数分别将x、y值中最大值和最小值求出,即得到截面轮廓最小的外接矩形。利用初始化数组建立一个空数组,将x、y最大值与最小值之差除以0.4即得到内外while循环循环次数。运行内while循环时,y值不变,x值每次循环从最小值开始增加0.4,直到增加到x最大值,此时内while循环结束,每产生一组数据使用替换数组子集函数替换进预先建立的空数组内。,一行填充结束后,外while循环将y值增加0.4,再次进入内while循环,直到y值增加到最大值,所有循环结束,即得到轮廓最小矩形的填充坐标数组。最后使用拆分一维数组函数将多余无效数组元素删除,得到最终填充轮廓数组。

在网格填充之后,要从中获取之前轮廓内的部分。通过“点位于多边形内”算法,筛选那些位于多边形轮廓和内部的点,排除多边形外的。就会得到该层面填充图,到此切片截面工作已经完成。下面设切层的高为0.1,通过移位寄存器进行每次0.5累加。当切层高度取整近似值与图形z轴的最大值相等时,切片完成。此时生成坐标信息的簇数组,根据坐标信息即可实现打印。流程图如图30,程序框图如图31所示。

将得到的网格填充数组中的点按顺序一一取出与轮廓进行位置对比即可得到轮廓的填充信息。因此使用while循环内嵌条件结构。

首先将轮廓坐标数组输入至“网格”子vi中,得到轮廓最小外接矩形填充后的坐标数组,然后利用循环隧道传递到while循环中,同时使用for循环将轮廓坐标数组中所有元素x、y值分别输入至while循环中。每次while循环中从填充后的坐标数组中取出一个元素,解除捆绑后和之前for循环得到的x、y值一起输入至“点位于多边形”函数,判断此元素是否在轮廓内,若在,则运行条件结构中“1”分支:使用替换数组子集函数将此元素替换进预先建立的空数组内;若不在,则运行下次循环。所有元素索引完毕后,循环结束,得到位于轮廓内的所有点的坐标数组,如图32坐标信息的获取程序框图。

使用切片子vi可以得到某层高切面轮廓填充信息,因此只需使用while循环,每次循环输入一个层高参数信息,即可得到所有层高切面轮廓填充信息。

首先使用文件路径输入控件导入stl文件,设置while循环移位寄存器层高初值为0.1,每次循环增加0.5,每次循环将文件与层高信息传到“切片”子vi中,得到本层高截面轮廓信息,通过自动索引隧道输出至存储数组中,当层高值增加到最大值时,循环结束,得到包含所有层高轮廓的打印坐标数组。

3d打印编程:为了满足上述功能需求3d打印采用了生产者消费者的架构,这样在响应前面板的同时还可以进行数据采集。如图33是该模块程序的生产者消费者架构。

程序中生产者主要是响应前面板的控件,当程序运行时单击前面板的控件,此时相当于生产者给出命令,消费者相应的分支就会执行该命令。消费者结构分为两块:消费者1主要功能是实现运行循环,它主要是对打印图片进行编辑和对三轴电机运行进行控制。消费者2这个部分的功能是实现对温度的控制。温度控制部分包括对加热元件的加热状态控制,以及对加热元件的温度进行检测。这样可以使温度始终处在设定的范围内。温度控制的问题因此得到解决,进而提高打印效果和打印精度。程序运行时,单击喷嘴开关控件,则挤压机就会一直处于运行状态。如图33-35所示。

生产者/消费者设计模式是多线程编程中基本的设计模式,是事件处理器和队列消息处理器相结合而构成的复合设计模式,其使用非常普遍。生产者/消费者设计模式常常是多个生产者提供数据,一个消费者使用或处理数据。因为消费者在使用数据的时候,队列中的数据已经被取出,所以存在多个消费者的情况下,消费者消费的将是不同的数据

stl文件通过labview进行分层处理后得到了坐标信息,将此坐标信息通过位寄存器传递给喷嘴打印分支。

获取坐标信息之后开始进行打印,在打印之前需要对加热板和加热管进行加热。当坐标的长度不为零的时候通过获取多层坐标,将坐标数与坐标长度传送给移位寄存器,如图37。就是喷嘴进行打印的程序,根据坐标之间的大小来确定电机的移动方向。由于坐标序号数是从0开始的,因此电机坐标序号数加1与给电机坐标总数相等时就表示这层已经打完。一层打完过后,z轴下降。此时停止加热,测温打开。然后进行下一层打印,按照同样的顺序即可实现完成多层打印任务,打印出我们所需要的产品,如图38。

(5)二维打印,除3d打印外,本设计还具有二维打印功能。这里的二维打印就是系统对所给的图片进行处理,获得主要图像(边缘,文字)信息,然后根据所得到的信息进行定点打印的过程。设置二维打印这个模块是为了便于对打印方式的选择、图片的处理以及相关硬件的控制,在实现3d打印的基础上扩展和完善系统的多功能打印功能。

二维打印的原理和3d打印相同,都是根据坐标信息进行定点打印。不同之处在于3d打印的坐标是通过labview对stl文件处理得到的,而二维打印的坐标信息是通过图像处理得到的。二维打印的流程如图39:

图40为获取图片路径,从中读取图片的信息。

图41是提取图片的信息,主要提取图片的信息中分为图片轮廓坐标信息和图片的像素信息。通过“枚举控件”选择要打印的类型,具体有图片打印和轮廓打印。然后根据图像处理的知识获取相应的信息。

图42是对坐标进行获取。如果选择的模式是打印文字或图片,则需要对其进行像素缩放、获取像素原坐标和最佳路径规划等步骤的处理,从而得到相应的坐标值。当选择的模式是打印轮廓就不需要对此进行处理,直接从上一个分支中获取坐标信息。获取坐标信息之后,通过坐标之间的大小比较控制电机运行,打印的原理步骤和3d打印相同。

2、系统调试

当进行系统调试时,首先进入一个用于用户验证的登录界面。输入设定的用户名和密码完成登录。此时会弹出写着“管理员好!”的对话框,点击确认按钮,此时登录成功即可进行模式选择。其前面板如图43所示。

如图44所示,本设计的模式选择前面板如图44所示,在模式选择中有设置、手动、二维、3d和退出五种模式。我们可以对自己想要运行的模式进行选择,但是一般我们一开始会选择参数进行调节。

设置加热管和加热板的温度上下限,是对加热管温度进行编辑的。设置了加热管的温度上限为195℃,下限为185℃然后点击确定保存即可。因为在这个温度范围内加热管融化pla材料的速度较为适中,这样有利于喷嘴喷出一定量的融化的塑料,从而提高3d打印的效果。其前面板如图45所示。

对加热管和加热板的温度进行设置完成后,一般要对喷头的坐标进行调节。手动打印有两个功能,一是为了测试设备是否可以正常运行,另一个是调节喷嘴的位置设定初始坐标。把喷嘴调到一个合适的位置,为下面的3d打印做好准备。如图46为手动打印。

当把喷头调到一个合适的位置时,将这个位置设置为原点坐标。设定原点坐标后退出程序,进行3d打印模式。点击3d模式,把文件导入。前面板出现了如图47的界面。

把加热板和加热管预热到设定的温度时,点击获得坐标按钮,此时得到文件被处理后的坐标信息。根据坐标信息进行打印,如图48为其打印成品。

其3d模型切片调试如下。

第1步导入3d模型处理数据,如图49。

第2步选取层高,进行切面获得相应切面,如图50。

第3步路径规划,如图51所示。

第4步填充,如图52所示。

利用如上流程可打印任意stl模型对象,如图53是打印范例2:

二维打印,首先选择待打印的文件,并预览如图54所示:

然后获得待打印图片的轮廓坐标信息,如图55所示:

最后开启加热管和加热板,并实时监测温度,待温度达到要求后开启喷嘴并开始打印,如图56。打印结果如图57所示。

3、总结

本设计以虚拟仪器为基础的,以labview为核心,通过系统的硬件设计和软件设计两个方面共同构建实现了一种基于虚拟仪器的3d打印系统,该系统能够实现3d对象的自动打印,2维图像的处理打印,手动控制的功能调试以及相关的参数设置等功能。通过系统的运行验证了本系统是有效的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1