MatlabSimulink仿真注意事项

更新时间:2023-12-01 04:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1):注意不要混用非电气库的线和电气库线。这个原则在Matlab6.5中尤要注意,否则一些电压测量模块,电流测量模块可能会出错。显示数据类型不匹配Data type mismatch错误。在Matlab7.0

以上的版本中,simlink做了这方面的区分,不同连接线是无法连接在一起的。

2):SimPowerSystem工具箱和Simulink工具箱不是随便可以相连的。SimPowerSystem工具箱中有些模块是不能直接连接Simulink信号的。例如电机模型中,电压输入是需要电压源模块的(Power systems Blockset模块),而转矩可以输入simulink信号。如果实在想给电压端口输入simulink信号,需要给其先加一个受控电压源,用simulink信号控制受控信号。还有比如受控电流源

模块等,都可以实现SimPowerSystem工具箱与Simulink工具箱的连接。

3):注意选择适当的仿真算法。Matlab/Simulink中提供了一系列的仿真算法,比如discrete, ode algorithm(龙格库塔算法) including ode45, ode23, ode11s等等。一个适当算法的选择,可

以有效的缩短仿真时间和提供仿真的精度。当然具体的算法选择,可以参照相关的书籍讲解。

4):参数的正确设置是确保模型仿真正确的前提和必要条件。参数的不匹配可能完全导致一些错误的仿真结果。举个简单的例子:我们要得到电阻元件,可以使用SimPowerSystem工具箱中Series RLC Branch模块或者Parallel RLC Branch模块,对于前者,我们必须设置电感为0,电容为inf, 后者,

要求设置为电感为inf, 电容为0。所以正确的参数设置是仿真的重要前提。

问: Matlab仿真中怎样编辑Scope中的图象???

答: 实现的方法有以下的几种:

1)PrintScreen,然后粘贴到Windows位图编辑器,选择图像点击右键,选择“反色”即可; 2)在Scope中,它的参数设置的第二页,有一个Save Data to Workplace,将它选中,然后在下

面的方框中指定变量名,然后用plot命令画出;

3)直接在模型上再加一个,to Workplace模块,也用plot画出; 4)直接在模型上加一个,outport模块,用plot命令绘制tout和yout;

5) 等scope显示出来图像以后,在matlab上运行

set(0,'ShowHiddenHandles','On')

set(gcf,'menubar','figure')

这时候你会发现scope的工具栏的上面多了一行,与plot命令得到的figure的工具栏是一样的。点击

insert-axes,鼠标会变成十字形状,然后再图像的任意一处双击左键出现一个对话框PropertyEditor,选中style在窗口的右便会出现color,这时你就可以任意修改背景颜色了。

问: 怎样进行S-function的编程和使用???

答: S-function也就是System-function的缩写。说得简单,S-function就是用MATLAB所提

供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。要了解

S-function,必须了解以下知识:

(1)direct feedthrough (2)dynamically sized inputs (3)setting sample times and offsets

一.Direct feedthrough

direct feedthrough意思是说系统的输出或可变采样时间是否受到输入的控制。大家清楚有的系统是

受到输入控制如:

y=k*u (u是输入,k是放大因子,y是输出)

而有的系统输出是不受到输入影响,如:

输出:y=x dx=u ,x表示状态

二.Dynamically sized inputs

主要是给出:输入连续状态数目(size.NumContStates),离散状态数目(size.NumDiscStates) ,输出数目(size.NumOutputs),输入数目(size.NumInputs),Direct Feedthrough(size.Dir

Feedthrough)。

三.Setting sample times and offsets

Setting smaple times and offsets主要设置采样时间

具体的编程格式参照matlab提供的demos文件。

问:如何循环调用Simlink模型并保存结果?在仿真时,经常需要修改 simulink 模型参数并保存仿真结

果.

答:最普通的办法是多次运行simulink模型, 手工修改仿真参数,这样会浪费大量的精力和时间。实际上可以用M文件进行循环调用。比如:调用simulink模块ModelName.mdl,N次, 并把每次仿真

的结果Simout写在不同的矩阵result1~resultN中. 可以使用以下的代码:

clear;

for k=1:N % loop

simk = k; %used to indicate the simulated sequence;

sim ModelName; % run the ModelName.mdl in the command workspace; assignin('base',strcat('Result',num2str(k)),Simout); %save the simulated results.

end

问:Simulink中的信号输入输出的方法

答:方法如下: 1.从工作空间中输入数据

matlab--+>simulink--+>sources--+>from workspace (simin)

2.从外部输入数据文件

