MATLAB / Simulink - программно обеспечивает несколько внешних входов - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть следующая модель Simulink:

Observer/controller Simulink model

Я хотел бы предоставить внешние данные u[k] и y[k], т. Е. Я буду запускать симуляции с помощью команды MATLABлиния.Я обнаружил ранее , что я могу установить параметры [LoadExternalInput и ExternalInput] [3], и они по умолчанию имеют вектор [t u].

Но мои u[k] и y[k] являются векторами, и, похоже, ExternalInput может указывать только один вектор.Таким образом, каждая строка [t u] является значением всего вектора u в момент времени t.

Размеры u[k] и y[k] в моей модели здесь не обязательно известны заранее,Есть ли способ пройти в этих векторах (возможно, в виде структур)?

1 Ответ

2 голосов
/ 29 февраля 2012

Из Импорт данных во входные порты корневого уровня Я обнаружил, что могу сделать что-то вроде

sim('myModel', 'LoadExternalInput', 'on', 'ExternalInput', 'u, y');

, где u и y - структуры с полями time, signals.values и signals.dimensions; каждая строка signals.values является вектором, соответствующим n элементу time. signals.dimensions - это размер signals.values. Я должен вручную настроить порты In1, чтобы они ожидали того же размера, что и u.signals.values (ну, конечно, я могу сделать это программно, перед тем как подать ..):

Примечание Необходимо установить для параметра Размеры порта для входного или триггерного блока то же значение, что и для поля dimensions соответствующей структуры ввода. Если значения различаются, при попытке смоделировать модель отображается сообщение об ошибке.

(из «Импорт структур данных в порт ввода корневого уровня» )

Какой смысл устанавливать signals.dimensions, если мне все равно придется вручную устанавливать размер в блоке In1? В любом случае, возможно, именно так я и поступлю: просто изучите u и y перед запуском симуляции, а затем установите свойства Inblock (конечно, программно), чтобы ожидать векторы этой длины.

Я все еще надеюсь, что есть более элегантное решение для этого.

...