Разделение на подклассы позволяет вам создавать модели компонента на основе других моделей компонента следовательно. Разделение на подклассы применяется только к моделям компонента, не моделям предметной области. Синтаксис для разделения на подклассы основан на системном синтаксисе класса MATLAB® для разделения на подклассы использования символа < на строке объявления модели компонента:
component MyExtendedComponent < PackageName.MyBaseComponent % component implementation here end
Путем разделения на подклассы подкласс наследовал всех участников (параметры, переменные, узлы, вводы и выводы) от базового класса и может добавить собственных участников. При использовании подкласса как внешний клиент все члены public базового класса доступны. Весь public и члены protected базового класса доступны событиям, уравнению, структуре и другим разделам подкласса. Подкласс не может объявить участника с тем же идентификатором как public или член protected базового класса.
Функция setup базового класса выполняется перед функцией setup подкласса.
Запуск в R2019a, использование setup не рекомендуются, чтобы избежать ошибок с доменными параметрами во время выполнения.
Если вы используете разделение на подклассы с составными компонентами, существует ограничение. Вы не можете заменить значение параметров для членского компонента базового класса при помощи функции setup подкласса.
Уравнения и подкласса и базового класса включены в полную систему уравнений.
Например, можно создать базовый класс ElectricalBranch.ssc, который задает электрическое ответвление с положительными и отрицательными внешними узлами, начальный ток и напряжение и отношение между переменными компонента и узлами (и поэтому, соединяет переменные компонента с Через и Через доменные переменные). Такой компонент не очень полезен как блок библиотеки, поэтому если вы не хотите, чтобы базовый класс появился как блок в пользовательской библиотеке, устанавливаете значение атрибута 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 содержит только параметры и уравнения, характерные для конденсатора.