Можно использовать функции объявления для вычисления производных значений параметров или инициализации переменных, вместо того, чтобы делать это внутри setup
функция.
Примечание
Начиная с R2019a, используя setup
не рекомендуется. Другие конструкции, доступные на Simscape™ языке, позволяют вам достичь тех же результатов без ущерба для возможностей выполнения. Дополнительные сведения см. в разделе настройке не рекомендуется.
Функция объявления является MATLAB® функция, используемая в разделе объявления представителей в файле Simscape. Функцией объявления может быть любая функция MATLAB (даже если она не поддерживается в языке Simscape equations
section), включая пользовательские функции на пути 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
атрибут.
При пропуске возвращаемых значений с помощью атрибута placeholder (~
), по крайней мере, одно значение должно быть присвоено. Пустые объявления приводят к ошибке в языке Simscape.
Входы и выходы функции объявления должны быть безединичными, то есть иметь модуль '1'
. Поэтому вы не можете непосредственно передать значения параметров с модулями качестве входных параметров функции объявления.
Для примера параметра p
имеет модули измерения 'm'
. Использовать его как вход для myfcn
function, использовать 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
Для получения дополнительной информации см. Раздел «Параметры во время выполнения».