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

Можно использовать функции объявления, чтобы вычислить выведенные значения параметров или инициализировать переменные, вместо того, чтобы делать эту внутреннюю часть 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 не поддерживает генерацию кода, можно установить член attributeMATLABEvaluation=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

Для получения дополнительной информации смотрите Параметры периода выполнения.