我們的服務符合學術規范和道德
專業 高端讓您使用時沒有后顧之憂
來源:期刊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.kg120.com/mianfeiwx/58320.html
* 填寫需求信息,或選擇平臺現有SCI/SSCI選題(如下)。