李之奇,封成玉,徐一鳳,王毅璇,王 皓
(華北計算機系統(tǒng)工程研究所,北京 100083)
在現代化的工業(yè)現場中,往往需要遠程對工業(yè)過程中的各種儀器、儀表,控制器等進行集中管理。數據采集與監(jiān)視控制系統(tǒng)(Supervisory Control And Data Acquisition,SCADA)又稱工業(yè)組態(tài)軟件,可實現這樣的功能。用戶根據現場對象和控制要求,利用組態(tài)軟件搭建出能夠反映并控制被控對象實時狀態(tài)的畫面,通過對畫面中數據的動態(tài)更新,達到實時監(jiān)控和控制的目的。由于工業(yè)現場的高度復雜性和Web技術的飛速發(fā)展,應用Web技術實現工控組態(tài)軟件的Web發(fā)布因其便利性和高效性也成為組態(tài)軟件的重要功能。利用Web發(fā)布系統(tǒng),用戶只需要瀏覽器便可以實現便捷又安全的遠程監(jiān)控和控制操作,這無疑能夠大大提升工業(yè)現場的管理水平,實現數字資源共享,同時提高組態(tài)軟件系統(tǒng)的可擴展性和應用范圍[1]。
工控組態(tài)軟件的Web發(fā)布,即在已有工控組態(tài)軟件的基礎上添加Web監(jiān)控功能,其基本任務為:(1)實現瀏覽器端畫面與軟件客戶端畫面一致并在監(jiān)控過程中動態(tài)更新;(2)滿足監(jiān)控過程中對信息量、響應速度及安全性的要求。因此,要實現一個完整的Web發(fā)布系統(tǒng),往往需要畫面顯示技術、通信技術等多種Web技術的融合,并隨著各種技術的不斷發(fā)展而同步進化。目前國內外對此的研究還沒有形成完整的標準體系,研究方向主要針對客戶端畫面的生成方式、實時數據的傳送方式、歷史數據的讀取顯示以及報警信息推送等[1]。
在近年來Web開發(fā)技術的快速發(fā)展中,Spring框架以其獨特的優(yōu)勢越來越受到開發(fā)者的青睞,SpringBoot則使Spring更加易于開發(fā)和維護[4]。本文通過對傳統(tǒng)工控組態(tài)軟件Web發(fā)布系統(tǒng)和SpringBoot框架的分析和研究,提出了一種基于SpringBoot的工控組態(tài)軟件Web發(fā)布系統(tǒng)解決方案,該方案具有高度的可移植性、系統(tǒng)開發(fā)擴展與維護方便、跨平臺等多項優(yōu)勢,并在國產PLC上位機組態(tài)軟件中實現并成功應用。
在工控組態(tài)軟件的Web發(fā)布系統(tǒng)中,客戶端畫面的生成方式和實時數據的傳送方式是系統(tǒng)的核心技術。其中,客戶端畫面的生成方式是指將工控組態(tài)軟件中所組態(tài)的畫面轉化為瀏覽器中的畫面所采用的方式。由于不同的工控組態(tài)軟件所采用的畫面存儲格式、圖元變化邏輯等各不相同,導致各種Web發(fā)布系統(tǒng)中所采用的客戶端畫面生成方式也不盡相同。而實時數據的傳送方式是指Web系統(tǒng)中服務器與瀏覽器和數據庫的通信方式。
要在瀏覽器中生成與組態(tài)軟件中相同的畫面,需要讀取組態(tài)軟件中的畫面數據格式,將其轉化并嵌入HTML中,同時各個圖元控件包含和原組態(tài)軟件相同的變化邏輯和功能邏輯。當前Web發(fā)布系統(tǒng)中客戶端畫面的生成方式所采用的技術有如下幾種:
(1)ActiveX技術:它是基于組件對象模型(Component Object Model,COM)的一種開放式組件編程技術,包括控件、動態(tài)鏈接庫和ActiveX文檔等組件[2]。通過ActiveX,可以復用組態(tài)軟件中已有的圖元控件,從而生成和軟件中完全相同的畫面,并通過動態(tài)鏈接庫開發(fā)相應的拓展功能。但該技術的缺點也是明顯的:①ActiveX控件都基于Windows開發(fā),無法實現跨平臺應用;②運行ActiveX需要安裝ActiveX控件,但控件的開發(fā)和維護都比較復雜,導致其系統(tǒng)升級和維護較為繁瑣。
(2)Applet:一種運行在客戶端的Java小程序,它可以實現圖形繪制、人機交互、動態(tài)更新等功能。這種將瀏覽器端的Applet與服務器端的Servlets/JSP相結合的Web發(fā)布系統(tǒng)稱為基于Java的組態(tài)軟件Web發(fā)布系統(tǒng)。其體系結構如圖1所示。由于Applet程序都是解釋型的,運行速度慢,且該結構中Web頁面的顯示邏輯和后臺數據的處理邏輯均由Servlets/JSP來完成,這樣開發(fā)的代碼量大,程序實現復雜,且不易維護,因此并不適合要求高的工業(yè)應用環(huán)境。
圖1 基于Java的Web發(fā)布系統(tǒng)
(3)WPF:WPF是微軟公司推出的基于.NET的用戶界面框架,它提供了統(tǒng)一的編程模型、語言和框架[2]。通過靈活使用WPF提供的頁面控件,便可以實現客戶端畫面的再現。應用WPF技術實現的Web應用程序需要安裝.NET Framework,而.NET Framework安裝包的下載和安裝都相對復雜,且與平臺相關,這成為WPF技術的一個缺點。
(4)SliverLight:這是WPF的一個輕量版本,但它基于瀏覽器插件,服務器端不需要部署任何環(huán)境,客戶端也無需安裝.NET Framework,只需要安裝Runtime插件,可以實現跨平臺應用。然而,Silverlight的動態(tài)屬性計算較為復雜,對客戶端計算機有較高要求,同時會造成監(jiān)控畫面的延時問題。
(5)SVG:是W3C制定的一種基于XML的矢量圖形標準,它可以在網頁上顯示出各種各樣的高質量矢量圖形,支持數據驅動的動態(tài)變化且具有良好的交互性,而且可以很好的實現圖形顯示的跨平臺應用。這也是本文所設計Web發(fā)布系統(tǒng)中所采用的方法,已有研究將SVG應用于組態(tài)軟件Web發(fā)布中,但由于采用傳統(tǒng)的Web交互方式,在響應速度和用戶體驗方面仍有待改進[2]。
在工控組態(tài)軟件中,數據量大、更新頻繁,實時性要求高,因此對于Web發(fā)布系統(tǒng)中實時數據的傳送方式有較高要求。當前Web發(fā)布系統(tǒng)中實時數據的傳送方式有以下幾種:
(1)通用網管接口(Common Gateway Interface,CGI):它是最早的Web數據庫連接技術,負責數據庫與服務器之間的通信并提供應用程序服務。基于CGI的Web發(fā)布系統(tǒng)結構如圖2所示。Web服務器接收來自瀏覽器帶有CGI串的HTTP請求,服務器根據指令啟動CGI程序訪問數據庫,訪問結束后將處理結果再通過服務器返回瀏覽器。它雖然實現了瀏覽器與服務器之間的動態(tài)交互,但是運行效率很差,難以滿足日趨復雜的工業(yè)現場信息交流。
圖2 基于CGI的Web發(fā)布系統(tǒng)
(2)動態(tài)服務器頁面(Active Server Pages,ASP):它是一種令網頁上的腳本在服務器上運行的技術。當瀏覽器請求某個ASP頁面時,IIS(Internet信息服務)會將請求傳遞至ASP引擎,ASP引擎逐行讀取該文件并執(zhí)行其中的腳本,最后返回HTML文件給瀏覽器。雖然ASP在安全性上有較大優(yōu)勢,但ASP頁面開發(fā)復雜,而且只能在Windows平臺下運行。
(3)異步JavaScript和XML(AJAX):它是一種無需重新加載整個網頁而更新部分網頁的技術,瀏覽器通過AJAX引擎與服務器端通信,返回結果再由AJAX引擎決定數據插入頁面的位置。AJAX通過輪詢的方式實現瀏覽器與服務器的異步通信,其原理是客戶端定時向瀏覽器發(fā)送AJAX請求,服務器街接到請求后返回相應信息并關閉連接。雖然AJAX實現較簡單,但比較浪費服務器資源,效率不高。
(4)WebSocket:它是一種在單個TCP連接上進行全雙工通信的協議,瀏覽器和服務器只需要完成一次握手,兩者之間就可以創(chuàng)建持久性的連接,并進行雙向數據傳輸。圖3展示了AJAX輪詢和WebSocket握手之間的差別。
圖3 AJAX輪詢與WebSocket連接方式
由于在工控組態(tài)軟件Web發(fā)布系統(tǒng)中,往往需要瀏覽器和服務器頻繁的雙向通信,顯然WebSocket比AJAX更加簡易高效,這也是本文Web發(fā)布系統(tǒng)中所采用的方式。
在已有的工控組態(tài)軟件Web發(fā)布系統(tǒng)中,基于以上技術,所采用的開發(fā)框架有ASP.NET、WCF、J2EE等。其中,ASP.NET不能實現跨平臺系統(tǒng),WCF和J2EE開發(fā)應用都有配置復雜等問題。Spring框架是現在市場占有率最高的基于J2EE框架的研發(fā)型軟件產品,而SpringBoot項目是Pivotal團隊開發(fā)的一個全新Spring框架,其目的就在于解決Spring開發(fā)中的復雜配置操作,使開發(fā)人員只需要專注于業(yè)務邏輯代碼的實現[3]。
本文所設計的基于SpringBoot的Web發(fā)布系統(tǒng),采用了SpringBoot中高效便捷的SVG、Contoller等技術,結合WebSocket、Hibernate等通信技術,結構清晰,其總體架構如圖4所示。
圖4 基于SpringBoot的Web發(fā)布系統(tǒng)
在該Web發(fā)布系統(tǒng)中,顯示模塊用以顯示組態(tài)畫面并根據數據動態(tài)更新。該過程首先需要用組態(tài)軟件的畫面信息文件生成SVG格式文件,服務器將其加入JSP頁面后再將HTML發(fā)布給瀏覽器。采用SVG作為組態(tài)軟件與Web系統(tǒng)交互的畫面文件格式,其優(yōu)勢在于:(1)矢量圖可以適應瀏覽器端畫面大小不同的縮放而不破壞清晰度;
(2)基于XML標準具有較好的開放性和拓展性;
(3)豐富的動畫支持能夠實現原組態(tài)軟件中全部圖形元素屬性的動態(tài)變化。
在Web系統(tǒng)運行時,瀏覽器根據從服務端獲取的組態(tài)配置信息和實時數據,通過JavaScript腳本動態(tài)更新SVG文件的DOM,進而實時更新瀏覽器中的畫面顯示[2]。該過程步驟為:(1)獲取圖形文件中各圖形元素的動畫方式及變量,編寫好根據變量值改變圖形顯示的JavaScript代碼;(2)頁面定時獲取數據變量的實時數據值;(3)根據JavaScript執(zhí)行結果修改SVG文件,進而動態(tài)更新頁面。
由于瀏覽器需要實時獲取服務器數據以更新畫面,采用WebSocket進行服務器與瀏覽器之間的數據交互。WebSocket是目前瀏覽器中最通用和靈活的傳輸技術,不僅可以將整個通信過程建立在一次連接中,也可以實現服務器主動推送信息給客戶端,非常適合工控Web系統(tǒng)實時快速的數據交流。同時WebSocket提供了簡單輕量級的程序開發(fā)接口,可以顯著降低系統(tǒng)開發(fā)復雜程度[5]。
為了保證Web系統(tǒng)中數據交互的安全性,同時使用了WebSocket中的加密傳輸(Web Socket Secure,WSS),它利用安全套接層(Secure Socket Layer,SSL)建立安全的通信鏈路,不需要擔心數據被竊取。
當服務器收到來自瀏覽器的數據請求時,服務器需要向組態(tài)軟件數據庫查詢變量點實時數據,而工控系統(tǒng)中變量點規(guī)模龐大,因此采用Hibernate(開放源代碼的對象關系映射框架)來進行服務器與數據庫的交互操作。Hibernate對JDBC(Java數據庫連接)進行了輕量級的對象封裝,可以自動生成SQL語句,是一個高性能的對象關系型持久化存儲和查詢的服務。因此,采用Hibernate能夠很好地提升工控組態(tài)軟件Web發(fā)布系統(tǒng)的性能[6]。
在該Web系統(tǒng)中,功能模塊主要指服務器中用來完成功能業(yè)務邏輯的Controller(控制器),之所以采用SpringMVC中的Controller來代替?zhèn)鹘y(tǒng)JavaWeb中的Servlets,是為了簡化開發(fā)與維護工作,同時使邏輯更加清晰。Controller的基本原理是采用前端控制器模式,由DispacherServlet分發(fā)請求到Controller[2],其主要處理來自畫面的顯示邏輯、下發(fā)請求等。
除了對組態(tài)軟件畫面的同步顯示和操作功能,工控組態(tài)軟件Web發(fā)布系統(tǒng)還應具備歷史數據展示、報警顯示等功能,其中歷史數據顯示通過Web服務器中的Controller與組態(tài)軟件中的歷史數據庫通信獲得,當收到歷史數據請求時,將數據統(tǒng)一用新的頁面發(fā)送給瀏覽器,該頁面同時具有與組態(tài)軟件相似的查詢等功能。報警功能則既可以嵌入在頁面信息中,可定時查詢數據再通過判定邏輯決定是否報警,也可以由服務器主動向瀏覽器推送,并通過瀏覽器端彈窗來顯示,這是通過WebSocket實現的服務器瀏覽器雙向通信完成的,系統(tǒng)將根據用戶在組態(tài)軟件中的選擇來選取具體的報警方式。
本系統(tǒng)的設計與實現均基于全國產化SCADA系統(tǒng),支持在國產麒麟和Windows操作系統(tǒng)上跨平臺運行,且提供方便的數據組態(tài)、畫面組態(tài)、歷史和實時趨勢等功能。利用本文所實現的Web發(fā)布系統(tǒng),只需要在現場控制中心運行組態(tài)軟件,現場其余各處聯網機只需配備瀏覽器即可申請訪問組態(tài)畫面,通過用戶驗證后,可以執(zhí)行下發(fā)與組態(tài)軟件相同的監(jiān)控控制等操作。之后的軟件更新等操作,也只需在控制中心維護即可。
本文主要分析了工控組態(tài)軟件Web發(fā)布系統(tǒng)中的相關技術,并設計了基于當前流行Web框架SpringBoot的新型工控組態(tài)軟件Web發(fā)布系統(tǒng),并在基于國產PLC的工控上位機組態(tài)軟件中實現并成功應用,該系統(tǒng)不僅具有跨平臺、高效性、開發(fā)與維護方便等優(yōu)勢,同時具有很好的靈活性、拓展性和安全性,滿足了國產PLC系統(tǒng)工控組態(tài)軟件在工程中的應用要求。