花維維,倪俊芳,李國防,周東風,楊波
(1. 蘇州大學 機電工程學院,江蘇 蘇州 215021;2. 蘇州優(yōu)備精密智能裝備股份有限公司,江蘇 蘇州 215021)
數(shù)控機床網(wǎng)絡(luò)監(jiān)控是可以通過無線或有線網(wǎng)絡(luò)進行傳輸?shù)囊环N數(shù)據(jù)流,可跨地域?qū)崿F(xiàn)遠程監(jiān)控,解決了數(shù)控機床人工監(jiān)控費時費力的問題[1]。國外數(shù)控機床一般都配備一套高級遠程的故障診斷和支持系統(tǒng),如西門子、AB等公司都為各自機床提供了遠程支持服務,該服務以B/S模式為主流,能在線反饋信息,實現(xiàn)對數(shù)控機床實時工作狀況監(jiān)測和程序運轉(zhuǎn)情況的檢測,其應用系統(tǒng)能客觀地通過Internet達到實時監(jiān)控數(shù)控機床、對數(shù)控機床發(fā)生的故障進行分析并采取相應的應急措施[2]。國內(nèi)對數(shù)控機床監(jiān)控技術(shù)進行研究的高校主要有南京航空航天大學、重慶大學、大連理工大學、華中科技大學等[3],主要都基于C/S模式,存在布線冗長繁瑣,響應速度慢的缺點。本文基于Windows系統(tǒng)進行開發(fā),對Windows PC端與數(shù)控端的無線數(shù)據(jù)傳輸進行研究,采用無線通信技術(shù)、多線程處理以及Socket編程的方法,以期達到能實時反饋數(shù)控機床的運行狀態(tài)。
在C/S的模式下,數(shù)控機床端只需對數(shù)據(jù)管理并對數(shù)據(jù)加密,所負責的功能較少,而PC端則不然。首先用戶在使用PC端時,PC端需要有和用戶實現(xiàn)人機交互的界面,通過網(wǎng)絡(luò)發(fā)送請求造成服務器資源不對等,很明顯在這樣的工作模式下,客戶端工作任務明顯要高于服務器,造成了客戶端的任務較重和服務器任務較輕的問題[4]。
在局域網(wǎng)的環(huán)境之下,通過輸入數(shù)控端控制器的IP地址與PC相連,實現(xiàn)實時的數(shù)據(jù)傳輸以及通過在PC端實現(xiàn)對數(shù)控機床的程序管理及數(shù)據(jù)報警。
TCP 3次建立連接,4次斷開連接的原理圖,如圖1所示。TCP在工作時PC端和數(shù)控機床端之間進行數(shù)據(jù)傳輸[5];數(shù)控端發(fā)送數(shù)據(jù),客戶端就會回應,并詢問發(fā)送時間;最后數(shù)控機床端就會回應發(fā)送數(shù)據(jù)的時間。

