Передача структуры параметров в S-функцию m-кода уровня 1 в Simulink

Я пытаюсь передать структуру параметров в S-функцию в MATLAB. У меня есть несколько параметров, и я хотел бы избежать их передачи следующим образом:

% Общий вид синтаксиса S-функции MATLAB: % [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)

Я бы предпочел передать единую структуру, которая включает в себя все мои параметры. Я загрузил данные в рабочую область модели как:

Сначала я попробовал (в ответ Филу):

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

sizes.NumInputs = 2;

также,

с Simulink выглядит как

Но я получаю эту ошибку:

Фил, вот почему я попытался добавить еще один входной порт для S-функции, я думал, что он должен войти туда.

Я также попробовал: sizes.NumInputs = 1;

и я получаю эту ошибку:

Кроме того, вы уверены, что DATA_HMMWV является параметром? Это выглядит немного иначе, чем Param в этом окне:

NEW:::: 25.01.2016

Фил, проблема не в моей производной функции, а в том, что я до сих пор не передаю структуру в функцию. Вот картинка. Обратите внимание, что данные находятся в рабочей области модели, и я передал их (DATA_HMMWV) в функцию, но когда я прекращаю моделирование в строке 13 (режим отладки), DATA_HMMWV не находится в рабочей области функции.

Если код продолжается (до flag = 1), мы получаем:

Если код продолжает выполняться, он вылетает с этой ошибкой:

Таким образом, было недостаточно входных аргументов, переданных функции. Также функция очень проста:

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

sys = DATA_HMMWV.g;

% end mdlDerivatives

Он просто пытается получить параметр из структуры.

1 ответ

Решение

Настройка 1. Загрузите данные в виде структуры в базовое рабочее пространство и запустите модель Simulink.

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

Настройка 2: S-функция уровня 1, которая вызывается в simulink

Настройка 3: Когда вы дважды щелкнете по этой модели, укажите структуру, которую вы хотели бы передать в S-функцию:

Настройка 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)

Теперь вы передали структуру S-функции уровня 1!

Другие вопросы по тегам