Выберите Step Size и Number of Iterations

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

Чтобы оптимизировать вашу модель для симуляции на машине реального времени, задайте комбинацию размера шага (Ts) и количество итераций (N), который обеспечивает приемлемую точность и скорость, чтобы избежать переполнения. Как с типом решателя, можно задать различные комбинации Ts и значений N для глобального решателя Simulink® и для каждой независимой сети Simscape™ в модели.

Этот рабочий процесс помогает вам выбрать размер шага и количество итераций для симуляции в реальном времени:

  • Получите ссылочные результаты путем выполнения симуляции переменного шага на модели гидравлического привода.

  • Используйте измененную версию модели, чтобы определить максимальный размер шага, чтобы использовать, чтобы достигнуть достаточно точных результатов фиксированного шага, симуляции фиксированных затрат. Фиксированный шаг, симуляция фиксированных затрат требуется для симуляции в реальном времени.

  • Задайте глобальный и локальный фиксированный шаг, настройки решателя фиксированных затрат для измененной версии модели.

  • Выполните синхронизированную симуляцию с измененной моделью и оцените точность результатов.

  • Настройте размер шага и количество итераций, чтобы найти настройки решателя, которые обеспечивают необходимую скорость и точность для симуляции в реальном времени.

Получите ссылочные результаты

Чтобы получить ссылочные результаты, моделируйте исходную версию гидравлической модели привода.

  1. Открыть гидравлическую модель привода, в командной строке MATLAB®, введите:

    model = 'ssc_hydraulic_actuator_digital_control';
    open_system(model)

  2. Модель сконфигурирована, чтобы ограничить точки данных. Чтобы сконфигурировать модель, чтобы регистрировать все точки dat, откройте образцовые параметры конфигурации, и в панели Simscape, снимите флажок Limit data points.

  3. Моделируйте модель.

    sim(model)
    

  4. Извлеките данные для давления и время шага симуляции от регистрируемого узла 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;
  5. Постройте размер шага.

    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 смотрите, Определяют Размер Шага.

  6. Постройте результаты симуляции.

    h2 = figure;
    plot(tRef,pRef, 'b-')
    h2Legend1 = legend({'Reference'},'Location','southoutside');
    title('Cylinder Pressure')
    xlabel('Time (s)')
    ylabel('Pressure (Pa)')

Определите максимальный размер шага для точных результатов

В измененной версии гидравлической модели привода можно изменить значение Tsmax, максимального размера шага для достижения точных результатов симуляции в реальном времени.

  1. Откройте измененную гидравлическую модель привода.

    ssc_hydraulic_actuator_HIL

    Эта версия гидравлического привода содержит дискретизированный, разделенный контроллер. Локальный решатель для гидравлической подсистемы привода включен для фиксированного шага, симуляции фиксированных затрат. Размер шага параметризован (ts) так, чтобы можно было внести корректировки решателя, которые уменьшают вероятность генерации переполнения. Для примера, который показывает, как дискретизировать контроллер для гидравлического привода, смотрите Гидравлический Привод, Сконфигурированный для Программное-аппаратного тестирования.

  2. Чтобы определить максимальный размер шага, чтобы использовать для достижения точных результатов симуляции в реальном времени, вы моделируете с глобальной переменной, решателем переменного шага. Чтобы сконфигурировать измененную модель для симуляции переменного шага с помощью глобального решателя, отключите локальную настройку решателя. В Гидравлической подсистеме Привода, в диалоговом окне Блока Configuration Решателя, снимают флажок Use local solver.

  3. Моделируйте модель.

  4. Извлеките данные для давления и время от регистрируемого узла 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;

  5. Постройте размер шага фигуре, которая содержит данные неродного размера для исходной модели.

    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).

  1. Для измененной модели, в образцовом диалоговом окне параметров конфигурации, задают эти настройки:

    ПанельПараметрЗначениеЦель

    Solver

    TypeFixed-stepСконфигурируйте глобальный решатель измененной модели для симуляции фиксированного шага.
    Solverdiscrete (no continuous states)Сконфигурируйте глобальный решатель, чтобы совпадать с состоянием контроллера.
    Additional options> Fixed-step size (fundamental sample time)tsGПараметризуйте глобальный размер шага.

    Simscape

    Limit data pointsСнимите флажок.Когда вы уменьшаете размер шага решателя, количество точек данных, что симуляция генерирует увеличения. Очистите опцию, чтобы гарантировать, что вы собираете все данные, в которых вы нуждаетесь для оценки точности симуляции.

  2. Сконфигурируйте локальный решатель для симуляции фиксированного шага. В Гидравлической подсистеме Привода, в диалоговом окне Блока Configuration Решателя, выбирают Use local solver.

  3. Чтобы параметризовать стоимость симуляции, установите Nonlinear iterations на N.

