黃金獻(xiàn), 胡 義, 薄志斌
(武漢理工大學(xué) 能源與動(dòng)力工程學(xué)院, 武漢 430063)
貨物配載是船舶貨運(yùn)中重要的一個(gè)環(huán)節(jié),若配載不當(dāng),會(huì)造成船舶結(jié)構(gòu)重大的損壞,從而發(fā)生沉船等事故。因此《鋼質(zhì)海船入級(jí)規(guī)范》規(guī)定,船長(zhǎng)為150 m及以上的散貨船、礦砂船和兼用船要求配備經(jīng)認(rèn)可的裝載手冊(cè)和裝載儀。[1]目前,國(guó)內(nèi)外的裝載儀大多采用的是單機(jī)模式,如文獻(xiàn)[2]中利用vb.net編程語(yǔ)言設(shè)計(jì)單機(jī)版的裝載儀,只是通過(guò)計(jì)算機(jī)將人工手算轉(zhuǎn)化成計(jì)算機(jī)程序化計(jì)算。單機(jī)版的裝載儀,船員只能在船上操作,公司無(wú)法實(shí)時(shí)監(jiān)測(cè)船舶裝載狀態(tài)。文獻(xiàn)[3]提到在裝載儀中加入船體三維可視化功能,但國(guó)內(nèi)裝載儀多數(shù)沒(méi)有三維可視化功能。基于這兩點(diǎn),采用Sublime Text 3軟件設(shè)計(jì)裝載在線計(jì)算的頁(yè)面,在此基礎(chǔ)上使用Eclipse開(kāi)源軟件和MySQL 5.5免費(fèi)版數(shù)據(jù)庫(kù)開(kāi)發(fā)后臺(tái)以及在頁(yè)面上實(shí)現(xiàn)船體三維可視化旋轉(zhuǎn)功能,實(shí)現(xiàn)船舶與公司共享配載數(shù)據(jù),聯(lián)動(dòng)監(jiān)測(cè)與管理。最終將物聯(lián)網(wǎng)和裝載計(jì)算機(jī)進(jìn)行融合,基于數(shù)據(jù)庫(kù)技術(shù)和網(wǎng)絡(luò)技術(shù),將船舶貨物的裝載管理和公司的物流管理緊密聯(lián)系起來(lái),推動(dòng)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整和升級(jí)。
本軟件的功能組成見(jiàn)圖1。軟件包含完整穩(wěn)性計(jì)算系統(tǒng)、破艙穩(wěn)性計(jì)算系統(tǒng)、強(qiáng)度計(jì)算系統(tǒng)、貨物重量計(jì)算系統(tǒng)、輔助工具系統(tǒng)等5個(gè)子計(jì)算系統(tǒng)。由于船舶在海上航行信號(hào)不好和流量費(fèi)用較貴等原因,軟件設(shè)計(jì)了以下兩種模式:
1) 在網(wǎng)絡(luò)條件允許的情況下,船員可在線進(jìn)行裝載計(jì)算,并將配載結(jié)果和計(jì)算結(jié)果保存到數(shù)據(jù)庫(kù)中,岸上人員可登陸直接查看結(jié)果。
2) 在網(wǎng)絡(luò)條件差的情況下,船員可在本地進(jìn)行裝載計(jì)算,只將配載文件保存到數(shù)據(jù)庫(kù)中。岸上人員可通過(guò)下載配載文件進(jìn)行本地計(jì)算查看結(jié)果。

圖1 軟件功能組成
在登錄界面,用戶點(diǎn)擊注冊(cè)會(huì)跳轉(zhuǎn)到注冊(cè)頁(yè)面,其中在注冊(cè)頁(yè)面通過(guò)jQuery技術(shù)設(shè)置表單校驗(yàn),如密碼前后不一致會(huì)出現(xiàn)提示,登錄頁(yè)面也具有相似的校驗(yàn)功能。
為使軟件人性化,設(shè)置中英文頁(yè)面的切換,方便不同的用戶使用。用戶登錄英文界面見(jiàn)圖2。

