Разбиение модели на разделы

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

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

В этом примере показано, как разбить модель на две дискретные подсистемы, одна из которых содержит объект, и одна, которая содержит контроллер, для параллельной обработки на отдельных центральных процессорах реального времени.

  1. Откройте модель. В MATLAB® в командной строке введите

    model = 'ssc_hydraulic_actuator_digital_control';
    open_system(model)

    В дополнение к блокам маршрутизации сигналов и мониторинга, модель содержит следующие блоки:

    • Команда сигнал - блок Signal Builder, который генерирует вход опорного сигнала, r.

    • Сумма - Блок, который сравнивает уставку, r, от блока Command Signal к выходному сигналу, y, от Гидропривода, чтобы сгенерировать ошибку, x, то есть r - y = x.

    • Контроллер - блок непрерывного Transfer Fcn. Параметры Numerator coefficients и Denominator coefficients для этого блока заданы переменными num и den.

    • Задержка переноса - блок, который моделирует задержку времени для непрерывного входного сигнала.

      Примечание

      По умолчанию Simulink® Редактор скрывает автоматические имена блоков в диаграммах модели. Чтобы отобразить скрытые имена блоков в целях обучения, снимите флажок Hide Automatic Block Names. Для получения дополнительной информации см. раздел «Управление именами блоков и портами».

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

    • Гидравлический Привод - подсистема, содержащая Simscape™ модель объекта управления.

  2. Исследуйте переменные в рабочей области, щелкнув по каждой переменной в свою очередь.

    • Переменная для шага расчета, ts = 0.001.

    • Параметр Numerator coefficients, num = -0.5.

    • Параметр Denominator coefficients, den = [0.001 1].

    • Переменная ClosedLoop = 1.

  3. Симулируйте модель и откройте возможности Положение нагрузки, чтобы изучить результаты.

    sim(model)
    open_system([model, '/Load Position'])

    Выход от гидравлического привода соответствует сигналу команды.

  4. Исключить элементы, которые добавляют к вычислительной стоимости, но не влияют на результаты симуляции в реальном времени. В модели примера, поскольку коэффициент усиления замкнутого цикла равен 1, такие элементы включают блоки Linearization I/O points, In1 и In2. Удалите три блока и соединяющие их линии.

  5. Сконфигурируйте модель для визуализации.

    1. Удалите Mux блок.

    2. Удалите Goto и From блоки, которые называются Cmd.

    3. Подключите Load Position Scope блок к выходу сигналу от Hydraulic Actuator.

    4. Добавьте второй Scope блок.

    5. Подключите новый блок Scope к несвязанной соединительной линии от Command Signal.

    6. Измените имя нового блока Scope на Reference.

  6. Замените Transport Delay блок на Unit Delay блок.

    1. Удалите Transport Delay блок и открытую соединительную линию, которая соединяется с выходным портом блока.

    2. Добавьте блок Unit Delay из дискретной библиотеки Simulink и соедините его с входом портом Подсистемы Гидравлического Привода.

    3. Для параметра Sample time (-1 for inherited) блока Unit Delay задайте ts.

  7. Замените Controller блок на Discrete Transfer Fcn блок из дискретной библиотеки Simulink.

    1. Удалите Controller блок.

    2. Щелкните в окне модели и введите discrete transfer fcn. Когда появится раскрывающееся меню, содержащее блок, нажмите Discrete Transfer Fcn.

    3. Подключите новый блок к разомкнутой соединительной линии из блока Sum.

    4. Подключите выходной порт нового блока к входному порту блока Unit Delay.

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

      1. В командной строке MATLAB сохраните новые переменные на основе исходных коэффициентов:

        k = num;
        alpha = den(1,1);

      2. Для параметра Discrete Transfer Fcn block Numerator задайте [k*ts k*ts].

      3. Для параметра Denominator задайте [2*alpha+ts ts-2*alpha].

      4. Для параметра Sample time (-1 for inherited) задайте ts.

  8. Обеспечьте цифровую выборку для непрерывных временных измерений с использованием блоков Zero-Order Hold.

    1. Добавьте Zero-Order Hold блоки к обоим сигналам, которые вводятся в блок Sum.

    2. Для параметра Sample time (-1 for inherited) обоих блоков Zero-Order Hold задайте ts.

  9. Соедините блоки как показано на рисунке.

  10. Симулируйте модель и откройте возможности Положение нагрузки, чтобы увидеть, как изменения влияют на результаты.

    sim(model)
    open_system([model, '/Load Position'])

    Выход из гидравлического привода совпадает с исходными результатами.

  11. Сконфигурируйте решатели.

    1. Чтобы сконфигурировать глобальный решатель, откройте параметры конфигурации модели и в панели Solver:

      • Установите Type решателя равной Fixed-step.

      • Установите Solver равным discrete (no continuous states).

      • Задайте ts для параметра Fixed-step size (fundamental sample time).

      • Нажмите OK.

    2. Чтобы сконфигурировать локальный решатель, откройте подсистему Hydraulic Actuator и обновите эти параметры для блока Solver Configuration:

      • Выберите опцию для Use local solver.

      • Задайте ts для Sample time.

      • Выберите опцию для Use fixed-cost runtime consistency iterations.

      • Нажмите OK.

  12. Разделите модель на две подсистемы:

    1. Создайте подсистему, которая содержит следующие блоки:

      • Command Signal

      • Reference

      • Zero-Order Hold

      • Sum

      • Discrete Transfer Fcn

      • Unit Delay

    2. Пометьте подсистему Controller Subsystem.

    3. Откройте Controller Subsystem.

    4. Переименуйте Out1 Outport блок в u.

    5. Переименуйте In1 Inport блок в y.

    6. Перейдите к верхней модели.

    7. Создайте вторую подсистему, которая содержит следующие блоки:

      • Hydraulic Actuator

      • Zero-Order Hold1

      • Load Position

    8. Пометьте подсистему Plant Subsystem.

    9. Откройте Plant Subsystem.

    10. Переименуйте Out1 Outport блок в u_plant.

    11. Переименуйте In1 Inport блок в y_plant.

    12. Чтобы увидеть секционированные подсистемы, перейдите к верхней модели.

    Эта модель разделена для параллельного выполнения. Чтобы узнать, как добавить задачи и сопоставить отдельные задачи с разделами, смотрите Раздел Ваша модель Используя Явное разбиение.

См. также

| |

Похожие примеры

Подробнее о

Внешние веб-сайты