Можно сделать модель в реальном времени способной, разделив вычислительные затраты для симуляции между несколькими процессорами через разбиение модели. Вычислительная стоимость является мерой количества и сложности задач, которые центральный модуль (ЦП) выполняет за временной шаг во время симуляции. Высокая вычислительная стоимость может замедлить скорость выполнения симуляции и вызвать переполнение, когда вы симулируете в реальном времени на одном центральном процессоре.
Обычно можно снизить вычислительные затраты, достаточные для симуляции в реальном времени на одном процессоре, путем настройки точности модели и настроек решателя с помощью методов, описанных в Рабочем процессе подготовки модели реального времени. Однако возможно, что нет комбинации сложности модели и настроек решателя, которые могут сделать вашу модель в реальном времени способной на одном центральном процессоре на вашей целевой машине. Если ваша симуляция в реальном времени с использованием одного центрального процессора не запускается до своего завершения, или если результаты симуляции не приемлемы, разбейте модель. Можно запустить секционированную модель с помощью одной, многоядерной целевой машины или нескольких, одноядерных целевых машин.
В этом примере показано, как разбить модель на две дискретные подсистемы, одна из которых содержит объект, и одна, которая содержит контроллер, для параллельной обработки на отдельных центральных процессорах реального времени.
Откройте модель. В 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™ модель объекта управления.
Исследуйте переменные в рабочей области, щелкнув по каждой переменной в свою очередь.
Переменная для шага расчета, 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 и соедините его с входом портом Подсистемы Гидравлического Привода.
Для параметра Sample time (-1 for inherited) блока Unit Delay задайте ts
.
Замените Controller блок на Discrete Transfer Fcn блок из дискретной библиотеки Simulink.
Удалите Controller блок.
Щелкните в окне модели и введите discrete transfer fcn
. Когда появится раскрывающееся меню, содержащее блок, нажмите Discrete Transfer Fcn
.
Подключите новый блок к разомкнутой соединительной линии из блока Sum.
Подключите выходной порт нового блока к входному порту блока Unit Delay.
Задайте параметры для дискретного контроллера, используя преобразование Тастина исходной непрерывной передаточной функции.
В командной строке MATLAB сохраните новые переменные на основе исходных коэффициентов:
k = num; alpha = den(1,1);
Для параметра Discrete Transfer Fcn block 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.
Чтобы увидеть секционированные подсистемы, перейдите к верхней модели.
Эта модель разделена для параллельного выполнения. Чтобы узнать, как добавить задачи и сопоставить отдельные задачи с разделами, смотрите Раздел Ваша модель Используя Явное разбиение.
Discrete Transfer Fcn | Unit Delay | Zero-Order Hold