基于 FANUC 機床數控系統界面軟件二次開發的研究
2023-9-15 來源: 上海機床廠有限公司 作者: 顧凱端
1.引言
數控系統及其人機界面的出現使機床加工操作變得便捷與高效,而隨著行業發展,對加工精度、加工效率和工藝柔性的要求越來越高,數控通用人機界面已無法滿足這些需求,因此對機床數控系統人機界面軟件的二次開發成了數控機床生產廠家的重要任務。
目前市場上的數控機床人機界面多為嵌入式,面板尺寸小,操作工行動受到場地的局限,無法遠距離實時進行工藝參數調整、監控等操作,從生產效率和安全性來說都存在一定的缺陷,自動化、生產效率受到了限制。FANUC 和SIEMENS 等國外數控廠商進口的數控系統,其隨系統提供的人機界面是面向通用數控操作場景的,無法方便地制定機床配套工藝,不能滿足用戶的定制化需求。數控廠商在其配套的通用人機界面的基礎上,提供了人機界面開發接口,機床制造廠家就可以對人機界面進行二次開發,擴展人機界面功能,提高人機界面軟件的專用性、易用性,以更大限度地發揮機床的價值。
本文選取 FANUC Series 0i-MF 數控系統作為二次開發基礎平臺,采用面向對象的方法進行軟件框架設計,二次開發接口為 FOCAS 庫(即FANUC Open CNC API Specifications, 簡 稱FOCAS),利用 QT 提供基礎編程庫,確定程序達到的功能有顯示界面、軟硬件通訊、機床參數寫入、機床參數讀取以及系統報警監視等,實現對數控系統的二次開發。
2. 開發工具和總體框架
2.1 開發環境的選擇
FANUC 0i-MF 數控系統提供了二次開發接口(即 FOCAS),包含了數控連接和數控數據、PMC 數據讀寫功能,以及界面開發接口,即意味著基于此數控系統的人機界面二次開發自由度很大,架構選取自由。可運行 FOCAS 庫的操作系統目前主要是 Microsoft Windows,Windows操作系統使用簡單,系統穩定,用戶群體大,開發工具豐富,所以是 FANUC 數控二次開發首選。
軟件功能與界面庫可選用 MFC、.NET 和 Qt,MFC 雖然由微軟開發功能強大,但已經過時不再維護,所以不建議選用,.NET 是微軟主力開發庫,但性能遜色于 C++ 開發的應用程序,Qt作為 C++ 語言開發的功能界面庫,既能方便地進行界面開發,又有 C++ 便捷的底層訪問能力,其可靠性和寬松的開源協議使得 Qt 庫在工業界得到了廣泛的應用。結合 Windows 操作系統、FOCAS 庫和 Qt 編程庫的選取,微軟的 VisualStudio 就是較合適的開發工具了,安裝有 Qt 插件的 Visual Studio 2015 可方便地創建 Qt 應用程序解決方案,借助開發工具強大的功能,可輕松開展 FANUC 機床數控系統界面軟件的二次開發工作。測試環境可選用 FANUC 數控系統實體機或 FANUC CNC Guide。開發環境及工具如表 1 所示。
表 1 開發環境與工具表

2.2 總體框架的確立
由于要實現的二次開發的功能較為明確,所以采用清晰的分層架構,分層架構結構簡單明了,各層職責分明。分層架構主要分為通信層、功能層、界面層。通信層負責軟件功能層與數控系統的之間的數據交互,功能層負責軟件的功能實現,向下與通信層交互數據,向上給界面層提供功能接口,界面層向下負責對功能層的調用,向上負責與操作者的交互。二次開發的軟件總體框架圖如圖 1 所示。

