數控系統人機界面二次開發平臺的設計
2018-8-16 來源:轉載 作者: 吳慧杰, 王 品
摘要: 數控系統自帶的標準化的人機界面, 展現給用戶大多是同一種形式, 不能滿足用戶特殊定制需求以及專用的數控系統的界面需求. 在分析用戶的界面定制需求的基礎上, 提出基于Qt的 Graphics View Framework 及model/view 架構的可視化數控系統人機界面二次開發平臺設計方法. 首先采用面向對象的二次開發方法將界面所需的組件注冊到平臺并綁定對應的屬性對象, 然后采用參數化的二次開發方法完成界面的定制, 最后用 XML文件作為配置文件描述定制的圖形界面, 在開發平臺與數控系統之間傳遞界面數據. 二次開發平臺主要包括 PC 端配置平臺以及 NC 端解析平臺兩個模塊. 實驗結果表明平臺在數控系統人機界面的專項定制及復用方面取得良好的效果, 提高了數控系統的人機界面開發效率.
關鍵詞: 數控系統; 人機界面; 二次開發; XML 配置文件
隨著工業化進程的不斷推進, 一個國家的數控化率的高低已經成為衡量其機械工業技術水平的一個重要指標. 開放式數控系統要求開發出方便擴展、功能柔性并且對用戶開放的數控系統, 便于用戶基于其開放平臺結合專有工藝進行二次開發. 人機界面(Human Machine Interface, 簡稱 HMI)是人與數控系統之間傳遞、交換信息的媒介和對話窗口, 是數控系統的重要組成部分. 數控系統的人機界面發展也集中在專用機床的應用、特殊結構的引用以及用戶操作簡化等方面. 目前國內的數控系統自帶的標準化的人機界面, 展現給用戶的大多是同一種形式, 這種標準化的人機界面對許多專用數控系統都不是最優化的設計, 已經不能滿足用戶的需求. 其一, 不能滿足用戶對特定加工工藝的個性化定制需求; 其二, 如果用戶在系統的使用過程中提出新的功能需求, 新功能的開發周期往往不能及時響應市場需求. 而且隨著系統規模不斷擴大、系統功能不斷增加完善, 重新編寫界面代碼的時間和成本都將成倍遞增. 因此, 需要開發一種數控系統人機界面二次開發平臺, 用戶基于此平臺可以根據特定的功能需求快速便捷地開發定制人機界面, 降低開發和維護成本. 不僅滿足用戶對數控系統的專業化、個性化需求, 而且滿足開放式數控系統的便于擴展、對用戶開放等需求.
本文提出的數控系統人機界面二次開發平臺, 該平臺具有可視化、易擴展、易復用、易維護等特性. 用戶基于平臺可以自己配置人機界面上傳到數控系統服務器, 用戶所見即所得, 不需要學習任何的編程語言. 開發人員也可以利用平臺進行系統界面的修改、升級, 不需要重新編寫代碼, 大大降低開發成本, 提高開發效率.
1 、人機界面二次開發平臺的結構
本文設計的數控系統人機界面二次開發平臺主要包括 PC 端配置平臺和 NC 端解析平臺兩個模塊. 下面對兩個模塊作具體的描述. PC 端配置平臺是基于 Qt 的圖形視圖架構開發的可視化的界面配置軟件, 用于注冊并配置數控系統人機界面的組件及其屬性, 并自動生成 XML 配置文件. 主要包括組件注冊層、界面定制層、文件生成層:
(1) 組件注冊層: 用于注冊配置人機界面需要的系統的組件, 主要分為三類: 顯示組件、編輯組件以及事件組件. 注冊各種類型的組件到系統的組件盒, 并且將各種組件對應的不同的屬性對象綁定到組件中. 在該層提供用戶擴展系統所需的二次開發接口框架,提高系統的可復用性與可擴展性.
(2) 界面定制層: 用于定制用戶所需的個性化的、專用化的數控系統人機界面. 并且配置各個組件的屬性值, 存儲到組件綁定的屬性對象中.
(3) XML 配置文件用于描述人機界面的圖形化數據, 完成PC端配置平臺和NC端解析平臺的數據傳遞. XML 是純數據描述, 與編程語言、操作系統或傳輸協議均無關系, 因此可以將數據從以代碼為中心的基礎結構所產生的約束中解放出來, 可以做到將圖形用戶界面與結構化數據分割開來, 具有良好的可擴展性和適用性, 是用來描述圖形用戶界面的最佳載體. 基于 XML 的界面自動生成比基于模型驅動的軟件界面更加靈活多變, 可以同時運行在不同的平臺上, 而且對于開發后用戶界面的控制也更加容易. NC 端解析平臺讀取并解析配置文件數據, 完成數據與原數控系統的交互并顯示 PC 端配置的人機界面. 包括文件解析層、調度管理層、通信服務層、系統接口層. 如圖 1 所示, 為平臺總體框架圖. PC 端配置平臺注冊組件、屬性、屬性編輯器, 然后從注冊的組件中選擇需要的組件在頁面中進行定制, 根據不同的數控系統人機界面需求定制不同的人機界面, 然后配置各個組件的屬性值, 將配置完畢的人機界面信息保存到XML 配置文件中; 通過以太網將配置文件發送到 NC端解析平臺; 數控系統解析配置文件, 根據屬性值顯示人機界面, 最終達到顯示用戶定制的人機界面的目的.

