0

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

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

我更喜欢传递一个包含我所有参数的单一结构。我将数据加载到模型工作区中: 在此处输入图像描述

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

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

大小.NumInputs = 2;

还,

Simulink 看起来像:

但我得到这个错误:

在此处输入图像描述

Phil,这就是为什么我尝试向 S-Function 添加另一个输入端口的原因,我认为它必须进入那里。

我也试过:sizes.NumInputs = 1;

我得到这个错误: 在此处输入图像描述

另外,您确定 DATA_HMMWV 是一个参数吗?它看起来与此窗口中的 Param 略有不同: 在此处输入图像描述

新:::: 2016 年 1 月 25 日

Phil,问题不在于我的导数函数,问题在于我仍然没有将结构传递给函数。这是一张图片。请注意,数据在模型工作区中,我将它 (DATA_HMMWV) 传递给函数,但是当我在第 13 行(调试模式)停止模拟时,DATA_HMMWV 不在函数工作区中。

在此处输入图像描述

如果代码继续(to flag = 1),我们得到: 在此处输入图像描述

如果代码继续运行,它会因以下错误而崩溃: 在此处输入图像描述

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

% 函数 sys = mdlDerivatives(t,x,u,DATA_HMMWV)

sys = DATA_HMMWV.g;

% 结束 mdlDerivatives

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

4

1 回答 1

0

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

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

设置 2: 在 simulink 中调用的 1 级 S-Function

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

于 2016-01-28T17:19:10.223 回答