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

?

FORTRAN與VB混合編程在船用柴油機(jī)工作過程計(jì)算中的應(yīng)用

2011-08-11 01:47趙茹嫦王銀燕李余良
船舶 2011年4期
關(guān)鍵詞:模擬計(jì)算冷器調(diào)用

趙茹嫦 王銀燕 李余良

(哈爾濱工程大學(xué) 動(dòng)力與能源工程學(xué)院 哈爾濱150001)

0 引 言

FORTRAN語言結(jié)構(gòu)縝密,語法嚴(yán)謹(jǐn),自誕生以來積累了大量高效而可靠的源程序,廣泛地應(yīng)用于并行計(jì)算和高性能計(jì)算等領(lǐng)域。但由于FORTRAN數(shù)據(jù)的輸入輸出是在DOS界面里完成的,圖形功能弱,計(jì)算結(jié)果可視化存在缺陷,給用戶的使用帶來很多不便。而VB作為一種Windows軟件開發(fā)語言,可視化圖形功能強(qiáng),開發(fā)效率高,采用面向?qū)ο蟮木幊趟枷耄褟?fù)雜的設(shè)計(jì)問題分解為多個(gè)能夠完成獨(dú)立功能的對(duì)象的集合。利用VB的圖形功能實(shí)現(xiàn)FORTRAN計(jì)算程序的可視化,對(duì)充分利用原有FORTRAN計(jì)算程序具有很大的實(shí)際意義。

1 VB與FORTRAN混合編程

1.1 基本思想

用VB和FORTRAN兩種語言混合開發(fā)計(jì)算軟件的方法一般有兩種:

(1)用VB設(shè)計(jì)界面及控制程序,將FORTRAN程序編譯成DLL動(dòng)態(tài)鏈接庫(kù),再由VB程序調(diào)用FORTRAN動(dòng)態(tài)鏈接庫(kù)。其中,數(shù)據(jù)交換由參數(shù)傳遞來實(shí)現(xiàn);

(2)用VB設(shè)計(jì)界面,將FORTRAN應(yīng)用程序編譯成可執(zhí)行的*.exe應(yīng)用程序,由VB應(yīng)用程序直接調(diào)用,最終結(jié)果顯示在VB界面上。在整個(gè)運(yùn)行過程中,F(xiàn)ORTRAN應(yīng)用程序在后臺(tái)運(yùn)行,VB和FORTRAN間的數(shù)據(jù)交換均通過磁盤文件進(jìn)行,設(shè)計(jì)流程如圖1所示[1]。

圖1 VB調(diào)用FORTRAN外殼程序

第一種方法需要解決參數(shù)傳遞的問題。由于參數(shù)較多,還需要構(gòu)造動(dòng)態(tài)鏈接庫(kù),比較復(fù)雜,因此只適合于計(jì)算量小、參數(shù)少的情況;而第二種方法簡(jiǎn)單明了,適合于計(jì)算量較大、交互操作不多的情況。因此,對(duì)于船用柴油機(jī)工作過程數(shù)值模擬計(jì)算程序的可視化編程,適合選用第二種方法。

1.2 調(diào)用方法及技術(shù)難點(diǎn)

用VB調(diào)用FORTRAN程序編譯的.exe文件時(shí),首先利用VB中的shell函數(shù)啟動(dòng)FORTRAN應(yīng)用程序。在啟動(dòng)FORTRAN的過程中,將會(huì)遇到三個(gè)常見的問題:

(1)shell函數(shù)是以異步方式執(zhí)行的,這種執(zhí)行方式不能等待FORTRAN程序結(jié)束而將繼續(xù)執(zhí)行后續(xù)VB程序,使VB得不到最終的數(shù)據(jù)而出錯(cuò);

