本發明屬于計算機通訊技術領域,特別涉及一種向web頁面高效傳輸及推送報警數據方法。
背景技術:
在能源、化工等生產自動化及信息系統等行業,分布著大量的傳感器及其信息處理模塊,這些模塊往往會產生大量的報警數據,這些報警數據要求秒級或毫秒級發送給運行監控人員,以前這些報警數據的處理和展示都由下位機來實現,所以只有在生產現場能收到報警信息。但是隨著信息技術的不斷發展,要求能夠在裝有瀏覽器的任意一臺電腦上收到所有下位機的報警數據。要解決多個下位機報警數據到任意web頁面的實時通訊問題,需要引入web服務器作為中轉,這樣就要解決報警數據從下位機到web服務器再到web頁面的實時通訊問題。
下位機到web服務器的數據傳輸有兩種基礎通訊協議即tcp和udp,tcp是面向連接的可靠的數據通訊技術,udp是非連接的不可靠的數據通訊技術(局域網穩定性好的特點的決定了udp在局域網內同樣相對可靠),因為不需要在傳輸前建立連接所以udp比tcp傳輸效率高,尤其是針對突發的小數據量傳輸,報警數據的突發性、數據量小及實時性要求高的特點決定了用udp協議最合適,本發明在udp協議的基礎上增加了確認機制克服了udp的缺點。
web服務器到web頁面的數據傳輸是通過http協議,其本質上是構建在tcp協議之上的應用層協議,http協議的基本模式是web頁面發送請求然后web服務器響應并傳輸數據,這種模式顯然不適合報警數據發生時實時推送給web頁面,因為web頁面不知道報警數據什么時候發生,但是可以采用一種變通的方式,即web頁面發送請求后web服務器暫時不響應,只有報警數據發生時才響應,如果web服務器一直不響應則web頁面會在超時后重新發送請求建立連接,這種方式web頁面一直跟web服務器保持連接所以叫長連接技術。dwr就是支持這種長連接技術的開源框架,該框架能夠在服務器端獲得web頁面連接會話,并能調用會話頁面中的javascript腳本。
json是一種輕量級的數據交換格式,本質是一個字符串,可以直接被javascript解析成數據對象,廣泛應用于jsp頁面(一種web頁面)與java服務器(一種web服務器如tomcat服務器)的交互。
技術實現要素:
本發明的目的是
提出一種向web頁面高效傳輸及推送報警數據方法,
其特征在于,包含如下步驟:
步驟1:下位機把報警數據封裝成udp數據包,包中包含版本號、報警時間、系統號、分組號、報警點編號和報警類型和報警值,然后與發送時間、發送計數作為一個對象放入發送隊列,準備發送;其中udp數據包格式為:(1)版本號為1字節,用于系統升級時能兼容不同版本的數據包;(2)報警時間,年月日時分秒各1字節共6字節,年份2000算第0年;(3)系統號為1字節,下位機唯一標識;(4)分組號為1字節,用于區分同一時間報警的多個數據包,因為udp數據包不宜過大所以一個數據包最多含64個報警數據(實際很少超過64個);(5)報警數量為1字節;(6)報警點編號為2字節;(7)報警類型為1字節,包括越上限、越下限和變化率過快3種,分別用0、1、2代表;(8)報警值,浮點型4個字節。數據包中的報警點編號、報警類型和報警值根據報警數量可循環多次;
步驟2:下位機使用獨立的發送線程依次取出發送隊列中對象,向web服務器發送其中的udp數據包,同時記錄發送時間,發送計數加1;
步驟3:web服務器接收和解析下位機發過來的報警數據udp數據包;
步驟4:web服務器解析成功后給下位機發送確認信號,確認信號仍然使用udp數據包的形式,包中含報警時間、系統號、分組號;
步驟5:下位機使用獨立的接收線程接收確認數據包,包中的報警時間、系統號和分組號能唯一定位報警數據對象,下位機會從發送隊列中刪除該對象以避免重復發送;
步驟6:下位機會定時檢測發送隊列,如不為空則會判斷發送對象的上次發送時間是否超時,如超時且發送計數少于3次則再次發送該數據包,如發送計數達到3次應將該對象從發送隊列中刪除;
步驟7:web服務器接收并正確解析數據包后,會把同一時間的報警數據組合成一個json格式數據對象,對象中包含了報警時間、系統號,報警對象數組,報警對象中包含報警點編號、報警類型和報警值;
步驟8:web頁面向web服務器發送一次長連接請求;
步驟9:web服務器和web頁面建立連接并獲取web頁面會話,并采用直接web遠程通信技術向web頁面會話推送json格式數據對象;
步驟10:web頁面內的腳本負責解析json數據對象并展示到web頁面上。
本發明的有益效果是本發明包括下位機到web服務器的高效數據傳輸技術和web服務器到web頁面的實時數據推送技術兩部分。把報警數據自下位機經由web服務器高效實時推送到web頁面上。明顯加快下位機經由web服務器到web頁面的通訊效率,傳統數據通訊時間最少需要2秒,而本發明只需要0.5秒,并且支持多個下位機和多個web頁面同時應用。
附圖說明
圖1為報警數據傳輸及推送系統數據流轉示意圖;
圖2為報警數據傳輸及推送系統流程圖。
具體實施方式
本發明提供一種向web頁面高效傳輸及推送報警數據方法,下面結合附圖和實施例予以說明。
本發明中包含有下位機、web服務器和web頁面等組件,報警數據由下位機傳輸給web服務器然后推送到web頁面上顯示,報警數據流轉示意圖如圖1所示,具體實施說明如下:
1.在下位機中報警數據被封裝成udp數據包,數據包包含有版本號、報警時間、系統號、分組號、報警點對象數組,報警對象包含報警編號、報警類型、報警值,udp包示例:01[版本號為1]11040a0c0808[報警時間2017-04-1012:08:08,包中數據用16進制]01[系統號為1]00[分組號為0]00010000000320[編號為1的報警點類型為0報警值為800]00020100000064[編號為2的報警點類型為1報警值為100]。udp封裝好后加入發送時間和發送計數放到發送隊列中等待發送,然后激活發送線程發送udp數據包。
2.下位機在啟動時創建端口號為7001的udp服務端口接收web服務器發送回來的確認信號,確認信號包含報警時間、系統號、分組號能唯一定位發送隊列中的發送對象,然后從發送隊列中刪除該對象以避免重復發送。
3.web服務器啟動時不僅建立端口為8080的http協議服務端口,而且會建立端口號為7002的udp服務端口,8080端口用于響應web網頁訪問請求,7002端口用于接收下位機發送過來的udp數據包。
4.web服務器向web頁面推送的json數據對象格式為:報警時間,系統號,報警點對象數組,報警點對象包含報警點編號、報警類型和報警數據三個字段,示例{"alarmtime":"2017-01-0100:00:00","sysno":1,"alarmobjs":[{"code":"001","type":0,"value":800},{"code":"002","type":1,"value":100}]}為包含了兩個報警點數據的json對象,其中type代表報警類型,取值含義分別為,0-越上限、1-越下限、2-變化率過快。
5.web頁面中包含了兩段javascript腳本,一段用于跟web服務器建立長連接,一段用于json對象的解析和數據展示。
6.web服務器到web網頁的實時數據推送具體實現過程如下:1)引入dwr(directwebremoting)開源框架,并配置可向web頁面提供服務的java類;2)web網頁向web服務器發送一次長連接請求,實際上就是在web網頁加載時調用請求java服務類的javascript腳本;3)java服務類獲取web頁面連接會話,并調用web頁面中一段json對象解析和展示的javascript腳本;4)web頁面運行json對象解析和展示腳本把報警數據顯示在瀏覽器上。
本實施例中下位機用pascal語言進行開發,實際可以用任意一種支持udp通訊的語言開發。web服務器使用tomcat作服務器,服務端代碼使用java語言開發,web頁面為jsp類型的頁面,內嵌javascript腳本,本實施實例部署了2個下位機,1個web服務器和5個瀏覽器終端,下位機和web終端運行在windows7操作系統環境,web服務器運行在win2008操作系統環境。