徐劍琴,李克訥,梁奇峰(. 廣西科技大學工程訓練中心; . 廣西科技大學電氣與信息工程學院,廣西 柳州 545006)
?
MATLAB/Simulink下實現實時一些方法總結
徐劍琴1,李克訥2,梁奇峰1
(1. 廣西科技大學工程訓練中心; 2. 廣西科技大學電氣與信息工程學院,廣西 柳州 545006)
摘 要:總結了使用MATLAB/Simulink進行實時仿真時實現實時的幾種方法,包括使用Real-time Workshop和編寫S函數的方法,同時通過實驗檢驗了C語言S函數實時模塊的功能。經仿真測試表明,在對時間精度要求不是很高的過程進行實時仿真和分析時,可以得到較好的效果。
關鍵詞:實時;MATLAB/Simulink;Real-time Workshop;S函數
仿真技術由于能省去了實物系統實現過程中的繁瑣步驟,對問題的解決有著良好的針對性,因此給科研和試驗提供了很大的便利[1-3]。但另一方面,仿真由于對模型的依賴性,其結果并很難完全反映實際情況。因此,為了得到更接近實際情況的結果,可采用將數學模型與物理模型或實物相結合半實物仿真[1,2]。半實物仿真系統既包含虛擬對象,又包含實物對象,因此更真實地反映實際系統的動、靜態特性和非線性因素。由于有實物的接入,半實物仿真對實時性有著較高的要求。
Matlab/Smulink在控制理論研究中是一個很優秀的仿真軟件,可方便地對控制算法或控制對象進行建模和仿真實驗[2-8]。在仿真情況下,仿真運行的時間取決于仿真機的運行速度和模型的復雜程度等因素,因此Matlab/Smulink模型運行的時間可能遠小于實際過程的運行時間。但在半實物仿真中,實物對象的實際執行時間與模型仿真時間可能不一致,因此有必要使Simulink虛擬模型與外部連接的硬件運行同步,實現實時仿真,以獲得接近實際情況的實驗結果。要用Matlab/Smulink進行實時仿真,可以利用自帶的Real-Time Workshop和Real-Time Windows Target、xPC Target等工具,也可編寫能進行實時仿真的應用程序,靈活地實現實時[4-9]。本文將針對在Matlab/Smulink環境下的實時仿真、控制,探討和總結一些實現實時的方法。
如前所述,用Matlab/Smulink進行實時仿真的方法主要有利用Matlab/Smulink自帶的實時工具和自編實時程序兩類。本文分別以Real-Time Workshop工具和自編S函數為例進行探討。
2.1 用Real-Time Workshop實現實時
Real-Time Workshop(RTW)是一個和Simulink配套使用的工具[4,5]。RTW可以由Simulink框圖生成優化的語言代碼,再由生成的代碼建立半實物仿真并產生實時控制與快速原型設計所需的應用程序,得到的應用程序可獨立于MATLAB環境,因此能實現實時同步并可應用于實時的工業過程中。利用RTW進行實時仿真的步驟大致如下:
首先,建立Simulink仿真模型;然后配置相關RTW參數,一般設置為定步長Fixed_Step,單任務single tasking,external模式;接著點擊build按鈕對目標進行編譯,自動生成C代碼文件,生成的C代碼可用C或者C++編譯器作適當修改,并編譯連接。最后,點擊connect按鈕,與目標進行連接(connect to target),運行仿真模型,對系統過程進行分析。
值得指出的是RTW支持多種常用的I/O設備,例如模數轉換器(A/D)、數模轉換器(D/A)計數器(counter)等[6]。在Simulink模塊庫下雙擊xPC Target模塊組圖標可相應顯示出I/O設備的型號等。這樣就可以將虛擬的Smulink模型與實際的受控對象或實際的控制器通過I/O設備和計算機連接起來,構成半實物仿真系統,進行仿真分析、過程控制等。
2.2 編寫S函數實現實時
由于RTW只支持部分型號I/O設備的驅動,而且也不能直接和一些常用的控制軟件進行實時通信,這給使用RTW進行實時仿真帶來了一定的局限性。此時用戶可根據需要,編寫能實現特定功能的S函數(S-Function)。S函數可使用Matlab或者C語言編寫。S函數編寫靈活,只要在函數程序模板適當的位置加入自己的代碼,然后編譯,就生成實現相應功能的Simulink模塊,并可以隨時調用。而且,Matlab還給用戶提供了開放性接口,可對系統的時鐘和端口進行操作。這為用其他方法靈活實現實時仿真提供了可能。
根據S函數程序的執行流程,可以在計算離散狀態更新值時設置一個空循環等待,原理如圖1示,只有當模型實際運行時間current-start(即系統時間)達到設置的仿真時間t,仿真才結束,這樣就可以使Simulink仿真時間與實際時間同步[6-9]。要注意的是,如果是C文件的S函數,還要用MATLAB的mex工具對其進行編譯,生成.dll文件。在使用時,只要將生成的S函數模塊添加到Simulink模型中,便可使系統模型運行于實時時間。
為了驗證這一實現實時的方法,根據圖1所示的實現同步的原理,可把系統時間、仿真時間以及它們的時間差值作為系統的輸出向量,編寫名為“sfuntmpl_basic.c”的C文件,對其編譯后生成sfuntmpl_basic.dll文件。然后建立控制過程半實物仿真平臺[2],用上位機的控制軟件對Matlab/Smulink虛擬對象進行實時控制。其中,adsoft S-函數模塊是訪問PCI-1710A/D的接口模塊,把上位機的控制變量傳遞給虛擬對象;Dasoft S-函數模塊實現虛擬對象與PCI-1710 D/A的對接,把被控變量輸出給上位機;sfuntmpl_basic模塊用于支持Simulink模型進行實時運行。設置好仿真參數、仿真時間后,即可開始運行仿真。通過示波器Scope可觀察到的sfuntmpl_ basic實時功能模塊輸出響應曲線,從輸出的結果分析中可知,仿真時間與系統時間基本重合,兩者的時間差值也很微小[2]。另外,從控制軟件實時監控界面可觀測到控制效果,仿真過程也表明,控制軟件能對Smulink虛擬對象進行實時控制[2]。并且,從仿真結果分析可知,利用這一方法對時間精度要求不是很高的過程仿真實現實時是可行的。
本文探討和總結了MATLAB/Simulink下能實現實現實時仿真的一些方法,即可用Real-Time Workshop實現實時,也可通過編寫S函數實現實時。經仿真測試表明,在對時間精度要求不是很高的過程進行實時仿真和分析時,可以得到令人滿意的效果。
參考文獻:
[1]黃建強,鞠建波.半實物仿真技術研究現狀及發展趨勢[J].艦船電子工程,2011,31(07):5-7,25.
[2]徐劍琴.控制過程實時仿真平臺的設計與實現[D].南寧:廣西大學,2006.
[3]Li K, Zhang Y. Fault-tolerant motion planning and control of redundant manipulator[J]. Control Engineering Practice, 2012,20(03):282-292.
[4]MATLAB Real-Time Workshop User’s Guide[M]. The MathWorks, Inc.2010.
[5]薛定宇,陳陽泉.基于MATLAB/Simulink的系統仿真技術與應用[M].北京:清華大學出版社,2002.
[6]黃家田,梁述海,李雁飛.基于RTW的閉環控制系統平臺設計[J].艦船電子工程,2004,24(04):86-87,98.
[7]鄭志波.基于MATLAB環境的實時仿真研究[D].武漢:武漢水利水電大學,2000:26-29.
[8]周洪,鐘明慧.控制系統的一種簡單實時在線仿真方法[J].系統仿真學報,2003,15(12):1753-1755.
[9]楊辰.多變量控制系統的實時在線仿真系統研究[D].武漢:武漢大學,2002.
作者簡介:徐劍琴(1979-),女,廣西北海人,碩士研究生,講師,研究方向:智能控制。
基金項目:廣西高等學校科研項目資助(2013YB175)、廣西科技大學博士啟動基金(院科博12Z05)。
DOI:10.16640/j.cnki.37-1222/t.2016.02.246