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