(2)由于VB是直接運(yùn)行于Windows平臺(tái)的,而FORTRAN是一種基于DOS平臺(tái)的應(yīng)用程序,在Windows平臺(tái)運(yùn)行DOS應(yīng)用程序時(shí),會(huì)退出Windows而進(jìn)入到DOS界面,出現(xiàn)“黑屏”現(xiàn)象。此外,即使Windows平臺(tái)的DOS程序終止運(yùn)行,DOS也不能自動(dòng)關(guān)閉,返回到 Windows 平臺(tái)[2];

(3)由FORTRAN編制的柴油機(jī)工作過程計(jì)算程序的輸入數(shù)據(jù)是通過*.txt文件輸入的,要使FORTRAN進(jìn)入計(jì)算,需要提供符合FORTRAN程序格式要求的數(shù)據(jù)文本。

因此,解決以上三個(gè)問題是實(shí)現(xiàn)船用柴油機(jī)工作過程數(shù)值計(jì)算可視化的關(guān)鍵。

1.3 用API函數(shù)對(duì)外殼程序進(jìn)行同步調(diào)用

用Win32 API提供的有關(guān)進(jìn)程操作函數(shù)可以解決外殼程序的異步運(yùn)行問題。首先用CreatProcess函數(shù)建立FORTRAN外殼進(jìn)程句柄,然后通過WaitForSingleObject函數(shù)等待外殼進(jìn)程終止,Close Handle函數(shù)用于將打開的進(jìn)程對(duì)象關(guān)閉[3]。這些函數(shù)需要在VB中事先聲明。其中CreateProcess函數(shù)有10個(gè)參數(shù),參數(shù)IpStartupInfo用來指向一個(gè)STARTUPINFO類型的結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)將指定如何顯示外殼應(yīng)用程序窗口。

當(dāng)其成員dwflags的值等于1時(shí),表示另一個(gè)成員wShowWindow有效;當(dāng)wShowWindow的值等于0時(shí),表示隱藏外殼應(yīng)用程序的窗口。這樣的操作就隱藏了DOS平臺(tái),即不會(huì)出現(xiàn)“黑屏”的現(xiàn)象。

此外,在WaitForSingleObject函數(shù)中,參數(shù)dwMilliseconds表示VB應(yīng)用程序等待事件的最長(zhǎng)時(shí)間。當(dāng)其值等于-1時(shí),表示可以進(jìn)行無限長(zhǎng)的等待下去,直到外殼應(yīng)用程序結(jié)束。因此,除了在VB中預(yù)先聲明上述函數(shù)之外,還要聲明下列常量和數(shù)據(jù)結(jié)構(gòu):

啟動(dòng)并等待外殼程序的實(shí)現(xiàn)方法,代碼如下:

1.4 Shell函數(shù)異步執(zhí)行的同步化

如果用VB的Shell函數(shù)來運(yùn)行FORTRAN外殼程序,可利用API函數(shù)OpenProcess和CloseHandle或OpenProcess和GetExitCodeProcess來實(shí)現(xiàn)等待Shell程序的執(zhí)行,從而解決shell函數(shù)異步執(zhí)行的問題,具體實(shí)現(xiàn)參見下列示例代碼。

在利用Shell函數(shù)調(diào)用外部程序的過程中,只要在shell()語句之后加入循環(huán)調(diào)用StillRun()函數(shù)的代碼,就可時(shí)刻監(jiān)視shell函數(shù)所執(zhí)行的外部程序運(yùn)行狀態(tài),直到 stillrun()返回 false 時(shí),才執(zhí)行 shell()語句的后續(xù)程序。

對(duì)于shell函數(shù)啟動(dòng)外殼DOS程序時(shí)出現(xiàn) “黑屏”的問題,解決的辦法是將shell函數(shù)的第二個(gè)可選參數(shù)設(shè)為vbHide。這樣在殼程序運(yùn)行時(shí),DOS窗口會(huì)自動(dòng)隱藏。同時(shí),在Windows環(huán)境下右擊該DOS應(yīng)用程序文件名,選擇“屬性”項(xiàng),在“屬性”對(duì)話框的“程序”標(biāo)簽下,選中“退出時(shí)關(guān)閉窗口”復(fù)選框,此時(shí)將生成該DOS應(yīng)用程序的PIF文件。以后在Windows環(huán)境下運(yùn)行該應(yīng)用程序時(shí),程序結(jié)束后會(huì)自動(dòng)關(guān)閉DOS窗口而返回Windows狀態(tài)。

