Можно сделать модель в реальном времени способный путем деления вычислительной стоимости для симуляции между несколькими процессорами через разделение модели. Вычислительная стоимость является мерой номера и сложностью задач, которые центральный процессор (CPU) выполняет на временной шаг во время симуляции. Высокая вычислительная стоимость может замедлить скорость выполнения симуляции и вызвать переполнения, когда вы симулируете в режиме реального времени на одном центральном процессоре.
Как правило, можно понизить вычислительные затраты достаточно для симуляции в реальном времени на одном процессоре путем корректировки точности модели и методов использования настроек решателя, описанных в режиме реального времени Рабочий процесс Подготовки Модели. Однако возможно, что нет никакой комбинации сложности модели и настроек решателя, которые могут сделать вашу модель в реальном времени способный на одном центральном процессоре на вашей целевой машине. Если ваша симуляция в реальном времени с помощью одного центрального процессора не выполнение до завершения, или если результаты симуляции не приемлемы, делят модель. Можно запустить разделенную модель с помощью одной, многожильной целевой машины или нескольких, одножильных целевых машин.
Этот пример показывает вам, как разделить вашу модель в две дискретных подсистемы, та, которая содержит объект и тот, который содержит контроллер для параллельной обработки на отдельных центральных процессорах в реальном времени.
Откройте модель. В командной строке 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. Для получения дополнительной информации смотрите, Управляют Именами блока и Портами (Simulink).
Ввод-вывод линеаризации — подсистема, которая линеаризует модель о рабочей точке.
Гидравлический Привод — подсистема, которая содержит модель объекта управления 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, такие элементы включают Linearization I/O points, In1 и блоки In2. Удалите эти три блока и линии, которые соединяют их.
Сконфигурируйте модель для визуализации.
Удалите блок Mux.
Удалите Goto и блоки From, которые называют Cmd.
Соедините блок Load Position Scope с выходным сигналом Hydraulic Actuator.
Добавьте второй блок Scope.
Соедините новый блок Scope с несвязанной линией связи от Command Signal.
Поменяйте имя нового блока 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
.
Обеспечьте цифровое сэмплирование для непрерывных измерений времени с помощью блоков Zero-Order Hold.
Добавьте блоки Zero-Order Hold в оба сигнала, которые вводятся с блоком Sum.
Для параметра Sample time (-1 for inherited) обоих блоков Zero-Order Hold задайте 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.
Чтобы сконфигурировать локальный решатель, откройте подсистему Hydraulic Actuator и обновите эти параметры для блока Solver Configuration:
Выберите опцию на Use local solver.
Задайте ts
для Sample time.
Выберите опцию на Use fixed-cost runtime consistency iterations.
Нажмите OK.
Разделите модель в две подсистемы:
Создайте подсистему, которая содержит эти блоки:
Command Signal
Reference
Zero-Order Hold
Sum
Discrete Transfer Fcn
Unit Delay
Пометьте подсистему Controller Subsystem
.
Откройте Controller Subsystem.
Переименуйте
блок Out1 Outport как u
.
Переименуйте
блок In1 Inport как y
.
Перейдите топ-модели.
Создайте вторую подсистему, которая содержит эти блоки:
Hydraulic Actuator
Zero-Order Hold1
Load Position
Пометьте подсистему Plant Subsystem
.
Откройте Plant Subsystem.
Переименуйте
блок Out1 Outport как u_plant
.
Переименуйте
блок In1 Inport как y_plant
.
Чтобы видеть разделенные подсистемы, перейдите топ-модели.
Эта модель разделена для параллельного выполнения. Чтобы изучить, как добавить задачи и сопоставить отдельные задачи с разделами, смотрите Раздел Ваша Модель Используя Явное Разделение (Simulink).
Discrete Transfer Fcn | Unit Delay | Zero-Order Hold