(華中師范大學 物理科學與技術學院電子信息工程系,武漢 430079)
在現代工業生產過程中,過程控制系統占據著重要的地位。近年來,隨著科學技術的發展,過程控制自動化取得了長足的進步。然而,隨著用戶需求的提高,以及生產規模的擴大,工控系統的功能在日趨強大的同時,結構也愈發復雜,目前已形成了多廠商軟硬件產品共存的異構環境。在市場日趨激烈的競爭驅使下,各自動化系統廠商迫切希望能夠實現應用軟件和工控設備的異構整合,達到提升現場作業效率和企業個性化成本優化的效果[1]。
作為一種高效、先進的工藝方法,數控切割在工業制造領域的應用愈加廣泛。在實際的數控加工中,CNC系統通過解釋并執行G代碼文件來實現工業的自動化加工。然而,由于市場分工的精細化,工業設計和現場加工往往是獨立分工的,所以G代碼文件往往不是直接在CNC系統中生成的。G代碼的傳輸主要有手動輸入、信息載體傳輸和RS232串口傳輸[2]等方式。但是傳統的傳輸方法存在速度慢、誤差大、傳輸距離短等缺點[3]。隨著加工規模的擴大、插補精度的提高,傳統的傳輸方法已不能滿足當下數控加工的需求,用戶需要一種更快速、準確的方法傳輸G代碼[4]。
為滿足市場需求,充分利用異構環境下CNC系統和套料軟件各自的優勢,本文設計并實現了一款中間件系統。該中間件通過PVIServices接口實現上位機與貝加萊CNC系統的通信設計,采用FTP文件傳輸協議將套料軟件生成的G代碼文件傳輸到CNC系統工件程序存儲區,然后通過Windows消息機制實現套料軟件和中間件的進程通信。
中間件的整體功能設計如圖1。首先,中間件作為FTP文件傳輸協議的客戶端,工控設備上的CNC系統作為FTP文件傳輸協議的服務端,在中間件和CNC系統之間建立文件傳輸通道,將套料軟件繪圖、編程生成的G代碼文件傳輸到CNC系統,從而實現了數控切割程序的高速遠程雙向傳輸。考慮到數控加工中實際的生產需要,并且為了充分體現中間件設計的實用性、靈活性以及高效性等特點,對于CNC系統中已有的加工文件,中間件還可以提供下載、刪除等操作。

圖1 中間件整體功能設計
其次,中間件重寫了PVI客戶端接口,對CNC系統中的底層通信協議和數據類型進行封裝,為應用層軟件系統提供統一的調用接口,方便中間件系統的開發和維護升級。
最后,中間件通過封裝的PVI通信協議與CNC系統建立通訊連接,實時獲取和顯示CNC系統的運行狀態,并設計了一種便于普通工程師使用和操作的人機交互界面,從而實現對CNC系統狀態和運行參數的控制。此外,中間件通過WM _COPYDATA消息與套料軟件實現進程通信,實時傳送CNC系統的切割狀態到套料軟件,以保證實際加工路徑與規劃路徑的一致性。
PVI(Process Visualization Interface)是為了接入B&R Automation Net提供給所有Windows平臺上軟件程序包的通用接口[5]。使用PVI,既可以統一、協調的訪問各種媒體和協議,也能在處理所有類型的數據的同時對設備進行控制。在開發應用程序時,不必花費時間和精力探索底層之間的通信,只需對PVI的對象結構進行簡單配置,就能訪問和操作控制器中的變量。
針對PC端Windows應用程序,B&R提供了兩類PVI客戶端接口(PVICOM interface和PVIServices components)來實現應用程序與貝加萊CNC系統之間的PVI通信。PVICOM interface基于PviCom.dll,早期多應用于Visual C/C++平臺,且早期的runtime也僅支持PVICOM方式。隨著B&R工控系統的發展和runtime環境的升級,且由于PVICOM interface缺乏實時的升級維護,目前在PC端應用程序開發的過程中已經很少作為客戶端接口。
PVIServices components客戶端接口基于BR.AN.PVIServices.dll,被所有基于Windows應用的Visual Studio.NET用于控制器的通信和診斷服務上。PVIServices是基于PVICOM接口實現,并在編程環境中通過面向對象的結構呈現,函數和變量數據都以PVIServices Namespace的形式,被整體分組在易于用戶使用的類中,實現起來更加簡單,并且PVIServices components升級維護良好,支持目前市場上幾乎所有B&R系列的工控系統,其對象結構如圖2。因此,本中間件系統采用PVIServices components接口作為PVI Client-interface實現中間件與CNC系統的通訊。

