增材制造软件框架的研究与设计

53
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
增材制造(Additive Manufacturing ,AM )技术,又名3D 打印(3D Printing ),是一种基于数字模型,逐层堆积材料,形成三维实体的技术。[1]作为一种先进制造技术,增材制造技术的应用领域不断扩展。增材制造软件作为增材制造技术中的一个重要的组成部分,其用户面在不断扩大,需求量也在日益增长。
增材制造软件具有多种不同的加工工艺,包括SLS 、SLA 、FDM 、LOM 、WAAM 、3DP 等。尽管从原理来讲都是逐层制造并堆积成实体的过程,但是实际上不同工艺的增材制造技术的具体流程具有很大的差异,对软件实现的需求也是各不相同。同样的界面以及相同的开发流程并不满足不同类型增材制造软件的需求。
传统增材制造软件的开发需要从头开始编写特定的界面程序以及对应的功能模块,再把各个模块整合。这种开发的方式在一些具有相似性的工作耗费了大量的资源。在增材制造技术高速发展的现状,这种开发模式已经越发难以满足当下的要求。
针对上述问题,研究并设计了一种专用于增材制造领域,面向各种不同增材制造工艺的可复用、可加速开发、适应不同应用场景的增材制造软件框架。使用声明式语言QML 搭建用户界面框架,使用C++开发数据处理模块以及三维模型渲染引擎,通过轻量化的JSON 格式数据进行界面与后台之间以及不同模块之间的数据交互。
1 增材制造软件框架1.1 软件框架
软件体系结构描述了系统中相互交互的组件的关系,而软件框架不单反映了软件的体系结构,还需要为专门的应用领域提供软件的模板。软件框架也是一种特殊的软件,是可复用、可扩展的半成品软件。[2-4]
1.2 QML编程语言
QML 是一种用于描述应用程序用户界面的声明式编程语言,使用一些可视组件以及这些组件之间的交互来描述用户界面,是一种高可读性的语言。由于QML 引擎集成了Qt 元对象系统,由QObject 派生
的子类的属性、方法和信号等都可以在QML 中访问。基于这个机制,可以通过以下两种方式将C++功能暴露给QML :
(1)把C++类注册到QML 类型系统,在QML 中可以实例化该类型;
(2)把C++实例作为上下文对象嵌入到QML 代码中,使该对象作为C++与QML 代码交互的桥梁。[5-6]
使用QML 作为界面编程语言具有以下的优势:
(1)相对于传统增材制造软件使用MFC (Microsoft Foundatin Classes ,微软基础类库)或Qt C++等工具构建用户界面的方式,使用声明式编程语言降低了开发难度,提高了开发效率;
增材制造软件框架的研究与设计
杨声浩  覃林  黄江  杨蕾  郭强强
(华中科技大学材料科学与工程学院  湖北省武汉市  430070)
(2)可以降低界面程序与C++后台程序的耦合度;(3)便于与C++程序进行交互。[6-8]
1.3 JSON数据交换格式
摘 要:本文为了提高开发软件的效率,设计了可复用、柔性的增材制造软件框架平台,提供了使用声明式语言快速生成自定义用户交互界面、OpenGL 渲染模型等服务。并在实际项目中完成不同应用场景下增材制造软件的开发。
关键词:增材制造;软件框架;声明式语言;JSON;OpenGL
●基金项目:国家重点研发项目,课题:3D 打印物体精准彩上技术与工具(课题编号:2018YFB1106203);武汉市科技计划项目:面向增材制造的工艺规划软件系统及应用(项目编号:2019010702011310)。
图1:数据交互框架示意图
图2:OpenGLItem 类图
软件开发与应用
Software Development And Application
电子技术与软件工程Electronic Technology & Software Engineering
英格兰申办世界杯JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,是基于JavaScript规范的一个子集,是JavaScript原生数据格式。
[9]而QML提供了专门用于编写QML应用程序的JavaScript主机环
境,实现了多数JavaScript的对象和函数。不需要导入其他模块,QML就可以解析JSON字符串。另外,
腾讯公司开发了一个高效C++ JSON解析/生成器RapidJSON,以及Qt C++本身也包含了处理JSON的类(如QJsondocument、QJsonArray、QJsonObject等)。因此,采用JSON作为数据交换格式,对于QML和C++都具有良好的效率和兼容性。
1.4 数据交互框架设计
增材制造软件框架的数据交互框架设计如图1所示。
在C++程序中实例化一个继承了QObject类型的上下文对象,该对象中具有保存JSON数据的成员变量。可以在C++程序中产生的数据会被构建为一个JSON对象,保存为上下文对象中的一个成员变量,其属性会被暴露给QML程序。QML通过该上下文对象得到从C++传递的JSON数据,本文设计的解析器会将其翻译为控件的信息,并呈现到界面上。
为了提高三维模型渲染的效率,通过OpenGL实现了三维模型渲染的C++类。该类继承了QQuickItem类,并被注册为一个可实例化的QML类型。在QML程序将其实例化为一个渲染三维图像的控件。当用户对该控件进行了鼠标点击和拖动等操作后,可以调用C++程序中实现的槽函数,刷新显示三维图形的窗口。
当用户对除模型渲染窗口外的其他控件进行了一定的操作,所产生的操作信号、发出的指令和设定的
参数等会被重新构建为一个JSON对象,并写入至上下文对象中。C++数据处理模块得到该JSON对象后,解析为具体的指令:与图像有关的信息会直接传递到OpenGL渲染的对象;与加工有关的信息会被传递到控制模块,控制模块把数据转换为相应的加工指令,通过网络接口将加工指令发送到加工设备。加工设备产生的实时参数会通过网络接口反馈给C++内核程序。
2 界面元素构建
一号2.1 界面元素抽象化
从表面上看,应用程序的界面是由各个外观千差万别的控件所组合成。不同的控件都是由一系列数据描述的,控件显示发生的变化也就是其背后数据发生的变化。因此,本文把界面的每个元素抽象为数据的集合,每个控件都可以被表示为一个具有若干个属性的对象。控件的属性包括其独有的ID、控件的类型(如文本、滑动条和数码管等以及一些自定义的模板类型)、布局属性、尺寸参数、控件特定的数据属性(如字体的颜、文本内容、数值等)。
2.2 界面生成引擎
QML支持动态创建对象。要动态加载定义在一个QML文件中的组件,可以调用Qt全局对象中的Qt.createComponent()函数。本文基于这种动态创建对象的方法,实现了一个界面生成引擎。区别于
传统增材制造软件构建界面的难以复用的繁琐过程,本文的界面生成引擎面向各种不同类型的增材制造工艺的需求,都可以通过类似的方法生成界面。界面开发人员可根据实际需求,编写JSON数据,每一个JSON对象代表着对应的控件。QML会遍历这些JSON对象,根据对象中的控件类型属性调用动态创建相应控件的函数。函数的参数包括控件的尺寸参数、特定的数据属性。再根据设定的布局属性进行网格布局。
2.3 控件属性更新
QML程序中对控件属性的操作,要通过控件的id属性到对应的控件。动态生成的控件不能指定ID属性,但可以存入到数组中。本文自定义一种“ID”关键字,对应值为一个字符串,是每个控件单独占有的属性。使用QHash类建立控件的ID字符串与在数组中对应下标的查关系。当动态控件对应的后台数据发生变化,可以向暴露给QML的C++上下文对象发送JSON数据,当中包含控件的ID字符串、控件类型以及要更新的属性的值,根据上文建立的查表到相应的动态控件,并修改属性值。
2.4 界面操作信息反馈
用户对界面的操作主要包括修改控件的属性(如在文本框中输入数据)和点击按钮。从上一次点击按钮之后,修改了若干个控件的信息,再到下一次点击按钮时,这一系列的操作过程可以看作一个原子级别的操作,这个原子级别操作会触发一次界面信息的反馈。QML程序中定义了一个全局的变量,表
示按钮的信号。当某一个按钮被点击,该变量会从默认值变为某个按钮的名称。QML程序会不间断地查询该全局变量的值,若该变量不是默认值,就会创建一个描述当前界面的信息的JSON数据,并反馈给C++内核程序。最后再把该全局变量重新设置为默认值,表示该信号已被处理。
3 三维模型渲染引擎
本文采用了QML与OpenGL(Open Graphics Library,开放式图形库)混合编程来实现三维几何体及体素的可视化。[10]具体实现如下:
(1)定义了一个继承自QQuickItem的类,将其命名为OpenGLItem,如图2所示。在Qt Quick中所有可视的控件都继承自QQuickItem,它定义了可视控件中所有常见的属性,例如x和y的位置,宽度和高度,锚定位和按键事件处理。通过继承QQuickItem,可以为自定义的可视控件提供这些属性的支持。
Render指针类型的m_render,是进行渲染工作的核心成员。Sycn()函数主要进行一些初始化工作,并连接相应的信号。Cleanup()用于释放并置空m_render指针。如图3所示,图形渲染的过程发生在beforeRendering()和afterRender()之间。timerEvent()使用了QTimerEvent的定时器功能,用于定时提醒窗口进行重绘。
(2)Render类是实现了使用OpenGL渲染图像的类。该类继承自QOpenGLFunctions,以使用Qt封
装的Qt OpenGL模块的函数。QOpenGLBuffer类型的成员变量m_vbo用于储存顶点数据。initializeShader()函数通过调用QOpenGLShader的接口设置了顶点着器、片元着器以及几何着器。
图形渲染管线过程为:1.定义图形的顶点数据,作为输入发送到顶点着器(Vertex Shader)中,顶点着器在GPU中创建内存储存数据,并处理数据,实现图元装配,形成表示图元的顶点集。申请顶点缓冲对象(Vertex Buffer Objects, VBO)管理这个内存,VBO储存顶点数据,实现批量数据的传输而非单个顶点数据。2.图元装配后的输出会传递给几何着器(Geometry Shader)。几何着器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。3.几何着器输出的顶点数据传入到光栅化阶段,执行光栅化操作,将图元映射为像素片元(fragment),并裁切掉视图外的像素。4.针对光栅化过程产生的片元,执行片元着器(fragment shader),根据图形的场景数据(光照、阴影、颜、纹理等)计算片元的最终颜。
5.输出最终图形。[11]
(3)TracballCamera类实现了轨迹球以及摄像机,为OpenGLItem提供了使用鼠标拖动模型、旋转模型和放缩模型等操作。[12]显示图形的窗口就是一个摄像机,三维模型是被观察的对象。Camera3D类通过调整摄像机与模型之间的距离来显示不同大小的模型。轨迹球是在显示屏幕之外虚构一个球形曲面,鼠标在二维屏幕上的移动轨迹会被映射为球形曲面的一条曲线,使得用户能够获
54
55
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
得良好的动态观察体验。4 软件框架的应用与验证
在两种不同的应用场景下使用本文设计的软件框架进行软件开发,验证其可复用性以及可扩展性。4.1 多丝材机器人激光增材制造软件4.1.1 软件界面构建
如图4所示,编写了描述软件界面JSON 格式数据。解析界面元素的过程如下:
(1)设置为深的界面风格;
(2)为了使得界面更加简洁,把菜单栏设置为不可见;(3)监控模块中的“激光功率”、“送丝速度”、“实时温度”和“额定温度”都选用了事先实现的数码管控件模板,设置了相应的整数位数、小数位数以及单位名称。根据实际需要设定了警告数值,当实时数值达到警告线时,控件的数字会闪烁红发出警报;
(4)滑动窗口定位在应用程序窗口的右侧,折叠方向为从左至右。
(5)运动控制模块复用了方向控制按钮以及轴旋转按钮,由于机器人中具有两个自由度的变位机,扩展了相应的轴旋转按钮。
由于描述界面的代码中提供了有关布局的属性信息(如控件所在行、列以及行跨度、列跨度),界面选用GridLayout 的布局方式:把应用程序窗口划分为若干个正方形区域,作为控件尺寸的最基本单位;根据控件的行、列把控件的左上角置于相应的正方形区域,根据行跨度和列跨度赋予控件两个方向所占的空间。4.1.2 渲染引擎应用
在增材制造的加工过程中,技术人员对于机器人的姿态尤其关注。利用软件框架中的三维模型渲染引擎,载入了机器人各个轴的STL 模型,根据其位置关系以及每个轴之间的相对角度,在窗口中渲染机器人的模型。
当操作人员点击CONNECT 按钮,软件与机器人建立起UDP 连接,机器人各个轴的实时数据通过网络接口不断发送给软件的C++内核,OpenGL 渲染引擎根据接收的机器人各个轴角度信息,实时渲染出机器人的姿态,效果如图5所示。4.1.3 用户与内核的交互
当用户修改了文本输入框上的数值后点击了控制模块上的按钮,QML 程序中表示按钮操作的全局变量“SIGNAL ”的默认值会被修改为按钮的名称,QML 查询到该值非默认值时,会向C++内核发送所有控件的信息以及按钮操作的信息。C++内核收到该信息后,会根据具体操作信号,只读取对应控件的信息,再对加工设备发出指令。图6展示了控制机器人向左位移的信息交互过程。4.2 彩模型处理与3DP工艺加工制造软件4.2.1 软件界面构建
如图7所示,编写了描述界面的JSON 文件,解析为界面的过程如下:选用了浅的界面风格;主窗口加入了滑动条,与切片所在的高度位置进行动态绑定;滑动窗口定位于应用程序窗口的右下角,折叠方向为从上至下;控件属性缺省了布局的信息,根据控件在描述文件中的先后顺序使用ColumnLayout 的方式进行排列。4.2.2 渲染引擎应用
界面包含两个渲染图形的窗口:
(1)载入AMF 文件,根据每个三角面片的几何信息以及颜信息,使用OpenGL 渲染彩三维模型;
(2)根据切片厚度、切片所在平面和切片层厚等信息,渲染
切片的彩二维图形。
桐城派散文
效果如图
8所示。
图3:QQuickItem 渲染机制[13]
图4:多丝材机器人激光增材制造软件界面JSON 描述
图5:多丝材机器人激光增材制造软件界面
56
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
5 结语
iso18000本文软件框架面向增材制造领域,通过其界面生成引擎可以快速构建自定义的增材制造软件界面,适用于不同工艺、不同类型的
增材制造软件的开发。对两个不同应用场景的增材制造软件进行开发,编写了两个不同的描述界面的JSON 文件,界面引擎生成了两个风格迥异的界面。
框架中QML 与C++集成的机制,使得开发人员在编写数据处理程序时,不用过多考虑界面程序的组成,有利于增加数据处理模块自身的内聚性,以及降低与界面程序的耦合度。
参考文献
[1]张李超,胡祺,王森林,张楠,史玉升.金属增材制造数据处
理与工艺规划研究综述[J].航空制造技术,2021,64(03):22-31.
[2]L. B. Zhang,H. Chen,Z. Li. RESEARCH AND DESIGN OF
INSPECTION CLOUD PLATFORM FRAMEWORK FOR SURVEYING AND MAPPING PRODUCTS[J]. ISPRS - International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences,2020,XLII-3/W10.
[3]彭哲徐.嵌入式软件架构分层的本质与优缺点探讨[J].自动
化应用,2019(02):77-78.
[4]章力博,韩文立,沈晶.多类测绘产品的质检软件平台框架设
计与应用[J].测绘科学,2020,45(06):187-191.
[5]XiaohuaZhang,Bo Huang. Research on Cross Platform
Development Model Based on Quick QT[P]. Proceedings of the 6th International Conference on Information Engineering for Mechanics and Materials,2016.
[6]彭华仁,房鹏飞.基于Qt 的手持式监测接收机人机交互界面
设计与实现[J].电子制作,2021(07):58-60.
[7]陈珍锐,刘鑫.基于Qt 的自主航行系统终端设计与实现[J].
科学技术创新,2020(34):107-109.
[8]李宇宏.基于QML 的协议测试软件研究[J].中国新通
信,2020,22(10):47-48.
[9]黄秀丽,陈志.基于JSON 的异构Web 平台的设计与实现[J].
新干线计算机技术与发展,2021,31(03):120-125.
[10]徐凤雪.OpenGL 中三维图形的显示过程[J].电子技术与软件
工程,2020(02):66-68.
[11]吕静贤,王晨飞,韩维,吴刚.基于三维可视化技术的智能
机房应用[J].电子技术与软件工程,2019(22):132-133.
[12]黄承科.用轨迹球实现地物化资料三维立体图的旋转[J].新
疆有金属,2013,36(S2):59-60+63.
[13]Giuseppe D’Angelo.How to integrate OpenGL code with
Qt Quick 2 applications (part 2) (2016.01.26)[EB/OL].www.kdab/integrate-opengl-code-qt-quick-2-applications-part-2/作者简介
杨声浩(1996-),男,华中科技大学材料科学与工程学院硕士研究生。研究方向为快速成形、软件框架。覃林(1999-),男,华中科技大学材料科学与工程学院硕士研究生。研究方向为快速成形、C
AD/CAM。黄江(1999-),男,华中科技大学材料科学与工程学院硕士研究生。研究方向为增材制造软件开发。杨蕾(1995-),
男,
华中科技大学材料科学与工程学院硕士研究生。研究方向为快速成形、路径规划。
郭强强(1996-),男,华中科技大学材料科学与工程学院硕士研究生。研究方向为快速成形、CAD/CAM。
图6:信息交互示意图
图7:彩模型处理与3DP 工艺加工制造软件界面JSON 描述
图8:彩模型处理与3DP 工艺加工制造软件界面
>江阴华士疫情最新消息

本文发布于:2024-09-21 18:48:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/71622.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:软件   控件   界面   制造   增材   数据   属性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议