exponenta event banner

Подкласс и наследование

Подкласс позволяет строить модели компонентов на основе других моделей компонентов по расширению. Подкласс применяется только к моделям компонентов, а не к моделям доменов. Синтаксис для подкласса основан на системном синтаксисе класса MATLAB ® для подкласса с использованием < символ в строке объявления модели компонента:

component MyExtendedComponent < PackageName.MyBaseComponent
  % component implementation here
end

При подклассе подкласс наследует все элементы (такие как параметры, переменные, узлы) из базового класса и может добавлять собственные элементы. При использовании подкласса в качестве внешнего клиента все public доступны члены базового класса. Все public и protected члены базового класса доступны для событий, уравнения, структуры и других разделов подкласса. Подкласс не может объявлять член с тем же идентификатором, что и public или protected член базового класса.

setup функция базового класса выполняется перед setup функция подкласса.

Примечание

  • Начиная с R2019a, используя setup не рекомендуется. Другие конструкции, доступные на Simscape™ языке, позволяют достичь таких же результатов без ущерба для возможностей выполнения. Дополнительные сведения см. в разделе Настройка не рекомендуется.

Уравнения как подкласса, так и базового класса включены в общую систему уравнений.

Например, можно создать базовый класс 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 содержит только параметры и уравнения, специфичные для конденсатора.