王亞偉,吳杰長,常廣暉,蘇攀,張宇
(海軍工程大學動力工程學院,湖北武漢430033)
眾所周知,艦船動力裝置訓練模擬器是模擬實船機艙設備操作、培養艦員專業技能的有效器材,可為艦船動力裝置操作人員提供高效的訓練手段,近年來得到了廣泛應用,目前艦船動力裝置訓練模擬器普遍采用工控機、大量信號I/O卡、及專用仿真軟件平臺的基本架構,其復雜的仿真模型及信號I/O有賴于微機及復雜的信號采集系統。該類基于工控PC機和專用仿真平臺的動力裝置訓練模擬器存在開發周期長、成本高、占用場地大、靈活性差以及不便大規模推廣應用等缺陷。隨著我國海軍裝備快速發展,設備的更新換代越來越快,傳統的動力裝置模擬器開發方式很難滿足要求。因此,基于模型代碼生成的嵌入式仿真訓練模擬器近年來得到了高度重視,其相對而言具有開發周期短、成本低、擴展性好和便于推廣等特點,既適合構建傳統的岸基訓練模擬器、也可用于實船訓練系統,其關鍵技術問題是在于如何生成有效的動力裝置嵌入式模型代碼。
針對以上問題,文中特此以噴水推進系統嵌入式模擬器開發為例,對基于Simulink的噴水推進系統建模和嵌入式代碼生成與應用等關鍵技術問題進行了研究。通過試驗驗證了該方法的有效性和噴水推進系統嵌入式模擬器開發的可行性。
根據噴水推進系統基本構成和船、機、泵配合關系,采用機理建模方法和模塊化分解建模思路將系統劃分為柴油機-噴泵子系統和噴泵-船體子系統,分別對各子系統建模后集成為總體仿真模型。
模擬器開發中重點關注柴油機轉矩轉速等參數的響應,按照通常的建模方法,將其簡化為多個反應輸入、輸出關系的數學表達式。為了便于代碼生成,將復雜的輸入、輸出關系轉化為表格數據,通過查表的方式來反應柴油機轉速轉矩等參數的響應。柴油機建模相關內容可參照參考文獻[1-4]。
根據噴水推進裝置基本工作原理,由動量定理和流體力學知識可以建立噴水推進系統數學模型[5]。由單位時間內噴泵進出口動量的變化量即推力可表達為:

式中,Q為水泵的流量,Vj為噴嘴的截面積噴射的速度;ρ為水的密度;Vs為船速。另外,根據管道中水流的連續性,可得流量與噴口速度之間的公式:

式中,Aj為噴口面積。
考慮噴水推進器在實際工作中存在噴口損失和管道損失,分別用噴射速度頭百分比和來流速度頭百分比表示損失[6],可得泵的揚程為:

式中,kj為噴口損失系數;k為管道損失系數;Δh為噴泵內水位差值;g為重力加速度。根據式(1)可知,只有先求出流量Q,才能求出噴泵的推力,由于噴水推進裝置實際工作點是由推進系統所需要的壓頭與噴泵提供的壓頭平衡點決定,根據Giov-anni Benevento等人做的噴泵試驗數據[7-8],可得到噴泵所能提供的壓頭Hp:

式中,np為噴泵給定轉速;np0為實驗參考轉速;a,b,c為待定常數。令H=Hp,聯立式(2)、(3)和(4),可求得噴泵的流量Q,進而得到噴泵產生的推力T,并可利用公式(5)計算出噴泵扭矩Mp。

式中,np為噴泵的轉速;ηp為噴泵推進效率;ηr為噴泵相對旋轉效率;ηm為機械效率。
由牛頓第二定律可得機泵相互作用的動力學方程為:

式中,Me為柴油機扭矩;Mf為摩擦損失扭矩;i齒輪減速比;J為整個噴水推進系統的轉動慣量;ω為軸系的角速度。
噴水推進器船實際工作中運動較復雜,為簡化模型,只取船舶前進方向的一維運動分析,由此可得噴泵與船體相互作用動力學方程為[9]:

式中,MS為船體總質量;MSAD為船體附加水質量;T為噴水推進器推力;R為船體阻力,可簡化為航速的函數,即:

在建立上述兩個子系統數學模型的基礎上,采用Simulink仿真工具建立噴水推進系統整體仿真模型如圖1所示,用于下文所研究的嵌入式代碼生成。

圖1 系統仿真圖
對噴水推進全系統進行驗證,利用所建的模型進行單機單泵加速運行工況下仿真計算,仿真結果如圖2所示。圖2曲線中所有穩態數據與實驗數據[10]之間的平均誤差在6%以內,說明本文所建立的數學模型能可以很好地擬噴水推進系統總體工作情況,能夠滿足模型嵌入代碼生成要求。

圖2 單機單泵加速工況曲線
模型配置是代碼生成過程必不可少的環節,對于建立好的Simulink仿真模型,要實現C代碼的生成需要選擇定步長仿真算法,相關參數可在Solver option選項中設置。
Simulink模型的輸入輸出參數設置可在該信號線的信號設置中完成,將所用到的信號屬性均設置為ExportedGlobal。
此外,還應在代碼生成選項中選擇目標代碼類型,也就是(TLC)最終生成的代碼類型,這里選擇嵌入式C代碼類型的ert.tlc。相關設置如表1所示[11]。