1.5 由VB生成FORTRAN輸入文件

FORTRAN的原始數(shù)據(jù)讀入為*.txt文件輸入方式。為了實(shí)現(xiàn)可視化輸入,在VB調(diào)用FORTRAN的*.exe應(yīng)用程序的同時(shí),將為FORTRAN程序創(chuàng)建一個(gè).txt數(shù)據(jù)讀入文件。具體操作為:首先,根據(jù)FORTRAN程序中的輸入數(shù)據(jù)屬性,編制VB可視化界面,對(duì)輸入?yún)?shù)合理布局,再將輸入數(shù)據(jù)存儲(chǔ)到一個(gè)無窮大的數(shù)組空間內(nèi);待輸入完畢,數(shù)組中的輸入數(shù)據(jù)將按FORTRAN計(jì)算程序本身要求的格式排列,存入*txt文件中,為FORTRAN程序的計(jì)算做好準(zhǔn)備。實(shí)現(xiàn)過程可用圖2來說明。

圖2 輸入文件創(chuàng)建過程

2 在內(nèi)燃機(jī)工作過程數(shù)值模擬計(jì)算中的應(yīng)用

根據(jù)計(jì)算機(jī)型的基本情況,輸入需要設(shè)置的參數(shù)。輸入界面如圖3所示。首先,通過多項(xiàng)選擇按鈕選擇計(jì)算的機(jī)型是柴油機(jī)還是汽油機(jī)、二沖程還是四沖程,并在輸入框中輸入氣缸數(shù);其次,輸入發(fā)動(dòng)機(jī)整體幾何參數(shù),比如缸徑、行程、壓縮比等,選擇是否有中冷器以及有無增壓,若增壓則選擇增壓型式,是脈沖還是定壓;第三,設(shè)置燃燒參數(shù),選擇燃燒模型,設(shè)置燃油含碳量和低熱值等參數(shù);最后,點(diǎn)擊按鈕,對(duì)進(jìn)排氣系統(tǒng)、增壓器、中冷器進(jìn)行單獨(dú)設(shè)置,點(diǎn)擊計(jì)算初始化,對(duì)計(jì)算中的初始條件進(jìn)行設(shè)定。

圖3 基本參數(shù)設(shè)置界面

程序還設(shè)置了輸入提示功能。比如,在中冷器復(fù)選框中未選擇有中冷選項(xiàng),點(diǎn)擊中冷器按鈕,就會(huì)彈出“是否中冷”提示框,若選擇“是”(如圖4),鼠標(biāo)則返回到中冷器設(shè)置復(fù)選框,同時(shí)進(jìn)入到中冷器設(shè)置界面。

進(jìn)入計(jì)算前,還需對(duì)部分參數(shù)進(jìn)行初始化設(shè)置。點(diǎn)擊計(jì)算初始化,進(jìn)入圖5所示界面。對(duì)壓力和溫度設(shè)一初值,程序?qū)⒏鶕?jù)初值進(jìn)行迭代計(jì)算,在計(jì)算要求的精度內(nèi)收斂,程序繼續(xù)運(yùn)行。

為了驗(yàn)證本軟件 (命名為MCY軟件)的正確性,用MCY軟件對(duì)某柴油機(jī)工作過程進(jìn)行了模擬計(jì)算,計(jì)算結(jié)果與實(shí)驗(yàn)值進(jìn)行對(duì)比,同時(shí)也與商業(yè)軟件GT-POWER進(jìn)行對(duì)比計(jì)算。

圖4 選擇中冷的提示功能

圖5 初始值設(shè)置界面

圖6 示功圖對(duì)比曲線

圖7 排氣總管壓力波變化曲線

