将参数结构传递给 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!