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