圖 1 平臺總體框架圖
2、主要模塊的設計方法
2.1 PC 端配置平臺模塊
PC 端配置平臺是基于 Qt 的圖形視圖框架開發的可視化的應用程序, 工作在 PC 機上. 用戶只需要從組件盒選擇要添加的組件, 并且配置好組件的位置、名稱、文本、大小、字體、背景色等公共屬性信息, 然后根據組件的不同類型設置組件的特有屬性, 保存到配置文件中并利用系統集成的軟件將配置文件上傳到數控系統服務器. 為了滿足數控系統對精度、實時性等方面的高要求, PC端配置平臺允許用戶配置數控系統對應的多個界面. 按照系統不同的功能需求以及各個界面不同的性質, 將界面設計成不同的模式, 并且可以在各個界面之間方便的切換. 在新建工程時配置好系統的分辨率、頁面數量、過程數、每個過程的軸數、軸名及主軸數、以及系統上電首頁等系統屬性. 而且用戶可以隨時對上述屬性做反復的修改, 使用戶配置的信息便于復用, 提高系統可重用性.
2.1.1 組件注冊層
組件是人機界面中最基本也是最重要的單元, 人機界面由一個個不同類型的組件組合而成. 用戶利用二次開發平臺界面中的組件盒, 通過選擇拖拽一系列的操作以及屬性的配置, 生成滿足專用需求的人機界面. 組件注冊層充分利用了面向對象的設計思想, 采用基于面向對象的二次開發技術, 充分發揮類的繼承性、封裝性、多態性等特點, 實現平臺中組件注冊層的框架設計. 將平臺中涉及到的組件、組件屬性、屬性編輯器等一切客觀的實體都看成對象, 復雜的對象可以由簡單的對象經過組合構成, 例如組件的幾何形狀屬性是一個屬性對象, 它又是由 X、Y、寬度、高度四個屬性對象組成. 每一個屬性對象都有各自綁定的屬性編輯器對象. 對象與對象之間通過統一的信號-槽的消息傳遞機制實現相互聯系.
為了支持平臺的可擴展性和可移植性, 將各個對象的定義與實現分離, 通過繼承展現各個對象之間的關系, 再通過各個對象提供的重載和虛函數的特性以及實體的動態性, 建立了面向對象的二次開發平臺接口框架, 提供了對于平臺進行擴展的面向應用程序的二次開發接口 API, 包括組件擴展接口 API、組件屬性擴展接口 API 和屬性編輯器擴展接口 API 等. 用戶基于平臺提供的 API 可以實現對組件、組件屬性、屬性編輯器等對象和行為的擴展, 使平臺具有良好的可擴展性.
在分析數控系統人機界面的顯示特點之后, 根據面向對象的設計方法, 組件的類層次結構如圖 2 所示. 將平臺的組件歸納為以下幾類:
(1) 顯示組件:
用于顯示數控系統運行過程中的各個參數值、表達式以及界面組成的一些靜態元素, 如圖片等.
(2) 編輯組件:
用于用戶的輸入.
(3) 事件組件:
用于對數控系統的各種控制事件, 如頁面跳轉、文件打開等事件操作.