圖2 PVIServices對象結構
計算機網絡技術的發展加速了數控系統的網絡化,為了滿足當下數控加工的需求,通過網絡快速高效傳輸數控加工程序,是網絡化加工制造的必然趨勢[6]。FTP是一個8位的客戶端-服務器協議,可以操作任何類型的文件,是計算機網絡中使用最廣泛的文件傳輸協議,它屏蔽了計算機系統的諸多細節,非常適合在異構系統中實現文件的傳輸[7]。因此,本文設計的中間件可以充分利用網絡協議的開放性和通用性,使用基于FTP的文件傳輸協議,將套料軟件生成的G代碼文件傳輸到工控設備的CNC系統,實現快速高效的網絡傳輸。
FTP是一個客戶機/服務器(C/S)系統,不同于其他基于C/S架構的系統,FTP在客戶端和服務器之間建立兩條TCP連接來完成文件傳輸[8],一條連接負責傳輸控制信息(命令和響應),另外一條負責數據的傳送,其結構模型如圖3。

圖3 FTP客戶端/服務端模型
在本文設計的中間件中集成FTP-Client模塊,通過與控制器上的FTP Server建立連接,就能將套料軟件生成的本地G代碼文件傳輸到CNC系統的加工程序存儲區,有效解決了大容量加工程序的傳輸問題,既能滿足當今數控系統的加工生產需求,又提高了數控加工程序傳輸的速度、可靠性。此外,中間件系統設計的客戶端界面可以進行文件的下載、刪除和更新等操作,非常便于工業現場的操作。
進程通信是指在進程間進行數據的傳輸(交換信息)。根據交換信息量的多少和效率的高低,進程通信可以分為低級通信和高級通信。低級通信只能傳遞狀態和整數值(控制信息),傳送信息量小,效率低,每次通信傳遞的信息量固定。高級通信提高了信號通信的效率,可以傳遞大量數據,減輕程序編制的復雜度。其中高級進程通信主要分為三種方式:共享內存模式、消息傳遞模式、共享文件模式。消息傳遞模式通過操作系統的相應系統調用進行消息傳遞通訊,分為點到點發送的直接通訊和以信箱為媒介進行傳遞的間接通訊。消息傳遞的間接通信方式易于建立雙向通訊鏈,通訊安全且實現簡單,因此,中間件與套料軟件之間的進程通信可以通過基于消息傳遞的方式實現。
本文設計的中間件基于Windows系統平臺,Windows系統是一個由消息驅動的操作系統[9],而Windows消息機制是消息傳遞的間接通信方式中的一種,相比于其他同機進程通信方式,Windows消息機制實現較為簡單、有效[10]。
WM _COPYDATA是一種功能強大又非常簡單的Windows消息[11],且中間件與套料軟件的通訊滿足使用WM_COPYDATA消息的兩個條件,即知曉接收消息進程的句柄,接收消息進程重載消息映射后可以給出反饋。為了實時回傳CNC系統自動解析并執行G代碼時的運行參數,保證CNC系統執行路徑與套料軟件規劃路徑的一致性,本文通過WM_COPYDATA消息機制實現套料軟件與中間件不同進程之間的數據交互,中間件作為消息發送方,將要發送的信息打包,并尋找作為接收方的套料軟件的句柄,找到接受窗體的句柄后將消息發送。當接收方接收到消息時,先判斷接收到的消息是否為WM_COPYDATA消息,確認消息正確后才進行接收,程序設計框圖如圖4。

