Можно сделать модель в реальном времени способный путем деления вычислительной стоимости для симуляции между несколькими процессорами через образцовое разделение. Вычислительная стоимость является мерой номера и сложностью задач, которые центральный процессор (CPU) выполняет на временной шаг во время симуляции. Высокая вычислительная стоимость может замедлить скорость выполнения симуляции и вызвать переполнения, когда вы моделируете в режиме реального времени на одном центральном процессоре.
Как правило, можно понизить вычислительные затраты достаточно для симуляции в реальном времени на одном процессоре путем корректировки точности модели и методов использования настроек решателя, описанных в режиме реального времени Образцовый Рабочий процесс Подготовки. Однако возможно, что нет никакой комбинации сложности модели и настроек решателя, которые могут сделать вашу модель в реальном времени способный на одном центральном процессоре на вашей целевой машине. Если ваша симуляция в реальном времени с помощью одного центрального процессора не выполнение до завершения, или если результаты симуляции не приемлемы, делят модель. Можно запустить разделенную модель с помощью одной, многожильной целевой машины или нескольких, одножильных целевых машин.
Этот пример показывает вам, как разделить вашу модель в две дискретных подсистемы, та, которая содержит объект и тот, который содержит контроллер для параллельной обработки на отдельных центральных процессорах в реальном времени.
Откройте модель. В командной строке 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™.
Исследуйте переменные в рабочей области путем нажатия на каждую переменную в свою очередь.
Переменная для шага расчета, ts = 0.001
.
Параметр Numerator coefficients, num = -0.5
.
Параметр Denominator coefficients, den = [0.001 1]
.
Переменная ClosedLoop = 1
.
Моделируйте модель и откройте осциллограф Положения Загрузки, чтобы исследовать результаты.
sim(model)
open_system([model, '/Load Position'])
Вывод от гидравлического привода совпадает с сигналом команды.
Устраните элементы, которые добавляют к вычислительной стоимости, но которые не влияют на результаты симуляции в реальном времени. В модели в качестве примера, потому что усиление замкнутого цикла равняется 1, такие элементы включают точки ввода-вывода Линеаризации, In1 и блоки In2. Удалите три блока и строки, которые соединяют их.
Сконфигурируйте модель для визуализации.
Удалите блок Mux.
Удалите Goto и Из блоков, которые называют Cmd.
Соедините блок Load Position Scope с выходным сигналом Гидравлического Привода.
Добавьте второй блок Scope.
Соедините новый блок Scope с несвязанной строкой связи от Сигнала Команды.
Поменяйте имя нового блока Scope к Reference
.
Замените блок Transport Delay на блок Unit Delay.
Удалите блок Transport Delay и открытую законченную строку связи, которая соединяется с выходным портом блока.
Добавьте блок Unit Delay от библиотеки Simulink Discrete и соедините его с входным портом Гидравлической Подсистемы Привода.
Для параметра Sample time (-1 for inherited) блока Unit Delay задайте ts
.
Замените блок Controller на блок Discrete Transfer Fcn от библиотеки Simulink Discrete.
Удалите блок Controller.
Щелкните в окне модели и введите discrete transfer fcn
. Когда выпадающее меню, которое содержит блок, появляется, нажмите Discrete Transfer Fcn
.
Соедините новый блок с открытой строкой связи от блока Sum.
Соедините выходной порт нового блока к импорту блока Unit Delay.
Задайте параметры для дискретного контроллера, использующего преобразование Тастина исходной, непрерывной передаточной функции.
В командной строке MATLAB сохраните новые переменные на основе исходных коэффициентов:
k = num; alpha = den(1,1);
Для блока Discrete Transfer Fcn параметр Numerator задайте [k*ts k*ts]
.
Для параметра Denominator задайте [2*alpha+ts ts-2*alpha]
.
Для параметра Sample time (-1 for inherited) задайте ts
.
Обеспечьте цифровое сэмплирование для непрерывных измерений времени с помощью Нулевого Порядка Содержат блоки.
Добавьте, что Нулевой Порядок Содержит блоки к обоим сигналам, которые вводятся к блоку Sum.
Поскольку параметр Sample time (-1 for inherited) обоих Нулевых Порядков Содержит блоки, задает ts
.
Соедините блоки как показано в фигуре.
Моделируйте модель и откройте осциллограф Положения Загрузки, чтобы видеть, как модификации влияют на результаты.
sim(model)
open_system([model, '/Load Position'])
Вывод от гидравлического привода совпадает с исходными результатами.
Сконфигурируйте решатели.
Чтобы сконфигурировать глобальный решатель, откройте образцовые параметры конфигурации, и в панели Solver:
Установите решатель Type на Fixed-step
.
Установите Solver на discrete (no continuous states)
.
Задайте ts
для параметра Fixed-step size (fundamental sample time).
Нажмите OK.
Чтобы сконфигурировать локальный решатель, откройте Гидравлическую подсистему Привода и обновите эти параметры для Блока Configuration Решателя:
Выберите опцию к Use local solver.
Задайте ts
для Sample time.
Выберите опцию к Use fixed-cost runtime consistency iterations.
Нажмите OK.
Разделите модель в две подсистемы:
Создайте подсистему, которая содержит эти блоки:
Сигнал команды
Ссылка
Нулевой порядок содержит
Сумма
Дискретная передача Fcn
Единичная задержка
Маркируйте подсистему Controller Subsystem
.
Откройте подсистему контроллера.
Переименуйте
блок Out1 Outport как u
.
Переименуйте
блок In1 Inport как y
.
Перейдите топ-модели.
Создайте вторую подсистему, которая содержит эти блоки:
Гидравлический привод
Нулевой порядок Hold1
Загрузите положение
Маркируйте подсистему Plant Subsystem
.
Откройте подсистему объекта.
Переименуйте
блок Out1 Outport как u_plant
.
Переименуйте
блок In1 Inport как y_plant
.
Чтобы видеть разделенные подсистемы, перейдите топ-модели.
Эта модель разделена для параллельного выполнения. Чтобы изучить, как добавить задачи и сопоставить отдельные задачи с разделами, смотрите Раздел Ваша Модель Используя Явное Разделение (Simulink).
Дискретная передача Fcn | Единичная задержка | Нулевой порядок содержит