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