Передача структуры параметров в 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;
также,
Но я получаю эту ошибку:
Фил, вот почему я попытался добавить еще один входной порт для 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)
Настройка 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!