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

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

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

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

  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® панель меню, нажимают Display и очищают Hide Automatic 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, такие элементы включают точки ввода-вывода Линеаризации, In1 и блоки In2. Удалите три блока и строки, которые соединяют их.

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

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

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

    3. Соедините блок Load Position Scope с выходным сигналом Гидравлического Привода.

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

    5. Соедините новый блок Scope с несвязанной строкой связи от Сигнала Команды.

    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. Обеспечьте цифровое сэмплирование для непрерывных измерений времени с помощью Нулевого Порядка Содержат блоки.

    1. Добавьте, что Нулевой Порядок Содержит блоки к обоим сигналам, которые вводятся к блоку Sum.

    2. Поскольку параметр Sample time (-1 for inherited) обоих Нулевых Порядков Содержит блоки, задает 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. Чтобы сконфигурировать локальный решатель, откройте Гидравлическую подсистему Привода и обновите эти параметры для Блока Configuration Решателя:

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

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

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

      • Нажмите OK.

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

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

      • Сигнал команды

      • Ссылка

      • Нулевой порядок содержит

      • Сумма

      • Дискретная передача Fcn

      • Единичная задержка

    2. Маркируйте подсистему Controller Subsystem.

    3. Откройте подсистему контроллера.

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

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

    6. Перейдите топ-модели.

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

      • Гидравлический привод

      • Нулевой порядок Hold1

      • Загрузите положение

    8. Маркируйте подсистему Plant Subsystem.

    9. Откройте подсистему объекта.

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

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

    12. Чтобы видеть разделенные подсистемы, перейдите топ-модели.

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

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

| |

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

Больше о

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