圖1 基于TCP/IP協(xié)議的通信流程
多線程編程主線程有且只有一個,但是可以有多個工作分線程。對于傳輸數(shù)控機床的運行狀態(tài)、數(shù)據(jù)文件,這些工作非常耗時。針對該邏輯并發(fā)性的問題,要實現(xiàn)多任務同時進行,采用C#編程時,需將這種功能加載進去。在Windows操作系統(tǒng)下能夠容易地并發(fā)任務。
PC端首先會發(fā)出和數(shù)控機床端請求連接的信號要求;數(shù)控機床端收到請求后,這時另一個工作線程就會被新建,用于儲存PC端的數(shù)據(jù)[6]。為了數(shù)據(jù)傳輸?shù)梅€(wěn)定,需要創(chuàng)建新的進程來保證服務器對客戶端的連接實現(xiàn)工作間不存在干涉。
線程的創(chuàng)建、掛起、恢復以及終止等是通過函數(shù)調(diào)用[7]的。創(chuàng)建線程經(jīng)由函數(shù)方法Thread()來實現(xiàn),服務器監(jiān)聽路徑的代碼如下:
Try
{tcp = new server3.AsyncTCPServer(6000); //開辟6000通道
tcp.ClientConnected += Tcp_ClientConnected; //建立客戶端連接協(xié)議
tcp.ClientDisconnected += Tcp_ClientDisconnected; //斷開客戶端鏈接協(xié)議
tcp.DataReceived += Tcp_DataReceived; //數(shù)據(jù)接收連接協(xié)議
tcp.Start(); } //連接開始
數(shù)控端數(shù)據(jù)在傳輸時被TCP協(xié)議進行封裝,在端口6000接收到請求后,傳輸過程如下:
1) 數(shù)控機床端實時發(fā)送數(shù)據(jù),TCP協(xié)議將要發(fā)送的數(shù)據(jù)流進行分割。
2) TCP將數(shù)據(jù)進行序號的編輯,數(shù)控端數(shù)據(jù)以數(shù)組的形式進行傳輸。以數(shù)組形式傳輸時可方便隨機訪問,并且數(shù)據(jù)傳輸是連續(xù)的,且客戶端接收時按照確認序號進行文件接收。
3) 在數(shù)據(jù)傳輸?shù)竭_目的地時,數(shù)據(jù)雜亂無章,通過TCP協(xié)議收到確認序號的信號,再將數(shù)據(jù)進行整合,讓數(shù)據(jù)傳輸避免錯亂。
在上述數(shù)據(jù)傳輸過程中,須保證數(shù)據(jù)傳輸穩(wěn)定性和抗干擾能力,如果弄丟一個數(shù)據(jù)塊,TCP將不會接收數(shù)據(jù)或者直接丟掉這一段的內(nèi)容。程序在數(shù)據(jù)傳輸時,將接收到的字節(jié)數(shù)據(jù)轉(zhuǎn)化為字符串,本系統(tǒng)所使用的是json格式的數(shù)據(jù)傳輸方法。
由于采取了多線程編程,每當一個客戶端接入數(shù)控機床時,數(shù)控機床端就建立了一個新的線程來接收PC端發(fā)送的請求[8]。該線程通過 While 循環(huán)不斷接收來自客戶端的信息,若無數(shù)據(jù)傳輸時線程中的recv()函數(shù)阻塞。一個判斷語句用來判斷接收數(shù)據(jù)是否為消息數(shù)據(jù)。當條件滿足時,系統(tǒng)會進行判斷“是文件數(shù)據(jù)”,因此客戶端需要做好接收數(shù)據(jù)的準備,數(shù)據(jù)發(fā)送/接收機制如圖2所示,具體步驟如下:
1) 文件夾arrMsgRec會在程序啟動后創(chuàng)建,會保存所有的數(shù)控程序。當滿足(arrMsgRec[0] == 48 && js)這個判斷條件時,判斷接收到的數(shù)據(jù)為消息數(shù)據(jù)。
2)接收數(shù)據(jù)的那一端先創(chuàng)建套接字。
3) 接收發(fā)送端連接,將接收的數(shù)據(jù)存入變量byte[]arrMsgRec,由插入的while函數(shù)進行無限循環(huán)接收數(shù)據(jù)的操作,實現(xiàn)實時監(jiān)控功能。
4)執(zhí)行后續(xù)操作。將接收到的字節(jié)數(shù)據(jù)轉(zhuǎn)化成字符串,關(guān)閉文件,關(guān)閉傳輸套接字。
數(shù)據(jù)傳輸時采用try{}和catch{}語句[9]來進行數(shù)據(jù)傳輸?shù)膶﹀e評判。如果數(shù)據(jù)傳輸發(fā)生錯誤,程序會立即報錯,將程序進行終止,以免程序跑亂。數(shù)據(jù)報錯程序如下:
void RecMsg()
{while (true)
{ byte[] arrMsgRec = new byte[1024 * 1024 * 2]; //定義一個2M的緩存區(qū);
int length =-1; //將接收到的數(shù)據(jù)存入到輸入 arrMsgRec中;
try {length = sockClient.Receive(arrMsgRec); //接收數(shù)據(jù),并返回數(shù)據(jù)的長度;
}
catch (SocketException se)//出錯
{Console.WriteLine("異常;" + se.Message);
return; }
catch (Exception e)
{ Console.WriteLine("異常:" + e.Message);
return; }
if (arrMsgRec[0] == 48 && js) //表示接收到的是消息數(shù)據(jù);
{string strMsg = System.Text.Encoding.UTF8.GetString(arrMsgRec, 1, length - 1).Replace("+"," ");//將接收到的字節(jié)數(shù)據(jù)轉(zhuǎn)化成字符串;
set(strMsg);}} }

