概述
MATLAB中S_Function的多输入输出问题(附m文件详细注释)
- Simulink模型
- S_Function配置
- 双击S_Function进入m文件
- 输出结果
- 注意事项
Simulink模型
模型有两个输入(都是sin(t)函数),两个输出(分别对两个输入增大2倍和3倍)。
由于S_Function不能有多个输入输出接口,因此需要借助Mux和DeMux模块将模型的多个输入输出转换为向量的形式传递至S_Function。
S_Function配置
在S_function parameters 中输入两个增益参数(2和3),多个参数之间用逗号分开。注意此处的参数输入顺序要与m文件中函数内部的参数(gain1,gain2)对应!!!
双击S_Function进入m文件
m文件有详细的标注,方便大家学习
%%%%%%%%%%%%
%t :系统时间
%x :系统状态
%u : 系统输入,即在simulink models中连接至S-function的线上的数据。注意区分x和u
%flag : 系统状态,由系统自动生成,决定了系统应当执行哪个S-function子函数
%sys : 系统本身,可以理解为下一时刻的系统;同时sys的前几个数值(sys[1]等)是系统的输出,即在simulink中S-function伸出线上的数据
%x0 : 系统初始状态
%str : 状态排序字符串,通常指定为[]。
%ts : 可认为是采样时间
%%%%%%%%%%%%%%%%
%函数的总入口,收到信号后,首先进入这个函数.这个函数包含一个switch语句,根据情况进入不同的子函数
function [sys,x0,str,ts,simStateCompliance] = Gain(t,x,u,flag,gain1,gain2)
%gain1和gain2对应的我们在S_Function paramaters里面输入的增益倍数2和3
switch flag
case 0
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;%S-function进行基本的设置,具体参数会在后面进行介绍。相当于构造函数
case 1
sys=mdlDerivatives(t,x,u);%该函数仅在连续系统中被调用,用于产生控制系统状态的导数
case 2
sys=mdlUpdate(t,x,u);%该函数仅在离散系统中被调用,用于产生控制系统的下一个状态
case 3
sys=mdlOutputs(t,x,u,gain1,gain2);%产生(传递)系统输出
case 4
sys=mdlGetTimeOfNextVarHit(t,x,u);%获得下一次系统执行(next hit)的时间,该时间为绝对时间 此函数仅在采样时间数组中指定变量离散时间采样时间[-2 0]时会被调用。
case 9
sys=mdlTerminate(t,x,u);%相当于构析函数,结束该仿真模块时被调用
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
%输出接口数量为2
sizes.NumOutputs = 2;
%输入接口数量为2
sizes.NumInputs = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];
simStateCompliance = 'UnknownSimState';
function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];
function sys=mdlOutputs(t,x,u,gain1,gain2)
%用sys(1)和sys(2)拆分sys向量,使之成为两个输出
%用u(1)和u(2)拆分u向量,使之成为两个输入
sys(1)=u(1)*gain1;
sys(2)=u(2)*gain2;
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];
输出结果
注意事项
1、注意在将多个输入转换为向量时一定要严格按照函数内部的u(1),u(2)顺序进行转换
2、注意在将输出向量转换成多个输出时一定要严格按照函数内部的sys(1),sys(2)顺序进行转换
3、注意在在S_function parameters 中输入多个参数时,多个参数之间用逗号分开。注意此处的参数输入顺序要与m文件中函数内部的参数对应!!!
最后
以上就是霸气板凳为你收集整理的MATLAB中S_Function的多输入输出问题(附m文件详细注释)的全部内容,希望文章能够帮你解决MATLAB中S_Function的多输入输出问题(附m文件详细注释)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复