Различные подсистемы

Эта модель иллюстрирует подсистемы варианта Simulink®. Различные подсистемы позволяют вам обеспечить несколько реализаций для подсистемы, где только одна реализация активна в процессе моделирования. Можно программно выгрузить активную реализацию и заменить ее на одну из других реализаций, не изменяя модель.

Обзор различных подсистем

Различный блок Subsystem содержит две или больше дочерних подсистемы, где один дочерний элемент активен во время выполнения модели. Активная дочерняя подсистема упоминается как активный вариант. Можно программно переключить активный вариант Различного блока Subsystem путем изменения значений переменных в глобальной рабочей области, или вручную переопределяющим различным выбором с помощью Различного диалогового окна блока Subsystem. Активный вариант программно соединен с блоками Inport и Outport Различной Подсистемы Simulink во время компиляции модели.

Программно управлять различным выбором, Simulink.Variant объект сопоставлен с каждой дочерней подсистемой в Различном диалоговом окне блока Subsystem. Simulink.Variant объекты создаются в глобальной рабочей области MATLAB®. Эти объекты имеют свойство под названием Condition, который является выражением, которое оценивает к булеву значению и используется, чтобы определить активную различную дочернюю подсистему.

Примечание: можно задать различные средства управления в глобальной рабочей области MATLAB® или словаре данных.

Например, определение VSS_LINEAR_CONTROLLER=Simulink.Variant('VSS_MODE==1');

в глобальной рабочей области создает Simulink.Variant возразите где аргумент ('VSS_MODE==1') конструктора задает, когда вариант активен. Используя Различное диалоговое окно Подсистемы, вы затем сопоставляете VSS_LINEAR_CONTROLLER с одной из дочерних подсистем в Различной Подсистеме. Определение

VSS_MODE=1

в глобальной рабочей области, активирует VSS_LINEAR_CONTROLLER вариант. Аргумент условия может быть простым выражением, состоящим из скалярных переменных, перечислений, равенства, неравенства, &&, и ~. Круглая скобка () может использоваться в группировке приоритета.

Используя различные подсистемы

Модель в этом примере использует следующие различные объекты и различную контрольную переменную, которые заданы в глобальной рабочей области MATLAB:

VSS_LINEAR_CONTROLLER=Simulink.Variant('VSS_MODE==1');

VSS_NONLINEAR_CONTROLLER=Simulink.Variant('VSS_MODE==2');

VSS_MODE=2;

Открытие модели sldemo_variant_subsystems в качестве примера запускает PreLoadFcn, заданный в File -> ModelProperties -> Callbacks. Это заполняет глобальную рабочую область с переменными для Различного блока Subsystem под названием Контроллер:

open_system('sldemo_variant_subsystems')

Рисунок 1: модель в качестве примера, sldemo_variant_subsystems

Задавать Simulink.Variant ассоциация объектов для Подсистемы контроллера, щелкните правой кнопкой по Подсистеме контроллера и выберите Subsystem Parameters, который откроется, Подсистема контроллера блокируют диалоговое окно.

Диалоговое окно блока Подсистемы контроллера задает два потенциальных варианта. Эти два варианта в свою очередь сопоставлены с двумя Simulink.Variant объекты VSS_LINEAR_CONTROLLER и VSS_NONLINEAR_CONTROLLER, которые существуют в глобальной рабочей области. Эти объекты имеют свойство под названием Условие, выражение, которое оценивает к булевской переменной и это определяет, какой вариант активен. Условие также показывают в Различном диалоговом окне блока Subsystem. В этом примере, свойствах Condition VSS_LINEAR_CONTROLLER и VSS_NONLINEAR_CONTROLLER VSS_MODE == 1 и VSS_MODE == 2, соответственно. Переменная VSS_MODE находится в глобальной рабочей области и может быть стандартная переменная MATLAB или Simulink.Parameter.

Если нет никакого связанного различного объекта или '%' (комментарий) префиксы символа различный объект в Различном диалоговом окне параметров Подсистемы, то дочерняя подсистема рассматривается прокомментированной и не используется во время выполнения модели.

open_system('sldemo_variant_subsystems/Controller');

Рисунок 2: Содержимое блока Подсистемы контроллера

В Различном блоке Subsystem можно разместить Inport, Выходной порт и блоки Subsystem. В этом примере, Linear Controller Блок Subsystem сопоставлен с различным объектом, VSS_LINEAR_CONTROLLER, и Nonlinear Controller Блок Subsystem сопоставлен с различным объектом, VSS_NONLINEAR_CONTROLLER.

