李淑梅 李星
摘 要:本文提出了一種新型移動網絡數控系統,基于Android智能移動設備,遵循當下盛行的無線傳輸協議,以自主開發的移動數控APP作為控制客戶端,以工業IPC及無線串口服務器作為服務端,采用面向連接的TCP Socket通信,實現了數據傳輸的可靠性和實時性,完成了新型網絡數控系統的DNC、部分遠程監控及診斷功能,對數控技術的智能化與移動化有一定的推動作用。
關鍵詞:移動網絡數控;Android移動設備;無線傳輸;遠程監控;移動化
Abstract:A new type of mobile network numeric control system based on Android smart mobile devices is proposed in this paper,it follows the current prevalence of wireless transfer protocol,keeps the movement of the self-developed CNC APP as control client and industrial IPC and wireless serial port server as the server,uses a connection-oriented TCP SOCKET communication,and has realized the real time and reliability of data transmission,completed a new network numerical control system of the DNC and part of the remote monitoring and diagnosis function,it has a certain role in promoting intelligent of numerical control technology and mobile.
Key words:Mobile network NC system;Android mobile devices;wireless transmission;remote monitor;mobile
隨著先進制造技術以及互聯網技術的飛速發展,數控機床與網絡及通信技術相結合,形成智能化、可移動的分布式數控系統無疑是數控技術發展的必然趨勢。[1,2]而作為移動互聯網時代的標志性代表產物,智能手機及平板電腦等已然超越PC,成為廣受推崇的智能移動終端設備。基于Android操作系統的智能移動設備更是占據了全球智能移動80%以上的市場份額。目前,在國內外,主要有三類形式的基于無線通信技術的網絡數控系統,分別是基于手機GSM短消息業務、基于藍牙傳輸以及基于手機WEB瀏覽器的移動網絡數控系統。[3,4]但這三類數控系統因其在實時性、穩定性以及數據吞吐量等方面的不足,并未被業內所認可采納。
本文在以往網絡數控系統開發研究的基礎上,提出了一種基于Android智能移動設備的新型移動網絡數控系統,該系統遵循WAP及IEEE802.11b無線傳輸協議,以全新自主開發的手機APP為移動控制客戶端,以集成了數字IO卡的IPC及無線串口服務器為數控服務端,采用基于TCP/IP的SOCKET網絡通信方式,在自定義應用層通信協議的基礎上,保證了數據傳輸的可靠性、實時性以及大的數據吞吐量,有望實現真正意義上的移動式智能化網絡數控系統,同時提出了引入NAPT穿墻技術以實現移動網絡數控系統在廣域網內的遠程監控。
1 新型網絡數控系統的整體架構
1.1 硬件架構
新型網絡數控系統的硬件部分主要由6個模塊構成,分別是移動控制客戶端、移動控制服務端、中心網絡提供者、簡易數控系統端、數據庫服務端以及CAD/CAM工作站。其整體架構圖如圖1所示。
其中,移動控制客戶端可以是各類基于Android操作系統的智能手機、平板電腦等。移動控制客戶端用于與移動控制服務端進行數據交互,包括運動控制命令的交互、間接訪問數據庫的交互、DNC傳輸的交互以及與用戶的良好互動等。
移動控制服務端由內置數字IO卡的工控機IPC構成,它是與簡易數控系統端、數據庫服務器、CAD/CAM工作站以及移動控制客戶端進行交互的直接操作者,也是中間人,通過移動控制服務端,其余四者可以進行間接的友好互動。
中心網絡提供者即無線路由器,它將移動控制客戶端、移動控制服務端、數據庫服務端以及簡易數控系統端連結成一個小型局域網,使局域網內各主機具備無線通信渠道,各主機處于同一網段,可實現實時穩定的數據傳輸,同時網絡提供者可通過網絡交換機等標準網絡設備與外網建立連接,在后續引入NAPT穿墻技術后,可實現SOCKET通信情況下外網自由訪問內網設備,達到組建真正的廣域網移動數控系統的目的,即使操作人員在遙遠的外地,也能對數控機床進行遠程操作與監控。
簡易數控系統端由數控系統加無線串口服務器構成。無線串口服務器主要用于將數控系統的串口通訊轉換為有線或無線TCP/IP通訊,使數控系統具有無線聯網功能。雖然數控系統本身有RJ45接口,可實現有線網絡連入,但以這種形式連入網絡,則一臺數控設備需要一臺IPC,配置成本提高,而且也增加了布線維護的難度。綜上考慮,決定采用無線連入方式,一臺IPC可同時控制數臺數控系統,且省去布線維護的困難,完全采用無線控制,經濟簡單。
數據庫建立在本地PC上,將本地PC作為服務器,操作系統可采用WINDOWS XP或者WIN7。因數據量并不是很大,因此對本地PC沒有特別要求。數據庫服務器作為提供給移動控制服務端讀寫的倉庫,存儲著客戶端、服務端、以及工作站等的大量數據,在該系統中舉足輕重。
CAD/CAM工作站用于CAD/CAM軟件生成加工NC代碼,通過無線或有線傳輸發往移動控制服務端,由移動控制服務端統一提交至數據庫保存。
1.2 軟件架構
新型移動網絡數控系統的軟件部分主要由3個模塊構成,分別為移動控制APP模塊、移動控制C++服務器模塊以及數據庫管理模塊:
(1)移動控制APP模塊主要是與移動控制服務端進行數據交互,以達到對數控系統的簡單實時控制、機床加工位置點的實時傳輸顯示、DNC傳輸功能的實現、機床信息及機床加工狀態、IO狀態、PLC狀態、伺服狀態等的查詢與修改等;
(2)移動控制C++服務器模塊除了負責讀寫伺服狀態、IO狀態以及PLC狀態等以外,還負責將讀寫到的數控系統數據提交至服務器,并響應客戶端的數據庫操作請求,對數據庫進行讀寫操作,并返回狀態至客戶端顯示存儲;
(3)數據庫管理模塊則與上述數據庫服務器功能一致,在此不再贅述。數據庫管理模塊主要用于定時存儲機床加工狀態、PLC狀態、IO狀態、伺服反饋、加工程序、用戶信息以及加工歷史數據等。
2 網絡數控系統的整體實現
新型網絡數控系統的硬件選擇已經在整體架構里做了詳細的闡述,而硬件本身的配置及安裝等難度一般,本節主要介紹軟件部分的具體實現。
2.1 移動控制APP模塊
操作系統采用Windows 8.1,該操作系統具有良好的向下兼容性。開發語言采用JAVA,開發環境采用Android Studio1.0,該IDE基于IntelliJ IDEA,是Google于2014年8月推出的專為Android開發而生的集成環境。使用該IDE可以完成APP在不同屏幕尺寸下的適配,使開發者開發的APP可以安裝在目前大多數主流智能移動設備上。移動控制APP模塊的構成如圖2所示。
其中公共包主要包括一些全局配置常量、公用方法以及公用實體類,這些內容用于APP全局共享。用戶自管理模塊主要包括用戶個人信息的展示、用戶自定義系統配置參數的保存與修改以及用戶個人數控機群的自我管理等。
工具庫包含了幾個最重要的工具類的定義與實現。其中SocketUtils是用于Android客戶端與移動控制服務端進行數據交互的網絡通信庫,NetPacketUtils是用于網絡數據封包解包的工具類,而DBUtils則是用于Android客戶端遠程操作SQL SERVER數據庫的工具類。網絡數控技術的關鍵問題在于研究數控系統的網絡通信功能。[5-7]以下列出其中兩個類庫的主要屬性與行為,并做出相應解釋。
public class SocketUtils
{
private Socket sockClient;//用于與服務端通信的套接字實例
private static BufferedReader bufferReader;//用于讀取網絡數據的輸入流
private static PrintWriter printWriter;//用于寫入網絡數據的輸出流
private static final int NMSG=0x01;//數據包消息常量
private static final int NFILE=0x02;//數據包消息常量
private static final int NCONTROL=0x03;//數據包消息常量
private static final int NDBUTIL=0x04;//數據包消息常量
private boolean initSocket(){} //初始化套接字方法
private boolean openReader(Socket sock){} //獲取字符輸入流方法
private boolean openWriter(Socket sock){} //獲取字符輸出流方法
private void closeSocket(){} //關閉套接字方法
private void closeReader(){} //關閉輸入流方法
private void closeWriter(){} //關閉輸出流方法
public BufferedReader getReader(){} //向外提供輸入流接口
public PrintWriter getWriter(){} //向外提供輸出流接口
......
}
客戶端與服務端數據交互是通過SOCKET TCP套接字進行的。TCP連接是面向連接的傳輸層協議,保證數據到達對端的可靠性以及有序性,因此不用擔心數據丟失的問題。套接字就好比一條管道,數據好比水流,只有在管道建立好的情況下,水流才能到達對方。因此,必須通過initSocket方法傳遞服務端IP及開放端口,聯通服務端,而后在openReader與openWriter方法中通過套接字實例獲得IO流,其后便可以開始進行數據收發。在數據收發完畢之后,調用closeReader與closeWriter方法回收IO流資源,并關閉套接字。而getReader與getWriter是用于數據收發時對外提供的接口。
public class NetPacketUtils
{
private byte[]sMsgBuf;//接收數據緩沖區
private int nBufSize;//緩沖區總大小
private int nOffset;//緩沖區數據大小
private NetPacket netPacket;//網絡數據包對象
private NetPacketHead netPacketHead;//網絡數據包包頭對象
private boolean isFullPacket(){} //判斷是否滿包方法
private boolean isValidPacket(){} //判斷是否為無效包方法
private boolean reBufSize(int nLen){} //重新調整緩沖區大小方法
private void addMsg(byte[]sBuf,int nLen){} //向緩沖區添加數據方法
public NetPacket recvPacket(Socket sock,BufferedReader reader){} //接收數據包方法
public void sendPacket(Socket sock,PrintWriter writer){} //發送數據包方法
......
}
TCP傳輸雖然可以保證數據傳輸的可靠性與有序性,但因為TCP底端實現采用了Nagle算法,數據到達對端時有可能發生半包、粘包等問題,[8]所以必須自己制定應用層通信協議,完善收發包機制。數據包包括包頭和包體,其中包頭是具有固定長度的一個類,類中封裝了數據包類型、文件類型、命令類型以及包體長度等屬性,通過提取包頭中的包體長度屬性,就可以確定一個數據包的大小,如此就可以實現收發變長包的機制。經過實測,數據收發良好且沒有丟失數據的現象。而NetPacketUtils的作用就是構造好數據包對象,通過網絡通信庫SocketUtils對外提供的IO流,調用recvPacket與sendPacket方法進行數據包接收與發送。
UI模塊共劃分為五個主要頁面。“首頁”頁面是用戶機群自管理區,按車床、銑床、磨床、鉆床、加工中心分為五大類,客戶可以自行添加、修改或刪除機群信息。該機群信息只匹配該用戶本身,與其他用戶無關。“位置”頁面是DNC控制區,用戶可以通過該頁面的文件選擇區域,從本地或者數據庫選擇加工程序文件,并確認實時發送到數控機床端,完成NC代碼的傳輸,同時,該頁面在后臺開啟了收發service,用戶可在該頁面實時瀏覽當前加工位置的絕對和相對坐標,當加工結束時,APP將彈出提示對話框,詢問用戶是否以文件形式保存加工歷史,加工歷史將同時提交至SQL SERVER數據庫和Android自帶輕便型sqlite數據庫,用戶也可打開頁面右上角的ActionBar,開啟遠程視頻監控模塊,兩者結合可實現遠程監控功能。“添加”頁面是提供給用戶添加具體機床信息的區域,在該區域提交之后,會將數據存入數據庫,同時該頁面還會定時讀取服務端伺服狀態、IO狀態以及其他PLC狀態等刷新顯示在該頁面,用戶修改的數據也會寫入到移動數控服務端。“控制”頁面主要實現簡單的運動控制功能,包括機床的開啟關閉復位、機床以固定位移向某一軸移動以及移動時的速度倍率調整。“我的”頁面主要是用戶個人信息,這些信息同樣會存入數據庫。其中兩個界面效果如圖3所示。
業務邏輯模塊劃分成實體操作區、DNC操作區以及視頻監控區。實體操作區實現各項對數據庫的具體操作,DNC操作區借助SocketUtils及NetPacketUtils完成NC代碼的上傳與下載,視頻監控區也通過上述工具類,接收來自移動控制服務端的動畫數據幀,并以Android自帶的MediaPlayer播放監控視頻,以方便用戶結合視頻信息與PLC狀態、IO狀態等參數信息進行遠程監控及診斷,進一步實現數控系統的移動化與智能化。
2.2 移動控制C++服務器模塊
移動控制C++服務器模塊主要負責與多個客戶端進行通信,處理各客戶端對數據庫的讀寫操作請求、處理各客戶端讀寫數字IO卡的操作以及定時讀取PCL/IO/伺服等狀態信息等,對于界面要求不高,但服務器模塊必須具備強大的數據處理能力。服務端程序開發基于.NET FrameWork,開發環境采用Visual Studio2010,開發語言采用C++。實際處理時,運用多線程并發處理,采用同步套接字的方式,為每個客戶端連接建立收發線程,實現了多線程雙通道同步收發數據的機制,在大數據吞吐情況下也能實現自如收發。其收發流程如下圖4。
從圖中可以看出,服務端每接收到一個客戶端連接,就為該客戶端創建一個通信SOCKET,同時創建收發線程用于數據收發。這種情況在程序里表現為一個結構體,其屬性如下:
struct sockForClient
{
SOCKET sockClient[MAX_CLIENT_NUM];//用于與客戶端通信的套接字句柄
SOCKADDR_IN addFrom[MAX_CLIENT_NUM];//保存客戶端地址信息的結構體
HANDLE hRecvThread[MAX_CLIENT_NUM];//接收線程句柄
HANDLE hSendThread[MAX_CLIENT_NUM];//發送線程句柄
}sClient,*pClient;
移動控制服務器端對于網絡數據的封包解包機制與JAVA端極其類似,唯一區別就在于C++端多了指針的操作。對數據的處理封裝成CNetPacket類,其屬性與行為如下:
class CNetPacket
{
private:
char* m_pMsgBuf;//數據緩沖區
int m_nBufSize;//緩沖區總大小
int m_nOffset;//緩沖區數據大小
public:
BOOL IsFullPacket()const;//判斷是否滿包方法
BOOL ReBufSize(int nLen);//重新調整緩沖區大小方法
BOOL AddMsg(char* pBuf,int nLen);//向緩沖區添加數據方法
Void Poll(); //移除緩沖區首個數據包方法
};
2.3 數據庫管理模塊
數據庫管理模塊用于定時存儲機床加工狀態、PLC狀態、IO狀態、伺服反饋、加工程序、用戶信息以及加工歷史數據等。數據庫服務器采用微軟SQL SERVER2008。SQL SERVER是一個全面的數據庫平臺,,提供了企業級的數據管理,為關系型數據和結構化數據提供了更安全可靠的存儲功能。C++服務器端采用ADO方式連接SQL SERVER.ADO是ActivX數據對象,是面向數據庫編程的組件接口。加載ADO DLL后,可以獲得該COM對象的三個智能指針,分別是pConnection、pRecordSet、pCommand,而后便可以利用這三個智能指針根據sql語句進行建表、增刪改查以及訪問外部數據源等數據庫操作了。數據庫管理模塊具體劃分為圖5的7個模塊,每個模塊對應建立N張表,依次存入各數據信息。
3 簡單測試結果分析
測試采用了C++定時器QueryPerformanceCounter,該定時器是真正的微秒級定時器,可以用來測試數據傳輸的延遲性。其關鍵代碼段如下:
QueryPerformanceFrequency(&container);
freq=(double)container.QuadPart;
QueryPerformanceCounter(&container);
start=container.QuadPart;
recvPacket();//用于測試的發包函數
QuerPerformanceCounter(&container);
end=container.QuadPart;
runTime=(double)(end-start)/freq;
在網絡穩定的情況下,對收發包進行了測試,測試結果表明,TCP傳輸一次按最大包傳送65535B字節數據,單程runTime延遲時間不超過2ms,可以滿足實時監控的要求。圖6是數據在通信兩端的收發圖。
4 結語
本文在前人研究開發的基礎上,提出了一種新型移動網絡數控系統。該網絡數控系統以當前流行的Android智能移動設備作為實時控制器,結合當下盛行的WAP及IEEE802.11b協議,對數控系統的智能化與移動化的發展具有一定的推動作用。在硬件層面完成了硬件的匹配選型,將6個硬件模塊連結在同一網段下,使其良好交互,并對外暴露數據通道,以期在后續研究中引入NAPT穿墻技術實現真正意義上的廣域網數控系統通信;在軟件層面,詳細剖析了3個子模塊的架構及實現,完成了移動數控APP的開發、C++服務器端的部分開發以及數據庫的搭建,并給出了在TCP SOCKET通信下數據收發粘包半包等問題的解決辦法,確實保證了數據通信時的可靠性和實時性,為新型網絡數控的實現打下了良好的基礎。目前整體系統的開發還未完成,后續將繼續深入研究,力求進一步優化數據傳輸以及服務端并發處理的機制,同時開始數據庫服務器端的開發編程。
參考文獻:
[1]韓江,趙福明,王治森,吳炎明.網絡數控系統的概念及其技術內容[J].中國機械工程,2001,12(10):1141-1144.
[2]周明發,王治森,董伯麟,章建科,黃曉峰.無線通信在機器人及數控機床中的應用[J].制造業自動化,2006,28(9):58-64.
[3]夏廣平,富剛.基于無線網絡的遠程移動控制數控機床系統研究[J].機械設計與制造雜志社,2008,12(12),162-164.
[4]李偉榮,林尚勇.基于Web遠程運動控制系統的研究[J].機械設計與制造工程,2014,43(6):58-60.
[5]王銀芝,劉念聰,孫未.網絡數控系統及其關鍵技術分析[J].機械科學與技術,2005,24(1):104-107.
[6]Goseelin C,Angeles J.A global performance index for the kinematic optimization of robotic manipulators[J].Journal of Mechanical Design,1991,1113(9):220-226.
[7]Yoshikawa T.Analysis and control of robot manipulators with redundancy[A].Proc First Int Sinp of Robotic Research[C],Cambridge Mass MIT press 1984:735-747.
[8]張柏軍,杜鵬.網絡化數控系統的研究和開發[J].數字技術與應用,2010,03(5):39-40.
基金項目:福建省中青年教師教育科研項目(JT180764)
作者簡介:李淑梅(1991-),女,碩士,廈門工學院機械工程系助教,主要從事數控技術方面的研究。