来源:期刊VIP网所属分类:免费文献发布时间:2021-07-06浏览:次
摘要:本文为了提高开发软件的效率,设计了可复用、柔性的增材制造软件框架平台,提供了使用声明式语言快速生成自定义用户交互界面、OpenGL渲染模型等服务。并在实际项目中完成不同应用场景下增材制造软件的开发。
关键词:增材制造;软件框架;声明式语言;JSON;OpenGL.
增材制造(Additive Manufacturing,AM)技术,又名3D打印(3D Printing),是一种基于数字模型,逐层堆积材料,形成三维实体的技术。["作为一种先进制造技术,增材制造技术的应用领域不断扩展。增材制造软件作为增材制造技术中的一个重要的组成部分,其用户面在不断扩大,需求量也在日益增长。
增材制造软件具有多种不同的加工工艺,包括SLS,SLA FDM,LOM,WAAM,3DP等。尽管从原理来讲都是逐层制造并堆积成实体的过程,但是实际上不同工艺的增材制造技术的具体流程具有很大的差异,对软件实现的需求也是各不相同。同样的界面以及相同的开发流程并不满足不同类型增材制造软件的需求。传统增材制造软件的开发需要从头开始编写特定的界面程序以及对应的功能模块,再把各个模块整合。这种开发的方式在一些具有相似性的工作耗费了大量的资源。在增材制造技术高速发展的现状,这种开发模式已经越发难以满足当下的要求。
针对上述问题,研究并设计了一种专用于增材制造领域,面向各种不同增材制造工艺的可复用、可加速开发、适应不同应用场景的增材制造软件框架。使用声明式语言QML搭建用户界面框架,使用C++开发数据处理模块以及三维模型渲染引擎,通过轻量化的JSON格式数据进行界面与后台之间以及不同模块之间的数据交互。
1增材制造软件框架
1.1 软件框架
软件体系结构描述了系统中相互交互的组件的关系,而软件框架不单反映了软件的体系结构,还需要为专门的应用领域提供软件的模板。软件框架也是一种特殊的软件,是可复用、可扩展的半成品软件。
1.2 0ML编程语言
QMIL是一种用于描述应用程序用户界面的声明式编程语言,使用一些可视组件以及这些组件之间的交互来描述用户界面,是一种高可读性的语言。由于QML引擎集成了Qt元对象系统,由Qobjet派生的子类的属性、方法和信号等都可以在QML中访问。
基于这个机制,可以通过以下两种方式将C++功能暴露给QML:
(1)把C+类注册到QML类型系统,在QML中可以实例化该类型:
(2)把C++实例作为上下文对象嵌入到QML代码中,使该对象作为C++与QML代码交互的桥梁。156使用QML作为界面编程语言具有以下的优势:
(1)相对于传统增材制造软件使用MFC(Microsoft Foundatin Classes,微软基础类库)或Qt C++等工具构建用户界面的方式,使用声明式编程语言降低了开发难度,提高了开发效率;
(2)可以降低界面程序与 C++ 后台程序的耦合度;
(3)便于与 C++ 程序进行交互。[6-8]
1.3 JSON数据交换格式
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,是基于Javascript规范的一个子集,是JavaScript原生数据格式。
19而QML提供了专门用于编写QML应用程序的Javascript主机环境,实现了多数JavaScript的对象和函数。不需要导入其他模块,QML就可以解析JSON字符串。另外,腾讯公司开发了一个高效C++ JSON解析/生成器RapidSON,以及Qt C++本身也包含了处理JSON的类(如QIsondocument,QJsonArray、QJsonObject等)。
因此,采用JSON作为数据交换格式,对于QML和Ct+都具有良好的效率和兼容性。
1.4数据交互框架设计
增材制造软件框架的数据交互框架设计如图1所示。
在C++程序中实例化一个继承了Qobiect类型的上下文对象,该对象中具有保存JSON数据的成员变量。可以在C++程序中产生的数据会被构建为一个JSON对象,保存为上下文对象中的一个成员变量,其属性会被暴露给QML程序。QML通过该上下文对象得到从C++传递的JSON数据,本文设计的解析器会将其翻译为控件的信息,并呈现到界面上。
为了提高三维模型渲染的效率,通过OpenGL实现了三维模型渲染的C++类。该类继承了QQuickltem类,并被注册为一个可实例化的OML类型。在QML程序将其实例化为一个渲染三维图像的控件。当用户对该控件进行了鼠标点击和拖动等操作后,可以调用C++程序中实现的槽函数,刷新显示三维图形的窗口。当用户对除模型渲染窗口外的其他控件进行了一定的操作,所产生的操作信号、发出的指令和设定的参数等会被重新构建为一个JSON对象,并写入至上下文对象中。C++数据处理模块得到该JSON对象后,解析为具体的指令:与图像有关的信息会直接传递到OpenGL渲染的对象;与加工有关的信息会被传递到控制模块,控制模块把数据转换为相应的加工指令,通过网络接口将加工指令发送到加工设备。加工设备产生的实时参数会通过网络接口反馈给C+内核程序。
2界面元素构建
2.1界面元素抽象化
从表面上看,应用程序的界面是由各个外观千差万别的控件所组合成。不同的控件都是由一系列数据描述的,控件显示发生的变化也就是其背后数据发生的变化。因此,本文把界面的每个元素抽象为数据的集合,每个控件都可以被表示为一个具有若干个属性的对象。控件的属性包括其独有的ID、控件的类型(如文本、滑动条和数码管等以及一些自定义的模板类型)、布局属性、尺寸参数、控件特定的数据属性(如字体的颜色、文本内容、数值等)
2.2界面生成引擎
QML支持动态创建对象。要动态加载定义在一个QML文件中的组件,可以调用Qt全局对象中的QtcreateComponent()函数。本文基于这种动态创建对象的方法,实现了一个界面生成引擎。区别于传统增材制造软件构建界面的难以复用的繁琐过程,本文的界面生成引擎面向各种不同类型的增材制造工艺的需求,都可以通过类似的方法生成界面。界面开发人员可根据实际需求,编写JSON数据,每一个JSON对象代表着对应的控件。QML会遍历这些JSON对象,根据对象中的控件类型属性调用动态创建相应控件的函数。函数的参数包括控件的尺寸参数、特定的数据属性。再根据设定的布局属性进行网格布局。
2.3控件属性更新
QML程序中对控件属性的操作,要通过控件的id属性找到对应的控件。动态生成的控件不能指定ID属性,但可以存入到数组中。本文自定义一种"ID"关键字,对应值为一个字符串,是每个控件单独占有的属性。使用QHash类建立控件的ID字符串与在数组中对应下标的查找关系。当动态控件对应的后台数据发生变化,可以向暴露给QML的C++上下文对象发送JSON数据,当中包含控件的ID字符串、控件类型以及要更新的属性的值,根据上文建立的查找表找到相应的动态控件,并修改属性值。
2.4界面操作信息反馈
用户对界面的操作主要包括修改控件的属性(如在文本框中输入数据)和点击按钮。从上一次点击按钮之后,修改了若干个控件的信息,再到下一次点击按钮时,这一系列的操作过程可以看作一个原子级别的操作,这个原子级别操作会触发一次界面信息的反馈。
QML程序中定义了一个全局的变量,表示按钮的信号。当某一个按钮被点击,该变量会从默认值变为某个按钮的名称。OML程序会不间断地查询该全局变量的值,若该变量不是默认值,就会创建一个描述当前界面的信息的JSON数据,并反馈给C++内核程序。
最后再把该全局变量重新设置为默认值,表示该信号已被处理。
3三维模型渲染引擎
本文采用了QML与OpenGL(Open Graphics Library,开放式图形库)混合编程来实现三维几何体及体素的可视化。"0具体实现如下:
(1)定义了一个继承自QQuickltem的类,将其命名为OpenGLItem,如图2所示。在Qt Quick中所有可视的控件都继承自QQuickltem,它定义了可视控件中所有常见的属性,例如x和y的位置,宽度和高度,锚定位和按键事件处理。通过继承QQuickltem,可以为自定义的可视控件提供这些属性的支持。
Render指针类型的m-render,是进行渲染工作的核心成员。Sycn0函数主要进行一些初始化工作,并连接相应的信号。
Cleanup)用于释放并置空m-render指针。如图3所示,图形渲染的过程发生在before Renderingo)和afterRender)之间。timerEvent)
使用了QTimerEvent的定时器功能,用于定时提醒窗口进行重绘。(2)Render类是实现了使用OpenGL渲染图像的类。该类继承自QOpenGLFunctions,以使用Qt封装的Qt OpenGL模块的函数。Q0penGL Buffer 类型的成员变量m-vbo用于储存顶点数据。initializesShader)函数通过调用QOpenGLShader口i置了顶点着色器、片元着色器以及几何着色器。
图形渲染管线过程为:1.定义图形的顶点数据,作为输入发送到顶点着色器(Vertex Shader)中,顶点着色器在GPU中创建内存储存数据,并处理数据,实现图元装配,形成表示图元的顶点集。
申请顶点缓冲对象(Vertex Buffer Objects,VBO)管理这个内存,VBO储存顶点数据,实现批量数据的传输而非单个顶点数据。2.图元装配后的输出会传递给几何着色器(Geometry Shader)。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。3.几何着色器输出的顶点数据传入到光栅化阶段,执行光栅化操作,将图元映射为像素片元(fragment),并裁切掉视图外的像素。4.针对光栅化过程产生的片元,执行片元着色器(fragment shader),根据图形的场景数据(光照、阴影、颜色、纹理等)计算片元的最终颜色。
5,输出最终图形。
(3)TracballCamera类实现了轨迹球以及摄像机,为OpenGLltem提供了使用鼠标拖动模型、旋转模型和放缩模型等操作。[12]显示图形的窗口就是一个摄像机,三维模型是被观察的对象。
Camera3D类通过调整摄像机与模型之间的距离来显示不同大小的模型。轨迹球是在显示屏幕之外虚构一个球形曲面,鼠标在二维屏幕上的移动轨迹会被映射为球形曲面的一条曲线,使得用户能够获得良好的动态观察体验。
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文件,解析为界面的过程如下:选用了浅色的界面风格;主窗口加入了滑动条,与切片所在的高度位置进行动态绑定:滑动窗口定位于应用程序窗口的右下角,折叠方向为从上至下:控件属性缺省了布局的信息,根据控件在描述文件中的先后顺序使用ColumnlLayout的方式进行排列。
4.2.2渲染引擎应用
界面包含两个渲染图形的窗口:
(1)载入AMF文件,根据每个三角面片的几何信息以及颜色信息,使用OpenGL渲染彩色三维模型;
(2)根据切片厚度、切片所在平面和切片层厚等信息,渲染切片的彩色二维图形。
效果如图8所示。
5 结语
本文软件框架面向增材制造领域,通过其界面生成引擎可以快速构建自定义的增材制造软件界面,适用于不同工艺、不同类型的增材制造软件的开发。对两个不同应用场景的增材制造软件进行开发,编写了两个不同的描述界面的JSON文件,界面引擎生成了两个风格迥异的界面。
框架中QML与C++集成的机制,使得开发人员在编写数据处理程序时,不用过多考虑界面程序的组成,有利于增加数据处理模块自身的内聚性,以及降低与界面程序的耦合度。
参考文献
[1]张李超,胡祺,王森林,张楠,史玉升,金属增材制造数据处理与工艺规划研究综述[J].航空制造技术,2021,64(03):22-31.
[2]L.B.Zhang,H.Chen,Z.Li.RESEARCH AND DESIGN OF INS PECT ION CLOUD PLATFORM FRAMEWORK FOR SURVEYING AND MAPPING PRODUCTS[J].ISPRS-International Archives of the Photogrammetry,Remote Sensing and Spatial Informa tion 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 ng ineering 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].
期刊VIP网,您身边的高端学术顾问
文章名称: 电力收款集中一体化缴费平台设计与实现
文章地址: http://www.qikanvip.com/mianfeiwx/58320.html
* 填写需求信息,或选择平台现有SCI/SSCI选题(如下)。