exponenta event banner

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

Постоянная переменная - это локальная переменная в функции MATLAB ®, которая сохраняет свое значение в памяти между вызовами функции. Для создания кода функции должны инициализировать постоянную переменную, если она пуста. Дополнительные сведения см. в разделеpersistent.

При программировании функций MATLAB в следующих ситуациях:

  • Функциональные блоки MATLAB без прямого прохождения

  • MATLAB Функциональные блоки в моделях, которые содержат блоки управления состоянием в Synchronous способ

  • Функции MATLAB в диаграммах Stateflow ®, реализующих семантику машины Мура

Специализированная семантика влияет на то, как функция инициализирует свои постоянные данные. Поскольку инициализация должна быть независимой от ввода в функцию, следуйте следующим инструкциям:

  • Функция инициализирует свои постоянные переменные только путем обращения к константам.

  • Поток управления функцией не зависит от того, происходит ли инициализация.

Например, эта функция имеет постоянную переменную n.

function y = fcn(u)
    persistent n
        
    if isempty(n)
        n = u;
        y = 1;
        return
    end
    
    y = n;
    n = n + u; 
end
Этот тип инициализации приводит к ошибке, так как начальное значение n зависит от входных данных u и return оператор прерывает нормальный поток управления функцией.

Чтобы исправить ошибку, инициализируйте постоянную переменную, установив для нее постоянное значение, и удалите return заявление. Например, эта функция инициализирует постоянную переменную без возникновения ошибки.

function y = fcn(u)
    persistent n
        
    if isempty(n)
        n = 1;
    end
    
    y = n;
    n = n + u; 
end

Функциональный блок MATLAB без прямого канала

Эта модель содержит функциональный блок MATLAB, определяющий функцию. fcn, описанного ранее. Вход u является квадратной волной со значениями 1 и -1.

В функциональном блоке MATLAB:

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

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

Поскольку флажок Разрешить прямой проход снят, инициализация приводит к ошибке.

При изменении функции инициализируется n независимо от входных данных можно моделировать безошибочную модель.

Блок управления состоянием в синхронном режиме

Эта модель содержит функциональный блок MATLAB, определяющий функцию. fcn, описанного ранее. Вход u является квадратной волной со значениями 1 и -1.

В функциональном блоке MATLAB:

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

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

Поскольку модель содержит блок контроля состояния в Synchronous , инициализация приводит к ошибке.

При изменении функции инициализируется n независимо от входных данных можно моделировать безошибочную модель.

Диаграмма Stateflow, реализующая семантику Мура

Эта модель содержит диаграмму Stateflow, которая реализует семантику машины Мура. Диаграмма содержит функцию MATLAB, которая определяет функцию. fcn, описанного ранее. Вход u имеет значения 1 и -1, зависящие от состояния диаграммы.

В функции MATLAB:

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

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

Поскольку диаграмма реализует семантику Мура, инициализация приводит к ошибке.

При изменении функции инициализируется n независимо от входных данных можно моделировать безошибочную модель.

См. также

| | (Кодер HDL) | (Simulink)

Связанные темы