Подклассирование позволяет вам создавать модели компонента на основе других моделей компонента по расширениям. Подклассы применяются только к моделям компонента, а не к моделям областей. Синтаксис подкласса основан на MATLAB® синтаксис системы классов для подклассирования с использованием < символ на линии объявления модели компонента:
component MyExtendedComponent < PackageName.MyBaseComponent % component implementation here end
При помощи подкласса подкласс наследует все представители (такие как параметры, переменные, узлы) от базового класса и может добавить представители самостоятельно. При использовании подкласса в качестве внешнего клиента все public доступны члены базового класса. Все public и protected представители базового класса доступны для событий, уравнения, структуры и других разделов подкласса. Подкласс не может объявлять представитель с тем же идентификатором, что и public или protected представитель базового класса.
The setup функция базового класса выполняется перед setup функция подкласса.
Примечание
Начиная с R2019a, используя setup не рекомендуется. Другие конструкции, доступные на Simscape™ языке, позволяют вам достичь тех же результатов без ущерба для возможностей выполнения. Дополнительные сведения см. в разделе настройке не рекомендуется.
Уравнения как подкласса, так и базового класса включены в общую систему уравнений.
Для примера можно создать базовый класс ElectricalBranch.ssc, который задает электрическую ветвь с положительными и отрицательными внешними узлами, начальным током и напряжением и отношением между переменными компонента и узлами (и, следовательно, соединяет переменные компонента с переменными области Through и Across). Такой компонент не очень полезен в качестве библиотечного блока, поэтому, если вы не хотите, чтобы базовый класс появлялся как блок в пользовательской библиотеке, задайте Hidden=true значение атрибута:
component (Hidden=true) ElectricalBranch
nodes
p = foundation.electrical.electrical; % +:left
n = foundation.electrical.electrical; % +:right
end
variables
i = { 0, 'A' };
v = { 0, 'V' };
end
branches
i : p.i -> n.i;
end
equations
v == p.v - n.v;
end
end
Если, например, ваш базовый класс находится в пакете с именем +MyElectrical, затем можно задать компонент подкласса Capacitor.ssc следующим образом:
component Capacitor < MyElectrical.ElectricalBranch
% Ideal Capacitor
parameters
c = { 1, 'F' };
end
equations
assert(c>0, 'Capacitance must be greater than zero');
i == c * v.der;
end
end
Компонент подкласса наследует p и n узлы, i и v переменные с начальными значениями и отношение между компонентом и переменными области от базового класса. Таким образом, Capacitor.ssc файл содержит только параметры и уравнения, характерные для конденсатора.