资源描述
第8章 Simulink命令行仿真技术第第8章章 Simulink命令行仿真技术命令行仿真技术 8.1 使用命令行方式建立系统模型使用命令行方式建立系统模型8.2 回顾与复习:回顾与复习:Simulink与与MATLAB的接口的接口 8.3 使用命令行方式进行动态系统仿真使用命令行方式进行动态系统仿真8.4 使用使用MATLAB脚本分析动态系统脚本分析动态系统8.5 其其 它它 内内 容容第8章 Simulink命令行仿真技术8.1 使用命令行方式建立系统模型使用命令行方式建立系统模型 除了使用Simulink的图形建模方式建立动态系统模型之外,用户也可以使用命令行方式进行系统建模,然后再进行动态系统的仿真与分析。在进一步介绍使用命令行进行动态系统的仿真技术之前,首先简单介绍一下使用命令行的方式建立系统模型的相关知识。Simulink中建立系统模型的命令如表8.1所示。第8章 Simulink命令行仿真技术表8.1 系统模型建立命令命 令功 能new_system建立一个新的Simulink系统模型open_system打开一个已存在的Simulink系统模型close_system, bdclose关闭一个Simulink系统模型save_system保存一个Simulink系统模型find_system查找Simulink系统模型、模块、连线及注释add_block在系统模型中加入指定模块delete_block从系统模型中删除指定模块replace_block替代系统模型中的指定模块add_line在系统模型中加入指定连线第8章 Simulink命令行仿真技术delete_line从系统模型中删除指定连线get_param获取系统模型中的参数set_param设置系统模型中的参数gcb获得当前模块的路径名gcs获得当前系统模型的路径名gcbh获得当前模块的操作句柄bdroot获得最上层系统模型的名称simulink打开Simulink的模块库浏览器第8章 Simulink命令行仿真技术 使用上面的命令便可以生成和编辑动态系统的Simulink模型,由于使用命令行方式建立的Simulink系统模型与使用图形建模方式建立的系统模型没有什么大的分别,因此这里仅简单介绍各个命令的使用,而不再给出使用这些命令所建立的系统模型框图。 1. new_system 1) 使用语法 new_system(sys) 第8章 Simulink命令行仿真技术 2) 功能描述 使用给定的名称建立一个新的Simulink系统模型。如果sys为一个路径,则新建立的系统为在此路径中指定的系统模型下的一个子系统。注意,new_system命令并不打开系统模型窗口。 3) 举例new_system(mysys)% 建立名为mysys的系统模型new_system(vdp/mysys)% 建立系统模型vdp下的子系统mysys第8章 Simulink命令行仿真技术 2. open_system 1) 使用语法open_system(sys)open_system(blk)open_system(blk, force) 2) 功能描述 打开一个已存在的Simulink系统模型。第8章 Simulink命令行仿真技术 open_system(sys):打开名为sys的系统模型窗口或子系统模型窗口。注意,这里sys使用的是MATLAB中标准路径名(绝对路径名或相对于已经打开的系统模型的相对路径名)。 open_system(blk):打开与指定模块blk相关的对话框。open_system(blk, force):打开封装后的子系统,这里blk为封装子系统模块的路径名。这个命令与图形建模方式中的Look under mask菜单功能一致。第8章 Simulink命令行仿真技术 3) 举例open_system(controller) % 打开名为controller的系统模型open_system(controller/Gain)% 打开controller模型下的增益模块Gain的对话框 3. save_system 1) 使用语法save_system save_system(sys) save_system(sys, newname)第8章 Simulink命令行仿真技术 2) 功能描述 保存一个Simulink系统模型。 save_system:使用当前名称保存当前顶层的系统模型。 save_system(sys):保存已经打开的系统模型,与save_system功能类似。 save_system(sys, newname):使用新的名称newname保存当前已经打开的系统模型。第8章 Simulink命令行仿真技术 3) 举例save_system% 保存当前的系统模型save_system(vdp)% 保存系统模型vdpsave_system(vdp, myvdp)% 保存系统模型vdp,模型文件名为myvdp第8章 Simulink命令行仿真技术 4. close_system, bdclose 1) 使用语法close_systemclose_system(sys)close_system(sys, saveflag)close_system(sys, newname)close_system(blk)bdclose;bdclose(sys);bdclose(all)第8章 Simulink命令行仿真技术2) 功能描述关闭一个Simulink系统模型。 close_system:关闭当前系统或子系统模型窗口。如果顶层系统模型被改变,系统会提示是否保存系统模型。 close_system(sys) :关闭指定的系统或子系统模型窗口。 close_system(sys, saveflag):关闭指定的顶层系统模型窗口并且从内存中清除。saveflag为0表示不保存系统模型,为1表示使用当前名称保存系统模型。第8章 Simulink命令行仿真技术 3) 举例close_system% 关闭当前系统close_system(engine, 1)% 保存当前系统模型engine(使用当前系统名称),然后再关闭系统close_system(engine/Combustion/Unit Delay)% 关闭系统模型engine下的Combustion 子系统中Unit Delay模块的对话框第8章 Simulink命令行仿真技术 5. find_system 1) 使用语法 find_system(sys, c1, cv1, c2, cv2,.p1, v1, p2, v2,.) 2) 功能描述 查找由sys指定的系统模型、模块、连线及注释等等,并返回相应的路径名与操作句柄。由于使用此命令涉及较多的参数设置,因此这里不再赘述,用户可以查看Simulink的联机帮助系统中Simulink目录下的Using SimulinkModel Construction CommandsIntroduction中的find_system命令的帮助即可。第8章 Simulink命令行仿真技术6. add_block1) 使用语法add_block(src, dest)add_block(src, dest, parameter1, value1, .)2) 功能描述在系统模型中加入指定模块。add_block(src, dest):拷贝模块src为dest(使用路径名表示),从而可以从Simulink的模块库中复制模块至指定系统模型中,且模块dest参数与src完全一致。add_block(src, dest_obj, parameter1, value1, .):功能与上述命令类似,但是需要设置给定模块的参数parameter1,value1为参数值。第8章 Simulink命令行仿真技术3) 举例add_block(simulink3/Sinks/Scope, engine/timing/Scope1)% 从Simulink的模块库Sinks中复制Scope模块至系统模型engine中子系统timing中,其名称% 为Scope17. delete_block1) 使用语法delete_block(blk)2) 功能描述从系统模型中删除指定模块。delete_block(blk):从系统模型中删除指定的系统模块blk。3) 举例delete_block(vdp/Out1)%从vdp模型中删除模块Out1第8章 Simulink命令行仿真技术 8. replace_block 1) 使用语法replace_block(sys, blk1, blk2, noprompt)replace_block(sys, Parameter, value, blk, .) 2) 功能描述 替代系统模型中的指定模块。 replace_block(sys, blk1, blk2):在系统模型sys使用模块blk2取代所有的模块blk1。如果blk2为Simulink的内置模块,则只需要给出模块的名称即可,如果为其它的模块,必须给出所有的参数。如果省略noprompt,Simulink会显示取代模块对话框。第8章 Simulink命令行仿真技术 replace_block(sys, Parameter, value, ., blk):取代模型sys中具有特定取值的所有模块blk。Parameter为模块参数,value为模块参数取值。 3) 举例 replace_block(vdp,Gain,Integrator,noprompt)% 使用积分模块Integrator取代系统模型vdp中所有的增益模块Gain,并且不显示取代对话框第8章 Simulink命令行仿真技术 9. add_line、delete_line 1) 使用语法 h = add_line(sys,oport,iport) h = add_line(sys,oport,iport, autorouting,on) delete_line(sys, oport, iport) 2) 功能描述 在系统模型中加入或删除指定连线。 add_line(sys, oport, iport):在系统模型sys中给定模块的输出端口与指定模块的输入端口之间加入直线。oport与iport分别为输出端口与输入端口(包括模块的名称、模块端口编号)。第8章 Simulink命令行仿真技术 add_line(sys,oport,iport, autorouting,on):与add_line(sys,oport,iport)命令类似,只是加入的连线方式可以由autorouting的状态控制:on表示连线环绕模块,而off表示连线为直线(缺省状态)。 delete_line(sys, oport, iport):删除由给定模块的输出端口oport至指定模块的输入端口iport之间的连线。第8章 Simulink命令行仿真技术 3) 举例add_line(mymodel,Sine Wave/1,Mux/1)% 在系统模型mymodel中加入由正弦模块Sine Wave的输出至信号组合模块Mux第一个输入间% 的连线delete_line(mymodel, Sine Wave/1,Mux/1)% 删除系统模型mymodel中由正弦模块Sine Wave的输出至信号组合模块Mux第一个输入间的% 连线第8章 Simulink命令行仿真技术 10. set_param和get_param 1) 使用语法set_param(obj, parameter1, value1, parameter2, value2, .)get_param(obj, parameter)get_param( objects , parameter)get_param(handle, parameter)get_param(0, parameter)get_param(obj, ObjectParameters)get_param(obj, DialogParameters)第8章 Simulink命令行仿真技术 2) 功能描述 设置与获得系统模型以及模块参数。 set_param(obj, parameter1, value1, parameter2, value2, .):其中obj表示系统模型或其中的系统模块的路径,或者取值为0;给指定的参数设置合适的值,取值为0表示给指定的参数设置为缺省值。在仿真过程中,使用此命令可以在MATLAB的工作空间中改变这些参数的取值,从而可以更新系统在不同的参数下运行仿真。第8章 Simulink命令行仿真技术 get_param(obj, parameter):返回指定参数取值。其中obj为系统模型或系统模型中的系统模块。 get_param( objects , parameter):返回多个模块指定参数的取值,其中 objects 表示模块的细胞矩阵(Cell)。 get_param(handle, parameter):返回句柄值为handle的对象的指定参数的取值。 get_param(0, parameter):返回Simulink当前的仿真参数或默认模型、模块的指定参数的取值。 第8章 Simulink命令行仿真技术 get_param(obj, ObjectParameters):返回描述某一对象参数取值的结构体。其中返回到结构体中具有相应的参数名称的每一个参数域分别包括参数名称(如Gain)、数据类型,如string以及参数属性如read-only等。 get_param(obj, DialogParameters):返回指定模块对话框中所包含的参数名称的细胞矩阵。 由于参数选项很多,这里不再赘述,读者可以参考Simulink帮助中的Model and BlockParameters中的详细介绍。第8章 Simulink命令行仿真技术 3) 举例set_param(vdp, Solver, ode15s, StopTime, 3000) % 设置系统模型vdp的求解器为ode15s,仿真结% 束时间为3000 sset_param(vdp/Mu, Gain, 1000) % 设置系统模型vdp中模块Mu中的增益模块Gain的取值为1000set_param(vdp/Fcn, Position, 50 100 110 120) % 设置系统模型vdp中的Fcn模块的位置为第8章 Simulink命令行仿真技术set_param(mymodel/Zero-Pole,Zeros,2 4,Poles,1 2 3) % 设置系统模型mymodel中零极点模块Zero-Pole的零点Zeros取值为2 4,而极点Poles取值为% 1 2 3get_param(Mysys/Subsys/Inertia,Gain) % 获得系统模型Mysys中子系统Subsys中的Inertia模块的增益值。其结果如下(假设此系统模型% 以存在)ans =第8章 Simulink命令行仿真技术1.0000e-006p = get_param(untitled/Sine Wave, DialogParameters)% 获得系统模型untitled下正弦信号模块Sine Wave的参数设置对话框中所包含的参数名称,% 结果如下p = Amplitude FrequencyPhaseSampleTime第8章 Simulink命令行仿真技术11. gcb、gcs以及gcbh1) 使用语法gcbgcb(sys)gcsgcbhbdrootbdroot(obj)第8章 Simulink命令行仿真技术2) 功能描述gcb:返回当前系统模型中当前模块的路径名。gcb(sys):返回指定系统模型中当前模块的路径名。gcs:获得当前系统模型的路径名。gcbh:返回当前系统模型中当前模块的操作句柄。bdroot:返回顶层系统模型的名称。bdroot(obj):返回包含指定对象名称的顶层系统的名称,其中obj为系统或模块的路径名。第8章 Simulink命令行仿真技术 12. simulink 1) 使用语法 simulink 2) 功能描述 打开Simulink的模块库浏览器。 使用命令行方式建立的动态系统模型与使用Simulink图形建模方式所建立的系统模型完全一致,然而,仅仅使用命令行方式建立系统模型是一件麻烦且低效的方法。 第8章 Simulink命令行仿真技术8.2 回顾与复习:回顾与复习:Simulink与与 MATLAB的接口的接口 先建立一个非常简单的动态系统,其功能如下:(1) 系统的输入为一单位幅值、单位频率的正弦信号。(2) 系统的输出信号为输入信号的积分。 其要求是:(1) 系统的输入信号由MATLAB工作空间中的变量提供,时间范围为0至10 s。(2) 使用MATLAB绘制原始输入信号与系统运算结果的曲线。第8章 Simulink命令行仿真技术 从动态系统的功能与其要求可知,建立此动态系统的模型需要以下一些模块: (1) Sources模块库中的In1模块:表示系统的输入。 (2) Sinks模块库中的Out1模块:表示系统的输出。 (3) Continuous模块库中的Integrator模块:积分运算器。 其中In1(Inport)模块与Out1(Outport)模块都是虚模块,它们仅仅表示将信号传入或传出子系统。 第8章 Simulink命令行仿真技术 图8.1 简单动态系统模型框图 第8章 Simulink命令行仿真技术 由工作空间中输入信号 输出仿真时间与结果至Matlab工作空间中 输出仿真时间与结果至MATLAB工作空间中由工作空间中输入信号 图8.2 Workspace I/O 设置 第8章 Simulink命令行仿真技术然后在MATLAB工作空间中定义输入变量sim_input如下: t=0:0.1:10;% 表示输入信号的时间范围 u=sin(t);% 产生输入正弦信号 sim_input=t,u;% 传递至Simulink系统模型的变量接下来,采用默认的系统仿真参数并运行系统仿真。最后使用MATLAB命令绘制出原始输入信号与系统运算结果,如下所示: plot(t,u,tout,yout,-)%绘制系统输入信号与仿真结果,如图8.3所示.第8章 Simulink命令行仿真技术 图8.3 系统原始输入与运算结果曲线第8章 Simulink命令行仿真技术8.3 使用命令行方式进行动态系统仿真使用命令行方式进行动态系统仿真 8.3.1 使用sim命令进行动态系统仿真 1. 使用语法 t,x,y = sim(model, timespan, options, ut) t,x,y1, y2, ., yn = sim(model, timespan, options, ut);以上是完整的语法格式,实际使用中可以省略其中的某些参数设置而采用默认参数进行仿真。第8章 Simulink命令行仿真技术 2. 功能描述 对指定的系统模型按照给定的仿真参数与模型参数进行系统仿真。仿真所使用的参数包括所有使用仿真参数对话框的设置、MATLAB工作空间的输入输出选项卡中的设置以及采用命令行方式设置的仿真参数与系统模块参数。第8章 Simulink命令行仿真技术 除参数model外,其它的仿真参数设置均可以取值为空矩阵,此时sim命令对没有设置的仿真参数使用默认的参数值进行仿真。默认的参数值由系统模型框图所决定。用户可以使用sim命令的options参数对可选参数进行设置,这样设置的仿真参数将覆盖模型默认的参数。 如果用户对连续系统进行仿真,必须设置合适的仿真求解器,因为默认的仿真求解器为变步长离散求解器(Variable Step Discrete Solver)。可以使用simset命令进行设置(后面将简单介绍simset命令的使用)。第8章 Simulink命令行仿真技术3. 参数说明(1) model:需要进行仿真的系统模型框图名称。(2) timespan:系统仿真时间范围(起始时间至终止时间),可以为如下的形式: tFinal:设置仿真终止时间。仿真起始时间默认为0。 tStart tFinal:设置仿真起始时间(tStart)与终止时间(tFinal)。 tStart OutputTimes tFinal:设置仿真起始时间(tStart)与终止时间(tFinal),并且设置仿真返回的时间向量tStart OutputTimes tFinal,其中tStart、OutputTimes、tFinal必须按照升序排列。 第8章 Simulink命令行仿真技术(3) options:由simset命令所设置的除仿真时间外的仿真参数(为一结构体变量)。(4) ut:表示系统模型顶层的外部可选输入。ut可以是MATLAB函数。可以使用多个外部输入ut1、ut2。(5) t:返回系统仿真时间向量。(6) x:返回系统仿真状态变量矩阵。首先是连续状态,然后是离散状态。(7) y:返回系统仿真的输出矩阵。按照顶层输出Outport模块的顺序输出,如果输出信号为向量输出,则输出信号具有与此向量相同的维数。(8) y1, . ,yn:返回多个系统仿真的输出。第8章 Simulink命令行仿真技术 8.3.2 举例之一:简单仿真 在8.2节中以动态系统command_in_out为例,对Simulink与MATLAB接口设计作了简单的回顾与复习。Simulink系统模型的输入信号为MATLAB工作空间中的变量,同时仿真结果也被输出到MATLAB工作空间中。但在进行系统仿真时,并没有使用命令行方式。实际上用户也可以使用命令行方式对此系统模型进行仿真,在仿真之前,首先使用仿真参数设置对话框设置参数。然后在MATLAB命令窗口中键入如下命令进行系统模型的仿真,并绘制此系统的输入信号与仿真结果:第8章 Simulink命令行仿真技术 t=0:0.1:10; u=sin(t); sim_input=t,u; tout, x, yout=sim(command_in_out);% 使用命令行sim进行系统仿真,仿真参数采用与8.2节中相同的仿真参数 plot(t,u,tout,yout,-)第8章 Simulink命令行仿真技术 在对动态系统command_in_out进行仿真时,必须先打开此系统模型并且设置合适的仿真参数。sim命令的参数为模型的名称(由不带扩展名.mdl的系统模型文件名构成)。为突出sim命令的作用,这里仍使用Simulink的仿真参数设置对话框对仿真参数设置,至于使用simset命令设置仿真参数将在后面进行介绍。使用sim命令进行系统仿真前后MATLAB工作空间中的变量列表如图8.4所示。第8章 Simulink命令行仿真技术 图8.4中左侧为使用sim命令进行仿真之前的MATLAB工作空间变量列表(其中sim_input为系统模型的输入信号、t为输入信号的时间范围、u为输入信号的取值);右侧为使用sim命令进行仿真之后的工作空间变量列表(其中tout为输出时间变量、x为输出系统状态变量、yout为系统运算结果;如果在系统模型的顶层没有Outport模块,则输出yout为空)。从图中可以明显看出,动态系统的仿真结果(包括输出时间向量、系统状态与运算结果)被输出到了MATLAB工作空间中。此外,由plot所绘制的图形也与8.2节中的绘制结果完全一致,这里不再给出。第8章 Simulink命令行仿真技术 图8.4 系统仿真前后MATLAB工作空间变量列表第8章 Simulink命令行仿真技术 8.3.3举例之二:仿真时间设置 在前面已经对sim命令中的仿真时间参数timespan设置做了介绍。timespan具有三种使用形式,根据不同动态系统仿真的不同要求,用户可以选择使用如下所示的不同形式进行系统仿真: t,x,y=sim(model,tFinal) t,x,y=sim(model,tStart tFinal) t,x,y=sim(model,tStart outputTimes tFinal)第8章 Simulink命令行仿真技术 仍以前面的动态系统command_in_out为例说明使用命令行方式时如何对系统仿真时间进行设置。首先打开系统模型command_in_out,然后仍然使用Simulink仿真参数设置对话框对系统的仿真参数进行设置,其设置与8.2节中所使用的参数完全一致。为了使用户对使用命令行方式设置系统仿真时间范围有一个直观的了解,这里使用四组不同的仿真时间对此系统进行仿真,并绘制系统输入信号与系统运算结果关系图以作比较。在MATLAB命令窗口中运行如下的命令:第8章 Simulink命令行仿真技术 t=0:0.1:10; u=sin(t); sim_input=t,u; tout1, x1, yout1=sim(command_in_out,5);% 系统仿真时间范围为0至5 s,输出时间向量tout1由Simulink的求解器步长变化决定 tout2, x2, yout2=sim(command_in_out,1 8);% 系统仿真时间范围为1至8 s,输出时间向量tout1同样由Simulink的求解器步长变化决定 tout3, x3, yout3=sim(command_in_out,1:8);第8章 Simulink命令行仿真技术% 系统仿真时间范围为1至8 s,并且每隔1 s输出一次,即输出时间变量为% 1 2 3 4 5 6 7 8 tout4, x4, yout4=sim(command_in_out,1:0.2:8);% 系统仿真时间范围为1至8 s,并且每隔0.2 s输出一次,即输出时间变量为% 1 1.2 % 1.4 7.6 7.8 8 subplot(2,2,1) plot(t,u,tout1,yout1,.); subplot(2,2,2)第8章 Simulink命令行仿真技术 plot(t,u,tout2,yout2,.); subplot(2,2,3) plot(t,u,tout3,yout3,.); subplot(2,2,4) plot(t,u,tout4,yout4,.);% 在同一幅图中绘制系统command_in_out的输入信号以及在不同仿真时间范围上的系统运算结% 果,其结果如图8.5所示第8章 Simulink命令行仿真技术 图8.5 在不同仿真时间设置下的系统仿真结果比较 第8章 Simulink命令行仿真技术从 Matlab 工作空间中查看不同仿真时间设置下的系统输出结果 从MATLAB工作空间中查看不同仿真时间设置下的系统输出结果 图8.6 系统仿真返回的时间向量输出 第8章 Simulink命令行仿真技术 8.3.4 举例之三:外部输入变量设置 前面对动态系统command_in_out进行仿真时,通过设置Simulink仿真参数设置对话框中Workspace I/O中的外部变量输入,以使系统在仿真过程中从MATLAB的工作空间中获取输入信号sim_input。除了使用这种方法从MATLAB工作空间中获得系统输入信号之外,用户还可以通过使用sim命令中的ut参数来设置系统的外部输入信号。下面介绍如何使用ut参数设置外部输入信号。第8章 Simulink命令行仿真技术 1. ut参数的生成 用户可以使用命令 t,x,y=sim(model, timespan, options, ut) 对动态系统进行仿真并且从MATLAB工作空间中输入变量。其中ut为一个具有两列的矩阵,第一列表示外部输入信号的时刻,第二列表示与给定时刻相应的信号取值。使用矩阵ut能够为系统模型最顶层的Inport模块提供外部输入,并将自动覆盖Simulink仿真参数设置对话框中Workspace I/O中的设置。此外,当输入信号中存在着陡沿边缘时,必须在同一时刻处定义不同的信号取值。例如,对于图8.7所示的一个类似于方波的信号。产生此输入信号的MATLAB命令为ut=0 1;10 1;10 -1;20 -1;20 1;30 1;30 -1;40 -1;40 1;50 1第8章 Simulink命令行仿真技术 2. 应用举例 仍以动态系统command_in_out为例说明如何使用sim命令的参数ut从MATLAB工作空间中获得输入信号。在MATLAB命令窗口中键入如下的命令: t=0:0.1:10; u=sin(t); sim_input=t,u; tout1, x1, yout1=sim(command_in_out,10);% 使用Simulink仿真参数对话框中的Workspace I/O从MATLAB工作空间中获得输入信号u=cos(t);第8章 Simulink命令行仿真技术ut=t,u;% 改变系统输入信号tout2,x2,yout2=sim(command_in_out,10,ut);% 使用sim命令的ut参数获得系统输入信号,ut的使用会覆盖由Workspace I/O的系统输入设置,% 这一点可以在下面的系统仿真结果图形中反映出来subplot(1,2,1); plot(tout1,yout1);subplot(1,2,2);plot(tout2,yout2);%绘制系统在不同输入信号下的响应曲线,如图8.8所示第8章 Simulink命令行仿真技术图8.7 类方波信号第8章 Simulink命令行仿真技术 图8.8 系统在不同输入下的响应曲线第8章 Simulink命令行仿真技术 8.3.5 simset与simget命令的使用 前面介绍使用sim命令进行动态系统仿真时,除了对系统仿真时间与系统输入的设置之外,其它所有的仿真参数均是由Simulink的仿真参数设置对话框所设置的。用户也可以使用simset对系统仿真参数进行设置,然后再使用命令行方式对系统进行仿真分析,如下所示: t,x,y = sim(model, timespan, options, ut);第8章 Simulink命令行仿真技术 其中options为仿真选项结构体变量(不包括系统仿真时间),使用simset命令可以对此结构体变量进行设置。注意,这里所谓的仿真选项指的就是Simulink仿真参数设置对话框Simulation parameters中所设置的参数。为了使用户对options系统仿真选项有一个总体的了解,首先使用simget命令获得表示系统仿真参数的结构体变量,如下所示:options=simget(command_in_out)%获得已经打开的系统模型command_in_out的仿真参数选项options = 第8章 Simulink命令行仿真技术AbsTol : auto Debug: off Decimation : 1 DstWorkspace: current FinalStateName : FixedStep : auto InitialState : InitialStep : auto MaxOrder : 5 SaveFormat: Array MaxDataPoints: 1000第8章 Simulink命令行仿真技术 MaxStep: auto MinStep: OutputPoints: all OutputVariables: ty Refine: 1 RelTol: 0.0010 Solver: ode45 SrcWorkspace: base Trace: ZeroCross: on第8章 Simulink命令行仿真技术 1. simset命令使用介绍 1) 使用语法options = simset(property, value, .);options = simset(old_opstruct, property, value, .);options = simset(old_opstruct, new_opstruct);simset第8章 Simulink命令行仿真技术 2) 功能描述 使用simset命令会产生一结构体变量options,此变量中的各个数据用来设置系统仿真参数。对于没有进行设置的系统仿真参数,Simulink会使用相应的缺省值。 options=simset(property, value, .):设置指定的仿真参数选项值。其中property为指定的仿真参数,value为指定的取值。 options=simset(old_opstruct, property, value, .):修改仿真参数结构体变量中已经存在的指定仿真参数选项。其中old_opstruct表示已经存在的结构体。第8章 Simulink命令行仿真技术 options=simset(old_opstruct, new_opstruct):合并已经存在的两个仿真参数结构体变量,并且使用new_opstruct中的域值覆盖old_opstruct中具有相同域名的域值。 simset:显示所有的仿真参数选项及其可能的取值。第8章 Simulink命令行仿真技术 3) 仿真参数选项介绍 使用simset命令可以设置除仿真时间外的所有系统仿真 参数选项,下面对最常用的仿真参数选项及其取值作一个简单的介绍。 (1) AbsTol:取值为一标量,缺省值为1e6,表示绝对误差限。仅用于变步长求解器。 (2) Decimation:取值为一正整数,缺省值为1,表示系统仿真结果返回数据点的间隔(值为1,表示每一仿真结果数据均返回到相应的变量中;值为2,表示仿真结果每隔一个数据点返回到相应的变量中,依次类推)。第8章 Simulink命令行仿真技术 (3) FixedStep:取值为正值标量,表示定步长求解器的步长。如果对离散系统进行仿真,其缺省取值为离散系统的采样时间;如果对连续系统进行仿真,其缺省取值为仿真时间范围的1/50。 (4) InitialState:取值为一向量,缺省值为空向量,表示系统的初始状态。如果系统中同时存在连续状态与离散状态,则此向量中先是连续状态的初始值,然后是离散状态的初始值。初始状态的设置会覆盖系统模型中所默认的状态初始值。第8章 Simulink命令行仿真技术 (5) InitialStep:取值为一正标量,缺省值为auto,表示系统仿真时的初始步长(估计值),仅用于变步长求解器;在仿真时求解器首先使用估计的步长,缺省情况下由求解器决定初始仿真步长。 (6) MaxStep:取值为一正值标量,缺省值为auto,表示系统仿真的最大步长。仅用于变步长求解器,缺省情况下最大仿真步长为仿真时间范围的1/50。第8章 Simulink命令行仿真技术 (7) RelTol:取值为一正值标量,缺省值为1e3,表示相对误差限。仅用于变步长求解器。 (8) Solver:表示Simulink仿真求解器,其取值为如下由“|”隔开的字符串:VariableStepDiscrete | ode45 | ode23 | ode113 | ode15s | ode23s | FixedStepDiscrete | ode5 | ode4 | ode3 | ode2 | ode1。在缺省值为变步长连续求解器,运算方法为ode45(Dormand-Prince)。第8章 Simulink命令行仿真技术(9) ZeroCross:表示仿真过程中的过零检测,取值为on或off,缺省值为on。仅用于变步长求解器。on表示对系统的模块进行过零检测,off表示不进行过零检测。4) 应用举例myoptionssimset(ZeroCross,off);% 关闭系统仿真过零检测tout,x,yout=sim(command_in_out, 10, myoptions);% 使用myoptions仿真参数选项进行系统仿真第8章 Simulink命令行仿真技术2. simget命令的使用介绍1) 使用语法struct = simget(model)value = simget(model, property)value = simget(OptionStructure, property)第8章 Simulink命令行仿真技术2) 功能描述simget命令用来获得指定系统模型的仿真参数设置。struct = simget(model):获得指定系统模型model的所有仿真参数设置结构体变量。value = simget(model, property):获得指定系统模型model中指定仿真参数property的取值。value = simget(OptionStructure, property):获得系统仿真长参数选项中指定的仿真参数的取值。 第8章 Simulink命令行仿真技术 8.3.6 simplot命令的使用 在观测动态系统仿真结果时,Sinks模块库中的Scope模块是最常用的模块之一。它可以使用户在类似示波器的图形界面中观测系统仿真结果的输出,而非使用诸如plot绘制系统的输出。使用Scope最重要的优点是可以通过对Scope模块的操作,对系统输出进行方便的观测,这一点是plot等命令所不及的。在使用命令行方式对动态系统进行仿真时,可以使用simplot命令绘制与使用与Scope模块相类似的图形。下面介绍simplot命令的功能与使用。第8章 Simulink命令行仿真技术 1. 使用语法 simplot(data); simplot(time, data); 2. 功能描述 simplot命令用来输出动态系统的仿真结果,且其输出图形与Scope模块的输出类似。 3. 参数说明 data:动态系统仿真结果的输出数据(一般由Outport模块、To Workspace模块等产生的输出)。其数据类型可以为矩阵、向量或是结构体等。time:动态系统仿真结果的输出时间向量。当系统输出数据为带有时间向量的结构体变量时,此参数被忽略。第8章 Simulink命令行仿真技术 4. 举例 仍以前面的command_in_out为例说明simplot的使用(设系统仿真结果已经存在)。在MATLAB命令窗口中键入如下命令: simplot(tout2,yout2)% 使用simplot绘制系统仿真结果,如图8.9所示第8章 Simulink命令行仿真技术 图8.9 使用simplot命令绘制系统仿真结果第8章 Simulink命令行仿真技术8.4 使用使用MATLAB脚本分析动态系统脚本分析动态系统 8.4.1 蹦极跳的安全性分析 在第5章中曾给出蹦极跳连续系统模型: 其中为蹦极者的质量,为重力加速度,为物体的位置,与表示空气的阻力,而xxaxabxmgxm 210, 00,)(xxkxxb第8章 Simulink命令行仿真技术图8.10 蹦极跳系统模型框图第8章 Simulink命令行仿真技术 下面使用命令行方式对此系统在不同的弹性常数下进行仿真分析,以求出符合安全要求的弹性绳索的最小 弹 性 常 数 。 编 写 M A T L A B 脚 本 文 件bungee_jumping_cmd.m,求取最小弹性常数,程序如下所示:m=70;g=10;a1=1;% 使用MATLAB工作空间中变量设置a2=1;% 系统模型中模块的参数for k=20:50 % 在一定的范围内试验弹性常数第8章 Simulink命令行仿真技术 t,x,y=sim(bungee_jumping_command,0 100); %使用不同的弹性常数进行系统仿真 if min(y)0 % 如果仿真结果输出数据的最小值大于0, break; % 则说明此弹性常数符合安全要求,跳出循环 endend第8章 Simulink命令行仿真技术disp(The minimum safe k is: ,num2str(k)% 显示最小安全弹性常数dis=min(y);% 求取蹦极者与地面之间的最小距离disp(The minimum distance between jumper and ground is: , num2str(dis)simplot(t,y)% 绘制最小安全弹性常数下系统的仿真结果第8章 Simulink命令行仿真技术 在运行此MATLAB脚本文件求取最小安全弹性常数之前,必须正确设置蹦极者的初始位置与初始速度(用户可以参考第5章中相应的参数设置,这里不再赘述)。然后再运行此脚本文件,以求取最小安全弹性常数和在此弹性常数下蹦极者与地面之间的最小距离,并且显示在此弹性常数下的蹦极跳系统动态过程。其中最小安全弹性常数、蹦极者与地面之间的最小距离在MATLAB命令窗口中显示如下: The minimum safe k is: 27The minimum distance between jumper and ground is: 0.87934第8章 Simulink命令行仿真技术 在最小安全弹性常数为27的情况下,体重为70 kg的蹦极者与地面之间的最小距离不足1 m。图8.11所示为此系统的动态过程。第8章 Simulink命令行仿真技术 图8.11 最小安全弹性常数下的系统动态过程第8章 Simulink命令行仿真技术 8.4.2行驶控制系统中控制器的调节 第5章中的行驶控制系统给出了系统综合设计仿真的一个简单实例。汽车行驶控制系统的基本目的是控制汽车的速度变化,使汽车的速度在合适的时间之内加速到指定的速度。由第5章中的介绍可知,汽车行驶控制系统由如下三部分所构成: (1) 速度操纵机构的位置变换器。 (2) 行驶控制器。 (3) 汽车动力系统。第8章 Simulink命令行仿真技术 其中最为重要的部分为行驶控制器,行驶控制器是一个典型的PID反馈控制器。现要求使用命令行方式对行驶控制系统中的行驶控制器中比例调节的性能进行定性的分析。已知行驶控制器中PID控制器的I(积分)、D(微分)参数如下取值分别为I=0.01、D=1。P(比例)的取值由MATLAB脚本文件所决定(以分析不同P值下行驶控制器的性能)。为了对行驶控制器中比例调节的性能进行定性的分析,需要对第5章的行驶控制系统模型做一些改变,如下所示:第8章 Simulink命令行仿真技术 (1) 将行驶控制器子系统中的比例增益的取值改为p。 (2) 在系统模型的最顶层加入一个Outport模块输出仿真结果。 图8.12所示为修改后的汽车行驶控制系统的系统模型框图。第8章 Simulink命令行仿真技术图8.12 修改后的汽车行驶控制系统模型第8章 Simulink命令行仿真技术 然后编写MATLAB脚本文件cruise_system_cmd.m对行驶控制系统在不同的比例调节器取值下进行仿真,并绘制出不同取值下系统仿真结果以对比例调节性能进行分析。其要求如下: (1) 编写一个for循环改变p的值,取值范围为0到25,间隔为5。 (2) 在同一幅图中作出不同p值下系统的仿真结果以对比例调节性能进行分析。 编写好的cruise_system_cmd.m脚本文件如下所示: 第8章 Simulink命令行仿真技术 for p=0:5:25 % 设置不同的比例调节器取值 t,x,y=sim(cruise_system_command);% 对系统进行仿真 subplot(3,2,p/5+1)% 绘制在此取值下系统仿真结果,其 plot(t,y)% 结果如图8.13所示 ylabel(p=,num2str(p)end第8章 Simulink命令行仿真技术 从系统仿真的结果中可以明显看出比例调节器取值对汽 车行驶控制系统性能的影响:增加比例调节器的取值可以有效的改善行驶控制系统的动态性能。这是因为,对于行驶控制系统而言,其速度变化越平稳越好(但并非变化缓慢)。从图中可以看出,对于取值较大的比例调节器,汽车速度的过渡时间较小,而且变化平稳(仿真结果曲线无振荡,光滑)。第8章 Simulink命令行仿真技术图8.13 不同比例调节器取值下的系统响应 第8章 Simulink命令行仿真技术8.5 其其 它它 内内 容容 8.5.1 系统状态的确定 当使用命令行方式进行动态系统仿真时,经常需要对系统中的状态变量进行分析。当动态系统的系统模型中存在多个状态变量时,对这些状态变量进行分析(尤其是对输出的多个状态变量中的某一个状态进行单独分析),需要清楚地知道状态变量矩阵中各个状态变量的顺序。这时,用户可以使用下面的命令获得系统模型中状态输出的顺序。第8章 Simulink命令行仿真技术 sizes, x0, xord=modelname 例如,对于蹦极跳系统,如果需要对蹦极者在某个时刻的位置position与速度velocity进行分析,首先需要设置Simulink的仿真参数设置对话框中Workspace I/O选项卡以输出系统中的状态变量,如图8.14所示。 第8章 Simulink命令行仿真技术输出系统状态变量 图8.14 设置Workspace I/O选项卡以输出系统状态第8章 Simulink命令行仿真技术 从中可以知道蹦极跳系统的诸多信息,如系统的输入输出变量的数目(外部输入数目为0、输出1个变量)、系统中产生状态变量的模块及其输出顺序(第一个状态为积分块position的输出,即蹦极者的位置;第二个状态为积分块velocity的输出,即蹦极者的速度)、各状态变量的初始取值(积分块position的初始取值为30,积分块velocity的初始取值为0)等等信息。此时使用MATLAB的Array Editor观测输出变量xout,其中第一列与第二列分别为蹦极者的位置与速度,如图8.15所示。第8章 Simulink命令行仿真技术蹦极者位置 蹦极者速度 图8.15 蹦极跳者位置与速度第8章 Simulink命令行仿真技术 8.5.2 系统平衡点的确定 在大多数的系统设计中,设计者都需要对所设计的系统进行稳定性分析,因为绝大多数的系统在运行之中,都需要按照某种方式收敛到指定的平衡点处。这里所谓的平衡点一般指的是系统的稳定工作点,此时系统中所有的状态变量的导数均为0,系统处于稳定的工作状态。本书称处于平衡点状态时的系统为静止系统。第8章 Simulink命令行仿真技术 在系统设计中,最主要的设计目的之一便是使系统能够满足系统稳定的要求并在指定的平衡点处正常工作。在使用Simulink进行动态系统设计、仿真与分析时,可以使用命令trim对系统的稳定性与平衡点进行分析。下面简单介绍一下trim的使用与功能。第8章 Simulink命令行仿真技术1. 使用语法x,u,y,dx = trim(sys)x,u,y,dx = trim(sys,x0,u0,y0)x,u,y,dx = trim(sys,x0,u0,y0,ix,iu,iy)x,u,y,dx = trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx)x,u,y,dx = trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx,options)x,u,y,dx = trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx,options,t)x,u,y,dx,options = trim(sys,.)第8章 Simulink命令行仿真技术 2. 功能描述 根据系统的输入、初始状态(也可以说是初始的工作点),按照一定的方法求取系统中距离此工作点最近的平衡点,以及在达到平衡点时的系统输入与输出。如果系统中不存在平衡点,则trim命令会返回系统状态变量最接近0的工作点。x,u,y = trim(sys):求取距离给定初始状态x0最近的系统平衡点。x,u,y = trim(sys,x0,u0,y0):求取距离给定初始状态x0、初始输入u0与初始输出y0最近的平衡点。 x,u,y,dx = trim(sys,x0,u0,y0,ix,iu,iy):求取距离给定初始值向量中某一初始值距离最近 第8章 Simulink命令行仿真技术 x,u,y,dx = trim(s
展开阅读全文