表1 參數設置
定標處理是模型代碼生成的必備條件。一方面,通常單片機處理的都是定點計算類型的數據,為了保證控制器始終進行定點運算,必須對模型中的所有變量進行定標處理[12],即在滿足計算精度的同時保證計算過程不會溢出的前提下,設置變量的大小和精度范圍。另一方面,若代碼生成前未進行定標處理,變量默認的數據類型為double型,模型生成的源代碼將占用較大內存空間,可能會超出單片機內存而使系統無法正常運行;而定標處理后,變量數據類型為定點型,源代碼所占用的內存將大大減少,這樣可提高單片機的運行速度。表2所列出的是本文中輸入、輸出變量數據類型轉換,數據類型fixdt(0,32,23,0)首位“0”表示無符號位,“32”表示數據位數,“23”表示小數位數,末位“0”表示數據范圍的偏移量。

表2 定標前后變量數據類型
基于模型的代碼生成是利用Matlab軟件中的RTW工具箱,將Simulink模型轉化為目標機器源代碼,在此基礎上使用KEIL編譯環境建立工程文件,其代碼生成流程如圖3所示。針對不同的硬件系統,開發人員可利用RTW工具箱中的TLC(目標語言編譯器)生成相應目標硬件的驅動程序[13]。

圖3 代碼生成流程
文中在Matlab中預先安裝好支持的編譯器VC++2012,在命令窗口輸入mex-setup,根據系統提示,選擇當前安裝的編譯器。配置好相關參數后,點擊build按鈕可以生成模型代碼,系統自動產生一個DiselJetHull_ert_tlc文件夾,里面包含模型的源文件、頭文件和其它代碼說明文件,如圖4所示。這些源代碼包含了模型的數據結構、數據類型、各子系統代碼和輸入輸出接口函數,且生成的源代碼結構組成順序以及結構體結構符合C語言結構模式。其中DiselJetHull.c是實現模型功能的代碼,Disel?JetHull_data.c為模型的初始參數數據,DiselJetHull.h是包含參數和狀態變量定義的頭文件,其它文件:rt_look.h,rtwtypes.h,rtGetInf.h等為RTW所需的必要配置文件[14-15]。
代碼的移植與集成即實現模型代碼到嵌入式代碼的轉化。在keil中新建一個工程文件,將模型代碼加入到工程中,編寫其它相關的接口程序,實現模型代碼與編寫的接口函數的集成。

圖4 生成的文件及代碼
VC++2012/keil與Simulink的集成是通過VC++2012/keil編程驅動C++模型代碼中的initialize、terminate和rt_OneStep 3個函數來實現的。顧名思義,這3個函數分別實現了模型的初始化、停止和單步運算。如圖5所示是生成的代碼執行流程圖,在主函數中循環調用JET_HULL_step函數,每調用一次,就會計算出一組結果,并可對計算結果實時提取[16-20]。

圖5 代碼執行流程
集成的部分main函數如下所示,其中
rt_OneStep()函數是模型單步運算函數[12]。


在完成基于Simulink模型生成代碼的基礎上,還需編寫相關的輸入、輸出接口程序,才能構建出完整的嵌入式系統的工程文件。利用KEIL編譯軟件新建工程,編寫相應的輸入輸出接口程序,并將基于模型生成的源文件和頭文件添加到工程中,編譯無誤后下載到單片機中運行。本文嵌入式系統硬件平臺選用STM32F103ZET開發板,將PA0作為輸入口,PA5作為輸出口。試驗裝置如圖6所示,輸入接入與Simulink仿真模型相同的設定轉速,由D/A輸出、并通過示波器讀出輸出的船速仿真信號。

圖6 試驗裝置
為了驗證生成代碼的有效性,設定相同的轉速輸入,對比Simulink仿真模型的輸出與硬件電路I/O信號輸出進行校驗。實船為四機四泵裝置,本文選用雙機雙泵工作模式進行試驗驗證。給定Simulink模型設定轉速輸入序列為(t0,700 rpm;t0+200,1 900 rpm;t0+800,1 200 rpm),圖7為Simulink模型對應的航速輸出,可見對應不同的轉速檔,船速分別穩定在4.8 kn、18.6 kn和11.6 kn。試驗裝置通過PA0口設定相同的轉速輸入,單片機D/A口輸出的航速信號,如圖8所示。由圖7和圖8對比可知,在采樣時間內仿真結果與模型嵌入單片機后的輸出信號一致。

圖7 船速仿真圖

圖8 示波器顯示
文中對基于模型的代碼生成技術及其在噴水推進系統嵌入式模擬器中的應用方法進行了深入研究。介紹了基于sinulink模型利用RTW工具箱生成代碼過程,通過試驗驗證了該方法的有效性以及噴水推進系統嵌入式模擬器開發方案的可行性。本文所使用的開發方法相比以往基于工控PC機模擬器的開發更加簡單,基于模型的代碼生成技術能夠簡化開發過程中的編程環節,使得嵌入式開發便捷有效。該方法可為其它艦艇動力裝置嵌入式模擬訓練器的開發提供參考。