圖2 用戶登錄英文界面
頁(yè)面信息輸入包含航次信息輸入和裝載信息輸入。為使頁(yè)面簡(jiǎn)潔,側(cè)邊導(dǎo)航欄在默認(rèn)情況下不顯示,用戶點(diǎn)擊時(shí)就會(huì)彈出,用戶可在船舶航次信息界面輸入船舶基本信息、航行水域選擇、配載者的姓名與職位、配載日期以及裝載情況說(shuō)明等。裝載界面可輸入壓載水艙、燃油艙等液艙信息和食品、備品等非液體配載信息。各液艙輸入裝載液體的質(zhì)量、容積或液位高度后,軟件對(duì)艙容數(shù)據(jù)進(jìn)行插值計(jì)算得到對(duì)應(yīng)的其他艙容信息數(shù)據(jù)。此外,當(dāng)用戶打開(kāi)一個(gè)已有文件時(shí),輸入頁(yè)面就變成顯示頁(yè)面,可核實(shí)文件信息顯示是否正確無(wú)誤。
根據(jù)配載情況計(jì)算浮態(tài)和完整穩(wěn)性。在頁(yè)面上顯示吃水、橫傾角、橫搖周期、重心位置、自由液面修正后的初穩(wěn)心高度、復(fù)原力臂面積。對(duì)穩(wěn)性橫交數(shù)據(jù)進(jìn)行插值求解并計(jì)算穩(wěn)性衡準(zhǔn)參數(shù),在頁(yè)面顯示穩(wěn)性曲線和結(jié)果,判斷結(jié)果是否在許用衡準(zhǔn)范圍內(nèi),若不在則自動(dòng)報(bào)警提示用戶調(diào)整載況。其計(jì)算流程見(jiàn)圖3。圖3中:Δ為排水量,t;Zg為船舶重心距基線高,m;Xg為重心縱向坐標(biāo),m;Zm為船舶穩(wěn)心距基線高,m;Xb為浮心縱向坐標(biāo),m;Xf為漂心距舯部距離,m;TPC為每厘米吃水噸數(shù),t/cm;MTC為每厘米縱傾力矩,t-m/cm;dM為平均吃水,m;hGM為初穩(wěn)心高度,m;KN為形狀穩(wěn)性力臂,m;GZ為靜穩(wěn)性力臂,m。

圖3 完整穩(wěn)性計(jì)算流程圖
強(qiáng)度計(jì)算系統(tǒng)對(duì)強(qiáng)度進(jìn)行計(jì)算,顯示靜水剪力和彎矩以及最大剪力和彎矩的數(shù)值及其對(duì)應(yīng)的位置;對(duì)強(qiáng)度進(jìn)行校核,判斷是否滿足要求,不滿足就提示用戶調(diào)整載況,并再次計(jì)算校核直到滿足為止。在頁(yè)面分別繪制剪力和彎矩曲線。強(qiáng)度計(jì)算流程見(jiàn)圖4。

