宗鈺煬 周玉龍 周 密
(江蘇科技大學(xué) 船舶與海洋工程學(xué)院 鎮(zhèn)江 212003)
船舶的浮態(tài)及穩(wěn)性對船舶安全順利地完成其使命任務(wù)影響十分重大,因而實現(xiàn)船舶的浮態(tài)及穩(wěn)性的實時準(zhǔn)確監(jiān)測報警顯得尤為必要。
目前的監(jiān)控系統(tǒng)上位機(jī)主要采用工業(yè)組態(tài)軟件,它相當(dāng)于一個“二次開發(fā)平臺”,一般不需要自己編寫程序,使用起來方便快捷。其中西門子的WinCC組態(tài)軟件不僅能夠生成可視化監(jiān)控界面,實現(xiàn)對監(jiān)控對象的實時監(jiān)測報警,而且由于其具有強(qiáng)大的SQL2005數(shù)據(jù)庫,還可實現(xiàn)數(shù)據(jù)歸檔、報警記錄以及報表打印等功能。[1]通過WinCC組態(tài)軟件設(shè)計的監(jiān)測界面可以直觀顯示船舶液艙的液溫液位數(shù)據(jù),雖然缺乏對復(fù)雜數(shù)據(jù)的計算處理功能,不能實現(xiàn)對液艙裝載及浮態(tài)穩(wěn)性數(shù)據(jù)的計算,然而VB可以很好地解決這一問題。為了更好地發(fā)揮WinCC和VB軟件的優(yōu)勢,本文利用數(shù)據(jù)交換技術(shù)將WinCC液艙液位液溫監(jiān)測系統(tǒng)和劉文艷學(xué)者采用VB編程軟件設(shè)計的“浮態(tài)調(diào)整輔助決策系統(tǒng)”[2]結(jié)合起來,從而獲得更為理想的結(jié)果。
目前,組態(tài)軟件和VB應(yīng)用程序主要采取DDE、OLE、OPC三種方式進(jìn)行數(shù)據(jù)交換。[3]本文利用VB與WinCC組態(tài)軟件的功能互補(bǔ)性,采用DDE技術(shù)進(jìn)行數(shù)據(jù)的動態(tài)交換,實現(xiàn)船舶液艙裝載及穩(wěn)性的實時監(jiān)測系統(tǒng)。
動態(tài)數(shù)據(jù)交換(Dynamic Data Exchange,簡稱DDE),是一種在Windows操作系統(tǒng)中實現(xiàn)進(jìn)程間通信的技術(shù)。DDE使用系統(tǒng)共享內(nèi)存來實現(xiàn)進(jìn)程之間的數(shù)據(jù)交換,并通過DDE協(xié)議同步傳遞數(shù)據(jù)。使用DDE通訊需要有兩個Windows應(yīng)用程序,其中一方作為服務(wù)器處理信息,另一方作為客戶機(jī)獲得信息。[4-5]客戶機(jī)與服務(wù)器之間數(shù)據(jù)交換的方式稱為連接。DDE有三種連接方式:熱連接、溫連接、冷連接。[6]熱連接能夠?qū)崿F(xiàn)數(shù)據(jù)的雙向通信,而溫連接與冷連接均不能實現(xiàn)。所以根據(jù)監(jiān)測設(shè)計系統(tǒng)的需求,本文采用熱連接的方式進(jìn)行WinCC液位液溫監(jiān)測系統(tǒng)軟件與“浮態(tài)輔助決策系統(tǒng)”(如圖1所示)之間數(shù)據(jù)交換。
圖1 “浮態(tài)輔助決策系統(tǒng)”界面
以某船為原型,對該船各類艙室的液位、液溫進(jìn)行監(jiān)測,共設(shè)置280個監(jiān)測點(diǎn),并根據(jù)監(jiān)測液艙艙深及液體性質(zhì)選擇相應(yīng)的壓力傳感器。但是由于液體密度的變化、電源電壓的波動、信號的衰弱等均會使測量結(jié)果產(chǎn)生較大誤差,因此,還應(yīng)對監(jiān)測數(shù)據(jù)進(jìn)行修正。例如根據(jù)壓力傳感器原理= ρgh,采用雙差壓法,即一個壓力傳感器測量已知液位下的壓差,另一個測量需測液位下的壓差,通過計算消除密度對測量結(jié)果的影響。并確定電源電壓波動、信號衰弱等與測量值和實際值之間的關(guān)系,通過相應(yīng)公式對這些影響進(jìn)行消弱或消除,最后在PLC中對這些計算公式進(jìn)行編程,實現(xiàn)對監(jiān)測值的修正。將PLC與傳感器進(jìn)行正確連接,并通過PROFIBUS電纜與上位機(jī)進(jìn)行連接。在上位機(jī)中采用WinCC軟件對監(jiān)測界面、監(jiān)測變量、采集周期、歸檔周期、網(wǎng)絡(luò)傳輸速率等進(jìn)行組態(tài)設(shè)置,實現(xiàn)組態(tài)軟件WinCC對船舶液位、液溫的實時監(jiān)測系統(tǒng)。
原有的“浮態(tài)輔助決策系統(tǒng)”需要人工(手動)輸入現(xiàn)場液艙液位數(shù)據(jù)后才能進(jìn)行液艙數(shù)據(jù)及浮態(tài)穩(wěn)性數(shù)據(jù)的計算,其系統(tǒng)界面如圖1所示。采用人工輸入不僅會造成輸入誤差,而且從采集現(xiàn)場數(shù)據(jù)到人工輸入數(shù)據(jù)也產(chǎn)生了相應(yīng)的時間誤差,工作繁瑣,不符合現(xiàn)代化船舶監(jiān)測系統(tǒng)的要求。本文通過DDE數(shù)據(jù)交換機(jī)制,將WinCC液位監(jiān)測系統(tǒng)與“浮態(tài)輔助決策系統(tǒng)”完美結(jié)合,并實現(xiàn)了兩個系統(tǒng)平臺之間的數(shù)據(jù)交換。
系統(tǒng)運(yùn)行的具體過程如下:組態(tài)軟件WinCC通過PLC和傳感器實時獲取現(xiàn)場液位、液溫的采集數(shù)據(jù);通過DDE通訊機(jī)制,將液位數(shù)據(jù)傳遞給VB應(yīng)用程序“浮態(tài)輔助決策系統(tǒng)”;在VB應(yīng)用程序中完成液艙相關(guān)數(shù)據(jù)(液艙液重、重量的垂向坐標(biāo)、重量的縱向坐標(biāo)等)以及船舶浮態(tài)穩(wěn)性數(shù)據(jù)的計算,實現(xiàn)VB系統(tǒng)對船舶液艙裝載及穩(wěn)性狀態(tài)的實時監(jiān)測;將VB應(yīng)用程序計算得出的重要穩(wěn)性數(shù)據(jù)通過DDE傳遞給WinCC,實現(xiàn)WinCC系統(tǒng)對船舶裝載及穩(wěn)性狀態(tài)的實時監(jiān)測。系統(tǒng)結(jié)構(gòu)圖見圖2。
圖2 系統(tǒng)結(jié)構(gòu)
當(dāng)WinCC軟件中的變量通過傳感器和PLC獲取到現(xiàn)場液位數(shù)據(jù)后,該系統(tǒng)并不能進(jìn)行復(fù)雜的數(shù)據(jù)處理計算,這就需要“浮態(tài)輔助決策系統(tǒng)”來解決這一問題。以WinCC液位監(jiān)測系統(tǒng)作為DDE服務(wù)器,VB應(yīng)用程序“浮態(tài)輔助決策系統(tǒng)”作為DDE客戶機(jī),通過DDE服務(wù)器將監(jiān)測到的實時液位值傳遞給DDE客戶機(jī)。
為實現(xiàn)兩個系統(tǒng)軟件對DDE的支持,以WinCC系統(tǒng)作為服務(wù)器,VB應(yīng)用程序作為客戶機(jī),根據(jù)系統(tǒng)設(shè)計需要作如下所示設(shè)置:
(1)在WinCC項目的WinCC Explorer中的“計算機(jī)屬性->啟動”中添加應(yīng)用程序DdeServ.exe,同時添加命令行參數(shù):/v/n;
(2)在VB應(yīng)用程序“浮態(tài)輔助決策系統(tǒng)”的窗體上添加140個文本控件用來讀取船舶的140個液艙液位值,并對這些控件進(jìn)行如下的屬性設(shè)置:Visible=False;LinkTopic=WinCC︱﹨PC-201305161509﹨zyy﹨zyy.mcp;LinkItem=1號燃油艙液位(各個文本控件需要讀取WinCC中的對應(yīng)變量名);LinkMode=Automatic。
當(dāng)WinCC系統(tǒng)與現(xiàn)場PLC以及傳感器連接正確后,激活WinCC系統(tǒng),同時運(yùn)行“浮態(tài)輔助決策系統(tǒng)”。此時,通過液位傳感器采集到的液位信號,通過PLC的轉(zhuǎn)換為數(shù)值信息,傳遞給WinCC中設(shè)置的相應(yīng)變量。通過以上兩個步驟的設(shè)置,此時作為DDE服務(wù)器的WinCC就會根據(jù)作為DDE客戶機(jī)的“浮態(tài)輔助決策系統(tǒng)”的要求,實時傳遞數(shù)據(jù)。由步驟(2)中的設(shè)置可知,WinCC中讀取液位數(shù)據(jù)的相關(guān)變量就會實時的將液位數(shù)值更新給中添加的對應(yīng)的文本控件。例如,當(dāng)文本控件的LinkMode屬性設(shè)置為“1號燃油艙液位”時變量名為“1號燃油艙”的變量就會將自己變量數(shù)值實時更新給該文本控件。
然而在“浮態(tài)輔助決策系統(tǒng)”中實時顯示液位數(shù)據(jù)并不能達(dá)到實時計算船舶裝載及穩(wěn)性數(shù)據(jù)的目的,因為該系統(tǒng)中液位數(shù)據(jù)是在DataGrid網(wǎng)格控件中顯示并非文本控件。由于VB中只有文本控件、圖片控件等支持DDE通訊而DataGrid控件并不支持DDE通訊,所以采用的文本控件僅僅是作為中間對象來獲取液位的實時數(shù)據(jù),還需要對“浮態(tài)輔助決策系統(tǒng)”中相關(guān)程序進(jìn)行添加修改將其獲取的數(shù)據(jù)賦值給相應(yīng)的網(wǎng)格控件。其中添加的文本控件僅僅是作為中間量用來對實時液位的讀取,并不需要在系統(tǒng)運(yùn)行界面顯示,所以將這些文本控件均設(shè)置為不可見并置于最底層。
在系統(tǒng)程序中將各類液艙的液位所對應(yīng)的文本控件數(shù)值賦值給相應(yīng)的液艙數(shù)組,例如燃油艙數(shù)組在VB程序中定義為ranyou(12),在程序中對1號燃油艙進(jìn)行賦值:ranyou(1)=Text2.Text,其他液艙相同,再將這些數(shù)組值賦值給相應(yīng)的網(wǎng)格控件列。其部分程序如下:
在該程序中液位數(shù)組均除以1000是為了使單位保持一致,在VB程序中液位的單位為“米”。
文本控件的液位數(shù)值是根據(jù)WinCC服務(wù)器端的數(shù)據(jù)的改變而實時變化的,但“浮態(tài)輔助決策系統(tǒng)”中的其他數(shù)據(jù)并不能實時變化,這就需要對其中程序進(jìn)行一些修改。為此在系統(tǒng)中添加了8個Timer控件,時間間隔設(shè)置為2 s(時間可調(diào)),并分別將源程序中液艙數(shù)據(jù)計算、初穩(wěn)性數(shù)據(jù)計算、大傾角穩(wěn)性數(shù)據(jù)計算、穩(wěn)性曲線繪制、穩(wěn)性計算按鈕等相關(guān)程序添加到各個Timer事件中,根據(jù)系統(tǒng)目的進(jìn)行一定的修改。最終實現(xiàn)了“浮態(tài)輔助決策系統(tǒng)”液位的實時變化以及相關(guān)數(shù)據(jù)的自動計算。
當(dāng)WinCC液位監(jiān)測系統(tǒng)被激活運(yùn)行時,運(yùn)行“浮態(tài)輔助決策系統(tǒng)”液位列則自動更新顯示當(dāng)前的實時監(jiān)測液位,各類液艙的數(shù)據(jù)在網(wǎng)格控件中以5 s的速度輪換顯示,并且系統(tǒng)還能自動計算出相應(yīng)液位下的 液艙各類數(shù)值,以及船舶的浮態(tài)穩(wěn)性數(shù)據(jù)。圖3為該系統(tǒng)運(yùn)行時的界面,由圖中可知目前網(wǎng)格控件中顯示的是壓載水艙的相關(guān)數(shù)據(jù)。系統(tǒng)界面中還設(shè)置了手動操作按鈕和自動計算按鈕,當(dāng)不需要系統(tǒng)實時計算穩(wěn)性數(shù)據(jù)時可以按下手動操作按鈕,節(jié)約了系統(tǒng)資源,提高了系統(tǒng)利用率。
將WinCC監(jiān)測系統(tǒng)作為DDE客戶端,VB應(yīng)用程序“浮態(tài)輔助決策系統(tǒng)”作為DDE服務(wù)器。由服務(wù)器向WinCC客戶端傳遞船舶液艙實時液量值以及初穩(wěn)心高、極限風(fēng)速等相關(guān)數(shù)據(jù)。
WinCC作為客戶端的具體設(shè)置如下:
(1)將VB應(yīng)用程序“浮態(tài)輔助決策系統(tǒng)”窗口按照下頁表1中的VB作為服務(wù)器進(jìn)行設(shè)置,LinkMode屬性設(shè)置為1-source,LinkTopic設(shè)置為Form1。
(2)將VB應(yīng)用程序生成可執(zhí)行文件JCXT.exe,其文件名稱與工程名JCXT.vbp相同。
(3)在WinCC變量管理器下添加新的驅(qū)動程序Windows DDE,在DDE通道下新建連接,并設(shè)置其相關(guān)屬性,應(yīng)用程序為JCXT,主題為Form1。
圖3 VB系統(tǒng)運(yùn)行界面
表1 VB的DDE屬性設(shè)置
(4)本文設(shè)計系統(tǒng)監(jiān)測對象為35個液艙,故有35個與之相應(yīng)的液重數(shù)據(jù),還有由VB應(yīng)用程序計算的實時初穩(wěn)性高、極限風(fēng)速等相關(guān)數(shù)據(jù)。在(3)中新建的連接下建立如上所述的相應(yīng)變量,并對其相關(guān)屬性進(jìn)行設(shè)置。圖4為1號燃油艙液重所對應(yīng)的變量的屬性設(shè)置,單擊圖中的選擇按鈕,設(shè)置條目名稱為Text5(文本控件名應(yīng)與VB中相對應(yīng)),數(shù)據(jù)類型為浮點(diǎn)數(shù)。其他變量設(shè)置與此相同。
圖4 變量屬性
(5)在WinCC監(jiān)測畫面中對畫面進(jìn)行設(shè)置,添加新的I/O域,設(shè)置為與DDE下的變量進(jìn)行動態(tài)連接,觸發(fā)為一旦改變,輸出格式根據(jù)具體連接變量確定。
(6)在“浮態(tài)輔助決策系統(tǒng)”中添加39個文本控件,均設(shè)置為不可見且置于底層。由于需要從VB服務(wù)器讀取的數(shù)據(jù)均在網(wǎng)格控件當(dāng)中,網(wǎng)格控件并不支持DDE通訊,所以添加的39個文本控件仍是作為中間量的,這就需要先將網(wǎng)格控件中的相關(guān)數(shù)據(jù)賦值給對應(yīng)的文本控件。在對液艙數(shù)據(jù)進(jìn)行計算的時間事件程序中添加的部分程序如下:
在計算穩(wěn)性數(shù)據(jù)的相應(yīng)時間事件下插入如下程序語句 :Text22.Text = .TextMatrix(4, 2)用來讀取極限風(fēng)速值;Text20.Text = lbl_udg.Caption用來判斷極限風(fēng)速是否滿足軍規(guī)要求;Text21.Text = .TextMatrix(7, 2)用來讀取修正后的初穩(wěn)心高值;Text19.Text = lbl_hdg用來判斷初穩(wěn)心高是否滿足軍規(guī)要求。
通過以上程序修改,將液重、初穩(wěn)心高、極限風(fēng)速等相關(guān)數(shù)據(jù)實時賦值給相應(yīng)的文本控件,通過VB設(shè)置的DDE服務(wù)器傳遞給WinCC客戶機(jī)中相應(yīng)的變量中,其運(yùn)行界面如圖5所示。由圖中可以看到,WinCC系統(tǒng)界面中也能夠?qū)崟r顯示液重、初穩(wěn)心高、極限風(fēng)速等數(shù)據(jù)。
圖5 WinCC運(yùn)行界面
本文主要介紹了DDE動態(tài)數(shù)據(jù)交換技術(shù),并利用其實現(xiàn)了VB應(yīng)用軟件及WinCC組態(tài)軟件程序之間的實時數(shù)據(jù)交換。通過DDE技術(shù)將WinCC監(jiān)測的液位數(shù)據(jù)實時更新到“浮態(tài)輔助決策系統(tǒng)”中,將原來的手動液位輸入變成了實時自動更新,并實現(xiàn)了“浮態(tài)輔助決策系統(tǒng)”對船舶液艙裝載狀態(tài)及穩(wěn)性的實時監(jiān)測。同時通過DDE技術(shù)將計算的穩(wěn)性數(shù)據(jù)實時傳遞給WinCC軟件,實現(xiàn)了WinCC軟件對船舶液艙裝載狀態(tài)及穩(wěn)性的實時監(jiān)測。通過該技術(shù)實現(xiàn)了不同軟件之間功能的互補(bǔ),提高了系統(tǒng)自動化監(jiān)測的程度。該監(jiān)測系統(tǒng)還具有一定的通用性,通過更改相關(guān)船舶資料,可以將其應(yīng)用到其他船舶上,對其他船舶監(jiān)測系統(tǒng)的設(shè)計具有一定的參考價值。
[1]趙鵬飛,周玉龍,趙鵬,等.基于組態(tài)軟件WinCC的船舶監(jiān)測報警系統(tǒng)的設(shè)計與研究[J].船舶,2013(1):66-69.
[2]劉文艷,周玉龍,趙鵬.試驗艦船浮態(tài)調(diào)整輔助決策系統(tǒng)研究[J].船舶,2012(2):7-10.
[3]彭道剛,楊平,徐春梅,等.基于DDE的分布式監(jiān)控系統(tǒng)設(shè)計及應(yīng)用[J].儀器儀表學(xué)報,2006(6):482-484.
[4]侯廣寧,隋濤,孔震,等.基于DDE技術(shù)的組態(tài)王和VB的通信[J].電子質(zhì)量,2013(2):8-10.
[5]賀澤,邱長華,張家泰,等.利用DDE技術(shù)實現(xiàn)不同應(yīng)用之間的數(shù)據(jù)交換[J].應(yīng)用科技,2004(5):7-9.
[6]王樹勇.利用DDE技術(shù)實現(xiàn)組態(tài)王與VB應(yīng)用程序的數(shù)據(jù)通訊[J].科技資訊,2009(23):247.