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