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