圖 1 總體框架圖
3. 開發過程及結果
3.1 硬件連接
首先進行硬件連接,把 FANUC 0i-MF 數控單元的以太網網口(ETHERNET)通過網線連接至 PC 屏,達成將人機操作界面屏幕放大、分離式操作的目的 ; 其次,建立與數控單元的通訊連接,如利用 Visual Studio 2015 導入 FOCAS動態鏈接庫,編寫程序調用功能函數,與測試端 NC Guide 進行通訊 ; 再次,利用 FOCAS 庫函數設計機床參數數據寫入功能 ; 最后利用 QtDesigner 設計軟件界面。
3.2 界面分析
界面設計是整體框架的基礎,本文設計的人機界面采用多個窗口組合展示機床狀態,展示程序號、三根軸四種坐標系的展示窗口、機床加工狀態以及通訊設置按鈕和界面切換按鈕。
人機界面利用單行文本框,采用統一格式,把數據名標注在文本框左側,用于直觀地顯示讀取的信息。合理布局四個坐標顯示窗口的空隙和比例大小。為增加人機交互友好,下方控件按鈕分別對應調用通訊窗口和不同類型的坐標窗口切換,通過信號與槽的機制進行實現。
本文針對的數控系統是 FANUC 0i-MF 系列,僅支持以太網通訊,而在 FOCAS 控件庫中,已經完成了對通訊協議的開發并將其封裝,作為開發者,需要做的是導入 FOCAS 控件庫,調用以太網通訊函數,其會通過代理函數,向功能函數發送請求,自動建立通訊。
為體現面向對象的設計方法,將窗口封裝成單個類,通過在機床總界面依次創建窗口,在槽中利用枚舉類的邏輯判斷來刪除或插入窗口達到切換窗口坐標顯示的目的,實現人機交互。
3.3 人機界面框架設計
人機界面設計分為硬件連接和軟件設計兩部分,其中硬件連接用于實現人機界面的分離式設計,通過外部接口,將 FANUC 0i-MF 控制單元與上位機 PC 屏的網口相連。軟件部分負責實現數控機床監控狀態的功能,見圖 2。

圖 2 軟硬件連接流程圖
人機界面模塊分為通訊層、功能層和界面層,見圖 3,通訊層負責建立通訊和斷開通訊。功能層主要負責對不同類型三軸坐標和加工狀態的讀寫。界面層分為通訊窗口、坐標顯示窗口和機床窗口這三部分。

圖 3 人機界面程序框架
3.4 軟件二次開發設計
在 VS2015 開發環境下,使用 Qt5 作為開發庫,使用 VS 中的 QT GUI 框架開發機床人機界面,利用 FOCAS 1/2 Library 提供的函數作為接口,首先利用以太網建立通訊連接,然后建立數據寫入的接口連接,實現對機床狀態的讀取,最后完成界面層的布局,使用多對話框窗口水平或垂直布局,參照 FANUC 系統原始操作界面,能夠來回切換坐標顯示窗口,完成對數據的顯示(即可視化)。接下來參考圖 4 所示的機床界面監控總體框架從通訊層、功能層和界面層逐一分析。

