Simulink更改运行参数
最近正在用Simulink仿真时遇到一个问题,就是要在模型运行时,需要在线修改模型中的模块的参数。用M函数总报错,尝试着用一下S函数试一试,居然可以。所以分享一下,希望对有相同问题的有帮助。
建立Simulink模型
打开Simulink,搭建一个简单的模型。我这里直接用Sin波形做实验。其他的基本一样。具体找模块的步骤我就省略了。
Matlab有自带一个S函数的模板,在命令行输入edit sfuntmpl
就会出现。将其保存到与建立的Simulink模型同一文件夹内,改个函数名即可。在Simulink中点击S函数。
我这里命名的S函数是testsf。剩下的就是改写S函数了,我也是刚学S函数,我把我学S函数的链接贴出来。
S函数
S函数指南
有这两个基本就可以用S函数了。
下面就是我对函数的改写代码。主要就是对输入输出个数的更改,其他的函数不需要更改保持默认就行。
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 0;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];
simStateCompliance = 'UnknownSimState';
function sys=mdlOutputs(t,x,u)
if u<0.05
set_param('test_201214/sin1','Frequency','2*pi*50')
set_param('test_201214/sin1','Amplitude','10')
else
set_param('test_201214/sin1','Amplitude','5')
set_param('test_201214/sin1','Frequency','2*pi*100')
end
sys = [];
更改完S函数后保存,点击运行Simulink即可。下图是运行的结果。
我将模型上传了CSDN,链接如下:
仿真