如何配置S-Function输出以在Simulink中获取系统单位阶跃响应
修改方法
你只需要修改S-Function的两处代码即可实现需求:
- 调整直接馈通标志:因为需要输出输入量
u,属于直接馈通场景,需要把初始化部分的s.DirFeedthrough从0改为1 - 补充case3的第三个输出项:在输出分支里增加第三个输出为输入量
u
修改后的完整S-Function代码如下:
function [sys,x0,str,ts]=massamola_sfcn(t,x,u,flag,x10,x20) switch flag case 0 %初始化 str=[]; ts = [0 0]; s = simsizes; s.NumContStates=2; s.NumDiscStates=0; s.NumOutputs=3; s.NumInputs=1; s.DirFeedthrough=1; % 这里修改为1,开启直接馈通 s.NumSampleTimes=1; sys = simsizes(s); x0 = [x10;x20]; case 1 %计算微分 sys = massamola(t,x,u); case 3 %输出 sys(1) = x(1); % 位置 sys(2) = x(2); % 速度 sys(3) = u; % 新增:输出输入的阶跃信号 case {2 4 9} % 离散状态更新、计算下一个采样时刻、终止 sys = []; otherwise error(['unhandled flag=',num2str(flag)]); end
Simulink侧操作
S-Function的参数配置保持原有设置即可,之后将S-Function的三个输出端口分别接入Scope的三个输入,运行模型后就能同时看到阶跃输入信号、位置响应、速度响应三条曲线,和你预期的效果一致。
内容的提问来源于stack exchange,提问作者user13053456
相关产品推荐
相关产品推荐

