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