matlab--+>simulink--+>sources--+>from file (untilted.mat),说明:untilted.mat是matlab数据格式,你可将输入文件存到 .txt文件,然后到如到工作空间,最后使用save保存这个工作空

间的数据变量. 当然.mat文件中必须包含时间数据,否则仿真会出错。

3.从simulink子系统中互相导入数据 matlab--+>simulink--+>sources--+>In1

4.将数据导出到工作空间

matlab--+>simulink--+>sinks--+>to workspace(simout)

5.将数据导出到文件

matlab--+>simulink--+>sinks--+>to file (untilted.mat)

6.将数据导出到simulink子系统

matlab--+>simulink--+>sinks--+>out1

问:对于一些特殊功能,无法用模块来实现,怎么办?

答:对于一些特殊功能,如果无法用模块来实现,有两个比较简单的方法:

1):可以使用s-function:其实s-function可以实现一些特殊功能的被控模块,但是具体的编程还是稍微复杂一些。可以参见前面发布的s-function编程。不过,Matlab提供了continued和discrete

的编程模式,只要严格按照编程模式来,应该还是不那么容易出错的。

2):当然是Matlab Fcn模块:通过编写M文件,同样可以实现很多复杂的功能。毕竟M文件编写程序更加灵活。编写M文件的格式:function Output=DefinationFunction(Input),这里输入和输出Input and Output都可以是一维或者是多维的。如果是多维的话,可以用Signal Routing下的Mux and Demux进行信号的综合和分解。以下提供一个简单的M文件范例,主要根据输入的位置信号和角速度信号得到三个反电动势信号。使用了Mux and Demux模块。Matlab Fcn模块中的MATALB function checkbox 下填写BackEMF(自己保存的M文件名)。当然这个实例可以用

Simulink的查表模块来实现,仅仅为了举一个例子。

function E=BackEMF(inputData)

pos=inputData(2); per=fix(pos/(2*pi))*2*pi;

w=inputData(1);

pos=mod(pos,2*pi);k=1/(0.02+0.0067);

if(pos>=0)&(pos

E=[k*w;-k*w;k*w*((per-pos)/(pi/6)+1)];

elseif(pos>=pi/3)&(pos<2*pi/3)

E=[k*w;k*w*((pos-pi/6-per)/(pi/6)-1);-k*w];

elseif(pos>=2*pi/3)&(pos

E=[k*w*((per+2*pi/3-pos)/(pi/6)+1);k*w;-k*w];

elseif(pos>=pi)&(pos<4*pi/3)

E=[-k*w;k*w;k*w*((pos-pi-per)/(pi/6)-1)];

elseif(pos>=4*pi/3)&(pos<5*pi/3)

E=[-k*w;k*w*((per+4*pi/3-pos)/(pi/6)+1);k*w];

elseif(pos>=5*pi/3)&(pos<=2*pi)

E=[k*w*((pos-5*pi/3-per)/(pi/6)-1);-k*w;k*w];

end

simscape大类库下面,共有“四大家族”:A)SimHydraulics,建模和仿真水力系统;B)SimDriveline,建模仿真驱动系统;C)SimMechanics,建模仿真一般机械系统;D)SimElectronics,建模仿真电磁和电子系统。

把这四大家族放到一起的根本原因是他们的共性,即他们仿真的和其他simulink不一样,不是以数学模型为基础进行信号处理和操作的,而是直接就是物理模型级别的!(感觉有点绕,说实话,我怎么感觉mathworks的这句话有问题呢?)这四大家族的产品可以共同协作完成涉及机械、电子、电磁、水力、风力、热能等领域的建模与仿真。

其实,simpowersystems也是属于物理级模型,不过由于它自己是很完备的,并且具有自己的大量自己个性特色,就给搞出去独干了!要是把

simpowrsystems也放到这里面,这个simscape就太大了,也就失去了这种以同类型仿真合并的意义了!

简单看了几个demo,感觉很熟悉,几乎立即就上手了!因为上面说了simpowersystems也是属于物理模型仿真simscape大家族的。感觉和

simpowersystems不同的是,这里面的每个模型都需要solver configuration模块,为了获得scope可现实的信号,还要使用物理信号-simulink信号转换器(PS-S),同理,为了使用simulink中的类似阶跃信号之类的激励信号,也要使用simulink-物理信号转换器(S-PS),为了测量电压、电流、磁通或者转矩

之类的物理信号,使用的不再是simpowersystems中的measurements器件,而是更物理一点的“传感器”,我看到了各种传感器。

本文来源:https://www.bwwdw.com/article/qmft.html

Top