国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于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)仿真需求制作的,針對性不強。VTB是美國QSI集團開發(fā)的一款軟件,其中包含船舶綜合電力系統(tǒng)仿真的模型,因而對船舶電力系統(tǒng)的仿真針對性更強,但是VTB對外保密,沒有實現(xiàn)通用。哈爾濱工程大學(xué)在船舶電力系統(tǒng)仿真平臺的研究和開發(fā)方面已經(jīng)有多年的積累,在理論、平臺搭建和仿真方面都取得了一定的成果,但由于各方面原因,仍未能實現(xiàn)通用。

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

1 平臺的需求分析

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

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

2.1 平臺組成介紹

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

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

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

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

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

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

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

2.2.1 圖元繪制

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

圖2 工具欄示例

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

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

圖3 仿真平臺繪制界面

2.2.2 圖元操作

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

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

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

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

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

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

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

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

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

2.3 拓撲分析

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

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

拓撲分析的本質(zhì)是分析圖元的端口坐標或者比較節(jié)點的參數(shù)值。每個圖元在繪制或移動過程中端口的坐標會保存到圖元類中,當(dāng)兩個圖元端口的坐標值相同時就將圖元的ID號存入到數(shù)組中。拓撲分析可分為以下幾個步驟。

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

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

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

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

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

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

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

拓撲分析的流程如下:

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

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

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

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

下面舉例說明拓撲分析的情況。繪制的船舶電力系統(tǒng)圖如圖5所示,相對應(yīng)的拓撲分析結(jié)果如圖6所示。

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

圖6 拓撲分析結(jié)果圖

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

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

(1) 打開一個MATLAB引擎。在VC++應(yīng)用程序中通過調(diào)用engOpen()函數(shù)能夠方便地打開一個MATLAB進程。應(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()實現(xiàn)這一操作,數(shù)據(jù)傳輸?shù)組ATLAB工作空間后就在MATLAB計算中被相應(yīng)的變量使用。

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

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

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

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

4 結(jié) 語

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

猜你喜歡
圖元繪圖端口
來自河流的你
中國三峽(2022年7期)2022-12-02 05:28:02
“禾下乘涼圖”繪圖人
一種組態(tài)控件技術(shù)在電力監(jiān)控系統(tǒng)中的運用
一種端口故障的解決方案
學(xué)術(shù)出版物插圖的編排要求(一):圖注
聯(lián)鎖表自動生成軟件的設(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)化研究與實現(xiàn)
軟件(2016年12期)2016-02-13 05:58:14
Surfer和ArcView結(jié)合在氣象繪圖中的應(yīng)用
河北遙感(2015年2期)2015-07-18 11:11:14
郓城县| 新闻| 驻马店市| 张掖市| 桂林市| 旺苍县| 页游| 达州市| 陵川县| 调兵山市| 桂平市| 铜山县| 静海县| 丹阳市| 新邵县| 房产| 尚义县| 怀来县| 台东市| 敦煌市| 静乐县| 霍城县| 长寿区| 内乡县| 安徽省| 南投县| 民乐县| 桐庐县| 元江| 广东省| 库伦旗| 丹江口市| 沙河市| 龙岩市| 察雅县| 吉林市| 团风县| 武宣县| 苍山县| 永修县| 乌海市|