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