圖 2 組件的類層次結構圖
各種組件根據用途分別擴展上述三種組件類型, 每一個組件都有 UUID 號用作程序的唯一標識. 用戶可以根據需要擴展多種類型的組件, 本系統中設計了最基本的標簽、輸入框、按鈕組件. 用戶在擴展組件類型時, 需要定義繼承自組件基類的類, 在類中實現組件定義、綁定屬性等各種相關操作的接口, 下面對組件擴展 API 主要的接口類型以及實現的功能進行介紹.
(1) create Object(): 用于創建圖形視圖框架中顯示在 QGraphics Proxy Widget 上的控件, 比如有 Label、Line Edit 、 Button 等 , 將 定 義 的 控 件 綁 定 到QGraphics Proxy Widget 上. 該接口無返回值.
(2) init Property(): 用于將屬性對象綁定到組件上. 該接口也沒有返回值.
(3) set Default(): 將綁定到組件的每一個屬性對象賦初始值. 無返回值.
(4) set Property Value(const QString &name, const QVariant &value): 設置屬性對象的值. 參數 name 表示要設置的屬性名稱, value 表示屬性值. 無返回值.
(5) dirty Changed(): 表示屬性的變化, 在頁面上直接改變屬性的值時, 要通過該接口發送信號, 用于屬性編輯列表的更新.
通過分析數控系統的屬性對象, 歸納出各種類型對象的公有屬性以及各個組件對應的特有屬性, 再將設計對象按照不同的特征結構進行分類設計. 對于組件, 設計了所有組件共同的基Abstract Item, 它的屬性可以分為兩類: 靜態屬性特征用于描述組件的數據;
動態屬性特征用于描述對組件的操作. 這些屬性都封裝在頂層的結構中, 對于用戶來說是不可見的, 體現面向對象的封裝性. 平臺注冊的屬性的層次圖如圖 3所示.

圖 3 屬性的類層次結構圖
圖 3 給出了平臺注冊的最基本的屬性, 其他的屬性都可以通過這些基本屬性組合而成. 例如, 組件最基本的 Geometry Property 屬性, 用于描述組件的位置以及大小, 該屬性就可以由四個Int Property 組成. 其他的一些屬性構成的方法類似, 可以在屬性中包含一個或者多個基本屬性為子屬性, 構成組件所需的復雜屬性.
在將屬性綁定到組件的過程中, 公有的屬性放到結構的頂層組件中, 特有的屬性放到結構的底層組件中. 下面對將屬性注冊到系統以及綁定到組件的注冊綁定機制進行詳細說明.
屬性注冊綁定機制的設計要考慮到系統的可維護、可擴展、靈活性等非功能需求. 考慮到用戶后續可能對組件屬性以及屬性編輯器進行擴展, 充分發揮了面向對象程序設計的封裝、繼承、多態等特性降低系統的耦合度. 用戶在對屬性進行擴展時, 只需要編寫要擴展的屬性對象并實現預留的接口即可, 不會對已有的屬性造成任何的影響. 本文采用最基本的簡單工廠設計模式, 降低系統的耦合度, 完整封裝屬性對象. 屬性注冊機制的結構圖如圖 4 所示.