圖2 數(shù)據(jù)發(fā)送/接收機制流程圖
系統(tǒng)實驗平臺如圖3所示。Windows與數(shù)控機床在局域網(wǎng)的環(huán)境下應用無線通信技術(shù),通過IP地址來匹配數(shù)控機床,還可以1臺PC機同時監(jiān)控多臺數(shù)控機床運轉(zhuǎn)狀況。本文只匹配1臺數(shù)控機床進行試驗,測試結(jié)果如下:

圖3 實驗平臺
1) 實現(xiàn)Windows PC端和數(shù)控端的連接進行數(shù)據(jù)傳輸:絕對定位X12.375,Y20.370,主軸轉(zhuǎn)速750r/min,刀具刀號0400,實際速度746r/min,冷卻狀態(tài)打開,主軸狀態(tài)正轉(zhuǎn),卡盤狀態(tài)無效,潤滑狀態(tài)關(guān)閉,加工件數(shù)10,加工時間為20.5min,G代碼顯示G00 G98 G97 G40,自動方式連續(xù)。如圖4和圖5所示。
2) 使用“上傳按鈕”進行數(shù)控端數(shù)據(jù)進行上傳,在遠程客戶端使用“接收按鈕”后,數(shù)據(jù)便能夠?qū)崿F(xiàn)傳輸功能實時反饋信息,數(shù)據(jù)傳輸速度很快,如圖6所示。
3) 現(xiàn)在改變數(shù)控端的數(shù)據(jù)狀態(tài),絕對定位X30.395、Y10.290。刀具刀號0500,實際速度498r/min,冷卻狀態(tài)關(guān)閉,主軸狀態(tài)停止,卡盤狀態(tài)有效,潤滑狀態(tài)打開,加工件數(shù)50,加工時間為2.25min,G代碼顯示G00 G98 G97 G40,自動方式連續(xù)。由圖7和圖8可見,遠程Windows PC端能夠?qū)崟r監(jiān)控與更新。
4) Windows查看程序系統(tǒng),使用“程序按鈕”,對數(shù)控設(shè)備中CNC程序進行監(jiān)控以及對程序進行管理。在程序界面可以通過使用“返回按鍵”進行切換。

圖4 數(shù)控端

圖5 Windows PC端

圖6 PC端程序目錄功能界面

圖7 數(shù)控機床工作實時狀態(tài)

圖8 PC端的反饋狀態(tài)
本數(shù)控機床網(wǎng)絡(luò)監(jiān)控系統(tǒng)是基于Windows系統(tǒng)下進行開發(fā)的,采用客戶端/服務器模式,服務器在每500ms的狀態(tài)下進行更新數(shù)據(jù)狀態(tài),能實時更新數(shù)據(jù)狀態(tài),易于更新升級數(shù)控系統(tǒng),數(shù)控機床的反應速度加快,程序存儲空間大。運用C#語言編寫了數(shù)控機床端和遠程客戶端軟件與界面,實現(xiàn)了遠程端與數(shù)控機床端在無線局域網(wǎng)下的數(shù)據(jù)通信、數(shù)據(jù)文件傳輸、客戶端界面可以和程序界面相互切換等實時監(jiān)控功能。本網(wǎng)絡(luò)監(jiān)控系統(tǒng)成本低、傳輸數(shù)據(jù)文件的速度快,能實時反映信息,便于管理,很大程度滿足現(xiàn)階段的功能要求。