圖4 強(qiáng)度計(jì)算流程圖
為使用戶便于操作,有較好的容錯(cuò)性,系統(tǒng)設(shè)置一系列提示和報(bào)警功能。如:在頁(yè)面退出時(shí)會(huì)提示是否已經(jīng)保存;若配載不在給定范圍內(nèi)會(huì)提示重新配載。系統(tǒng)還設(shè)置了通過(guò)插值來(lái)查詢靜水力曲線、邦金曲線、艙容曲線、進(jìn)水角曲線等功能。
船舶裝載計(jì)算涉及大量數(shù)據(jù)的調(diào)用,且通過(guò)數(shù)據(jù)庫(kù)可實(shí)現(xiàn)公司、船舶共享數(shù)據(jù)的功能,因此對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)顯得更為重要。數(shù)據(jù)存儲(chǔ)主要分為3部分。
1) 固定不變的船舶基本信息和各艙室的數(shù)據(jù)。
2) 變化的數(shù)據(jù),如在不同工況下的配載數(shù)據(jù)、液位監(jiān)測(cè)數(shù)據(jù)。
3) 船舶貨運(yùn)數(shù)據(jù),為船舶管理提供數(shù)據(jù)接口。
本軟件的網(wǎng)站頁(yè)面開(kāi)發(fā)主要用到超文本標(biāo)記語(yǔ)言(HyperText Markup Language,HTML)、層疊樣式表(Cascading Style Sheets,CSS)、商業(yè)級(jí)數(shù)據(jù)圖表(Enterprise Charts,Echarts)、JavaScript、jQuery等技術(shù)。[4]
1) HTML具有簡(jiǎn)易性、可拓展性、跨平臺(tái)性、通用性等優(yōu)點(diǎn),HTML中的超文本是指頁(yè)面可包含圖片、鏈接等非文字內(nèi)容,標(biāo)記就是使用標(biāo)簽的方法將所需的內(nèi)容包括起來(lái)。HTML5是HTML第5次重大修改,其包含HTML、CSS、JavaScript在內(nèi)的一套技術(shù)組合,具備較好的跨瀏覽器性能,代碼更簡(jiǎn)潔且還增加一些應(yīng)用程序編程接口(Application Programming Interface,API)的支持如Canvas繪圖功能。
2) CSS主要用來(lái)設(shè)置HTML頁(yè)面中的文本內(nèi)容,圖片的外形以及版面的布局等外觀顯示樣式。JavaScript是一種腳本語(yǔ)言,由基礎(chǔ)規(guī)范、文檔對(duì)象(Document Object Model,DOM)、瀏覽器對(duì)象模型(Browser Object Model, BOM)組成,通常被嵌入到HTML頁(yè)面增加交互性。其主要應(yīng)用有嵌入動(dòng)態(tài)文本于HTML頁(yè)面、對(duì)瀏覽器事件做出響應(yīng)、讀寫(xiě)HTML元素、驗(yàn)證提交的數(shù)據(jù)等。
3) Echarts由百度公司研發(fā)的,基于Canvas純Javascript圖表庫(kù),能提供直觀、生動(dòng)、可交互、可個(gè)性化定制的數(shù)據(jù)統(tǒng)計(jì)圖表。[5]異步JavaScript和XML(Asynchronous Javascript And XML,AJAX)是一種用來(lái)在Web瀏覽器與Web服務(wù)器之間來(lái)發(fā)送和接收數(shù)據(jù)的技術(shù)。在軟件中利用AJAX異步請(qǐng)求,將頁(yè)面的請(qǐng)求傳遞給后臺(tái),再由后臺(tái)操作數(shù)據(jù)庫(kù),將相應(yīng)的數(shù)據(jù)取到并轉(zhuǎn)化為JS對(duì)象簡(jiǎn)譜(JavaScript Object Notation,JSON)格式轉(zhuǎn)發(fā)給頁(yè)面,頁(yè)面根據(jù)得到的數(shù)據(jù)插入到Echarts中。在頁(yè)面中呈現(xiàn)可交互的穩(wěn)性曲線、剪力和彎矩曲線圖。某一化學(xué)品船滿載到港工況下的完整穩(wěn)性結(jié)果見(jiàn)圖5,該工況的強(qiáng)度結(jié)果見(jiàn)圖6。

圖5 化學(xué)品船滿載到港工況完整穩(wěn)性結(jié)果圖

圖6 化學(xué)品船滿載到港工況強(qiáng)度結(jié)果圖
Web圖形庫(kù)(Web Graphics Library,WebGL)是一個(gè)免費(fèi)、跨平臺(tái)的JavaScript API,同時(shí)也是一種3D繪圖標(biāo)準(zhǔn)[6],其將JavaScript和嵌入式系統(tǒng)三維圖形庫(kù)(OpenGL for Embedded Systems,OpenGL ES)2.0結(jié)合在一起。相對(duì)于其他WEB三維顯示技術(shù),WebGL不需要插件的支持,免去了開(kāi)發(fā)網(wǎng)頁(yè)專用渲染插件的麻煩。WebGL可通過(guò)HTML5新特性之一的Canvas標(biāo)簽來(lái)實(shí)現(xiàn)。也就是HTML5中的Canvas標(biāo)簽就是承載WebGL的容器。WebGL支持OBJ文件格式[7],但Web瀏覽器不支持原始OBJ格式,需要將OBJ格式轉(zhuǎn)換成與語(yǔ)言無(wú)關(guān)的數(shù)據(jù)交換格式JSON格式,頁(yè)面中JavaScript能直接讀取JSON格式的數(shù)據(jù)。這為在頁(yè)面上船體三維化顯示提供一個(gè)可實(shí)現(xiàn)思路。WebGL直接通過(guò)電腦的圖形處理器(Graphics Processing Unit,GPU)來(lái)創(chuàng)建顯示三維圖形,其編程過(guò)程復(fù)雜且容易出錯(cuò),故本軟件使用WebGL的JavaScript 3D庫(kù)Three.js,簡(jiǎn)化直接使用WebGL開(kāi)發(fā)三維顯示技術(shù)的復(fù)雜性,降低學(xué)習(xí)成本。[8]其主要步驟如下:
1) 使用SolidWorks、Pro/E等軟件對(duì)船體進(jìn)行三維數(shù)字化建模,并將其保存為OBJ格式。
2) 將OBJ格式轉(zhuǎn)化為JSON格式。
3) 在頁(yè)面中加載船體三維模型,設(shè)置three.js中渲染器、場(chǎng)景、照相機(jī)、光源等一系列參數(shù),實(shí)現(xiàn)船體三維模型在頁(yè)面上真實(shí)絢麗的3D效果。
4) 最后利用OrbitControls軌道控制器進(jìn)行相應(yīng)的參數(shù)設(shè)置,達(dá)到通過(guò)鼠標(biāo)來(lái)操作實(shí)現(xiàn)船體三維模型的平移、旋轉(zhuǎn)等功能。船舶三維顯示見(jiàn)圖7。

