Уменьшайте нулевые пересечения

Почему уменьшают нулевые пересечения?

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

Получите ссылочные результаты и постройте размер шага симуляции

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

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

  • Оцените точность своей модифицированной модели.

  1. Открыть модель, в MATLAB® командная строка, введите:

    model = 'ssc_pneumatic_rts_stiffness_redux'; 
    open_system(model)
    

  2. Симулируйте модель:

    sim(model)

  3. Сохраните данные к рабочей области.

    simlogRef = simlog;
    timeRef = tout;

  4. Постройте размер шага против времени симуляции.

    h1 = figure;
    semilogy(timeRef(1:end-1),diff(timeRef),'-x')
    title('Solver Step Size')
    xlabel('Time (s)')
    ylabel('Step Size (s)')

    Симуляция замедляется неоднократно в начале симуляции и во время t = ~1, 4, 5, 8, и 9 секунд.

  5. Масштабируйте, чтобы исследовать данные между временем t = 0,8 и 1,03 секунды.

    h1;
    xStart = 0;
    xEnd = 10;
    yStart = 0;
    yEnd = 10e0;
    xZoomStart1 = 0.8;
    xZoomEnd1 = 1.03;
    yZoomStart1 = 10e-20;
    yZoomEnd1 = 10e-1;
    axis([xZoomStart1 xZoomEnd1 yZoomStart1 yZoomEnd1])

    Синий x маркеры на рисунке указывают, что симуляция завершила выполнение шага. Окруженные маркеры указывают на размер очень небольшого шага и представляют события пересечения нулем. Размер шага уменьшается к приблизительно 10e-15 секунды для каждого обнаружения пересечения нулем.

  6. Чтобы получить ссылочные результаты для частоты вращения двигателя, откройте подсистему Измерений. Выберите блок Ideal Rotational Motion Sensor. С выбранным блоком используйте simscape.logging.findNode функционируйте, чтобы найти и сохранить узел, который содержит данные для W, сигнал для скорости вращения двигателя.

    nRef = simscape.logging.findNode(simlogRef,gcbh)
    

    nRef = 
    
      Node with properties:
    
                id: 'Ideal_Rotational_Motion_Sensor'
           savable: 1
        exportable: 0
               phi: [1×1 simscape.logging.Node]
                 C: [1×1 simscape.logging.Node]
                 R: [1×1 simscape.logging.Node]
                 A: [1×1 simscape.logging.Node]
                 w: [1×1 simscape.logging.Node]
                 t: [1×1 simscape.logging.Node]
                 W: [1×1 simscape.logging.Node]

  7. Используйте simscape.logging.plot функционируйте, чтобы построить ссылочные результаты для W.

    simscape.logging.plot(nRef.W);

Идентифицируйте и измените элементы тот нуль причины пересечения

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

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

    sscprintzcs(simlogRef)
    ssc_pneumatic_rts_stiffness_redux (42 signals, 50 crossings)
      +-Directional_5_way_valve (38 signals, 46 crossings)
      | +-Variable_Area_Orifice_1 (9 signals, 13 crossings)
      | +-Variable_Area_Orifice_2 (9 signals, 10 crossings)
      | +-Variable_Area_Orifice_3 (9 signals, 14 crossings)
      | +-Variable_Area_Orifice_4 (11 signals, 9 crossings)
      +-Pipe_1 (2 signals, 0 crossings)
      | +-Constant_Chamber (2 signals, 0 crossings)
      +-Pneumatic_Motor (2 signals, 4 crossings)
    
    Результаты показывают, что 50 обнаруженных нулевых пересечений происходят в Направленном блоке клапана с 5 путями (46 пересечений) и блоке Pneumatic Motor (4 пересечения).

  2. Используйте sscexplore функционируйте, чтобы открыть Проводник Результатов Simscape, чтобы взаимодействовать с регистрируемыми данными моделирования.

    sscexplore(simlogRef)

  3. В дереве результатов нажмите Pneumatic Motor, чтобы видеть результаты для двигателя.

    Большинство нулевых пересечений находится между t = 0 и t =1 секунда, когда другие сигналы в блоке являются близким нулем. Несколько остающихся нулевых пересечений происходят приблизительно в t = 5 секунд.

  4. Чтобы идентифицировать исходный код, который инициировал некоторые нулевые пересечения, выберите Directional 5-way valve> Variable Area Orifice 2> SimulationStatistics (ZeroCrossings)> zc_1 - 8 crossings. Щелкните по ссылке Pneumatic.Elements.VariableOrifice, которая появляется в ниже, левый угол окна.

    Исходный код для блока Pneumatic Motor открывается курсором в этом коде:

    % Area - limit to be greater than Area0
    AreaL = if Area<Area0, Area0 else Area end;
    

    Условный оператор, который ответственен за нулевые пересечения, связан с площадью постоянного отверстия.

  5. Сократите число нулевых пересечений путем уменьшения максимальной площади постоянного отверстия Направленного клапана с 5 путями. Откройте Направленное диалоговое окно блока клапана с 5 путями и задайте 995 для параметра Maximum orifice area (mm^2).

Анализируйте результаты модифицированной модели

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

  1. Симулируйте модель и распечатайте нулевые данные о пересечении.

    sim(model)
    sscprintzcs(simlog)

    ssc_pneumatic_rts_stiffness_redux (42 signals, 30 crossings)
      +-Directional_5_way_valve (38 signals, 26 crossings)
      | +-Variable_Area_Orifice_1 (9 signals, 7 crossings)
      | +-Variable_Area_Orifice_2 (9 signals, 6 crossings)
      | +-Variable_Area_Orifice_3 (9 signals, 8 crossings)
      | +-Variable_Area_Orifice_4 (11 signals, 5 crossings)
      +-Pipe_1 (2 signals, 0 crossings)
      | +-Constant_Chamber (2 signals, 0 crossings)
      +-Pneumatic_Motor (2 signals, 4 crossings)

    Общее количество нулевых пересечений уменьшилось с 50 до 30.

  2. Сравните результаты с помощью simscape.logging.plot функционируйте, чтобы построить ссылочные результаты и результаты модифицированной модели к одному графику:

    simscape.logging.plot...
        ({simlogRef.Measurements.Ideal_Rotational_Motion_Sensor.W...
        simlog.Measurements.Ideal_Rotational_Motion_Sensor.W}, ...
        'names', {'Reference','Modified'})

    Результаты выглядят одинаково.

  3. Масштабируйте управление для более внимательного рассмотрения в точке перегиба в t = ~ 5 секунд.

    xStart = 0;
    xEnd = 10;
    yStart = -400;
    yEnd = 400;
    xZoomStart1 = 4.75;
    xZoomEnd1 = 5.15;
    yZoomStart1 = -20;
    yZoomEnd1 = 30;
    axis([xZoomStart1 xZoomEnd1 yZoomStart1 yZoomEnd1])

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

    Чтобы улучшить скорость симуляции далее прежде, чем выполнить рабочий процесс симуляции в реальном времени с этой моделью, попробуйте:

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

    • Сокращение любой числовой жесткости, которая ответственна за небольшие шаги

Смотрите также

| | |

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

Больше о

Для просмотра документации необходимо авторизоваться на сайте