Связи сигнала не позволены в Различной Подсистеме. Simulink программно обеспечивает электричеством блоки Inport и Outport к активному варианту при симуляции модели.

Переключение активных вариантов

Симулировать использование Linear Controller вариант, задайте:

VSS_MODE=1

в глобальной рабочей области и затем симулируют модель.

open_system('sldemo_variant_subsystems/Controller','parameter');
close_system('sldemo_variant_subsystems/Controller')
VSS_MODE=1; %#ok (used by sldemo_variant_subsystems)
sim sldemo_variant_subsystems;

Рисунок 3: Симуляция с помощью Linear Controller вариант

Симулировать использование Nonlinear ControllerDefine

VSS_MODE=2

в глобальной рабочей области и затем симулируют модель.

VSS_MODE=2; % (used by sldemo_variant_subsystems)
sim sldemo_variant_subsystems;

Рисунок 4: Симуляция с помощью Nonlinear Controller вариант

Перечисления и повторное использование

sldemo_variant_subsystems_enum модель иллюстрирует следующий Simulink.Variant возможности:

1. Перечисления: классы перечисления MATLAB могут использоваться, чтобы улучшить удобочитаемость в условиях различного объекта.

2. Повторное использование: Simulink.Variant объекты могут быть снова использованы в различных Различных блоках Subsystem.

Этот пример использует следующие переменные, которые заданы в глобальной рабочей области MATLAB:

VSSE_LINEAR_CONTROLLER=Simulink.Variant( ... 'VSSE_MODE==sldemo_vss_CONTROLLER_TYPE.LINEAR')

VSSE_NONLINEAR_CONTROLLER=Simulink.Variant( ... 'VSSE_MODE==sldemo_vss_CONTROLLER_TYPE.NONLINEAR')

VSSE_MODE=sldemo_vss_CONTROLLER_TYPE.LINEAR

VSSE_PROTOTYPE=Simulink.Variant( ... 'VSSE_MODE_BUILD==sldemo_vss_BUILD_TYPE.PROTOTYPE')

VSSE_PRODUCTION=Simulink.Variant( ... 'VSSE_MODE_BUILD==sldemo_vss_BUILD_TYPE.PRODUCTION')

VSSE_MODE_BUILD=sldemo_vss_BUILD_TYPE.PRODUCTION

В них Simulink.Variant объекты, мы используем классы перечисления, sldemo_vss_BUILD_TYPE.m, и sldemo_vss_CONTROLLER_TYPE.m, чтобы задать Simulink.Variant Параметры условия, который улучшает удобочитаемость.

Три блока Подсистем Варианта фильтра, Filter1, Filter2 и Filter3 все использование VSSE_PROTOTYPE и VSSE_PRODUCTION Simulink.Variant объекты.

Примечание: имя класса перечисления должно быть уникальным среди имен типов данных и глобальных имен переменных рабочей области, и является чувствительным к регистру.

Открытие модели sldemo_variant_subsystems_enum в качестве примера запускает PreLoadFcn, заданный в File -> ModelProperties -> Callbacks. Это заполняет глобальную рабочую область с переменными для Различных блоков Subsystem:

open_system('sldemo_variant_subsystems_enum')

Рисунок 5: модель в качестве примера, sldemo_variant_subsystems_enum

Генерация кода Используя Перечислимые типы как Различные Контрольные переменные

Можно использовать перечислимые типы, чтобы дать понятные имена целым числам, используемым в качестве различных значений управления.

Рассмотрите модель rtwdemo_preprocessor_subsys.

В редакторе MATLAB задайте классы, которые сопоставляют перечисляемые значения с понятными именами.

Если перечислимые типы не будут заданы правильно, ошибка будет отображена. Вот несколько сценариев, который заканчивается по ошибке.

Недопустимый definition1: В этом случае, Simulink.IntEnumType не задан.

Недопустимый definition2: В этом случае переменные не инициализируются.

Введите различное выражение управления как показано в следующий пример:

Рисунок 6: параметры блоков

Задайте значение V в глобальной рабочей области. Например, V=2;. значением может быть нормальная переменная MATLAB или Simulink.Parameter объект. Однако значение не может быть перечислимым типом.

Теперь сгенерируйте код с, Анализируют весь выбор во время обновления, схематически изображают и генерируют условную выбранную опцию препроцессора. Пример кода как показано ниже.

Рисунок 7: сгенерированный код

Для получения информации об использовании Simulink.Variant или Simulink.Parameter объект или переменные MATLAB как различная контрольная переменная, смотрите раздел Approaches for Specifying Variant Controls во Введении в Различные Средства управления.

См. документацию Embedded Coder для получения дополнительной информации о генерации кода для различных подсистем.