exponenta event banner

Функции объявления

Функции объявления можно использовать для вычисления значений производных параметров или инициализации переменных, вместо того, чтобы делать это внутри setup функция.

Примечание

Начиная с R2019a, используя setup не рекомендуется. Другие конструкции, доступные на Simscape™ языке, позволяют достичь таких же результатов без ущерба для возможностей выполнения. Дополнительные сведения см. в разделе Настройка не рекомендуется.

Функция объявления - это функция MATLAB ®, используемая в разделе объявления участника в файле Simscape. Функцией объявления может быть любая функция MATLAB (даже если она не поддерживается на языке Simscape)equations раздел), включая пользовательские функции на пути MATLAB. Например:

component A
  parameters
    p1 = 1;
    p2 = 0;
  end
  parameters(Access = private)
    pDerived = gamma(p1) + p2;
  end
  variables(Access = private)
    vDerived = {value = {my_fcn(p1,p2) + 1, 'm'}, priority = priority.high };
  end
  equations
    ...
  end
end

Используйте Access=private атрибут для объявления члена, если только все аргументы функции объявления не являются константами.

Будьте осторожны при использовании постоянных переменных внутри функции объявления, поскольку это может привести к противоречивым результатам для нескольких прогонов моделирования.

Несколько возвращаемых значений

Функции объявления могут возвращать несколько значений. Они соответствуют общим правилам функций MATLAB для нескольких возвращаемых значений. Например, если my_fcn() - функция объявления, которая возвращает три значения:

[id1, ~, id3] = my_fcn();  % omit the second return value
[id1] = my_fcn();  % rules of single assignment apply, nonrequested return values ignored

Действуют следующие ограничения:

  • Можно использовать несколько назначений значений с левой стороны только для параметров и переменных с помощью Access=private атрибут.

  • При пропуске возвращаемых значений с помощью атрибута-заполнителя (~), должно быть назначено хотя бы одно значение. Пустые объявления приводят к ошибке на языке Simscape.

Ограничение значений единицами измерения

Входы и выходы функции объявления должны быть безразмерными, то есть иметь единицу '1'. Поэтому нельзя напрямую передавать значения параметров с единицами измерения в качестве входных данных функции объявления.

Например, параметр p имеет единицы измерения 'm'. Использование в качестве входных данных для myfcn , используйте value для получения значения параметра без единиц измерения.

parameters
      p = {1,'m'}
end
parameters(Access = private)
      pd = my_fcn(value(p,'m'));   % extract unitless value from p
end

В предыдущем примере: pd является параметром без единиц измерения. Чтобы объявить его как значение с единицей измерения, используйте {value,'unit'} синтаксис, например:

      pd = {my_fcn(value(p,'m')),'m/s'};

Для нескольких входных и возвращаемых значений с единицами измерения используйте следующий синтаксис:

      [y_value,z_value] = my_fcn(value(a,'V'),value(b,'V'));
      y = {y_value,'V'};
      z = {z_value,'V'};

Дополнительные сведения см. в разделе Объявление члена как значения с единицей измерения.

Совместимость во время выполнения

Объявления элементов для параметров и переменных могут включать вызовы функций MATLAB, генерирующих код.

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

В этом примере: my_fcn - функция MATLAB, поддерживающая генерацию кода:

component A
  parameters
    p1 = 1;
    p2 = 0;
  end
  parameters(Access = private)
    pDerived = my_fcn(p1,p2);
  end
  equations
    ...
  end
end

Если p1 или p2 обозначается как Run-time в диалоговом окне блока, затем my_fcn вычисляется во время выполнения, и эти значения параметров можно настроить без регенерации кода.

Если my_fcn не поддерживает создание кода, можно задать атрибут элементаMATLABEvaluation=compiletime, чтобы предотвратить случайное назначение пользователем блока любого из входных параметров функции как Run-time в диалоговом окне блока:

component A
  parameters
    p1 = 1;
    p2 = 0;
  end
  parameters(Access = private,MATLABEvaluation = compiletime)
    pDerived = my_fcn(p1,p2);
  end
  equations
    ...
  end
end

Если задать этот атрибут, функция объявления будет вычисляться только во время компиляции, а параметры блока p1 и p2 будет помечен как Compile-time только.

Для работы с параметрами времени выполнения:

  • Функция объявления должна находиться в незащищенном файле MATLAB

  • Все вызываемые коды MATLAB должны быть совместимы с MATLAB Coder™

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

    • Использовать coder.allowpcode('plain')

    • Включить lint: %#codegen

Дополнительные сведения см. в разделе Параметры времени выполнения.