劉碩
【摘 要】針對目前自動測試系統(tǒng)仍需要人工對接被測件的應(yīng)用現(xiàn)狀,以及測試系統(tǒng)與測試產(chǎn)線間未打通實時交互的問題,設(shè)計了用于轉(zhuǎn)發(fā)、處理、存儲的服務(wù)器端,用于顯示的Web客戶端,用于控制測試執(zhí)行并與產(chǎn)線實時交互的本地客戶端,研究了基于WebSocket及Modbus技術(shù)的實時通信技術(shù),實現(xiàn)了自動測試系統(tǒng)與測試產(chǎn)線間的協(xié)調(diào),同時實現(xiàn)了測試系統(tǒng)客戶端、Web客戶端與服務(wù)器間的實時交互。
【關(guān)鍵字】自動測試系統(tǒng);測試產(chǎn)線;WebSocket;Modbus;TestCenter
中圖分類號: V249.1 文獻標(biāo)識碼: A 文章編號: 2095-2457(2019)05-0076-003
0 引言
工業(yè)4.0是繼機械化、電氣化和信息技術(shù)之后,以智能制造為主導(dǎo)的第四次工業(yè)革命,或革命性的生產(chǎn)方法。工業(yè)4.0主要是指基于信息物理系統(tǒng)(Cyber-Physical System)相融合的技術(shù),將制造業(yè)向智能化轉(zhuǎn)型,最終建立一個高度靈活的個性化和數(shù)字化的產(chǎn)品與服務(wù)生產(chǎn)模式。本文將在智能測試領(lǐng)域進行工業(yè)4.0的進一步探索,以將人工或半人工測試完全轉(zhuǎn)變?yōu)闊o需人工現(xiàn)場操作的全自動測試。
1 系統(tǒng)結(jié)構(gòu)
本文旨在設(shè)計自動測試系統(tǒng)、服務(wù)器、測試產(chǎn)線間的框架關(guān)系,自動測試系統(tǒng)通過WebSocket[1-2]技術(shù)與服務(wù)器間進行連接,通過Modbus協(xié)議[3]與測試產(chǎn)線間建立連接,實現(xiàn)實時數(shù)據(jù)的及時傳輸。其中自動測試系統(tǒng)中的軟件是基于TestCenter開發(fā),實時通信模塊以插件的形式嵌入到TestCenter[4-5]。TestCenter是一款專為加速開發(fā)自動測試系統(tǒng)而設(shè)計的測試開發(fā)與管理軟件平臺,由中國電子科技集團公司第四十一研究所獨立自主研發(fā)的自動測試平臺軟件,配備TestCenter的自動測試系統(tǒng)在航空航天、國防/軍工、汽車電子、無線通信、醫(yī)療電子等領(lǐng)域的應(yīng)用日益廣泛。服務(wù)器上運行的是基于Java EE開發(fā)的Web程序,部署在undertow中。
在一個測試網(wǎng)絡(luò)內(nèi),信息流通過機械設(shè)備→傳感器→PLC→TestCenter→服務(wù)器/數(shù)據(jù)庫→Web傳遞,如圖 1所示,控制流反向傳遞,即Web→服務(wù)器/數(shù)據(jù)庫→TestCenter→PLC→機械設(shè)備傳遞,如圖 2所示。
在一個測試網(wǎng)絡(luò)內(nèi)一般會有多臺功能相同或不同的自動測試系統(tǒng),用于實現(xiàn)多種被測件的測試,同時配備一條或多條產(chǎn)線,而服務(wù)器只有一個。自動測試系統(tǒng)作為測試集群中的獨立站點同遠程中心服務(wù)器進行信息交互,遠程中心通過Web服務(wù)器進行測試信息的采集以及存儲,同時,遠程中心通過網(wǎng)頁的方式對外提供信息服務(wù)。整個系統(tǒng)的結(jié)構(gòu)如圖3所示。
首先是自動測試系統(tǒng)同服務(wù)器的交互。自動測試系統(tǒng)內(nèi)置工作站并作為訪問端,主動向服務(wù)器申請建立基于WebSocket的可靠連接。自動測試系統(tǒng)獲取的數(shù)據(jù)一方面作為一般數(shù)據(jù)傳輸給服務(wù)器進行存儲,包括系統(tǒng)配置、資源配置、被測件、測試程序、測試項目、測試結(jié)果等信息,另一方面測試過程中的瞬時數(shù)據(jù)將作為實時數(shù)據(jù)傳輸給服務(wù)器,服務(wù)器接收數(shù)據(jù)后再向客戶端的訂閱者群發(fā),此類數(shù)據(jù)主要包括用戶的操作指令和測試進度。
其次是自動測試系統(tǒng)同測試產(chǎn)線的交互。自動測試系統(tǒng)內(nèi)置工作站并作為訪問端,主動向PLC申請建立Modbus的可靠連接。測試產(chǎn)線實時狀態(tài)通過Modbus上傳至自動測試系統(tǒng),自動測試系統(tǒng)對產(chǎn)線狀態(tài)進行邏輯判斷同時將實時狀態(tài)通過WebSocket上傳至服務(wù)器;自動測試系統(tǒng)接收服務(wù)器端下發(fā)的指令或在接收產(chǎn)線狀態(tài)邏輯分析后進行測試,測試完畢后將測試狀態(tài)通過Modbus傳遞給PLC指導(dǎo)產(chǎn)線的進一步動作。
最后是客戶端以網(wǎng)頁的形式同遠程中心進行信息交互。實時通信功能是通過B/S體系體現(xiàn)的,用戶通過瀏覽器同Web服務(wù)器建立WebSocket連接,發(fā)送實時數(shù)據(jù)請求并查看實時數(shù)據(jù)。
本系統(tǒng)將WebSocket與Modbus與自動測試相結(jié)合,利用WebSocket進行TestCenter與服務(wù)器、服務(wù)器與Web端的實時交互,使自動測試系統(tǒng)的測試狀態(tài)更為及時、主動和便捷,利用Modbus進行TestCenter與PLC間的實時交互,將自動測試系統(tǒng)與產(chǎn)線進行狀態(tài)實時互傳,從而將自動測試與工業(yè)級產(chǎn)線間最后一道屏障打通,最終實現(xiàn)自動測試流水線的全自動化測試。
2 系統(tǒng)設(shè)計
系統(tǒng)設(shè)計分為兩大部分,第一部分是利用WebSocket進行測試系統(tǒng)客戶端(TestCenter)與服務(wù)器端、服務(wù)器端與Web端的交互,第二部分是利用Modbus進行測試產(chǎn)線與測試系統(tǒng)客戶端(TestCenter)的交互。
2.1 服務(wù)器端WebSocket實現(xiàn)
服務(wù)器端引用undertow-core-2.0.16.Final.jar和undertow-websockets-jsr-2.0.16.Final.jar兩個包,主要時間如下:
@ServerEndpoint("/websocket")
public class WebSocket{
@OnOpen
public void onOpen(Session session, EndpointConfig config){……}
@OnClose
public void onClose(Session session){……}
@OnError
public void OnError(Session session, Throwable t){……}
@OnMessage
public void onMessage(Session session, String msg, boolean last){……}
@OnMessage
public void onBinaryMessage (Session session, byte[] buffer, boolean last){……}
}
需要注意的是,在OnOpen事件中,需要將Web端申請與TestCenter發(fā)起的客戶端申請分離,進行分別處理。
2.2 TestCenter客戶端WebSocket實現(xiàn)
在TestCenter中C#的API中基礎(chǔ)上進行二次開發(fā),通過引用websocket-sharp組件構(gòu)件WebSocket客戶端的監(jiān)聽與發(fā)送。
初始化:
WebSocket ws = new WebSocket(url);
連接:
ws.Connect();
監(jiān)聽:
ws.OnOpen += (send , e) => {……};
ws.OnClose += (send , e) => {……};
ws.OnError += (send , e) => {……};
ws. OnMessage += (send , e) => {……};
發(fā)送:
ws.send(byte[]);
ws.send(System.IO.FileInfo);
ws.send(string);
ws.send(System.IO.Stream , int);
斷開:
ws.Close();
ws.Close(ushort);
ws.Close(WebSocketSharp.CloseStatusCode);
ws.Close(ushort , string);
ws.Close(WebSocketSharp.CloseStatusCode , string);
2.3 Web客戶端的WebSocket實現(xiàn)
利用JavaScript技術(shù)插入WebSocket,利用HTML5自帶的API實現(xiàn)WebSocket,過程同上。
2.4 TestCenter客戶端Modbus實現(xiàn)
通過引用nmodbuspc程序集,在.Net環(huán)境中實現(xiàn)與PLC的通信。
連接:
ModbusIpMaster modbus = ModbusIpMaster.CreateIp(Modbus.IO.IStreamResource);
ModbusIpMaster modbus = ModbusIpMaster.CreateIp(System.IO.Ports.SerialPort);
ModbusIpMaster modbus = ModbusIpMaster.CreateIp(System.Net.Sockets.TcpClient);
ModbusIpMaster modbus = ModbusIpMaster.CreateIp(System.Net.Sockets.UdpClient);
寫入M區(qū):
modbus.WriteSingleCoil(byte , ushort , bool);
讀取M區(qū):
bool[] m = modbus.ReadCoils(byte , ushort , ushort);
寫入D區(qū):
modbus.WriteSingleRegister(byte , ushort , ushort);
讀取D區(qū):
bool[] d = modbus.ReadCoils(byte , ushort , ushort);
斷開:
modbus. Dispose();
3 結(jié)束語
本文通過WebSocket技術(shù)與Modbus技術(shù),設(shè)計解決了自動測試系統(tǒng)與測試產(chǎn)線間的協(xié)調(diào)問題,同時解決了測試系統(tǒng)客戶端、Web客戶端與服務(wù)器間的實時交互問題。
【參考文獻】
[1]張藝.基于WebSocket的即時通信系統(tǒng)研究與實現(xiàn)[J].軟件,2015,3.
[2]劉維峰,左澤軍,趙利強等.基于HTML5的生產(chǎn)裝置實時監(jiān)測可視化[J].計算機工程與設(shè)計,2015.3.
[3]杜佳良,劉美俊,李俊蒂,湯宗清.基于Modbus協(xié)議的智能儀表自動檢測系統(tǒng)[J].鹽城工學(xué)院學(xué)報(自然科學(xué)版),2016,9.
[4]宋斌,方葛豐,劉毅.自動測試系統(tǒng)軟件平臺TestCenter體系結(jié)構(gòu)設(shè)計與分析[J].測控技術(shù),2013,8.
[5]方葛豐,劉毅,等.自動測試系統(tǒng)軟件平臺技術(shù)[J].儀器儀表,2009,10.