matlab基于simulink的运动仿真(Simulink联合仿真平台的构建与实现)
渠博岗,易映萍
(上海理工大学 光电信息与计算机工程学院,上海200093)
摘 要:为了快速验证电力电子控制系统中DSP(Digital Signal Processor)控制算法,提高控制算法开发效率,提出了CCS(Code Compose Studio)与MATLAB/Simulink联合仿真。介绍了CCS与MATLAB/Simulink联合仿真基本原理,给出了联合仿真平台的构建方法与联合仿真实现的方法;着重给出了CCS IDE脚本文件编写关键步骤和基于Level_2的S-Functon函数的编写关键步骤。最后以混合式固态开关为例,在Simulink环境下构建了混合式固态开关模型,并通过联合仿真实现了混合式固态开关的功能,验证了方案的正确性。
中图分类号:TP391.9
文献标识码: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 引言
在现代电力电子控制系统的开发中,DSP芯片以其优越的运算性能在控制算法领域得到了越来越广泛的应用。在对DSP的开发过程中,往往首先使用MATLAB/Simulink等软件对控制系统进行仿真,然后再进行程序设计,最后再将程序执行结果与仿真结果对比并对程序进行修改,且控制算法程序的验证与调试都需要完整的电力电子硬件系统,并有硬件电路工程师的配合才能较为顺利地进行,然而这种传统的方法效率低下,且不具有灵活性。基于此,提出了CCS与MATLAB/Simulink联合仿真的思想,可先在MATLAB/Simulink中搭建硬件系统,应用MATLAB/Simulink中的CCSLink工具,来实现MATLAB/Simulink与DSP开发环境CCS的互联,从而通过CCS与MATLAB/Siumlink联合仿真来实现对控制算法的验证和调试。不仅可以实现仿真与程序调试的交互,而且还在硬件系统未准备就绪的情况下实现控制算法程序的验证与调试,同样的方法不仅适用于电力电子控制系统,还适用于其他基于DSP实现的控制系统。因此,CCS与MATLAB/Simulink的联合仿真不仅可以快速验证控制算法,也可使仿真与开发同时进行,提高开发效率[1]。
1 MATLAB/Simulink与CCS联合仿真的基本原理
1.1 Simulink仿真原理
Simulink进行动态仿真,需要借助Simulink求解器来实现[2]。求解器分为离散求解器和连续求解器。Simulink对离散系统的仿真核心是对离散系统差分方程的求解,且结果精确。而对连续系统进行仿真时,则通过对连续系统微分或偏微分方程进行求解,且解为近似解,因此Simulink的连续求解器分为定步长求解器和变步长求解器。对于定步长求解器,不存在误差控制的问题,而对于变步长求解器,仿真步长会受到绝对误差和相对误差的控制,只有求解误差满足相应误差范围,才会进行下一步仿真[3]。
然而在实际系统中,很少存在单纯的离散系统或者连续系统,多为混合式系统,而连续变步长求解器可以同时满足离散系统和连续系统的求解。连续变步长求解器先以最大步长进行求解,若该仿真区间内有离散状态更新,步长便减小到与离散状态的更新相吻合,之后再计算积分误差以控制求解,若求解误差满足误差范围,则进行下一步仿真,否则缩小时间间隔,重复此过程进行求解仿真。
Simulink求解器虽然是Simulink进行动态仿真的核心,但求解器计算出的系统状态和仿真步长与系统模型的直接交互也非常重要。交互的核心是事件通知,而过零检测则用来检测系统中是否有事件发生。当系统在前一仿真步长时间内发生了过零事件,变步长求解器就会缩小仿真步长,目的是判定事件发生的准确时间。交互原理见图1。
1.2 MATLAB/Simulink与CCS联合仿真原理
DSP在对系统进行控制时,一般以一定频率采集系统中的电量参数,运算后输出控制信号。在MATLAB/Simulink与CCS进行联合仿真时,MATLAB可以将Simulink仿真模型中每一仿真步长的仿真电量参数通过CCSlink传递给CCS,再通过CCS传递给DSP板,DSP板经过运算后输出控制信号通过CCS传输给Simulink作为下一仿真步长中仿真模型的控制量。如此循环直至仿真结束[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进行数据交互、监视目标DPS状态等。用户也可以编写MATLAB程序脚本来实现CCS与MATLAB交互和分析的自动化。
(2)RTDX(Real Time Data Exchange):该接口可实现MATLAB与目标DSP的实时数据交互。通过打开、使能、关闭或禁止目标DSP 的RTDX通道,来实现MATLAB通过该通道向目标DSP进行操作或读取数据,且交互过程中不需要停止目标DSP程序的执行。RTDX连接对象只是CCS连接对象的一个子类,在创建CCS连接对象的同时创建RTDX连接对象,它们不能分别创建。
(3)嵌入式对象:该接口可在MATLAB中创建一个对象,该对象代表嵌入在目标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工程文件夹,并在编译后加载可执行文件。函数中需要标示出.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采样或运算完成后,所以可控制程序运行到断点处。此时程序暂停执行,可通过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系统函数)来实现。
S-Function是MATLAB提供的可以让用户自定义Simulink模块的功能。用户可通过S-Function设计出Simulink来实现算法设计,并将其嵌入到系统模型中,最终在仿真中与Simulink自带的其他模块实现对复杂系统的仿真[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在编写上较为复杂,且编译后的后续设置也比较复杂,文章使用了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联合仿真的混合式固态开关
4.1 混合式固态开关工作原理
在当前的输配电领域中,机械式断路器仍被大规模应用。但由于机械式断路器在通断过程中容易产生涌流和电弧。为此开发了混合式固态开关,该种开关将电子开关与旁路断路器并联,合闸时电子开关先导通,在电压过零时旁路断路器合闸,随后电子开关关断,旁路断路器长期导通;当分闸时电子开关导通,在电流过零时旁路断路器分闸,随后电子开关关断。这就实现了开通关断无涌流无电弧[8]。图5所示为混合式固态开关拓扑结构。
4.2 混合式固态开关模型的构建
Simulink构建的混合式固态开关模型,一次系统模型包括三相交流电网、高压侧断路器、变压器、隔离开关、接地开关、混合式固态开关和阻性负载;二次系统模型包括控制模块、电压电流检测模块、上位机模块、显示模块和开入开出模块。
控制模块是混合式固态开关二次系统的核心,而其中的由S-Function函数编写的自定义模块Simulink-CCS则是实现联合仿真的核心。控制模块功能是将混合式固态开关主电路的电压、电流、开入信号及上位机模块的起停等信号通过CCSLink传递给CCS软件,CCS软件将这些信号传递给目标DSP来进行处理和执行相应算法,随后目标DSP将隔离断路器动作、接地开关动作和旁路断路器动作等开出信号和晶闸管触发等控制信号反馈到CCS,CCSLink再读取这些信号给开出模块和控制主电路。
4.3 联合仿真结果
图6为DSP发送给A相晶闸管触发脉冲与A相电压的波形图。当混合式固态开关开通信号发出后,a触发脉冲立刻发出,从图中可见开通脉冲在相电压接近零值时给出,这就避免了合闸涌流,a脉冲一直持续到旁路断路器可靠闭合信号发出为止。当混合式固态开关关闭信号发出后,b触发脉冲立即发出,持续到旁路断路器可靠断开信号发出为止,此后晶闸管在电流过零时自然关断。B、C相原理同A相。
图7为混合式固态开关启动时A、B、C三相电流波形,从图中可看出三相电流均从接近零值开始变化,证明了开通时无涌流。
图8为混合式固态开关关断时A、B、C三相电流波形,从图中可看出三相均在电流过零时自然关断。
5 结论
本文针对在传统电力电子控制系统开发过程中,仿真与控制算法的实现存在无交互性、开发效率低下等问题,提出了基于CCS与MATLAB/Simulink联合仿真的思想,介绍了联合仿真的基本原理,并给出了联合仿真平台的构建方法和联合仿真实现的方法。着重介绍了CCS IDE脚本文件编写与基于Level_2的S-Functon函数编写的关键步骤。最后通过混合式固态开关在联合仿真下的研究,验证了联合仿真思想、仿真平台的构建及实现方法的正确性。也证明了联合仿真可提高控制算法开发效率,在电力电子控制系统等领域具有较高的实用价值。
参考文献
[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的捷联惯性导航系统仿真[J].计算机测量与控制,2008,16(8):1161-1163.
[3] 李谨,邓卫华.AMESim与MATLAB/Simulink联合仿真技术及应用[J].情报指挥控制系统与仿真技术,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] 王松岑,汤广福,于坤山,等.新型中压固态切换开关的研究[J].电网技术,2006,30(S2):311-315.
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com