• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于VC++和MATLAB的船舶電力系統(tǒng)動態(tài)仿真軟件開發(fā)

    2018-09-27 06:57:58高國章高志國楊雪帆
    造船技術(shù) 2018年4期
    關(guān)鍵詞:圖元繪圖端口

    高國章, 高志國 , 楊雪帆

    (武漢理工大學(xué) a.能源與動力工程學(xué)院, b.理學(xué)院, 湖北 武漢 430073)

    0 引 言

    隨著船舶智能化的程度越來越高,船舶綜合電力系統(tǒng)的安全性和穩(wěn)定性要求也越來越高。仿真[1]成為了許多研究人員常用的研究手段之一。

    國內(nèi)外電力系統(tǒng)仿真軟件有PSCAD(Power Systems Computer Aided Design)、VTB(Virtual Test Bed)、SABER等[2],但是這些軟件都是針對陸地電力系統(tǒng)仿真需求制作的,針對性不強(qiáng)。VTB是美國QSI集團(tuán)開發(fā)的一款軟件,其中包含船舶綜合電力系統(tǒng)仿真的模型,因而對船舶電力系統(tǒng)的仿真針對性更強(qiáng),但是VTB對外保密,沒有實(shí)現(xiàn)通用。哈爾濱工程大學(xué)在船舶電力系統(tǒng)仿真平臺的研究和開發(fā)方面已經(jīng)有多年的積累,在理論、平臺搭建和仿真方面都取得了一定的成果,但由于各方面原因,仍未能實(shí)現(xiàn)通用。

    目前,大多數(shù)研究工作者使用MATLAB/SIMULINK仿真,但在不間斷正在進(jìn)行的仿真的情況下,系統(tǒng)無法根據(jù)需要實(shí)現(xiàn)參數(shù)修改,有一定的局限性。Visual C++面向?qū)ο缶幊蘙3],在應(yīng)用程序界面編制、圖元繪制和人機(jī)交互等方面具有較大的優(yōu)勢,MATLAB中有豐富的優(yōu)化、計(jì)算工具[4]。VC++與MATLAB相結(jié)合,將發(fā)揮VC++可視化編程和MATLAB數(shù)值計(jì)算的優(yōu)點(diǎn),可提高軟件開發(fā)的效率,縮短開發(fā)周期[5]。本平臺針對船舶電力系統(tǒng)開發(fā),利用VC++和MATLAB混合編程不僅便于系統(tǒng)繪制實(shí)現(xiàn)可視化[6],且在不間斷正在運(yùn)行的仿真的同時,根據(jù)實(shí)際情況改變設(shè)備參數(shù)或者網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)延續(xù)仿真,實(shí)現(xiàn)在不同工況下的比較分析。

    1 平臺的需求分析

    平臺的需求主要包括非功能性需求和功能性需求。非功能性需求主要包括:可擴(kuò)展性、低耦合性、便捷性、易用性和高性能,其中高性能最為重要,它需要滿足復(fù)雜電力系統(tǒng)的快速構(gòu)建與計(jì)算要求,并且進(jìn)行延續(xù)仿真。仿真平臺的功能性需求按船舶電力系統(tǒng)構(gòu)建流程可分為:(1)文件操作——新建、打開、保存、關(guān)閉;(2)設(shè)備圖元繪制——柴油機(jī)、發(fā)電機(jī)、匯流排母線、線路、變壓器、電動機(jī)、螺旋槳等;(3)設(shè)備圖元操作——復(fù)制粘貼、選中、移動、縮放、線寬、顏色、端點(diǎn)自動連接、刪除;(4)參數(shù)設(shè)定;(5)拓?fù)浞治鯷7];(6)VC++調(diào)用MATLAB。

    2 仿真平臺的開發(fā)

    2.1 平臺組成介紹

    本平臺基于船舶電力系統(tǒng)開發(fā)使用。船舶綜合電力系統(tǒng)的主要組成包括:產(chǎn)生電能的原動機(jī)、發(fā)電機(jī)等,配電變電部分的匯流排、變壓器、整流器、逆變器等[8],用電負(fù)載部分的推進(jìn)電機(jī)、螺旋槳等。每個設(shè)備都有自己的模型,本仿真平臺用編程語言描述這些設(shè)備的數(shù)學(xué)模型,再將數(shù)學(xué)模型的編程與圖元封裝,實(shí)現(xiàn)圖模一體化。圖1為簡單的船舶電力系統(tǒng)框圖。

    圖1 船舶電力系統(tǒng)簡化框圖

    2.2 圖元繪制與操作的實(shí)現(xiàn)

    船舶電力系統(tǒng)的設(shè)備眾多,為方便后期的封裝,平臺為船舶設(shè)備對應(yīng)的每1個圖元定義1個類,可以利用類的繼承特性去實(shí)現(xiàn)每個圖元對共有屬性的繼承,而不必在每個圖元類中重復(fù)實(shí)現(xiàn)。本平臺采用面向?qū)ο缶幊?,其定義類的基本流程為

    (1) 從基類CObject中派生出繪圖類CDraw-Object,設(shè)備圖元對應(yīng)的類從CDrawObject類中派生。

    (2) 在CDrawObject類中添加圖元類的公共屬性,把CDrawObject類的各個子類的公共屬性放到父類中,并且將CDrawObject類中的成員函數(shù)設(shè)置為public,讓子類都可以使用父類的成員函數(shù)。

    (3) 利用類的另一個特性多態(tài)性,實(shí)現(xiàn)同一函數(shù)的不同操作。將父類的成員函數(shù)設(shè)置成虛函數(shù),聲明其類型為virtual,具體的功能在各個子類中去完成,對于不同的對象,程序會自己調(diào)用對應(yīng)類中的成員函數(shù)去實(shí)現(xiàn)。

    2.2.1 圖元繪制

    實(shí)現(xiàn)圖模一體化后,將每個設(shè)備的圖元都放在工具欄或者菜單欄中,在繪制時直接點(diǎn)擊相應(yīng)的圖標(biāo)或者選項(xiàng),然后在窗口通過鼠標(biāo)拖曳完成圖元繪制,可簡化繪圖操作,提高繪圖效率。整個工具欄如圖2所示。工具欄中,設(shè)備對應(yīng)圖標(biāo)是可以浮動的,避免工具欄按鈕太多導(dǎo)致使用不方便。通過調(diào)用CToolBar類的Create或CreateEx成員函數(shù),設(shè)置其參數(shù)DWORD dwstyle的值就可實(shí)現(xiàn)工具欄浮動。給工具欄各圖元命名相應(yīng)的專業(yè)ID,經(jīng)過類向?qū)砑禹憫?yīng)函數(shù),實(shí)現(xiàn)相應(yīng)的功能。

    圖2 工具欄示例

    在微軟基礎(chǔ)類庫(Microsoft Foundation Classes, MFC)中與圖形相關(guān)的類有:CDC(Create Device Contert)類和GDI(Graphics Devices Interface)類。CDC類主要可以實(shí)現(xiàn)繪圖功能和繪圖環(huán)境的設(shè)置,利用CDC類可以實(shí)現(xiàn)形狀的繪制和圖形顏色、畫筆線條寬度等設(shè)置。GDI對象類包括位圖類、畫刷類、字體類、畫筆類、區(qū)域類等。當(dāng)獲取當(dāng)前CDC類對象或者指向?qū)ο蟮闹羔樅?,在繪圖時,使用函數(shù)SelectObject()將畫筆、畫刷、字體等對象引入到函數(shù)CreatDC()中,實(shí)現(xiàn)特定的繪圖屬性。繪制圖元時,必須先在圖元類中添加繪圖函數(shù),之后在視類View中的函數(shù)OnLBottonDown()中經(jīng)由各自圖元對象調(diào)用繪圖函數(shù)完成繪圖。

    按相對應(yīng)關(guān)系將圖1所示簡單電力系統(tǒng)框圖繪制成圖元,界面如圖3所示。菜單欄中主要包括:文件、編輯、視圖、繪圖、分析等,工具欄呈現(xiàn)于菜單欄下方,使用者可在繪圖窗口區(qū)通過拖曳工具欄中的相應(yīng)圖元實(shí)現(xiàn)系統(tǒng)繪制。

    圖3 仿真平臺繪制界面

    2.2.2 圖元操作

    在系統(tǒng)建立過程中,為使系統(tǒng)圖元整潔、規(guī)范且繪制便利,不可避免地要求圖元能夠移動、復(fù)制粘貼、旋轉(zhuǎn)和刪除等,且通過雙擊圖元實(shí)現(xiàn)對相應(yīng)設(shè)備參數(shù)的設(shè)定?;静僮鞯膶?shí)現(xiàn)方法如下:

    (1) 移動。首先刪除原圖元,然后調(diào)用自定義函數(shù)MoveAt()實(shí)現(xiàn)圖元重新繪制,最后利用DeleteObject()釋放筆資源。

    (2) 復(fù)制粘貼。通過圖元類中的一個構(gòu)造函數(shù),給該類的變量賦初值,這些變量都存入類中,當(dāng)進(jìn)行復(fù)制時,這些參數(shù)存入到結(jié)構(gòu)體中,在粘貼時,把結(jié)構(gòu)體中這些參數(shù)重新賦值給新的位置重新繪制成新的設(shè)備圖元。

    (3)旋轉(zhuǎn)。利用一個for循環(huán)實(shí)現(xiàn)參數(shù)m_nSource的累加賦值,其不同賦值在繪圖函數(shù)選擇中執(zhí)行不同的繪制命令。對于只在水平和豎直方向繪制的圖元,則通過改變其狀態(tài)變量的取值來實(shí)現(xiàn)。參數(shù)m_bIsHor初始值為true,當(dāng)旋轉(zhuǎn)操作時對變量m_bIsHor重新賦值為fasle。根據(jù)參數(shù)m_nSource、m_bIsHor的不同取值,繪圖函數(shù)執(zhí)行不同的操作,可實(shí)現(xiàn)圖元按順時針方向旋轉(zhuǎn),每次旋轉(zhuǎn)90°。

    (4) 刪除。調(diào)用OnDelete()函數(shù),先選中圖標(biāo),遍歷圖元數(shù)據(jù)列表,找到需要刪除的圖元,然后將圖元刪除。

    2.2.3 參數(shù)設(shè)定

    雙擊圖元彈出對話框,彈出后在對話框中填寫參數(shù)具體數(shù)值并在窗口顯示,點(diǎn)擊保存之后保存到圖元類。彈出電動機(jī)的參數(shù)設(shè)置對話框如圖4所示。

    圖4 電動機(jī)參數(shù)設(shè)置圖

    圖元建模在完成繪制圖元和雙擊圖元設(shè)置對應(yīng)系統(tǒng)各設(shè)備的參數(shù)后,再經(jīng)過圖元封裝,將設(shè)備的模型封裝到設(shè)備對應(yīng)的類中,使設(shè)備圖元和模型成為一個整體,進(jìn)而實(shí)現(xiàn)編程的模塊化。

    2.3 拓?fù)浞治?/h3>

    完成上述操作后,為了解系統(tǒng)的連接關(guān)系必須對所繪制的系統(tǒng)進(jìn)行拓?fù)浞治?。電網(wǎng)拓?fù)浣Y(jié)構(gòu)分析的主要作用是依據(jù)開關(guān)和設(shè)備圖元的狀態(tài),確定每個圖元與其他圖元的連接關(guān)系,把電力系統(tǒng)網(wǎng)絡(luò)物理模型轉(zhuǎn)化為采用節(jié)點(diǎn)/支路描述的數(shù)學(xué)模型[9]。系統(tǒng)將設(shè)備與圖元對應(yīng),系統(tǒng)的接線圖可以理解為由圖元、線段組成的支路以及由這些支路組成的幾何圖形,通過確定節(jié)點(diǎn)-開關(guān)-節(jié)點(diǎn)和母線-支路的連接關(guān)系以及設(shè)備的數(shù)量,為后續(xù)計(jì)算提供依據(jù)。

    拓?fù)浞治黾词歉鶕?jù)設(shè)備圖元的ID號和圖元端口位置坐標(biāo),通過比較端口坐標(biāo)是否相同來判斷圖元之間的連接關(guān)系[10],確定與母線連接的設(shè)備圖元,從而將電力系統(tǒng)的接線圖轉(zhuǎn)換為計(jì)算機(jī)可識別的電路圖的過程。

    拓?fù)浞治龅谋举|(zhì)是分析圖元的端口坐標(biāo)或者比較節(jié)點(diǎn)的參數(shù)值。每個圖元在繪制或移動過程中端口的坐標(biāo)會保存到圖元類中,當(dāng)兩個圖元端口的坐標(biāo)值相同時就將圖元的ID號存入到數(shù)組中。拓?fù)浞治隹煞譃橐韵聨讉€步驟。

    Step 1:判斷圖元是否與導(dǎo)線或者母線連接。這個通過端口到線的距離來判斷,當(dāng)端口距離線的距離小于設(shè)定值時認(rèn)為兩者相連。將每條線都當(dāng)做是點(diǎn)集,端口與其中任一點(diǎn)相連都當(dāng)做是相連接。端口與端口之間的坐標(biāo)判斷是通過點(diǎn)到點(diǎn)的距離實(shí)現(xiàn)的,利用條件公式sqrt((x1-x)2+(y1-y)2)

    Step 2:節(jié)點(diǎn)融合。通過圖元自身的端口坐標(biāo)是否相等或者接近,如果滿足條件則將兩圖元的ID號保存到數(shù)組中,并將兩節(jié)點(diǎn)合并為同一節(jié)點(diǎn)。

    Step 3:在系統(tǒng)中對開關(guān)的處理。當(dāng)開關(guān)閉合時,當(dāng)作導(dǎo)線對待,節(jié)點(diǎn)數(shù)減少1個;當(dāng)開關(guān)斷開時,開關(guān)的節(jié)點(diǎn)數(shù)增加1個,節(jié)點(diǎn)數(shù)的變化對應(yīng)開關(guān)的不同狀態(tài)。

    Step 4:支路的判斷。具有相同的節(jié)點(diǎn),兩設(shè)備圖元的其他端點(diǎn)的位置坐標(biāo)不同,則認(rèn)為是不同的支路,并按照不同的支路方向繼續(xù)搜索,直到終點(diǎn)。

    經(jīng)過上述幾個步驟,點(diǎn)擊菜單欄,系統(tǒng)能夠識別并存儲設(shè)備圖元的種類、節(jié)點(diǎn)和支路,從而確定各個圖元的連接關(guān)系,自動生成系統(tǒng)相應(yīng)的拓?fù)潢P(guān)系。

    船舶電力系統(tǒng)中所有發(fā)電機(jī)接到匯流排,所有的負(fù)載從匯流排引出,然后通過開關(guān)的通斷決定發(fā)電機(jī)在網(wǎng)數(shù)目和負(fù)載大小[11],系統(tǒng)結(jié)構(gòu)相對簡單,只需識別圖元設(shè)備和支路即可,拓?fù)浞治龅碾y度降低。

    在程序中約定,在匯流排左邊的開關(guān)對應(yīng)著發(fā)電機(jī)組數(shù)目的增加,開關(guān)變量只有2種取值0和1,取值0代表開關(guān)斷開,取值1代表開關(guān)閉合。在匯流排右側(cè)的開關(guān)對應(yīng)的是負(fù)載的增加,開關(guān)的取值仍為0和1。

    拓?fù)浞治龅牧鞒倘缦拢?/p>

    (1) 在繪制圖中,首先通過坐標(biāo)比較實(shí)現(xiàn)節(jié)點(diǎn)融合,將相連通的節(jié)點(diǎn)等價為同一個節(jié)點(diǎn);通過遍歷圖元,完成整個系統(tǒng)節(jié)點(diǎn)的融合,簡化連接關(guān)系。

    (2) 通過圖元端點(diǎn)坐標(biāo)比較,若界面中有無效模塊,則系統(tǒng)自動將對應(yīng)圖元的數(shù)目從該類圖元總數(shù)目中減去。在判斷連接關(guān)系時,首先找出與母線相連接的設(shè)備,通過設(shè)備的另一個端點(diǎn)坐標(biāo)和所有圖元的端點(diǎn)比較,根據(jù)相連判據(jù)找到與該設(shè)備相連接的下一個設(shè)備,如此循環(huán),直到找不到下一個具有相同端點(diǎn)的設(shè)備,即可認(rèn)為到達(dá)了支路的終點(diǎn)。每個圖元在繪制時端點(diǎn)坐標(biāo)、圖元類型和端口數(shù)都已經(jīng)保存,通過上述搜索,便可以找到設(shè)備的連接關(guān)系。

    (3) 在(2)中剔除沒有實(shí)際作用的圖元后,判斷開關(guān)的通斷狀態(tài)和位置,根據(jù)所得到的信息確定所繪制電力系統(tǒng)中的發(fā)電機(jī)數(shù)、電動機(jī)數(shù)等,進(jìn)一步確定系統(tǒng)的設(shè)備類型、數(shù)目和在網(wǎng)設(shè)備。

    (4) 根據(jù)不同的分析結(jié)果調(diào)用模型完成計(jì)算。

    下面舉例說明拓?fù)浞治龅那闆r。繪制的船舶電力系統(tǒng)圖如圖5所示,相對應(yīng)的拓?fù)浞治鼋Y(jié)果如圖6所示。

    圖5 船舶電力系統(tǒng)模型圖示例

    圖6 拓?fù)浞治鼋Y(jié)果圖

    3 調(diào)用MATLAB實(shí)現(xiàn)仿真

    在VC++程序中通過MATLAB引擎調(diào)用MATLAB, MATLAB引擎主要提供給用戶1組引擎函數(shù),通過這些函數(shù)可以實(shí)現(xiàn)MATLAB與VC++之間的數(shù)據(jù)傳遞[12],其具體的過程和操作如下:

    (1) 打開一個MATLAB引擎。在VC++應(yīng)用程序中通過調(diào)用engOpen()函數(shù)能夠方便地打開一個MATLAB進(jìn)程。應(yīng)用程序在使用引擎之前,須在應(yīng)用程序中包含“engine.h”頭文件。

    (2) 將VC++應(yīng)用程序中數(shù)組形式的數(shù)據(jù)轉(zhuǎn)換為MATLAB中的使用形式。通過調(diào)用函數(shù)庫中的函數(shù)mxCreateDoubleMatrix()來創(chuàng)建mxArray陣列;然后再通過拷貝函數(shù)memcpy()將一個自定義數(shù)據(jù)結(jié)構(gòu)復(fù)制到mxArray中,但是需要注意到主句存儲形式不同。

    (3) 將設(shè)備需要設(shè)置的參數(shù)保存到mxArray陣列中,然后把mxArray陣列傳輸至MATLAB引擎的工作空間中,可通過調(diào)用函數(shù)engPutVariable()實(shí)現(xiàn)這一操作,數(shù)據(jù)傳輸?shù)組ATLAB工作空間后就在MATLAB計(jì)算中被相應(yīng)的變量使用。

    (4) 在VC++應(yīng)用程序中,使用函數(shù)向MATLAB引擎發(fā)送所要執(zhí)行的命令字符串,命令字符串的使用形式與在MATLAB命令窗口中直接使用的形式是相同的。在應(yīng)用程序中執(zhí)行函數(shù)engEvalString()后,MATLAB命令窗口將自動被打開,MATLAB會話期窗口是否可見可自行設(shè)計(jì)。打開MATLAB后完成命令語句中的數(shù)值計(jì)算和分析等操作,并將命令字符串的處理結(jié)果顯示出來。

    (5) 由預(yù)先定義的輸出緩沖來獲取MATLAB引擎的輸出結(jié)果,此步操作是(4)的補(bǔ)充,能夠?qū)崿F(xiàn)獲取任意想要的結(jié)果。

    (6) 調(diào)用engClose()函數(shù)關(guān)閉引擎,釋放內(nèi)存空間并退出。

    整個工作流程是在VC++的圖形界面上繪制出電力系統(tǒng)的連接圖,并將每個圖元的變量名顯示在對應(yīng)的位置,電網(wǎng)經(jīng)過拓?fù)浞治鲋箫@示節(jié)點(diǎn),系統(tǒng)自動記錄輸入的設(shè)備類型和連接關(guān)系。在彈出的參數(shù)設(shè)置窗口中給定對應(yīng)參數(shù)值或者使用程序中的默認(rèn)值,保存后點(diǎn)擊運(yùn)行,系統(tǒng)根據(jù)設(shè)備類型、數(shù)量和連接關(guān)系等信息,結(jié)合開關(guān)的狀態(tài),自動啟動MATLAB引擎執(zhí)行數(shù)學(xué)模型的計(jì)算,最后利用繪圖函數(shù)將結(jié)果顯示,計(jì)算結(jié)果返回到VC++中。

    4 結(jié) 語

    本文基于船舶電力系統(tǒng)模型,結(jié)合VC++和MATLAB兩者的優(yōu)勢,采用圖元的思想,實(shí)現(xiàn)船舶綜合電力系統(tǒng)的可視化界面繪制、拓?fù)浞治龊蛣討B(tài)仿真等功能,充分利用拓?fù)浞治鰧?shí)現(xiàn)系統(tǒng)拓?fù)浣Y(jié)構(gòu)的自動辨識,利用動態(tài)仿真實(shí)現(xiàn)MATLAB在執(zhí)行已經(jīng)賦予參數(shù)的仿真的同時,又時刻訪問VC++端口傳入的參數(shù)。若系統(tǒng)檢測到其結(jié)構(gòu)或設(shè)備參數(shù)被修改,本平臺將可以在不中止上一個仿真的條件下延續(xù)進(jìn)行,達(dá)到參數(shù)變化或結(jié)構(gòu)變化時不中斷仿真的目的。

    猜你喜歡
    圖元繪圖端口
    來自河流的你
    中國三峽(2022年7期)2022-12-02 05:28:02
    “禾下乘涼圖”繪圖人
    一種組態(tài)控件技術(shù)在電力監(jiān)控系統(tǒng)中的運(yùn)用
    一種端口故障的解決方案
    學(xué)術(shù)出版物插圖的編排要求(一):圖注
    聯(lián)鎖表自動生成軟件的設(shè)計(jì)與實(shí)現(xiàn)
    基于HTML5 Canvas繪圖技術(shù)應(yīng)用
    電子測試(2018年4期)2018-05-09 07:28:32
    端口阻塞與優(yōu)先級
    基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實(shí)現(xiàn)
    軟件(2016年12期)2016-02-13 05:58:14
    Surfer和ArcView結(jié)合在氣象繪圖中的應(yīng)用
    河北遙感(2015年2期)2015-07-18 11:11:14
    汽车| 新疆| 禹城市| 平度市| 专栏| 望奎县| 茌平县| 多伦县| 姜堰市| 友谊县| 封开县| 澳门| 电白县| 弥渡县| 凭祥市| 永宁县| 玉溪市| 台江县| 宾川县| 内乡县| 凌云县| 比如县| 扶沟县| 宜昌市| 昭觉县| 竹溪县| 中牟县| 铅山县| 嘉荫县| 清涧县| 博兴县| 府谷县| 保康县| 柘荣县| 舞阳县| 金湖县| 阿坝县| 达拉特旗| 金川县| 洱源县| 额敏县|