徐建明,潘湘飛
(浙江工業(yè)大學 信息工程學院,杭州 310023)
基于Socket通信的工業(yè)機器人監(jiān)控系統(tǒng)研究
徐建明,潘湘飛
(浙江工業(yè)大學 信息工程學院,杭州 310023)
針對Epson-G6和Staubli-TX90工業(yè)機器人,研究一種基于Socket通信的工業(yè)機器人監(jiān)控系統(tǒng);系統(tǒng)分為本地監(jiān)控端和Web遠程監(jiān)控端;基于TCP協(xié)議和Socket通信技術,編寫了機器人控制器服務端程序和MFC類庫開發(fā)的客戶端程序,客戶端分為通訊功能模塊,末端坐標軌跡存儲模塊和基于OpenGL類庫的運動姿態(tài)展現(xiàn)模塊;在此基礎上, 基于J2EE架構和WebSocket通信協(xié)議編寫了Web遠程監(jiān)控端程序,分為用戶管理模塊和實時監(jiān)控模塊;系統(tǒng)實現(xiàn)了機器人末端坐標軌跡的采集并遠程存儲至PostgreSQL數(shù)據(jù)庫,同時通過逆運動學計算展現(xiàn)了機器人三維運動姿態(tài),并在Web頁面以動態(tài)曲線方式監(jiān)控機器人的末端坐標軌跡。
工業(yè)機器人;Socket通信;J2EE架構;WebSocket協(xié)議;遠程監(jiān)控
隨著工業(yè)自動化的發(fā)展,在工業(yè)生產(chǎn)中,工業(yè)機器人已經(jīng)成為一種像數(shù)控機床一樣必不可少的設備。中國制造2025規(guī)劃提出中國制造業(yè)需要逐步升級到工業(yè)4.0時代。工業(yè)4.0的顯著標志是“互聯(lián)網(wǎng)+制造業(yè)”,其中重要一環(huán)便是推動工業(yè)機器人在工業(yè)生產(chǎn)中的大量應用,并通過互聯(lián)網(wǎng)絡實現(xiàn)機器人間的互聯(lián)互通。因而研究針對工業(yè)機器人的遠程監(jiān)控系統(tǒng)顯得越來越重要。
目前工業(yè)自動化領域對監(jiān)控系統(tǒng)的研究多采用C/S模式。張愛民等人基于Socket套接字設計了一種工業(yè)機器人遠程監(jiān)控與診斷系統(tǒng)[1],實現(xiàn)對現(xiàn)場工業(yè)機器人運行狀態(tài)信息的查看。然而采用C/S模式的系統(tǒng),客戶端必須安裝相應的軟件,使得系統(tǒng)的擴展性和維護性不高。飽勝利等人提出一種采用B/S模式基于J2EE架構的實時監(jiān)控系統(tǒng),實現(xiàn)對卷包生產(chǎn)車間設備實時數(shù)據(jù)的遠程監(jiān)控[2]。浙江大學的駱曉娟等人提出一種采用Ajax和B/S構架的實時監(jiān)測系統(tǒng),基于.Net平臺利用Ajax技術在Web頁面實現(xiàn)對監(jiān)測數(shù)據(jù)的實時動態(tài)顯示[3]。采用B/S模式的系統(tǒng),軟件安裝,維護和升級更加容易,客戶端只需擁有瀏覽器即可訪問系統(tǒng)。如果將B/S模式引入基于傳統(tǒng)C/S模式的機器人監(jiān)控系統(tǒng)能夠大大提高系統(tǒng)的維護性和擴展性。
本文以STAUBLI-TX90和EPSON-G6為監(jiān)控對象,基于“C/S+B/S”模式研究一種工業(yè)機器人遠程監(jiān)控系統(tǒng)。系統(tǒng)分為本地監(jiān)控端和Web遠程監(jiān)控端,本地監(jiān)控端基于TCP協(xié)議,采用Socket編程接口和多線程架構實現(xiàn)與工業(yè)機器人的通信。Web遠程監(jiān)控端基于J2EE架構,后端程序采用SSH框架和WebSocket通信協(xié)議編程,前端JSP頁面采用JQuery EasyUI框架設計。頁面基于Ajax異步方式請求非實時數(shù)據(jù),基于WebSocket通信協(xié)議請求實時監(jiān)控數(shù)據(jù)。WebSocket是HTML5新標準中的Web通信機制,能夠在瀏覽器和服務器間建立長連接,實現(xiàn)穩(wěn)定全雙工實時通信,相對于Ajax輪詢方式更加高效[4]。
整個系統(tǒng)對STAUBLI-TX90和EPSON-G6工業(yè)機器人的監(jiān)控分為兩個部分:本地監(jiān)控和Web遠程監(jiān)控。整個系統(tǒng)連接框圖如圖1所示。
圖2 MFC客戶端多線程通信流程框圖
圖1 系統(tǒng)連接框圖
本地監(jiān)控部分將STAUBLI-TX90控制器和EPSON-G6控制器通過以太網(wǎng)端口接入交換機,本地監(jiān)控主機與交換機通過網(wǎng)線連接,基于TCP/IP協(xié)議,使用Socket采集機器人末端坐標軌跡并存儲到遠程服務器的數(shù)據(jù)庫中;Web遠程監(jiān)控部分由遠程服務器和瀏覽器客戶端組成,機器人實時數(shù)據(jù)監(jiān)控采用WebSocket通信機制。使用Tomcat7作為Web應用服務器,部署基于J2EE架構開發(fā)的遠程監(jiān)控程序。程序部署完成,用戶通過瀏覽器能夠實時訪問機器人的監(jiān)控數(shù)據(jù)。
本地監(jiān)控端采用C/S(客戶/服務器)模式,將機器人控制器作為通信服務端,將基于MFC[5]類庫開發(fā)的C++程序作為通信客戶端,C++語言操作硬件更加容易,而且軟件易于維護。MFC客戶端主要有3個核心功能:與工業(yè)機器人的通信,工業(yè)機器人末端坐標軌跡的遠程存儲,工業(yè)機器人三維運動姿態(tài)的實時展現(xiàn)。
2.1 機器人通信服務端實現(xiàn)
將STAUBLI-TX90和EPSON-G6的機器人控制器作為通信服務端,首先打開網(wǎng)絡通信端口,設置控制器為服務端,偵聽客戶端的連接,使程序變?yōu)樽枞麪顟B(tài),一旦檢測到客戶端連接完成,程序繼續(xù)執(zhí)行,創(chuàng)建兩條同步任務,在機器人運行到目標點的同時發(fā)送機器人當前實時末端坐標給客戶端。
2.2 MFC客戶端實現(xiàn)
2.2.1 通信功能
MFC監(jiān)控客戶端通信功能實現(xiàn)基于Socket接口編程,程序架構為多線程架構。MFC中線程分為兩種:界面(用戶接口)線程和工作線程。前者用來獨立地處理用戶輸入和響應用戶事件,后者用于后臺任務[6]。監(jiān)控客戶端在界面線程創(chuàng)建套接字,獲取機器人控制器地址和端口號,建立與機器人的連接,在工作子線程完成接收數(shù)據(jù)工作,提高系統(tǒng)效率。同時使用兩個套接字分別與兩臺工業(yè)機器人建立連接,彼此間互不影響。監(jiān)控客戶端多線程通信的程序流程框圖如圖2所示。左側為界面線程的程序流程圖,右側為機器人工作子線程的程序流程圖。
界面線程和工作子線程間通信基于MFC消息映射機制。當界面線程與機器人控制器連接通信成功后調用PostThreadMessage()函數(shù)向工作子線程發(fā)送UM_WORK通知消息,并將該消息放入消息隊列,工作子線程在While循環(huán)條件中通過PeekMessage()函數(shù)不斷檢查消息隊列中是否有界面線程的UM_WORK通知消息,一旦檢測到此消息,使用Recv()函數(shù)將接收到的機器人末端坐標數(shù)據(jù)封裝到RecvBuf()字符數(shù)組中,使用SendMessage()函數(shù)將RecvBuf作為消息參數(shù)發(fā)送通知消息到界面線程的各功能模塊。根據(jù)消息映射機制界面線程會調用對應的消息響應函數(shù)。
子線程向界面線程發(fā)送的通知消息主要有3個:WM_RECVDATA消息調用主窗口的OnRecvData()函數(shù)顯示采集到的機器人末端坐標數(shù)據(jù);WM_SQLWRITE消息調用主窗口的OnSqlWrite()函數(shù),向遠程數(shù)據(jù)庫寫入采集到的機器人末端坐標數(shù)據(jù),實現(xiàn)機器人末端坐標軌跡的遠程存儲;WM_OPENGLRECV消息調用運動學子窗口的OnOpenGLRecv()函數(shù),實現(xiàn)機器人三維運動姿態(tài)的實時展現(xiàn)。
MFC客戶端主窗口界面如圖3所示。界面上方為EPSON-G6通信部分,下方為STAUBLI-TX90通信部分。在通信信息中設置機器人控制器的IP地址和端口號,在界面右側設置EPSON-G6和STAUBLI- TX90機器人的目標坐標位置。
圖3 主窗口運行界面
2.2.2 末端坐標軌跡存儲
監(jiān)控客戶端將機器人在笛卡爾空間的末端坐標軌跡存儲到遠程服務器的PostgreSQL數(shù)據(jù)庫中,PostgreSQL相對于MySQL數(shù)據(jù)庫而言,在高并發(fā)和大數(shù)據(jù)量情況下處理速度更快。相對于ODBC,DAO等數(shù)據(jù)庫訪問技術,ADO訪問數(shù)據(jù)源更加高效方便并支持遠程數(shù)據(jù)庫的訪問,因此監(jiān)控客戶端采用ADO方式訪問遠程數(shù)據(jù)庫[]。
首先在數(shù)據(jù)庫中創(chuàng)建兩張機器人數(shù)據(jù)表epson和staubli,分別用來存儲EPSON-G6和STAUBLI-TX90的末端坐標軌跡。調用AfxOleInit()函數(shù)初始化OLE/COM庫,創(chuàng)建_ConnectionPtr對象,通過該對象的Open()方法建立與遠程數(shù)據(jù)庫的連接,當子線程向界面線程發(fā)送WM_SQLWRITE消息時,該消息會調用OnSqlWrite()響應函數(shù),在該函數(shù)中通過_RecordsetPtr對象的PutCollect()方法將機器人末端坐標軌跡寫入機器人數(shù)據(jù)表。
2.2.3 三維運動姿態(tài)展現(xiàn)
根據(jù)采集到的機器人末端坐標軌跡,使用OpenGL類庫和運動學計算展現(xiàn)機器人的三維運動姿態(tài)。OpenGL是一種快速、高質量的開放三維圖形程序庫,VC6.0繼承了OpenGL的圖形標準,方便了程序設計人員實現(xiàn)三維圖像的顯示[8]。
在運動學子窗口的OnCreate()函數(shù)中調用InitOpenGL()函數(shù)設置窗口像素格式,繪圖設備上下文等,完成OpenGL環(huán)境的初始化。在RenderStockScence()函數(shù)中繪制坐標軸,地面等靜態(tài)場景的三維模型,在RenderRobot()函數(shù)中根據(jù)機器人各軸連桿變換關系繪制機器人三維模型,將機器人各關節(jié)角的值定義為全局變量。當工作子線程向界面線程發(fā)送WM_OPENGLRECV消息時,系統(tǒng)會調用OnOpenGLRecv()消息響應函數(shù),在該函數(shù)中調用逆運動學函數(shù)Invkinematics()傳入機器人末端坐標,計算出當前時刻機器人各關節(jié)角的值,通過SetJointAngle()函數(shù)將計算出的值設定給關節(jié)角的全局變量。使用InvalidateRect()函數(shù)重繪窗口,實現(xiàn)機器人三維模型的實時運動,EPSON-G6和STAUBLI-TX90的實時運動姿態(tài)分別如圖4和圖5所示。
圖4 EPSON-G6三維運動學姿態(tài)
圖5 STAUBLI-TX90三維運動學姿態(tài)
WEB遠程監(jiān)控端采用B/S(瀏覽器/服務器)架構,基于MVC模式[9]設計,使用Tomcat7作為Web服務器。后端程序整合Struts2,Spring,Hibernate框架[10]和WebSocket通信機制實現(xiàn),前端UI界面使用JQuery EasyUI[11]完成。系統(tǒng)使用分層思想,主要分成五層:數(shù)據(jù)庫層,數(shù)據(jù)持久層,業(yè)務邏輯層,表現(xiàn)層和客戶層。遠程監(jiān)控架構框圖如圖6所示。系統(tǒng)主要分為:用戶管理模塊和實時監(jiān)控模塊。數(shù)據(jù)持久層使用Hibernate框架,負責與數(shù)據(jù)庫層的PostgreSQL數(shù)據(jù)庫交互,在StaubliDao,EpsonDao和UserDao類實現(xiàn)對機器人數(shù)據(jù)表的查詢和對用戶表的增刪改查;業(yè)務邏輯層使用Spring框架,分別在StaubliService,EpsonService類處理實時監(jiān)控模塊的業(yè)務邏輯,在UserService類處理用戶管理模塊的業(yè)務邏輯;表現(xiàn)層使用Struts2框架和Websocket通信機制,處理來自客戶層的Web請求。實時監(jiān)控模塊使用WebSocket協(xié)議與客戶端建立連接,將EpsonSocket和StaubliSocket類作為通信服務端,用戶管理模塊使用Struts2框架攔截瀏覽器的Ajax異步請求,將UserAction作為請求服務端,在Struts.xml中配置Url地址對應的Action方法和默認攔截器等。
3.1 用戶管理實現(xiàn)
用戶管理功能包括用戶登錄校驗和用戶增刪改查。服務端程序使用Struts2的攔截器機制完成用戶登錄校驗。在Struts.xml中配置自定義LogonCheckInterceptor攔截器類,將Struts2默認攔截器棧設置為自定義攔截器棧,攔截除myuserLogin()登錄方法外的所有方法。
在自定義攔截器類的doIntercept()方法中通過判斷session中的user屬性是否為空來完成用戶登錄校驗。分別調用ajaxaddUser(),ajaxdelUser(),ajaxeditUser()和easyUIListUser()方法完成對用戶表的增刪改查,所有方法都是通過Ajax異步方式請求服務端。
3.2 實時監(jiān)控實現(xiàn)
為了以動態(tài)曲線的方式實時展現(xiàn)機器人末端坐標軌跡,客戶端傳統(tǒng)做法是用Ajax輪詢的方式不斷向服務器發(fā)送異步請求,但高頻率的輪詢不僅會加重服務器的負載,而且會將大量時間耗費在頻繁的請求和響應時延上,使得效率相對低下。系統(tǒng)采用HTML5新標準中的WebSocket通信機制實現(xiàn)實時通信。服務端使用Tomcat7提供的已實現(xiàn)WebSocket API接口標準的實現(xiàn)類,基于注解方式開發(fā)。
服務端首先偵聽是否有客戶端的連接請求,如果有則建立與客戶端的連接通道,然后繼續(xù)偵聽是否有客戶端發(fā)送的消息,如果有則在WebSocket的onMessage方法中不斷推送封裝成JSON[12]格式的機器人最新數(shù)據(jù)到客戶端。調用業(yè)務邏輯層的getLastLine()方法獲取機器人數(shù)據(jù)表最新的一條記錄,調用JSONArray的fromObject()方法將該條記錄轉換為Json格式,調用session的sendText()方法發(fā)送Json格式的機器人數(shù)據(jù)到客戶端。
瀏覽器客戶端在頁面上點擊建立連接按鈕,通過新建WebSocket對象建立與服務端的連接,在其構造參數(shù)中傳入需要連接的服務端url地址,通過send()方法向服務端發(fā)送通知消息,在onMessage()方法中解析服務端返回的機器人數(shù)據(jù)。通過JavaScript的eval()方法將從服務端返回的Json字符串轉換為Json對象。通過該Json對象解析出機器人在笛卡爾空間各軸末端坐標并存放到數(shù)組中,將其裝載到Highchats圖表庫動態(tài)曲線的數(shù)據(jù)列上,每隔0.5秒重載數(shù)據(jù)列。Web頁面上EPSON-G6和STAUBLI-TX90在笛卡爾空間的末端坐標軌跡實時曲線分別如圖7和圖8所示,橫坐標為當前時間,縱坐標為機器人實時末端坐標。點擊斷開連接按鈕,調用Websocket()的close()方法關閉服務端與客戶端的連接通道。
圖7 EPSON-G6實時動態(tài)曲線
圖8 Staubli-TX90實時動態(tài)曲線
通過試驗驗證本系統(tǒng)的可行性,試驗結果表明本地監(jiān)控MFC客戶端能夠實現(xiàn)與工業(yè)機器人控制器的通信,通信效率達到每50 ms收發(fā)一個數(shù)據(jù)包,丟包率不超過5%。瀏覽器客戶端通過WebSocket協(xié)議實現(xiàn)了與服務端建立連接通道。依據(jù)網(wǎng)絡情況好壞,首次建立連接耗時在30~40 ms之間,連接建立完成后,推送每條數(shù)據(jù)的網(wǎng)絡時延極低,基本上能保證Web頁面上監(jiān)控數(shù)據(jù)的實時性。試驗結果表明借助于Socket多線程的通信架構,程序模塊化的設計及WebSocket高效的通信效率使得系統(tǒng)具有較高的穩(wěn)定性和實時性。
本文研究了一種基于Socket套接字通信的工業(yè)機器人遠程監(jiān)控系統(tǒng)。以STAUBLI-TX90和EPSON-G6為監(jiān)控對象,結合Socket通信技術,ADO數(shù)據(jù)庫訪問技術,OpenGL類庫,J2EE架構和WebSocket協(xié)議,實現(xiàn)對工業(yè)機器人的本地和遠程實時監(jiān)控。市場上大多數(shù)工業(yè)機器人控制器都有兼容Socket通信的以太網(wǎng)接口,因此本系統(tǒng)的開發(fā)在實現(xiàn)對不同類型工業(yè)機器人的遠程并發(fā)監(jiān)控方面,具有較大的參考價值。
[1] 張愛民, 孔得鵬, 王倩.工業(yè)機器人的遠程監(jiān)控與診斷系統(tǒng)設計[J]. 機械,2010,37(10):45-47.
[2] 飽勝利, 鐘 勇.基于J2EE的實時監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].計算機工程,2008,34(5):240-242.
[3] 駱曉娟,許 力.基于AJAX和B/S構架的實時監(jiān)測系統(tǒng)[J].工業(yè)控制計算機,2013, 26(4):64-65.
[4] 薛 隴,彬劉釗遠. 基于WebSocket的網(wǎng)絡實時通信[J].計算機與數(shù)字工程,2014,42(3):478-481.
[5] 徐 璇,姜明新,黃 靜, 等.基于MFC的工程軟件界面設計[J].電子設計工程, 2011,19(21): 11-13.
[6] 王 偉.基于MFC的多線程與串口通信[J].電子世界,2013(4):106.
[7] 索 巖,崔紅志.基于MFC的數(shù)據(jù)庫動態(tài)訪問技術[J].科技信息,2009(31):46-47.
[8] 喻 敏,李成剛,李富中, 等.基于OpenGL和MFC的機器人運動控制及標定[J].機械設計與制造工程,2015,44(1):46-49.
[9] 冉春玉,白炳杉. MVC模式及Struts框架應用研究[J]. 武漢理工大學學報, 2004, 26(6):66-69.
[10] 趙 洋,張 麗,王恩東, 等. 基于Struts,Hibernate和Spring的J2EE架構研究[J]. 現(xiàn)代電子技術,2009, 32(2):107-110.
[11] 陳國耀,王清心. 基于jQuery的高校網(wǎng)絡心理咨詢系統(tǒng)的設計與實現(xiàn)[J]. 武漢工程大學學報,2011,33(10):103-106.
[12] 高 靜,段會川. JSON數(shù)據(jù)傳輸效率研究[J]. 計算機工程與設計,2011,32(7):2267-2270.
Research of Industrial Robot Monitoring System Based on Socket Communication
Xu Jianming,Pan Xiangfei
(College of Information Engineering, Zhejiang University of Technology, Hangzhou 310023,China)
Aiming at Epson-G6 and Staubli-TX90 industrial robots, a kind of industrial robot monitoring system based on Socket communication is studied. It includes a local monitoring terminal and a web remote monitoring terminal. Based on TCP protocol and Socket communication, the server-side in robot controllers and the client using MFC Framework are respectively programmed. The client contains the communication module, the end coordinate trajectories memory module and the motion posture presentation module based on OpenGL class library. On this basis, the web remote monitoring terminal is designed with J2EE architecture and WebSocket protocol, it is made up of a user management module and a real-time monitoring module. The system realizes the acquisition of the end coordinate trajectories of the robots, the storage of the trajectories to a PostgreSQL database and the monitoring of the trajectories by dynamic curve on web pages. At the same time, the 3D motion attitudes of two robots are also presented by the inverse kinematics calculation.
industrial robot; Socket communication; J2EE architecture; WebSocket protocol; remote monitoring
2016-12-19;
2017-02-27。
國家自然科學基金面上項目(61374103);浙江省自然科學基金重點項目(LZ15F030003)。
徐建明(1970-),男,江西吉安人,教授,碩士研究生導師,主要從事工業(yè)機器人和視覺伺服控制技術方向的研究。
1671-4598(2017)07-0070-04
10.16526/j.cnki.11-4762/tp.2017.07.018
TP277
A