圖 4 屬性注冊機制的結構圖
具體的注冊機制如下所述: 首先提供一個屬性基類 Abstract Property 類, 它包含了 value、attribute、property、children、parent、item 等屬性, 還提供了用于文件生成層的 to XML()、from XML()等方法, 然后其他的各種基本屬性均繼承自該基類, 按需重寫基類的方法, 這樣就大大降低了系統的耦合度, 修改或者添加新的屬性類的時候不會影響到其他的屬性類. 然后給出一個工廠類 Property Factory 用于得到指定的屬性對象, 并將其綁定到組件上. Property Factory類提供了兩個主要的方法. 一個用于注冊屬性的register Property()方法, 該方法需要提供的參數包括屬性名稱 name 以及要注冊到的屬性的元數據結構meta Object, 然后將該屬性注冊到 meta Object 結構中, 用一個 Map 的二元集合存儲該屬性的名稱以及元數據結構. 另一個用于得到指定的屬性對象將其綁定到指定的組件上的 create Property()方法, 這個方法需要提供的參數為屬性的名稱 name, 方法會根據名稱從 Map結構中查找對應的屬性, 返回屬性對象, 將其綁定到組件上, 并將屬性的 item 屬性設置為需要綁定的組件對象.
在屬性注冊時, 由于各種組件所需的屬性類型較多, 本文采用了帶參數的宏定義的方法來預處理注冊機制, 這樣在屬性類型較多時, 不但可以很好的防止出錯, 提高代碼的可移植性, 而且可以更加順利的整合代碼規模提高運行速度. 本文的宏定義方法只在平臺運行時執行一次, 將所有的屬性對象一次性的注冊到元對象 meta Object 結構中, 存儲到 Map 集合, 避免多次調用宏產生的副作用所帶來的不可預估的后果. 宏定義如下:
#ifndef register Property
#define register Property(name,type)
Property Factory::register Property(name,
&type::meta Object)
#endif
然后提供一個用于注冊的 register Base Property()函數, 該函數在平臺啟動時執行, 將所有的注冊函數包含在函數體中運行一次即可將所有的屬性注冊到平臺的結構中. 例如要注冊 Bool 類型的屬性, 只需要將register Property(“Bool”,Bool Property) 包 含 在register Base Property() 函 數 體 , 就 會 調 用Property Factory::register Property()方法注冊屬性對象.
將屬性綁定到組件的綁定機制具體過程為: 在組件基類 Abstract Item 類聲明有一個用于存儲描述組件的屬性的 Map 集合, 將屬性的名稱作為鍵值存儲. 然后聲明一個 Init Property()方法, 將所有組件共有的屬性, 例如 Object Name、Geometry Property 等保存在 Map集 合 中 . 在 底 層 組 件 也 就 是 各 個 子 類 中 重 寫Init Property()方法, 首先調用父類的該方法, 將共有的屬性先存儲到子類的 Map 集合中, 然后再創建子類自己的特有屬性. 然后就可以從 Map 集合中查找具體的屬性進行配置. 將屬性編輯器注冊到屬性對象的注冊機制類似, 不再做詳細描述.
2.1.2 界面定制層
界面定制層實現界面的定制功能, 完成各種組件的添加、組件屬性的設置; 界面定制層包括頁面視口、屬性編輯視口、組件列表視口三個視口以不同的形式展現用戶定置的人機界面, 三個視口數據統一; 屬性編輯視口以樹型結構顯示組件的各個屬性; 組件列表視口以樹型結構顯示系統添加的頁面以及每一個頁面添加的組件. 如圖 5 所示為三個視口實時變化交互方式.

圖 5 三個視口實時變化交互方式圖
三個視口采用 Qt 特殊的信號-槽的消息傳遞機制實現數據的統一. Qt 摒棄了傳統的消息驅動的機制, 創新性的提出了一種在對象之間進行通訊的非常先進的 MOC 機制也就是信號-槽的消息傳遞機制. 這種傳遞機制削弱了各個對象之間的耦合度, 信號發射的對象無需了解哪一個對象的槽函數對這個信號做出反應, 同樣對象的槽函數也無須知道是哪一個信號發射觸發自己, 只需要用connect()函數將信號槽關聯, 那么信號在發射時槽函數一定會被調用, 這是 Qt 的機制保證的. 上述的三個視口均聲明了多個信號、槽函數, 保證視口間數據的統一. 每個視口一旦有操作發生, 該操作對應的信號就會發射, 其他的視口的槽函數做出響應更新顯示.
頁面視口添加的組件包括顯示組件、編輯組件、事件組件三種. 添加組件后用戶可以通過拖拽、編輯、水平等距、垂直等距等快捷操作配置組件通用屬性. 除了通用屬性, 還要設置各種組件特有的屬性. 如圖 6為各種組件的特有屬性設置流程圖.
頁面定制層的定制過程全部采用參數化的設計方法. 這種方法保持了各個組件結構之間的拓撲關系不變, 組件的所有屬性一律采用參數來描述和控制, 某一個參數值的變化將會直接導致三個視口中顯示內容的自動變化, 提高了組件的修改重構能力, 極大的提升平臺的柔性設計.
參數化設計特別適合用于界面的組件結構形式固定而結構尺寸經常變化的規格化、標準化、系列化的設計, 利用參數化的設計來描述組件的形狀特征, 可以極大的提高界面的配置速度.