圖7 船舶三維顯示圖
船舶裝載量的測(cè)量是船舶裝載儀的重要組成部分。液艙液位在線監(jiān)測(cè)能實(shí)時(shí)讀取液艙液位高度,通過(guò)計(jì)算得到液艙裝載液體的重量和重心位置,實(shí)時(shí)計(jì)算船舶的浮態(tài)、穩(wěn)性、強(qiáng)度等并上傳到服務(wù)器的數(shù)據(jù)庫(kù),方便公司隨時(shí)登錄查看船舶狀態(tài),達(dá)到實(shí)時(shí)監(jiān)控的目的。其主要原理是液艙液位在線監(jiān)測(cè)通過(guò)傳感器的變送器將液艙液位變化轉(zhuǎn)化成電信號(hào)送到采集控制器,控制器和顯示單元之間通信,將采集的數(shù)據(jù)實(shí)時(shí)傳給上位機(jī)和軟件,對(duì)傳感器的數(shù)據(jù)進(jìn)行處理和計(jì)算得到液艙裝載液體的重量和重心位置,最終計(jì)算船舶的浮態(tài)、穩(wěn)性和強(qiáng)度等。
為防止通信數(shù)據(jù)出現(xiàn)不可預(yù)知的錯(cuò)誤,需要對(duì)傳輸數(shù)據(jù)的完整性和正確性進(jìn)行校驗(yàn)。軟件采用循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy Check,CRC)算法進(jìn)行數(shù)據(jù)校驗(yàn)。CRC[9]的基本思想是在數(shù)據(jù)后面加一組與數(shù)據(jù)有關(guān)的冗余碼,利用除數(shù)和余數(shù)原理來(lái)進(jìn)行數(shù)據(jù)的錯(cuò)誤校驗(yàn)。1個(gè)由二進(jìn)制組成的代碼都可與只含有0、1兩個(gè)系數(shù)的多項(xiàng)式建立聯(lián)系。k位信息位可對(duì)應(yīng)于1個(gè)(k-1)次多項(xiàng)式M(x),r位冗余位對(duì)應(yīng)1個(gè)(r-1)次多項(xiàng)式R(x)。CRC碼由k位信息位和r位冗余位組成即n=k+r位,其對(duì)應(yīng)的多項(xiàng)式為
F(x)=xrM(x)+R(x)
(1)
發(fā)送端將計(jì)算出來(lái)的CRC值隨數(shù)據(jù)一起發(fā)給接收端,接收端重新計(jì)算CRC值并與接收的CRC值比較,如兩個(gè)值不一樣,則表示數(shù)據(jù)不完整或者出現(xiàn)錯(cuò)誤,該組數(shù)據(jù)應(yīng)該舍棄。如果兩者比較相同,說(shuō)明數(shù)據(jù)傳輸過(guò)程中沒(méi)有出錯(cuò),可使用。
計(jì)算剪力和彎矩時(shí),空船重量直接查看裝載手冊(cè)中重量分布,貨艙和油水艙等可變重量按站位進(jìn)行分布時(shí),假定重量為梯形分布,求某局部重量在各理論站上的重量分布[2]如下:
設(shè)某局部重量為P(i),其重心距舯部距離為xg(i),分布范圍的前端坐標(biāo)為xf(i),后端坐標(biāo)為xa(i),該項(xiàng)重量分布的長(zhǎng)度范圍為l(i)=xf(i)-xa(i)。一般xa(i)、xf(i)都坐落在肋骨線上。可變重量分布計(jì)算見(jiàn)圖8。

