,,,,,,,
(大連海事大學(xué) 交通運輸裝備與海洋工程學(xué)院,遼寧 大連 116026)
2001年荷蘭MAMMOET公司和SMIT公司聯(lián)手合作使用8條工程船打撈俄羅斯“庫爾斯克”號核潛艇,在打撈過程中,每根提升鋼纜的實時拉力、總提升力、沉船水下深度、姿態(tài),以及駁船的姿態(tài)、水下視頻信號等數(shù)據(jù)都集中顯示在監(jiān)測平臺上,實現(xiàn)了打撈過程的集成監(jiān)測[1- 2]。國內(nèi)2007年在“南海一號”古沉船打撈過程中,利用姿態(tài)傳感器和水下超短基線定位系統(tǒng)進(jìn)行沉船的定位和姿態(tài)監(jiān)測[3];2008年在“暢通”輪打撈過程中,利用多種傳感器采集每根纜繩的提升力、提升速度、提升位移信息,并實時顯示在人機界面上[4],實現(xiàn)了對打撈過程中的部分信息監(jiān)測,但沒有形成有效的集成監(jiān)測平臺。
為了全面獲取打撈監(jiān)測數(shù)據(jù),及時掌握沉船動態(tài),提高決策效率,設(shè)計沉船打撈集成監(jiān)測及虛擬仿真系統(tǒng)。將多種信息(傳感器數(shù)據(jù)及網(wǎng)絡(luò)氣象與海洋環(huán)境數(shù)據(jù))進(jìn)行匯總,實現(xiàn)多種數(shù)據(jù)的集成顯示,建立沉船打撈虛擬仿真平臺,通過傳感器獲取的數(shù)據(jù)實時驅(qū)動虛擬模型,逼真再現(xiàn)打撈過程,實現(xiàn)打撈過程的實時可視化。
打撈工程通常采用浮力打撈與機械打撈相結(jié)合的方法,即利用外置氣囊、浮筒、艙室充氣等方式增加沉船浮力,通過機械設(shè)備提升圍繞沉船的千斤使其脫離海底[5]。在沉船起浮過程中,需要監(jiān)測沉船與打撈工程船的位姿、每根千斤的受力情況,以及浮力的變化。
在沉船打撈過程中,潛水員需要多次進(jìn)行水下探摸工作,根據(jù)工程進(jìn)展,進(jìn)行水下切割,開溝、船底穿千斤等輔助工作[6]。為保障潛水員在水下安全工作,水流速度不能超過0.6 m/s。海水流速變化與潮汐密切相關(guān),因此需要提前了解工作海區(qū)的潮汐時間,時刻監(jiān)測海水流速變化。
沉船打撈現(xiàn)場的氣象與海洋環(huán)境對打撈作業(yè)的安全進(jìn)行具有至關(guān)重要的作用,因此需要監(jiān)測工作海區(qū)的浪高、流速、天氣、風(fēng)向、能見度等信息。
在以往的數(shù)據(jù)實時傳輸技術(shù)中,socket方式是典型的C/S數(shù)據(jù)交互模式,服務(wù)器與客戶端之間根據(jù)約定的傳輸協(xié)議通過端口或IP地址進(jìn)行信息交互。這種傳輸方式安全性高,通用性強,支持.net架構(gòu)及java、python等環(huán)境。而兩個系統(tǒng)可以通過同一數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的查詢、添加、刪除等操作。這種數(shù)據(jù)傳輸方式交互更加簡單靈活,數(shù)據(jù)庫提供相關(guān)的數(shù)據(jù)接口。為實現(xiàn)虛擬仿真的實時可視化需求,本文通過在一個系統(tǒng)中集成socket方式與數(shù)據(jù)庫共享機制兩種方式,解決了數(shù)據(jù)采集的實時傳輸難題。
沉船打撈集成監(jiān)測及虛擬仿真系統(tǒng)總體設(shè)計方案如圖1所示,整套系統(tǒng)由3個部分組成:多通道數(shù)據(jù)采集系統(tǒng)、基于多傳感器的數(shù)據(jù)集成監(jiān)控系統(tǒng)和基于虛擬現(xiàn)實的沉船打撈可視化系統(tǒng)。
圖1 沉船打撈集成監(jiān)測及虛擬仿真系統(tǒng)總體方案圖
由于打撈監(jiān)測設(shè)備的數(shù)據(jù)采集與存儲方式不同,沒有統(tǒng)一的數(shù)據(jù)標(biāo)準(zhǔn)[7],因此,需要建立一套多通道數(shù)據(jù)采集系統(tǒng)來獲取沉船、打撈工程船、提升力,以及海洋環(huán)境氣象等信息。數(shù)據(jù)采集系統(tǒng)技術(shù)方案如圖2所示。本系統(tǒng)選用西門子S7-200 smart PLC作為接收介質(zhì),通過模數(shù)轉(zhuǎn)換與串口通信方式獲取各終端傳感器信息。利用Python語言編寫網(wǎng)絡(luò)爬蟲,將國家海洋環(huán)境預(yù)報中心和國家海洋氣象局預(yù)測的浪高、流速、天氣、風(fēng)向、能見度等信息實時抓取并保存到數(shù)據(jù)庫中。
圖2 多通道數(shù)據(jù)采集系統(tǒng)技術(shù)方案
基于多傳感器的數(shù)據(jù)集成監(jiān)控系統(tǒng)依托組態(tài)王軟件進(jìn)行設(shè)計。組態(tài)王(Kingview)軟件可以對工業(yè)自動化系統(tǒng)進(jìn)行監(jiān)視、控制、管理、集成和數(shù)據(jù)保存,通過組態(tài)王人機交互界面可以實時顯示打撈提升力、提升位移、沉船及打撈駁船位置和姿態(tài)、現(xiàn)場環(huán)境、水文要素、水下視頻信號等監(jiān)測信息。
基于虛擬現(xiàn)實的沉船打撈可視化系統(tǒng)依托Virtools軟件進(jìn)行設(shè)計,Virtools5.0是全球著名的虛擬現(xiàn)實開發(fā)軟件,可以方便地創(chuàng)建虛擬現(xiàn)實場景,并且支持大多數(shù)行業(yè)標(biāo)準(zhǔn)的VR設(shè)備和顯示器[8- 9],在3D互動方面技術(shù)強大?;谔摂M現(xiàn)實的沉船打撈可視化系統(tǒng)通過Virtools Dev虛擬現(xiàn)實平臺設(shè)計打撈虛擬場景,利用Virtools Server與MS Access數(shù)據(jù)庫連接,動態(tài)進(jìn)行數(shù)據(jù)交換[10],利用監(jiān)測的數(shù)據(jù)驅(qū)動虛擬模型運動,并將程序打包成exe格式進(jìn)行產(chǎn)品發(fā)布,系統(tǒng)設(shè)計的部分沉船打撈虛擬場景見圖3。
圖3 沉船打撈虛擬場景
打撈監(jiān)測數(shù)據(jù)繁多,數(shù)據(jù)傳輸與儲存方式也各不相同,針對各種監(jiān)測數(shù)據(jù),需要采用相應(yīng)的數(shù)據(jù)采集方法。
2.2.1 PLC編程
打撈監(jiān)測過程所用的壓力、溫度、位移、姿態(tài)等傳感器監(jiān)測的數(shù)據(jù)采用PLC進(jìn)行采集。遠(yuǎn)距離、高精度的監(jiān)測設(shè)備需要從國外引進(jìn),往往都是以數(shù)字量形式傳輸,利用PLC串口通信功能,設(shè)置數(shù)據(jù)傳輸端口、通訊協(xié)議、波特率、儲存數(shù)據(jù)位、奇偶校驗來獲取數(shù)據(jù)。近距離、單功能的監(jiān)測數(shù)據(jù)以模擬量電信號的形式傳輸,PLC提供的A/D模塊利用線性對應(yīng)的原理將模擬量數(shù)據(jù)轉(zhuǎn)換成可讀的數(shù)字量并儲存在PLC相應(yīng)的地址中。由于讀取數(shù)據(jù)繁多,需要在PLC中設(shè)計循環(huán)采集程序,編程邏輯見圖4。
圖4 數(shù)據(jù)采集程序邏輯
2.2.2 網(wǎng)絡(luò)爬蟲
為了獲取沉船打撈區(qū)域的氣象與海洋環(huán)境預(yù)報信息,利用Python語言編寫網(wǎng)絡(luò)爬蟲程序[11],實時抓取浪高、流速、天氣、風(fēng)向、能見度等預(yù)報信息,并儲存到數(shù)據(jù)庫中。采用Python語言編寫程序,通過正則表達(dá)式抓取固定URL地址上的信息,抓取的流程見圖5,其關(guān)鍵代碼如下。
if __name__==‘__main__’:
dt = [‘0600’,‘1200’,‘1800’,‘2400’] //設(shè)置抓取時間
while 1:
if strftime(“%H%M”) in dt:
page =1
url=‘http://www.nmefc.gov.cn/nr/jhhyhjyb.aspx?idx=1’+str(page) //輸入爬取URL
crawl=crawl1()
content=crawl.getHtml(url) //獲取網(wǎng)頁中相關(guān)的預(yù)報數(shù)據(jù)信息
table=crawl.creatTable(‘bohai’) //創(chuàng)建表格
crawl.deleteData(table,“渤海”) //刪除表格數(shù)據(jù)
items=crawl.getContent(content)
for item in items:
insertname=item[1],
if insertname[0] == u“渤?!?
crawl.inserttable(table,insertname,) //插入表中數(shù)據(jù)
sleep(60)
圖5 抓取網(wǎng)頁信息流程
2.2.3 整合外部數(shù)據(jù)庫資源
在沉船打撈過程中,有的監(jiān)測對象有專門的數(shù)據(jù)采集與保存方式,這些數(shù)據(jù)分散在不同的數(shù)據(jù)庫(Oracle、SQL Server、MySQL、Access等)中,因此,需要通過整合外部的數(shù)據(jù)庫資源,才能達(dá)到全方位、多角度地監(jiān)測打撈過程。
組態(tài)王軟件通過以太網(wǎng)方式與PLC進(jìn)行數(shù)據(jù)傳輸,利用自身提供數(shù)據(jù)庫訪問功能(SQL),可以實現(xiàn)組態(tài)王和其他外部數(shù)據(jù)庫(通過ODBC接口訪問)進(jìn)行數(shù)據(jù)傳輸,達(dá)到自動化集成入庫的目的。本系統(tǒng)以MS Access作為外部集成數(shù)據(jù)庫。
組態(tài)王軟件提供SQL訪問管理器和SQL連接函數(shù)實現(xiàn)與Ms Access數(shù)據(jù)庫通信,利用SQL管理器新建表格模板和記錄體,表格模板定義表格結(jié)構(gòu),信息儲存在SQL.DEF文件中;記錄體定義連接使數(shù)據(jù)庫表格中變量與組態(tài)王中變量相關(guān)聯(lián),聯(lián)系儲存在BIND.DEF文件中[12]。組態(tài)王中的命令都是靠事件觸發(fā)執(zhí)行的,為了提高程序效率,減輕后臺語言壓力,利用畫面命令語言設(shè)計組態(tài)王與數(shù)據(jù)庫相連。當(dāng)組態(tài)王畫面顯示時,系統(tǒng)自動連接MS Access集成數(shù)據(jù)庫中,并進(jìn)行數(shù)據(jù)的記錄。關(guān)鍵程序代碼如下所示:
SQLConnect(DeviceID,“dsn=mine;uid=;pwd=”); //連接指定數(shù)據(jù)庫,DeviceID為內(nèi)存整型變量,表示數(shù)據(jù)連接句柄;dsn指ODBC數(shù)據(jù)源,命名為mine;用戶名及密碼定義為無
SQLCreateTable(DeviceID,“WreckSalvage”,“沉船角度”); //在數(shù)據(jù)庫中創(chuàng)建表格,數(shù)據(jù)庫名為WreckSalvage,表格模板為沉船角度
SQLInsert(DeviceID,“WreckSalvage”,“沉船角度”); //在連接的表格中插入一個新記錄,數(shù)據(jù)庫名WreckSalvage,記錄體為沉船角度
Virtools虛擬現(xiàn)實軟件提供多種方式與數(shù)據(jù)庫連接,本文利用Virtools自帶插件Virtools Server進(jìn)行交互設(shè)計。這種方法利用ODBC接口實現(xiàn)與通用數(shù)據(jù)庫的連接,技術(shù)成熟,傳輸穩(wěn)定,是一種穩(wěn)健的數(shù)據(jù)獲取方式[13- 14]。利用這種方式,可以實時讀取數(shù)據(jù)庫中打撈要素值,利用數(shù)據(jù)驅(qū)動虛擬模型運動,達(dá)到實時可視化仿真的目的。
在連接數(shù)據(jù)之前,需要在Virtools Server Controller界面中設(shè)置與Virtools Server Database Module連接,保持Server status為Running。利用Virtools Building blocks編程,使用系統(tǒng)自帶的BB模塊,在Virtools Dev中編輯Level Script,系統(tǒng)程序見圖6。
在系統(tǒng)運行過程中,打撈數(shù)據(jù)的采集、集成、儲存入庫都是實時進(jìn)行的,為了達(dá)到可視化仿真的同步性,在程序設(shè)計時,數(shù)據(jù)讀取速度要大于組態(tài)王中數(shù)據(jù)保存速度。利用Virtools server循環(huán)讀取數(shù)據(jù)時,每次都需要從初始值遍歷每一組數(shù)據(jù),而隨著系統(tǒng)運行時間的增加,數(shù)據(jù)庫中的數(shù)據(jù)越來越多,導(dǎo)致系統(tǒng)讀取時間增加,實時性達(dá)不到要求。為解決上述問題,利用BB模塊設(shè)置判斷語句,當(dāng)數(shù)據(jù)超過系統(tǒng)定義上限時,會自動進(jìn)行數(shù)據(jù)刪除。數(shù)據(jù)采集流程見圖7。
圖6 數(shù)據(jù)讀取程序
圖7 數(shù)據(jù)采集流程
為了驗證系統(tǒng)工作的準(zhǔn)確性與穩(wěn)定性,搭建沉船打撈提升平臺。試驗臺采用液壓驅(qū)動沉船打撈,通過4個液壓缸提升沉船模型,利用PLC控制系統(tǒng)運行,通過多種傳感器從各個終端采集打撈過程中的要素值,信息顯示界面可以顯示船舶的縱傾角、橫傾角、環(huán)境溫度、提升力及船舶位置等信息。沉船打撈集成監(jiān)測系統(tǒng)界面和實驗所用設(shè)備見圖8所示。
圖8 沉船打撈集成監(jiān)測系統(tǒng)實驗臺
系統(tǒng)測試時沉船初始狀態(tài)為橫傾90°平躺在海底,通過4個液壓缸對沉船進(jìn)行板正并提升出水,橫傾角、縱傾角與艏向角隨時間的變化見圖9。
在系統(tǒng)測試過程中,多終端監(jiān)測信息采集與集成顯示、數(shù)據(jù)集成入庫均與設(shè)計相符,達(dá)到了預(yù)期的目的;虛擬仿真系統(tǒng)直觀地顯示打撈過程中沉船與打撈工程船的狀態(tài),利用碰撞檢測技術(shù)增強虛擬場景的真實感,沉浸性強。
圖9 角度隨時間變化
系統(tǒng)運行過程中,實時性還存在不足,虛擬場景相較于試驗臺中沉船的運動存在一定的滯后性,但在沉船打撈工程中,沉船板正起浮是一個緩慢的過程,對虛擬仿真的實時性要求不高,因此不影響系統(tǒng)在實際工程中的應(yīng)用。
[1] 關(guān)新宇.打撈“庫爾斯克號”核潛艇[J].建設(shè)機械技術(shù)與管理,2005,18(1):37- 39.
[2] International Salvage Team Brings Home the Kursk Submarine Using a Simulation Developed in Simulink [EB/OL].http://www.mathworks.com, 2015- 10- 12.
[3] 隋海琛,楊鯤,張彥昌,等.“南海一號”打撈過程中的水下定位和姿態(tài)監(jiān)測[J].水道港口,2009(2):139- 142.
[4] 李興奎,吳志勇,戴義平,等.基于液壓同步牽引的沉船打撈技術(shù)[J].建筑機械化,2010,31(增刊):53- 57.
[5] HAUGEN F. Control of a buoyancy- based pilot underwater lifting body[J]. Modeling,identification and Control,2010,31(10):67- 77.
[6] 弓永軍,張增猛.打撈工程[M].大連:大連海事大學(xué)出版社,2012.
[7] 何朝陽,巨能攀,黃健.地質(zhì)災(zāi)害監(jiān)測數(shù)據(jù)集成系統(tǒng)設(shè)計及實現(xiàn)[J].工程地質(zhì)學(xué)報,2014,22(3):405- 411.
[8] LIU Qiang. Design of interavtive 3D exhibition system based on Virtools [J]. International Journal of digital content technology and its applications, 2012, 6(23): 201- 207.
[9] Mustafa Agil Muhamad Balbed, Nazrita Ibrahim, Azmi Mobd Yusof. Implementation of virtual environment using VIRTOOLS[C].Proceeding Computer Graphics, Imaging and Visualisation, Modern Techniques and Applications, 2008:101- 106.
[10] 張悅,孫楓,鄭志剛.Virtools連接數(shù)據(jù)庫的多種方式設(shè)計與實現(xiàn)[J].計算機仿真,2016,33(7):423- 425.
[11] 王冰,王世明.組態(tài)王相關(guān)數(shù)據(jù)庫研究[J].計算機工程與設(shè)計,2008,29(4):1025- 1027.
[12] 王大偉.基于Python的Web API自動化測試方法研究[J].電子科學(xué)技術(shù),2015,2(5):573- 581.
[13] KHADHRAOUI A, BEJI L, OTMANE S, et al. Stabilizing control and human scale simulation of a submarine ROV navigation[J]. Ocean engineering, 2016,114:66- 78.
[14] 閆海峰.液壓支架虛擬監(jiān)控關(guān)鍵技術(shù)研究[D].徐州:中國礦業(yè)大學(xué),2011.