圖 6 組件的特有屬性設置流程圖
2.1.3 文件生成層
文件生成層讀取用戶配制的人機界面數據, 將數據封裝到 XML 節點對象中, 自動生成配置文件.
2.2 NC 端解析平臺模塊
PC 端將生成的配置文件通過以太網傳送到數控系統中由文件解析層解析并通過基于數控系統的統一消息庫和統一消息接口的模塊交互機制完成與數控系統的融合通信.
文件解析層讀取并解析 XML 配置文件數據, 采用基于預處理的解析技術. 如圖 7 所示.

圖 7 文件解析流程圖
調度管理層實現模塊初始化、功能模塊調用、系統配置與模塊間交互等功能, 將中性語言描述的數控專用控制功能、圖形用戶界面定制等功能轉化成功能模塊調用. 通信服務層實現 GUI 二次開發接口與數控系統的 HMI 功能模塊的交互. 系統接口層調用基于試試控制系統庫的專用數控系統二次開發平臺的 GUI 二次開發接口, 將 PC 端配置的數據傳遞給接口, 實現與原有數控系統的融合通信.
3 、實驗測試
3.1 功能測試
利用 Qt Creator 平臺開發本文的數控系統人機界面二次開發平臺的 PC 端配置平臺, 藍天數控高精數控系統作為 NC 端解析平臺, 可以實現對數控系統的人機界面進行專項定制以及重復修改操作. 實驗的 PC端定制界面與數控系統的顯示界面相同, 并實現了相關參數的配置, 可以監控機床狀態, 編輯相應變量, 對機床外部單元進行控制, 如圖 8 所示.
(a)PC 端配置平臺實驗測試圖
(b)NC 端解析平臺實驗測試圖


圖 8 實驗測試圖
3.2 界面的重復定制方法
開發人員可以利用平臺進行界面的修改、重復定制. 數控系統人機界面二次開發作為數控系統的可選功能, 提供一個參數控制該功能是否打開. 如果打開的話, 要想重新定制界面或者進行修改操作, 只需要將原有界面的配置文件下載后在 PC 端打開, 然后重新定制需要修改的部分, 生成新的配置文件上傳到數控系統服務器, 替換原有的文件即可. 配置文件名稱固定為 designer.xml, 數控系統會在指定的界面目錄下查找該文件, 上電后自動加載顯示. 因此在修改時上傳到數控系統的配置文件名稱不可變, 必須是上述名稱. 修改界面的操作流程圖如圖 9 所示.

圖 9 界面修改或重新定制流程圖
4、 結語
本文就數控系統人機界面不能滿足用戶個性化需求、開發維護周期長等不足之處, 設計了用于數控系統人機界面的二次開發平臺, 并對該平臺各個主要模塊設計方法進行了詳細的描述. 利用本文提出的數控系統人機界面二次開發平臺對數控系統人機界面進行可視化定制, 具有以下優點:
①支持可視化配置. 用戶在本平臺配置界面的過程中, 所見即所得, 對界面有直觀的把握, 用戶配置方便, 無需學習編程知識.
②支持組件及組件屬性的擴展. 用戶可以對平臺的組件、屬性等進行特定的增加, 只需要實現預留的接口.
③提高人機界面開發與維護效率, 降低成本. 用戶和開發人員可以利用平臺隨時對人機界面進行修改、定制, 縮短開發周期, 降低維護成本.
來源:中國科學院大學 中國科學院 沈陽計算技術研究所 沈陽高精數控智能技術股份有限公司
投稿箱:
如果您有機床行業、企業相關新聞稿件發表,或進行資訊合作,歡迎聯系本網編輯部, 郵箱:skjcsc@vip.sina.com
如果您有機床行業、企業相關新聞稿件發表,或進行資訊合作,歡迎聯系本網編輯部, 郵箱:skjcsc@vip.sina.com
更多相關信息