圖8 可變重量分布計(jì)算
由靜力等效原理可知,前、后端重量分布為
(2)
(3)
式(2)和式(3)中:a(i)=xg(i)-xa(i),前、后端間各站位處的重量分布采用線性插值求得。
在縱傾值較大時(shí),通過(guò)靜水力曲線插值來(lái)計(jì)算得到船舶的艏艉吃水誤差較大,需進(jìn)行浮態(tài)的修正。由邦戎曲線可計(jì)算出浮力分布,其求解過(guò)程為[10]:由船舶的艏吃水dF和艉吃水dA,可在邦戎圖上作一條縱傾水線W1L1;根據(jù)縱傾水線與各站號(hào)的交點(diǎn)得到吃水深度,再由吃水深度查邦戎曲線圖可得到各站橫剖面積As,i和靜矩My,i;Δx為站間距;各站號(hào)的浮力bi和總浮力B(排水量)由式(4)和式(5)計(jì)算可得
(4)
(5)
記船舶總重量為W,由給定裝載的排水量查靜水力曲線可得dM、Xb、Xf、MTC。如平衡計(jì)算[11]需滿足:
(6)
(7)
此時(shí)則認(rèn)為船舶處于平衡狀態(tài),如不滿足則要進(jìn)行縱傾調(diào)整,直到滿足。縱傾調(diào)整后艏艉吃水第一、第二次近似值為

(8)

(9)
式(8)和式(9)中:B1為由縱傾調(diào)整后第一次艏艉吃水近似值計(jì)算得到的浮力;LBP為艏艉柱間長(zhǎng),m。
確定船舶在波浪下的平衡位置有逐步近似法和直接法兩種方法。本軟件適用于運(yùn)輸船舶,采用直接法[12]求得船舶實(shí)際平衡位置,其過(guò)程為:根據(jù)中拱、中垂兩種情況分別按邦金曲線比例繪制坦谷波曲線;以靜水線為波軸線,覆蓋上坦谷波,量取波面與靜水線交點(diǎn)的剖面面積;在靜水線上方(中垂)或下方(中拱)ε(一般取1~2 m)遠(yuǎn)處作波軸線,放上坦谷波,量取各理論站的剖面面積;求出實(shí)際平衡位置與理論站交點(diǎn)的剖面面積;根據(jù)平衡條件求出船舶在波浪尾垂線處較靜水下沉(上移)值和縱傾角度變化值;得到船舶靜置在波浪上的實(shí)際位置;利用邦戎曲線量取各站浸水面積,通過(guò)式(10)計(jì)算得到浮力分布變化Δb(x)為
Δb(x)=ρgΔ(Fw(x)-Fs(x))
(10)
式(10)中:ρ為水的密度,kg/m3;g為重力加速度,N/kg;FW(x)為波浪下各站浸水面積,m2;Fs(x)為靜水下各站浸水面積,m2。
船舶靜置于波浪上和靜水中,水線面會(huì)發(fā)生改變,進(jìn)而引起浮力沿船長(zhǎng)重新分布。波浪附加剪力Nw(x)和彎矩Mw(x)的計(jì)算為

(11)
(12)
在Sublime Text3軟件上使用HTML技術(shù)搭建了整體頁(yè)面的布局;CSS對(duì)其中的內(nèi)容進(jìn)行修飾、美化;運(yùn)用JavaScript技術(shù)對(duì)頁(yè)面添加各種動(dòng)態(tài)的功能,驗(yàn)證表單數(shù)據(jù)的完整性,對(duì)瀏覽器事件做出響應(yīng),完成裝載儀在線計(jì)算的前臺(tái)頁(yè)面開(kāi)發(fā)。最后結(jié)合Eclipse軟件編寫(xiě)代碼將數(shù)據(jù)存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)。某船航次信息輸入界面見(jiàn)圖9。

圖9 航次信息輸入界面
本軟件設(shè)計(jì)的目的是實(shí)現(xiàn)船舶-公司共享配載數(shù)據(jù),實(shí)時(shí)在線監(jiān)控船舶的狀態(tài)。本文分析船舶裝載儀設(shè)計(jì)所用到的理論知識(shí),運(yùn)用Web前端技術(shù)設(shè)計(jì)網(wǎng)站的頁(yè)面,并在頁(yè)面上添加了各個(gè)功能選項(xiàng)實(shí)現(xiàn)總體布局,分析在頁(yè)面使用WebGL三維技術(shù)的可行性,實(shí)現(xiàn)船體三維模型在頁(yè)面顯示,將抽象的數(shù)據(jù)變成三維可視化,直觀的體現(xiàn)船舶裝載情況、水線面等,增加用戶的體驗(yàn)感;同時(shí)軟件還具有液艙液位在線監(jiān)測(cè)功能,實(shí)時(shí)讀取液艙液位高度,準(zhǔn)確計(jì)算船舶的浮態(tài)、穩(wěn)性和強(qiáng)度,通過(guò)網(wǎng)絡(luò)傳輸,實(shí)現(xiàn)公司對(duì)船舶裝載數(shù)據(jù)的監(jiān)測(cè)和管理。