圖4 消息的發送與接收
中間件重寫的PVIServices接口可以識別的通信對象有:服務對象(Service);CPU對象(CPU);任務對象(Task);變量對象(Variable)和模型對象(Module),每個通信對象都由特性、事件與方法三種屬性構成,如圖5。

圖5 PVIServices對象屬性
其中,Service對象負責創建連向PVI Manager的連接,是PVI客戶端中其他對象(CPU,任務,變量等)操作的基礎,當一個新的服務對象創建成功后,即表示一個中間件與控制器系統的遠程連接已經被建立。CPU對象則負責建立PVI Client與控制器的連接。當Service對象和CPU對象創建連接成功后,則代表過程變量的映像已經建立好,即可對控制器CNC系統上的變量對象進行讀寫操作。其函數原型如下,其中cpu_name設定為ARsim或Remote_PLC,相應的ip_adress為默認IP和實際PLC的IP地址。
private void service_Connected(object sender, PviEventArgs e)
{
myCpu = new Cpu(service, cpu_name);
myCpu.Connected += new PviEventHandler(myCpu _Connected);
myCpu.Connection.ANSLTcp.DestinationIpAddress = ip_adress;
}
Task對象與控制器的任務相對應,管理任務中的全局和本地變量。Module 對象定義一個在控制器上的BR模塊的屬性,可以對模塊進行上傳、下載和刪除等操作。Variable 對象則表現為一個控制器上的變量,可用變量類型有內在變量、全局變量、本地變量,輸入不同的高層次對象作為父類就可以創建不同類型的變量。將Service對象和CPU對象作為父類輸入,就分別創建了一個內在變量和一個全局變量。
中間件使用FindWindow函數獲得套料軟件的句柄,然后調用SendMessage函數向套料軟件發送WM_COPYDATA消息,其原型如下:
SendMessage(hwnd, WM_COPYDATA, wParam,IParam);
hwnd表示接收窗體句柄,發送消息類型為WM_COPYDATA,wParam表示發送窗口的句柄,IParam為指向一個COPYDATASTRUCT結構的指針。COPYDATASTRUCT結構聲明如下:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT,*PCOPYDATASTRUCT;
dwData指定傳遞給接收方的數據,cbData是要傳遞的數據塊大小,lpData是指向內存塊的指針。中間件發送WM_COPYDATA消息時,我們對dwData和lpData所傳送的數據進行了自定義設置,并且使用小端模型存儲數據。
當dwData=1時,設定當前發送的消息數據為單個變量,IpData所指向的字節流定義如下:
變量N 變量數據長度N 變量數據1 變量數據2 變量數據3…變量數據N。
當dwData=2時,表示消息發送的是多變量數據,IpData指向的字節流如下:
變量1 變量1數據長度N 變量1數據1 變量1數據2 …變量1數據N;
變量2 變量2數據長度N 變量2數據1 變量2數據2 …變量2數據N;
…
變量N 變量N數據長度N 變量N數據1 變量N數據2 …變量N數據N。
中間件發出WM_COPYDATA消息后,套料軟件作為接收方在消息映射表中添加ON_WM_COPYDATA()的映射,并定義接收消息的響應函數:
OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
套料軟件通過中間件句柄pWnd向中間件發送反饋數據,pCopyDataStruct完成對數據塊的接收。
中間件所實現的FTP客戶端具有易于操作與功能完善的圖形界面,包括用戶登陸與退出、文件及目錄的下載與上傳,方便工程師對CNC系統中的G代碼文件進行下載、刪除和更新等操作。
FTP接口程序部分函數如下:
1)連接FTP服務。
bool ConnectFtpServer(string strIp, UINT nPort, string strUserName, string strPassword, bool bPassive = TRUE, bool bUTF8Mode = TRUE);
其中:strIp為FTP地址;nPort為FTP服務端口,默認端口為21;strUserName和strPassword為FTP用戶名的密碼;bPassive表示是否為被動模式;bUTF8Mode表示編碼方式是否為UTF8編碼。
2)上傳FTP文件。
bool UploadFtpFile(string strRemotePath, string strRemoteFile, string strLocalFilePathName);
其中: strRemotePath為FTP相對目錄;strRemoteFile為FTP文件名稱;strLocalFilePathName則表示本地文件名稱。
3)刪除FTP文件。
bool DeleteFTPFile(string strRemotePath, string strRemoteFile);
其中:strRemotePath為要刪除的FTP文件相對目錄;strRemoteFile為要刪除的FTP文件名稱。
中間件與CNC系統之間通過PVI通信協議、FTP協議連通之后,即可進行CNC系統狀態等數據的傳輸以及各狀態參數的顯示與控制。
為了保證中間件系統的可讀性,便于中間件系統的升級維護,中間件在進行界面變量信息的定義時,遵照CNC系統的變量命名規則,與CNC系統上的變量名稱、類型保持一致。但是由于CNC系統變量結構復雜,數量龐大,為了保證變量映射關系的一一對應和升級維護的便利性,中間件設計實現中通過交互變量的映射表構建變量配置文件,通過配置文件的索引來關聯變量參數,這樣既可以保證變量關聯的準確性,還可以便于交互變量的增加或減少,設計靈活高效。
中間件可以接收CNC系統所傳輸的機床運行狀態及配置參數,并采用了一種簡潔、易于理解和使用的圖形界面來呈現CNC系統的機床狀態、工藝參數等內容。中間件的操作界面在CNC系統界面顯示的基礎上,充分考慮工程師的使用權限和操作習慣,針對性的顯示了切割控制、激光調整等各類控件,對相應權限范圍下不可操作的參數進行鎖定,可以降低現場因誤操作導致的損失。
為了保證中間件系統的兼容性和可擴展性,本文設計的中間件以Microsoft Visual Studio 2013為開發環境,采用C++語言基于功能強大的MFC類庫進行開發。中間件系統功能模塊如圖6,主要由通訊連接模塊、數據交互模塊和測試模塊三個部分組成。

