文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.04.030
中文引用格式: 渠博崗,易映萍. 基于CCS與MATLAB/Simulink聯合仿真平臺的構建與實現[J].電子技術應用,2016,42(4):106-110.
英文引用格式: Qu Bogang,Yi Yingping. Construction and implementation of co-simulation platform based on CCS and MATLAB/Simulink[J].Application of Electronic Technique,2016,42(4):106-110.
0 引言
在現代電力電子控制系統(tǒng)的開發(fā)中,DSP芯片以其優(yōu)越的運算性能在控制算法領域得到了越來越廣泛的應用。在對DSP的開發(fā)過程中,往往首先使用MATLAB/Simulink等軟件對控制系統(tǒng)進行仿真,然后再進行程序設計,最后再將程序執(zhí)行結果與仿真結果對比并對程序進行修改,且控制算法程序的驗證與調試都需要完整的電力電子硬件系統(tǒng),并有硬件電路工程師的配合才能較為順利地進行,然而這種傳統(tǒng)的方法效率低下,且不具有靈活性?;诖?,提出了CCS與MATLAB/Simulink聯合仿真的思想,可先在MATLAB/Simulink中搭建硬件系統(tǒng),應用MATLAB/Simulink中的CCSLink工具,來實現MATLAB/Simulink與DSP開發(fā)環(huán)境CCS的互聯,從而通過CCS與MATLAB/Siumlink聯合仿真來實現對控制算法的驗證和調試。不僅可以實現仿真與程序調試的交互,而且還在硬件系統(tǒng)未準備就緒的情況下實現控制算法程序的驗證與調試,同樣的方法不僅適用于電力電子控制系統(tǒng),還適用于其他基于DSP實現的控制系統(tǒng)。因此,CCS與MATLAB/Simulink的聯合仿真不僅可以快速驗證控制算法,也可使仿真與開發(fā)同時進行,提高開發(fā)效率[1]。
1 MATLAB/Simulink與CCS聯合仿真的基本原理
1.1 Simulink仿真原理
Simulink進行動態(tài)仿真,需要借助Simulink求解器來實現[2]。求解器分為離散求解器和連續(xù)求解器。Simulink對離散系統(tǒng)的仿真核心是對離散系統(tǒng)差分方程的求解,且結果精確。而對連續(xù)系統(tǒng)進行仿真時,則通過對連續(xù)系統(tǒng)微分或偏微分方程進行求解,且解為近似解,因此Simulink的連續(xù)求解器分為定步長求解器和變步長求解器。對于定步長求解器,不存在誤差控制的問題,而對于變步長求解器,仿真步長會受到絕對誤差和相對誤差的控制,只有求解誤差滿足相應誤差范圍,才會進行下一步仿真[3]。
然而在實際系統(tǒng)中,很少存在單純的離散系統(tǒng)或者連續(xù)系統(tǒng),多為混合式系統(tǒng),而連續(xù)變步長求解器可以同時滿足離散系統(tǒng)和連續(xù)系統(tǒng)的求解。連續(xù)變步長求解器先以最大步長進行求解,若該仿真區(qū)間內有離散狀態(tài)更新,步長便減小到與離散狀態(tài)的更新相吻合,之后再計算積分誤差以控制求解,若求解誤差滿足誤差范圍,則進行下一步仿真,否則縮小時間間隔,重復此過程進行求解仿真。
Simulink求解器雖然是Simulink進行動態(tài)仿真的核心,但求解器計算出的系統(tǒng)狀態(tài)和仿真步長與系統(tǒng)模型的直接交互也非常重要。交互的核心是事件通知,而過零檢測則用來檢測系統(tǒng)中是否有事件發(fā)生。當系統(tǒng)在前一仿真步長時間內發(fā)生了過零事件,變步長求解器就會縮小仿真步長,目的是判定事件發(fā)生的準確時間。交互原理見圖1。
1.2 MATLAB/Simulink與CCS聯合仿真原理
DSP在對系統(tǒng)進行控制時,一般以一定頻率采集系統(tǒng)中的電量參數,運算后輸出控制信號。在MATLAB/Simulink與CCS進行聯合仿真時,MATLAB可以將Simulink仿真模型中每一仿真步長的仿真電量參數通過CCSlink傳遞給CCS,再通過CCS傳遞給DSP板,DSP板經過運算后輸出控制信號通過CCS傳輸給Simulink作為下一仿真步長中仿真模型的控制量。如此循環(huán)直至仿真結束[4]。仿真流程見圖2。
2 MATLAB與CCS聯合仿真平臺的構建
2.1 MATLAB與CCS的連接接口
為了實現聯合仿真,首先需要使用CCSLink工具來實現MATLAB與CCS的連接。MATLAB/Simulink與 CCS之間的關系如圖3所示,CCSLink工具提供了3種連接接口,即CCS IDE、RTDX和嵌入式對象[5]。
(1)CCS IDE:該接口允許MATLAB在命令窗口中啟動和停止目標DSP中的程序,并與目標DSP進行數據交互、監(jiān)視目標DPS狀態(tài)等。用戶也可以編寫MATLAB程序腳本來實現CCS與MATLAB交互和分析的自動化。
(2)RTDX(Real Time Data Exchange):該接口可實現MATLAB與目標DSP的實時數據交互。通過打開、使能、關閉或禁止目標DSP 的RTDX通道,來實現MATLAB通過該通道向目標DSP進行操作或讀取數據,且交互過程中不需要停止目標DSP程序的執(zhí)行。RTDX連接對象只是CCS連接對象的一個子類,在創(chuàng)建CCS連接對象的同時創(chuàng)建RTDX連接對象,它們不能分別創(chuàng)建。
(3)嵌入式對象:該接口可在MATLAB中創(chuàng)建一個對象,該對象代表嵌入在目標C程序中的變量。利用嵌入式對象可直接訪問目標DSP中存儲器和寄存器中的變量,即把目標C程序中的變量作為MATLAB中的一個變量來對待[4]。
2.2 CCS IDE腳本文件關鍵編寫步驟
CCS IDE提供了ccsdsp函數和ticcs函數來建立CCS操作對象,即將CCS映射為MATLAB中的一個操作對象,這樣就可以通過調用相關MATLAB函數來控制CCS軟件實現對DSP目標板上的程序進行在線調試。腳本文件編寫關鍵步驟如下[1]:
(1)仿真前需安裝CCS 3.3軟件及MATLAB R2009a以上版本。
(2)打開CCS3.3,在Code Coposer Studio Setup中設置所使用的目標DSP型號及仿真器型號。若需要使用CCS的軟件仿真功能,可在Platform下選擇Simulator。
(3)打開MATLAB,在命令窗口輸入ccsboardinfo,則會顯示DSP和仿真器型號,選擇與所使用相符合的DSP和仿真器型號,并記錄下相應的仿真器編號Board Num與DSP編號Proc Num。
(4)使用步驟(3)得到的Board Num與Proc Num,通過ticcs建立CCS對象,并顯示調試界面:
isIDEVisible=cc.visiable;
visible(cc,1);
cc=ticcs('boardnum',x,'procnum',y);
(5)在MATLAB中加載CCS工程文件夾,并在編譯后加載可執(zhí)行文件。函數中需要標示出.prj與.out文件路徑,示例如下:
cc.open('F:\MATLAB_CCS\F2812\SSS.prj');
cc.build;
cc.load('F:\MATLAB_CCS\F2812\SSS.out');
(6)MATLAB與CCS數據交互的設置。MATLAB只能識別與調用CCS中的全局變量。所以可利用函數list(cc,'globlevar')通過MATLAB的命令窗口顯示出CCS所有的全局變量以便調用。如若需要添加新的交互變量,可使用symbolInfo語句關聯到tgtSymbol。如下示例便實現了使CCS全局變量a作為交互量:
tgtSymbol=list(cc,'globlevar');
tgtSymbol.a=symbolInfo.a;
(7)MATLAB與CCS的數據交互,需要在CCS程序中設置斷點,設置斷點所用函數為cc.insert();且一般斷點都設置在DSP采樣或運算完成后。當程序運行到斷點處時MATLAB將數據傳遞給CCS,所用函數為cc.write();若變量為結構體變量,則在tgtsymble后輸入結構體變量名,在number后輸入結構體成員名,示例如下:
cc.insert('main.c',101,'break');
cc.write(tgtSymbol.Ua,address.DSPsig(1));
cc.write(tgtSymbol.CMD_HMI,members.SSS_start_stop,
address.DSPsig(2));
(8)由于斷點一般都設置在DSP采樣或運算完成后,所以可控制程序運行到斷點處。此時程序暫停執(zhí)行,可通過CCS讀取DSP更新后的控制信號,供MATLAB下一步仿真使用,示例如下:
run(cc.'runtohalt');
DSPsum(1)=read(cc,tgtSymbol.FCS1.address,'int32',1);
(9)關閉CCS IDE,清除變量:
clear cc tgtSymbol is IdeVisiable;
end;
3 MATLAB與CCS聯合仿真的實現
3.1 S-Function函數的原理
在MATLAB與CCS的聯合仿真中,不僅算法設計較為復雜,每一個仿真步需要精確定位,且每次仿真中都需要輸入大量的指令,MATLAB提供的Simulink仿真模塊已無法滿足這些需求。所以需要在MATLAB中以編程的方式即S-Function(System Function系統(tǒng)函數)來實現。
S-Function是MATLAB提供的可以讓用戶自定義Simulink模塊的功能。用戶可通過S-Function設計出Simulink來實現算法設計,并將其嵌入到系統(tǒng)模型中,最終在仿真中與Simulink自帶的其他模塊實現對復雜系統(tǒng)的仿真[6]。MATLAB與CCS聯合仿真框圖如圖4所示。
S-Function有兩種類型,一種是基于MATLAB語言的M文件,分為Level_1和Level_2兩種。另一種是基于C語言,C++語言或者FORTRAN語言等編寫的MEX文件。S-Function函數對比見表1。
鑒于Level_1類型的S-Function在數據處理上的局限性和MEX文件形式的S-Function在編寫上較為復雜,且編譯后的后續(xù)設置也比較復雜,文章使用了Level_2類型的S-Function。
3.2 基于Level_2的S-Function函數的關鍵編寫步驟
Level_2的S-Function包含三部分,分別是:主函數、模塊設置函數和功能子函數。其中功能子函數為可選函數。關鍵編寫步驟如下[7]:
(1)主函數的定義。主函數函數名可自定義,在調用時只需輸入該M文件的文件名即可,示例如下:
function ghp_sfcn(block)
setup (block);
%end function
(2)模塊設置函數的定義。模塊設置函數可對輸入和輸出端口數量及數據屬性、采樣時間、參數輸入中的參數數量與屬性、注冊各功能函數等進行設置,示例如下:
function setup(block)
block.NumInputPorts=1;
block.NumOutputPorts=1;
block.InputPort(1).Complexity='real';
block.OutputPort(1).Complexity='real';
……
block.SampleTimes=[1e-4 0];
……
block.NumDialogPrms = 1;
block.DialogPrmsTunable={'Nontuna};
……
block.RegBlockMethod('Start',@Start);
(3)功能子函數的定義。功能子函數的使用必須在模塊設置函數注冊后才能被Simulink使用。功能子函數的名稱可自定義,無需與相應的子函數注冊名相同。以Terminate終止函數為例,示例如下:
function Terminate(block)
UDATA=get_param(block.BlockHandle,'UserData');
UDATA.fcnHandle('Terminate');
4 基于CCS與Simulink聯合仿真的混合式固態(tài)開關
4.1 混合式固態(tài)開關工作原理
在當前的輸配電領域中,機械式斷路器仍被大規(guī)模應用。但由于機械式斷路器在通斷過程中容易產生涌流和電弧。為此開發(fā)了混合式固態(tài)開關,該種開關將電子開關與旁路斷路器并聯,合閘時電子開關先導通,在電壓過零時旁路斷路器合閘,隨后電子開關關斷,旁路斷路器長期導通;當分閘時電子開關導通,在電流過零時旁路斷路器分閘,隨后電子開關關斷。這就實現了開通關斷無涌流無電弧[8]。圖5所示為混合式固態(tài)開關拓撲結構。
4.2 混合式固態(tài)開關模型的構建
Simulink構建的混合式固態(tài)開關模型,一次系統(tǒng)模型包括三相交流電網、高壓側斷路器、變壓器、隔離開關、接地開關、混合式固態(tài)開關和阻性負載;二次系統(tǒng)模型包括控制模塊、電壓電流檢測模塊、上位機模塊、顯示模塊和開入開出模塊。
控制模塊是混合式固態(tài)開關二次系統(tǒng)的核心,而其中的由S-Function函數編寫的自定義模塊Simulink-CCS則是實現聯合仿真的核心??刂颇K功能是將混合式固態(tài)開關主電路的電壓、電流、開入信號及上位機模塊的起停等信號通過CCSLink傳遞給CCS軟件,CCS軟件將這些信號傳遞給目標DSP來進行處理和執(zhí)行相應算法,隨后目標DSP將隔離斷路器動作、接地開關動作和旁路斷路器動作等開出信號和晶閘管觸發(fā)等控制信號反饋到CCS,CCSLink再讀取這些信號給開出模塊和控制主電路。
4.3 聯合仿真結果
圖6為DSP發(fā)送給A相晶閘管觸發(fā)脈沖與A相電壓的波形圖。當混合式固態(tài)開關開通信號發(fā)出后,a觸發(fā)脈沖立刻發(fā)出,從圖中可見開通脈沖在相電壓接近零值時給出,這就避免了合閘涌流,a脈沖一直持續(xù)到旁路斷路器可靠閉合信號發(fā)出為止。當混合式固態(tài)開關關閉信號發(fā)出后,b觸發(fā)脈沖立即發(fā)出,持續(xù)到旁路斷路器可靠斷開信號發(fā)出為止,此后晶閘管在電流過零時自然關斷。B、C相原理同A相。
圖7為混合式固態(tài)開關啟動時A、B、C三相電流波形,從圖中可看出三相電流均從接近零值開始變化,證明了開通時無涌流。
圖8為混合式固態(tài)開關關斷時A、B、C三相電流波形,從圖中可看出三相均在電流過零時自然關斷。
5 結論
本文針對在傳統(tǒng)電力電子控制系統(tǒng)開發(fā)過程中,仿真與控制算法的實現存在無交互性、開發(fā)效率低下等問題,提出了基于CCS與MATLAB/Simulink聯合仿真的思想,介紹了聯合仿真的基本原理,并給出了聯合仿真平臺的構建方法和聯合仿真實現的方法。著重介紹了CCS IDE腳本文件編寫與基于Level_2的S-Functon函數編寫的關鍵步驟。最后通過混合式固態(tài)開關在聯合仿真下的研究,驗證了聯合仿真思想、仿真平臺的構建及實現方法的正確性。也證明了聯合仿真可提高控制算法開發(fā)效率,在電力電子控制系統(tǒng)等領域具有較高的實用價值。
參考文獻
[1] YUAN S,SHEN Z.The design of MATLAB-DSP development environment for control system[C].Digital Manufacturing and Automation(ICDMA),2012 Third International Conference on.IEEE,2012:903-906.
[2] 齊鑫,秦永元,朱新穎,等.基于MATLAB/Simulink的捷聯慣性導航系統(tǒng)仿真[J].計算機測量與控制,2008,16(8):1161-1163.
[3] 李謹,鄧衛(wèi)華.AMESim與MATLAB/Simulink聯合仿真技術及應用[J].情報指揮控制系統(tǒng)與仿真技術,2004,26(5):61-64.
[4] 段國強,陳月云.MATLAB輔助DSP設計的研究與實現[J].微計算機信息,2007,23(7-2):130-132.
[5] 冷斌,李學勇,劉建華.一種基于MATLAB的DSP調試及直接代碼生成方法[J].現代電子技術,2008,31(20):68-70.
[6] HEIBERGER R M,BECKER R A.Design of an S function for robust regression using iteratively reweighted least squares[J].Journal of Computational and Graphical Statistics,1992,1(3):181-196.
[7] CHENG H D,CHEN Y H,SUN Y.A novel fuzzy entropy approach to image enhancement and thresholding[J].Signal Processing,1999,75(3):277-301.
[8] 王松岑,湯廣福,于坤山,等.新型中壓固態(tài)切換開關的研究[J].電網技術,2006,30(S2):311-315.