在Simulink中将参数结构传递给Level 1 m-code S-function

时间:2016-01-19 18:54:37

标签: matlab parameters simulink s-function

我试图在MATLAB中将参数结构传递给S函数。我有一堆参数,我想避免像这样传递它们:

%MATLAB S函数语法的一般形式是: %[SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)

我更希望传递包含所有参数的单个结构。我将数据加载到Model Workspace中: enter image description here

首先我试过(回应菲尔):

function [sys,x0,str,ts,simStateCompliance] = system1(t,x,u,flag,DATA_HMMWV)

sizes.NumInputs = 2;

with the Simulink looking like:

但是我收到了这个错误:

enter image description here

菲尔,这就是为什么我试图为S-Function添加另一个输入端口,我认为它必须进入那里。

我也尝试过: sizes.NumInputs = 1;

我收到此错误: enter image description here

另外,你确定DATA_HMMWV是参数吗?它在这个窗口中看起来与Param略有不同: enter image description here

新:::: 2016年1月25日

菲尔,问题不在于我的派生功能,问题是我仍然没有将结构传递给函数。这是一张照片。请注意,数据在Model Workspace中,我将它(DATA_HMMWV)传递给函数,但是当我在第13行(调试模式)停止模拟时,DATA_HMMWV不在函数工作区中。

enter image description here

如果代码继续(到flag = 1),我们得到: enter image description here

如果代码继续运行,则会因此错误而崩溃: enter image description here

因此,没有足够的输入参数传递给函数。此外,功能非常简单:

% function sys = mdlDerivatives(t,x,u,DATA_HMMWV)

sys = DATA_HMMWV.g;

%end mdlDerivatives

它只是试图从结构中获取参数。

1 个答案:

答案 0 :(得分:0)

设置1:将数据作为结构加载到基础工作区并运行simulink模型

clear;
clc;
close all
PlantName = 'untitled';
open(PlantName)
TFinal          = 10;
load DATA_HMMWV.mat
sim(PlantName, TFinal)

设置2: level 1 S-function that is being called in simulink

设置3: 双击此模型时,请指定要传递给S函数的结构: enter image description here

设置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函数!