Я пытаюсь передать структуру параметров S-функции в MATLAB. У меня есть куча параметров и Я хотел бы избежать передачи их следующим образом:Передача структуры параметров на S-функцию m-кода уровня 1 в Simulink
% Общий вид синтаксисе S-функции MATLAB является: % [СИС, Х0, УЛ, TS, SIMSTATECOMPLIANCE] = SFUNC (T, X, U, FLAG, P1, ..., Pn)
Я предпочел бы передать единую структуру, включающую все мои параметры. Я загрузил эти данные в модели рабочей области, как:
Сначала я попробовал (в ответ на Phil):
функции [SYS, х0, ул, TS, simStateCompliance] = system1 (т, х, и , флаг, DATA_HMMWV)
размеры.NumInputs = 2;
также
Но я получаю эту ошибку:
Фил, поэтому я попытался добавить еще один входной порт для S-функции, я думал что он должен был туда попасть.
Я также пробовал: sizes.NumInputs = 1;
Кроме того, вы уверены, что DATA_HMMWV является параметром? Это выглядит несколько иначе, чем Param в этом окне:
NEW :::: 1/25/2016
Фил, проблема не с моей производной функции, проблема в том, что я до сих пор не передавая структуру в функцию. Вот картина. Обратите внимание, что данные находятся в рабочей области модели, и я передал ее (DATA_HMMWV) функции, но когда я прекращаю моделирование в строке 13 (режим отладки), DATA_HMMWV не находится в рабочем пространстве функции.
Если код продолжает (с флагом = 1) получаем:
Если код продолжает работать, он падает с этой ошибкой:
Итак, было недостаточно входных аргументов, переданных функции. Кроме того, функция очень проста:
% функции SYS = mdlDerivatives (т, х, и, DATA_HMMWV)
SYS = DATA_HMMWV.g;
% конечный mdlDerivatives
Он просто пытается захватить параметр из структуры.
Вы действительно должны писать S-функцию уровня 2, а не S-функцию уровня 1. Для синтаксиса уровня 1 ваша переменная 'P1' должна быть тем же типом данных, что и переменная, которую вы передаете, поэтому просто передавайте ее в виде ввода. (Для S-функций уровня 2 вам нужно научиться использовать объекты шины.) –
Фил, большое спасибо за ваши предложения. Я рассмотрю S-функцию уровня 2, но пока (чтобы избежать внесения слишком большого количества изменений в очень сложный код, который я унаследовал), я попробую ваше второе предложение. Я действительно пытался передать структуру в качестве входных данных, но я не смог заставить ее работать. Как только я определяю данные в рабочей области модели (как в моем изображении выше), как я могу передать ее в S-функцию? –
В Simulink существует очень четкое различие между _signal_ (который подается в блок через входной порт) и _parameter_ (который указан в диалоговом окне блока). Ваш параметр «DATA_HMMVW» является параметром. Дважды щелкните по блоку S-Function и введите имя переменной в строке S-Function Parameters диалогового окна. –