圖6為在發(fā)動(dòng)機(jī)轉(zhuǎn)速為1 000 r/min時(shí),MCY軟件計(jì)算示功圖與試驗(yàn)示功圖的比較。可以看出,兩者在變化趨勢(shì)上基本一致,著火前期存在一定誤差,達(dá)到最高壓力之后,曲線基本吻合。經(jīng)計(jì)算,最大爆壓的相對(duì)誤差在允許范圍內(nèi)。圖7為排氣管內(nèi)的壓力波動(dòng)曲線。從曲線整體上可以看出,MCY軟件計(jì)算結(jié)果波動(dòng)略大于GT計(jì)算結(jié)果,但兩者波動(dòng)趨勢(shì)基本一致。

3 結(jié) 語

本文重點(diǎn)討論了在VB對(duì)FORTRAN可執(zhí)行程序的調(diào)用,以及在調(diào)用過程中將會(huì)遇到的問題,并提出了解決方案。

本文提供的方法,在不改變FORTRAN程序本身,保持其算法和強(qiáng)大的數(shù)值計(jì)算功能的前提下,通過和VB的混合編程,開發(fā)出一個(gè)可視化的數(shù)值模擬計(jì)算系統(tǒng),實(shí)現(xiàn)了FORTRAN程序的可視化輸入,提高了原程序的使用效率,對(duì)類似的程序改進(jìn)具有重要的指導(dǎo)意義和參考價(jià)值。對(duì)FORTRAN程序的改進(jìn)設(shè)計(jì),并不影響到原程序的功能和獨(dú)立性。FORTRAN程序作為一個(gè)獨(dú)立的數(shù)值計(jì)算模塊,既可以與VB程序編制的界面集成使用,又可以單獨(dú)使用。

[1]蒲軍平,劉鵬.VB界面設(shè)計(jì)與FORTRAN數(shù)值計(jì)算功能的組合應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件.2010,27(12):148-150.

[2]楊華保,田宏星,劉健,陳永新.FORTRAN程序的可視化管理設(shè)計(jì)研究[J].航空計(jì)算技術(shù),2009(4):94-97.

[3]張學(xué)強(qiáng),鄭公營(yíng).VB調(diào)用C和Fortran自定義動(dòng)態(tài)庫(kù)函數(shù)聯(lián)合編程[J].工程物理地球?qū)W報(bào).2010,7(1):55-59.

[4]周方,戴村供,詹友基.排氣系統(tǒng)模擬計(jì)算程序的開發(fā)[J].福建工程學(xué)院學(xué)報(bào),2005,3(1):87-90.

猜你喜歡
模擬計(jì)算冷器調(diào)用
R1234ze PVTx熱物性模擬計(jì)算
齊魯石化氯堿廠采用干冰新技術(shù)清理空冷器
復(fù)合混流式中冷器性能研究
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
系統(tǒng)虛擬化環(huán)境下客戶機(jī)系統(tǒng)調(diào)用信息捕獲與分析①
民用飛機(jī)APU艙門蒙皮結(jié)構(gòu)對(duì)排液的影響分析
鋁合金空-空中冷器符合翹片管材料選擇與結(jié)構(gòu)匹配
實(shí)際發(fā)射工況下底排藥柱結(jié)構(gòu)完整性的模擬計(jì)算
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
集成水空中冷器的進(jìn)氣模塊
长治县| 哈尔滨市| 恩施市| 上林县| 弥渡县| 饶平县| 宝山区| 屏山县| 奉贤区| 梅州市| 尖扎县| 辽中县| 巴东县| 广南县| 皮山县| 台北市| 鄂温| 苏尼特右旗| 昭通市| 双牌县| 什邡市| 梅州市| 常熟市| 南宫市| 色达县| 晋江市| 三河市| 辽源市| 云龙县| 广德县| 哈密市| 依兰县| 汨罗市| 乡宁县| 濮阳县| 类乌齐县| 江门市| 木里| 丁青县| 平昌县| 钦州市|