Выполните Фиксированный Шаг, симуляцию фиксированных затрат

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

Бюджет времени выполнения симуляции для этого примера составляет четыре секунды. Для получения информации об определении бюджета времени выполнения для вашей модели смотрите Оценочные Затраты на Вычисление.

  1. Для первой симуляции задайте и глобальный и локальный размер шага как самое большое значение Tsmax из графика шага. Задайте относительно большое значение для размера шага для обоих решателей и три для количества нелинейных итераций для локального решателя.

    ts = 1e-2;
    tsG = 1e-2;
    N = 3;

  2. Выполните синхронизированный фиксированный шаг, симуляцию фиксированных затрат.

    tic; sim('ssc_hydraulic_actuator_HIL'); tSim1 = toc;
    time1 = max(tSim1);

  3. Извлеките данные для давления и времени симуляции от регистрируемого узла 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;

  4. Постройте результаты симуляции фигуре, которая содержит ссылочные результаты. Запишите прошедшее время в легенду фигуры.

    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');

    Прошедшее время отличается, потому что оно зависит от мгновенной вычислительной мощности компьютера, который запускает симуляцию. Прошедшие времена в легенде от симуляции на центральном процессоре 3.6 GHz Intel® с памятью на 16 Гбайт. Ваша легенда содержит прошедшее время для симуляции на вашем компьютере.

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

  5. Масштабируйте к точке перегиба, чтобы оценить точность результатов.

    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])

    Теоретические и эмпирические данные поддерживают ссылочные результаты. Точность результатов симуляции не приемлема, потому что решатель колеблется, прежде чем это будет сходиться на решении в справочных данных.

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

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

Настройте настройки решателя, чтобы улучшить точность

Можно обычно улучшать точность путем увеличения числа итераций или путем уменьшения размера шага.

  1. Попытайтесь улучшить точность путем увеличения числа итераций (N) к 10.

    N = 10;

  2. Запустите синхронизированную симуляцию.

    tic; sim('ssc_hydraulic_actuator_HIL'); tSim2 = toc;
    time2 = max(tSim2);
    
  3. Извлеките данные о времени симуляции и давление.

    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;

  4. Постройте график результатов.

    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');

    Симуляция достаточно быстра для симуляции в реальном времени, потому что потребовалось меньше времени, чтобы запуститься, чем четыре вторых бюджета на выполнение симуляции.

  5. Масштабируйте, чтобы оценить точность.

    figure(h2)
    axis([xZoomStart xZoomEnd yZoomStart yZoomEnd])

    В целом, результаты не намного более точны, чем результаты симуляции с меньшим количеством итераций.

  6. Попытайтесь улучшить точность путем уменьшения размера шага к 1e-3 секундам для локальных и глобальных решателей. Задайте 3 для количества итераций (N).

    ts = 1e-3;
    tsG = 1e-3;
    N = 3;
    
  7. Запустите синхронизированную симуляцию.

    tic; sim('ssc_hydraulic_actuator_HIL'); tSim3 = toc;
    time3 = max(tSim3);
    
  8. Извлеките данные о времени симуляции и давление.

    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;

  9. Постройте график результатов.

    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');

    Симуляция занимает больше времени, но быстро достаточно дана четыре вторых бюджета времени выполнения симуляции.

  10. Масштабируйте, чтобы оценить точность лучше.

    figure(h2)
    axis([xZoomStart xZoomEnd yZoomStart yZoomEnd])

Точность результатов приемлема. Для симуляции в реальном времени с измененной моделью используйте настройки решателя, которые обеспечили приемлемую скорость и точность:

  • Три нелинейных итерации

  • Глобальные и локальные размеры шага 1e-3 секунд

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

Когда вы находите комбинацию настроек решателя, которая обеспечивает достаточно точные результаты и скорость симуляции, которая является меньше, чем ваш бюджет времени выполнения, можно запустить модель на машине реального времени. Чтобы запустить вашу модель на машине реального времени, выполните рабочий процесс аппаратно-программного моделирования.

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

Если вы не можете сделать свою модель в реальном времени способный путем изменения осциллографа или точности модели, увеличить возможность вычислений в режиме реального времени. Для получения дополнительной информации смотрите Целевой компьютер Обновления и Симуляцию Частей Системы параллельно.

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

Больше о