Разделите модель

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

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

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

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

    model = 'ssc_hydraulic_actuator_digital_control';
    open_system(model)

    Кроме того, чтобы сигнализировать о маршрутизации и контроле блоков, модель содержит эти блоки:

    • Блок Command Signal — A 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 Discrete и соедините его с входным портом Гидравлической Подсистемы Привода.

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

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

    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 параметр 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. Чтобы видеть разделенные подсистемы, перейдите топ-модели.

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

Смотрите также

| |

Связанные примеры

Больше о

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