圖 4 機床界面監控總體框架
3.4.1 通訊層
機床界面要能夠動態顯示機床數據,則須使界面與 CNC 系統通訊。FANUC 提供了 FOCAS通訊協議 , 使 PC 端與 FANUC 系統建立了通訊。在用戶 PC 端的開發環境應用程序中,調取 FANUC 提供的 FWLIB32/64.DLL 動態鏈接庫,由于 HSSB 需額外購買硬件來建立連接,因此沒有采用 HSSB 庫,而是選擇以太網庫。
FWLIB32/64.DLL 鏈接庫包含了 FOCAS 的控件庫,其目的是將目標包裝,通過句柄來獲取目標對象的屬性。在以太網庫中,通過將 CNC 的 IP地址參數傳遞給 CNC allclibhndl3 函數來創建TCP/IP 連接。
以太網板中的數據窗口函數會通過 TCP/IP棧數據傳輸與用戶 PC 端進行以太網連接。兩者在連接過程中用戶 PC 端會將數據窗口函數的代理函數向以太網板發送打包請求,包括獲取數據屬性、數據數量等,以太網板響應請求、反饋發送數據內容、錯誤代碼等。CNC 與以太網板通過 OPEN CNC I/F 在局部網絡中進行數據傳輸。
以太網的通訊 功 能 在 基 類 為 QDialog 的 對話 框 窗 口 類 LoginDiolag 獲取參數和在機床界面 FanucFrm 類中對通訊的槽定義來實現。
根據 FOCAS 庫的 FWLIB64.h 頭文件和文獻手冊,可以看到需要連接和斷開以太網連接要使用函數 “cnc_allclibhndl3” 和 “cnc_freelibhnd”。
cnc_allclibhndl3 其功能是分配庫的句柄并使用指定 IP 地址或主機名連接 CNC,實現以太網通信,需要以下參數 :
(1)輸入 :ipaddr,使用字符串方式來確定需要連接的 CNC 測試端的 IP 地址或者是主機名。
(2)輸入 :port,確定 TCP 需要連接的端口,通常固定為 8193.
(3)輸入 :timeout,設定超時的時間,若設為0則忽略超時,庫函數會一直等待。
(4)輸出 :FlibHndl,指定一個包含庫句柄信息的指針型或者整型變量。
cnc_freelibhndl 其功能是當程序終止時需要釋放庫句柄,防止數據累積報錯,即為中斷通訊連接,該函數需要輸入 FlibHndl 參數,當程序結束時,需要釋放的庫句柄。
由此可以看出,程序以建立以太網通訊算作開始,以中斷通訊連接、釋放庫函數作為結束,這兩者分別調用 cnc_allclibhndl3 與 cnc_freelibhndl 都在通訊層實現。
通訊函數需要庫句柄、CNC 測試端的 IP 地址、端口號等其他參數傳遞給 CNC 以太網通信函數進行連接。在 FWLIB64 庫文件中,查FANUC 樣例手冊 ,可找到以太網通訊對應的 cnc 函數cnc_allclibnd3。在該函數中輸入對應的參數即可建立連接。通過 cnc_freelibhndl 斷開連接、輸入 IP 地址、端口號、時間延時等,要得知通訊連接是否建立成功可通過接受返回值來判斷彈出何種類型的提示窗。
3.4.2 功能層
需要實現的功能有顯示程序狀態,顯示三軸的絕對坐標系、相對坐標系、剩余行程距離,顯示伺服軸轉速,顯示加工狀態。
根據 FOCAS 提供的 FWLIB64.DLL 中,要實現上述機床狀態的監控主要分為三部分 :
(1)使用 FOCAS 庫函數,從 CNC 測試端讀取機床參數。
(2)將從 CNC 測試端的機床參數數值賦值給變量,通過傳輸,利用程序中讀寫的變量在界面層顯示。
(3)將數據上傳。從機床數據讀取、機床數據用變量賦值寫入,數據動態更新依次進行。其中機床數據讀取使用 DataCollection 類,機床數據用變量賦值寫入用 MachinePosition 類。
要從 CNC 測試端讀取數據,調用使用FOCAS 提供的 FWLIB64.h 頭文件中的 cnc 函數獲取參數數值 ; 其次,是要想辦法把儲存在該函數里變量中的數值傳遞給與界面顯示文本相關的函數。
以獲取絕對坐標系的 X,Y,Z 三軸數值為例,使用數據采集類的成員函數 “voidabsolute(unsigned short h)” 作為讀取 cnc 測試端參數的指令,其參數句柄 h 就好比鑰匙,在調用 absolute 函數后把實參全局句柄 h 賦給absolute 函數的形參未定義的短句柄 h 后,解鎖指令,進行讀取。
在 absolute 函數中,需要讀取絕對坐標系的三軸坐標數值,根據 FOCAS 庫函數,應使用cnc 函 數 “cnc_absolute”。
cnc_absolute: 讀 取 用 “ 軸 ” 指 定 軸 的 絕對位置數據。絕對位置存儲在 “ODBAXIS” 的“data[0]” 中。其參數有 :
(1)輸入 :FlibHndl,指定庫句柄。
(2)輸入 :axis,指定要讀取的軸數,其中ALL_AXES 對 所 有 軸(ALL_AXES:-1),1,..,m 對單個軸(m: 控制軸數)。
( 3 )輸 入 : length ,指 定 數 據 塊 的 長度(ODBAXIS 結構的大小)。
(4)輸出 : 指向 ODBAXIS 結構的指針,包括控制軸的絕對位置數據。
參照手冊提供的 cnc_absolute 參數,在調用時,可以一次獲取一系列數控軸的坐標數值,最后只讀取需要的目標軸的數值即可。
使用ret儲存返回值,用于判斷輸入的參數是否報錯,若無錯誤,應為 EW_OK。之后, 用 浮 點 型 變 量 absoluteXf、absoluteYf、absoluteZf 分別儲存從 CNC 測試端獲取的 X,Y,Z 軸的數值,使用 Data[0] 讀取單個軸的數值,從而避免了 Y 軸和 Z 軸出現重復讀取的問題。最后,獲取的數據成功儲存在變量 absoluteXf、absoluteYf、absoluteZf 中。
如此就能實現對機床三軸絕對坐標系的監控功能,而接下來的相對坐標系、機床坐標系、剩余行程距離、進給速率、循環時間等數據的讀取邏輯和讀取絕對坐標系的流程相同。
3.4.3 界面層
通過 Qt 特有的信號與槽機制,采取通過對槽進行默認命名格式自動將控件信號與槽關聯 ;也可以利用 connect 函數,手動建立信號與槽的連接,一個信號可指定一個或者多個槽函數接收。首先針對通訊窗口界面進行設計,利用QT Designer 編輯窗口界面 ui,根據 cnc_allclibhndl3 函數的對應參數,分別添加單行編輯框 QLineEdit,并在左側添加標簽,注釋對應需要輸入的內容,分別為 IP 地址、端口號和延時,使用水平布局和空格調整布局 ; 其次,要實現參數與文本連接的第一步首先是要獲取編輯框輸入的數值,設計一個函數專門用來讀取編輯框數值,其中通過不同編輯框對應的指針變量名分別指向對應編輯框的文本獲取函數 “text”,從而獲取用戶輸入的內容。
之后利用 getIPStr 函數作為 cnc_allclibhndl3的參數,即可實現將輸入的數值傳遞給 cnc 函數。要能夠讓 cnc 函數讀取到用戶輸入的數值,需要利用 connect 機制,在 cnc_allclibhndl3 前添加條件。設計 “連接” 和 “斷開” 按鈕,同時以太網通訊的槽 onslot_Connect 的定義中,添加前置條件和調用 cnc 函數。
接下來是三軸坐標系顯示窗口,包括 :
(1)利用 QT Designer 編輯 GUI。
(2)根據需求,創建四個坐標界面,分別用對象名 absolute_frm、relative_frm、machine_frm、left_frm,依次對應絕對、相對、機床和綜合坐標系窗口。需要標明對象窗口所顯示的坐標系的類型是什么。利用 TextLable 的對象名調用文本設置函數,使得設計命名函數 SetPosName有命名文本的功能。
(3)將文本框的數值同功能層獲取函數進行關聯,分為兩步,通過對象調用命令函數,以及調用獲取函數。
以絕對坐標系為例,定義數據采集對象,使用指針 dcThread 指向采集對象,并分配起始地址,如此可以通過調用 dcThread 指針達到等同于調用 DataCollection 的效果。
利用 dcThread 調用命令函數 ,如void absolute(h),將全局句柄放入作為參數,即開始讀取 CNC 測試端的絕對坐標系數值,并將數值賦值給中間函數 setAbs 的變量,再由中間函數的變量賦值給獲取函數 getAbs 的參數。若直接將儲存 cnc_absolute 讀取數值的變量作為文本內容,則會因為類的不同而無法讀取。
想要將編輯框數據與 cnc 函數獲取的數值同步,定義變量 ax,ay,az,調用 getAbs 函數,并將 ax,ay,az 代入參數,并由 getAbs 的默認參數賦值給變量。由此,可以通過 “setText”函數設置默認文本,將變量作為參數放入其中,實現動態讀取數據、界面更新的效果。而相對坐標系、機床坐標系、剩余行程距離的三軸坐標顯示原理和絕對坐標系相同。
3.5 結果顯示
機床顯示界面是一個總體界面,它集合了機床狀態監控的各種內容。其主要目的有兩種 :
(1) 動態顯示機床進給速率、轉速、加工件數、循環時間、運行時間,將功能層與界面層關聯。
(2) 將三軸坐標顯示窗口嵌入機床顯示界面,通訊窗口利用按鈕與機床顯示界面關聯。
機床進給速率、轉速、加工件數、循環時間、運行時間動態讀取原理和三軸坐標系顯示窗口中絕對坐標系的原理相同。
三軸坐標顯示窗口嵌入機床顯示界面需要實現界面層分析中所述要求,能夠全部顯示以及能夠單獨顯示。為此,可以通過點擊不同按鈕作為觸發條件,并集 “和” 進行判斷,由此來切換顯示窗口。經過調試,動態顯示的機床界面如圖 5 所示。

