Размер шага и количество итераций, что вы задаете для решателей в вашем влиянии модели скорость и точность вашей симуляции в реальном времени. Если вы уменьшаете размер шага или увеличиваете число итераций, результаты более точны, но симуляция запускается медленнее. Если вы увеличиваете размер шага или сокращаете число итераций, симуляция запускается быстрее, но результаты менее точны.
Чтобы оптимизировать вашу модель для симуляции на машине реального времени, задайте комбинацию размера шага (Ts) и количество итераций (N), который обеспечивает приемлемую точность и скорость, чтобы избежать переполнения. Как с типом решателя, можно задать различные комбинации Ts и значений N для Simulink® глобальный решатель и для каждой независимой сети Simscape™ в вашей модели.
Этот рабочий процесс помогает вам выбрать размер шага и количество итераций для симуляции в реальном времени:
Получите ссылочные результаты путем выполнения симуляции переменного шага на модели гидравлического привода.
Используйте модифицированную версию модели, чтобы определить максимальный размер шага, чтобы использовать, чтобы достигнуть достаточно точных результатов фиксированного шага, симуляции фиксированных затрат. Фиксированный шаг, симуляция фиксированных затрат требуется для симуляции в реальном времени.
Задайте глобальный и локальный фиксированный шаг, настройки решателя фиксированных затрат для модифицированной версии модели.
Выполните синхронизированную симуляцию с модифицированной моделью и оцените точность результатов.
Настройте размер шага и количество итераций, чтобы найти настройки решателя, которые обеспечивают необходимую скорость и точность для симуляции в реальном времени.
Чтобы получить ссылочные результаты, симулируйте исходную версию гидравлической модели привода.
Открыть гидравлическую модель привода, в MATLAB® командная строка, введите:
model = 'ssc_hydraulic_actuator_digital_control';
open_system(model)
Модель сконфигурирована, чтобы ограничить точки данных. Чтобы сконфигурировать модель, чтобы регистрировать все точки данных, откройте параметры конфигурации модели, и в панели Simscape, снимите флажок Limit data points.
Симулируйте модель.
sim(model)
Извлеките данные при давлении и время шага симуляции от регистрируемого узла Simscape.
simlogRef = simlog_ssc_hydraulic_actuator_digital_control;
pRefNode = simlogRef.Hydraulic_Actuator.Hydraulic_Cylinder.Chamber_A.A.p;
pRef = pRefNode.series.values('Pa');
tRef = pRefNode.series.time;
Постройте размер шага.
h1 = figure; semilogy(tRef(1:end-1),diff(tRef),'-x') title('Solver Step Size') xlabel('Time (s)') ylabel('Step Size (s)')
Максимальный размер шага (Tsmax) для получения точных результатов в реальном времени для исходной модели является приблизительно 1e-2 секундами. Для получения информации об определении Tsmax смотрите, Определяют Размер Шага.
Постройте результаты симуляции.
h2 = figure; plot(tRef,pRef, 'b-') h2Legend1 = legend({'Reference'},'Location','southoutside'); title('Cylinder Pressure') xlabel('Time (s)') ylabel('Pressure (Pa)')
В модифицированной версии гидравлической модели привода можно изменить значение Tsmax, максимального размера шага для достижения точных результатов симуляции в реальном времени.
Откройте модифицированную гидравлическую модель привода.
ssc_hydraulic_actuator_HIL
Эта версия гидравлического привода содержит дискретизированный, разделенный контроллер. Локальный решатель для гидравлической подсистемы привода включен для фиксированного шага, симуляции фиксированных затрат. Размер шага параметрируется (ts) так, чтобы можно было внести корректировки решателя, которые уменьшают вероятность генерации переполнения. Для примера, который показывает, как дискретизировать контроллер для гидравлического привода, смотрите Гидравлический Привод, Сконфигурированный для Программное-аппаратного тестирования.
Чтобы определить максимальный размер шага, чтобы использовать для достижения точных результатов симуляции в реальном времени, вы симулируете с глобальной переменной, решателем переменного шага. Чтобы сконфигурировать модифицированную модель для симуляции переменного шага с помощью глобального решателя, отключите локальную настройку решателя. В Гидравлической подсистеме Привода, в диалоговом окне блока Solver Configuration, снимают флажок Use local solver.
Симулируйте модель.
Извлеките данные при давлении и время от регистрируемого узла Simscape.
simlog0 = simlog_ssc_hydraulic_actuator_HIL;
pNodeSim0 = simlog0.Hydraulic_Actuator.Hydraulic_Cylinder.Chamber_A.A.p;
pSim0 = pNodeSim0.series.values('Pa');
tSim0 = pNodeSim0.series.time;
Постройте размер шага фигуре, которая содержит данные неродного размера для исходной модели.
figure(h1) hold on semilogy(tSim0(1:end-1),diff(tSim0),'--x', 'Color','r',... 'LineWidth',.1,'MarkerSize',5) title('Solver Step Size') xlabel('Time (s)') ylabel('Step Size (s)') h1Legend1 = legend({'Reference','Modified'},... 'Location','southoutside');
Для дискретизированной модели Tsmax между 1e-2 и 1e-3 секунды.
Чтобы сократить количество шагов для нахождения оптимальных настроек решателя оперативной симуляции, параметрируйте настройку решателя с переменными рабочей области. В Гидравлическом Приводе Дискретная Модель размер шага для локальной настройки решателя задан как переменная ts рабочей области. В данном примере вы также используете переменные рабочей области, чтобы параметрировать глобальный размер шага (tsG) и локальное количество нелинейных итераций (N).
Для модифицированной модели, в диалоговом окне параметров конфигурации модели, задают эти настройки:
Панель | Параметр | Значение | Цель |
---|---|---|---|
Solver | Type | Fixed-step | Сконфигурируйте глобальный решатель модифицированной модели для симуляции фиксированного шага. |
Solver | discrete (no continuous states) | Сконфигурируйте глобальный решатель, чтобы совпадать с состоянием контроллера. | |
Additional options > Fixed-step size (fundamental sample time) | tsG | Параметрируйте глобальный размер шага. | |
Simscape | Limit data points | Снимите флажок. | Когда вы уменьшаете размер шага решателя, количество точек данных, что симуляция генерирует увеличения. Очистите опцию, чтобы гарантировать, что вы собираете все данные, в которых вы нуждаетесь для оценки точности симуляции. |
Сконфигурируйте локальный решатель для симуляции фиксированного шага. В Гидравлической подсистеме Привода, в диалоговом окне блока Solver Configuration, выбирают Use local solver.
Чтобы параметрировать стоимость симуляции, установите Nonlinear iterations на N
.
Можно определить, подходят ли настройки решателя для симуляции в реальном времени путем симуляции модели и затем оценки точности результатов и скорости симуляции. Чтобы оценить точность, сравните результаты со ссылочными результатами и с результатами другого фиксированного шага, симуляций фиксированных затрат. Чтобы оценить скорость симуляции, сравните прошедшее время с заданным временем симуляции и в бюджет на выполнение симуляции. Если скорость или точность не приемлемы, настройте размер шага и количество итераций, чтобы сделать вашу модель в реальном времени способный.
Бюджет времени выполнения симуляции для этого примера составляет четыре секунды. Для получения информации об определении бюджета времени выполнения для вашей модели смотрите Оценочные Затраты на Расчет.
Для первой симуляции задайте и глобальный и локальный размер шага как самое большое значение Tsmax из графика шага. Задайте относительно большое значение для размера шага для обоих решателей и три для количества нелинейных итераций для локального решателя.
ts = 1e-2; tsG = 1e-2; N = 3;
Выполните синхронизированный фиксированный шаг, симуляцию фиксированных затрат.
tic; sim('ssc_hydraulic_actuator_HIL'); tSim1 = toc;
time1 = max(tSim1);
Извлеките данные при давлении и времени симуляции от регистрируемого узла Simscape.
simlog1 = simlog_ssc_hydraulic_actuator_HIL;
pNodeSim1 = simlog1.Hydraulic_Actuator.Hydraulic_Cylinder.Chamber_A.A.p;
pSim1 = pNodeSim1.series.values('Pa');
tSim1 = pNodeSim1.series.time;
Постройте результаты симуляции фигуре, которая содержит ссылочные результаты. Запишите прошедшее время в легенду фигуры.
figure(h2) hold on plot(tSim1, pSim1, 'g--') delete(h2Legend1) configSim1L = ['Local: Ts= ',num2str(ts),'s, N= ',num2str(N),'.']; configSim1G = [' Global: Ts= ',num2str(tsG),'s.']; timeSim1T = ['Time=',num2str(time1)]; cfgSim1 = [configSim1L,configSim1G,timeSim1T]; h2Legend2 = legend({'Reference',num2str(cfgSim1)},... 'Location','southoutside');
Прошедшее время варьируется, потому что оно зависит от мгновенной вычислительной мощности компьютера, который запускает симуляцию. Прошедшие времена в легенде от симуляции на Intel на 3,6 ГГц® Центральный процессор с памятью на 16 Гбайт. Ваша легенда содержит прошедшее время для симуляции на вашем компьютере.
Симуляция заняла меньше времени, чтобы завершиться, чем заданное время симуляции (10 с), таким образом, это запускается быстрее, чем реальное время на компьютере разработчика. Прошедшее время также меньше бюджета времени выполнения симуляции для этого примера (четыре секунды). Поэтому заданная настройка решателя обеспечивает приемлемый запас прочности для симуляции в реальном времени на целевой машине, которая обеспечила бюджетные данные.
Масштабируйте к точке перегиба, чтобы оценить точность результатов.
figure(h2) xStart = 0; xEnd = 10; yStart = 0; yEnd = 3.5e6; xZoomStart = 0.3; xZoomEnd = 0.6; yZoomStart = 2.6e6; yZoomEnd = 3.5e6; axis([xZoomStart xZoomEnd yZoomStart yZoomEnd])
Теоретические и эмпирические данные поддерживают ссылочные результаты. Точность результатов симуляции не приемлема, потому что решатель колеблется, прежде чем это будет сходиться на решении в справочных данных.
Если можно достигнуть точности приемлемого результата, но симуляция запускается слишком медленно для данного бюджета времени выполнения, скорости увеличения путем увеличения размера шага, или сократите число итераций.
Когда вы находите комбинацию настроек решателя, которые обеспечивают достаточно точные результаты и скорость симуляции, которая соответствует вашему бюджету времени выполнения, можно попытаться запустить модель на машине реального времени путем выполнения рабочего процесса аппаратно-программного моделирования. Если вы не можете найти правильную комбинацию настроек решателя, выполнить рабочий процесс подготовки к модели реального времени или увеличить вашу возможность вычислений в режиме реального времени улучшить скорость симуляции и точность. Чтобы увеличить вашу возможность вычислений в режиме реального времени, обновите свой целевой компьютер или разделите вашу модель для параллельной обработки.
Можно обычно улучшать точность путем увеличения числа итераций или путем уменьшения размера шага.
Попытайтесь улучшить точность путем увеличения числа итераций (N) к 10.
N = 10;
Запустите синхронизированную симуляцию.
tic; sim('ssc_hydraulic_actuator_HIL'); tSim2 = toc;
time2 = max(tSim2);
Извлеките данные о времени симуляции и давление.
simlog2 = simlog_ssc_hydraulic_actuator_HIL;
pNodeSim2 = simlog2.Hydraulic_Actuator.Hydraulic_Cylinder.Chamber_A.A.p;
pSim2 = pNodeSim2.series.values('Pa');
tSim2 = pNodeSim2.series.time;
Постройте график результатов.
figure(h2) hold on plot(tSim2, pSim2, 'r:') delete(h2Legend2) axis([xStart xEnd yStart yEnd]) configSim2L = ['Local: Ts= ',num2str(ts),'s, N= ',num2str(N),'.']; configSim2G = [' Global: Ts= ',num2str(tsG),'s.']; timeSim2T = ['Time=',num2str(time2)]; cfgSim2 = [configSim2L,configSim2G,timeSim2T]; h2Legend3 = legend({'Reference',num2str(cfgSim1),num2str(cfgSim2)},... 'Location','southoutside');
Симуляция достаточно быстра для симуляции в реальном времени, потому что потребовалось меньше времени, чтобы запуститься, чем четыре вторых бюджета на выполнение симуляции.
Масштабируйте, чтобы оценить точность.
figure(h2) axis([xZoomStart xZoomEnd yZoomStart yZoomEnd])
В целом, результаты не намного более точны, чем результаты симуляции с меньшим количеством итераций.
Попытайтесь улучшить точность путем уменьшения размера шага к 1e-3 секундам для локальных и глобальных решателей. Задайте 3
для количества итераций (N).
ts = 1e-3; tsG = 1e-3; N = 3;
Запустите синхронизированную симуляцию.
tic; sim('ssc_hydraulic_actuator_HIL'); tSim3 = toc;
time3 = max(tSim3);
Извлеките данные о времени симуляции и давление.
simlog3 = simlog_ssc_hydraulic_actuator_HIL;
pNodeSim3 = simlog3.Hydraulic_Actuator.Hydraulic_Cylinder.Chamber_A.A.p;
pSim3 = pNodeSim3.series.values('Pa');
tSim3 = pNodeSim3.series.time;
Постройте график результатов.
figure(h2) hold on plot(tSim3, pSim3, 'k--') delete(h2Legend3) axis([xStart xEnd yStart yEnd]) configSim3L = ['Local: Ts= ',num2str(ts),'s, N= ',num2str(N),'.']; configSim3G = [' Global: Ts= ',num2str(tsG),'s.']; timeSim3T = ['Time=',num2str(time3)]; cfgSim3 = [configSim3L,configSim3G,timeSim3T]; h2Legend4 = legend... ({'Reference',num2str(cfgSim1),num2str(cfgSim2),num2str(cfgSim3)},... 'Location','southoutside');
Симуляция занимает больше времени, но быстро достаточно дана четыре вторых бюджета времени выполнения симуляции.
Масштабируйте, чтобы оценить точность лучше.
figure(h2) axis([xZoomStart xZoomEnd yZoomStart yZoomEnd])
Точность результатов приемлема. Для симуляции в реальном времени с модифицированной моделью используйте настройки решателя, которые обеспечили приемлемую скорость и точность:
Три нелинейных итерации
Глобальные и локальные размеры шага 1e-3 секунд
Если можно достигнуть достаточно точных результатов, но симуляция запускается слишком медленно для бюджета времени выполнения, улучшите скорость путем увеличения размера шага или сокращения числа итераций.
Когда вы находите комбинацию настроек решателя, которая обеспечивает достаточно точные результаты и скорость симуляции, которая меньше вашего бюджета времени выполнения, можно запустить модель на машине реального времени. Чтобы запустить вашу модель на машине реального времени, выполните рабочий процесс аппаратно-программного моделирования.
Если вы не можете найти правильную комбинацию настроек решателя для симуляции в реальном времени, улучшить скорость симуляции и точность путем изменения осциллографа или точности модели. Для получения дополнительной информации смотрите Рабочий процесс Подготовки к Модели реального времени.
Если вы не можете сделать свою модель в реальном времени способный путем изменения осциллографа или точности модели, увеличить возможность вычислений в режиме реального времени. Для получения дополнительной информации смотрите Целевой компьютер Обновления и Симуляцию Частей Системы параллельно.
Профилировщик решателя | simscape.getLocalSolverFixedCostInfo