亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C#與MATLAB混合編程在內(nèi)彈道設(shè)計中的應(yīng)用*

        2013-12-10 06:40:30高躍飛羅炳華徐鳳軍
        彈箭與制導(dǎo)學(xué)報 2013年5期
        關(guān)鍵詞:七孔火藥彈道

        柯 彪,高躍飛,羅炳華,徐鳳軍

        (1中北大學(xué)機(jī)電工程學(xué)院,太原 030051;2四川九洲電器集團(tuán)有限責(zé)任公司,四川綿陽 621000)

        0 引言

        早期的內(nèi)彈道設(shè)計是把內(nèi)彈道設(shè)計的相關(guān)函數(shù)關(guān)系在給定一些條件下編成內(nèi)彈道設(shè)計表,然后通過查表來解決實(shí)際的內(nèi)彈道設(shè)計問題。目前,隨著計算機(jī)技術(shù)的快速發(fā)展,人們開始編制了多種內(nèi)彈道設(shè)計軟件,可以快速進(jìn)行內(nèi)彈道計算和方案設(shè)計,但還是受開發(fā)語言的限制,軟件人機(jī)交互性差,專業(yè)性強(qiáng),不易于集成。為此,文中結(jié)合C#和MATLAB各自的優(yōu)點(diǎn),利用其混合編程技術(shù),開發(fā)了界面友好、操作簡單、圖形和數(shù)據(jù)管理方便的內(nèi)彈道設(shè)計軟件,利用該軟件根據(jù)設(shè)計評價標(biāo)準(zhǔn)最終可以選出最佳性能的內(nèi)彈道方案,為后續(xù)的炮身、炮架以及彈藥設(shè)計提供了依據(jù),也為未來火炮設(shè)計軟件系統(tǒng)的開發(fā)提供了基礎(chǔ)。

        1 C#與MATLAB混合編程技術(shù)

        1.1 C#與 MATLAB的簡介

        Microsoft Visual C#是 Microsoft專門為使用.NET平臺而開發(fā)的一種強(qiáng)大的、面向組件的語言,可用于方便快捷的創(chuàng)建運(yùn)行在.NET公共語言運(yùn)行庫(common language runtime,CLR)上的Windows應(yīng)用程序[1]。但是其在數(shù)值計算分析和曲線繪圖方面的操作繁瑣,功能薄弱。

        MATLAB是一種用于數(shù)值計算、可視化及編程的高級語言和交互式環(huán)境,可以分析數(shù)據(jù),開發(fā)算法,創(chuàng)建模型和應(yīng)用程序。借助其語言、工具和內(nèi)置數(shù)學(xué)函數(shù),可以快速簡潔的編制所有的各類計算程序和輸出相應(yīng)數(shù)據(jù)。但是MATLAB在用戶界面上的開發(fā)功能還比較簡單,執(zhí)行效率低,難以實(shí)現(xiàn)底層的數(shù)據(jù)輸入 輸出的管理。

        1.2 C#與MATLAB混合編程的實(shí)現(xiàn)

        文中以 Visual Studio.Net 2010與 MATLAB R2009a為例,混合編程實(shí)現(xiàn)的步驟如下:

        1)安裝完Matlab之后,在路徑:Matlab的安裝目錄 oolboxcompilerdeploywin32 下找到 MCRInstall.exe進(jìn)行安裝;然后點(diǎn)擊:我的電腦 -屬性 -高級 -環(huán)境變量-系統(tǒng)變量-PATH-編輯,在變量值輸入框中,不要刪除以前的字符串,在最前面加入MCR的安裝路徑,然后確定、保存、重啟電腦。否者C#創(chuàng)建Matlab的訪問對象時,出現(xiàn)“xxx的類型初始值設(shè)定項引發(fā)異常?!钡腻e誤警告。

        2)在MATLAB的命令窗口直接輸入“deploytool”或者單擊 MATLAB中“Start”按鈕,依次展開MATLAB?MATLAB Builder NE?Deployment Tool,即可使用 MATLAB 的.NET 組件生成功能[2]。

        3)使用Deployment Tool新建一個類型為MATLAB Builder NE的工程project,命名為IBdesign.prj,工程名就相當(dāng)于C#中的命名空間,確定后系統(tǒng)自動在工程下生成同名的文件夾,為了與工程名區(qū)分,最好將文件名改為IBdesignclass,該文件名相當(dāng)于C#中的類名,再向該文件夾下添加已經(jīng)成功編制的一個或多個*m函數(shù)文件,如 IBmixed.m文件,IBmixed類似于C#中類下的方法名。最后就可完成對工程的編譯和打包,只需到工程相應(yīng)的目錄下(..src)就可以找到 dll動態(tài)鏈接庫文件[3]。

        4)C#新建項目并完成界面開發(fā)后,須對剛編譯的dll文件和MWArray.dll文件(在MATLAB安裝目錄 oolboxdotnetbuilderinwin32v2.0文件夾下)進(jìn)行引用[4],另外還需將位于上路徑下的ManagedCPPAPI.netmodule文件拷貝至C#項目目錄inDebug文件夾下。

        5)完成混合編程的前期準(zhǔn)備后,即可在C#代碼區(qū)開始編程實(shí)現(xiàn)對剛引用的dll進(jìn)行調(diào)用,混合編程成功的關(guān)鍵是C#與MATLAB的.NET FrameWork框架版本要相適應(yīng),以及它們之間傳輸參數(shù)個數(shù)的匹配和數(shù)據(jù)類型之間的恰當(dāng)轉(zhuǎn)換。

        2 軟件設(shè)計

        典型的內(nèi)彈道設(shè)計問題可以歸納為在已知的火炮口徑d、彈丸質(zhì)量m和彈丸初速v0的條件下,選擇適當(dāng)?shù)淖畲髩毫m、藥室擴(kuò)大系數(shù)χK以及火藥品種,然后計算出能滿足上述條件的膛內(nèi)構(gòu)造諸元和裝藥條件等眾多未知量,將是一個多解的問題,但是保證武器能夠具有規(guī)定的初速是內(nèi)彈道設(shè)計的根本要求。

        根據(jù)內(nèi)彈道設(shè)計的思路,采用C#與MATLAB混合編程技術(shù),開發(fā)了內(nèi)彈道設(shè)計軟件,實(shí)現(xiàn)了權(quán)限管理、內(nèi)彈道設(shè)計計算、數(shù)值數(shù)據(jù)與圖形處理的功能,具有一定的通用性、可擴(kuò)展性和可集成的特點(diǎn)。該軟件設(shè)計計算部分的核心框架見圖1。

        圖1 內(nèi)彈道設(shè)計計算的核心框架示意圖

        2.1 開發(fā)環(huán)境與安裝要求

        內(nèi)彈道設(shè)計軟件在 Windows操作系統(tǒng)下的Visual Studio 2010集成開發(fā)環(huán)境下開發(fā),根據(jù)用戶需要可以很方便的確定軟件所支持的操作系統(tǒng)位數(shù),數(shù)據(jù)庫采用的是 SQL Server 2008,軟件的.Net Framework框架版本根據(jù)C#與MATLAB的版本要求確定。只需將應(yīng)用程序、數(shù)據(jù)庫安裝包、相同MATLAB版本的MCR運(yùn)行庫及所需要的.Net Framework獨(dú)立安裝包一同打包,通過編寫相應(yīng)的安裝腳本控制順序安裝,就可以使軟件安裝不依賴客戶端的配置,移植性強(qiáng)。

        2.2 軟件功能設(shè)計

        根據(jù)一般工程設(shè)計軟件的要求,內(nèi)彈道設(shè)計軟件的功能設(shè)計有:權(quán)限管理、內(nèi)彈道設(shè)計計算、數(shù)據(jù)管理和圖形處理、歷史記錄、意見反饋以及窗體換膚功能。

        1)權(quán)限管理功能。將軟件使用人員分為系統(tǒng)管理員和一般設(shè)計計算員。根據(jù)內(nèi)彈道設(shè)計所采用的裝藥類型給不同設(shè)計計算員分配各自內(nèi)彈道設(shè)計所需權(quán)限和自身用戶信息管理權(quán)限,彼此獨(dú)立,而系統(tǒng)管理員具有查詢、添加、刪除及導(dǎo)出用戶信息和進(jìn)行所有設(shè)計計算的權(quán)限。

        2)內(nèi)彈道設(shè)計計算功能。將以經(jīng)典內(nèi)彈道模型為基礎(chǔ),適用于簡單形狀火藥(如管狀、帶狀、方片狀等幾種)、多孔火藥(常用的圓柱形七孔、花邊形七孔、花邊形十四孔等幾種)、混合裝藥(以簡單形狀火藥和多孔火藥的混合為例)及鈍感火藥[5]的內(nèi)彈道設(shè)計計算的MATLAB程序修改為m函數(shù)文件,另外編程時也考慮了不同火藥對計算參數(shù)的選取要求。其中多孔火藥在減面燃燒階段用來計算與碎粒斷面相當(dāng)?shù)膬?nèi)切圓半徑ρ的計算系數(shù)與藥形的關(guān)系如表1所示。

        3)數(shù)據(jù)管理功能。主要利用SQL Server 2008完成用戶信息的查詢、添加和刪除操作,以及用戶歷史操作的記錄和意見反饋的管理,這樣就控制軟件的用戶登錄權(quán)限,也為軟件功能的完善提供了基礎(chǔ),同時特別實(shí)現(xiàn)對內(nèi)彈道方案參數(shù)和內(nèi)彈道計算結(jié)果數(shù)據(jù)的備份。

        4)圖形處理功能。借助MATLAB強(qiáng)大的圖形處理功能,內(nèi)彈道計算時可以對需要曲線進(jìn)行實(shí)時顯示,計算后分類保存,同時利用C#還特別定制了內(nèi)彈道曲線處理界面,主要實(shí)現(xiàn)曲線查看、格式轉(zhuǎn)換、復(fù)制與刪除、另存與打印等基本功能。

        5)窗體換膚功能。主要考慮了軟件的外觀與用戶使用舒適性,軟件集成了現(xiàn)有56種皮膚外觀。同時用戶自己也可以開發(fā).*ssk(窗體皮膚文件),并將該文件拷貝至程序當(dāng)前目錄下DebugSkins文件夾下,即可完成窗體皮膚功能的擴(kuò)展。

        2.3 軟件界面設(shè)計

        內(nèi)彈道設(shè)計軟件主界面(見圖2)以內(nèi)彈道參數(shù)錄入、方案評價部分和計算結(jié)果數(shù)據(jù)顯示部分為主體,通過各功能按鈕完成對相應(yīng)子模塊功能的調(diào)用,整個界面布置整潔、緊湊,操作方便。

        表1 藥形和的對照表

        表1 藥形和的對照表

        藥形 ρ 0.5d0+e1圓柱形七孔 0.2956花邊形七孔 0.1547花邊形十四孔 0.1547花邊形十九孔 0.1547圓柱形十九孔 0.3559正六邊形十九孔 0.1864等圓角六邊形十九孔 0.1977

        3 關(guān)鍵技術(shù)及代碼

        3.1 .NET程序集的生成

        圖2 內(nèi)彈道設(shè)計計算軟件的主界面

        編寫相應(yīng)彈道程序并成功調(diào)式運(yùn)行后,再將原計算程序中的關(guān)鍵常數(shù)均替換為變量,作為Function函數(shù)的輸入?yún)?shù),這樣通過MATLAB Builder NE即可將彈道核心計算部分的程序編譯生成dll動態(tài)鏈接庫文件,也就是C#與MATLAB之間通信的接口。另外只需在保證文件名和輸入輸出參數(shù)不變的條件下將修改后的計算程序重新編譯成dll,并在C#中重新引用,不必修改任何C#語言代碼,即可完成.Net程序的升級更新。

        3.2 C#調(diào)用 MATLAB

        用C#實(shí)例化某類型火藥的內(nèi)彈道設(shè)計計算類的對象,通過對象來調(diào)用實(shí)現(xiàn)計算的方法,在保證計算函數(shù)成功引用和C#與MATLAB之間數(shù)據(jù)恰當(dāng)轉(zhuǎn)換的前提下,使用C#編寫內(nèi)彈道設(shè)計計算部分的功能代碼。(雙斜杠"http://"后的文字為解釋性內(nèi)容和行號,調(diào)試時都不被編譯;“……”號代表省略了不重要或類似的代碼)部分代碼:

        ①using MathWorks.MATLAB.NET.Arrays;

        ②using MathWorks.MATLAB.NET.Utility;

        ③using IBsimplepowderNet;

        ④……

        ⑤private void btn內(nèi)彈道計算_Click(object sender,EventArgs e)

        ⑥{……

        ⑦switch(裝藥comboBox.SelectedItem.ToString())

        ⑧{

        ⑨case"簡單形狀火藥":

        ⑩try

        ?{//實(shí)例化計算簡單火藥內(nèi)彈道的類

        ?IBsimplepowderClass simplepowder=new IBsimple powderClass();

        ?MWArray[]result1=simplepowder.IBsimple

        (16,(MWNumericArray)d,(MWNumericArray)v0,……);

        ?MWNumericArray pm=(MWNumericArray)result1[0];

        ?pm_txt.Text=pm.ToScalarDouble(). ToString();

        ?……

        ?MWNumericArray t=(MWNumericArray)result1[8];

        //將matlab輸出列向量轉(zhuǎn)換到C#中

        ?double[]loc_t=null;

        ?loc_t=(double[])t.ToVector(MWArray

        Component.Real);

        ?catch(Exception)

        ?{MessageBox.Show("請檢查輸入?yún)?shù)是否匹配?",……);}

        ?break;

        ?case"多孔火藥": //多孔火藥計算部分

        ?……

        ?break;

        ?省略混合、鈍感火藥內(nèi)彈道設(shè)計的代碼……

        其中第1~2行為C#與MATLAB混合編程必須引用的命名空間,第3行為引用MATLAB編譯了的簡單火藥(其他火藥類似)內(nèi)彈道設(shè)計計算程序集,第7行switch語句選擇裝藥類型及藥形,第13行調(diào)用計算簡單火藥內(nèi)彈道的方法,第14~15行取出計算結(jié)果的每個值,并轉(zhuǎn)化為string類型,顯示在窗口中顯示出來,第19行將結(jié)算結(jié)果中的列向量轉(zhuǎn)化為C#中的數(shù)據(jù)類型。程序中try{}catch{}代碼捕獲程序突發(fā)異常和參數(shù)輸入不當(dāng)異常。

        3.3 數(shù)據(jù)管理

        該軟件涉及到的數(shù)據(jù)管理有:用戶信息、歷史記錄與意見反饋,計算數(shù)值結(jié)果與曲線。在軟件底層利用C#編寫連接字符串來連接SQL Server數(shù)據(jù)庫,通過C#開發(fā)的用戶界面即可方便快速的完成數(shù)據(jù)的查詢、添加、刪除、導(dǎo)出與打印等功能,同時直接利用MATLAB強(qiáng)大的繪圖功能和C#強(qiáng)大的文件輸入輸出功能,就可完全的完成計算數(shù)據(jù)的管理。

        4 計算分析實(shí)例

        軟件對100mm加農(nóng)炮(其采用單一管狀藥)、85mm加農(nóng)炮(其采用圓柱形七孔火藥)[6]、122mm榴彈炮(其采用管狀藥和圓柱形七孔火藥的混合裝藥)及35mm高炮(其采用鈍感火藥)的內(nèi)彈道設(shè)計計算進(jìn)行了算例的定制。

        下面以采用圓柱七孔火藥的85mm加農(nóng)炮內(nèi)彈道設(shè)計計算為例,計算結(jié)果如表2所示,和現(xiàn)有制式同類火炮的評價標(biāo)準(zhǔn)接近,說明 C#與MATLAB混合編程技術(shù)在內(nèi)彈道設(shè)計計算中應(yīng)用是可行的。

        表2 85mm加農(nóng)炮多孔火藥內(nèi)彈道設(shè)計計算評價標(biāo)準(zhǔn)

        5 結(jié)論

        通過對C#與MATLAB混合編程技術(shù)的研究,完成了不同類型火藥的內(nèi)彈道設(shè)計計算軟件的開發(fā)。該軟件操作方便快捷,具有良好的人機(jī)交互性和集成性,可以為未來火炮設(shè)計軟件的開發(fā)提供基礎(chǔ),另外文中采用的經(jīng)典內(nèi)彈道模型可進(jìn)一步拓展至其改進(jìn)型和考慮兩相流的內(nèi)彈道模型,還有該混編技術(shù)也可以在外彈道、身管設(shè)計計算、炮口制退器、反后坐裝置等火炮常規(guī)計算中推廣使用,為火炮的現(xiàn)代計算機(jī)輔助設(shè)計提供了一種思路。

        [1]馬煜,陳海軍.Visual C#.NET案例開發(fā)集綿[M].北京:電子工業(yè)出版社,2008.

        [2]羅炳華,高躍飛,劉榮華,等.基于MATLAB與C#的火炮CAD系統(tǒng)開發(fā)和優(yōu)化設(shè)計[J].火炮發(fā)射與控制學(xué)報,2010(2):44-47.

        [3]鄭暉,王勇.C#與Matlab混合編程技術(shù)在數(shù)字地震信號處理軟件中的應(yīng)用[J].地震地磁觀測與研究,2011,32(2):101-105.

        [4]張燕,馬永杰.Visual C#與MATLAB混合編程方法及其實(shí)現(xiàn)[J].西北師范大學(xué)學(xué)報,2008,44(6):34 -37.

        [5]劉雙杰,郝永乎.35mm高射炮鈍感發(fā)射藥的內(nèi)彈道仿真[J].彈箭與制導(dǎo)學(xué)報,2010,30(1):170 -172.

        [6]金志明.槍炮內(nèi)彈道學(xué)[M].北京:北京理工大學(xué)出版社,2004.

        猜你喜歡
        七孔火藥彈道
        長生不老藥和火藥
        彈道——打勝仗的奧秘
        神奇的火藥
        大灰狼畫報(2022年2期)2022-05-23 12:57:10
        火藥的來歷
        游大小七孔
        一維彈道修正彈無線通信系統(tǒng)研制
        電子制作(2019年7期)2019-04-25 13:17:48
        “火藥弟弟”
        貴州大小七孔
        基于PID控制的二維彈道修正彈仿真
        消除彈道跟蹤數(shù)據(jù)中伺服系統(tǒng)的振顫干擾
        伊人久久精品亚洲午夜| 亚洲一区sm无码| 波多野无码AV中文专区| 国产三级不卡在线观看视频| 亚洲高清一区二区三区在线观看| 中文字幕日本在线乱码| 亚洲a∨无码精品色午夜| 国产白丝无码视频在线观看| 永久免费观看的毛片手机视频 | 国产大片黄在线观看| 东北老女人高潮大喊舒服死了| 欧美色aⅴ欧美综合色| 久久精品国产亚洲AV无码不| 国产国语一级免费黄片| 精品国产乱子伦一区二区三| 色欲人妻aaaaaaa无码| 长腿校花无力呻吟娇喘的视频| 99精品视频69v精品视频免费| 日本女优中文字幕亚洲| 天天爽夜夜爽人人爽| 精品久久久久久无码国产| 亚洲综合五月天欧美| 国产熟女露脸大叫高潮| 丰满少妇人妻久久精品| 无码av天堂一区二区三区| 日日碰狠狠躁久久躁96avv| 国产亚洲精品综合在线网址| 亚洲精品中文字幕不卡| 久久青青草原国产毛片| 99久久人妻精品免费二区| 欧美日本道免费二区三区| 国产一区在线视频不卡| 领导边摸边吃奶边做爽在线观看 | 欧美大片aaaaa免费观看| 色一情一乱一伦一区二区三欧美| 日本人妻av在线观看| 国产乱人伦偷精品视频还看的| 18禁裸体动漫美女无遮挡网站| 男女上下猛烈啪啪免费看| 麻豆五月婷婷| 国产成人午夜av影院|