将参数结构传递给 Simulink 中的 Level 1 m-code S-function
Passing a structure of parameters to a Level 1 m-code S-function in Simulink
我正在尝试将参数结构传递给 MATLAB 中的 S-function。我有一堆参数,我想避免像这样传递它们:
% MATLAB S-function 语法的一般形式是:
% [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)
我更愿意传递包含我所有参数的单一结构。我将数据加载到模型工作区中,如下所示:
首先我尝试了(回应 Phil):
函数 [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)
sizes.NumInputs = 2;
另外,
但是我得到这个错误:
Phil,这就是我尝试向 S-Function 添加另一个输入端口的原因,我认为它必须进入那里。
我也试过:
sizes.NumInputs = 1;
我得到这个错误:
还有,你确定DATA_HMMWV是一个参数吗?它看起来与 window 中的参数略有不同:
新:::2016 年 1 月 25 日
Phil,问题不在于我的派生函数,问题在于我仍然没有将结构传递给函数。这是一张照片。请注意,数据位于模型工作区中,我将其 (DATA_HMMWV) 传递给函数,但是当我在第 13 行(调试模式)停止模拟时,DATA_HMMWV 不在函数工作区中。
如果代码继续(到 flag = 1),我们得到:
如果代码继续 运行,它会因以下错误而崩溃:
因此,没有足够的输入参数传递给函数。还有,功能很简单:
%
函数 sys = mdlDerivatives(t,x,u,DATA_HMMWV)
sys = DATA_HMMWV.g;
% 结束 mdlDerivatives
它只是试图从结构中获取一个参数。
设置 1:将数据作为结构加载到基础工作区和 运行 simulink 模型中
clear;
clc;
close all
PlantName = 'untitled';
open(PlantName)
TFinal = 10;
load DATA_HMMWV.mat
sim(PlantName, TFinal)
设置 2:
设置 3:
双击此模型时,指定要传递给 S-Function 的结构如下:
设置 4:您的函数也应该包含结构:
function [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)
以及您需要结构的任何其他函数,例如:
case 1
sys = mdlDerivatives(t,x,u,DATA_HMMWV);
那么,
function sys = mdlDerivatives(t,x,u,DATA_HMMWV)
现在,您已将结构传递给 1 级 S-Function!
我正在尝试将参数结构传递给 MATLAB 中的 S-function。我有一堆参数,我想避免像这样传递它们:
% MATLAB S-function 语法的一般形式是: % [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)
我更愿意传递包含我所有参数的单一结构。我将数据加载到模型工作区中,如下所示:
首先我尝试了(回应 Phil):
函数 [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)
sizes.NumInputs = 2;
另外,
但是我得到这个错误:
Phil,这就是我尝试向 S-Function 添加另一个输入端口的原因,我认为它必须进入那里。
我也试过: sizes.NumInputs = 1;
我得到这个错误:
还有,你确定DATA_HMMWV是一个参数吗?它看起来与 window 中的参数略有不同:
新:::2016 年 1 月 25 日
Phil,问题不在于我的派生函数,问题在于我仍然没有将结构传递给函数。这是一张照片。请注意,数据位于模型工作区中,我将其 (DATA_HMMWV) 传递给函数,但是当我在第 13 行(调试模式)停止模拟时,DATA_HMMWV 不在函数工作区中。
如果代码继续(到 flag = 1),我们得到:
如果代码继续 运行,它会因以下错误而崩溃:
因此,没有足够的输入参数传递给函数。还有,功能很简单:
% 函数 sys = mdlDerivatives(t,x,u,DATA_HMMWV)
sys = DATA_HMMWV.g;
% 结束 mdlDerivatives
它只是试图从结构中获取一个参数。
设置 1:将数据作为结构加载到基础工作区和 运行 simulink 模型中
clear;
clc;
close all
PlantName = 'untitled';
open(PlantName)
TFinal = 10;
load DATA_HMMWV.mat
sim(PlantName, TFinal)
设置 2:
设置 3:
双击此模型时,指定要传递给 S-Function 的结构如下:
设置 4:您的函数也应该包含结构:
function [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)
以及您需要结构的任何其他函数,例如:
case 1
sys = mdlDerivatives(t,x,u,DATA_HMMWV);
那么,
function sys = mdlDerivatives(t,x,u,DATA_HMMWV)
现在,您已将结构传递给 1 级 S-Function!