荊俊峰,蒯 亮,房志奇,劉 凱,靳書云
(中國電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所,北京 100083)
在信息管理系統(tǒng)中,最常見的是MIS 管理系統(tǒng),它一般主要關(guān)注的是宏觀層面的信息管理,如原材料管理、財(cái)務(wù)管理、質(zhì)量管理、計(jì)劃管理、人力資源管理等[1]。但對于機(jī)組運(yùn)行實(shí)時(shí)數(shù)據(jù)以及實(shí)時(shí)工藝要素的信息推送,在管理者的角度來看是一個(gè)迫切需求,管理者不用親臨操控室,在辦公室就可以實(shí)時(shí)監(jiān)控機(jī)組運(yùn)行系統(tǒng)圖和數(shù)據(jù)曲線,從而能夠及時(shí)、準(zhǔn)確地掌握機(jī)組運(yùn)行狀況,以便做出科學(xué)決策。尤其對于機(jī)組分散在不同地域的情況,對每個(gè)機(jī)組的運(yùn)行狀況的獲取更為迫切。本文從實(shí)際需求出發(fā),設(shè)計(jì)了一種機(jī)組運(yùn)行信息遠(yuǎn)程瀏覽的實(shí)現(xiàn)方法,為工廠管理者提供了一套便捷、快速、準(zhǔn)確的信息獲取方式,從而實(shí)現(xiàn)科學(xué)管理、科學(xué)決策、科學(xué)運(yùn)行。
遠(yuǎn)程瀏覽系統(tǒng)分為服務(wù)端和客戶端兩個(gè)體系,其中服務(wù)端可以支持多個(gè)機(jī)組,每個(gè)都配有一個(gè)遠(yuǎn)程瀏覽服務(wù)器,專門負(fù)責(zé)向客戶端提供動(dòng)態(tài)數(shù)據(jù),每個(gè)機(jī)組都支持多個(gè)客戶同時(shí)遠(yuǎn)程瀏覽。系統(tǒng)在服務(wù)端對每一個(gè)客戶端進(jìn)行注冊登記,以保證每個(gè)客戶的合法性??蛻舳说臄?shù)量按需配備,可以分散分布于廠區(qū)的不同位置,根據(jù)具體需求配備相應(yīng)的防火墻和交換機(jī),但需要開放相應(yīng)的通信端口。系統(tǒng)體系結(jié)構(gòu)如圖1 所示[2]。
遠(yuǎn)程瀏覽系統(tǒng)是依附于SCADA 系統(tǒng)而進(jìn)行設(shè)計(jì)的,SCADA 系統(tǒng)設(shè)計(jì)的原則是分為系統(tǒng)軟件層和驅(qū)動(dòng)層兩個(gè)層次,系統(tǒng)軟件層主要部署系統(tǒng)級(jí)軟件以及一些通用型軟件,驅(qū)動(dòng)層主要實(shí)現(xiàn)多種數(shù)據(jù)源的組態(tài)和通信功能,包括控制器、MIS 通信、OPC、MODBUS、PLC 等各種數(shù)據(jù)源。遠(yuǎn)程瀏覽系統(tǒng)相對于SCADA 系統(tǒng)來說可以作為一個(gè)數(shù)據(jù)源驅(qū)動(dòng)來看待,因此屬于驅(qū)動(dòng)層的軟件;對于客戶端來說原則上保留系統(tǒng)軟件的部署,但通用軟件層不排除產(chǎn)品有特殊功能的要求。因此在單元機(jī)組側(cè)也就是服務(wù)端的SCADA 軟件中增加與遠(yuǎn)程站通信的接口驅(qū)動(dòng)WebServer 通信模塊,而遠(yuǎn)程瀏覽側(cè)作為單獨(dú)的軟件產(chǎn)品安裝,如圖2 所示[3]。
圖2 遠(yuǎn)程瀏覽系統(tǒng)的軟件地位
遠(yuǎn)程瀏覽系統(tǒng)服務(wù)端和客戶端的模塊劃分如圖3 所示,其中服務(wù)端有注冊模塊、通信管理模塊、測點(diǎn)提取模塊、文件服務(wù)模塊、證書模塊、下載列表模塊,客戶端有登錄管理模塊、客戶端通信模塊、文件下載模塊、公共接口模塊等。
圖3 遠(yuǎn)程瀏覽系統(tǒng)的軟件模塊劃分
服務(wù)端的注冊模塊實(shí)現(xiàn)遠(yuǎn)程客戶端名稱、密碼、IP地址的注冊,對注冊數(shù)據(jù)庫進(jìn)行備份和恢復(fù),以及注冊數(shù)據(jù)庫全網(wǎng)一致化等功能;通信管理模塊實(shí)現(xiàn)客戶端的登錄驗(yàn)證、與客戶端通信交互、周期調(diào)度等功能;測點(diǎn)提取模塊進(jìn)行系統(tǒng)圖上測點(diǎn)信息的提?。晃募?wù)模塊實(shí)現(xiàn)FTP 文件下載服務(wù)功能;證書模塊實(shí)現(xiàn)License 相關(guān)的功能;下載列表模塊為遠(yuǎn)程瀏覽客戶端生成下載系統(tǒng)圖的列表,為遠(yuǎn)程瀏覽客戶端提供系統(tǒng)圖號(hào)替換功能。
客戶端登錄管理模塊實(shí)現(xiàn)與服務(wù)器握手信息的管理;客戶端通信模塊與服務(wù)端進(jìn)行數(shù)據(jù)交互通信,包括客戶端顯示系統(tǒng)圖的請求與接收、周期接收系統(tǒng)圖測點(diǎn)的動(dòng)態(tài)信息、系統(tǒng)圖的更新等;文件下載模塊提供客戶端文件下載服務(wù);公共接口模塊實(shí)現(xiàn)客戶端進(jìn)行系統(tǒng)圖顯示所需的公共函數(shù)的接口服務(wù)。
系統(tǒng)圖的顯示原理是顯示程序首先讀取本地系統(tǒng)圖在線文件,從在線文件中獲取系統(tǒng)圖的顯示圖素以及動(dòng)態(tài)Tag 點(diǎn)的信息,然后根據(jù)圖素把系統(tǒng)圖顯示出來,其中的動(dòng)態(tài)信息一部分來自于共享內(nèi)存中的動(dòng)態(tài)Tag 信息,包括動(dòng)態(tài)Tag 點(diǎn)的實(shí)時(shí)值、實(shí)時(shí)狀態(tài)、上下限值、報(bào)警信息等;另一部分是動(dòng)態(tài)圖素信息,包括交替圖形、動(dòng)畫、動(dòng)態(tài)顏色、動(dòng)態(tài)數(shù)值等。因此服務(wù)端和客戶端的交互需要兩種方式,一種是進(jìn)程間的數(shù)據(jù)交互,另一種是服務(wù)端和客戶端之間的文件交互。WebServer 端部署在SCADA 系統(tǒng)軟件基礎(chǔ)上,作為SCADA 軟件的一個(gè)驅(qū)動(dòng)模塊,同時(shí)也是WebClient 的數(shù)據(jù)源,WebClient 作為一個(gè)單獨(dú)的系統(tǒng)軟件,部署在遠(yuǎn)程瀏覽的客戶端。服務(wù)器端的WebServer 驅(qū)動(dòng)程序首先通過讀取注冊數(shù)據(jù)庫獲取登錄請求的遠(yuǎn)程瀏覽用戶的合法性,登錄成功后,通過進(jìn)程間的通信技術(shù)與進(jìn)程GetGrbPIDList 交互從而獲取客戶端需要顯示的Tag 點(diǎn)列表,通過UDP 協(xié)議周期發(fā)送數(shù)據(jù)差分信息,保證客戶端數(shù)據(jù)的實(shí)時(shí)性。服務(wù)器端的WebFTPServer 通過注冊數(shù)據(jù)庫獲取需要下載的用戶信息,并完成客戶端需要的系統(tǒng)圖在線文件的FTP 下載;客戶端的WebClientComm 負(fù)責(zé)與服務(wù)器端的驅(qū)動(dòng)程序進(jìn)行通信交互,周期獲取動(dòng)態(tài)數(shù)據(jù),同時(shí)負(fù)責(zé)診斷信息的發(fā)送,另外WebClientComm 通過預(yù)處理隊(duì)列和輸入處理隊(duì)列把數(shù)據(jù)寫入客戶端實(shí)時(shí)表,供顯示模塊進(jìn)行系統(tǒng)圖的顯示,其總體處理流程如圖4 所示。
圖4 遠(yuǎn)程瀏覽系統(tǒng)的總體處理流程圖
UDP 協(xié)議是一個(gè)無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP 傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護(hù)連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息,這個(gè)正好可以滿足本系統(tǒng)一個(gè)服務(wù)器可以登錄多個(gè)客戶端的需求[4]。同時(shí)因?yàn)榉?wù)端和客戶端的通信交互是周期性的,所以采用無連接的UDP 協(xié)議來實(shí)現(xiàn)正好可以揚(yáng)長避短。客戶端首次登錄后,顯示首張系統(tǒng)圖時(shí),首先向服務(wù)端發(fā)送請求,服務(wù)端會(huì)先發(fā)送該系統(tǒng)圖的所有Tag 點(diǎn)的定義信息,確保發(fā)送成功后,再周期發(fā)送這些Tag 點(diǎn)實(shí)時(shí)值、實(shí)時(shí)狀態(tài)的差分信息,從而達(dá)到減少網(wǎng)絡(luò)負(fù)荷的目的[5]。
WebServer 端的通信模塊主要完成如下功能:(1)實(shí)時(shí)監(jiān)聽客戶端通信請求,并給出應(yīng)答;(2)最多可同時(shí)并發(fā)接收20 個(gè)客戶端請求;(3)向測點(diǎn)提取模塊發(fā)消息生成通信使用的點(diǎn)列表,并按照請求的更新周期向客戶端周期發(fā)送系統(tǒng)圖上Tag 的實(shí)時(shí)值和狀態(tài);(4)接收客戶端的診斷信息包,在5 個(gè)發(fā)送周期沒有收到診斷信息(客戶端的診斷包發(fā)送周期可定制),則認(rèn)為客戶端異常,服務(wù)器終止周期發(fā)送。服務(wù)端的處理流程如圖5所示[6]。
圖5 服務(wù)端的流程設(shè)計(jì)
客戶端登錄成功后,首先創(chuàng)建套接字,啟動(dòng)接收線程,然后向服務(wù)器發(fā)送接收數(shù)據(jù)的請求,在接收到數(shù)據(jù)包后把實(shí)時(shí)數(shù)據(jù)寫入預(yù)處理隊(duì)列,通過本地?cái)?shù)據(jù)處理流程然后寫入實(shí)時(shí)表,具體流程設(shè)計(jì)參見圖6 所示。
圖6 客戶端的流程設(shè)計(jì)圖
由于UDP 無連接,不像TCP 一樣做了所有的事情,因此對于采用UDP 協(xié)議的遠(yuǎn)程瀏覽系統(tǒng)需要設(shè)計(jì)一套交互管理辦法,對于發(fā)送的各種類型的數(shù)據(jù)包需要進(jìn)行辨別。針對這種需求,本文設(shè)計(jì)了一套包頭標(biāo)識(shí)符的識(shí)別方法,當(dāng)服務(wù)端或者客戶端收到UDP 數(shù)據(jù)包時(shí),首先讀取包頭標(biāo)識(shí)符,通過標(biāo)識(shí)符后的數(shù)字來確定該數(shù)據(jù)包的類型,從而確定該數(shù)據(jù)包是登錄請求包,數(shù)據(jù)包、或者其他類型。表1 為標(biāo)識(shí)符的定義說明。
表1 UDP 包頭標(biāo)識(shí)設(shè)計(jì)
服務(wù)端和客戶端除了進(jìn)程間的數(shù)據(jù)交互之外,還需要進(jìn)行文件交互,因?yàn)榭蛻舳诵枰獜姆?wù)端下載系統(tǒng)圖的在線文件來進(jìn)行顯示。在客戶端首次登錄時(shí),首先下載顯示系統(tǒng)圖需要的基本在線文件,在顯示某幅系統(tǒng)圖時(shí)還需要判斷該系統(tǒng)圖是否服務(wù)器端有更新,如果有更新就需要重新下載,然后才能通過服務(wù)器傳送系統(tǒng)圖上Tag 點(diǎn)的實(shí)時(shí)值和狀態(tài),實(shí)現(xiàn)客戶端系統(tǒng)圖的動(dòng)態(tài)呈現(xiàn)。
FTP(File Transfer Protocol)是用于在網(wǎng)絡(luò)上進(jìn)行文件傳輸?shù)囊惶讟?biāo)準(zhǔn)協(xié)議,它工作在OSI 模型的第七層,TCP 模型的第四層,即應(yīng)用層,使用TCP 傳輸而不是UDP,客戶在和服務(wù)器連接前要經(jīng)過一個(gè)“三次握手”的過程,能夠保證連接可靠,而且是面向連接,為文件傳輸提供可靠保證。因此本文設(shè)計(jì)了一套FTP 文件下載系統(tǒng),來實(shí)現(xiàn)該項(xiàng)功能。FTP 服務(wù)啟動(dòng)時(shí)首先檢測本機(jī)是否是預(yù)先定義的服務(wù)器,如果是則根據(jù)注冊的客戶端信息為客戶端提供FTP 下載服務(wù),如果設(shè)備組態(tài)發(fā)生變更,收到變更消息需要重新初始化FTP 服務(wù)。圖7 為FTP 的服務(wù)端和客戶端的流程模型[7]。
圖7 FTP 文件下載系統(tǒng)流程模型圖
圖8 為服務(wù)端各個(gè)類之間的關(guān)系,其中數(shù)據(jù)管理類CFtpServer 為實(shí)現(xiàn)類,主要完成FTP 服務(wù)端的綁定IP 地址、設(shè)定FTP 數(shù)據(jù)端口范圍、設(shè)定FTP 客戶名和密碼、設(shè)定最大客戶端數(shù)、綁定監(jiān)聽端口、啟動(dòng)FTP 服務(wù)等功能。
圖8 服務(wù)端類關(guān)系圖
圖9 為客戶端各個(gè)類之間的關(guān)系,其中類CSetGrb-Path、CSetServerIPAddress 分別設(shè)置下載文件的路徑和IP 信息,CFtpCLient 完成FTP 文件下載客戶端的具體操作流程,包括初始化、建立連接、登錄、創(chuàng)建路徑、文件重命名、文件下載、文件傳輸?shù)萚8]。
圖9 客戶端類關(guān)系圖
客戶端的系統(tǒng)圖顯示需要顯示軟件進(jìn)行顯示,而通信模塊也需要對顯示內(nèi)容進(jìn)行周期維護(hù),因此對于多個(gè)進(jìn)程需要訪問的內(nèi)存,本系統(tǒng)采用共享內(nèi)存的方式進(jìn)行設(shè)計(jì)。由于客戶端支持最多同時(shí)顯示4 張系統(tǒng)圖,因此共享顯示內(nèi)存最多存儲(chǔ)4 張系統(tǒng)圖的實(shí)時(shí)數(shù)據(jù),每張圖由機(jī)組單元號(hào)和圖號(hào)作為索引,每張系統(tǒng)圖最多支持1 000 個(gè)Tag 點(diǎn)的顯示,包括邏輯點(diǎn)、顏色變更等,如果系統(tǒng)圖關(guān)閉,對應(yīng)的內(nèi)存區(qū)也隨之清零。這個(gè)內(nèi)存是個(gè)動(dòng)態(tài)變化緩存區(qū),其動(dòng)態(tài)信息由預(yù)處理隊(duì)列進(jìn)行維護(hù)[9],圖10 為該共享內(nèi)存的存儲(chǔ)設(shè)計(jì)。
圖10 客戶端共享內(nèi)存設(shè)計(jì)圖
本文立足于SCADA 數(shù)據(jù)采集系統(tǒng),設(shè)計(jì)了一種基于UDP 和FTP 通信協(xié)議的遠(yuǎn)程瀏覽系統(tǒng),為管理者的科學(xué)決策、生產(chǎn)分析提供了便利,尤其對于分散于不同地域的控制系統(tǒng)的監(jiān)控具有現(xiàn)實(shí)意義。該系統(tǒng)設(shè)計(jì)方法簡潔,信息獲取及時(shí)準(zhǔn)確,已獲得廣泛推廣和應(yīng)用。