圖6 中間件功能模塊
通訊連接模塊包含了中間件與CNC系統的PVI連接和FTP連接設置。圖7是中間件連接界面,用戶可以根據需求配置中間件與CNC系統的通訊連接。PLC類型選擇ARSim時,默認IP地址127.0.0.1,即實現連接虛擬的PLC進行仿真,便于在升級維護的開發過程中進行調試;在實際的應用現場中,PLC類型統一設定為Remote_PLC,需要輸入實際PLC的IP地址。在FTP服務設置中,IP地址為實際連接的PLC地址,端口默認21,用戶名和密碼分別對應CNC系統設置的FTP賬號密碼,相對路徑為G代碼在CNC系統的存儲路徑,默認為/DATA/Programs,實際操作可以根據具體需求進行設定。

圖7 CNC連接設置
中間件的數據交互模塊實現了CNC系統的機床狀態、標定調整、工藝參數、機床維護等16個界面以及G代碼的傳輸和同步頁面。中間件與CNC系統連接成功后,就可以實現CNC系統運行狀況的實時顯示和控制。本文設計的中間件主要采用的是B&R X20系列控制器進行實驗測試,圖8是中間件與CNC系統連接成功后的激光調整界面,界面上顯示的是CNC系統當前的運行參數,在界面中對相應狀態參數進行修改,點擊應用保存,就可以控制CNC系統的運行狀況,操作簡單方便。

圖8 激光調整
為了方便中間件的升級維護和功能擴展,系統設計了測試模塊,包括通訊連接測試、G代碼同步測試和PVI接口測試。圖9是中間件的PVI接口測試界面,可以對控制器上的全局變量和局部變量進行讀寫操作,測試中間件與CNC系統的連接情況等。
本文針對目前工業自動化用戶的個性化需求,通過整合套料軟件和CNC系統的部分功能,研究并開發了一種便于普通工程師理解和操作的中間件系統。通過將標準套料軟件生成的G代碼傳輸到并解析到CNC系統,實現了CNC系統數據的實時顯示與跟蹤,保證了CNC系統執行路徑與套料軟件規劃路徑的一致性。系統實際應用表明,該系統人機交互良好,且實現了大容量數控程序的網絡化高速傳輸,能有效解決用戶的個性化需求,節約了企業生產成本,具有一定的推廣價值。

圖9 PVI接口調試