Проблема с обратным вызовом Simulink

Эй, у меня может быть очень простая проблема с использованием PreLoadFcn в моей модели.

Я хочу, чтобы моя модель загружала m-файл перед началом симуляции (я думаю, для этого предназначена preloadfcn).

Поэтому я добавил в файл -> свойства модели -> обратные вызовы -> PreLoadFcn строку

run('./init.m')

В этом файле установлено несколько переменных. Моя модель ссылается на эти переменные и выдает исключение, что не может их найти, когда я просто нажимаю «Начать симуляцию». Это указывает мне, что обратный вызов не делает то, что должен делать...

Файл init.m находится в том же каталоге, что и файл моделирования.

Даже попытка добавить каталог в PATH Matlab не дала никакого эффекта.

приветствует Поэсхлорна


person poeschlorn    schedule 09.02.2011    source источник


Ответы (3)


Работает ли простой запуск «init» в командной строке MATLAB перед запуском модели? Если это так, вам, вероятно, следует заменить обратный вызов просто

init

который запустит скрипт "init.m".

person Edric    schedule 09.02.2011
comment
Ввод «init» в командную строку Matlab работает, но не при обратном вызове - person poeschlorn; 09.02.2011
comment
Я нашел это. Мне пришлось объявить функцию в этом m-файле :) - person poeschlorn; 25.02.2011
comment
@poeschlorn Вы имеете в виду, что простой запуск ('./init.m') в обратном вызове не работает? - person Gupta; 31.07.2019

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

Кроме того, инициализация — это скрипт или функция? Это должен быть скрипт или он должен использовать evalin('base') для помещения переменных в базовое рабочее пространство. Вы также можете попробовать поставить точку останова в init.m, чтобы убедиться, что она не сработает.

person MikeT    schedule 10.02.2011
comment
привет, init - это скрипт, который точно называется init.m. Он не содержит дополнительных функций внутри. Он просто инициализирует некоторые переменные в моей рабочей области. Что касается вашего первого приглашения, я вместо этого использовал StartFcn (выполнение сценария до начала симуляции), но это не дало никакого эффекта. - person poeschlorn; 10.02.2011
comment
Странно, я точно не знаю, почему это не работает. Я много раз использовал обратные вызовы в моделях, чтобы делать именно то, что делаете вы, и они всегда работают. Еще одна вещь, которую можно попробовать, — это вставить содержимое init.m непосредственно в функцию обратного вызова. - person MikeT; 12.02.2011

У меня тоже была такая же проблема. Теперь это было решено. решение было довольно простым. после определения функции в PreLoadFcn* вам просто нужно сохранить файл simulink и перезапустить его. наверняка сработает.

привет, Гарри

person Harry_108    schedule 17.04.2015