persistent variable является локальной переменной в MATLAB® функция, которая сохраняет ее значение в памяти между вызовами функции. Если вы генерируете код из своей модели, необходимо инициализировать персистентную переменную для функций MATLAB. Для получения дополнительной информации смотрите persistent.
При использовании функций MATLAB, которые содержат персистентные переменные в Simulink® модели, необходимо следовать этим инструкциям:
Инициализируйте персистентные переменные в функциях только путем доступа к константам.
Гарантируйте, что поток управления функции не зависит от того, происходит ли инициализация.
Если вы не следуете этим инструкциям, несколько условий производят ошибку инициализации:
MATLAB Function блокируется с персистентными переменными, где свойство Allow direct feedthrough очищено
MATLAB Function блокируется с персистентными переменными в моделях с блоками Госконтроля, где State control установлен в Synchronous
Stateflow® графики, которые реализуют семантику машины Мура и то использование функции MATLAB с персистентными переменными
Например, функциональный fcn ниже использования персистентная переменная, n@fcn нарушает обе инструкции. Начальное значение n зависит от входа u и return оператор прерывает нормальный поток управления функции. Следовательно, этот код производит ошибку, когда используется в модели, которая имеет одно из условий, описанных выше.
function y = fcn(u) persistent n if isempty(n) n = u; y = 1; return end y = n; n = n + u; end
Чтобы предотвратить ошибку, инициализируйте персистентную переменную путем установки его на постоянное значение и удаления return оператор. Эта модифицированная версия fcn инициализирует персистентную переменную, не производя ошибку:
function y = fcn(u) persistent n if isempty(n) n = 1; end y = n; n = n + u; end
Эта модель содержит блок MATLAB function, который использует первую версию fcn, описанный ранее. Вход блока MATLAB function является прямоугольной волной, которая обеспечивается блоком Sign и Sine Wave. Блок MATLAB function добавляет значение u к персистентной переменной n на каждом временном шаге.

Симулируйте модель. Симуляция возвращает ошибку потому что:
Начальное значение персистентной переменной n зависит от входа u.
return оператор прерывает нормальный поток управления функции.
Позволение прямого проходного свойства блока MATLAB function очищено.
Измените код блока MATLAB function, как показано в откорректированной версии fcn. Симулируйте модель снова.

Эта модель содержит блок MATLAB function, который использует первую версию fcn, описанный ранее. Вход блока MATLAB function является прямоугольной волной, которая обеспечивается блоком Sign и Sine Wave. Блок MATLAB function добавляет значение u к персистентной переменной n на каждом временном шаге. Модель содержит блок State Control, где Госконтроль установлен в Synchronous.

Симулируйте модель. Симуляция возвращает ошибку потому что:
Начальное значение персистентной переменной n зависит от входа u.
return оператор прерывает нормальный поток управления функции.
модель содержит блок State Control, где Госконтроль установлен в Synchronous.
Измените код блока MATLAB function, как показано в откорректированной версии fcn. Симулируйте модель снова.

Эта модель содержит диаграмму Stateflow с функцией MATLAB, которая использует первую версию fcn, описанный ранее. Функция MATLAB добавляет значение (1 или -1) определенный активным состоянием к персистентной переменной n на каждом временном шаге.

Симулируйте модель. Симуляция возвращает ошибку потому что:
Начальное значение персистентной переменной n зависит от входа u.
return оператор прерывает нормальный поток управления функции.
График реализует семантику Мура.
Измените код функции MATLAB, как показано в откорректированной версии fcn. Симулируйте модель снова.

persistent | MATLAB Function (Simulink) | State Control (HDL Coder) | Chart