simulink一个集成模块,我想把其中三个参数修改成可以控制的随时间变化的量。然后写了s-function,在simulink和m文件中
都定义了全局变量,用set_param设置。但是simulink跑出来后,这三个参数仍然不受s-function控制。网上的帖子都看了一遍,逐一修改后还是不知道
哪里出了问题,求各位大神指路。
程序和模型可以发给大神帮忙修正!
function [sys,x0,str,ts] = sfcn_parameter(t,x,u,flag)
switch flag,
case 0, %初始化
[sys,x0,str,ts]=mdlInitializaSizes();
case 1,
sys= mdlOutputs(t,x,u);
case { 2, 3 ,4, 9 }
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts] = mdlInitializaSizes()
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 3; %对应s-funtion输出数目
sizes.NumInputs = -1; %对应s-function输入数目,这里u就是输入,对应仿真时间
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
global PloadA PloadB PloadC;
PloadA = 7e6;
PloadB = 7e6;
PloadC = 7e6;
x0 = [];
str = [];
ts = [-1 0];
function sys=mdlOutputs(t,x,u)
global PloadA PloadB PloadC;
if u<=0.1
PloadA = 7e6;
PloadB = 7e6;
PloadC = 7e6;
elseif 0.1
PloadA = 7.1e6+randn(1);
PloadB = 7e6+randn(1);
PloadC = 7e6+randn(1);
else u>0.4
PloadA = 7e6+10e4*randn(1); % u就是输入,仿真时间,可以自己加判断语句在特定时刻修改PloadA
PloadB = 7e6+10e4*randn(1);
PloadC = 7e6+10e4*rand(1);
end
set_param('Diff_deltaCurrent_Three_1017/delta connected active load','PloadA',num2str(PloadA));% 修改模型中参数
set_param('Diff_deltaCurrent_Three_1017/delta connected active load','PloadB',num2str(PloadB));% 修改模型中参数
set_param('Diff_deltaCurrent_Three_1017/delta connected active load','PloadC',num2str(PloadC));% 修改模型中参数
sys = [PloadA PloadB PloadC];
2017-10-18 10:59 上传