Инициализируйте персистентные переменные в функциях MATLAB

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 без прямого сквозного соединения

Эта модель содержит блок 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, реализующая семантику Мура

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

Симулируйте модель. Симуляция возвращает ошибку потому что:

  • Начальное значение персистентной переменной n зависит от входа u.

  • return оператор прерывает нормальный поток управления функции.

  • График реализует семантику Мура.

Измените код функции MATLAB, как показано в откорректированной версии fcn. Симулируйте модель снова.

Смотрите также

| (Simulink) | (HDL Coder) |

Похожие темы