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