电力系统的MATLABSIMULINK仿真与应用第8章.ppt

返回 相似 举报
电力系统的MATLABSIMULINK仿真与应用第8章.ppt_第1页
第1页 / 共89页
电力系统的MATLABSIMULINK仿真与应用第8章.ppt_第2页
第2页 / 共89页
电力系统的MATLABSIMULINK仿真与应用第8章.ppt_第3页
第3页 / 共89页
电力系统的MATLABSIMULINK仿真与应用第8章.ppt_第4页
第4页 / 共89页
电力系统的MATLABSIMULINK仿真与应用第8章.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述:
第8章定制模块,,8.1定制非线性模块8.2S函数的编写及应用,8.1定制非线性模块8.1.1非线性电感模块【例8.1】定制一个非线性电感元件,当电压在0~120V时,电感恒定为2H;当电压超过120V时,电感元件饱和,电感降低到0.5H。图8-1所示为该非线性电感对应的磁通电流特性曲线,单位为p.u.。其中VB120/sqrt2V,fB50Hz。,,图8-1例8.1的磁通电流特性曲线,,,解1理论分析。显然电感元件上电压v和电流i具有如下关系其中,Ψ为电感元件上的自感磁链。由式8-1可以得到磁链Ψ为因此电感上的电流i为,8-3,8-2,8-1,,可见,可以用受控电流源表示该非线性电感元件,该电流源受控于电流源两端的电压。2按图8-2搭建非线性电感模型。该模型包括一个电压表模块、一个可控电流源模块电流源的电流方向为箭头所示方向、一个积分模块和一个用于描述磁通电流饱和特性的查表模块。选用的各模块的名称及提取路径见表8-1。图中有一个信号输出口m,输出非线性电感模块上的磁通和该模块两端的电压值。,图8-2非线性电感模型,,,表8-1例8.1非线性电感模型中包含的模块,图8-3例8.1的查表模块参数设置,打开查表模块参数对话框,按图8-3设置参数。该图中的参数实际上就是图8-1的磁通电流特性。其余模块的参数采用默认设置。,,3将搭建好的非线性电感模型组合为一个子系统并命名为NonlinearInductance后,按图8-4所示搭建仿真系统。选用的各模块的名称及提取路径见表8-2。,图8-4例8.1的仿真系统图,,,表8-2例8.1仿真电路模块的名称及提取路径,,该系统中含有两个电压源,一个峰值为120V、50Hz、相角为90的交流电压源Vs和一个幅值为0的直流电压源VDC。串联RLC支路为纯电阻电路,其中电阻元件R5W。在仿真参数对话框中设置变步长ode23tb算法,仿真结束时间为1.5s。4开始仿真。设置直流电压源幅值为0,开始仿真。图8-5所示为仿真最后5个周期的波形,图中波形从上到下依次为非线性电感元件上的磁通、电流和电压。此时,电压未超过极限值120V,电感为2H。对应的电流幅值Im为,,8-4,,磁链Ψ为与观测到的波形一致。,8-5,,图8-5仿真波形图VDC0V,,,将直流电压源的幅值改为1V,再次仿真。按理论分析,直流电压源单独作用时,电路中的电感相当于短路,因此观测的仿真电流中应该含有一个直流电流,该电流值为1V/5Ω0.2A。观察仿真最后5个周期的波形如图8-6所示,图中波形从上到下依次为非线性电感元件上的磁通、电流和电压。由于对1V直流电压源分量进行了积分运算,导致磁通饱和,因此电流波形发生畸变。由图可见,此时电流增大到0.575A。,图8-6仿真波形图VDC1V,,,通过FFT模块提取电流信号中的基频和直流分量,如图8-7所示,图中波形为非线性电感元件电流的基频分量和直流分量。可见,基频电流增大到0.27A,直流电流分量为0.2A,与理论分析值一致。,图8-7基频和直流电流分量,,,尽管在例8.1中已经建立了一个非线性电感模块,但是该模块外观并不完美。下面将对该非线性电感模块进行封装,创建对话框、图标和说明文档,并通过对话框来设定非线性电感的磁通电流特性,使它看起来和SIMULINK库提供的其它模块一样完整。单击图8-4中“非线性电感元件”图标,打开菜单[EditMasksubsystem],弹出封装子系统编辑窗口如图8-8所示。选择“文档”Documentation标签页,在“封装类型”Masktype文本框中输入文字“非线性电感”,在“封装说明”Maskdescription多行文本框中输入该模块的简单说明和注意事项,在“封装帮助”Maskhelp多行文本框中输入该模块的帮助文件。,图8-8封装子系统编辑窗口文档标签页,,,选择“参数”Parameters标签页如图8-9所示,通过点击按键添加、删除、移动项目。按图8-9分别添加额定电压、额定频率、线性电感和饱和特性。其中,在“变量说明”Prompt列中输入各变量的简单说明,在“变量名”Variable列中输入各变量的名称。注意这些变量是可以被封装的子系统作为已知参数调用的,因此,这些变量名应该是容易记忆的,同时SIMULINK不区分大小写。在“类型”Type列中选择参数的类型,可选的类型有“文本框”edit、“列表框”checkbox和“下拉框”popup。“可计算”uate和“可调用”Tunable列为可选项。,,选中“可计算”uate列后,SIMULINK首先对用户输入的表达式进行计算,然后再将计算结果赋值给变量,否则SIMULINK直接把用户输入的表达式作为一个字符串赋值给变量。选中“可调用”Tunable列将允许该参数在仿真过程中被修改。,图8-9封装子系统编辑窗口参数标签页,,,选择“初始化”Initialization标签如图8-10所示,在“初始化命令”Initializationcommands窗口中输入如下命令并提取电流变量Current_vect和磁通变量Flux_vect。,图8-10封装子系统编辑窗口初始化标签页,,,,,单击“确定”OK按键,关闭封装子系统编辑窗口。接下来,将定义的电流变量Current_vect和磁通变量Flux_vect传递到非线性电感元件的查表模块中。通过菜单[EditlookunderMask]进入图8-2所示的“非线性电感元件”窗口,打开查表模块对话框,设置输入、输出参数如图8-11所示。确认后退出“非线性电感元件”子系统,回到主窗口中,双击“非线性电感元件”图标,出现图8-12所示的参数对话框,输入额定电压、额定频率、线性电感值和磁通电流饱和特性。现在可以开始仿真了,仿真波形和图8-6完全相同。,图8-11查表模块中参数的设置,,图8-12非线性电感元件参数的设置,,,回到仿真主窗口,继续为该模块定制一个图标,使得该模块像SIMULINK的任何一个模块一样漂亮。选中非线性电感模块,通过菜单[EditEditMask]打开封装子系统编辑窗口,选择“图标”Icon标签如图8-13所示。,图8-13封装子系统编辑窗口图标标签页,,,在“画图命令”Drawingcommands窗口中输入命令plotCurrent_vect,Flux_vect;在“透明度”Transparency下拉框中选择“透明”Transparent。单击“确定”OK按键或者“应用”Apply按键后退出子系统编辑窗口,可以看见磁通电流饱和特性曲线出现在非线性电感模块上,由于选择透明处理,输入、输出端口的名称也一并显示在该模块上。封装后的非线性电感模块图标如图8-14所示。当然,也可以选择“不透明”Opaque,这样,输入、输出端口的名称被图形覆盖了。,图8-14非线性电感模块图标,,,8.1.2定制非线性电阻元件非线性电阻元件的建模方法和非线性电感元件的建模方法类似。本节不再利用查表方式建立电压电流关系,而是直接由电压电流的数学关系建立表达式。【例8.2】定制一个非线性MOV电阻元件,搭建电路,观测效果。解1理论分析。金属氧化物压敏电阻MOV的电压电流具有以下关系,,8-6,,其中,v、i为瞬时电压和电流;V0为钳制电压;I0为钳制电压对应的参考电流;α用来定义非线性特性,通常在[10,50]间取值。因此,本例可以用受控电流源来表示该非线性电阻元件,受控电流源受控于该电源两端的电压。2按图8-15搭建非线性MOV电阻模型。该模型包括一个电压表模块、一个可控电流源模块电流源的电流方向为箭头所示方向、一个传递函数模块和一个自定义的函数模块。选用的各模块的名称及提取路径见表8-3。图中有一个信号输出口m,输出非线性电阻模块的电压值。,图8-15非线性电阻模型,,,表8-3例8.2非线性电阻模型中包含的模块的名称及提取路径,,本例利用数学函数模块直接建立非线性MOV的电压电流特性。由于纯电阻模块不含状态变量,这样在SIMULINK内部运算时将产生一个代数循环,导致运算速度降低。为了解开代数环,在电压测量模块输出口加入了一个1阶滞后传递函数。按图8-16封装该非线性电阻模块,设置钳位电压为2倍的额定电压,即2120e3sqrt2/sqrt3195.96kV。参考电流为500A,α为25。,图8-16封装非线性电阻模块,,,继续给该非线性电阻加一个图标。打开封装子系统编辑窗口,选择“初始化”标签,在“初始化命令”Initializationcommands窗口中输入如下命令t00.00010.04;xsin100*pi*t;y500*x.25;选择“图标”Icon标签,在“画图命令”Drawingcommands窗口中输入命令ploty,x;确定后退出该编辑窗口。非线性电阻模块图标如图8-17所示。,图8-17非线性电阻模块图标,,图8-18例8.2的仿真系统图,3将定制的非线性电阻模块用于保护线电压为120kV的、按图8-18所示搭建的仿真系统。选用的各模块的名称及提取路径见表8-4。,,表8-4例8.2仿真电路模块的名称及提取路径,,将交流电压源峰值设为2.3120sqrt2/sqrt3kV、频率为50Hz、相角为0。串联RLC支路RL中,电阻元件R1.92Ω,电感元件L26mH。串联RLC负荷额定电压为120/sqrt3kV,频率为50Hz,有功功率为10MW,感性和容性无功功率为0。在仿真参数对话框中设置变步长ode23tb算法,仿真结束时间为0.1s。开始仿真。图8-19所示为仿真波形图,图中波形为非线性电阻元件上的电流和电压。,图8-19仿真波形图,,,由波形图可见,在正常电压条件下,MOV相当于一个阻值极大的线性电阻。当电压大于200kV时,MOV内阻急剧下降并迅速导通,其上电流增加几个数量级,而电压被钳位在200kV,从而有效地保护了电路中的其它元器件不至于过压而损坏。对应的电压电流特性如图8-20所示。,图8-20实测的V-I特性,,,8.1.3定制模块库为了方便地对定制的模块进行管理,用户还可以像SIMULINK一样创建自己的模块库,在自己的库中可以添加、删除模块,或者在这个库中建立子库。当对库中某模块进行修改时,所有模型文件中的该模块都被自动修改,这样,就不需要一个个打开模型文件去进行模块修改了。在SIMULINK浏览器窗口中,点击菜单[FileNewLibrary],将出现一个新的名为Libraryuntitled的窗口。将定制的非线性电阻模块和非线性电感模块复制到新窗口中,保存新窗口,例如取名为mypsb_library。新的模块库窗口如图8-21。,图8-21定制的模块库,,,8.2S函数的编写及应用S函数是SystemFunction的简称,即系统函数,它是扩展SIMULINK功能的强有力的工具,在很多情况下非常有用。用户可以利用MATLAB、C、C以及FORTRAN等语言来编制程序,构成S函数模块,并像标准SIMULINK模块一样直接调用。S函数使用一种特殊的调用规则,使得用户可以与SIMULINK的内部算法进行交互。这种交互和SIMULINK内部算法与内置模块之间的交互非常相似,而且可以适用于不同性质的系统。,图8-22S函数模块图标,本节主要介绍利用MATLAB语言设计S函数,并通过例子介绍S函数的应用技巧。8.2.1S函数模块S函数模块在Simulink/User-DefinedFunctions库中,用此模块可以创建包含S函数的SIMULINK模块。S函数模块的图标如图8-22所示。,,S函数模块只有一个信号输入口和一个信号输出口,分别对应输入变量和输出变量。S函数模块输入端口只能接受一维的向量信号。如果S函数模块含有多个输入变量和输出变量,需要使用“信号合成”Mux模块和“信号分离”Demux模块,同时需要指定sizes结构的适当区域的值。注意输入变量的个数和输出变量的个数必须和S函数内部定义的输入变量和输出变量的个数相同。S函数模块自动将输入列向量的第一个值和S函数内部的第一个输入变量对应,第二个值和S函数内部的第二个输入变量对应,等等。输出变量也存在同样关系。,,双击S函数模块,弹出该模块的参数对话框,如图8-23所示。该对话框中包含如下参数1“S函数文件名”S-FunctionName文本框填写S函数的文件名,确定后图标上将显示该文件名。注意,不需要扩展名,但该文本框不能为空。2“S函数参数”S-FunctionParameters文本框填写S函数需要的外部参数。S函数模块允许使用外部参数。函数的参数可以是MATLAB表达式,也可以是变量。参数并列给出,各参数间以逗号分隔,但参数列不需要用小括号括住表示。若无外部变量,该文本框为空。,图8-23S函数模块参数对话框,,,3“编辑”Edit按键点击该按键将打开指定文件名的S函数文件编辑窗口,在该窗口中可以进行编辑工作。【例8.3】假设S函数需要的外部参数有三种,分别为2、矩阵[1,2;3,4]和字符串miles。试将这三种参数输入“S函数参数”参数文本框。解在“S函数参数”参数文本框中输入2,[1,2;3,4;],miles即可。,,8.2.2S函数的编写S函数模块的M文件具有一套固定的调用变量规则。可以通过创建一个新的M文件并在其中按规则编写S函数,或者直接用SIMULINK提供的模板文件sfuntmpl.m,并从这个模板出发构建需要的S函数。这类M文件中第一行程序是一个函数语句function[sys,x0,str,ts]ft,x,u,flag,p1,p2,,pn其中,f为S函数的函数名,例如S函数以函数名sfun.m保存,则f应为sfun。输入变量和输出变量的说明分别见表8-5和表8-6。,,表8-5S函数输入变量表,,表8-6S函数输出变量表,,S函数的M文件在运行过程中不断检测输入变量flag的值,并按照表8-7所示的规则调用不同的内部函数。,表8-7S函数flag参数表,,由表8-7可知,变量flag共有六种可能值,下面将分别讨论这六种值所对应的操作。1.初始化设置flag0时,调用函数mdlInitializeSizes进行初始化设置。在mdlInitializeSizes函数中,需要对四种参数进行初始值的设置。1sizes首先通过语句sizessimsizes获得默认的系统参数变量sizes。该变量是一个没有初始化的结构体变量,共包含有六个字段,各字段说明如表8-8所示。,,表8-8结构体变量sizes的字段,,对sizes结构体变量中的每个元素赋值。sizes中的每个元素都必须有值,即使这个值为0。设置好后,通过语句syssimsizessizes将变量sizes赋值给输出变量sys。【例8.4】某S函数不含连续状态变量和离散状态变量,只有一个输入变量和一个输出变量,且输入变量直接控制输出变量,采样周期唯一。试对该S函数的结构体变量sizes进行初始化设置。解输入如下语句进行初始化设置,,,2x0设置状态变量的初始值。【例8.5】某S函数含有两个连续状态变量和两个离散状态变量。连续状态变量的初始值为1.0,离散状态变量的初始值为0.0。试对该S函数的状态变量初始值进行设置。解x0[1.0,1.0,0.0,0.0];3str变量str总为空str[];,,4ts通过设置采样时间和采样延迟时间矩阵ts来定义SIMULINK调用函数的时间。SIMULINK提供了多种设置ts的方式,如表8-9所示。,表8-9采样时间设置,,若系统含有多个采样周期,可以用同样的方法进行设置。【例8.6】某S函数含有两个离散的采样周期,第一个采样周期为0.25s,无延迟;第二个采样周期为1.0s,采样延迟0.1s。试对该S函数的ts进行初始化设置。解ts[0.25,0;1.0,0.1];,,2.连续状态变量微分计算flag1时,调用函数mdlDerivatives将连续状态变量的微分值赋给sys。【例8.7】已知非线性系统当flag1时,试设置sys属性。解sys1x2;sys2x1-3*x22u1;,,,3.离散状态变量更新flag2时,调用函数mdlUpdates将离散状态变量更新后的值赋给sys。【例8.8】已知一个一阶单变量离散子系统当flag2时,试设置sys属性。解sysx1u1;4.输出变量计算flag3时,调用函数mdlOutputs对输出变量进行计算,并把输出变量赋值给sys。,,5.下次采样时间计算flag4时,调用函数mdlGetTimeOfNextVarHit对下一次的采样时间进行计算,并把下一次的采样时间赋值给sys。只有在初始值设置中已将采样时间设置为可变后,该函数才会被调用。6.仿真结束当仿真以某种原因结束时,flag9,调用函数mdlTerminate执行必要的任务终止仿真,不对sys赋值。,,【例8.9】按文献[14]定制一个非线性电弧炉元件以反映电弧炉的电压电流特性,搭建电路,观测效果。解1理论分析。文献[14]所述模型的电弧电压v和电流i的关系为其中,g为电弧电导,定义为,8-8,8-7,,r为电弧半径,定义为其中,C对应电弧半径的初值;Im为电流幅值;k1、k2、k3是常数,分别为3000、1、12.5。考虑4~14Hz频率范围的白噪声后,电弧半径为,8-9,,,8-10,,2按图8-24搭建电弧炉电气特性模型。该模型中,电弧炉电气特性用一个可控电压源等效替代,可控电压源的大小主要由电弧炉的电弧半径决定,而电弧半径由电流幅值决定,同时电弧半径上还叠加了一个噪声。该模型中选用的各模块的名称及提取路径见表8-10。,,表8-10例8.9电弧炉电气特性模型中选用的模块的名称及提取路径,图8-24电弧炉电气特性模型,,,设置正弦波发生器模块中电流幅值为3A、频率为100pi、相角为0。FFT模块基频为50Hz,提取基频分量1次分量,滤波器为带通滤波器,截断频率为14Hz。3编写s函数。在MATLAB/toolbox/Simulink/Blocks目录下复制模块文件sfuntmpl.m到MATLAB/work工作目录下,打开该模板,另存为myarc_r.m和myarc_Ron.m,其中myarc_r为电弧半径计算模块,myarc_Ron为电弧炉等效电阻计算模块。myarc_r的程序代码如下,,,,,,,,4封装S函数模块。以上的模型还不能运行,因为其中的外部参数未设置。因此,对图8-24所示的模型按8.1节所述方法进行封装,并设置参数对话窗口,如图8-25所示。,图8-25电弧炉模型参数对话框,,图8-26电弧炉模型图标,封装完成后的电弧炉模型图标如图8-26所示。,,5开始仿真,仿真结果如图8-27所示。图中从上到下依次为电弧炉上的电流、电弧炉端口电压和电弧炉电弧半径。图8-28为实测的电弧炉电压电流特性。从电压电流特性曲线上可以看出,仿真效果良好。从上例可以看出,通过编写S函数,并与MATLAB/SIMULINK结合,定义、搭建新模型是一个非常简单、直观的过程,它极大地扩展了SIMULINK的功能。,,S函数还允许采用C、C、FORTRAN等语言进行编写。但是,C语言的编写和调试过程比MATLAB语言编写S函数的过程要复杂得多,所以在纯仿真中最好使用MATLAB语言去编写。当然,在有些应用中,由于MATLAB语言的S函数不能转换成C语言程序,生成独立文件,所以应该采用C语言去编写S函数。关于采用C、C、FORTRAN等语言编写S函数的方法,读者可以参考MATLAB相关帮助。,图8-27电弧炉模型图标,,图8-28电弧炉电压电流特性,,
展开阅读全文

资源标签

最新标签

长按识别或保存二维码,关注学链未来公众号

copyright@ 2019-2020“矿业文库”网

矿业文库合伙人QQ群 30735420