沈思曦,陳元林,安博文,盧學(xué)佳
(1.上海海事大學(xué)信息工程學(xué)院,上海 201306;2.國(guó)網(wǎng)衡水供電公司,衡水 053000)
海上風(fēng)電系統(tǒng)由陸上集控中心、海上升壓站和海上風(fēng)機(jī)組成。陸上集控中心與海上升壓站之間、海上升壓站與各個(gè)風(fēng)機(jī)之間分別用用220kv和35kv的海纜進(jìn)行串接。風(fēng)電場(chǎng)工作人員需要對(duì)所有鋪設(shè)海纜的海域進(jìn)行船舶監(jiān)控,保護(hù)海纜不受錨害。
文獻(xiàn)[1]提出了一種單機(jī)版的海上船舶監(jiān)控系統(tǒng),其能夠?qū)S騼?nèi)傳播進(jìn)行有效監(jiān)控。文獻(xiàn)[2]在文獻(xiàn)[1]的基礎(chǔ)上提出了基于C/S結(jié)構(gòu)的多客戶端監(jiān)控系統(tǒng)的想法,但其只有想法沒(méi)有具體的實(shí)施方案。文獻(xiàn)[3]將文獻(xiàn)[2]中的想法成功實(shí)現(xiàn),且系統(tǒng)能夠穩(wěn)定運(yùn)行,但文獻(xiàn)[1-3]的系統(tǒng)均只支持單個(gè)AIS設(shè)備進(jìn)行數(shù)據(jù)采集,使得系統(tǒng)穩(wěn)定性得不到保障,且其告警系統(tǒng)不夠完善,均只能系統(tǒng)報(bào)警而不能向目標(biāo)船舶發(fā)送告警信息。這些不足點(diǎn)在文獻(xiàn)[4]中被提及,作者提出了一系列方案來(lái)完善系統(tǒng),但最終只有部分功能完成模擬測(cè)試,且系統(tǒng)整體設(shè)計(jì)沒(méi)有完成。本系統(tǒng)完成了文獻(xiàn)[1-4]中的設(shè)計(jì),并對(duì)其中部分功能進(jìn)行補(bǔ)充和優(yōu)化。
本系統(tǒng)采用的技術(shù)主要包括AIS解碼編碼技術(shù)、MapWinGIS地圖開(kāi)發(fā)技術(shù)、PostGIS地理信息空間數(shù)據(jù)庫(kù)管理技術(shù)、基于分布式數(shù)據(jù)庫(kù)(MySQL)的數(shù)據(jù)發(fā)布訂閱技術(shù)、基于分布式數(shù)據(jù)庫(kù)(MySQL)的配置信息管理技術(shù)和多線程技術(shù)。
(1)支持多個(gè)AIS設(shè)備同時(shí)接入
單個(gè)AIS設(shè)備監(jiān)測(cè)海域的范圍有限,且穩(wěn)定性較差。因此要求系統(tǒng)支持多個(gè)設(shè)備同時(shí)接入和動(dòng)態(tài)可配置。
(2)GIS電子海圖形式的表示層
以電子海圖的形式顯示觀測(cè)海域、警戒區(qū)和海上船舶,使用戶更直觀地了解海上船舶的航行情況。
(3)多客戶端設(shè)計(jì)
工程上需要在海上升壓站、陸上集控中心等地點(diǎn)查看監(jiān)控系統(tǒng)信息,所以系統(tǒng)需滿足多客戶端同時(shí)在線訪問(wèn)。
(4)船舶告警功能
系統(tǒng)需要有自動(dòng)告警功能(系統(tǒng)界面彈出告警框并產(chǎn)生警報(bào)),并向滯航船舶自動(dòng)發(fā)送告警信息和向目標(biāo)船舶手動(dòng)發(fā)送短消息的功能。
(5)歷史信息查詢功能
系統(tǒng)應(yīng)包含船舶歷史信息和歷史航跡繪制的功能,方便用戶對(duì)歷史船舶進(jìn)行數(shù)據(jù)查詢和事故追責(zé)。
本系統(tǒng)要求的系統(tǒng)指標(biāo)如表1所示。
表1 技術(shù)指標(biāo)
硬件設(shè)備主要包含AIS設(shè)備、服務(wù)器和客戶端,其連接框架如圖1所示。
圖1 硬件框架
本系統(tǒng)軟件結(jié)構(gòu)如圖2所示,包含以下功能模塊:AIS數(shù)據(jù)采集模塊、AIS數(shù)據(jù)編解碼模塊、AIS可視化模塊、預(yù)警與報(bào)警模塊、AIS數(shù)據(jù)發(fā)送模塊、報(bào)表管理模塊、歷史數(shù)據(jù)查詢模塊和用戶管理模塊。
系統(tǒng)中的AIS設(shè)備包括A類設(shè)備、B類設(shè)備和基站。系統(tǒng)通過(guò)RS-232串口/RJ-45網(wǎng)口接收AIS信息并進(jìn)行解碼。AIS消息的接收和解碼流程如圖3所示。
數(shù)據(jù)進(jìn)入串口緩沖區(qū)后,服務(wù)器對(duì)緩沖區(qū)數(shù)據(jù)進(jìn)行提取解析,解碼信息通過(guò)安全隊(duì)列送至服務(wù)器處理模塊進(jìn)行處理;當(dāng)有消息發(fā)送給目標(biāo)船舶時(shí),服務(wù)器處理模塊將短消息通過(guò)安全隊(duì)列發(fā)送給數(shù)據(jù)編碼線程進(jìn)行編碼,再通過(guò)串口將編碼數(shù)據(jù)進(jìn)行發(fā)送。
圖2 軟件結(jié)構(gòu)
圖3 數(shù)據(jù)采集/編解碼流程
數(shù)據(jù)采集模塊會(huì)根據(jù)系統(tǒng)連接AIS設(shè)備的數(shù)量設(shè)置線程數(shù),每個(gè)AIS設(shè)備設(shè)一個(gè)獨(dú)立線程,并通過(guò)相應(yīng)的串口將數(shù)據(jù)發(fā)送至服務(wù)器,在服務(wù)器收發(fā)控制層中進(jìn)行與處理。
系統(tǒng)的信息處理主要包括AIS解碼、AIS編碼、基于UDP協(xié)議的數(shù)據(jù)發(fā)送。
(1)AIS解碼
本系統(tǒng)嚴(yán)格按照ITU-1371[4]標(biāo)準(zhǔn)的規(guī)定進(jìn)行AIS解碼,對(duì)于包含多條AIVDM的信息(如5號(hào)報(bào)文),系統(tǒng)將對(duì)其語(yǔ)句信號(hào)和連續(xù)消息標(biāo)識(shí)進(jìn)行識(shí)別,將同一組的多條消息進(jìn)行自動(dòng)整合再進(jìn)行解碼。
(2)AIS編碼
本系統(tǒng)對(duì)AIS設(shè)備進(jìn)行二次開(kāi)發(fā),使得其可以接受上位機(jī)的短消息發(fā)送指令,具備向海域船舶自動(dòng)發(fā)送短消息功能。本文自主設(shè)計(jì)了一套AIS編碼技術(shù),用于短消息指令編碼和傳輸,其格式為:
$XNMSG,短信 ID,九位碼,短信類型,語(yǔ)句內(nèi)容*校驗(yàn)碼
短消息ID:使用三位數(shù)字代表所發(fā)消息ID
短消息類型:如表2所示。
表2 短消息類型
校驗(yàn)碼:取$和*之間的字符串異或校驗(yàn),為兩位16進(jìn)制數(shù)。
(3)基于UDP協(xié)議的數(shù)據(jù)收發(fā)
系統(tǒng)對(duì)客戶端與服務(wù)器端之間數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求很高,考慮到UDP協(xié)議的無(wú)連接、高速率、占用資源少等一系列優(yōu)點(diǎn),系統(tǒng)采用UDP協(xié)議而不是TCP協(xié)議進(jìn)行數(shù)據(jù)發(fā)送,但是UDP存在丟包的問(wèn)題,不能保證傳輸數(shù)據(jù)的正確性,為此,系統(tǒng)在發(fā)送端的UDP數(shù)據(jù)尾部加上校驗(yàn)碼進(jìn)行傳輸數(shù)據(jù)校驗(yàn)。
系統(tǒng)中的線程主要分為服務(wù)器主線程、數(shù)據(jù)采集/處理線程、UDP數(shù)據(jù)發(fā)送線程和UDP數(shù)據(jù)接收線程。各線程之間相互獨(dú)立,互不影響。
服務(wù)器主線程主要負(fù)責(zé)控制用戶界面的控件、加載INI配置文件和開(kāi)設(shè)其它線程的工作。
數(shù)據(jù)采集/處理線程的數(shù)量與串口數(shù)(AIS設(shè)備數(shù))一致。系統(tǒng)會(huì)根據(jù)如表3所示的INI配置文件,設(shè)置AIS設(shè)備的數(shù)目并自動(dòng)分配串口數(shù)據(jù)處理線程,每個(gè)串口數(shù)據(jù)處理線程分配兩個(gè)線程安全隊(duì)列,分別用于數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。
表3 雙機(jī)雙客戶端系統(tǒng)INI配置文件
系統(tǒng)各線程間采用線程安全隊(duì)列進(jìn)行數(shù)據(jù)傳輸,如圖4所示,在程序中設(shè)置一個(gè)輪詢,服務(wù)器端發(fā)送數(shù)據(jù)時(shí),各個(gè)串口數(shù)據(jù)處理線程的數(shù)據(jù)發(fā)送安全隊(duì)列將依次向UDP數(shù)據(jù)發(fā)送線程發(fā)送數(shù)據(jù),不斷循環(huán)。避免使用線程鎖時(shí),線程數(shù)量過(guò)多導(dǎo)致的數(shù)據(jù)傳輸效率低下和死鎖的情況。服務(wù)器接受數(shù)據(jù)時(shí),UDP數(shù)據(jù)接收線程將依次向各個(gè)串口數(shù)據(jù)處理線程的數(shù)據(jù)接受安全隊(duì)列發(fā)送消息,無(wú)需等待,提高了系統(tǒng)的運(yùn)行速度。
圖4 多線程間數(shù)據(jù)傳輸流程
(1)MapWinGIS
MapWinGIS是一個(gè)功能強(qiáng)大的開(kāi)源GIS平臺(tái),是為小中型GIS應(yīng)用開(kāi)發(fā)的免費(fèi)開(kāi)源的組件及桌面的集合。本系統(tǒng)使用MapWinGIS實(shí)現(xiàn)GIS可視化。GIS可視化由如圖5所示的四個(gè)圖層繪制而成,分別為:海圖圖層、海纜圖層、觀測(cè)警戒圖層和AIS船舶圖層。不同的圖層全部設(shè)置在同一坐標(biāo)系(WGS1984坐標(biāo)系)下,使得不同圖層的各個(gè)位置在同一個(gè)坐標(biāo)系下疊加并對(duì)應(yīng)起來(lái)。
圖5 系統(tǒng)海圖圖層
①海圖圖層
海圖圖層主要功能是為整個(gè)系統(tǒng)提供海纜所在海域的地理信息,并將相關(guān)海域以地圖的方式繪制出來(lái)。
傳統(tǒng)地圖文件往往只使用一份地圖文件來(lái)表示整個(gè)地圖,這樣會(huì)導(dǎo)致若地圖文件太小則分辨率低;若地圖文件過(guò)大系統(tǒng)運(yùn)行速度降低。
本系統(tǒng)將多張不同文件格式、不同分辨率的文件疊加在一起,組成一份新的地圖文件,既解決了地圖分辨率的問(wèn)題,又提高了系統(tǒng)的運(yùn)行速率。
海圖圖層是整個(gè)系統(tǒng)表示層的基礎(chǔ),海纜圖層、觀測(cè)警戒圖層和AIS圖層均繪制在該圖層上面。
②海纜圖層
海纜圖層是覆蓋在海圖圖層上的第一張圖層,在該圖層中要顯示海纜的起點(diǎn)、所經(jīng)過(guò)的坐標(biāo)和終點(diǎn),繪制出海纜的形狀。
③觀測(cè)警戒圖層
觀測(cè)警戒圖層包括觀測(cè)區(qū)和警區(qū)域。警戒區(qū)在觀測(cè)區(qū)內(nèi)部,其區(qū)域形狀均為封閉的不規(guī)則多邊形。
繪制警戒區(qū)時(shí),先確定警戒區(qū)所有頂點(diǎn)的經(jīng)緯度坐標(biāo),將它們固定在繪制層上,再將這些頂點(diǎn)依次連接起來(lái)。觀測(cè)區(qū)的設(shè)置與警戒區(qū)相同,此處不再贅述。
④AIS船舶圖層的繪制
AIS圖層按照坐標(biāo)信息將船舶顯示到繪制層上,根據(jù)船舶的坐標(biāo)和實(shí)際航向進(jìn)行貼圖,將船舶的形狀繪制在坐標(biāo)上。該圖層上的AIS船舶信息會(huì)根據(jù)數(shù)據(jù)庫(kù)的刷新進(jìn)行實(shí)時(shí)更新。
用戶瀏覽GIS表示層時(shí),可以使用GIS地圖的所有功能,包括對(duì)地圖的放大、縮小、平移,對(duì)一些關(guān)鍵位置的標(biāo)記、測(cè)距,通過(guò)坐標(biāo)定位等功能,還能單擊目標(biāo)船舶查看船舶具體信息,繪制船舶歷史航跡,這使得表示層功能更加強(qiáng)大。
(2)警戒區(qū)內(nèi)船舶判斷算法
船舶警戒區(qū)為閉合區(qū)域,將其抽象為具有N個(gè)頂點(diǎn)(Xi,Yi)(i=0…N-1)的多邊形。
設(shè)一船舶所在點(diǎn)為(Xp,Yp),向右作一條平行于X軸的射線,通過(guò)該射線與該多邊形的交點(diǎn)數(shù)量(記作C)判斷(Xp,Yp)是否在閉合區(qū)域內(nèi)。判斷方法如下:
若(Xp,Yp)在多邊形的邊線或頂點(diǎn)上,則船舶在警戒區(qū)域;若不在,定義C%2為交點(diǎn)數(shù)量C對(duì)2取余數(shù),進(jìn)而利用余數(shù)的奇偶性進(jìn)行判斷:
如圖6所示,第一條射線與多邊形交點(diǎn)為2,點(diǎn)在警戒區(qū)外;第二條射線與多邊形交點(diǎn)為4,點(diǎn)在警戒區(qū)外;第三條射線與多邊形交點(diǎn)為3,點(diǎn)在警戒區(qū)內(nèi)。
圖6 船舶位置模擬圖
(1)PostGIS地理信息數(shù)據(jù)庫(kù)
PostGIS是一種支持分布式網(wǎng)絡(luò)訪問(wèn)的對(duì)象-關(guān)系型開(kāi)源空間信息數(shù)據(jù)庫(kù)。本系統(tǒng)選用PostGIS地理信息數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)電子海圖地理數(shù)據(jù)信息和警戒區(qū)空間數(shù)據(jù)信息。
由于系統(tǒng)采用多客戶端設(shè)計(jì),客戶端只能通過(guò)網(wǎng)絡(luò)交互的方法對(duì)服務(wù)器端進(jìn)行數(shù)據(jù)訪問(wèn),無(wú)法對(duì)服務(wù)器端本地文件進(jìn)行訪問(wèn)。普通地圖文件以shape格式進(jìn)行本地存儲(chǔ),客戶端無(wú)法對(duì)其進(jìn)行有效讀取。選用PostGIS地理信息數(shù)據(jù)庫(kù)可以有效解決這一問(wèn)題,對(duì)電子海圖地理數(shù)據(jù)信息進(jìn)行存儲(chǔ),使得服務(wù)器和客戶端都能夠訪問(wèn)當(dāng)前的地理信息數(shù)據(jù),進(jìn)行信息讀取。
系統(tǒng)設(shè)置兩級(jí)權(quán)限,分別為普通員工和管理員。只有管理員擁有權(quán)限對(duì)電子海圖數(shù)據(jù)信息和警戒區(qū)位置、大小信息進(jìn)行修改。
(2)基于分布式數(shù)據(jù)庫(kù)(MySQL)的數(shù)據(jù)發(fā)布訂閱機(jī)制
本系統(tǒng)所有的船舶數(shù)據(jù)經(jīng)解碼后將統(tǒng)一存放到在服務(wù)器端的MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)表中。服務(wù)器端數(shù)據(jù)處理流程如圖7所示,功能包括船舶數(shù)據(jù)更新和船舶冗余數(shù)據(jù)刪除。
①船舶數(shù)據(jù)更新
為優(yōu)化系統(tǒng)設(shè)計(jì),減輕數(shù)據(jù)表的訪問(wèn)負(fù)擔(dān),數(shù)據(jù)庫(kù)中采用數(shù)據(jù)表與日志表相結(jié)合的方式來(lái)處理數(shù)據(jù)。數(shù)據(jù)庫(kù)船舶數(shù)據(jù)周期性進(jìn)行刷新,每5秒刷新一次,刷新完成后,數(shù)據(jù)庫(kù)將刷新時(shí)的時(shí)間信息存入日志表中,客戶端不斷訪問(wèn)日志表。日志表更新后,客戶端訪問(wèn)數(shù)據(jù)表,將船舶數(shù)據(jù)和PostGIS中的地理數(shù)據(jù)銜接客戶端,在電子海圖上顯示出各個(gè)船舶當(dāng)前的位置并將其符號(hào)化。
②船舶冗余數(shù)據(jù)刪除
船舶數(shù)據(jù)必須具有一定的時(shí)效性,在線程中,系統(tǒng)會(huì)啟動(dòng)定時(shí)器,定時(shí)遍歷船舶信息,將獲取到的船舶信息的時(shí)間與服務(wù)器時(shí)間進(jìn)行對(duì)比,刪除數(shù)據(jù)庫(kù)中不具有時(shí)效性的船舶進(jìn)行船舶歷史航跡繪制。
系統(tǒng)客戶端進(jìn)行歷史航跡繪制時(shí),會(huì)從MySQL數(shù)據(jù)庫(kù)中調(diào)用船舶歷史信息,在電子海圖上進(jìn)行模擬航跡顯示[5-6]。
圖7 數(shù)據(jù)流處理流程圖
系統(tǒng)通過(guò)測(cè)試軟件進(jìn)行數(shù)據(jù)源模擬實(shí)驗(yàn)。從現(xiàn)場(chǎng)采集到的AIS報(bào)文數(shù)據(jù)中提取樣本,將其作為數(shù)據(jù)源進(jìn)行壓力測(cè)試。設(shè)置模擬數(shù)據(jù)源船舶數(shù)量、警戒區(qū)同時(shí)報(bào)警船舶數(shù)量樣本均為系統(tǒng)指標(biāo)的1.5倍,計(jì)算解析出的船舶數(shù)量與樣本數(shù)量的比值,判斷其是否達(dá)到系統(tǒng)指標(biāo)。
經(jīng)過(guò)多次測(cè)試,實(shí)驗(yàn)結(jié)果如表4所示,各項(xiàng)數(shù)據(jù)均達(dá)到系統(tǒng)技術(shù)指標(biāo)要求。
表4 實(shí)驗(yàn)結(jié)果
運(yùn)用上述思路設(shè)計(jì)的海上風(fēng)電場(chǎng)船舶監(jiān)控系統(tǒng)軟件,成功彌補(bǔ)了海上風(fēng)電場(chǎng)周邊海域自動(dòng)監(jiān)控領(lǐng)域的行業(yè)空白。將模塊化設(shè)計(jì)和多線程技術(shù)運(yùn)用于該軟件設(shè)計(jì),不但提高了系統(tǒng)的擴(kuò)展性,而且提高了系統(tǒng)的執(zhí)行效率。該軟件已成功應(yīng)用于江蘇龍?jiān)词Y家沙海上風(fēng)電項(xiàng)目,能夠很好地滿足監(jiān)控要求。