Simulink实时更改运行的模块参数

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,链接如下:
仿真

  • 18
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值