圖 5 動態顯示的機床界面
4. 結語
使用 VS2015 和 Qt 跨平臺開發,以 FANUC0i-F 為具體測試對象,進行了基于 FANUC 數控系統機床軟件的二次開發工作,結論如下 :在硬件方面,通過硬件外部接口與 PC 端的連接,達成了遠程操作顯示界面、分離操作的目的。目前 CNC 側和 PC 屏電腦間采用局域網傳輸,今后可以考慮使用廣域網傳輸,進一步增加通訊距離 , 豐富應用場景。
在軟件方面,使用 C++ 編程語言、DLL 動態鏈接庫調用、FOCAS 庫函數、QT 庫框架編程實現了以太網通訊的功能,成功通過內部接口完成通訊 ; 實現了機床坐標動態讀取、進給速率、轉速的實時讀取 ; 能夠對運行時間、加工件數、循環時間進行計數 ; 實現了對機床基本功能狀態的監控 ; 實現了通過按鈕關聯通訊窗口、彈出隱藏以及嵌入式等操作,簡化了機床界面。
投稿箱:
如果您有機床行業、企業相關新聞稿件發表,或進行資訊合作,歡迎聯系本網編輯部, 郵箱:skjcsc@vip.sina.com
如果您有機床行業、企業相關新聞稿件發表,或進行資訊合作,歡迎聯系本網編輯部, 郵箱:skjcsc@vip.sina.com
更多相關信息